Skip navigation
2019

今年も、日本の vExpert 有志による Advent Calendar をやります。

この投稿は、vExperts Advent Calendar 2019 - Adventar の 1日目です。

1日目なので、多くの人が利用しているであろう vCenter Server にかかわる Tips を紹介します。

 

最近の vCenter Server の「vSphere Client」について。

これまで、vCenter Server(以降は vCenter)で仮想化基盤を管理するツールは何度か刷新されています。

簡単にまとめると、つぎのようになります。

  • もともと C#版の「vSphere Client」があった。(vSphere 6.0 まで)
  • Flash(FLEX)を利用する「vSphere Web Client」が vSphere 5.1 で登場したが、6.7 より後は廃止予定。
  • HTML5 版の「vSphere Client」が vSphere 6.5 で登場。基本的に vCenter 6.5 以降ではこの vSphere Client を利用する。
    これまでの改善の様子: vSphere Client の機能の更新

 

もう廃止される予定の vSphere Web Client については、

vCenter 6.7 U3 では vSphere Web Client のリンクに赤字で「廃止」と明記されました。

(とはいっても、vCenter 6.7 U3 でも、まだ使用できます)

vc-motd-00.png

 

vCenter 6.7 U3 の vSphere Web Client / vSphere Client のログイン画面です。

この画面は vSphere Web Client / vSphere Client で共通です。

vc-motd-01.png

 

vSphere Web Client にログインすると、

vSphere Client へ誘導するメッセージが表示されています。

vc67u3-ngc-01.png

 

一方、HTML5 版の vSphere Client のデプロイ直後の vCenter の画面です。

最近の VMware 製品の Web UI は、Clarity というフレームワークを利用しており、

だいたい統一感のあるデザインになっています。

vc-motd-02.png

 

今回の vCenter 環境について。

前掲のスクリーンショット「ビルド 14792544」と表示されているので、

2019年12月01日の時点で最新バージョンである「vCenter Appliance 6.7 Update 3a (6.7.0.41000)」です。

vCenter のバージョンとビルド番号は、下記 KB の「Client/MOB/vpxd.log」で確認できます。

 

Build numbers and versions of VMware vCenter Server (2143838)

https://kb.vmware.com/s/article/2143838

 

ちなみに今回の vCenter は、昨年のアドベントカレンダー投稿とおなじく CLI でデプロイしています。

 

昨年の Advent Calendar の投稿:

vCenter 6.7 u1 の HTML5 vSphere Client をクリスマス風にしてみる。

 

今年の JSON: 最近、便利なので "__comments" にデプロイのコマンドラインをメモしています。

lab-vcsa-67u3.json · GitHub

 

vCenter の「今日のメッセージ」設定。

それでは、今日時点で最新の vSphere Client での Tips です。

vSphere による仮想化基盤では、システム管理者は頻繁に vSphere Client にログインするはずです。

そこで、システム管理者に対してメッセージを贈ってみます。

 

製品ドキュメント:

他のログイン ユーザーへのメッセージの送信

 

vCenter のインベントリにて、

vCenter → 「設定」 → 「今日のメッセージ」を開いて、「編集」ボタンをクリックします。

そして、「今日のメッセージの編集」にメッセージを記入して「OK」をクリックします。

vc-motd-03.png

 

vSphere Client から、一度ログアウトします。

vc-motd-04.png

 

vSphere Client にログインしなおすと、画面上部の青帯に、メッセージが表示されています。

(しかし、そんなに目立たない気もします。)

このメッセージは vCenter の「詳細設定」にある vpxd.motd に設定されます。

motd は、message of the day の略です。

vc-motd-05.png

ちなみに、このパラメータは PowerCLI / API だと Read Only で設定できなそうです。

あと、etc.motd のほうは vSphere Client ではなくコンソール / SSH のログイン メッセージ設定です。

 

vCenter Single Sign-on のメッセージ設定。

ただこれでは、メッセージに気づかないユーザもいるかもしれません。

そこで、もうすこしインパクトの強いメッセージ発信をしてみます。

 

先ほどのメッセージは、「vCenter Server」のもつメッセージ機能でした。

ここからは、vCenter の別コンポーネントである「Platform Services Controller」(PSC)のもつ

vCenter Single Sign-on のメッセージ機能を利用してみます。

 

製品ドキュメント:

ログイン メッセージの管理

 

PSC の設定は、vSphere Client の「管理」メニューから実施します。

vc-motd-10.png

 

Single Sign-On 配下の「設定」→「ログイン メッセージ」タブで、

「編集」をクリックします。

vc-motd-11.png

 

「ログイン メッセージの表示」を On にして、

「ログイン メッセージ」と「ログインメッセージの詳細」を記入してから「保存」します。

vc-motd-12.png

 

そして vSphere Client をログアウトすると・・・

vc-motd-13.png

 

vSphere Client の(PSC による)ログイン画面に、メッセージが表示されます。

vc-motd-14.png

 

メッセージのリンクをクリックすると、メッセージの詳細が表示されます。

・・・ただ、これだけだと、先ほどのメッセージより主張が弱いと感じるかたも多いと思います。

vc-motd-15.png

 

さらに、PSC のメッセージ機能では「承諾チェックボックス」を設置できます。

なお、Advent Calendar 紹介メッセージでこの設定を有効にするのはアレなので、ここからはメッセージを変更しています。

検証環境などでありがちな「このラボは2019/12/25に廃止予定です。」といったメッセージを設定しました。

vc-motd-16.png

 

これでログイン画面には、メッセージだけでく、

チェックを On にしないとログインできなくなる「次に同意します」チェック ボックスが表示されます。

チェック ボックスを Off にしたままだと、下記のように追加でメッセージが表示され、ログインできません。

vc-motd-18.png

 

「次に同意します」チェックボックスの隣のメッセージをクリックすると、

さきほどと同様に、メッセージの詳細が表示されます。

vc-motd-19.png

 

チェックを On にすることで、ログインできるようになります。

vc-motd-20.png

 

メッセージを工夫すれば、さまざまな使い道がありそうです。

vc-motd-21.png

 

以上、vCenter の Tips でした・・・

明日の vExperts Advent Calendar 2019 - Adventar は、Kaneda Naoyuki さんです。よろしくお願いします。

NSX-T の Policy API の「Hierarchical API」で、ネットワークの作成/削除をしてみます。

 

前回の投稿はこちら。

NSX-T の Policy API をためす。Part.4(Hierarchical API での GET 編)

 

JSON ファイルの用意。

今回は、これまでの投稿で何度か構築したラボ ネットワーク環境を Hierarchical API  で作成してみます。

 

つぎの一連の投稿で作成したネットワークと、同様のものです。

前提として、前回までに作成/確認したオブジェクトは、ひととおり削除してあります。

自宅ラボで NSX-T 2.5 環境を構築する。Simplified UI 編。Part.1 ※Web UI で作成。

NSX-T の Policy API をためす。Part.3(オブジェクト作成編) ※Policy API での別方法で作成。

 

まず、前回に Hierarchical API で GET した情報から、

必要な部分のみを残した JSON ファイルを用意しておきます。

NSX-T の Policy API をためす。Part.4(Hierarchical API での GET 編)

 

JSON ファイルはある程度あつかいやすいように、3つに分けてみました。

より多く分割、もしくは少ない JSON ファイルにまとめることも可能です。

 

ext-vlan.json ファイルの内容。

{

  "resource_type": "Infra",

  "id": "infra",

  "children": [

    {

      "Segment": {

        "id": "seg-vlan-0200",

        "display_name": "seg-vlan-0200",

        "type": "DISCONNECTED",

        "vlan_ids": [

          "200"

        ],

        "transport_zone_path": "/infra/sites/default/enforcement-points/default/transport-zones/4954eeca-decb-487a-8582-b011d60ba19f",

        "resource_type": "Segment",

        "marked_for_delete": false

      },

      "resource_type": "ChildSegment",

      "marked_for_delete": false

    }

  ]

}

 

tier0.json ファイルの内容。

{

  "resource_type": "Infra",

  "id": "infra",

  "children": [

    {

      "Tier0": {

        "id": "t0-gw-01",

        "display_name": "t0-gw-01",

        "ha_mode": "ACTIVE_STANDBY",

        "failover_mode": "NON_PREEMPTIVE",

        "transit_subnets": [

          "100.64.0.0/16"

        ],

        "internal_transit_subnets": [

          "169.254.0.0/28"

        ],

        "children": [

          {

            "LocaleServices": {

              "id": "8ad9e401-f41e-4227-8445-36b1092c76a3",

              "display_name": "8ad9e401-f41e-4227-8445-36b1092c76a3",

              "children": [

                {

                  "Tier0Interface": {

                    "id": "t0-uplink-01",

                    "display_name": "t0-uplink-01",

                    "edge_path": "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae/edge-nodes/8e1b5bda-e116-49da-8b4b-bbb2961a7900",

                    "segment_path": "/infra/segments/seg-vlan-0200",

                    "type": "EXTERNAL",

                    "subnets": [

                      {

                        "ip_addresses": [

                          "192.168.200.2"

                        ],

                        "prefix_len": 24

                      }

                    ],

                    "resource_type": "Tier0Interface",

                    "marked_for_delete": false

                  },

                  "resource_type": "ChildTier0Interface",

                  "marked_for_delete": false

                }

              ],

              "resource_type": "LocaleServices",

              "marked_for_delete": false

            },

            "resource_type": "ChildLocaleServices",

            "marked_for_delete": false

          },

          {

            "PolicyNat": {

              "id": "USER",

              "display_name": "USER",

              "nat_type": "USER",

              "children": [

                {

                  "PolicyNatRule": {

                    "resource_type": "PolicyNatRule",

                    "id": "b1a7aa47-e299-4369-a06b-3d10d48e8c68",

                    "display_name": "t0-snat-01",

                    "sequence_number": 100,

                    "action": "SNAT",

                    "source_network": "172.16.0.0/16",

                    "service": "",

                    "translated_network": "192.168.200.2",

                    "scope": [],

                    "enabled": true,

                    "marked_for_delete": false

                  },

                  "resource_type": "ChildPolicyNatRule",

                  "marked_for_delete": false

                }

              ],

              "resource_type": "PolicyNat",

              "marked_for_delete": false

            },

            "resource_type": "ChildPolicyNat",

            "marked_for_delete": false

          },

          {

            "StaticRoutes": {

              "id": "t0-route-01",

              "display_name": "t0-route-01",

              "network": "0.0.0.0/0",

              "next_hops": [

                {

                  "ip_address": "192.168.200.1",

                  "admin_distance": 1

                }

              ],

              "resource_type": "StaticRoutes",

              "marked_for_delete": false

            },

            "resource_type": "ChildStaticRoutes",

            "marked_for_delete": false

          }

        ],

        "resource_type": "Tier0",

        "marked_for_delete": false

      },

      "resource_type": "ChildTier0",

      "marked_for_delete": false

    }

  ]

}

 

tier1.json ファイルの内容。

