NSX-T による DHCP サービス機能で、MAC アドレスと IP アドレスの静的な割り当て(static-bindings)を設定してみます。
前回の投稿では、NSX Manager の Web インターフェースから設定しました。
NSX-T 2.4 で DHCP の static-bindings を使用してみる。(GUI 編)
今回は、REST API から同様の設定をしてみます。
環境の説明。
以前の投稿と同様に、下記の環境を利用しています。
REST API へのアクセスには、下記の投稿のように curl + jq コマンドを利用しています。
NSX-T 2.4 を REST API で操作してみる。Part.1
この投稿でのコマンドライン中にある $CRED には「ユーザ:パスワード」、
$MGR には NSX Manager のアドレスを格納しています。
IP アドレスを割り当てる MAC アドレスの確認。
DHCP の static-bindings では、MAC アドレスに IP アドレスを割り当てます。
今回は、NSX-T を利用している vSphere(ESXi)上の VM がもつ vNIC に IP アドレスを設定します。
そのため、NSX Manager からでも VM / vNIC とその MAC アドレスが確認できます。
REST API では、この情報を virtual-machines と vifs の情報を GET することで確認できます。
今回は、例をシンプルにするため下記を前提としています。
- 環境内の VM 名に重複がない。
- VM の vNIC は 1つだけ。
VM の名前(vm01)から MAC アドレスを確認してみます。
vm01 の情報は、下記のように取得できます。
$ curl -ks -u $CRED -X GET https://$MGR/api/v1/fabric/virtual-machines | jq -r '.results[] | select(.display_name == "vm01")'
{
"host_id": "c33ad1aa-f3b4-4a24-98da-bc32eeff1f31",
"source": {
"target_id": "c33ad1aa-f3b4-4a24-98da-bc32eeff1f31",
"target_display_name": "c33ad1aa-f3b4-4a24-98da-bc32eeff1f31",
"target_type": "HostNode",
"is_valid": true
},
"external_id": "501f7750-8d29-8c53-2d5e-e5b88b06f812",
"power_state": "VM_RUNNING",
"local_id_on_host": "1",
"compute_ids": [
"moIdOnHost:1",
"hostLocalId:1",
"locationId:564d7a4c-fa5e-33bf-1c3e-ca12ebd75f6f",
"instanceUuid:501f7750-8d29-8c53-2d5e-e5b88b06f812",
"externalId:501f7750-8d29-8c53-2d5e-e5b88b06f812",
"biosUuid:421fa276-d1a6-c34a-2dc6-ea0de1d2ace5"
],
"type": "REGULAR",
"guest_info": {
"os_name": "Oracle Linux 7 (64-bit)",
"computer_name": "localhost.localdomain"
},
"resource_type": "VirtualMachine",
"display_name": "vm01",
"_last_sync_time": 1563839902208
}
ここから、下記のように VM の ID だけを取得することもできます。
$ curl -ks -u $CRED -X GET https://$MGR/api/v1/fabric/virtual-machines | jq -r '.results[] | select(.display_name == "vm01") | .external_id'
501f7750-8d29-8c53-2d5e-e5b88b06f812
そして、VM ID をもとに、vNIC の MAC アドレスを確認します。
※ちなみにこの VM は、前回の投稿で DHCP による IP アドレス / ホスト名が設定がされた状態です。
$ curl -ks -u $CRED -X GET https://$MGR/api/v1/fabric/vifs | jq -r '.results[] | select(.owner_vm_id == "501f7750-8d29-8c53-2d5e-e5b88b06f812")'
{
"external_id": "501f7750-8d29-8c53-2d5e-e5b88b06f812-4000",
"owner_vm_id": "501f7750-8d29-8c53-2d5e-e5b88b06f812",
"host_id": "c33ad1aa-f3b4-4a24-98da-bc32eeff1f31",
"vm_local_id_on_host": "1",
"device_key": "4000",
"device_name": "Network adapter 1",
"mac_address": "00:50:56:9f:fa:ac",
"lport_attachment_id": "5ccf3507-1001-419e-81be-3f197bf583f4",
"ip_address_info": [
{
"source": "VM_TOOLS",
"ip_addresses": [
"172.16.1.101",
"fe80::1b24:4d58:f0b4:bfe8"
]
}
],
"resource_type": "VirtualNetworkInterface",
"display_name": "Network adapter 1",
"_last_sync_time": 1563839902211
}
MAC アドレスだけを取得することもできます。
$ curl -ks -u $CRED -X GET https://$MGR/api/v1/fabric/vifs | jq -r '.results[] | select(.owner_vm_id == "501f7750-8d29-8c53-2d5e-e5b88b06f812") | .mac_address'
00:50:56:9f:fa:ac
DHCP static-bindings の設定。
IP アドレスの静的割り当て(static-bindings)は、NSX-T による DHCP サーバに対して設定します。
まず、DHCP サーバの ID を確認します。
今回も、DHCP サーバ名は「dhcp-sv-001」にしています。
$ DHCP_SV_ID=`curl -ks -u $CRED -X GET https://$MGR/api/v1/dhcp/servers | jq -r '.results[] | select(.display_name=="dhcp-sv-001") | .id'`
$ echo $DHCP_SV_ID
73445136-5ab5-459a-a357-d736e534a467
静的割り当てのための JSON ファイル「dhcp-bind_vm01.json」を作成しておきます。
今回は、下記のパラメータのみ指定しています。
- 表示名(display_name)
- MAC アドレス ※必須
- IP アドレス ※必須
- ホスト名
JSON ファイルのパラメータは、前回の GUI での設定時と同じものです。
同じ静的割り当て設定が存在するとエラーになるので、
すでに設定がある場合は、NSX Manager などから削除しておきます。
$ cat ./dhcp-bind_vm01.json
{
"display_name": "00:50:56:9f:fa:ac",
"mac_address": "00:50:56:9f:fa:ac",
"ip_address": "172.16.1.101",
"host_name": "vm01"
}
作成した JSON ファイルを指定して POST メソッドを実行すると、DHCP の静的割り当てを作成できます。
curl を実行すると、作成された設定の情報が表示されます。
$ curl -ks -u $CRED -X POST -H "Content-type: application/json" -d @./dhcp-bind_vm01.json https://$MGR/api/v1/dhcp/servers/$DHCP_SV_ID/static-bindings
{
"mac_address" : "00:50:56:9f:fa:ac",
"ip_address" : "172.16.1.101",
"host_name" : "vm01",
"resource_type" : "DhcpStaticBinding",
"id" : "bb2cd277-20f3-4184-81c5-250f20f71f7a",
"display_name" : "00:50:56:9f:fa:ac",
"lease_time" : 86400,
"_create_user" : "admin",
"_create_time" : 1564095298669,
"_last_modified_user" : "admin",
"_last_modified_time" : 1564095298669,
"_system_owned" : false,
"_protection" : "NOT_PROTECTED",
"_revision" : 0
}
これで、対象 MAC アドレスに IP アドレスが設定されるようになります。
DHCP static-bindings の削除。
一方、 静的割り当ての削除は、DELETE メソッドで実施できます。
静的割り当て設定の ID は、作成時にも表示されていましたが、
下記のように VM 名などから取得することもできます。
$ curl -ks -u $CRED -X GET https://$MGR/api/v1/dhcp/servers/$DHCP_SV_ID/static-bindings | jq -r '.results[] | select(.host_name == "vm01") | .id'
bb2cd277-20f3-4184-81c5-250f20f71f7a
そして、削除は DELETE メソッドで削除できます。
$ curl -ks -u $CRED -X DELETE https://$MGR/api/v1/dhcp/servers/$DHCP_SV_ID/static-bindings/bb2cd277-20f3-4184-81c5-250f20f71f7a
$ curl -ks -u $CRED -X GET https://$MGR/api/v1/dhcp/servers/$DHCP_SV_ID/static-bindings
{
"results" : [ ],
"result_count" : 0
}
うまく工夫をすると、NSX-T で IPAM(IP アドレス管理)を実現することもできそうかなと思います。
以上、NSX-T での DHCP static-bindings 設定でした。