今回は、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 でオブジェクトを削除する話でした。