{

  "resource_type": "Infra",

  "id": "infra",

  "children": [

    {

      "PolicyDnsForwarderZone": {

        "resource_type": "PolicyDnsForwarderZone",

        "id": "dns-zone-01",

        "display_name": "dns-zone-01",

        "dns_domain_names": [],

        "upstream_servers": [

          "192.168.1.101",

          "192.168.1.102"

        ],

        "marked_for_delete": false

      },

      "resource_type": "ChildPolicyDnsForwarderZone",

      "marked_for_delete": false

    },

    {

      "DhcpServerConfig": {

        "id": "dhcp-sv-01",

        "display_name": "dhcp-sv-01",

        "server_address": "172.16.254.254/24",

        "lease_time": 86400,

        "resource_type": "DhcpServerConfig",

        "marked_for_delete": false

      },

      "resource_type": "ChildDhcpServerConfig",

      "marked_for_delete": false

    },

    {

      "Tier1": {

        "id": "t1-gw-01",

        "display_name": "t1-gw-01",

        "tier0_path": "/infra/tier-0s/t0-gw-01",

        "failover_mode": "NON_PREEMPTIVE",

        "enable_standby_relocation": false,

        "dhcp_config_paths": [

          "/infra/dhcp-server-configs/dhcp-sv-01"

        ],

        "route_advertisement_types": [

          "TIER1_DNS_FORWARDER_IP",

          "TIER1_CONNECTED"

        ],

        "children": [

          {

            "LocaleServices": {

              "id": "96770e38-3e86-4873-bef6-71d60267c957",

              "display_name": "96770e38-3e86-4873-bef6-71d60267c957",

              "edge_cluster_path": "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae",

              "preferred_edge_paths": [

                "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae/edge-nodes/8e1b5bda-e116-49da-8b4b-bbb2961a7900"

              ],

              "resource_type": "LocaleServices",

              "marked_for_delete": false

            },

            "resource_type": "ChildLocaleServices",

            "marked_for_delete": false

          },

          {

            "PolicyDnsForwarder": {

              "id": "dns-forwarder",

              "display_name": "dns-sv-01",

              "listener_ip": "172.16.253.254",

              "default_forwarder_zone_path": "/infra/dns-forwarder-zones/dns-zone-01",

              "resource_type": "PolicyDnsForwarder",

              "marked_for_delete": false

            },

            "resource_type": "ChildPolicyDnsForwarder",

            "marked_for_delete": false

          }

        ],

        "resource_type": "Tier1",

        "marked_for_delete": false

      },

      "resource_type": "ChildTier1",

      "marked_for_delete": false

    },

    {

      "Segment": {

        "id": "seg-overlay-01",

        "display_name": "seg-overlay-01",

        "type": "ROUTED",

        "subnets": [

          {

            "gateway_address": "172.16.1.1/24",

            "dhcp_ranges": [

              "172.16.1.10-172.16.1.250"

            ],

            "network": "172.16.1.0/24"

          }

        ],

        "transport_zone_path": "/infra/sites/default/enforcement-points/default/transport-zones/4d5e3804-e62c-40ab-af7c-99bab2d5e5e8",

        "connectivity_path": "/infra/tier-1s/t1-gw-01",

        "resource_type": "Segment",

        "marked_for_delete": false

      },

      "resource_type": "ChildSegment",

      "marked_for_delete": false

    },

    {

      "Segment": {

        "id": "seg-overlay-02",

        "display_name": "seg-overlay-02",

        "type": "ROUTED",

        "subnets": [

          {

            "gateway_address": "172.16.2.1/24",

            "dhcp_ranges": [

              "172.16.2.10-172.16.2.250"

            ],

            "network": "172.16.2.0/24"

          }

        ],

        "transport_zone_path": "/infra/sites/default/enforcement-points/default/transport-zones/4d5e3804-e62c-40ab-af7c-99bab2d5e5e8",

        "connectivity_path": "/infra/tier-1s/t1-gw-01",

        "resource_type": "Segment",

        "marked_for_delete": false

      },

      "resource_type": "ChildSegment",

      "marked_for_delete": false

    }

  ]

}

 

ネットワーク環境の作成。

これまでの投稿で紹介したように、API のコールには、Linux クライアントで curl コマンドを利用します。

変数 CREDには「ユーザ名:パスワード」、MGR には NSX Manager のアドレスを格納してあります。

$ MGR=lab-nsxt-mgr-01.go-lab.jp

$ CRED='admin:VMware1!VMware1!'

 

今回コールする API は、一律でつぎのものです。

対象のオブジェクトとその階層、作成/削除などは、リクエストに渡す JSON データで指定しています。

PATCH /policy/api/v1/infra

 

それでは、ネットワークを作成していきます。

NSX Manager の UI でも、はじめはオブジェクトがない状態です。

API コールのたびに UI を更新すると、JSON に記載したオブジェクトが作成された様子がわかるはずです。

nsxt-mgr-obj-01.png

 

ext-vlan.json を指定して、境界のネットワークになる、VLAN セグメントを作成。

$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./ext-vlan.json https://$MGR/policy/api/v1/infra

 

tier0.json を指定して、Tier-0 ゲートウェイと一連のオブジェクトを作成。

$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./tier0.json https://$MGR/policy/api/v1/infra

 

tier1.json を指定して、Tier-1 ゲートウェイと一連のオブジェクトを作成。

$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./tier1.json https://$MGR/policy/api/v1/infra

 

ここまでの API コールで、NSX Manager でオブジェクトが作成されました。

nsxt-mgr-obj-02.png

 

ネットワーク環境の削除のための JSON ファイル準備。

以前紹介したように、Policy API では、DELETE メソッドでオブジェクトをひとつずつ削除できます。

NSX-T の Policy API をためす。Part.2(DELETE 編)

 

Policy API を Hierarchical で利用すると、JSON データの marked_for_delete フラグによるオブジェクト削除もできます。

この場合、環境作成時の JSON ファイルで、削除対象だけ「marked_for_delete: true」とフラグを指定します。

「marked_for_delete: true」を親階層のオブジェクトで指定すると、その配下のオブジェクトも一緒に削除します。

ちなみにこのフラグはデフォルトだと false で、省略可能です。

また、ルート階層の「infra」は削除できません。

 

今回は、オブジェクト作成時に使用した JSON を「marked_for_delete: true」にした、

~_delete.json ファイルを用意して、オブジェクトを削除します。

 

それぞれの JSON ファイルで

~_delete.json ファイルを用意して、オブジェクトを削除します。

 

ext-vlan_delete.json をもとにした ext-vlan_delete.json では、

infra 直下のオブジェクトのみ 「marked_for_delete: true」にしてあります。

(infra オブジェクト自体は削除できないため)

例として、編集のあったファイル末尾の内容だけ、tail コマンドで表示します。

$ tail ./ext-vlan_delete.json

        ],

        "transport_zone_path": "/infra/sites/default/enforcement-points/default/transport-zones/4954eeca-decb-487a-8582-b011d60ba19f",

        "resource_type": "Segment",

        "marked_for_delete": false

      },

      "resource_type": "ChildSegment",

      "marked_for_delete": true

    }

  ]

}

 

個人的な JSON ファイル記述方法の工夫として、JSON ファイルでの編集ミス防止箇所のため、

Hierarchical API でオブジェクトの種類を表す「"resource_type": "Child~"」と、

marked_for_delete フラグは、できるだけ各オブジェクトの末尾にセットで記載するようにしています。

 

tier0.json をもとにした tier0_delete.json も、

Tier0 配下に一連ののオブジェクトが収まる階層構造なので

infra 直下の「ChildTier0」でのみ「marked_for_delete: true」にしてあります。

$ tail ./tier0_delete.json

          }

        ],

        "resource_type": "Tier0",

        "marked_for_delete": false

      },

      "resource_type": "ChildTier0",

      "marked_for_delete": true

    }

  ]

}

 

tier1_delete.json は、「Tier0」配下の階層に収まっていないオブジェクトがあり、

複数個所で "marked_for_delete": true の指定が必要になる例です。

階層全体でなく、個々のオブジェクトで marked_for_delete を true にしても削除ができるので、

すこし雑な方法ですが 元の tier1.json ファイルを、sed で一括置換してしまいます。

$ cat  ./tier1.json | sed 's/"marked_for_delete": false/"marked_for_delete": true/g' > tier1_delete.json

$ diff ./tier1.json ./tier1_delete.json

15c15

<         "marked_for_delete": false

---

>         "marked_for_delete": true

18c18

<       "marked_for_delete": false

---

>       "marked_for_delete": true

27c27

<         "marked_for_delete": false

---

>         "marked_for_delete": true

30c30

<       "marked_for_delete": false

---

>       "marked_for_delete": true

56c56

<               "marked_for_delete": false

---

>               "marked_for_delete": true

59c59

<             "marked_for_delete": false

---

>             "marked_for_delete": true

68c68

<               "marked_for_delete": false

---

>               "marked_for_delete": true

71c71

<             "marked_for_delete": false

---

>             "marked_for_delete": true

75c75

<         "marked_for_delete": false

---

>         "marked_for_delete": true

78c78

<       "marked_for_delete": false

---

>       "marked_for_delete": true

97c97

<         "marked_for_delete": false

---

>         "marked_for_delete": true

100c100

<       "marked_for_delete": false

---

>       "marked_for_delete": true

119c119

<         "marked_for_delete": false

---

>         "marked_for_delete": true

122c122

<       "marked_for_delete": false

---

>       "marked_for_delete": true

 

ネットワーク環境の削除。

それではオブジェクトを削除します。

今回は、あらかじめオーバーレイ セグメントは VM の vNIC から外して(別のポートグループを割り当てて)おき、

セグメントのポートがすでにない状態から開始しています。

 

tier1_delete.json を指定して、Tier-1 ゲートウェイと一連のオブジェクトを削除します。

$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./tier1_delete.json https://$MGR/policy/api/v1/infra

 

tier0_delete.json を指定して、Tier-0 ゲートウェイと一連のオブジェクトを削除します。

$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./tier0_delete.json https://$MGR/policy/api/v1/infra

 

ext-vlan_delete.json を指定して、VLAN セグメントを削除します。

$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./ext-vlan_delete.json https://$MGR/policy/api/v1/infra

 

これらの API コールによって、(JSON の内容に問題がなければ)さきほど作成したオブジェクトが削除されます。

処理が完了すると、NSX Manager の Web UI でも、今回の手順開始時と同様にオブジェクト件数がゼロ件になります。

(ブラウザの更新や、「更新」ボタンで画面に反映されるはずです)

nsxt-mgr-obj-03.png

 

オブジェクトの指定によっては、対象オブジェクト同士の参照関係によってエラーになることがありますが、

その場合は少し待つと、(おそらく内部でリトライされて)エラーとなっていたオブジェクトでも削除されたりします。

もしくは、エラーになったオブジェクトを含むコールをリトライすることで、オブジェクトを削除できることがあります。

 

NSX-T の Policy API を利用する場合は、Hierarchical API 形式にすることで、

オブジェクト同士の参照関係を気にする苦労を削減できます。

手順の簡略化や構成管理の面で Hierarchical API 形式のほうが便利かなと思います。

 

ちなみに、いまのところのおすすめ資料は下記かなと思います。

 

NSX Policy API: Getting Started Guide

https://images.nsx.techzone.vmware.com/sites/default/files/PolicyAPI-v1.0.pdf

 

以上、Policy API の Hierarchical API でオブジェクトを作成/削除してみる話でした。

NSX-T の Policy API には、Hierarchical API とよばれる使用方法があります。

今回は、Hierarchical API で情報取得してみます。

 

前回の投稿(下記)で作成した環境の情報を GET してみます。

NSX-T の Policy API をためす。Part.3(オブジェクト作成編)

 

以前に、Path 指定での API で情報取得してみました。

この環境も、Part.3 で作成した環境とほとんど同じです。

NSX-T の Policy API をためす。Part.1(GET 編)

 

Hierarchical API の特徴。

前回までの投稿では、Policy API の URL でオブジェクトの Path を指定して API コールしていました。

Policy API を Hierarchical で利用する場合は、Infra と Domain という特別なオブジェクトを基準として API をコールします。

URL は、次のようになっていました。

GET /policy/api/v1/infra/segments

 

一方、Hierarchical API では、エンドポイントの URL が一律で次のものになります。

(今回あつかうオブジェクトでは共通で ~/infra まで)

GET /policy/api/v1/infra

 

そして、GET メソッドでは、オブジェクト(リソース)の種類によって、フィルタを指定することができます。

セグメントの場合は、つぎのようにフィルタを指定します。

GET /policy/api/v1/infra?filter=Type-Segment

 

それでは、ひととおり情報取得してみます。

なお、前回までの投稿で紹介したように、API のコールには curl コマンドを利用します。

変数 CREDには「ユーザ名:パスワード」、MGR には NSX Manager のアドレスを格納してあります。

$ MGR=lab-nsxt-mgr-01.go-lab.jp

$ CRED='admin:VMware1!VMware1!'

 

セグメントの情報取得。

VLAN/オーバーレイ 両方のセグメントの情報が取得されます。

仮想マシンが接続されたセグメント ポートなども表示されます。

 

GET /policy/api/v1/infra?filter=Type-Segment

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra?filter=Type-Segment

