Nutanix Files の ファイル サーバーを、REST API で削除してみます。
下記の投稿での操作を、curl で実施してみます。
- 半端者インフラエンジニアのメモ: Nutanix Filesの削除手順 (Prism 操作)
-
Nutanix CE の Nutanix Files ファイル サーバーを削除する。(ncli 編) - NTNX>日記
今回の内容です。
構成のイメージです。
利用する Nutanix REST API について
Nutanix REST API には複数のバージョンがありますが、Nutanix Filse の操作では API v1 の vfilers リソースを利用します。
- https://portal.nutanix.com/page/documents/details?targetId=API-Ref-AOS-v6_0:api-vfilers-api-auto-r.html
- ただし、これは今回利用している Nutanix CE(AOS 5.18 ベース)よりも新しい、AOS 6.0 のリファレンスです。
タスクの進捗確認では v2 tasks リソースを利用します。
ちなみに、Nutanix REST API のリファレンスは、Prism に内蔵されている REST API Explorer でも確認できます。
今回の環境
Nutanix のソフトウェア バージョンは下記を利用しています。
- Nutanix CE 2020.09.16
- Nutanix Files 3.8.1.1
curl を実行する Linux クライアントです。
Linux$ cat /etc/system-release Oracle Linux Server release 7.9
デフォルトでインストールされている curl と、追加インストールした jq コマンドを利用します。
Linux$ yum list jq 読み込んだプラグイン:ulninfo インストール済みパッケージ jq.x86_64 1.5-1.0.1.el7 @ol7_addons
操作対象の情報です。
- Prism(CVM)のアドレス: lab-nxce-01.go-lab.jp
- Prism のユーザ: admin(パスワードは例として Nutanix/4u)
- Nutanix Files ファイル サーバーの名前: test-fs-01
何度もコマンドラインに記載するのは微妙なので、あらかじめ変数に格納しておきます。
Linux$ PRISM=lab-nxce-01.go-lab.jp Linux$ USERPASS='admin:Nutanix/4u' Linux$ FS_NAME=test-fs-01
ファイル サーバー UUID の取得
REST API のファイル サーバー操作では、ファイル サーバーを UUID で指定するので、あらかじめ取得しておきます。
Linux$ FS_UUID=$(curl -ks -u $USERPASS "https://$PRISM:9440/PrismGateway/services/rest/v1/vfilers/?filterCriteria=Name&searchString=$FS_NAME" | jq -r '.entities[0].uuid') Linux$ echo $FS_UUID 533c7fb9-7aa8-43b6-b7c9-bc4139b7c16d
DNS レコードの削除
API v1 /vfilers/${FS_UUID}/removeDns の POST メソッド(DELETE メソッドではなく)で、DNS レコードを削除しておきます。
パラメータを記載した、json ファイルを作成しておきます。dnsUserName と dnsPassword には、ドメイン管理者の(DNS レコードを編集できる)AD ドメイン ユーザを指定します。
remove_dns.json
{ "dnsOpType": "MS_DNS", "dnsUserName": "afsadmin", "dnsPassword": "Nutanix/4u" }
/vfilers/${FS_UUID}/removeDns の POST メソッドを実行します。戻り値でタスクの UUID がわかるので、変数「TASK」に格納しておきます。
Linux$ TASK=$(curl -ks -u $USERPASS -X POST -H "Content-Type: application/json" -d @./remove_dns.json "https://$PRISM:9440/PrismGateway/services/rest/v1/vfilers/${FS_UUID}/removeDns") Linux$ echo $TASK {"taskUuid":"fdb2f724-ee4c-4d5a-9ce6-a78014385536"}
タスクの UUID を、変数「TASK_UUID」に格納しておきます。
Linux$ TASK_UUID=$(echo $TASK | jq -r .taskUuid) Linux$ echo $TASK_UUID fdb2f724-ee4c-4d5a-9ce6-a78014385536
API v2 /tasks の GET メソッドで、タスクの進捗を確認できます。
サブ タスクが発生する場合にまとめて取得できるように、URL に「include_subtasks_info=true」を追記しています。
Linux$ curl -ks -u $USERPASS "https://$PRISM:9440/api/nutanix/v2.0/tasks/$TASK_UUID?include_subtasks_info=true" | jq -r . { "uuid": "fdb2f724-ee4c-4d5a-9ce6-a78014385536", "meta_request": { "method_name": "FsDnsOperationsTask" }, "create_time_usecs": 1627989071887982, "start_time_usecs": 1627989071903239, "complete_time_usecs": 1627989079635860, "last_updated_time_usecs": 1627989079635860, "entity_list": [ { "entity_id": "533c7fb9-7aa8-43b6-b7c9-bc4139b7c16d", "entity_type": "FileServer", "entity_name": null } ], "operation_type": "FsDnsOperationsTask", "message": "Fileserver DNS removal task completed", "percentage_complete": 100, "progress_status": "Succeeded", "cluster_uuid": "0005bcc8-1ddc-c8ba-37dd-1c697a630d37" }
ファイル サーバーのドメイン離脱
ファイル サーバーのドメイン離脱は、API v1 の /vfilers/${FS_UUID}/unjoinDomain です。これで、AD から FSVM のコンピュータ アカウントも削除されます。
パラメータを記載した JSON ファイルを作成しておきます。ファイル サーバー管理者の AD ドメイン ユーザを指定します。
unjoin_domain.json
{ "windowsAdUsername": "afsadmin", "windowsAdPassword": "Nutanix/4u" }
ファイル サーバーを、ドメイン離脱させます。さきほどと同様に、タスク情報を確認しやすいようにしています。
Linux$ TASK=$(curl -ks -u $USERPASS -X POST -H "Content-Type: application/json" -d @./unjoin_domain.json "https://$PRISM:9440/PrismGateway/services/rest/v1/vfilers/${FS_UUID}/unjoinDomain") Linux$ echo $TASK {"taskUuid":"fdc2f739-9c90-49dd-b96f-3eab820d937c"}
タスクの完了を待って、次に進みます。
Linux$ TASK_UUID=$(echo $TASK | jq -r .taskUuid) Linux$ curl -ks -u $USERPASS "https://$PRISM:9440/api/nutanix/v2.0/tasks/$TASK_UUID?include_subtasks_info=true" | jq -r .
ファイル サーバーの削除
API v1 /vfilers の DELETE メソッドで、ファイル サーバーを削除します。
さきほどの POST メソッドとは異なり、DELETE メソッドなので「-d」によるパラメータ指定は不要です。保護ドメインを削除する deletePdAndSnapshots=true、FSVM 専用のストレージ コンテナを削除する deleteContainer=true を指定しています。
Linux$ TASK=$(curl -ks -u $USERPASS -X DELETE "https://$PRISM:9440/PrismGateway/services/rest/v1/vfilers/${FS_UUID}?deletePdAndSnapshots=true&deleteContainer=true")
ファイル サーバーの削除では、これまでのタスクとは異なり、いくつかサブ タスクがあります。
Linux$ TASK_UUID=$(echo $TASK | jq -r .taskUuid) Linux$ curl -ks -u $USERPASS "https://$PRISM:9440/api/nutanix/v2.0/tasks/$TASK_UUID?include_subtasks_info=true" | jq -r . { "uuid": "221c66e5-e0f7-4e8b-88b4-acd2b1cec815", "meta_request": { "method_name": "FileServerDelete" }, "create_time_usecs": 1627990600440295, "start_time_usecs": 1627990600465829, "complete_time_usecs": 1627990655834396, "last_updated_time_usecs": 1627990655834396, "entity_list": [ { "entity_id": "533c7fb9-7aa8-43b6-b7c9-bc4139b7c16d", "entity_type": "FileServer", "entity_name": null } ], "operation_type": "FileServerDelete", "message": "File server test-fs-01: deleted", "percentage_complete": 100, "progress_status": "Succeeded", "subtask_uuid_list": [ "125a9ea8-f674-4b6b-8911-1b60d6ff26ea", "2ab9d41c-da2d-48ed-a32c-e2491dbde280", "2cb4f4cd-94a8-4ad6-abdf-3e83398102e3", "eb9bf83c-4828-44db-a530-11578d513267" ], "subtask_info_list": [ { "uuid": "125a9ea8-f674-4b6b-8911-1b60d6ff26ea", "meta_request": { "method_name": "VolumeGroupDelete" }, "meta_response": { "error_code": 0 }, "create_time_usecs": 1627990619314319, "start_time_usecs": 1627990619337137, "complete_time_usecs": 1627990619803968, "last_updated_time_usecs": 1627990619803968, "entity_list": [ { "entity_id": "8e6f3052-d7b0-4029-b681-a1c434580000", "entity_type": "VolumeGroup", "entity_name": null } ], "operation_type": "kVolumeGroupDelete", "message": "", "percentage_complete": 100, "progress_status": "Succeeded", "parent_task_uuid": "221c66e5-e0f7-4e8b-88b4-acd2b1cec815", "cluster_uuid": "0005bcc8-1ddc-c8ba-37dd-1c697a630d37" }, { "uuid": "2ab9d41c-da2d-48ed-a32c-e2491dbde280", "meta_request": { "method_name": "VolumeGroupDelete" }, "meta_response": { "error_code": 0 }, "create_time_usecs": 1627990619877734, "start_time_usecs": 1627990619895090, "complete_time_usecs": 1627990620351531, "last_updated_time_usecs": 1627990620351531, "entity_list": [ { "entity_id": "7de4d838-a778-4d3c-8564-ca1cb922d03e", "entity_type": "VolumeGroup", "entity_name": null } ], "operation_type": "kVolumeGroupDelete", "message": "", "percentage_complete": 100, "progress_status": "Succeeded", "parent_task_uuid": "221c66e5-e0f7-4e8b-88b4-acd2b1cec815", "cluster_uuid": "0005bcc8-1ddc-c8ba-37dd-1c697a630d37" }, { "uuid": "2cb4f4cd-94a8-4ad6-abdf-3e83398102e3", "meta_request": { "method_name": "VmDelete" }, "meta_response": { "error_code": 0 }, "create_time_usecs": 1627990617043237, "start_time_usecs": 1627990617063668, "complete_time_usecs": 1627990619210413, "last_updated_time_usecs": 1627990619210413, "entity_list": [ { "entity_id": "a2f9ab4d-8f53-4b23-93c4-aa5d7808a975", "entity_type": "VM", "entity_name": null } ], "operation_type": "VmDelete", "message": "", "percentage_complete": 100, "progress_status": "Succeeded", "parent_task_uuid": "221c66e5-e0f7-4e8b-88b4-acd2b1cec815", "subtask_uuid_list": [ "514d5616-03b4-467f-ba06-42a6b54197b3" ], "cluster_uuid": "0005bcc8-1ddc-c8ba-37dd-1c697a630d37" }, { "uuid": "eb9bf83c-4828-44db-a530-11578d513267", "meta_request": { "method_name": "VmGroupDelete" }, "meta_response": { "error_code": 0 }, "create_time_usecs": 1627990612605400, "start_time_usecs": 1627990612622175, "complete_time_usecs": 1627990612827622, "last_updated_time_usecs": 1627990612827622, "entity_list": [ { "entity_id": "7ecaf16c-698f-4996-a280-a9ed407557a0", "entity_type": "VmGroup", "entity_name": null } ], "operation_type": "kVmGroupDelete", "message": "", "percentage_complete": 100, "progress_status": "Succeeded", "parent_task_uuid": "221c66e5-e0f7-4e8b-88b4-acd2b1cec815", "subtask_uuid_list": [ "ef8773f4-93e1-4067-a6c1-c550c4c4aa57" ], "cluster_uuid": "0005bcc8-1ddc-c8ba-37dd-1c697a630d37" } ], "cluster_uuid": "0005bcc8-1ddc-c8ba-37dd-1c697a630d37" }
タスクの percentage_complete が 100%、progress_status が Succeeded になったら、削除完了です。
Linux$ curl -ks -u $USERPASS "https://$PRISM:9440/api/nutanix/v2.0/tasks/$TASK_UUID?include_subtasks_info=true" | jq -r . | grep -e operation_type -e percentage_complete -e progress_status "operation_type": "FileServerDelete", "percentage_complete": 100, "progress_status": "Succeeded", "operation_type": "kVolumeGroupDelete", "percentage_complete": 100, "progress_status": "Succeeded", "operation_type": "VmDelete", "percentage_complete": 100, "progress_status": "Succeeded", "operation_type": "kVmGroupDelete", "percentage_complete": 100, "progress_status": "Succeeded",
ちなみに、grep なしのレスポンス出力は、下記のように見えるはずです。
以上。