2018年11月15日木曜日

NSX API を curl で嗜む

概要

NSX Manager の API を curl でいろいろコールしてみました
サンプルを紹介します

環境

  • NSX Manager 6.3.1 Build 5124716

Lookup Service URL を取得/設定する

取得

curl -k -u admin:$pass https://xxx.xxx.xxx.xxx/api/2.0/services/ssoconfig

設定

curl -k -X POST -u admin:$pass -H 'Content-Type: application/xml' -d @- https://xxx.xxx.xxx.xxx/api/2.0/services/ssoconfig << EOF
<ssoConfig>
 <ssoLookupServiceUrl>https://[vcenter-ip]:443/lookupservice/sdk</ssoLookupServiceUrl>
 <ssoAdminUsername>administrator@vsphere.local</ssoAdminUsername>
 <ssoAdminUserpassword>$pass</ssoAdminUserpassword>
 <certificateThumbprint>96:09:D6:5B:E0:83:58:1B:BA:2B:CC:78:22:88:33:36:64:50:32:EB</certificateThumbprint>
</ssoConfig>
EOF

Manage vCenter Registration の Lookup Service URL の部分を設定することができます
nsxapi1.png

ユーザの取得/登録をする

取得

curl -k -u admin:$pass https://xxx.xxx.xxx.xxx/api/2.0/services/usermgmt/users/vsm

詳細を取得

curl -s -k -u admin:$pass 'https://xxx.xxx.xxx.xxx/api/2.0/services/usermgmt/user/administrator@vsphere.local'

administrator@vsphere.local の部分は user_id を指定します
一覧を取得する API だと vsphere.local\administrator という感じで返ってくるのですが指定する場合は @ 形式を使います 

登録

curl -k -X POST -u admin:$pass -H 'Content-Type: application/xml' -d @- 'https://xxx.xxx.xxx.xxx/api/2.0/services/usermgmt/role/user001@vsphere.local?isGroup=false' << EOF
<accessControlEntry>
 <role>security_admin</role>
 <resource>
  <resourceId>globalroot-0</resourceId>
 </resource>
</accessControlEntry>
EOF

globalroot-0 もしっかり指定しましょう

nsxapi2.png

ロールの取得

curl -k -u admin:$pass https://xxx.xxx.xxx.xxx/api/2.0/services/usermgmt/roles

特定のユーザのロールを取得

curl -k -u admin:$pass 'https://xxx.xxx.xxx.xxx/api/2.0/services/usermgmt/role/administrator@vsphere.local'

edge の取得/デプロイ

取得

curl -k -u admin:$pass 'https://xxx.xxx.xxx.xxx/api/4.0/edges'

詳細、vnics などの情報も取得できる

curl -k -u admin:$pass 'https://xxx.xxx.xxx.xxx/api/4.0/edges/edge-5'

デプロイ (Gateway Service)
長いので後述で簡単な説明をします

curl -k -X POST -u admin:$pass -H 'Content-Type: application/xml' -d @- 'https://xxx.xxx.xxx.xxx/api/4.0/edges' << EOF
<edge>
  <datacenterMoid>datacenter-2</datacenterMoid>
  <name>edge_6</name>
  <description>description</description>
  <tenant>default</tenant>
  <fqdn>NSX-edge-6</fqdn>
  <vseLogLevel>info</vseLogLevel>
  <enableFips>true</enableFips>
  <appliances> 
    <applianceSize>compact</applianceSize> 
    <enableCoreDump>true</enableCoreDump> 
    <appliance> 
      <resourcePoolId>resgroup-8</resourcePoolId> 
      <datastoreId>datastore-12</datastoreId> 
      <hostId>host-10</hostId> 
    </appliance> 
  </appliances> 
  <vnics> 
    <vnic> 
      <index>0</index> 
      <name>edge_if</name> 
      <type>internal</type> 
      <portgroupId>virtualwire-1</portgroupId> 
      <addressGroups> 
        <addressGroup> 
          <primaryAddress>192.168.200.201</primaryAddress> 
          <subnetMask>255.255.255.0</subnetMask>
        </addressGroup> 
      </addressGroups>
      <macAddress>
        <edgeVmHaIndex>0</edgeVmHaIndex>
      </macAddress> 
      <isConnected>true</isConnected>
    </vnic> 
  </vnics> 
  <cliSettings>
    <userName>admin</userName>
    <password>VMware12345!</password>
    <remoteAccess>true</remoteAccess>
  </cliSettings>
  <autoConfiguration>
    <enabled>true</enabled>
    <rulePriority>low</rulePriority>
  </autoConfiguration>
</edge>
EOF

必要最低限のパラメータのみ指定しているつもりです
他にも設定可能なパラメータがあるので詳細はリファレンスを御覧ください
まずデプロイするデータセンターの ID は datacenterMoid で指定します
appliance 内でポートグループやストレージを指定します
指定するのは名前ではなく ID になるので Web Client などで調べて入力してください

vnics でネットワーク情報を指定します
インタフェースに割り当てる IP (primaryAddress) は必須です
HA に使うネットワークインターフェースを指定する edgeVmHaIndex も必須です
Edge に付与したインタフェースの ID を指定しましょう
virtualwire-1 は Edge に作成した論理スイッチにある仮想ワイヤー ID になります
autoConfiguration は Firewall のデフォルトルールを決めます
rulePriority を low にするとデフォルトルールが全許可で作成されます
逆に high にすると全拒否状態で作成されます

cliSettings では Edge に CLI でアクセスする場合の認証情報を指定します
パスワードにポリシーがあるので注意してください

ネットワークファブリックのバージョン取得

ホスト ID を指定して取得します

curl -k -u admin:$pass 'https://xxx.xxx.xxx.xxx/api/2.0/nwfabric/status?resource=host-10'

NSX コントローラの取得

curl -k -u admin:$pass 'https://xxx.xxx.xxx.xxx/api/2.0/vdn/controller'

NSX Manager のバージョン確認

curl -s -k -u admin:$pass 'https://xxx.xxx.xxx.xxx/api/1.0/appliance-management/global/info'

もう少し詳しく知りたい場合は

curl -s -k -u admin:$pass 'https://xxx.xxx.xxx.xxx/api/1.0/appliance-management/summary/system'

NSX CLI を実行する

なぜか CLI を実行する機能もある
CLI でしか実行できないことがあるのだろうか

curl -s -k -X POST -u admin:$pass -H 'Accept: text/plain' -H 'Content-Type: application/xml' -d @- 'https://xxx.xxx.xxx.xxx/api/1.0/nsx/cli?action=execute' << EOF
<nsxcli>
  <command>show logical-switch list host host-21 vni</command>
</nsxcli>
EOF

0 件のコメント:

コメントを投稿