{

  "resource_type" : "Infra",

  "id" : "infra",

  "display_name" : "infra",

  "path" : "/infra",

  "relative_path" : "infra",

  "children" : [ {

    "SegmentSecurityProfile" : {

      "bpdu_filter_enable" : true,

      "bpdu_filter_allow" : [ ],

      "dhcp_server_block_enabled" : true,

      "dhcp_client_block_enabled" : false,

      "non_ip_traffic_block_enabled" : false,

      "dhcp_server_block_v6_enabled" : true,

      "dhcp_client_block_v6_enabled" : false,

      "ra_guard_enabled" : false,

      "rate_limits_enabled" : false,

      "rate_limits" : {

        "rx_broadcast" : 0,

        "tx_broadcast" : 0,

        "rx_multicast" : 0,

        "tx_multicast" : 0

      },

      "resource_type" : "SegmentSecurityProfile",

      "id" : "default-segment-security-profile",

      "display_name" : "default-segment-security-profile",

      "path" : "/infra/segment-security-profiles/default-segment-security-profile",

      "relative_path" : "default-segment-security-profile",

      "parent_path" : "/infra/segment-security-profiles/default-segment-security-profile",

      "children" : [ ],

      "marked_for_delete" : false,

      "_create_user" : "system",

      "_create_time" : 1568904746259,

      "_last_modified_user" : "system",

      "_last_modified_time" : 1568904746259,

      "_system_owned" : true,

      "_protection" : "NOT_PROTECTED",

      "_revision" : 0

    },

    "resource_type" : "ChildSegmentSecurityProfile",

    "marked_for_delete" : false,

    "_protection" : "NOT_PROTECTED"

  }, {

    "Segment" : {

      "type" : "DISCONNECTED",

      "vlan_ids" : [ "200" ],

      "transport_zone_path" : "/infra/sites/default/enforcement-points/default/transport-zones/4954eeca-decb-487a-8582-b011d60ba19f",

      "resource_type" : "Segment",

      "id" : "seg-vlan-0200",

      "display_name" : "seg-vlan-0200",

      "path" : "/infra/segments/seg-vlan-0200",

      "relative_path" : "seg-vlan-0200",

      "parent_path" : "/infra/segments/seg-vlan-0200",

      "children" : [ ],

      "marked_for_delete" : false,

      "_create_user" : "admin",

      "_create_time" : 1572972974519,

      "_last_modified_user" : "admin",

      "_last_modified_time" : 1572972974519,

      "_system_owned" : false,

      "_protection" : "NOT_PROTECTED",

      "_revision" : 0

    },

    "resource_type" : "ChildSegment",

    "marked_for_delete" : false,

    "_protection" : "NOT_PROTECTED"

  }, {

    "Segment" : {

      "type" : "ROUTED",

      "subnets" : [ {

        "gateway_address" : "172.16.2.1/24",

        "dhcp_ranges" : [ "172.16.2.10-172.16.2.250" ],

        "network" : "172.16.2.0/24"

      } ],

      "connectivity_path" : "/infra/tier-1s/t1-gw-01",

      "transport_zone_path" : "/infra/sites/default/enforcement-points/default/transport-zones/4d5e3804-e62c-40ab-af7c-99bab2d5e5e8",

      "resource_type" : "Segment",

      "id" : "seg-overlay-02",

      "display_name" : "seg-overlay-02",

      "path" : "/infra/segments/seg-overlay-02",

      "relative_path" : "seg-overlay-02",

      "parent_path" : "/infra/segments/seg-overlay-02",

      "children" : [ {

        "SegmentPort" : {

          "resource_type" : "SegmentPort",

          "id" : "default:96e7763f-b5fa-4e8d-830e-dcacdc7bf43a",

          "display_name" : "vm03/vm03.vmx@c1f5e1bd-d787-4ec5-96a4-c20910bd217a",

          "tags" : [ ],

          "path" : "/infra/segments/seg-overlay-02/ports/default:96e7763f-b5fa-4e8d-830e-dcacdc7bf43a",

          "relative_path" : "default:96e7763f-b5fa-4e8d-830e-dcacdc7bf43a",

          "parent_path" : "/infra/segments/seg-overlay-02",

          "children" : [ ],

          "marked_for_delete" : false,

          "_create_user" : "system",

          "_create_time" : 1572993602499,

          "_last_modified_user" : "system",

          "_last_modified_time" : 1572993602499,

          "_system_owned" : false,

          "_protection" : "NOT_PROTECTED",

          "_revision" : 0

        },

        "resource_type" : "ChildSegmentPort",

        "marked_for_delete" : false,

        "_protection" : "NOT_PROTECTED"

      }, {

        "SegmentPort" : {

          "resource_type" : "SegmentPort",

          "id" : "default:336fee15-4d0e-4d35-8dc7-cf091038b00e",

          "display_name" : "vm04/vm04.vmx@3c436657-571b-4bb3-b617-2dcfdcf2ba59",

          "tags" : [ ],

          "path" : "/infra/segments/seg-overlay-02/ports/default:336fee15-4d0e-4d35-8dc7-cf091038b00e",

          "relative_path" : "default:336fee15-4d0e-4d35-8dc7-cf091038b00e",

          "parent_path" : "/infra/segments/seg-overlay-02",

          "children" : [ ],

          "marked_for_delete" : false,

          "_create_user" : "system",

          "_create_time" : 1572993602424,

          "_last_modified_user" : "system",

          "_last_modified_time" : 1572993602424,

          "_system_owned" : false,

          "_protection" : "NOT_PROTECTED",

          "_revision" : 0

        },

        "resource_type" : "ChildSegmentPort",

        "marked_for_delete" : false,

        "_protection" : "NOT_PROTECTED"

      } ],

      "marked_for_delete" : false,

      "_create_user" : "admin",

      "_create_time" : 1572973676117,

      "_last_modified_user" : "admin",

      "_last_modified_time" : 1572973676117,

      "_system_owned" : false,

      "_protection" : "NOT_PROTECTED",

      "_revision" : 0

    },

    "resource_type" : "ChildSegment",

    "marked_for_delete" : false,

    "_protection" : "NOT_PROTECTED"

  }, {

    "Segment" : {

      "type" : "ROUTED",

      "subnets" : [ {

        "gateway_address" : "172.16.1.1/24",

        "dhcp_ranges" : [ "172.16.1.10-172.16.1.250" ],

        "network" : "172.16.1.0/24"

      } ],

      "connectivity_path" : "/infra/tier-1s/t1-gw-01",

      "transport_zone_path" : "/infra/sites/default/enforcement-points/default/transport-zones/4d5e3804-e62c-40ab-af7c-99bab2d5e5e8",

      "resource_type" : "Segment",

      "id" : "seg-overlay-01",

      "display_name" : "seg-overlay-01",

      "path" : "/infra/segments/seg-overlay-01",

      "relative_path" : "seg-overlay-01",

      "parent_path" : "/infra/segments/seg-overlay-01",

      "children" : [ {

        "SegmentPort" : {

          "resource_type" : "SegmentPort",

          "id" : "default:94e29eaa-034c-4df6-a4b1-54fc95a18cba",

          "display_name" : "vm01/vm01.vmx@3c436657-571b-4bb3-b617-2dcfdcf2ba59",

          "tags" : [ ],

          "path" : "/infra/segments/seg-overlay-01/ports/default:94e29eaa-034c-4df6-a4b1-54fc95a18cba",

          "relative_path" : "default:94e29eaa-034c-4df6-a4b1-54fc95a18cba",

          "parent_path" : "/infra/segments/seg-overlay-01",

          "children" : [ ],

          "marked_for_delete" : false,

          "_create_user" : "system",

          "_create_time" : 1572993602117,

          "_last_modified_user" : "system",

          "_last_modified_time" : 1572993602117,

          "_system_owned" : false,

          "_protection" : "NOT_PROTECTED",

          "_revision" : 0

        },

        "resource_type" : "ChildSegmentPort",

        "marked_for_delete" : false,

        "_protection" : "NOT_PROTECTED"

      }, {

        "SegmentPort" : {

          "resource_type" : "SegmentPort",

          "id" : "default:e1385e98-f4cf-4dee-bbc6-535584d9b721",

          "display_name" : "vm02/vm02.vmx@92e5beee-20a2-4ba7-8372-ce49aace34fc",

          "tags" : [ ],

          "path" : "/infra/segments/seg-overlay-01/ports/default:e1385e98-f4cf-4dee-bbc6-535584d9b721",

          "relative_path" : "default:e1385e98-f4cf-4dee-bbc6-535584d9b721",

          "parent_path" : "/infra/segments/seg-overlay-01",

          "children" : [ ],

          "marked_for_delete" : false,

          "_create_user" : "system",

          "_create_time" : 1572993602249,

          "_last_modified_user" : "system",

          "_last_modified_time" : 1572993602249,

          "_system_owned" : false,

          "_protection" : "NOT_PROTECTED",

          "_revision" : 0

        },

        "resource_type" : "ChildSegmentPort",

        "marked_for_delete" : false,

        "_protection" : "NOT_PROTECTED"

      } ],

      "marked_for_delete" : false,

      "_create_user" : "admin",

      "_create_time" : 1572973665350,

      "_last_modified_user" : "admin",

      "_last_modified_time" : 1572973665350,

      "_system_owned" : false,

      "_protection" : "NOT_PROTECTED",

      "_revision" : 0

    },

    "resource_type" : "ChildSegment",

    "marked_for_delete" : false,

    "_protection" : "NOT_PROTECTED"

  } ],

  "marked_for_delete" : false,

  "connectivity_strategy" : "BLACKLIST",

  "_create_user" : "system",

  "_create_time" : 1568904745337,

  "_last_modified_user" : "system",

  "_last_modified_time" : 1568904745337,

  "_system_owned" : false,

  "_protection" : "NOT_PROTECTED",

  "_revision" : 0

}

 

Tier-0 ゲートウェイの情報取得。

Tier-0 ゲートウェイ配下のオブジェクトは、Tier-0 と一緒にフィルタに含める必要があります。

 

Tier-0 ゲートウェイだけを指定した情報取得。

まず、Tier-0 ゲートウェイだけの場合です。

GET /policy/api/v1/infra?filter=Type-Tier0

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra?filter=Type-Tier0

{

  "resource_type" : "Infra",

  "id" : "infra",

  "display_name" : "infra",

  "path" : "/infra",

  "relative_path" : "infra",

  "children" : [ {

    "Tier0" : {

      "transit_subnets" : [ "100.64.0.0/16" ],

      "internal_transit_subnets" : [ "169.254.0.0/28" ],

      "ha_mode" : "ACTIVE_STANDBY",

      "failover_mode" : "NON_PREEMPTIVE",

      "ipv6_profile_paths" : [ "/infra/ipv6-ndra-profiles/default", "/infra/ipv6-dad-profiles/default" ],

      "force_whitelisting" : false,

      "default_rule_logging" : false,

      "disable_firewall" : false,

      "resource_type" : "Tier0",

      "id" : "t0-gw-01",

      "display_name" : "t0-gw-01",

      "path" : "/infra/tier-0s/t0-gw-01",

      "relative_path" : "t0-gw-01",

      "parent_path" : "/infra/tier-0s/t0-gw-01",

      "children" : [ ],

      "marked_for_delete" : false,

      "_create_user" : "admin",

      "_create_time" : 1572973048893,

      "_last_modified_user" : "admin",

      "_last_modified_time" : 1572973084322,

      "_system_owned" : false,

      "_protection" : "NOT_PROTECTED",

      "_revision" : 1

    },

    "resource_type" : "ChildTier0",

    "marked_for_delete" : false,

    "_protection" : "NOT_PROTECTED"

  } ],

  "marked_for_delete" : false,

  "connectivity_strategy" : "BLACKLIST",

  "_create_user" : "system",

  "_create_time" : 1568904745337,

  "_last_modified_user" : "system",

  "_last_modified_time" : 1568904745337,

  "_system_owned" : false,

  "_protection" : "NOT_PROTECTED",

  "_revision" : 0

}

 

LocaleServices を含めた情報取得。

複数種類のリソースを含める場合は、「|」(パイプ)で連結します。

ただし、URL ではパイプ文字が指定できないので、URL エンコーディング(% エンコーディング)にします。

「|」は、「%7C」という文字列に置き換えます。

 

結果の JSON から、Tier0 → LocaleServices → Tier0Interface が階層構造になっていることがわかります。

ここでは LocaleServices のインターフェースも取得できています。

 

GET /policy/api/v1/infra?filter=Type-Tier0|LocaleServices

GET /policy/api/v1/infra?filter=Type-Tier0%7CLocaleServices

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra?filter=Type-Tier0%7CLocaleServices

