この投稿は、[4枚目]Nutanix Advent Calendar 2019 の 9日目です。
以前の投稿で、Nutanix CE + Prism Central 環境の Nutanix Flow での vNIC の通信を遮断してみました。今回は、GUI の代わりに REST API + Python で同じ遮断をしてみます。
今回の環境
今回 Python スクリプトを実行した環境です。
$ cat /etc/oracle-release Oracle Linux Server release 7.7 $ python -V Python 2.7.5
Nutanix CE と Prism Central の環境は、下記と同様です。
今回のスクリプト
demo-flow-quaratine.py
実行前の VM の確認
今回は、VM「vm01」を隔離して、通信遮断してみます。Prism Central から見た遮断前の VMの様子です。まだ隔離マークがついていません。
Nutanix CE の CVM にログインして、acli vm.list コマンドで vm01 の UUID を確認しておきます。
CVM$ acli vm.list VM name VM UUID vm01 f431c783-ead8-46ba-b449-f4bf6cd86e8c vm02 5d4be2ef-6d28-42e8-ab42-f3446126bc1e
下記のように、VM の UUID を REST API で取得することもできます。
(今回と方法がそろってませんが・・・)
スクリプトの実行
ログイン情報を記載した JSON ファイルを作成しておきます。192.168.20.16 は今回の Prism Central の IP アドレスです。
Linux$ cat ./login.json { "prism_address": "192.168.20.16", "user_name": "admin", "password": "パスワード" }
スクリプトを下記のように実行します。VM-UUID には vm01 の UUID、
Linux$ python ./demo-flow-quaratine.py ./login.json <VM-UUID> <on か off>
実行すると、下記のように設定するつもりの JSON(Config ---------- 以降)と、設定後の VM から取得した JSON(Return ---------- 以降)が表示されます。
実際には VM に、JSON 末尾の方にある「"Quarantine": "Default"」カテゴリ追加/削除しているだけです。
Linux$ python ./demo-flow-quaratine.py ./login.json f431c783-ead8-46ba-b449-f4bf6cd86e8c on Config ---------- { "spec": { "name": "vm01", "resources": { "num_threads_per_core": 1, "vnuma_config": { "num_vnuma_nodes": 0 }, "serial_port_list": [], "nic_list": [ { "nic_type": "NORMAL_NIC", "uuid": "8fa8117d-fb56-4a2d-8b17-1153cc56bfa1", "ip_endpoint_list": [ { "ip": "192.168.20.132", "type": "ASSIGNED" } ], "mac_address": "50:6b:8d:58:32:dd", "subnet_reference": { "kind": "subnet", "name": "vlan-0-ipam", "uuid": "c5afa215-90d4-406c-a489-90407e29f85f" }, "is_connected": true } ], "num_vcpus_per_socket": 1, "num_sockets": 1, "gpu_list": [], "memory_size_mib": 1024, "power_state": "ON", "hardware_clock_timezone": "UTC", "power_state_mechanism": { "guest_transition_config": { "should_fail_on_script_failure": false, "enable_script_exec": false }, "mechanism": "HARD" }, "vga_console_enabled": true, "disk_list": [ { "data_source_reference": { "kind": "image", "uuid": "0e228e1b-a8df-4c1d-92a0-b00dfccdd213" }, "device_properties": { "device_type": "DISK", "disk_address": { "device_index": 0, "adapter_type": "SCSI" } }, "uuid": "a2984b2e-ef34-46cc-81fc-16acc00617d6", "disk_size_bytes": 8589934592, "disk_size_mib": 8192 }, { "device_properties": { "device_type": "CDROM", "disk_address": { "device_index": 3, "adapter_type": "IDE" } }, "uuid": "41beb19e-d760-4d2a-be77-81fadc573554", "disk_size_bytes": 382976, "disk_size_mib": 1 }, { "device_properties": { "device_type": "CDROM", "disk_address": { "device_index": 0, "adapter_type": "IDE" } }, "uuid": "b3422531-fca0-4c6d-9eaf-2775e385cd00" } ] }, "cluster_reference": { "kind": "cluster", "name": "lab-ntnx-01", "uuid": "00059788-a2b4-4e5f-1a6e-005056b688d2" } }, "api_version": "3.1", "metadata": { "kind": "vm", "uuid": "f431c783-ead8-46ba-b449-f4bf6cd86e8c", "project_reference": { "kind": "project", "name": "default", "uuid": "eb8a8aaa-5ab0-48d7-8a1f-82309f8f4f2e" }, "creation_time": "2019-11-22T12:38:41Z", "spec_version": 24, "owner_reference": { "kind": "user", "uuid": "00000000-0000-0000-0000-000000000000", "name": "admin" }, "categories": { "Quarantine": "Default" } } } Return ---------- { "status": { "state": "PENDING", "execution_context": { "task_uuid": "80ec97a0-1b7a-4ec0-98d0-f0cee9be76f2" } }, "spec": { "name": "vm01", "resources": { "num_threads_per_core": 1, "vnuma_config": { "num_vnuma_nodes": 0 }, "serial_port_list": [], "nic_list": [ { "nic_type": "NORMAL_NIC", "uuid": "8fa8117d-fb56-4a2d-8b17-1153cc56bfa1", "ip_endpoint_list": [ { "ip": "192.168.20.132", "type": "ASSIGNED" } ], "mac_address": "50:6b:8d:58:32:dd", "subnet_reference": { "kind": "subnet", "name": "vlan-0-ipam", "uuid": "c5afa215-90d4-406c-a489-90407e29f85f" }, "is_connected": true } ], "num_vcpus_per_socket": 1, "num_sockets": 1, "gpu_list": [], "memory_size_mib": 1024, "power_state": "ON", "hardware_clock_timezone": "UTC", "power_state_mechanism": { "guest_transition_config": { "should_fail_on_script_failure": false, "enable_script_exec": false }, "mechanism": "HARD" }, "vga_console_enabled": true, "disk_list": [ { "data_source_reference": { "kind": "image", "uuid": "0e228e1b-a8df-4c1d-92a0-b00dfccdd213" }, "device_properties": { "device_type": "DISK", "disk_address": { "device_index": 0, "adapter_type": "SCSI" } }, "uuid": "a2984b2e-ef34-46cc-81fc-16acc00617d6", "disk_size_bytes": 8589934592, "disk_size_mib": 8192 }, { "device_properties": { "device_type": "CDROM", "disk_address": { "device_index": 3, "adapter_type": "IDE" } }, "uuid": "41beb19e-d760-4d2a-be77-81fadc573554", "disk_size_bytes": 382976, "disk_size_mib": 1 }, { "device_properties": { "device_type": "CDROM", "disk_address": { "device_index": 0, "adapter_type": "IDE" } }, "uuid": "b3422531-fca0-4c6d-9eaf-2775e385cd00" } ] }, "cluster_reference": { "kind": "cluster", "name": "lab-ntnx-01", "uuid": "00059788-a2b4-4e5f-1a6e-005056b688d2" } }, "api_version": "3.1", "metadata": { "kind": "vm", "uuid": "f431c783-ead8-46ba-b449-f4bf6cd86e8c", "project_reference": { "kind": "project", "name": "default", "uuid": "eb8a8aaa-5ab0-48d7-8a1f-82309f8f4f2e" }, "creation_time": "2019-11-22T12:38:41Z", "spec_version": 25, "spec_hash": "ccefc53eb6b26c85cc864e9b7eaecde1d4fe72b2", "owner_reference": { "kind": "user", "name": "admin", "uuid": "00000000-0000-0000-0000-000000000000" }, "categories": { "Quarantine": "Default" } } }
隔離した VM の様子
Prism Central で Web ブラウザを更新すると、対象の VM に隔離マークがついたことが確認できるはずです。VM の通信が遮断されているはずです。
そして、スクリプト実行時の末尾のオプションを「off」(実は on 以外)にすると、「"Quarantine": "Default"」カテゴリが削除されて、隔離が解除できるはずです。
以上。