以前に、HoL で、NSX API を試す方法を紹介しました。
今回は、HOL-SDC-1603 VMware NSX Introduction の Module 1 と同様の設定を
Web Client のかわりに curl コマンドで NSX API を実行して設定してみようと思います。
コマンドラインで指定している 192.168.110.15 は、NSX Manager の IP アドレスです。
手順の流れ
- 論理スイッチ「Prod_Logical_Switch」を作成する。
- 作成した論理スイッチと NSX Edge を接続する。
- VM「web-03a」と「web-04a」の vNIC を、作成した論理スイッチに接続する。
- 確認してみる。
1. 論理スイッチ作成。
まず、論理スイッチ「Prod_Logical_Switch」を作成します。
下記のような XML ファイルを作成しました。
ls-prod.txt
<virtualWireCreateSpec>
<name>Prod_Logical_Switch</name>
<tenantId>virtual wire tenant</tenantId>
<controlPlaneMode>UNICAST_MODE</controlPlaneMode>
<guestVlanAllowed>false</guestVlanAllowed>
</virtualWireCreateSpec>
「テキストの送信」で、下記のようなコマンドを送信、実行して、ファイルを作成します。
cat <<EOF > ls-prod.txt
<virtualWireCreateSpec>
<name>Prod_Logical_Switch</name>
<tenantId>virtual wire tenant</tenantId>
<controlPlaneMode>UNICAST_MODE</controlPlaneMode>
<guestVlanAllowed>false</guestVlanAllowed>
</virtualWireCreateSpec>
EOF
XML で指定している ID は、Web Client の NSX Edges 画面であたりがつきますが、
下記のような NSX Edge の情報を取得する API からでもわかります。
curl -k -s -u admin:VMware1! -X GET https://192.168.110.15/api/4.0/edges | xmllint --format - | grep -e objectId -e name
ファイルを読み込んで、論理スイッチを作成する API を実行します。
下記のようなコマンドラインを実行します。virtualwire は、論理スイッチのことです。
cat ls-prod.txt | curl -k -s -u admin:VMware1! -X POST -H 'Content-type: text/xml' -d @- https://192.168.110.15/api/2.0/vdn/scopes/vdnscope-1/virtualwires
このような感じで実行します。例では virtualwire-5 という ID で、論理スイッチが作成されました。
2. 論理スイッチと NSX Edge を接続。
作成した論理スイッチと、NSX Edge Service Gateway(ESG) を接続します。
この ESG は、Perimeter-Gateway の役割として配置されているものです。
XML は、下記のように Lab マニュアルでの設定値を指定しました。
portgroupId には、論理スイッチ作成時に表示された virtualwire-5 を指定します。
edge-if-prod.txt
<vnic>
<name>Prod_Interface</name>
<addressGroups>
<addressGroup>
<primaryAddress>172.16.40.1</primaryAddress>
<subnetMask>255.255.255.0</subnetMask>
<subnetPrefixLength>24</subnetPrefixLength>
</addressGroup>
</addressGroups>
<mtu>1500</mtu>
<type>internal</type>
<isConnected>true</isConnected>
<index>5</index>
<portgroupId>virtualwire-5</portgroupId>
<enableProxyArp>false</enableProxyArp>
<enableSendRedirects>false</enableSendRedirects >
</vnic>
ファイルは、下記のように作成します。
cat <<EOF > edge-if-prod.txt
<vnic>
<name>Prod_Interface</name>
<addressGroups>
<addressGroup>
<primaryAddress>172.16.40.1</primaryAddress>
<subnetMask>255.255.255.0</subnetMask>
<subnetPrefixLength>24</subnetPrefixLength>
</addressGroup>
</addressGroups>
<mtu>1500</mtu>
<type>internal</type>
<isConnected>true</isConnected>
<index>5</index>
<portgroupId>virtualwire-5</portgroupId>
<enableProxyArp>false</enableProxyArp>
<enableSendRedirects>false</enableSendRedirects >
</vnic>
EOF
上記のファイルを指定して、ESG のインターフェースを 5 を設定して論理スイッチを接続します。
edge-id として「edge-2」、インターフェースの Index として 5 を指定しています。
cat edge-if-prod.txt | curl -k -s -u admin:VMware1! -X PUT -H 'Content-type: text/xml' -d @- https://192.168.110.15/api/4.0/edges/edge-2/vnics/5
3. 論理スイッチに vNIC を接続。
作成した論理スイッチに、VM の vNIC を接続します。
このとき使用する XML では、VM と vNIC の ID が必要になります。
VM ID と vNIC ID の確認。
論理スイッチに VM の vNIC を接続するときには、VM と vNIC の ID を指定する必要があります。
NSX の API ガイドでは vCenter の Web UI 経由(/mob)で確認する方法が紹介されていますが、
HoL だと操作が大変なので、web-03a と web-04a に関係する ID を、PowerCLI で確認してしまいます。
まず PowerCLI を起動して、vCenter に接続します。
PowerCLI> Connect-VIServer -Server vcsa-01a -User CORP\Administrator -Password VMware1!
VM の ID は、下記のコマンドラインでわかります。
UUID(ここでは PersistentId)の値も指定するケースがあるようなので、ついでに見ておきます。
PowerCLI> Get-VM web-0[34]a | ft -AutoSize Id,PersistentId
vNIC の ID は、下記のコマンドラインでわかります。
4000 から ID が付与されていますが、API で指定するときは
4000 → 000、4001 → 001 といったように読み替えるようです。
PowerCLI> Get-VM web-0[34]a | Get-NetworkAdapter | ft -AutoSize Parent,Id,Name
VM の ID がそれぞれ vm-305 と vm-306 だとわかります。
vNIC の ID は、4000~ の数字です。
論理スイッチに vNIC を接続する。
今回の XML の内容は、下記のようにしました。
vnic-attach_web-03a.txt
- web-03a を Prod_Logical_Switch に接続する。
- 502e58e2-c139-f2d9-5560-9df1ffa26b45 が web-03a を表します。
- vnicUuid は、先頭が VM ID で、 「.000」が vNIC の順番によって変わります。
- vitualwire-5 が、Prod_Logical_Switch を表します。
<com.vmware.vshield.vsm.inventory.dto.VnicDto>
<objectId>502e58e2-c139-f2d9-5560-9df1ffa26b45</objectId>
<vnicUuid>502e58e2-c139-f2d9-5560-9df1ffa26b45.000</vnicUuid>
<portgroupId>virtualwire-5</portgroupId>
</com.vmware.vshield.vsm.inventory.dto.VnicDto>
vnic-attach_web-04a.txt
- web-04a を Prod_Logical_Switch に接続する。
- 502ea036-ec16-45e1-2a61-a702e7f73d5a.000 と vm-306 は、どちらも web-04a を表します。
- ためしに objectId を、vm-N 形式の VM ID を指定しても設定できました。
ただし API Guide は UUID 指定なので、その方がよいかもしれません。 - ちなみに、vnicUuid は vm-N 形式だとダメでした。
<com.vmware.vshield.vsm.inventory.dto.VnicDto>
<objectId>vm-306</objectId>
<vnicUuid>502ea036-ec16-45e1-2a61-a702e7f73d5a.000</vnicUuid>
<portgroupId>virtualwire-5</portgroupId>
</com.vmware.vshield.vsm.inventory.dto.VnicDto>
それぞれ、下記のようにファイル作成します。
web-03a 用
cat <<EOF > vnic-attach_web-03a.txt
<com.vmware.vshield.vsm.inventory.dto.VnicDto>
<objectId>502e58e2-c139-f2d9-5560-9df1ffa26b45 </objectId>
<vnicUuid>502e58e2-c139-f2d9-5560-9df1ffa26b45.000</vnicUuid>
<portgroupId>virtualwire-5</portgroupId>
</com.vmware.vshield.vsm.inventory.dto.VnicDto>
EOF
web-04a 用
cat <<EOF > vnic-attach_web-04a.txt
<com.vmware.vshield.vsm.inventory.dto.VnicDto>
<objectId>vm-306</objectId>
<vnicUuid>502ea036-ec16-45e1-2a61-a702e7f73d5a.000</vnicUuid>
<portgroupId>virtualwire-5</portgroupId>
</com.vmware.vshield.vsm.inventory.dto.VnicDto>
EOF
web-03a の vNIC を接続します。
cat vnic-attach_web-03a.txt | curl -k -s -u admin:VMware1! -X POST -H 'Content-type: text/xml' -d @- https://192.168.110.15/api/2.0/vdn/virtualwires/vm/vnic
web-04a の vNIC を接続します。
cat vnic-attach_web-04a.txt | curl -k -s -u admin:VMware1! -X POST -H 'Content-type: text/xml' -d @- https://192.168.110.15/api/2.0/vdn/virtualwires/vm/vnic
4. 設定の確認。
Web Client でも、作成した論理スイッチ「Prod_Logical_Switch」が表示されます。
ESG(Perimeter-Gateway) の vNIC 5 に、「Prod_Interface」 が設定されています。
論理スイッチ「Prod_Logical_Switch」 に、VM が接続されています。
接続した VM 同士である web-03a から web-04a に Ping も飛びます。
Lab の冒頭ということもあり簡単な設定内容の例でしたが、NSX API は多くの機能に対応しています。
REST API は今回の curl コマンドに限らず様々な言語、ツールから実行することができるので、
うまく利用すれば、ネットワーク構成変更を柔軟に自動化したりできそうです。
API ガイドはこちらです。
NSX vSphere API Guide
NSX 6.2 for vSphere
http://pubs.vmware.com/NSX-62/topic/com.vmware.ICbase/PDF/nsx_62_api.pdf
以上、NSX API 体験でした。