{

  "resource_type" : "Infra",

  "id" : "infra",

  "display_name" : "infra",

  "path" : "/infra",

  "relative_path" : "infra",

  "children" : [ {

    "Tier0" : {

      "transit_subnets" : [ "100.64.0.0/16" ],

      "internal_transit_subnets" : [ "169.254.0.0/28" ],

      "ha_mode" : "ACTIVE_STANDBY",

      "failover_mode" : "NON_PREEMPTIVE",

      "ipv6_profile_paths" : [ "/infra/ipv6-ndra-profiles/default", "/infra/ipv6-dad-profiles/default" ],

      "force_whitelisting" : false,

      "default_rule_logging" : false,

      "disable_firewall" : false,

      "resource_type" : "Tier0",

      "id" : "t0-gw-01",

      "display_name" : "t0-gw-01",

      "path" : "/infra/tier-0s/t0-gw-01",

      "relative_path" : "t0-gw-01",

      "parent_path" : "/infra/tier-0s/t0-gw-01",

      "children" : [ {

        "LocaleServices" : {

          "edge_cluster_path" : "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae",

          "resource_type" : "LocaleServices",

          "id" : "24b79e4c-2ef1-4360-ac2c-9454514eada5",

          "display_name" : "24b79e4c-2ef1-4360-ac2c-9454514eada5",

          "path" : "/infra/tier-0s/t0-gw-01/locale-services/24b79e4c-2ef1-4360-ac2c-9454514eada5",

          "relative_path" : "24b79e4c-2ef1-4360-ac2c-9454514eada5",

          "parent_path" : "/infra/tier-0s/t0-gw-01",

          "children" : [ {

            "Tier0Interface" : {

              "edge_path" : "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae/edge-nodes/8e1b5bda-e116-49da-8b4b-bbb2961a7900",

              "segment_path" : "/infra/segments/seg-vlan-0200",

              "type" : "EXTERNAL",

              "resource_type" : "Tier0Interface",

              "id" : "t0-uplink-01",

              "display_name" : "t0-uplink-01",

              "path" : "/infra/tier-0s/t0-gw-01/locale-services/24b79e4c-2ef1-4360-ac2c-9454514eada5/interfaces/t0-uplink-01",

              "relative_path" : "t0-uplink-01",

              "parent_path" : "/infra/tier-0s/t0-gw-01/locale-services/24b79e4c-2ef1-4360-ac2c-9454514eada5",

              "children" : [ ],

              "marked_for_delete" : false,

              "subnets" : [ {

                "ip_addresses" : [ "192.168.200.2" ],

                "prefix_len" : 24

              } ],

              "_create_user" : "admin",

              "_create_time" : 1572973121476,

              "_last_modified_user" : "admin",

              "_last_modified_time" : 1572973121476,

              "_system_owned" : false,

              "_protection" : "NOT_PROTECTED",

              "_revision" : 0

            },

            "resource_type" : "ChildTier0Interface",

            "marked_for_delete" : false,

            "_protection" : "NOT_PROTECTED"

          } ],

          "marked_for_delete" : false,

          "_create_user" : "admin",

          "_create_time" : 1572973084293,

          "_last_modified_user" : "admin",

          "_last_modified_time" : 1572973084293,

          "_system_owned" : false,

          "_protection" : "NOT_PROTECTED",

          "_revision" : 0

        },

        "resource_type" : "ChildLocaleServices",

        "marked_for_delete" : false,

        "_protection" : "NOT_PROTECTED"

      } ],

      "marked_for_delete" : false,

      "_create_user" : "admin",

      "_create_time" : 1572973048893,

      "_last_modified_user" : "admin",

      "_last_modified_time" : 1572973084322,

      "_system_owned" : false,

      "_protection" : "NOT_PROTECTED",

      "_revision" : 1

    },

    "resource_type" : "ChildTier0",

    "marked_for_delete" : false,

    "_protection" : "NOT_PROTECTED"

  } ],

  "marked_for_delete" : false,

  "connectivity_strategy" : "BLACKLIST",

  "_create_user" : "system",

  "_create_time" : 1568904745337,

  "_last_modified_user" : "system",

  "_last_modified_time" : 1568904745337,

  "_system_owned" : false,

  "_protection" : "NOT_PROTECTED",

  "_revision" : 0

}

 

LocaleServices とインターフェースを含めた情報取得。

Tier-0 ゲートウェイのインターフェースを含めた URL 指定は、次のようになります。

※レスポンスについては省略。

 

GET /policy/api/v1/infra?filter=Type-Tier0|LocaleServices|Tier0Interface

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra?filter=Type-Tier0%7CLocaleServices%7CTier0Interface

 

スタティック ルートの情報取得。

Tier-0 ゲートウェイのスタティック ルートの情報を取得します。

 

GET /policy/api/v1/infra?filter=Type-Tier0|StaticRoutes

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra?filter=Type-Tier0%7CStaticRoutes

{

  "resource_type" : "Infra",

  "id" : "infra",

  "display_name" : "infra",

  "path" : "/infra",

  "relative_path" : "infra",

  "children" : [ {

    "Tier0" : {

      "transit_subnets" : [ "100.64.0.0/16" ],

      "internal_transit_subnets" : [ "169.254.0.0/28" ],

      "ha_mode" : "ACTIVE_STANDBY",

      "failover_mode" : "NON_PREEMPTIVE",

      "ipv6_profile_paths" : [ "/infra/ipv6-ndra-profiles/default", "/infra/ipv6-dad-profiles/default" ],

      "force_whitelisting" : false,

      "default_rule_logging" : false,

      "disable_firewall" : false,

      "resource_type" : "Tier0",

      "id" : "t0-gw-01",

      "display_name" : "t0-gw-01",

      "path" : "/infra/tier-0s/t0-gw-01",

      "relative_path" : "t0-gw-01",

      "parent_path" : "/infra/tier-0s/t0-gw-01",

      "children" : [ {

        "StaticRoutes" : {

          "network" : "0.0.0.0/0",

          "next_hops" : [ {

            "ip_address" : "192.168.200.1",

            "admin_distance" : 1

          } ],

          "resource_type" : "StaticRoutes",

          "id" : "t0-route-01",

          "display_name" : "t0-route-01",

          "path" : "/infra/tier-0s/t0-gw-01/static-routes/t0-route-01",

          "relative_path" : "t0-route-01",

          "parent_path" : "/infra/tier-0s/t0-gw-01",

          "children" : [ ],

          "marked_for_delete" : false,

          "_create_user" : "admin",

          "_create_time" : 1572973183264,

          "_last_modified_user" : "admin",

          "_last_modified_time" : 1572973183264,

          "_system_owned" : false,

          "_protection" : "NOT_PROTECTED",

          "_revision" : 0

        },

        "resource_type" : "ChildStaticRoutes",

        "marked_for_delete" : false,

        "_protection" : "NOT_PROTECTED"

      } ],

      "marked_for_delete" : false,

      "_create_user" : "admin",

      "_create_time" : 1572973048893,

      "_last_modified_user" : "admin",

      "_last_modified_time" : 1572973084322,

      "_system_owned" : false,

      "_protection" : "NOT_PROTECTED",

      "_revision" : 1

    },

    "resource_type" : "ChildTier0",

    "marked_for_delete" : false,

    "_protection" : "NOT_PROTECTED"

  } ],

  "marked_for_delete" : false,

  "connectivity_strategy" : "BLACKLIST",

  "_create_user" : "system",

  "_create_time" : 1568904745337,

  "_last_modified_user" : "system",

  "_last_modified_time" : 1568904745337,

  "_system_owned" : false,

  "_protection" : "NOT_PROTECTED",

  "_revision" : 0

}

 

NAT ルールの情報取得。

Tier-0 ゲートウェイの NAT ルールを取得します。

ユーザが手動で作成した「USER」のもの以外に、

自動作成される DEFAULT / INTERNAL の NAT が存在することがわかります。

 

GET /policy/api/v1/infra?filter=Type-Tier0|PolicyNat

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra?filter=Type-Tier0%7CPolicyNat

{

  "resource_type" : "Infra",

  "id" : "infra",

  "display_name" : "infra",

  "path" : "/infra",

  "relative_path" : "infra",

  "children" : [ {

    "Tier0" : {

      "transit_subnets" : [ "100.64.0.0/16" ],

      "internal_transit_subnets" : [ "169.254.0.0/28" ],

      "ha_mode" : "ACTIVE_STANDBY",

      "failover_mode" : "NON_PREEMPTIVE",

      "ipv6_profile_paths" : [ "/infra/ipv6-ndra-profiles/default", "/infra/ipv6-dad-profiles/default" ],

      "force_whitelisting" : false,

      "default_rule_logging" : false,

      "disable_firewall" : false,

      "resource_type" : "Tier0",

      "id" : "t0-gw-01",

      "display_name" : "t0-gw-01",

      "path" : "/infra/tier-0s/t0-gw-01",

      "relative_path" : "t0-gw-01",

      "parent_path" : "/infra/tier-0s/t0-gw-01",

      "children" : [ {

        "PolicyNat" : {

          "nat_type" : "DEFAULT",

          "resource_type" : "PolicyNat",

          "id" : "DEFAULT",

          "display_name" : "DEFAULT",

          "path" : "/infra/tier-0s/t0-gw-01/nat/DEFAULT",

          "relative_path" : "DEFAULT",

          "parent_path" : "/infra/tier-0s/t0-gw-01",

          "children" : [ ],

          "marked_for_delete" : false,

          "_create_user" : "admin",

          "_create_time" : 1569254493062,

          "_last_modified_user" : "admin",

          "_last_modified_time" : 1569254493062,

          "_system_owned" : false,

          "_protection" : "NOT_PROTECTED",

          "_revision" : 0

        },

        "resource_type" : "ChildPolicyNat",

        "marked_for_delete" : false,

        "_protection" : "NOT_PROTECTED"

      }, {

        "PolicyNat" : {

          "nat_type" : "INTERNAL",

          "resource_type" : "PolicyNat",

          "id" : "INTERNAL",

          "display_name" : "INTERNAL",

          "path" : "/infra/tier-0s/t0-gw-01/nat/INTERNAL",

          "relative_path" : "INTERNAL",

          "parent_path" : "/infra/tier-0s/t0-gw-01",

          "children" : [ ],

          "marked_for_delete" : false,

          "_create_user" : "admin",

          "_create_time" : 1569254493059,

          "_last_modified_user" : "admin",

          "_last_modified_time" : 1569254493059,

          "_system_owned" : false,

          "_protection" : "NOT_PROTECTED",

          "_revision" : 0

        },

        "resource_type" : "ChildPolicyNat",

        "marked_for_delete" : false,

        "_protection" : "NOT_PROTECTED"

      }, {

        "PolicyNat" : {

          "nat_type" : "USER",

          "resource_type" : "PolicyNat",

          "id" : "USER",

          "display_name" : "USER",

          "path" : "/infra/tier-0s/t0-gw-01/nat/USER",

          "relative_path" : "USER",

          "parent_path" : "/infra/tier-0s/t0-gw-01",

          "children" : [ {

            "PolicyNatRule" : {

              "sequence_number" : 100,

              "action" : "SNAT",

              "source_network" : "172.16.0.0/16",

              "service" : "",

              "translated_network" : "192.168.200.2",

              "scope" : [ ],

              "enabled" : true,

              "logging" : false,

              "resource_type" : "PolicyNatRule",

              "id" : "2455c9f8-17b8-4531-8b83-0ce5831eca45",

              "display_name" : "t0-snat-01",

              "path" : "/infra/tier-0s/t0-gw-01/nat/USER/nat-rules/2455c9f8-17b8-4531-8b83-0ce5831eca45",

              "relative_path" : "2455c9f8-17b8-4531-8b83-0ce5831eca45",

              "parent_path" : "/infra/tier-0s/t0-gw-01/nat/USER",

              "children" : [ ],

              "marked_for_delete" : false,

              "_create_user" : "admin",

              "_create_time" : 1572973145927,

              "_last_modified_user" : "admin",

              "_last_modified_time" : 1572973145927,

              "_system_owned" : false,

              "_protection" : "NOT_PROTECTED",

              "_revision" : 0

            },

            "resource_type" : "ChildPolicyNatRule",

            "marked_for_delete" : false,

            "_protection" : "NOT_PROTECTED"

          } ],

          "marked_for_delete" : false,

          "_create_user" : "admin",

          "_create_time" : 1569254493061,

          "_last_modified_user" : "admin",

          "_last_modified_time" : 1569254493061,

          "_system_owned" : false,

          "_protection" : "NOT_PROTECTED",

          "_revision" : 0

        },

        "resource_type" : "ChildPolicyNat",

        "marked_for_delete" : false,

        "_protection" : "NOT_PROTECTED"

      } ],

      "marked_for_delete" : false,

      "_create_user" : "admin",

      "_create_time" : 1572973048893,

      "_last_modified_user" : "admin",

      "_last_modified_time" : 1572973084322,

      "_system_owned" : false,

      "_protection" : "NOT_PROTECTED",

      "_revision" : 1

    },

    "resource_type" : "ChildTier0",

    "marked_for_delete" : false,

    "_protection" : "NOT_PROTECTED"

  } ],

  "marked_for_delete" : false,

  "connectivity_strategy" : "BLACKLIST",

  "_create_user" : "system",

  "_create_time" : 1568904745337,

  "_last_modified_user" : "system",

  "_last_modified_time" : 1568904745337,

  "_system_owned" : false,

  "_protection" : "NOT_PROTECTED",

  "_revision" : 0

}

 

Tier-1 ゲートウェイの情報取得。

Tier-1 ゲートウェイ/LocaleServices を取得してみます。

※「filter=Type-Tier1」だけの結果は省略します。

 

GET /policy/api/v1/infra?filter=Type-Tier1

GET /policy/api/v1/infra?filter=Type-Tier1|LocaleServices

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra?filter=Type-Tier1%7CLocaleServices

