NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Nutanix CE の Nutanix Files ファイル サーバーを削除する。(REST API 編)

Nutanix Files の ファイル サーバーを、REST API で削除してみます。

下記の投稿での操作を、curl で実施してみます。

今回の内容です。

利用する Nutanix REST API について

Nutanix REST API には複数のバージョンがありますが、Nutanix Filse の操作では API v1 の vfilers リソースを利用します。

タスクの進捗確認では 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 なしのレスポンス出力は、下記のように見えるはずです。

f:id:gowatana:20210804003000p:plain

以上。

©2021 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。