すべてのサービスグラフコネクタをサポートする標準化された JSON 共通データセット
TSOM アーキテクチャを使用して、統一されたスキーマと再利用可能な ETL ロジックを使用して、標準化されたサービスグラフコネクタをサポートします。これにより、新しいコネクタのオンボーディング時間が短縮され、CMDB との統合が簡素化されます。
1. 共通の JSON スキーマを定義する
TNI スキーマに準拠する単一の JSON 形式に合わせて、すべてのサービスグラフコネクタの出力を標準化します。
次の点を確認してください。
- コレクターまたはアダプターに変換ロジックを実装して、共通スキーマでデータを出力します。
- 必ず次のことを実行します。
- スロットオンスロットまたはカードオンカード階層は除外されます。
- 論理インターフェイスは、
virtual=trueで明確にマークされます。 - 機器タイプはモデルクラスのマッピングに合わせて調整されます。
注:
スキーマは、TNI 変更への実行時の適応性をサポートする必要があります (利用可能な場合)。
すべての TSOM サービスグラフコネクタをサポートする JSON スキーマ共通データセットは次のとおりです。
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Telco Generic Schema",
"version": "2.0.1",
"oneOf": [
{
"type": "object",
"properties": {
"logical_composites": {
"type": "array",
"items": {
"$ref": "#/$defs/logical_composite"
}
}
},
"required": [
"logical_composites"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"devices": {
"type": "array",
"items": {
"$ref": "#/$defs/device"
}
}
},
"required": [
"devices"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"logical_connections": {
"type": "array",
"items": {
"$ref": "#/$defs/logical_connection"
}
}
},
"required": [
"logical_connections"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"port_relations": {
"type": "array",
"items": {
"$ref": "#/$defs/port_relation"
}
}
},
"required": [
"port_relations"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"logical_connection_relations": {
"type": "array",
"items": {
"$ref": "#/$defs/logical_connection_relation"
}
}
},
"required": [
"logical_connection_relations"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"numbers": {
"type": "array",
"items": {
"$ref": "#/$defs/number"
}
}
},
"required": [
"numbers"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"topologies": {
"type": "array",
"items": {
"$ref": "#/$defs/network_topology"
}
}
},
"required": [
"topologies"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"topology_relations": {
"type": "array",
"items": {
"$ref": "#/$defs/network_topology_relation"
}
}
},
"required": [
"topology_relations"
],
"additionalProperties": false
}
],
"$defs": {
"keyRef": {
"type": "object",
"properties": { "key": { "type": "string" }
},
"required": [ "key" ],
"additionalProperties": false
},
"optionalKeyRef": { "type": [ "object", "null" ],
"properties": {
"key": { "type": "string" }
},
"additionalProperties": false
},
"value": {
"type": "object",
"properties": {
"from": { "type": [ "integer" ], "default": 0, "minimum": 0 },
"to": { "type": [ "integer" ], "default": 0, "minimum": 0 }
},
"required": [ "from", "to" ],
"additionalProperties": false
},
"logical_composite": {
"type": "object",
"properties": {
"class": { "type": "string", "enum": [ "logical_composite" ] },
"key": { "type": "string" },
"name": { "type": [ "string", "null" ] },
"description": { "type": [ "string", "null" ] },
"devices": { "type": "array", "items": { "$ref": "#/$defs/keyRef" } },
"power_units": { "type": "array", "items": { "$ref": "#/$defs/pdu" } },
"fan_shelves": { "type": "array", "items": { "$ref": "#/$defs/fan_shelf" } } },
"required": [ "key", "name" ]
},
"pdu": {
"type": "object",
"properties": {
"class": { "type": "string", "enum": [ "pdu" ] },
"key": { "type": "string" },
"name": { "type": [ "string", "null" ] },
"description": { "type": [ "string", "null" ] },
"model_name": { "type": [ "string", "null" ] },
"model_number": { "type": [ "string", "null" ] },
"unit_position": { "type": [ "integer", "null" ], "minimum": 1 },
"slots": { "type": "array", "items": { "$ref": "#/$defs/slot" } }
},
"required": [ "key", "name" ]
},
"fan_shelf": {
"type": "object",
"properties": {
"class": { "type": "string", "enum": [ "fan_shelf" ] },
"key": { "type": "string" },
"name": { "type": [ "string", "null" ] },
"description": { "type": [ "string", "null" ] },
"slots": { "type": "array", "items": { "$ref": "#/$defs/slot" } }
},
"required": [ "key", "name" ]
},
"device": {
"type": "object",
"properties": {
"class": { "type": "string", "enum": [ "device" ] },
"key": { "type": "string" },
"name": { "type": [ "string", "null" ] },
"description": { "type": [ "string", "null" ] },
"ip_address": { "type": [ "string", "null" ] },
"mac_address": { "type": [ "string", "null" ] },
"serial_number": { "type": [ "string", "null" ] },
"model_name": { "type": [ "string", "null" ] },
"model_number": { "type": [ "string", "null" ] },
"manufacturer": { "type": [ "string", "null" ] },
"firmware_version": { "type": [ "string", "null" ] },
"slots": { "type": "array", "items": { "$ref": "#/$defs/slot" } },
"ports": { "type": "array", "items": { "$ref": "#/$defs/port" } } },
"required": [ "key", "name", "serial_number" ]
},
"slot": {
"type": "object",
"properties": {
"class": { "type": "string", "enum": [ "slot" ] },
"key": { "type": "string" },
"name": { "type": [ "string", "null" ] },
"description": { "type": [ "string", "null" ] },
"model_name": { "type": [ "string", "null" ] },
"model_number": { "type": [ "string", "null" ] },
"manufacturer": { "type": [ "string", "null" ] },
"unit_position": { "type": [ "integer", "null" ], "minimum": 1 },
"cards": { "type": "array", "items": { "$ref": "#/$defs/card" } }
},
"required": [ "key", "name" ]
},
"card": {
"type": "object",
"properties": {
"class": { "type": "string", "enum": [ "card" ] },
"key": { "type": "string" },
"name": { "type": [ "string", "null" ] },
"description": { "type": [ "string", "null" ] },
"mac_address": { "type": [ "string", "null" ] },
"serial_number": { "type": [ "string", "null" ] },
"firmware_version": { "type": [ "string", "null" ] },
"model_name": { "type": [ "string", "null" ] },
"model_number": { "type": [ "string", "null" ] },
"manufacturer": { "type": [ "string", "null" ] },
"unit_position": { "type": [ "integer", "null" ], "minimum": 1 },
"slots": { "type": "array", "items": { "$ref": "#/$defs/slot" } },
"ports": { "type": "array", "items": { "$ref": "#/$defs/port" } }
},
"required": [ "key", "name" ]
},
"port": {
"type": "object",
"properties": {
"class": { "type": "string", "enum": [ "port" ] },
"key": { "type": "string" },
"name": { "type": [ "string", "null" ] },
"description": { "type": [ "string", "null" ] },
"model_name": { "type": [ "string", "null" ] },
"ip_address": { "type": [ "string", "null" ] },
"virtual": { "type": "boolean", "default": false },
"unit_position": { "type": [ "integer", "null" ], "minimum": 1 },
"bandwidth_name": { "type": [ "string", "null" ] },
"bandwidth_group": { "type": [ "string", "null" ] },
"bandwidth": { "type": [ "integer", "null" ], "minimum": 0 },
"mtu_size": { "type": [ "integer", "null" ], "minimum": 0 }
},
"required": [ "key", "name" ]
},
"number": {
"type": "object",
"properties": {
"class": { "type": "string", "enum": [ "number" ] },
"key": { "type": "string" },
"name": { "type": [ "string", "null" ] },
"related_ci_type": { "type": "string", "enum": [ "Network Interface", "Physical Connection", "Logical Connection", "Equipment", "Topology" ] },
"related_ci": { "$ref": "#/$defs/keyRef" },
"type": { "type": "string", "enum": [ "vlan_range", "vlan_subrange", "vlan", "lag_range", "lag" ] },
"vlan_type": { "type": "string", "enum": [ "inner", "outer" ] },
"value": { "$ref": "#/$defs/value" }
},
"required": [ "key", "name", "type", "related_ci_type", "related_ci", "value" ] },
"logical_connection": {
"type": "object",
"properties": {
"class": { "type": "string", "enum": [ "logical_connection" ] },
"key": { "type": "string" },
"name": { "type": [ "string", "null" ] },
"description": { "type": [ "string", "null" ] },
"model_name": { "type": [ "string", "null" ] },
"bandwidth_group": { "type": [ "string", "null" ] },
"bandwidth_name_a_to_z": { "type": [ "string", "null" ] },
"bandwidth_name_z_to_a": { "type": [ "string", "null" ] },
"bandwidth_a_to_z": { "type": [ "integer", "null" ], "minimum": 0 },
"bandwidth_z_to_a": { "type": [ "integer", "null" ], "minimum": 0 },
"equipment_a": { "$ref": "#/$defs/optionalKeyRef" },
"equipment_z": { "$ref": "#/$defs/optionalKeyRef" },
"port_a": { "$ref": "#/$defs/keyRef" },
"port_z": { "$ref": "#/$defs/keyRef" }
},
"required": [ "key", "name", "equipment_a", "equipment_z", "port_a", "port_z" ]
},
"port_relation": {
"type": "object",
"properties": {
"class": { "type": "string", "enum": [ "port_relation" ] },
"parent": { "$ref": "#/$defs/keyRef" },
"child": { "$ref": "#/$defs/keyRef" }
},
"required": [ "parent", "child" ]
},
"logical_connection_relation": {
"type": "object",
"properties": {
"class": { "type": "string", "enum": [ "logical_connection_relation" ] },
"sequence": { "type": [ "integer", "null" ], "minimum": 1 },
"route": { "type": [ "integer", "null" ], "minimum": 1 },
"parent": { "$ref": "#/$defs/keyRef" },
"child": { "$ref": "#/$defs/keyRef" }
},
"required": [ "parent", "child" ]
},
"network_topology": {
"type": "object",
"properties": {
"class": { "type": "string", "enum": [ "network_topology" ] },
"key": { "type": "string" },
"name": { "type": "string" },
"model_name": { "type": [ "string", "null" ] },
"devices": { "type": "array", "items": { "key": "#/$defs/optionalKeyRef" } },
"logical_connections": { "type": "array", "items": { "key": "#/$defs/optionalKeyRef" } }
},
"required": [ "key", "name", "devices", "logical_connections" ]
}
}
}
2. ETLから接続性を切り離す
デバイスインタラクションロジックを変換ロジック (ETL 取り込み) から分離することで、柔軟性を確保します。ユーザーは、ETL ロジックとは無関係に独自のコレクターを開発できます。
次の点を確認してください。
- 統合スキーマへの接続とデータ変換にのみ焦点を当てるようにコレクターを設計します。
- EMS / NMSアダプター(Atrinetなどのサードパーティアダプターを含む)を使用または再利用します。
- 標準化されたデータを ServiceNow インポートセットにプッシュします。
3. CMDB 更新用の汎用 ETL を構成する
単一の再利用可能な ETL を使用して、すべての標準化されたインポートセットを処理し、CMDB を正確に更新します。
次の点を確認してください。
- インポートセットに標準化された JSON 形式のデータが含まれていることを検証します。
- TSOM 汎用 ETL は、以下の目的で使用します。
- エンティティタイプ (スロット、カード、論理インターフェイスなど) を検出します。
- モデルマッピングロジックに基づいて、各エンティティを適切な CI クラスにマッピングします。
- 該当する場合は、[インベントリカテゴリ] を含むフィールドに入力します。
特別処理:
- 論理インターフェイス→ポートテーブル (
virtual=true) - 論理接続→論理接続テーブル
- PDU テーブル→ PDU カード
- 設備→ モデルベース CI クラス (複数存在する場合は最新のマッピング)
4. マルチシャーシおよび複合デバイスのサポートを設定する
マルチシャーシルーターなどの複雑なデバイスを適切な CMDB 関係でモデル化します。
次の点を確認してください。
- 論理複合構成を使用して、ルーター + PDU などのグループ化されたエンティティを表します。
- 個々のコンポーネント(ファン、管理、スロット)をそれぞれの階層で定義します。
- TNI モデリングガイダンスに従って各エンティティをマッピングします。
例:7750-2s マルチシャーシ デバイスの場合:
- 論理コンポジット→にはルーターとPDUが含まれています
- PDU →には、スロット→カード→サブスロットが含まれています
5. インストールに基づいて TNI エンティティの作成を有効にする
不必要なレコードを作成することなく、TNI 標準との整合性を確保します。
次の点を確認してください。
- TNI がインストールされている場合:
- 検出された CI ごとに TNI エンティティを自動的に作成します。
- インベントリカテゴリを適切に設定します (例:「論理接続」、「インターフェイス」)。
- TNI がインストールされていない場合:孤立したレコードや無効なレコードを避けるために、TNI エンティティの作成をスキップします。