{

  "resource_type" : "Infra",

  "id" : "infra",

  "display_name" : "infra",

  "path" : "/infra",

  "relative_path" : "infra",

  "children" : [ {

    "Tier1" : {

      "tier0_path" : "/infra/tier-0s/t0-gw-01",

      "failover_mode" : "NON_PREEMPTIVE",

      "enable_standby_relocation" : false,

      "dhcp_config_paths" : [ "/infra/dhcp-server-configs/dhcp-sv-01" ],

      "route_advertisement_types" : [ "TIER1_DNS_FORWARDER_IP", "TIER1_CONNECTED" ],

      "force_whitelisting" : false,

      "default_rule_logging" : false,

      "disable_firewall" : false,

      "ipv6_profile_paths" : [ "/infra/ipv6-ndra-profiles/default", "/infra/ipv6-dad-profiles/default" ],

      "resource_type" : "Tier1",

      "id" : "t1-gw-01",

      "display_name" : "t1-gw-01",

      "path" : "/infra/tier-1s/t1-gw-01",

      "relative_path" : "t1-gw-01",

      "parent_path" : "/infra/tier-1s/t1-gw-01",

      "children" : [ {

        "LocaleServices" : {

          "edge_cluster_path" : "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae",

          "preferred_edge_paths" : [ "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae/edge-nodes/8e1b5bda-e116-49da-8b4b-bbb2961a7900" ],

          "resource_type" : "LocaleServices",

          "id" : "7fa98167-2565-4869-b223-ffa9913684af",

          "display_name" : "7fa98167-2565-4869-b223-ffa9913684af",

          "path" : "/infra/tier-1s/t1-gw-01/locale-services/7fa98167-2565-4869-b223-ffa9913684af",

          "relative_path" : "7fa98167-2565-4869-b223-ffa9913684af",

          "parent_path" : "/infra/tier-1s/t1-gw-01",

          "children" : [ ],

          "marked_for_delete" : false,

          "_create_user" : "admin",

          "_create_time" : 1572973260316,

          "_last_modified_user" : "admin",

          "_last_modified_time" : 1572973260316,

          "_system_owned" : false,

          "_protection" : "NOT_PROTECTED",

          "_revision" : 0

        },

        "resource_type" : "ChildLocaleServices",

        "marked_for_delete" : false,

        "_protection" : "NOT_PROTECTED"

      } ],

      "marked_for_delete" : false,

      "_create_user" : "admin",

      "_create_time" : 1572973229372,

      "_last_modified_user" : "admin",

      "_last_modified_time" : 1572973418665,

      "_system_owned" : false,

      "_protection" : "NOT_PROTECTED",

      "_revision" : 2

    },

    "resource_type" : "ChildTier1",

    "marked_for_delete" : false,

    "_protection" : "NOT_PROTECTED"

  } ],

  "marked_for_delete" : false,

  "connectivity_strategy" : "BLACKLIST",

  "_create_user" : "system",

  "_create_time" : 1568904745337,

  "_last_modified_user" : "system",

  "_last_modified_time" : 1568904745337,

  "_system_owned" : false,

  "_protection" : "NOT_PROTECTED",

  "_revision" : 0

}

 

DHCP サーバの情報取得。

DHCP サーバを取得してみます。

 

GET /policy/api/v1/infra?filter=Type-Dhcp

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra?filter=Type-Dhcp

{

  "resource_type" : "Infra",

  "id" : "infra",

  "display_name" : "infra",

  "path" : "/infra",

  "relative_path" : "infra",

  "children" : [ {

    "DhcpServerConfig" : {

      "server_address" : "172.16.254.254/24",

      "lease_time" : 86400,

      "resource_type" : "DhcpServerConfig",

      "id" : "dhcp-sv-01",

      "display_name" : "dhcp-sv-01",

      "path" : "/infra/dhcp-server-configs/dhcp-sv-01",

      "relative_path" : "dhcp-sv-01",

      "parent_path" : "/infra/dhcp-server-configs/dhcp-sv-01",

      "children" : [ ],

      "marked_for_delete" : false,

      "_create_user" : "admin",

      "_create_time" : 1572973288751,

      "_last_modified_user" : "admin",

      "_last_modified_time" : 1572973288751,

      "_system_owned" : false,

      "_protection" : "NOT_PROTECTED",

      "_revision" : 0

    },

    "resource_type" : "ChildDhcpServerConfig",

    "marked_for_delete" : false,

    "_protection" : "NOT_PROTECTED"

  } ],

  "marked_for_delete" : false,

  "connectivity_strategy" : "BLACKLIST",

  "_create_user" : "system",

  "_create_time" : 1568904745337,

  "_last_modified_user" : "system",

  "_last_modified_time" : 1568904745337,

  "_system_owned" : false,

  "_protection" : "NOT_PROTECTED",

  "_revision" : 0

}

 

DNS フォワーダの情報取得。

DNS フォワーダ ゾーンの情報を取得してみます。

 

GET /policy/api/v1/infra?filter=Type-Dns

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra?filter=Type-Dns

{

  "resource_type" : "Infra",

  "id" : "infra",

  "display_name" : "infra",

  "path" : "/infra",

  "relative_path" : "infra",

  "children" : [ {

    "PolicyDnsForwarderZone" : {

      "dns_domain_names" : [ ],

      "upstream_servers" : [ "192.168.1.101", "192.168.1.102" ],

      "resource_type" : "PolicyDnsForwarderZone",

      "id" : "dns-zone-01",

      "display_name" : "dns-zone-01",

      "path" : "/infra/dns-forwarder-zones/dns-zone-01",

      "relative_path" : "dns-zone-01",

      "parent_path" : "/infra/dns-forwarder-zones/dns-zone-01",

      "children" : [ ],

      "marked_for_delete" : false,

      "_create_user" : "admin",

      "_create_time" : 1572973350057,

      "_last_modified_user" : "admin",

      "_last_modified_time" : 1572973350057,

      "_system_owned" : false,

      "_protection" : "NOT_PROTECTED",

      "_revision" : 0

    },

    "resource_type" : "ChildPolicyDnsForwarderZone",

    "marked_for_delete" : false,

    "_protection" : "NOT_PROTECTED"

  } ],

  "marked_for_delete" : false,

  "connectivity_strategy" : "BLACKLIST",

  "_create_user" : "system",

  "_create_time" : 1568904745337,

  "_last_modified_user" : "system",

  "_last_modified_time" : 1568904745337,

  "_system_owned" : false,

  "_protection" : "NOT_PROTECTED",

  "_revision" : 0

}

 

まとめて情報取得。

他にも、関連するコンポーネントをある程度まとめて取得することもできます。

 

GET /policy/api/v1/infra?filter=Type-Tier0|LocaleServices|Segment|StaticRoutes|PolicyNat

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra?filter=Type-Tier0%7CLocaleServices%7CSegment%7CStaticRoutes%7CPolicyNat

 

GET /policy/api/v1/infra?filter=Type-Tier1|LocaleServices|Segment|Dhcp|Dns

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra?filter=Type-Tier1%7CLocaleServices%7CSegment%7CDhcp%7CDns

 

ちなみに Policy API での設定全体については、つぎのように取得できます。

ただし内容は膨大で、テキスト ベースの JSON ですがデフォルトに近い環境でも 2MB 弱の容量になります。

 

GET /policy/api/v1/infra?filter=Type-

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra?filter=Type-

 

なお、全体/複数種類をまとめて取得した JSON データは、環境の論理バックアップに近い目的でも利用できます。

しかし、そのままだと PATCH / PUT で変更できないシステム オブジェクトも含まれるので、

設定のリストアに利用する場合は、取得した JSON から不要なデータを削除する必要があります。

 

次は、今回取得した JSON 情報を参考に、Hierarchical API で環境作成/削除をしてみます。

 

つづく。

NSX-T の Policy API をためす。Part.5(Hierarchical API でのオブジェクト作成/削除 編)

今回は、NSX-T のオブジェクトを、ひとつずつ Policy API で作成してみます。

 

作成する環境は、この投稿で紹介した状態に近いものです。

自宅ラボで NSX-T 2.5 環境を構築する。Simplified UI 編。Part.1 (Web UI から作成)

NSX-T の Policy API をためす。Part.1(GET 編)

 

今回も、Linux の curl コマンドと、jq コマンドをインストールして利用しています。

$ cat /etc/oracle-release

Oracle Linux Server release 7.7

$ jq -V

jq-1.5

 

前回までと同様の変数も設定しています。

  • MGR: NSX Manager のアドレス
  • CRED: NSX Manager の「ユーザ:パスワード」 ※例はよくあるデモ用パスワード。

$ MGR=lab-nsxt-mgr-01.go-lab.jp

$ CRED='admin:VMware1!VMware1!'

 

curl コマンドでは、次のように API の URL を指定して実行します。

いくつかオプションも指定しています。

  • -k: SSL 証明書エラーの無視。(ラボ環境なので)
  • -s: サイレント モード。進捗表示などを抑止。
  • -u: ログイン 情報を指定。
  • -H: ヘッダーで JSON データを扱うことを指定。"Content-Type: application/json"
  • -X: メソッド指定。今回は GET のみ。(じつは省略可)

 

VLAN セグメントの作成。

NSX-T の Policy API でオブジェクト作成/更新では、PATCH メソッド、もしくは PUT メソッドです。

今回は、PATCH メソッドを実行していきます。

 

あらかじめ JSON 形式のデータで、オブジェクトのパラメータを用意しておきます。

VLAN セグメントではトランスポート ゾーンを指定する必要があります。

あらためて API でオブジェクトごとの情報を取得することもできますが、

ここでは以前の投稿で GET した情報(一度 UI で作成したオブジェクトの情報)をもとに Path や ID などを特定しておきます。

NSX-T の Policy API をためす。Part.1(GET 編)

 

seg-vlan-0200.json

{

  "transport_zone_path": "/infra/sites/default/enforcement-points/default/transport-zones/4954eeca-decb-487a-8582-b011d60ba19f",

  "vlan_ids": [

    "200"

  ]

}

 

JSON ファイルを指定して PATCH メソッドを実行すると、オブジェクトが作成されます。

オブジェクトの表示名(display_name)は省略しているので、URL で指定した ID と同じものになります。

 

PATCH /policy/api/v1/infra/segments/セグメントの ID

$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./seg-vlan-0200.json https://$MGR/policy/api/v1/infra/segments/seg-vlan-0200

 

Tier-0 ゲートウェイの作成。

 

Tier-0 ゲートウェイの作成。

「アクティブ/スタンバイ」モードにするパラメータだけ指定した JSON ファイルを用意しました。

 

t0-gw-01.json

{

  "ha_mode" : "ACTIVE_STANDBY"

}

 

Tier-0 ゲートウェイを作成します。

 

PATCH /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID

$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./t0-gw-01.json https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01

 

Tier-0 ゲートウェイへの LocaleServices の追加。

Tier-0 ゲートウェイに、Edge クラスタを割り当てる LocaleServices を追加します。

Edge クラスタのパスは、以前の投稿での GET メソッドで確認したものです。

Edge トランスポート ノードの指定は、1つしかないので省略しています。

 

t0-gw-01_locale-services.json

{

  "edge_cluster_path": "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae"

}

 

LocaleServices では ID が UUID 形式だったので、

今回は Linux の uuidgen コマンドで生成したものを指定します。

UUID は、変数 T0_LOC_ID に格納しました。

$ T0_LOC_ID=$(uuidgen)

 

JSON ファイルを指定して、LocaleServices を追加します。

 

PATCH /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID/locale-services/LocaleServices の ID

$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./t0-gw-01_locale-services.json https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/locale-services/$T0_LOC_ID

 

Tier-0 ゲートウェイへのインターフェース追加。

LocaleServices に、VLAN セグメントに接続するインタフェースを追加します。

Policy API では、インターフェースは LocaleServices の一部として扱われています。

Edge トランスポート ノードのパスは、以前の投稿での GET メソッドで確認したものです。

 

t0-gw-01_t0-uplink-01.json

{

  "segment_path" : "/infra/segments/seg-vlan-0200",

  "type" : "EXTERNAL",

  "subnets" : [ {

    "ip_addresses" : [ "192.168.200.2" ],

    "prefix_len" : 24

  } ],

  "edge_path" : "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae/edge-nodes/8e1b5bda-e116-49da-8b4b-bbb2961a7900"

}

 

インターフェースを追加します。

 

PATCH /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID/locale-services/LocaleServices の ID/interfaces/インターフェースの ID

$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./t0-gw-01_t0-uplink-01.json https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/locale-services/$T0_LOC_ID/interfaces/t0-uplink-01

 

Tier-0 ゲートウェイへの SNAT ルールの追加。

ここでも、JSON ファイルを用意します。

 

t0-snat-01.json

{

  "action": "SNAT",

  "display_name": "t0-snat-01",

  "enabled": true,

  "sequence_number": 100,

  "source_network": "172.16.0.0/16",

  "translated_network": "192.168.200.2",

  "logging": false

}

 

UI で NAT ルールを作成すると UUID 形式になるため、それに合わせます。

ここでも、さきほどと同様に uuidgen コマンドで UUID を生成します。

$ NAT_ID=$(uuidgen)

 

NAT ルールを追加します。

 

PATCH /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID/nat/USER/nat-rules/NAT ルールの ID

$ curl -ks -u $CRED -X PATCH -H "Content-type: application/json" -d @./t0-snat-01.json https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/nat/USER/nat-rules/$NAT_ID

 

Tier-0 ゲートウェイへのスタティックルートの追加。

 

JSON ファイルを作成します。

 

t0-gw-01_static-route.json

{

  "network": "0.0.0.0/0",

  "next_hops": [

    {

      "ip_address": "192.168.200.1",

      "admin_distance": 1

    }

  ]

}

 

PATCH /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID/static-routes/ルートの ID

