今年も、日本の vExpert によるアドベントカレンダーが始まります。
クリスマスの12/25 まで、VMwareにかかわる何かが1日1投稿される予定ですので、
お楽しみいただければと思います。
vExperts Advent Calendar 2016 - Adventar
今回は、PowerShell での VMware NSX 操作を簡易化する PowerNSXを紹介します。
使用例として、NSX の論理スイッチを作成して VM を接続してみます。
下記のような感じで、ls-test-01 という論理スイッチを作成して、photon01 と photon02 という VM を接続します。
PowerNSX について。
PowerNSX は、VMware NSX API を抽象化してくれる PowerShell モジュールです。
GitHub で公開されています。
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 で見ると、このような状態になります。
NSX の操作は、vSphere Web Client からの操作だと画面遷移が多く煩雑になりやすいと思います。
一方、手作業で NSX API を実行するには、オブジェクト ID の確認や XML の作成などが面倒です。
この例のような感じで、PowerNSX を使用すると(特に PowerShell / PowerCLI 経験があれば)簡単に
NSX をコマンドライン操作できるようになります。
以上、PowerNSX の紹介でした。