今年も、日本の vExpert によるアドベントカレンダーが始まります。

クリスマスの12/25 まで、VMwareにかかわる何かが1日1投稿される予定ですので、

お楽しみいただければと思います。

vExperts Advent Calendar 2016 - Adventar

 

今回は、PowerShell での VMware NSX 操作を簡易化する PowerNSX を紹介します。

使用例として、NSX の論理スイッチを作成して VM を接続してみます。

下記のような感じで、ls-test-01 という論理スイッチを作成して、photon01 と photon02 という VM を接続します。

vE-Advent2016-PowerNSX-1.png

 

 

PowerNSX について。

 

PowerNSX は、VMware NSX API を抽象化してくれる PowerShell モジュールです。
GitHub で公開されています。

GitHub - vmware/powernsx

 

VMware 社から公式にサポートされている製品ではありませんが、PowerCLI と組み合わせて使用できるのでとても便利です。

使用方法は、下記の Wiki が参考になります。

https://github.com/vmware/powernsx/wiki

 

PowerShell か PowerCLI のウインドウから下記のリンクにあるコマンドラインを実行することでインストールできます。

これは、インストールスクリプトをダウンロードして実行しています。

GitHubhttps://github.com/vmware/powernsx/wiki/Installing-PowerNSX

 

PowerShell コマンドレットは基本的に「Verb-Noun」という名前となっているので、

それをもとに PowerNSX モジュールに含まれるコマンドレットをざっくりまとめてみました。

NSX の機能に幅広く対応していて、便利そうな様子を感じていただけるのではないかと思います。

PS C:\work> gcm -Module PowerNSX | group Noun | select Name,{$_.Group.Verb -join ","} | sort Name


Name                               $_.Group.Verb -join ","

----                               -----------------------

NsxAddressSpec                     New

NsxBackingDVSwitch                 Get

NsxBackingPortGroup                Get

NsxCli                             Invoke

NsxCliDfwAddrSet                   Get

NsxCliDfwFilter                    Get

NsxCliDfwRule                      Get

NsxCluster                         Install,Remove

NsxClusterStatus                   Get

NsxClusterVxlanConfig              New,Remove

NsxController                      Get,New

NsxEdge                            Copy,Get,New,Remove,Repair,Set

NsxEdgeBgp                         Get,Set

NsxEdgeBgpNeighbour                Get,New,Remove

NsxEdgeCertificate                 Get,Remove

NsxEdgeCsr                         Get,New

NsxEdgeInterface                   Clear,Get,Set

NsxEdgeInterfaceAddress            Add,Get,Remove

NsxEdgeInterfaceSpec               New

NsxEdgeNat                         Get,Set

NsxEdgeNatRule                     Get,New,Remove

NsxEdgeOspf                        Get,Set

NsxEdgeOspfArea                    Get,New,Remove

NsxEdgeOspfInterface               Get,New,Remove

NsxEdgePrefix                      Get,New,Remove

NsxEdgeRedistributionRule          Get,New,Remove

NsxEdgeRouting                     Get,Set

NsxEdgeSelfSignedCertificate       New

NsxEdgeSsh                         Disable,Enable

NsxEdgeStaticRoute                 Get,New,Remove

NsxEdgeSubInterface                Get,New,Remove

NsxEdgeSubInterfaceSpec            New

NsxFirewallExclusionListMember     Add,Get,Remove

NsxFirewallRule                    Get,New,Remove

NsxFirewallSavedConfiguration      Get

NsxFirewallSection                 Get,New,Remove

NsxIpPool                          Get,New

NsxIpSet                           Get,New,Remove

NsxLoadBalancer                    Get,Set

NsxLoadBalancerApplicationProfile  Get,New,Remove

NsxLoadBalancerApplicationRule     Get,New

NsxLoadBalancerMemberSpec          New

NsxLoadBalancerMonitor             Get,New,Remove

NsxLoadBalancerPool                Get,New,Remove

NsxLoadBalancerPoolMember          Add,Get,Remove

NsxLoadBalancerStats               Get

NsxLoadBalancerVip                 Add,Get,Remove

NsxLogicalRouter                   Get,New,Remove

NsxLogicalRouterBgp                Get,Set

NsxLogicalRouterBgpNeighbour       Get,New,Remove

NsxLogicalRouterInterface          Get,New,Remove,Set

NsxLogicalRouterInterfaceSpec      New

NsxLogicalRouterOspf               Get,Set

NsxLogicalRouterOspfArea           Get,New,Remove

NsxLogicalRouterOspfInterface      Get,New,Remove