$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./t0-gw-01_static-route.json https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/static-routes/t0-route-01

 

Tier-1 ゲートウェイの作成。

 

Tier-1 ゲートウェイの作成。

JSON ファイルを作成します。

今回は後から DHCP サーバを接続するため、この時点の JSON はシンプルです。

 

t1-gw-01.json

{

  "tier0_path": "/infra/tier-0s/t0-gw-01",

  "route_advertisement_types": [

    "TIER1_CONNECTED"

  ]

}

 

Tier-1 ゲートウェイを作成します。

 

PATCH /policy/api/v1/infra/tier-1s/Tier-1 ゲートウェイの ID

$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./t1-gw-01.json https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01

 

Tier-1 ゲートウェイへの LocaleServices の追加。

Tier-1 ゲートウェイの Edge 割り当てをする LocaleServices を追加します。

Edge 関連のパスは、以前の投稿での GET メソッドで確認したものを指定しています。

 

t1-gw-01_locale-services.json

{

  "edge_cluster_path": "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae",

  "preferred_edge_paths": [

    "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae/edge-nodes/8e1b5bda-e116-49da-8b4b-bbb2961a7900"

  ]

}

 

Tier-0 の LocaleServices と同様に、UUID を生成しておきます。

$ T1_LOC_ID=$(uuidgen)

 

LocaleServices を追加します。

 

PATCH /policy/api/v1/infra/tier-1s/Tier-1 ゲートウェイの ID/locale-services/LocaleServices の ID

$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./t1-gw-01_locale-services.json https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01/locale-services/$T1_LOC_ID

 

DHCP サーバの追加。

JSON ファイルを用意します。

 

dhcp-sv-01.json

{

  "display_name" : "dhcp-sv-01",

  "server_address" : "172.16.254.254/24",

  "lease_time" : 86400

}

 

DHCP サーバを追加します。

これは、あとで Tier-1 ゲートウェイに接続します。

 

PATCH /policy/api/v1/infra/dhcp-server-configs/DHCP サーバの ID

$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./dhcp-sv-01.json https://$MGR/policy/api/v1/infra/dhcp-server-configs/dhcp-sv-01

 

DNS フォワーダ ゾーンの追加。

 

DNS フォワーダ ゾーンの追加。

JSON ファイルを用意します。

 

dns-zone-01.json

{

  "display_name" : "dns-zone-01",

  "upstream_servers" : [ "192.168.1.101", "192.168.1.102" ]

}

 

DNS フォワーダのゾーン(UI での デフォルト ゾーン)を追加します。

 

PATCH /policy/api/v1/infra/dns-forwarder-zones/DNS フォワーダ ゾーンの ID

$ curl -ks -u $CRED -H "Content-Type: application/json" -X PATCH -d @./dns-zone-01.json https://$MGR/policy/api/v1/infra/dns-forwarder-zones/dns-zone-01

 

DNS フォワーダの追加。

JSON ファイルを用意します。

直前に作成したデフォルト ゾーンのパスも指定します。

 

dns-forwarder.json

{

  "display_name" : "dns-sv-01",

  "listener_ip" : "172.16.253.254",

  "default_forwarder_zone_path" : "/infra/dns-forwarder-zones/dns-zone-01",

  "enabled" : true

}

 

DNS フォワーダを追加します。

 

PATCH /policy/api/v1/infra/tier-1s/Tier-1 ゲートウェイの ID/dns-forwarder

$ curl -ks -u $CRED -H "Content-type: application/json" -X PATCH -d @./dns-forwarder.json https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01/dns-forwarder

 

Tier-1 ゲートウェイへの DHCP サーバ接続。

前の手順で作成した DHCP サーバを、Tier-1 ゲートウェイに接続します。

ここだけは、オブジェクト更新なので PUT メソッドを利用しています。

PUT では _revision の数値をチェックするので、Tier-1 ゲートウェイの現在の _revision を直前に確認する必要があります。

ここでは、作成直後なので「"_revision" : 1」です。

(作成したばかりのオブジェクトはまず 1 になります)

 

Tier-1 ゲートウェイの _revision は、次のように GET メソッドで確認することもできます。

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01 | jq -r ._revision

1

 

あわせて、DNS フォワーダのために

route_advertisement_types に TIER1_DNS_FORWARDER_IP を追記しています。

 

t1-gw-01_full.json

{

  "tier0_path": "/infra/tier-0s/t0-gw-01",

  "route_advertisement_types": [

    "TIER1_DNS_FORWARDER_IP",

    "TIER1_CONNECTED"

  ],

  "dhcp_config_paths": [

    "/infra/dhcp-server-configs/dhcp-sv-01"

  ],

  "_revision": 1

}

 

ここだけは、作成ずみオブジェクトの更新なので、PUT メソッドです。

PUT /policy/api/v1/infra/tier-1s/Tier-1 ゲートウェイの ID

$ curl -ks -u $CRED -H "Content-Type: application/json" -X PUT -d @./t1-gw-01_full.json https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01

 

オーバーレイ セグメントの作成。(2つ)

最後に、オーバーレイ セグメントを作成します。

API の URL は、最初に作成した VLAN セグメントと同じものです。

JSON ファイルは、それぞれ DHCP での IP アドレス範囲も指定しています。

 

seg-overlay-01.json

{

  "subnets" : [ {

    "gateway_address" : "172.16.1.1/24",

    "dhcp_ranges" : [ "172.16.1.10-172.16.1.250" ],

    "network" : "172.16.1.0/24"

  } ],

  "connectivity_path" : "/infra/tier-1s/t1-gw-01",

  "transport_zone_path" : "/infra/sites/default/enforcement-points/default/transport-zones/4d5e3804-e62c-40ab-af7c-99bab2d5e5e8"

}

 

1つめのオーバーレイ セグメントを作成します。

$ curl -ks -u $CRED -H "Content-type: application/json" -X PATCH -d @./seg-overlay-01.json https://$MGR/policy/api/v1/infra/segments/seg-overlay-01

 

seg-overlay-02.json

{

  "type" : "ROUTED",

  "subnets" : [ {

    "gateway_address" : "172.16.2.1/24",

    "dhcp_ranges" : [ "172.16.2.10-172.16.2.250" ],

    "network" : "172.16.2.0/24"

  } ],

  "connectivity_path" : "/infra/tier-1s/t1-gw-01",

  "transport_zone_path" : "/infra/sites/default/enforcement-points/default/transport-zones/4d5e3804-e62c-40ab-af7c-99bab2d5e5e8"

}

 

2つめのオーバーレイ セグメントを作成します。

$ curl -ks -u $CRED -H "Content-type: application/json" -X PATCH -d @./seg-overlay-02.json https://$MGR/policy/api/v1/infra/segments/seg-overlay-02

 

ここまでに作成したオブジェクトは、NSX Manager の UI、もしくは

Part.1 の投稿で紹介した GET メソッドで確認できるはずです。

NSX-T の Policy API をためす。Part.1(GET 編)

 

以上、Policy API で NSX-T のオブジェクトを作成してみる話でした。

今回は、NSX-T のオブジェクトを、ひとつずつ Policy API で削除してみます。

 

前回ひたすら GET で確認したオブジェクトを・・・

NSX-T の Policy API をためす。Part.1(GET 編)

 

ひたすら削除して、下記の投稿の開始時点に環境を戻してみます。

自宅ラボで NSX-T 2.5 環境を構築する。Simplified UI 編。Part.1

 

今回も、Linux の curl コマンドを利用しています。

そして、必須ではありませんが便利なので jq コマンドをインストールして利用しています。

$ cat /etc/oracle-release

Oracle Linux Server release 7.7

$ jq -V

jq-1.5

 

前回と同様の変数も設定しています。

  • MGR: NSX Manager のアドレス
  • CRED: NSX Manager の「ユーザ:パスワード」 ※例はよくあるデモ用パスワード。

$ MGR=lab-nsxt-mgr-01.go-lab.jp

$ CRED='admin:VMware1!VMware1!'

 

オーバーレイ セグメントの削除。

オーバーレイ セグメント「seg-overlay-01」と「seg-overlay-01」を削除します。

セグメントの削除は、次の API です。

セグメントの表示名(display_name)ではなく、ID を指定します。

ちなみに、セグメント ID の指定は必須となっており、segments までの指定にしても全件削除はできません。

 

DELETE /policy/api/v1/infra/segments/セグメント ID

 

ここでは、VM の vNIC を接続したまま(対応する論理ポートが作成されたまま)でも削除できるように

「force=true」を指定しています。

 

オーバーレイ セグメント「seg-overlay-01」を削除します。

$ curl -ks -u $CRED -X DELETE https://$MGR/policy/api/v1/infra/segments/seg-overlay-01?force=true

 

オーバーレイ セグメント「seg-overlay-02」を削除します。

$ curl -ks -u $CRED -X DELETE https://$MGR/policy/api/v1/infra/segments/seg-overlay-02?force=true

 

成功した場合は、とくに標準出力はなく処理されます。

エラーが表示されずにうまくいかない場合は、

curl に -v  オプションを付与して実行すると問題がわかる場合があります。

 

DNS フォワーダの削除。

DNS フォワーダに関連するオブジェクトは、

DNS フォワーダ、DNS フォワーダ ゾーンの順に削除します。

 

DNS フォワーダ の削除。

DNS フォワーダは、Tier-1 ゲートウェイに接続しているので、

次の API で削除します。

 

DELETE /policy/api/v1/infra/tier-1s/Tier-1 ゲートウェイ ID/dns-forwarder

$ curl -ks -u $CRED -X DELETE https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01/dns-forwarder

 

DNS フォワーダ ゾーンの削除。

DNS フォワーダ ゾーンは、特定のゲートウェイに割り当てられないので、次の API で削除できます。

DNS フォワーダ ゾーンの ID(id)は、作成時に指定した DNS フォワーダの名前(display_name)と一致します。

 

DELETE /policy/api/v1/infra/dns-forwarder-zones/DNS フォワーダ ゾーンの ID

$ curl -ks -u $CRED -X DELETE https://$MGR/policy/api/v1/infra/dns-forwarder-zones/dns-zone-01

 

Tier-1 ゲートウェイの削除。

 

LocaleServices の削除。

Tier-1 ゲートウェイを削除する前に、ゲートウェイの Edge クラスタ割り当てなどを指定する

「LocaleServices」を削除しておく必要があります。

これ以降の URL で指定している LocaleServices などの ID は、前回の投稿での GET メソッドなどで確認できます。

UI で自動作成された LocaleServices の ID は、内部的なオブジェクトのためか UUID 形式です。

 

DELETE /policy/api/v1/infra/tier-1s/Tier-1 ゲートウェイの ID/locale-services/LocaleServices の ID

$ curl -ks -u $CRED -X DELETE https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01/locale-services/e69e20e0-fe12-11e9-be6c-bdb62d557eed

 

jq コマンドなどを利用して JSON をパースして ID を抽出し、

次のようなコマンドラインで削除することもできます。

$ T1_LOC_ID=$(curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01/locale-services | jq -r .results[].id)

$ echo $T1_LOC_ID

e69e20e0-fe12-11e9-be6c-bdb62d557eed

$ curl -ks -u $CRED -X DELETE https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01/locale-services/$T1_LOC_ID

 

Tier-1 ゲートウェイの削除。

Tier-1 ゲートウェイを削除します。

 

DELETE /policy/api/v1/infra/tier-1s/Tier-1ゲートウェイの ID

$ curl -ks -u $CRED -X DELETE https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01

 

DHCP サーバの削除。

DHCP を利用するゲートウェイ/セグメントが削除されたので、

DHCP サーバを削除します。

 

DELETE /policy/api/v1/infra/dhcp-server-configs/DHCP サーバの ID

$ curl -ks -u $CRED -X DELETE https://$MGR/policy/api/v1/infra/dhcp-server-configs/dhcp-sv-01

 

Tier-0 ゲートウェイの削除。

Tier-0 ゲートウェイの削除でも、Tier-1 ゲートウェイと同様で、

先に参照するオブジェクトを削除しておく必要があります。

 

NAT ルールの削除。

SNAT ルールを削除します。

なぜか NAT ルールの ID は、Simplified UI で作成しても UUID 形式です。

 

DELETE /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID/nat/USER/nat-rules/NAT ルールの ID

$ curl -ks -u $CRED -X DELETE https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/nat/USER/nat-rules/c149a1a0-fe14-11e9-be6c-bdb62d557eed

 

jq コマンドなどで工夫すれば、SNAT ルールを作成したときの表示名(今回は t0-snat-01)などから

ID を抽出することもできます。

$ NAT_ID=$(curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/nat/USER/nat-rules | jq -r '.results[] | select(.display_name == "t0-snat-01") | .id')

$ echo $NAT_ID

c149a1a0-fe14-11e9-be6c-bdb62d557eed

$ curl -ks -u $CRED -X DELETE https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/nat/USER/nat-rules/$NAT_ID

 

