REST スキーマ のデータ構造について
このセクションでは、REST スキーマ を JSON を使用してどのように Cisco ACI Multi-Site で構造化するかについて説明します。データ構造は Multi-Site 間で一貫性のあるものです。Schema での最上位のエンティティはテンプレートです。テンプレートには、アプリケーション プロファイル (anp)、ブリッジ ドメイン (bd)、仮想ルーティングと転送 (vrf) など、より小規模なエンティティが含まれています。これらのエンティティも、他のより小さな構造から構成されます。このセクションでは、いくつかの上位レベルのエンティティまたは概念について説明します。
スキーマ
スキーマは、テンプレートのコンテナです。サイトが選択されると、それは自動的にスキーマに追加され、そのスキーマのテンプレートへのマッピングが行われます。次の例の API スニペットでは、スキーマの高レベルの属性が表示されます:
{
"id": "583c7c482501002501061985",
"displayName": "Schema 1",
"templates": [ ],
"sites": [ ],
}
テンプレート
テンプレートは、詳細な構造となっており、ユーザが Cisco APIC にプッシュするポリシーを含みます。テンプレートは、Schema のコンテキスト内に存在し、独自ではありません。ユーザは、新しいテンプレートのポリシーを必要に応じて定義することができます。複数のテンプレートがある場合、ユーザはポリシーを継承するテンプレートを選択できます。テンプレートの上位レベルの属性は次のとおりです。
-
name
-
displayName
-
tenantId
-
anps
-
vrfs
-
bds
-
contracts
-
filters
テンプレート内のキー インフラストラクチャは次のとおりです。
-
anps (アプリケーション ネットワーク プロファイル)
-
vrfs
-
bds
-
contracts
-
filters
エンティティ名が複数の場合 (vrfs、bds など) は、そのサブエンティティの配列が親エンティティの下でサポートされていることを意味し、エンティティの複数のエントリをテンプレートに含めることができます。
テンプレートの上位レベルの属性は、次の API スニペットの例に表示されます。
{
"name": "template1",
"displayName": "Template 1",
"tenantId": "592c7c482501002501061578",
"anps": [ ],
"vrfs": [ ],
"bds": [ ],
"contracts": [ ],
"filters": [ ],
}
名前
名前フィールドは、名前を持つエンティティのためのものです。これは、Cisco APIC でのポリシー名にマッピングされる名前です。これらの名前には制限が付けられており、Cisco APIC によって課された制限に基づいて決定されます。次に示すのは、Name API スニペットの例です:
"name": "template1",
displayName
[displayName] フィールドは、スペースと特殊文字がサポートされる、わかりやすい名前が表示される場所です。displayName は Cisco ACI Multi-Site UI で表示されるもので、一般に Multi-Site で編集できます。
次に示すのは、displayName API のスニペットの例です:
"displayName": "Template 1",
tenantID
tenantID はテナントの関連付けです。
次に、tenantID API のスニペットの例を示します:
"tenantId": "592c7c482501002501061578",
参照エンティティ
ref
ポリシーの [ref] フィールドは任意です。ただし、作成したシステムでエンティティを参照するには、これらの関係内の参照を指定する必要があります。ポリシー間の関係を提供するには、参照を指定する必要があります。
anpRef および vrfRef
anpRef はアプリケーションプロファイル (anp) を特定します。それに対してこれはシステムのサブ属性となります。anpRef は、anp の識別子です。anpRef サブ属性は通常、他のエンティティが特定のエンティティ内で参照される必要があるような状況で使用されます。テンプレート内のポリシーについてはref フィールドが一貫して生成されます。ユーザは、anpRef サブ属性の値を指定しません。システムは、どのポリシーに対してもanpRef を生成します。
入力を anpRef として提供することは必須ではありません。ただし、特定の Schema 内でポリシーを定義し、それをすぐに参照する場合には、anpRef を入力として提供することができます。
次の例では、anps 構造体内で anpRef を表示します:
"anps": [
{
"name": "anp1",
"displayName": "Anp 1",
"anpRef": "/schemas/583c7c482501002501061985/templates/template1/anps/anp1",
"epgs": [ <->]
}
],
次の例では、VRF 参照を表示します:
"vrfs": [
{
"name": "vrf1",
"displayName": "VRF 1",
"vrfRef": "/schemas/583c7c482501002501061985/templates/template1/vrfs/vrf1"
}
参照の生成
参照はあらゆるポリシーに対して生成されます。初めて保存したときに、参照が生成されます。ただし、Schema 内でポリシーを定義し、それをすぐに参照する必要がある場合には、生成するのを待たずに参照を指定することができます。
JSON の例では、左側のデータは、ローカル参照など、ユーザが提供する内容を示しています。操作が完了し、データが残っている場合には、システムは右側に表示されるデータを提供します。たとえば、永続化の後に、システムは参照のためのプレフィックスを生成します。これはシステムが生成したものとして右側に表示されます。
ローカルの参照
ある場合、post 操作への入力として供給される参照には、(システムが生成した参照に含まれるものとしての) Schema の ID は含まれません。ローカルの参照とは、この Schema 内のエンティティが、そのエンティティのパスにより参照されることを意味しています。このような場合、ID は参照として使用されず、参照には Schema ID は含まれません。
たとえば、契約を作成した後すぐに EPG 内で契約を参照する必要があるとします。システムはまだ契約への参照を生成していないため、生成済みの「ref」は利用できません。ただし、システム内にすでに存在するエンティティのパスへの契約を参照することで、このような場合でも関係を確認できます。
いったん設定すると、システムはローカル参照を絶対参照とします。システムは Schema ID を前付加します。これはローカル参照であり、同じ Schema で利用でき、そのために参照にすべての設定が行われるにもかかわらず成り立ちます。
次に示すのは、ローカル契約参照 API スニペットの例です:
{
"name": "epg1",
"displayName": "EPG 2",
"contractRelationships":
{
"contractRef": "contractRef": "/templates/template1/contracts/contract1",
"relationshipType": "consumer"
}
},
別の Schema を参照する
別の Schema からエンティティ(たとえば、プロバイダ コントラクト)を関連付けることができます。別の Schema から絶対参照に含まれる ID にプリペンドすることで、コントラクト参照を指定できます。これで別の Schema の別のポリシーを参照します。
別の Schema から参照する API スニペットの例を次に示します。
{
"name": "epg1",
"displayName": "EPG 2",
"contractRelationships":
{
"contractRef": "/schemas/590ca1811f000062006eef23/templates/template1/contracts/contract2",
"relationshipType": "provider"
}
},
![]() (注) |
の属性は、プロバイダとコンシューマです。 |
アプリケーション プロファイル
アプリケーション プロファイルは anp エンティティです。これにはサブ エンティティとして epg が含まれます。
次に示すのは、アプリケーション プロファイル エンティティ API のスニペットの例です:
"anps": [
{
"name": "anp1",
"displayName": "Anp 1",
"anpRef": "/schemas/583c7c482501002501061985/templates/template1/anps/anp1",
"epgs": [
{
"name": "epg1",
"displayName": "EPG 1",
"epgRef": "/schemas/583c7c482501002501061985/templates/template1/anps/anp1/epgs/epg1",
"contractRelationships": [
{
"contractRef": "/schemas/583c7c482501002501061985/templates/template1/contracts/contract1",
"relationshipType": "provider"
}
],
"subnets": [ {
"ip": "192.168.132.1/24",
"description": "Subnet for IT department",
"scope" : "private"
"shared": true
}, {
"ip": "192.168.133.1/24",
"description": "Subnet for sales department",
"scope" : "public"
"shared": false
}],
"uSegEpg" : true,
"uSegAttrs" : [ {
"name" : "IP1",
"displayName" : "...",
"description" : "... ",
"type" : "ip",
"fvSubnet" : true,
"value" : "0.0.0.0"
}, {
"name" : "IP2",
"description" : "... ",
"type" : "ip",
"fvSubnet" : false,
"value" : "192.168.132.1"
}, {
"name" : "MAC",
"description" : "...",
"type" : "mac",
"value" : "aa:bb:cc:dd:ee:ff"
}, {
"name" : "VM Name",
"description" : "...",
"type" : "vm-name",
"operator" : "equals | contains | startsWith | endsWith",
"value" : "..."
}, {
"name" : "VM Data Center",
"description" : "... (optional)",
"type" : "rootContName",
"operator" : "...",
"value" : "..."
}, {
"name" : "VM Hypervisor Identifier",
"description" : "... (optional)",
"type" : "hv",
"operator" : "...",
"value" : "..."
}, {
"name" : "VmOperatingSystem",
"description" : "...",
"type" : "guest-os",
"operator" : "...",
"value" : "..."
}, {
"name" : "VM Tag",
"description" : "... ",
"type" : "tag",
"operator" : "...",
"category" : "...",
"value" : "..."
}, {
"name" : "Vm Identifier",
"description" : "... ",
"type" : "vm",
"operator" : "...",
"value" : "..."
}, {
"name" : "Vm Vmm Domain",
"description" : "...",
"type" : "domain",
"operator" : "...",
"value" : "..."
}, {
"name" : "Vm Vnic Dn",
"description" : "... (optional)",
"type" : "vnic",
"operator" : "...",
"value" : "..."
} ],
"bdRef": "/schemas/583c7c482501002501061985/templates/template1/bds/bd1"
},
]
}
],
EPG
1 つの EPG は、プロバイダまたはコンシューマとのコントラクト関係を通じて、複数のコントラクトに関連付けることができます。EPG はコントラクトやブリッジド メイン (bds) に関連しています。
epg API スニペットの例を次に示します。
"epgs": [
{
"name": "epg1",
"displayName": "EPG 1",
"epgRef": "/schemas/583c7c482501002501061985/templates/template1/anps/anp1/epgs/epg1",
"contractRelationships": [
{
"contractRef": "/schemas/583c7c482501002501061985/templates/template1/contracts/contract1",
"relationshipType": "provider|consumer"
}
],
"subnets": [ {
"ip": "192.168.132.1/24",
"description": "Subnet for IT department",
"scope" : "private"
"shared": true
}, {
"ip": "192.168.133.1/24",
"description": "Subnet for sales department",
"scope" : "public"
"shared": false
}],
"uSegEpg" : true,
"uSegAttrs" : [ {
"name" : "IP1",
"displayName" : "...",
"description" : "... ",
"type" : "ip",
"fvSubnet" : true,
"value" : "0.0.0.0"
}, {
"name" : "IP2",
"description" : "... ",
"type" : "ip",
"fvSubnet" : false,
"value" : "192.168.132.1"
}, {
"name" : "MAC",
"description" : "...",
"type" : "mac",
"value" : "aa:bb:cc:dd:ee:ff"
}, {
"name" : "VM Name",
"description" : "...",
"type" : "vm-name",
"operator" : "equals | contains | startsWith | endsWith",
"value" : "..."
}, {
"name" : "VM Data Center",
"description" : "... (optional)",
"type" : "rootContName",
"operator" : "...",
"value" : "..."
}, {
"name" : "VM Hypervisor Identifier",
"description" : "... (optional)",
"type" : "hv",
"operator" : "...",
"value" : "..."
}, {
"name" : "VmOperatingSystem",
"description" : "...",
"type" : "guest-os",
"operator" : "...",
"value" : "..."
}, {
"name" : "VM Tag",
"description" : "... ",
"type" : "tag",
"operator" : "...",
"category" : "...",
"value" : "..."
}, {
"name" : "Vm Identifier",
"description" : "... ",
"type" : "vm",
"operator" : "...",
"value" : "..."
}, {
"name" : "Vm Vmm Domain",
"description" : "...",
"type" : "domain",
"operator" : "...",
"value" : "..."
}, {
"name" : "Vm Vnic Dn",
"description" : "... (optional)",
"type" : "vnic",
"operator" : "...",
"value" : "..."
} ],
"bdRef": "/schemas/583c7c482501002501061985/templates/template1/bds/bd1"
},
]
![]() (注) |
の属性は、「equals」、「contains」、「startsWith」、「endsWith」です。 |
ブリッジ ドメイン
ブリッジ ドメイン (bds) には、マルチキャストのフラッディングなどの属性があります。
次に示すのは、ブリッジ ドメイン API スニペットの例です:
"bds": [
{
"name": "bd1",
"displayName": "BD 1",
"bdRef": "/schemas/583c7c482501002501061985/templates/template1/bds/bd1",
"l3UnknownMulticastFlooding": "opt-flood",
"intersiteBumTrafficAllow": true,
"multiDestinationFlooding": "encap-flood",
"l2UnknownUnicast": "flood",
"l2Stretch": true,
"subnets": [ ... ],
"vrfRef": "/schemas/583c7c482501002501061985/templates/template1/vrfs/vrf1"
}
],
![]() (注) |
|
コントラクト
コントラクト API スニペットの例を次に示します。
"contracts": [
{
"name": "contract1",
"displayName": "Contract 1",
"filterRelationships": [
{
"filterRef": "/templates/template1/filters/filter1",
"directives": [
"log|none"
]
}
],
"scope": "global|tenant|context|application-profile"
},
{
"name": "contract2",
"displayName": "Contract 2",
"scope": "global|tenant|context|application-profile"
}
],
![]() (注) |
の属性は、「global」、「tenant」、「context」、「application-profile」です。 |
フィルタ
次に示すのはフィルタ API スニペットの例です:
"filters": [
{
"name": "filter1",
"displayName": "Filter 1",
"description": "",
"entries": [
{
"name": "filterEntry11",
"displayName": "Filter Entry 11",
"description": "",
"etherType": "ip",
"ipProtocol": "icmp"
},
{
"name": "filterEntry12",
"displayName": "Filter Entry 12",
"description": "",
"etherType": "ip",
"ipProtocol": "udp",
"matchOnlyFragments": false,
"sourceFrom": "dns",
"sourceTo": "http",
"destinationFrom": "dns",
"destinationTo": "80"
}
]
},
{
"name": "filter2",
"displayName": "Filter 2",
"description": "",
"entries": [
{
"name": "filterEntry21",
"displayName": "Filter Entry 21",
"description": "",
"etherType": "arp|fcoe|ip|mac_security|mpls_ucast|trill|unspecified",
"arpFlag": "request|reply|unspecified",
"ipProtocol": "eigrp|egp|icmp|icmpv6|igmp|igp|l2tp|ospfigp|pim|tcp|udp|unspecified",
"matchOnlyFragments": false,
"stateful": false,
"sourceFrom": "dns|ftp-data|http|https|pop3|rtsp|smtp|unspecified|[0..65535]",
"sourceTo": "dns|ftp-data|http|https|pop3|rtsp|smtp|unspecified|[0..65535]",
"destinationFrom": "dns|ftp-data|http|https|pop3|rtsp|smtp|unspecified|[0..65535]",
"destinationTo": "dns|ftp-data|http|https|pop3|rtsp|smtp|unspecified|[0..65535]",
"tcpSessionRules": [
"acknowledgement|established|finish|synchronize|reset|unspecified",
"acknowledgement|established|finish|synchronize|reset|unspecified"
]
サイト
各サイトは、特定のテンプレートに関連付けられています。特定のテンプレートからのポリシーは、サイトとテンプレートの関連付けに基づいて、サイトにプッシュされます。
siteId は、Cisco ACI Multi-Site で定義されたサイトをポイントする、内部的な識別子です。
一部の属性はサイト固有の属性で、特定のサイトのために定義されます。たとえば、テンプレート内のエンティティに対するサイト固有の属性です。
サイト固有の属性は次のとおりです:
-
epg には domainAssociations および staticPorts があります。
-
bds には subnet があります。
-
contracts には serviceGraphTemplate があります。
次に示すのは、サイト API のスニペットの例です:
"sites": [
{
"siteId": "58202f7066e6e10001c41236",
"templateName": "template1",
"bds": [
{
"bdRef": "/templates/template1/bds/bd1",
"subnets": [ ... ]
}
]
},
{
"siteId": "69202f7066e6e10001c41247",
"templateName": "template1",
"anps": [
{
"anpRef": "/templates/template1/anps/anp1",
"epgs": [
{
"epgRef": "/templates/template1/anps/anp1/epgs/epg1",
"domainAssociations": [
{
"dn": "uni/vmmp-VMware/dom-TestVMMDomain-DoNotDelete",
"domainType": "vmmDomain",
"deployImmediacy": "On Demand|Immediate",
"resolutionImmediacy": "On Demand|Immediate|Pre-provision",
"allowMicroSegmentation": true,
"allowPromiscuous": true,
"macChanges": false,
"allowForgedTransmits": true,
"delimiter": "delimiter"
},
{
"dn": "uni/phys-testPhysicalDomain-DoNotDelete",
"domainType": "physicalDomain",
"deployImmediacy": "On Demand|Immediate",
"resolutionImmediacy": "On Demand|Immediate|Pre-provision"
},
{
"dn": "uni/l2dom-TestL2Domain-DoNotDelete",
"domainType": "l2ExtDomain",
"deployImmediacy": "On Demand|Immediate",
"resolutionImmediacy": "On Demand|Immediate|Pre-provision"
},
{
"dn": "uni/l3dom-TestL3Domain-DoNotDelete",
"domainType": "l3ExtDomain",
"deployImmediacy": "On Demand|Immediate",
"resolutionImmediacy": "On Demand|Immediate|Pre-provision"
},
{
"dn": "uni/fc-TestFibreChannelDomain",
"domainType": "fibreChannelDomain",
"deployImmediacy": "On Demand|Immediate",
"resolutionImmediacy": "On Demand|Immediate|Pre-provision"
}
],
"staticPorts": [
{
"type" : "port",
"path" : "topology/pod-1/paths-101/pathep[eth1/11]",
"portEncapVlan": 10,
"microSegVlan" : 8,
"deploymentImmediacy" : "immediate|lazy",
"mode" : "regular|native|untagged"
}, {
"type" : "VPC",
"path" : "Topology/pod-1/protpaths-101-102/pathep[NFS-Storage]",
"portEncapVlan": 10,
"microSegVlan" : 8,
"deploymentImmediacy" : "Immediate",
"mode" : "Access"
}, {
"type" : "DPC",
"path" : "...",
"portEncapVlan": 9,
"microSegVlan" : 8,
"deploymentImmediacy" : "OnDemand",
"mode" : "AccessUntagged"
}
],
"staticLeafs": [
{
"path" : "topology/pod-1/node-201",
"portEncapVlan": 10
}
]
}
]
}
],