NsxLogicalRouterPrefix             Get,New,Remove

NsxLogicalRouterRedistributionRule Get,New,Remove

NsxLogicalRouterRouting            Get,Set

NsxLogicalRouterStaticRoute        Get,New,Remove

NsxLogicalSwitch                   Get,New,Remove

NsxMacSet                          Get,New,Remove

NsxManager                         New,Set

NsxManagerBackup                   Get

NsxManagerComponentSummary         Get

NsxManagerNetwork                  Get

NsxManagerSsoConfig                Get

NsxManagerSyslogServer             Get

NsxManagerSystemSummary            Get

NsxManagerTimeSettings             Get

NsxManagerVcenterConfig            Get

NsxObject                          Export,Import

NsxRestMethod                      Invoke

NsxSecurityGroup                   Get,New,Remove

NsxSecurityGroupEffectiveMembers   Get

NsxSecurityGroupMember             Add,Remove

NsxSecurityPolicy                  Get,Remove

NsxSecurityTag                     Get,New,Remove

NsxSecurityTagAssignment           Get,New,Remove

NsxSegmentIdRange                  Get,New,Remove

NsxServer                          Connect,Disconnect

NsxService                         Get,New,Remove

NsxServiceGroup                    Get,New,Remove

NsxServiceGroupMember              Add,Get

NsxSpoofguardNic                   Get

NsxSpoofguardNicApproval           Grant,Revoke

NsxSpoofguardPolicy                Get,New,Publish,Remove

NsxSslVpn                          Get,Set

NsxSslVpnAuthServer                Get,New

NsxSslVpnClientInstallationPackage Get,New,Remove

NsxSslVpnIpPool                    Get,New,Remove

NsxSslVpnPrivateNetwork            Get,New,Remove

NsxSslVpnUser                      Get,New,Remove

NsxTransportZone                   Get,New,Remove

NsxVdsContext                      Get,New,Remove

NsxWebRequest                      Invoke

NsxWhereVMUsed                     Find

PowerNsx                           Update

PowerNsxVersion                    Get

XML                                Format

XmlElement                         Add



 

 

NSX Manager への接続。

 

PowerNSX は、NSX Manager に接続して操作します。

そして、PowerCLI 実行のため vCenter にも接続する必要があります。

「Connect-NsxServer」で NSX Manager に接続するときに、

NSX Manager のひもづく vCenter にも接続することができます。


例では、下記のサーバに接続しています。
※これはうちの VC / NSX Manager なので、実際にためす場合はホスト名を置き換えていただければと思います。

  • NSX Manager:  nsxmgr01.godc.lab
  • vCenter: vc01.godc.lab

NSX 6.2.4 の Manager に接続されています。

PS> Connect-NsxServer nsxmgr01.godc.lab


コマンド パイプライン位置 1 のコマンドレット Connect-NsxServer

次のパラメーターに値を指定してください:

Credential  ★ここで NSX Manager のユーザ/パスワードを入力する。


PowerNSX requires a PowerCLI connection to the vCenter server NSX is registered against for proper operation.

Automatically create PowerCLI connection to vc01.godc.lab?

[Y] Yes  [N] No  [?] ヘルプ (既定値は "Y"): Y


警告: Enter credentials for vCenter vc01.godc.lab


コマンド パイプライン位置 1 のコマンドレット Get-Credential

次のパラメーターに値を指定してください:

Credential  ★ここで vCenter のユーザ/パスワードを入力する。


Version             : 6.2.4

BuildNumber         : 4292526

Credential          : System.Management.Automation.PSCredential

Server              : nsxmgr01.godc.lab

Port                : 443

Protocol            : https

ValidateCertificate : False

VIConnection        : vc01.godc.lab

DebugLogging        : False

DebugLogFile        : C:\Users\gowatana\AppData\Local\Temp\PowerNSXLog-admin@nsxmgr01.godc.lab-2016_11_30_08_39_13.log


 

NSX の操作。

 

それでは、PowerNSX のコマンドレットで論理スイッチを作成いて、VM を接続してみます。

NSX の「論理スイッチ」の実体は VXLAN に対応した分散ポートグループなので、PowerCLI ではポートグループとしてあつかっています。


まず、論理スイッチを作成する Transport Zone の名前を調べておきます。

PS> Get-NsxTransportZone | select name


name

----

transport-zone-01

 


この Transport Zone に、論理スイッチ「ls-test-01」を作成します。

PS> $tz = Get-NsxTransportZone transport-zone-01

PS> New-NsxLogicalSwitch -TransportZone $tz -Name ls-test-01


objectId              : virtualwire-28