スタティックルートの削除。

Tier-0 ゲートウェイのスタティック ルートを削除します。

 

DELETE /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID/static-routes/ルート ID

$ curl -ks -u $CRED -X DELETE https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/static-routes/t0-route-01

 

インターフェースの削除。

Tier-0 ゲートウェイのインターフェースを削除します。

インターフェースは、Tier-0 ゲートウェイの LocaleServices の一部として作成されています。

 

DELETE /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID/locale-services/LocaleServices の ID/interfaces/インターフェースの ID

$ curl -ks -u $CRED -X DELETE https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/locale-services/470f1260-fe11-11e9-be6c-bdb62d557eed/interfaces/t0-uplink-01

 

ここまでのオブジェクトと同様、jq コマンドを利用する例です。

LocaleServices の ID は UI 作成時に特定できないので、工夫して取得する必要があります。

$ T0_LOC_ID=$(curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/locale-services | jq -r .results[].id)

$ echo $T0_LOC_ID

470f1260-fe11-11e9-be6c-bdb62d557eed

$ curl -ks -u $CRED -X DELETE https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/locale-services/$T0_LOC_ID/interfaces/t0-uplink-01

 

LocaleServices の削除。

Tier-0 ゲートウェイの LocaleServices を削除します。

インターフェース削除の際に取得した LocaleServices ID を指定しています。

 

DELETE /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID/locale-services/LocaleServices の ID

$ curl -ks -u $CRED -X DELETE https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/locale-services/$T0_LOC_ID

 

Tier-0 ゲートウェイの削除。

他のオブジェクトからの参照がなくなったので、Tier-0 ゲートウェイを削除します。

 

DELETE /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID

$ curl -ks -u $CRED -X DELETE https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01

 

VLAN セグメントの削除。

最後に、NSX-T 外部ネットワークとの境界にしていた VLAN セグメントを削除します。

削除の API は、オーバーレイ セグメントと同じものです。

 

DELETE /policy/api/v1/infra/segments/セグメントの ID

$ curl -ks -u $CRED -X DELETE https://$MGR/policy/api/v1/infra/segments/seg-vlan-0200

 

ひととおり Simplified UI から作成したオブジェクトを削除したので、

次は、Policy API でオブジェクトを作成してみます。

 

以上、NSX-T Policy API でオブジェクトを削除する話でした。

以前に、NSX-T の新しい UI でのラボ環境構築を紹介しました。

この UI は、新しい Policy API にもとづくもので、Simplified UI や Policy UI と呼ばれています。

自宅ラボで NSX-T 2.5 環境を構築する。Simplified UI 編。Part.1

 

ここまでに Simplified UI で作成した NSX-T 環境のオブジェクト情報を、Policy API で取得してみます。

 

ラボのイメージは下記です。

※Policy API の操作対象外となる Edge クラスタやトランスポート ゾーンなどは省略しています。

※NSX Manager も図からは省略しています。

nsxt-policy-api-get-env-01.png

 

API へのアクセスには、Linux の curl コマンドを利用します。

$ cat /etc/oracle-release

Oracle Linux Server release 7.7

 

API エンドポイントは NSX Manager です。

そして情報取得だけなので、ひたすら GET メソッドを利用します。

なお、curl のコマンドラインが長くなるので、一部の情報を変数に格納して利用しています。

  • MGR: NSX Manager のアドレス
  • CRED: NSX Manager の「ユーザ:パスワード」。 ※例はよくあるデモ用パスワード。

$ MGR=lab-nsxt-mgr-01.go-lab.jp

$ CRED='admin:VMware1!VMware1!'

 

curl コマンドでは、次のように API の URL を指定して実行します。

いくつかオプションも指定しています。

  • -k: SSL 証明書エラーの無視。(ラボ環境なので)
  • -s: サイレント モード。進捗表示などを抑止。
  • -u: ログイン 情報を指定。
  • -X: メソッド指定。今回は GET のみ。(じつは省略可)

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/segments

 

セグメント。

セグメントの情報を取得してみます。

セグメントは 3つ(seg-vlan-0200、seg-overlay-01、seg-overlay-02)作成されています。

従来の NSX の API とは異なり、Simplified UI によるオブジェクト作成では、ID と表示名(display_name)が揃えられています。

 

セグメントは、VLAN/オーバレイのどちらも、次の URL で取得できます。

 

GET /policy/api/v1/infra/segments

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/segments

{

  "results" : [ {

    "type" : "ROUTED",

    "subnets" : [ {

      "gateway_address" : "172.16.1.1/24",

      "dhcp_ranges" : [ "172.16.1.10-172.16.1.250" ],

      "network" : "172.16.1.0/24"

    } ],

    "connectivity_path" : "/infra/tier-1s/t1-gw-01",

    "transport_zone_path" : "/infra/sites/default/enforcement-points/default/transport-zones/4d5e3804-e62c-40ab-af7c-99bab2d5e5e8",

    "advanced_config" : {

      "address_pool_paths" : [ ],

      "hybrid" : false,

      "local_egress" : false,

      "connectivity" : "ON"

    },

    "resource_type" : "Segment",

    "id" : "seg-overlay-01",

    "display_name" : "seg-overlay-01",

    "path" : "/infra/segments/seg-overlay-01",

    "relative_path" : "seg-overlay-01",

    "parent_path" : "/infra/segments/seg-overlay-01",

    "marked_for_delete" : false,

    "_create_user" : "admin",

    "_create_time" : 1572769486202,

    "_last_modified_user" : "admin",

    "_last_modified_time" : 1572770491070,

    "_system_owned" : false,

    "_protection" : "NOT_PROTECTED",

    "_revision" : 1

  }, {

    "type" : "ROUTED",

    "subnets" : [ {

      "gateway_address" : "172.16.2.1/24",

      "dhcp_ranges" : [ "172.16.2.10-172.16.2.250" ],

      "network" : "172.16.2.0/24"

    } ],

    "connectivity_path" : "/infra/tier-1s/t1-gw-01",

    "transport_zone_path" : "/infra/sites/default/enforcement-points/default/transport-zones/4d5e3804-e62c-40ab-af7c-99bab2d5e5e8",

    "advanced_config" : {

      "address_pool_paths" : [ ],

      "hybrid" : false,

      "local_egress" : false,

      "connectivity" : "ON"

    },

    "resource_type" : "Segment",

    "id" : "seg-overlay-02",

    "display_name" : "seg-overlay-02",

    "path" : "/infra/segments/seg-overlay-02",

    "relative_path" : "seg-overlay-02",

    "parent_path" : "/infra/segments/seg-overlay-02",

    "marked_for_delete" : false,

    "_create_user" : "admin",

    "_create_time" : 1572771593680,

    "_last_modified_user" : "admin",

    "_last_modified_time" : 1572771593680,

    "_system_owned" : false,

    "_protection" : "NOT_PROTECTED",

    "_revision" : 0

  }, {

    "type" : "DISCONNECTED",

    "vlan_ids" : [ "200" ],

    "transport_zone_path" : "/infra/sites/default/enforcement-points/default/transport-zones/4954eeca-decb-487a-8582-b011d60ba19f",

    "advanced_config" : {

      "address_pool_paths" : [ ],

      "hybrid" : false,

      "local_egress" : false,

      "connectivity" : "ON"

    },

    "resource_type" : "Segment",

    "id" : "seg-vlan-0200",

    "display_name" : "seg-vlan-0200",

    "path" : "/infra/segments/seg-vlan-0200",

    "relative_path" : "seg-vlan-0200",

    "parent_path" : "/infra/segments/seg-vlan-0200",

    "marked_for_delete" : false,

    "_create_user" : "admin",

    "_create_time" : 1572768517065,

    "_last_modified_user" : "admin",

    "_last_modified_time" : 1572768517065,

    "_system_owned" : false,

    "_protection" : "NOT_PROTECTED",

    "_revision" : 0

  } ],

  "result_count" : 3,

  "sort_by" : "display_name",

  "sort_ascending" : true

}

 

個別でセグメント情報を取得するには、URL にセグメントの ID を指定します。

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/segments/seg-overlay-01

{

  "type" : "ROUTED",

  "subnets" : [ {

    "gateway_address" : "172.16.1.1/24",

    "dhcp_ranges" : [ "172.16.1.10-172.16.1.250" ],

    "network" : "172.16.1.0/24"

  } ],

  "connectivity_path" : "/infra/tier-1s/t1-gw-01",

  "transport_zone_path" : "/infra/sites/default/enforcement-points/default/transport-zones/4d5e3804-e62c-40ab-af7c-99bab2d5e5e8",

  "advanced_config" : {

    "address_pool_paths" : [ ],

    "hybrid" : false,

    "local_egress" : false,

    "connectivity" : "ON"

  },

  "resource_type" : "Segment",

  "id" : "seg-overlay-01",

  "display_name" : "seg-overlay-01",

  "path" : "/infra/segments/seg-overlay-01",

  "relative_path" : "seg-overlay-01",

  "parent_path" : "/infra/segments/seg-overlay-01",

  "marked_for_delete" : false,

  "_create_user" : "admin",

  "_create_time" : 1572769486202,

  "_last_modified_user" : "admin",

  "_last_modified_time" : 1572770491070,

  "_system_owned" : false,

  "_protection" : "NOT_PROTECTED",

  "_revision" : 1

}

 

オーバーレイ セグメント「seg-overlay-01」は、VM の vNIC にポートグループとして割り当ててあります。

そのため、論理ポートも作成されています。

display_name から、接続先 VM が予想できます。

 

GET /policy/api/v1/infra/segments/セグメントの ID/ports

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/segments/seg-overlay-01/ports

{

  "results" : [ {

    "resource_type" : "SegmentPort",

    "id" : "default:4a73adc5-53f4-4e56-9b32-5839d9ae153f",

    "display_name" : "vm01/vm01.vmx@3c436657-571b-4bb3-b617-2dcfdcf2ba59",

    "tags" : [ ],

    "path" : "/infra/segments/seg-overlay-01/ports/default:4a73adc5-53f4-4e56-9b32-5839d9ae153f",

    "relative_path" : "default:4a73adc5-53f4-4e56-9b32-5839d9ae153f",

    "parent_path" : "/infra/segments/seg-overlay-01",

    "marked_for_delete" : false,

    "_create_user" : "system",

    "_create_time" : 1572779101569,

    "_last_modified_user" : "system",

    "_last_modified_time" : 1572779101569,

    "_system_owned" : false,

    "_protection" : "NOT_PROTECTED",

    "_revision" : 0

  }, {

    "resource_type" : "SegmentPort",

    "id" : "default:3a2f6c53-0518-4a70-97db-e0b7af6afa75",

    "display_name" : "vm02/vm02.vmx@92e5beee-20a2-4ba7-8372-ce49aace34fc",

    "tags" : [ ],

    "path" : "/infra/segments/seg-overlay-01/ports/default:3a2f6c53-0518-4a70-97db-e0b7af6afa75",

    "relative_path" : "default:3a2f6c53-0518-4a70-97db-e0b7af6afa75",

    "parent_path" : "/infra/segments/seg-overlay-01",

    "marked_for_delete" : false,

    "_create_user" : "system",

    "_create_time" : 1572779101405,

    "_last_modified_user" : "system",

    "_last_modified_time" : 1572779101405,

    "_system_owned" : false,

    "_protection" : "NOT_PROTECTED",

    "_revision" : 0

  } ],

  "result_count" : 2,

  "sort_by" : "display_name",

  "sort_ascending" : true

}

 

 

Tier-0 ゲートウェイ。

Tier-0 ゲートウェイの情報を取得してみます。

UI では特に指定していませんでしたが、トランジット セグメントのネットワーク アドレスなどもわかります。

 

GET /policy/api/v1/infra/tier-0s

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-0s

{

  "results" : [ {

    "transit_subnets" : [ "100.64.0.0/16" ],

    "internal_transit_subnets" : [ "169.254.0.0/28" ],

    "ha_mode" : "ACTIVE_STANDBY",

    "failover_mode" : "NON_PREEMPTIVE",

    "ipv6_profile_paths" : [ "/infra/ipv6-ndra-profiles/default", "/infra/ipv6-dad-profiles/default" ],

    "force_whitelisting" : false,

    "default_rule_logging" : false,

    "disable_firewall" : false,

    "resource_type" : "Tier0",

    "id" : "t0-gw-01",

    "display_name" : "t0-gw-01",

    "path" : "/infra/tier-0s/t0-gw-01",

    "relative_path" : "t0-gw-01",

    "parent_path" : "/infra/tier-0s/t0-gw-01",

    "marked_for_delete" : false,

    "_create_user" : "admin",

    "_create_time" : 1572768576390,

    "_last_modified_user" : "admin",

    "_last_modified_time" : 1572768576448,

    "_system_owned" : false,

    "_protection" : "NOT_PROTECTED",

    "_revision" : 1

  } ],

  "result_count" : 1,

  "sort_by" : "display_name",

  "sort_ascending" : true

}

 

Tier-0 / Tier-1 ゲートウェイには、じつは LocaleServices というオブジェクトがあります。

UI での ゲートウェイ追加時に指定した Edge クラスタや、インターフェースは、

LocaleServices で定義されています。

 

まず LocaleServices の id を確認し、それをもとにインターフェース情報を取得します。

 

GET /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイ の ID/locale-services

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/locale-services

{

  "results" : [ {

    "edge_cluster_path" : "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae",

    "resource_type" : "LocaleServices",

    "id" : "470f1260-fe11-11e9-be6c-bdb62d557eed",

    "display_name" : "470f1260-fe11-11e9-be6c-bdb62d557eed",

    "path" : "/infra/tier-0s/t0-gw-01/locale-services/470f1260-fe11-11e9-be6c-bdb62d557eed",

    "relative_path" : "470f1260-fe11-11e9-be6c-bdb62d557eed",

    "parent_path" : "/infra/tier-0s/t0-gw-01",

    "marked_for_delete" : false,

    "_create_user" : "admin",

    "_create_time" : 1572768576438,

    "_last_modified_user" : "admin",

    "_last_modified_time" : 1572768576438,

    "_system_owned" : false,

    "_protection" : "NOT_PROTECTED",

    "_revision" : 0

  } ],

  "result_count" : 1,

  "sort_by" : "display_name",

  "sort_ascending" : true

}

 

確認した LocaleServices の ID をもとに、インターフェースの情報を確認してみます。

Tier-0 ゲートウェイに、VLAN セグメント「seg-vlan-0200」に接続された

インターフェース「t0-uplink-01」が作成されています。

 

GET /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID/locale-services/LocaleServices の ID/interfaces

$ ID=470f1260-fe11-11e9-be6c-bdb62d557eed

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/locale-services/$ID/interfaces

{

  "results" : [ {

    "edge_path" : "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae/edge-nodes/8e1b5bda-e116-49da-8b4b-bbb2961a7900",

    "segment_path" : "/infra/segments/seg-vlan-0200",

    "type" : "EXTERNAL",

    "resource_type" : "Tier0Interface",

    "id" : "t0-uplink-01",

    "display_name" : "t0-uplink-01",

    "path" : "/infra/tier-0s/t0-gw-01/locale-services/470f1260-fe11-11e9-be6c-bdb62d557eed/interfaces/t0-uplink-01",

    "relative_path" : "t0-uplink-01",

    "parent_path" : "/infra/tier-0s/t0-gw-01/locale-services/470f1260-fe11-11e9-be6c-bdb62d557eed",

    "marked_for_delete" : false,

    "subnets" : [ {

      "ip_addresses" : [ "192.168.200.2" ],

      "prefix_len" : 24

    } ],

    "_create_user" : "admin",

    "_create_time" : 1572768811102,

    "_last_modified_user" : "admin",

    "_last_modified_time" : 1572768811102,

    "_system_owned" : false,

    "_protection" : "NOT_PROTECTED",

    "_revision" : 0

  } ],

  "result_count" : 1,

  "sort_by" : "display_name",

  "sort_ascending" : true

}

 

Tier-0 ゲートウェイに設定したスタティック ルートも確認できます。

 

GET /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID/static-routes/ルートの ID

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/static-routes/t0-route-01

{

  "network" : "0.0.0.0/0",

  "next_hops" : [ {

    "ip_address" : "192.168.200.1",

    "admin_distance" : 1,

    "scope" : [ "/infra/tier-0s/t0-gw-01/locale-services/470f1260-fe11-11e9-be6c-bdb62d557eed/interfaces/t0-uplink-01" ]

  } ],

  "resource_type" : "StaticRoutes",

  "id" : "t0-route-01",

  "display_name" : "t0-route-01",

  "path" : "/infra/tier-0s/t0-gw-01/static-routes/t0-route-01",

  "relative_path" : "t0-route-01",

  "parent_path" : "/infra/tier-0s/t0-gw-01",

  "marked_for_delete" : false,

  "_create_user" : "admin",

  "_create_time" : 1572769868322,

  "_last_modified_user" : "admin",

  "_last_modified_time" : 1572769868322,

  "_system_owned" : false,

  "_protection" : "NOT_PROTECTED",

  "_revision" : 0

}

 

そして、Tier-0 ゲートウェイ に設定した SNAT ルールも確認できます。

手動追加した NAT ルールの種類は「USER」です。

NAT ルールは、ほかのオブジェクトと異なり、Simplified UI で作成しても

ID と display_name が別(ID が UUID)になっています。

 

GET /policy/api/v1/infra/tier-0s/Tier-0 ゲートウェイの ID/nat/USER/nat-rules

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-0s/t0-gw-01/nat/USER/nat-rules

{

  "results" : [ {

    "sequence_number" : 100,

    "action" : "SNAT",

    "source_network" : "172.16.0.0/16",

    "service" : "",

    "translated_network" : "192.168.200.2",

    "scope" : [ ],

    "enabled" : true,

    "logging" : false,

    "resource_type" : "PolicyNatRule",

    "id" : "c149a1a0-fe14-11e9-be6c-bdb62d557eed",

    "display_name" : "t0-snat-01",

    "path" : "/infra/tier-0s/t0-gw-01/nat/USER/nat-rules/c149a1a0-fe14-11e9-be6c-bdb62d557eed",

    "relative_path" : "c149a1a0-fe14-11e9-be6c-bdb62d557eed",

    "parent_path" : "/infra/tier-0s/t0-gw-01/nat/USER",

    "marked_for_delete" : false,

    "_create_user" : "admin",

    "_create_time" : 1572770124388,

    "_last_modified_user" : "admin",

    "_last_modified_time" : 1572770124388,

    "_system_owned" : false,

    "_protection" : "NOT_PROTECTED",

    "_revision" : 0

  } ],

  "result_count" : 1,

  "sort_by" : "display_name",

  "sort_ascending" : true

}

 

Tier-1 ゲートウェイ。

 

Tier-1 ゲートウェイの情報を取得してみます。

(以前に NSX-T ラボ環境構築したとおり)DHCP サーバの接続や、

ルート アドバタイズの設定が表示されていることがわかります。

 

GET /policy/api/v1/infra/tier-1s

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-1s

{

  "results" : [ {

    "tier0_path" : "/infra/tier-0s/t0-gw-01",

    "failover_mode" : "NON_PREEMPTIVE",

    "enable_standby_relocation" : false,

    "dhcp_config_paths" : [ "/infra/dhcp-server-configs/dhcp-sv-01" ],

    "route_advertisement_types" : [ "TIER1_IPSEC_LOCAL_ENDPOINT", "TIER1_DNS_FORWARDER_IP", "TIER1_CONNECTED" ],

    "force_whitelisting" : false,

    "default_rule_logging" : false,

    "disable_firewall" : false,

    "ipv6_profile_paths" : [ "/infra/ipv6-ndra-profiles/default", "/infra/ipv6-dad-profiles/default" ],

    "resource_type" : "Tier1",

    "id" : "t1-gw-01",

    "display_name" : "t1-gw-01",

    "path" : "/infra/tier-1s/t1-gw-01",

    "relative_path" : "t1-gw-01",

    "parent_path" : "/infra/tier-1s/t1-gw-01",

    "marked_for_delete" : false,

    "_create_user" : "admin",

    "_create_time" : 1572769273590,

    "_last_modified_user" : "admin",

    "_last_modified_time" : 1572771267403,

    "_system_owned" : false,

    "_protection" : "NOT_PROTECTED",

    "_revision" : 7

  } ],

  "result_count" : 1,

  "sort_by" : "display_name",

  "sort_ascending" : true

}

 

Tier-1 ゲートウェイにも、Tier-0 と同様に、

Edge クラスタの割り当てなどを定義する LocaleServices が作成されています。

 

GET /policy/api/v1/infra/tier-1s/Tier-1 ゲートウェイの ID/locale-services

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01/locale-services

{

  "results" : [ {

    "edge_cluster_path" : "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae",

    "preferred_edge_paths" : [ ],

    "resource_type" : "LocaleServices",

    "id" : "e69e20e0-fe12-11e9-be6c-bdb62d557eed",

    "display_name" : "e69e20e0-fe12-11e9-be6c-bdb62d557eed",

    "path" : "/infra/tier-1s/t1-gw-01/locale-services/e69e20e0-fe12-11e9-be6c-bdb62d557eed",

    "relative_path" : "e69e20e0-fe12-11e9-be6c-bdb62d557eed",

    "parent_path" : "/infra/tier-1s/t1-gw-01",

    "marked_for_delete" : false,

    "_create_user" : "admin",

    "_create_time" : 1572769273616,

    "_last_modified_user" : "admin",

    "_last_modified_time" : 1572769273616,

    "_system_owned" : false,

    "_protection" : "NOT_PROTECTED",

    "_revision" : 0

  } ],

  "result_count" : 1,

  "sort_by" : "display_name",

  "sort_ascending" : true

}

 

DHCP サーバ。

DHCP サーバの情報を取得します。

Tier-1 ゲートウェイに接続されていた DHCP サーバの情報は、ここで取得できます。

 

GET /policy/api/v1/infra/dhcp-server-configs

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/dhcp-server-configs

{

  "results" : [ {

    "server_address" : "172.16.254.254/24",

    "lease_time" : 86400,

    "edge_cluster_path" : "/infra/sites/default/enforcement-points/default/edge-clusters/a2958967-0579-4cbf-a018-96cfa6553fae",

    "resource_type" : "DhcpServerConfig",

    "id" : "dhcp-sv-01",

    "display_name" : "dhcp-sv-01",

    "path" : "/infra/dhcp-server-configs/dhcp-sv-01",

    "relative_path" : "dhcp-sv-01",

    "parent_path" : "/infra/dhcp-server-configs/dhcp-sv-01",

    "marked_for_delete" : false,

    "_create_user" : "admin",

    "_create_time" : 1572770383565,

    "_last_modified_user" : "admin",

    "_last_modified_time" : 1572770383565,

    "_system_owned" : false,

    "_protection" : "NOT_PROTECTED",

    "_revision" : 0

  } ],

  "result_count" : 1,

  "sort_by" : "display_name",

  "sort_ascending" : true

}

 

DNS フォワーダ。

DNS ゾーンの設定を確認してみます。

API の URL は、UI での表現よりわかりやすく「dns-forwarder-zones」となっています。

 

GET /policy/api/v1/infra/dns-forwarder-zones

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/dns-forwarder-zones

{

  "results" : [ {

    "dns_domain_names" : [ ],

    "upstream_servers" : [ "192.168.1.101", "192.168.1.102" ],

    "resource_type" : "PolicyDnsForwarderZone",

    "id" : "dns-zone-01",

    "display_name" : "dns-zone-01",

    "path" : "/infra/dns-forwarder-zones/dns-zone-01",

    "relative_path" : "dns-zone-01",

    "parent_path" : "/infra/dns-forwarder-zones/dns-zone-01",

    "marked_for_delete" : false,

    "_create_user" : "admin",

    "_create_time" : 1572771005094,

    "_last_modified_user" : "admin",

    "_last_modified_time" : 1572771005094,

    "_system_owned" : false,

    "_protection" : "NOT_PROTECTED",

    "_revision" : 0

  } ],

  "result_count" : 1,

  "sort_by" : "display_name",

  "sort_ascending" : true

}

 

DNS フォワーダは、ラボ環境では Tier-1 ゲートウェイに割り当てているので

URL のパスにも Tier-1 ゲートウェイの ID が含まれます。

※URL では Tier-1 ゲートウェイ配下ですが、わかりやすさを優先して、ここで紹介しています。

 

GET /policy/api/v1/infra/tier-1s/Tier-1 ゲートウェイの ID/dns-forwarder

$ curl -ks -u $CRED -X GET https://$MGR/policy/api/v1/infra/tier-1s/t1-gw-01/dns-forwarder

{

  "listener_ip" : "172.16.253.254",

  "default_forwarder_zone_path" : "/infra/dns-forwarder-zones/dns-zone-01",

  "log_level" : "INFO",

  "enabled" : true,

  "resource_type" : "PolicyDnsForwarder",

  "id" : "dns-forwarder",

  "display_name" : "dns-sv-01",

  "path" : "/infra/tier-1s/t1-gw-01/dns-forwarder",

  "relative_path" : "dns-forwarder",

  "parent_path" : "/infra/tier-1s/t1-gw-01",

  "marked_for_delete" : false,

  "_create_user" : "admin",

  "_create_time" : 1572771146293,

  "_last_modified_user" : "admin",

  "_last_modified_time" : 1572771146293,

  "_system_owned" : false,

  "_protection" : "NOT_PROTECTED",

  "_revision" : 0

}

 

ここで取得した情報をもとに、今後の投稿で Policy API での環境構築を紹介しようと思います。

 

以上、Policy API での情報取得でした。

 

続きはこちら。

NSX-T の Policy API をためす。Part.2(DELETE 編)