objectTypeName        : VirtualWire

vsmUuid               : 4209B0DF-0305-4636-49B2-75A0D86FC009

nodeId                : 1a3405be-3b88-47a4-a293-33d295087e10

revision              : 2

type                  : type

name                  : ls-test-01

description           :

clientHandle          :

extendedAttributes    :

isUniversal           : false

universalRevision     : 0

tenantId              :

vdnScopeId            : vdnscope-2

vdsContextWithBacking : vdsContextWithBacking

vdnId                 : 5001

guestVlanAllowed      : false

controlPlaneMode      : UNICAST_MODE

ctrlLsUuid            : 4caa5832-0d33-404c-b596-5f1c4c5ae9c6

macLearningEnabled    : false

 

 

論理スイッチの一覧が簡単に取得できます。直前で作成した ls-test-01 も表示されています。

PS> Get-NsxLogicalSwitch | select objectId,name,vdnId


objectId       name            vdnId

--------       ----            -----

virtualwire-18 ls-transit-001  5000

virtualwire-24 ls-tenant01-ext 5011

virtualwire-25 ls-tenant01-int 5012

virtualwire-26 ls-tenant02-ext 5013

virtualwire-27 ls-tenant02-int 5014

virtualwire-28 ls-test-01      5001

 

 

論理スイッチに VM を接続します。

今回、論理スイッチに接続する VM は「photon01」と「photon02」の 2台です。

PS> Get-VM -Name photon0[12] | sort Name


Name                 PowerState Num CPUs MemoryGB

----                 ---------- -------- --------

photon01             PoweredOn  1        2.000

photon02             PoweredOn  1        2.000


 

作成した論理スイッチ「ls-test-01」の実体となる分散ポートグループを調べます。

分散ポートグループは、「vxw-dvs-69-virtualwire-28-sid-5001-ls-test-01」 という名前で自動作成されています。

PS> Get-NsxLogicalSwitch -Name ls-test-01 | Get-NsxBackingPortGroup | select VDSwitch,Name


VDSwitch Name

-------- ----

vds01    vxw-dvs-69-virtualwire-28-sid-5001-ls-test-01

 


この論理スイッチ(分散ポートグループ)に、VM の1つ目の vNIC「Network adapter 1 」を接続します。

PS> $pg = Get-NsxLogicalSwitch -Name ls-test-01 | Get-NsxBackingPortGroup

PS> Get-VM -Name photon0[12] | sort Name | Get-NetworkAdapter -Name "Network adapter 1" | Set-NetworkAdapter -Portgroup $pg -Confirm:$false


 

Name                 Type       NetworkName  MacAddress         WakeOnLan

                                                                  Enabled

----                 ----       -----------  ----------         ---------

Network adapter 1    Vmxnet3    vxw-dvs-6... 00:50:56:89:e9:b7      False

Network adapter 1    Vmxnet3    vxw-dvs-6... 00:50:56:89:00:cf      False

 


それぞれの VM の「Network adapter 1」に分散ポートグループが接続されました。

PS> Get-VM -Name photon0[12] | sort Name | Get-NetworkAdapter | ft -AutoSize Parent,Name,NetworkName


Parent   Name              NetworkName

------   ----              -----------

photon01 Network adapter 1 vxw-dvs-69-virtualwire-28-sid-5001-ls-test-01

photon01 Network adapter 2 dvpg-vlan-0005

photon02 Network adapter 1 vxw-dvs-69-virtualwire-28-sid-5001-ls-test-01

photon02 Network adapter 2 dvpg-vlan-0005

 


分散ポートグループに対応する論理スイッチ「ls-test-01 」に、VM「photon01」 と「photon02」 が接続されたことが分かります。

PS C:\work> Get-NsxLogicalSwitch -Name ls-test-01 | Get-NsxBackingPortGroup | Get-VM


Name                 PowerState Num CPUs MemoryGB

----                 ---------- -------- --------

photon01             PoweredOn  1        2.000

photon02             PoweredOn  1        2.000

 

 

一般的な GUI 操作で使用する vSphere Web Client で見ると、このような状態になります。

vE-Advent2016-PowerNSX-2.png


NSX の操作は、vSphere Web Client からの操作だと画面遷移が多く煩雑になりやすいと思います。

一方、手作業で NSX API を実行するには、オブジェクト ID の確認や XML の作成などが面倒です。

この例のような感じで、PowerNSX を使用すると(特に PowerShell / PowerCLI 経験があれば)簡単に
NSX をコマンドライン操作できるようになります。


以上、PowerNSX の紹介でした。