Skip navigation
1 2 3 Previous Next

にほんごVMware

273 posts

ESXi の pktcap-uw コマンドでパケットキャプチャをするときなどに、

VM の vNIC が接続している Port ID を指定することがあります。

 

Port ID は、esxtop の Network パネル(esxtop を起動して「n」キー)から確認することができますが、

VM の名前が長すぎたり、vNIC の数が多すぎたりすると Port ID の判別が大変です。

下記の例だと「dev-test-deploy-vm-001」という VM が起動していますが、

名前が長いため、VM 名の末尾や eth0~eth2 といった対応する vNIC が見切れています。

vnic-portid-2.png

 

本来の見切れない状態では、下記のように VM 名と vNIC が表示されます。

vm12 という短い名前の、vNIC が1つだけある VM では下記のように見えます。

vnic-portid-1.png

 

そこで、esxcli で Port ID を確認してみようと思います。

 

まず、VM の一覧を表示します。
今回の環境では、ESXi ホストに 1台だけ VM が起動しています。

  • vNIC は 3つ接続されています。
  • VM の World ID がわかります。

[root@hv-n13:~] esxcli network vm list

World ID  Name                    Num Ports  Networks

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

34601814  dev-test-deploy-vm-001          3  VM Network, dvportgroup-491, dvportgroup-464

 

esxcli network vm port list で Port ID を確認してみます。

下記のように VM の Port ID が表示されます。

MAC アドレスなども一緒に表示されるので、esxtop よりも見分けやすいと思います。

[root@hv-n13:~] esxcli network vm port list -w 34601814

   Port ID: 33554440

   vSwitch: vSwitch0

   Portgroup: VM Network

   DVPort ID:

   MAC Address: 00:50:56:8a:d3:cc

   IP Address: 0.0.0.0

   Team Uplink: vmnic0

   Uplink Port ID: 33554434

   Active Filters: vmware-sfw

 

   Port ID: 67108884

   vSwitch: vds01

   Portgroup: dvportgroup-491

   DVPort ID: 71

   MAC Address: 00:50:56:8a:f8:64

   IP Address: 0.0.0.0

   Team Uplink: vmnic1

   Uplink Port ID: 67108866

   Active Filters: vmware-sfw, dvfilter-generic-vmware-swsec

 

   Port ID: 67108885

   vSwitch: vds01

   Portgroup: dvportgroup-464

   DVPort ID: 8

   MAC Address: 00:50:56:8a:80:54

   IP Address: 0.0.0.0

   Team Uplink: vmnic1

   Uplink Port ID: 67108866

   Active Filters: vmware-sfw, dvfilter-generic-vmware-swsec

 

そして pktcap-uw で、この Port ID を指定したりします。

[root@hv-n13:~] pktcap-uw --switchport 67108885 --dir 1 -o /vmfs/volumes/ds_nfs_lab01/vnic3-67108885.pcap

 

ちなみに今回の環境は ESXi 6.5 U1 でした。

[root@hv-n13:~] vmware -vl

VMware ESXi 6.5.0 build-5969303

VMware ESXi 6.5.0 Update 1

 

以上、esxcli で VM の Port ID を確認してみる話でした。

突然ですが、vCenter のタスク情報の一覧を PowerCLI で見てみようと思います。

 

vSphere API では、下記のあたりの情報です。

 

Data Object - TaskInfo(vim.TaskInfo)

https://code.vmware.com/apis/196/vsphere#/doc/vim.TaskInfo.html

 

PowerCLI から見る TaskInfo

vSphere Web Client / vSphere Client などで見られる vCenter のタスク情報は、

PowerCLI だと下記のように見ることができます。

 

まず、VM を起動してみます。

PowerCLI> Get-VM vm21 | Start-VM

 

 

Name                 PowerState Num CPUs MemoryGB

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

vm21                 PoweredOn  1        0.500

 

 

この VM の直近のタスクを見てみます。

PowerCLI> Get-VM vm21 | select Name,{$_.ExtensionData.RecentTask}

 

Name $_.ExtensionData.RecentTask

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

vm21 Task-task-17043

 

 

PowerCLI> (Get-View (Get-VM vm21).ExtensionData.RecentTask).Info

 

 

Key           : task-17043

Task          : Task-task-17043

Description   :

Name          : PowerOnVM_Task

DescriptionId : VirtualMachine.powerOn

Entity        : VirtualMachine-vm-500

EntityName    : vm21

Locked        :

State         : success

Cancelled     : False

Cancelable    : False

Error         :

Result        :

Progress      :

Reason        : VMware.Vim.TaskReasonUser

QueueTime     : 2017/09/14 11:31:41

StartTime     : 2017/09/14 11:31:41

CompleteTime  : 2017/09/14 11:31:45

EventChainId  : 702468

ChangeTag     :

ParentTaskKey :

RootTaskKey   :

ActivationId  :

LinkedView    :

 

 

タスクの内容が分かりやすい、DescriptionId だけに絞ってみます。

直近の VM を起動したタスクだとわかります。

PowerCLI> Get-VM vm21 | select Name,{(Get-View $_.ExtensionData.RecentTask).Info.DescriptionId}

 

 

Name (Get-View $_.ExtensionData.RecentTask).Info.DescriptionId

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

vm21 VirtualMachine.powerOn

 

 

PowerCLI で タスク情報の一覧を取得してみる。

今回は、vCenter のタスクにどのようなものがあるのか PowerCLI で一覧を取得してみます。

まず今回使用した PowerCLI と、vCenter のバージョンです。

 

PowerCLI 6.5.1 と、vCenter 6.5 U1 を使用しています。

PowerCLI> (Get-PowerCLIVersion).UserFriendlyVersion

VMware PowerCLI 6.5.1 build 5377412

PowerCLI> Connect-VIServer vc-sv01.go-lab.jp | Out-Null

PowerCLI> $global:DefaultVIServer | fl Name,Version,Build,IsConnected

 

 

Name        : vc-sv01.go-lab.jp

Version     : 6.5.0

Build       : 5973321

IsConnected : True

 

 

TaskManager から、タスク情報を取得してみます。

1500 件以上あるようです。

PowerCLI> $t = Get-View $global:DefaultVIServer.ExtensionData.Content.TaskManager

PowerCLI> ($t.Description.MethodInfo).Count

1578

 

とりあえず 10件だけ取得してみると、下記のような感じです。

PowerCLI> $t.Description.MethodInfo | select -First 10 | fl

 

 

Key     : host.OperationCleanupManager.createEntry

Label   : createEntry

Summary : createEntry

 

Key     : host.OperationCleanupManager.updateEntry

Label   : updateEntry

Summary : updateEntry

 

Key     : host.OperationCleanupManager.queryEntry

Label   : queryEntry

Summary : queryEntry

 

Key     : vm.guest.GuestOperationsManager.queryDisabledMethods

Label   : Query disabled guest operations

Summary : Returns a list of guest operations not supported by a virtual machine

 

Key     : profile.host.HostSpecificationManager.updateHostSpecification

Label   : updateHostSpecification

Summary : updateHostSpecification

 

Key     : profile.host.HostSpecificationManager.updateHostSubSpecification

Label   : updateHostSubSpecification

Summary : updateHostSubSpecification

 

Key     : profile.host.HostSpecificationManager.retrieveHostSpecification

Label   : retrieveHostSpecification

Summary : retrieveHostSpecification

 

Key     : profile.host.HostSpecificationManager.deleteHostSubSpecification

Label   : deleteHostSubSpecification

Summary : deleteHostSubSpecification

 

Key     : profile.host.HostSpecificationManager.deleteHostSpecification

Label   : deleteHostSpecification

Summary : deleteHostSpecification

 

Key     : profile.host.HostSpecificationManager.getUpdatedHosts

Label   : getUpdatedHosts

Summary : getUpdatedHosts

 

 

PowerCLI>

 

最初に確認した VM を起動したタスクについての情報も含まれています。

PowerCLI> $t.Description.MethodInfo | where {$_.key -eq "VirtualMachine.powerOn"} | fl

 

Key     : VirtualMachine.powerOn

Label   : Power On virtual machine

Summary : Power On this virtual machine

 

 

再起動だと、下記のようなタスクです。

PowerCLI> $t.Description.MethodInfo | where {$_.key -eq "VirtualMachine.rebootGuest"} | fl

 

Key     : VirtualMachine.rebootGuest

Label   : Initiate guest OS reboot

Summary : Issues a command to the guest operating system asking it to perform a reboot

 

 

ちなみに、下記のように CSV で出力することもできます。

PowerCLI> $t.Description.MethodInfo | Export-Csv -Encoding utf8 -NoTypeInformation -Path C:\work\vc-task.csv

PowerCLI> cat C:\work\vc-task.csv | select -First 10

"Key","Label","Summary"

"host.OperationCleanupManager.createEntry","createEntry","createEntry"

"host.OperationCleanupManager.updateEntry","updateEntry","updateEntry"

"host.OperationCleanupManager.queryEntry","queryEntry","queryEntry"

"vm.guest.GuestOperationsManager.queryDisabledMethods","Query disabled guest operations","Returns a list of guest operations not supported by a virtual machine"

"profile.host.HostSpecificationManager.updateHostSpecification","updateHostSpecification","updateHostSpecification"

"profile.host.HostSpecificationManager.updateHostSubSpecification","updateHostSubSpecification","updateHostSubSpecification"

"profile.host.HostSpecificationManager.retrieveHostSpecification","retrieveHostSpecification","retrieveHostSpecification"

"profile.host.HostSpecificationManager.deleteHostSubSpecification","deleteHostSubSpecification","deleteHostSubSpecification"

"profile.host.HostSpecificationManager.deleteHostSpecification","deleteHostSpecification","deleteHostSpecification"

PowerCLI>

 

取得した CSV ファイルは下記のような感じでした。

vc-task.csv · GitHub

 

以上、PowerCLI で TaskInfo の一覧を取得してみる話でした。

VMware Photon OS はコンテナむけの軽量 OS として提供されているので、

デフォルトでインストールされるパッケージも最小限にされています。

そのため、当然ながら他のディストリビューションで普段利用しているコマンドが

インストールされていなかったりすることもあります。

 

たとえば、Photon OS 1.0 の OVA (Build は 62c543d)をデプロイしてみると、

diff コマンドがインストールされていなかったりします。

root@photon-NaoOL4Nm6 [ ~ ]# cat /etc/photon-release

VMware Photon Linux 1.0

PHOTON_BUILD_NUMBER=62c543d

root@photon-NaoOL4Nm6 [ ~ ]# diff

-bash: diff: command not found

root@photon-NaoOL4Nm6 [ ~ ]# which diff

which: no diff in (/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin)

 

デフォルトの RPM 構成は今後のアップデートでも、また変わったりするのではないかと思います。

そこで今回は Photon OS への RPM 追加についての話です。

 

Photon OS では、Yum リポジトリで RPM が提供されていれば、

tdnf コマンドでインストールすることができます。

ただし、標準では yum コマンドではなく tdnf コマンドを利用します。

yum コマンドは、デフォルトではインストールされていません。

root@photon-NaoOL4Nm6 [ ~ ]# yum

-bash: yum: command not found

 

tdnf では yum コマンドと同様のオプションが使用できるようになっています。

たとえば、下記のように「diff」がインストールされていそうな RPM を探したりできます。

例では、Photon でも diffutils が提供されていることが分かります。

そしてインストールすると、diff コマンドが利用可能になります。

root@photon-NaoOL4Nm6 [ ~ ]# tdnf search diff

diffutils : Programs that show the differences between files or directories

root@photon-NaoOL4Nm6 [ ~ ]# tdnf install -y diffutils

 

Installing:

diffutils                       x86_64      3.3-3.ph1           862.60 k

 

Total installed size: 862.60 k

 

Downloading:

diffutils                               319216    100%

Testing transaction

Running transaction

 

Complete!

root@photon-NaoOL4Nm6 [ ~ ]# which diff

/usr/bin/diff

 

ちなみに、yum を tdnf でインストールすることもできます。

root@photon-NaoOL4Nm6 [ ~ ]# tdnf install -y yum

 

Installing:

rpm-devel                       x86_64      4.11.2-11.ph1       389.27 k

libxml2                         x86_64      2.9.4-3.ph1           7.27 M

pycurl                          x86_64      7.21.5-3.ph1        143.50 k

yum-metadata-parser             x86_64      1.1.4-2.ph1          57.10 k

urlgrabber                      noarch      3.10.1-2.ph1        505.29 k

yum                             noarch      3.4.3-6.ph1           4.18 M

 

Total installed size: 12.52 M

 

Downloading:

yum                                    1359795    100%

urlgrabber                              150199    100%

yum-metadata-parser                      24490    100%

pycurl                                   52877    100%

libxml2                                1548443    100%

rpm-devel                               117961    100%

Testing transaction

Running transaction

 

Complete!

root@photon-NaoOL4Nm6 [ ~ ]#

 

yum コマンドが利用できるようになりました。

root@photon-NaoOL4Nm6 [ ~ ]# yum repolist

Failed to set locale, defaulting to C

lightwave                                                   | 1.3 kB  00:00

lightwave/primary                                           |  13 kB  00:00

lightwave                                                                 68/68

photon                                                      | 1.3 kB  00:00

photon/primary                                              | 202 kB  00:00

photon                                                                  537/537

photon-extras                                               | 1.3 kB  00:00

photon-extras/primary                                       | 6.8 kB  00:00

photon-extras                                                             29/29

photon-updates                                              | 1.3 kB  00:00

photon-updates/primary                                      | 490 kB  00:00

photon-updates                                                        1421/1421

repo id                  repo name                                        status

lightwave                VMware Lightwave 1.0(x86_64)                       68

photon                   VMware Photon Linux 1.0(x86_64)                   537

photon-extras            VMware Photon Extras 1.0(x86_64)                   29

photon-updates           VMware Photon Linux 1.0(x86_64)Updates           1421

repolist: 2055

root@photon-NaoOL4Nm6 [ ~ ]#

 

ただ、デフォルトでは tdnf コマンドを利用するようになっていて、

Photon 以外の Linux ディストリビューションでもYUM 以外の

パッケージマネージャ(Fedra では DNF とか)を採用しているようなので、

個人的には可能な限り yum よりも tdnf を利用しておくとよいかなと思っています。

 

以上、Photon のパッケージ管理についての話でした。

PowerCLI には、vSAN に対応したコマンドも含まれています。

VMware Hands-on Labs (HOL)のラボを利用して PowerCLI 6.5 R1 で vSAN の情報を見てみます。

 

今回は 「vSAN 6.5 の新機能」(HOL-1731-SDC-1 )のシナリオを利用します。

このラボには PowerCLI で vSAN を操作するシナリオ(モジュール 4)も含まれていますが、

今回は モジュール1 での vSphere Web Client での情報確認を PowerCLI で代用してみます。

 

下記の「HOL-1731-SDC-1 - vSAN v6.5: What's New」です。

VMware Learning Platform

 

まず「レッスン 3:vSAN クラスターの準備」のシナリオを進めて vSAN クラスタを構成しておきます。

 

デスクトップにある PowerCLI のアイコンをダブルクリック起動して、vCenter に接続します。

PowerCLI> Connect-VIServer vcsa-01a.corp.local

 

PowerCLI コマンドラインは、HOL の「テキストの送信」を利用します。

vsan-powercli-01.png

 

vSAN クラスタの設定を確認してみます。

PowerCLI> Get-Cluster | where {$_.VsanEnabled -eq $True} | Get-VsanClusterConfiguration | select Cluster, VsanEnabled, VsanDiskClaimMode, SpaceEfficiencyEnabled | ft -AutoSize

vsan-powercli-02.png

 

ディスクグループの情報を確認してみます。

IsCacheDisk が True のものがキャッシュ ディスクで、False のものがキャパシティ ディスクです。

PowerCLI> Get-Cluster | where {$_.VsanEnabled -eq $True} | Get-VsanDiskGroup | sort VMHost | select VMHost, DiskGroupType, DiskFormatVersion, @{N="CacheDisk"; E={($_ | Get-VsanDisk | where {$_.IsCacheDisk -eq $true}).Count}}, @{N="CapacityDisk"; E={($_ | Get-VsanDisk | where {$_.IsCacheDisk -ne $true}).Count}}, Uuid | ft -AutoSize

 

デフォルトのウインドウ幅だと表示しきれないので、必要に応じて変更します。

たとえば、下記でウィンドウ幅を 120 に拡張できます。

$window_width = 120

$pswindow = (Get-Host).ui.rawui

$newsize = $pswindow.buffersize; $newsize.width = $window_width; $pswindow.buffersize = $newsize

$newsize = $pswindow.windowsize; $newsize.width = $window_width; $pswindow.windowsize = $newsize

vsan-powercli-03.png

 

vSAN ディスクを確認してみます。

PowerCLI> Get-Cluster | where {$_.VsanEnabled -eq $True} | Get-VsanDiskGroup | % {$hv = $_.VMHost; $_ | Get-VsanDisk | % {$path = $_.DevicePath; $_| select @{N="ESXi"; E={$hv.Name}},Uuid, IsCacheDisk, IsSSD, CanonicalName, @{N="CapacityGB"; E={($hv | Get-VMHostDisk | where {$_.DeviceName -eq $path }).ScsiLun.CapacityGB}}}} | ft -AutoSize

vsan-powercli-04.png

 

vSAN データストアの容量情報を確認してみます。

PowerCLI> Get-Datastore | where {$_.Type -eq "vsan"} | select Name, Type, CapacityGB, FreeSpaceGB, @{N="ProvisionedSpaceGB"; E={($_.CapacityGB - $_.FreeSpaceGB) + ($_.ExtensionData.Summary.Uncommitted / 1GB)}} | ft -AutoSize

vsan-powercli-05.png

 

各 ESXi ホストのストレージ プロバイダ の情報を見てみます。

PowerCLI> Get-VasaProvider | where {$_.Namespace -eq "VSAN"} | sort Name | select Status, Name, ProviderId | ft -AutoSize

vsan-powercli-06.png

 

アクティブなプロバイダは下記でわかります。

PowerCLI> Get-VasaStorageArray | where {$_.ModelId -eq "VSAN"} | select @{N="Datastore"; E={$Id = "ds:///vmfs/volumes/" + $_.Id + "/"; (Get-Datastore | where {$_.ExtensionData.Info.Url -eq $Id}).Name}}, Provider, Id | ft -AutoSize

vsan-powercli-07.png

 

デフォルトのストレージ ポリシー「Virtual SAN Default Storage Policy」のルールを確認してみます。

PowerCLI> Get-SpbmStoragePolicy -Name "Virtual SAN Default Storage Policy" | select -ExpandProperty AnyOfRuleSets | %{$name = $_.Name; $_ | select -ExpandProperty AllOfRules | select @{N="RuleName"; E={$Name}}, Capability, Value} | ft -AutoSize

vsan-powercli-08.png

 

HOL のシナリオを「レッスン 4: VSAN クラスター キャパシティのスケール アウト」まで進めると、

下記のように vSAN が拡張された様子が確認できます。

 

vSAN クラスタに、ディスクグループが追加されています。

vsan-powercli-11.png

 

追加したディスクグループの、キャッシュ ディスクとキャパシティディスクです。

vsan-powercli-12.png

 

vSAN データストア容量も追加されてます。

vsan-powercli-13.png

 

このように、vSphere Web Client で確認できる情報と同様のものが、PowerCLI でも確認することができます。

vSAN の構成情報をレポートとして残したい場合などに利用すると便利かもしれません。

 

以上、PowerCLI で vSAN の情報を見てみる話でした。

今年も vExpert NSX 2017 Award を受賞できました!

vExpert NSX 2017 Award Announcement - VMTN Blog - VMware Blogs

 

ということで、記念に自宅 NSX を最新版 6.3.3 にアップデートしてみました。

nexv-633.png

 

そして PowerNSX でバージョン確認してみようと思います。

今回は権限の都合により、vCenter に接続したあと 2行目で NSX Manager に admin ユーザでログインしています。

PowerNSX> Connect-NsxServer -vCenterServer vc-sv02.go-lab.jp

PowerNSX> Connect-NsxServer -NsxServer nsxmgr01.go-lab.jp -DisableVIAutoConnect

 

まず NSX Manger です。

PowerNSX> Get-NsxManagerSystemSummary | select hostName,@{n="Version";E={$_.versionInfo | %{($_.majorVersion,$_.minorVersion,$_.patchVersion) -join "."}}},@{N="Build";E={$_.versionInfo.buildNumber}}

 

hostName Version Build

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

nsxmgr01 6.3.3   6276725

 

 

NSX Controller です。

PowerNSX> Get-NsxController | select name,id,@{N="vmId";E={$_.virtualMachineInfo.objectId}},version,status,upgradeStatus | sort name | ft -AutoSize

 

name     id           vmId   version     status  upgradeStatus

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

nsxctl01 controller-7 vm-483 6.3.6235594 RUNNING UPGRADED

nsxctl02 controller-6 vm-482 6.3.6235594 RUNNING UPGRADED

nsxctl03 controller-5 vm-481 6.3.6235594 RUNNING UPGRADED

 

 

NSX Edge (Edge Service Gateway)です。

小さい環境なので NSX Edge は ESG / DLR それぞれ 1台しかいません。

PowerNSX> Get-NsxEdge | select name,id,type,status,@{N="BuildInfo";E={$_.edgeSummary.appliancesSummary.vmBuildInfo}} | ft -AutoSize

 

name     id     type            status   BuildInfo

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

nsxesg01 edge-1 gatewayServices deployed 6.3.3-6144198

 

 

NSX Edge (DLR Control VM)です。

PowerNSX> Get-NsxLogicalRouter | select name,id,type,status,@{N="BuildInfo";E={$_.edgeSummary.appliancesSummary.vmBuildInfo}} | ft -AutoSize

 

name     id     type              status   BuildInfo

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

nsxdlr01 edge-5 distributedRouter deployed 6.3.3-6144198

 

 

NSX インストールずみクラスタの状態も見てみました。

PowerNSX> Get-NsxClusterStatus (Get-Cluster -Name nsx-cluster-01) | where {$_.installed -eq "true"} | select featureId,featureVersion,enabled,status,updateAvailable | ft -AutoSize

 

featureId                                featureVersion enabled status updateAvailable

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

com.vmware.vshield.firewall              5.5            true    GREEN  false

com.vmware.vshield.vsm.messagingInfra                   true    GREEN  false

com.vmware.vshield.vsm.vxlan             5.5            true    GREEN  false

com.vmware.vshield.vsm.nwfabric.hostPrep 6.3.3.6276725  true    GREEN  false

 

 

ESXi の esx-nsxv VIB のバージョンです。

ちなみに 6.3.3 では ESXi ホストをメンテナンスモードにするだけで VIB のアップデートが完了します。

PowerNSX> Get-Cluster -Name nsx-cluster-01 | Get-VMHost | select Parent,Name,ConnectionState,@{N="esx-nsxv";E={($_|Get-EsxCli -V2).software.vib.get.Invoke(@{vibname="esx-nsxv"}).Version}},@{N="RebootRequired";E={$_.ExtensionData.Summary.RebootRequired}} | sort Parent,Name | ft -AutoSize

 

Parent         Name             ConnectionState esx-nsxv          RebootRequired

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

nsx-cluster-01 hv-n01.go-lab.jp       Connected 6.5.0-0.0.6244264          False

nsx-cluster-01 hv-n02.go-lab.jp       Connected 6.5.0-0.0.6244264          False

nsx-cluster-01 hv-n03.go-lab.jp       Connected 6.5.0-0.0.6244264          False

 

 

今年も趣味の NSX にとりくんでいきたいと思います。どこかでお役に立てればうれしいです。

vEXPRT-2017-NSX-gowatana.png

 

以上、vExpert NSX 受賞記念の投稿でした。

PowerNSX を楽しむべく、NSX Manager と vCenter の接続状態をもとに

プロンプト文字列の色を変更してみようと思います。

powernsx-prompt.png

 

PowerCLI + vCenter 接続のケースはこちらもどうぞ。

PowerCLI プロンプト文字列に vCenter への接続状態を反映してみる。

 

今回は、下記の前提です。

  • PowerCLI はインストール済み。
  • PowerNSX はインストール済み。
  • Windows 10 環境で実行。

 

ということで、

まず下記のような PowerShell スクリプト「set_powernsx_prompt.ps1」を

適当なフォルダ(「ドキュメント」配下など、今後も配置しておける場所)に作成しておきます。

 

vCenter と NSX Manager の接続状態が自動格納される変数である

$global:DefaultVIServer と $DefaultNSXConnection をもとに、下記のようにプロンプトの色を変更します。

  • NSX Manager と vCenter 両方に接続できていたら Cyan
  • NSX Manager が連携している vCenter と、接続している vCenter が違ったら怪しいので Red
  • NSX Manger だけに接続できていたら DarkCyan
  • vCenter だけに接続できていたら Green
  • 未接続は Gray

残念ながら、複数台の vCenter に同時接続するケースにはちゃんと対応してません。

 

set_powernsx_prompt.ps1

$module_list = @(

    "VMware.VimAutomation.Core",

    "VMware.VimAutomation.Vds",

    "PowerNSX"

)

Import-Module $module_list

 

$window_width  = 120

$window_height = 40

$window_buffer = 3000

 

$pshost = Get-Host

$pswindow = $pshost.ui.rawui

 

$pswindow.WindowTitle = "PowerNSX"

 

$newsize = $pswindow.buffersize 

$newsize.height = $window_buffer

$newsize.width = $window_width 

$pswindow.buffersize = $newsize 

 

$newsize = $pswindow.windowsize 

$newsize.height = $window_height 

$newsize.width = $window_width 

$pswindow.windowsize = $newsize

 

Clear-Host

$module = Get-Module -Name PowerNSX

 

Write-Host ""

Write-Host "Welcome to " -NoNewLine

Write-Host $module.Name -foregroundcolor Cyan

Write-Host $module.ProjectUri

Write-Host ""

Write-Host $module.Copyright

Write-Host ""

Write-Host $module.Description

Write-Host ""

(Get-Module $module_list | ft -AutoSize  Name,Version -HideTableHeaders | Out-String).trim()

Write-Host ""

Write-Host "Log in to a vCenter Server and NSX Mnager: "

Write-Host "  Connect-NsxServer -vCenterServer <vCenter Server>" -foregroundcolor yellow

Write-Host ""

 

function prompt{

    $vc = $global:DefaultVIServer

    $nsx = $DefaultNSXConnection

    if(($vc.IsConnected -eq $True) -and ($nsx.Server -ne $null)){

        $prompt_color = "Cyan"

        if($vc.Name -ne $nsx.VIConnection){

            $prompt_color = "Red"

        }

    }

    elseif(($vc.IsConnected -ne $True) -and ($nsx.Server -ne $null)){

        $prompt_color = "DarkCyan"

    }

    elseif(($vc.IsConnected -eq $True) -and ($nsx.Server -eq $null)){

        $prompt_color = "Green"

    }

    else{

        $prompt_color = "Gray"

    }   

    Write-Host "PowerNSX" -NoNewLine -ForegroundColor $prompt_color

    Write-Host ">" -NoNewline

    return " "

}

 

ついでに、set_powernsx_prompt.ps1 を読み込んで PowerShell を起動するショートカットを作成します。

今回は下記のスクリプトで、デスクトップに「PowerNSX」というショートカットを作成しました。

このスクリプトは上記のスクリプトと同じフォルダに配置して、実行します。

 

実行するとき、PowerShell の ExecutionPolicy は

スクリプト実行できる設定(RemoteSigned など)にしておきます。

# デスクトップに PowerNSX のショートカットを作成する。

 

$tool_name = "PowerNSX"

$profile_script_name = "set_powernsx_prompt.ps1"

 

$shortcut_dir = Join-Path $HOME "Desktop"

$shortcut_path = Join-Path $shortcut_dir ($tool_name + ".lnk")

 

$tool_work_dir = (ls $PSCommandPath).DirectoryName

$profile_path = Join-Path $tool_work_dir $profile_script_name

 

$ps = "powershell"

$ps_argument = ("-NoExit", "-File",  $profile_path) -join " "

 

$wsh = New-Object -ComObject WScript.Shell

$shortcut = $wsh.CreateShortcut($shortcut_path)

$shortcut.TargetPath = $ps

$shortcut.Arguments = $ps_argument

$shortcut.WorkingDirectory = (ls $profile_path).DirectoryName

$shortcut.Save()

 

作成した PowerNSX ショートカットをダブルクリックすると、下記のような感じになると思います。

ためしにインストールされた PowerNSX / PowerCLI についての情報も表示してみました。

powernsx-prompt-2.png

 

これで、Connect-NsxServer で接続すると、冒頭のスクリーンショットのようにプロンプト色がかわります。

ラボ環境の NSX などでお楽しみいただければと思います・・・

 

以上、PowerNSX のプロンプトを工夫してみる話でした。

PowerCLI を楽しむべく、プロンプト文字列を工夫してみようと思います。

 

以前、下記のような投稿をしましたが・・・

PowerCLI のプロンプト文字列「PowerCLI>」について。

 

これを応用して、vCenter / ESXi への接続状態によって「PowerCLI」の色を変更してみます。

 

ということで、

まず下記のような PowerShell スクリプト「set_powercli_prompt.ps1」を

適当なフォルダ(「ドキュメント」配下など、今後も配置しておける場所)に作成しておきます。

 

ドット スペース「. 」からはじまる1 行目は、通常 PowerCLI が起動時に読み込むスクリプトを読み込んでいます。

そして、$global:DefaultVIServers 変数をもとに、接続している(IsConnected が Trueである)vCenter / ESXi が

1台でもあれば、プロンプトの文字列色を Green に、それ以外の場合は DarkCyan にします。

 

set_powercli_prompt.ps1

. "C:\Program Files (x86)\VMware\Infrastructure\PowerCLI\Scripts\Initialize-PowerCLIEnvironment.ps1"

Clear-Host

 

function prompt{

    $vc_all = $global:DefaultVIServers

    $vc_connected = $vc_all | where {$_.IsConnected -eq $True}

    if($vc_connected.Count -ge 1){

        $prompt_color = "Green"

    }else{

        $prompt_color = "DarkCyan"

    }

    Write-Host "PowerCLI" -NoNewLine -ForegroundColor $prompt_color

    Write-Host ">" -NoNewLine -ForegroundColor "Gray"

    return " "

}

 

そして、set_powercli_prompt.ps1 スクリプトを読み込んで PowerShell を起動するショートカットを作成します。

今回は下記のスクリプトで、デスクトップに「PowerCLI」というショートカットを作成しました。

このスクリプトは上記のものと同じフォルダに配置して、実行します。

 

create_powercli_shortcut.ps1

$tool_name = "PowerCLI"

$profile_script_name = "set_powercli_prompt.ps1"

 

$shortcut_dir = Join-Path $HOME "Desktop"

$shortcut_path = Join-Path $shortcut_dir ($tool_name + ".lnk")

 

$tool_work_dir = (ls $PSCommandPath).DirectoryName

$profile_path = Join-Path $tool_work_dir $profile_script_name

 

$ps = "powershell"

$ps_argument = ("-NoExit", "-File",  $profile_path) -join " "

 

$wsh = New-Object -ComObject WScript.Shell

$shortcut = $wsh.CreateShortcut($shortcut_path)

$shortcut.TargetPath = $ps

$shortcut.Arguments = $ps_argument

$shortcut.WorkingDirectory = (ls $profile_path).DirectoryName

$shortcut.Save()

 

上記の「create_powercli_shortcut.ps1」スクリプトを実行すると、

デスクトップに PowerCLI ショートカットが作成されます。

このショートカットは、powershell.exe を下記2つのオプションで起動するだけのものです。

  • -NoExit
  • -File ~\set_powercli_prompt.ps1  ※プロンプトを変更するスクリプトを指定する。

 

このショートカットを起動すると、プロンプトが「PowerCLI>」となった PowerShell が起動されます。

そして、Connect-VIServer で vCenter / ESXi に接続すると、プロンプトの色が変わります。

今回の例だと、vCenter 接続中だけ「PowerCLI」が Green になっています。

powercli-prompt-2.png

 

さらに工夫すれば、接続先の vCenter / ESXi の情報をプロンプトに反映したりすることもできます。

(しかしその分レスポンスに影響するので、やりすぎ注意・・・)

 

なお今回は、Windows 10 + PowerCLI 6.5 R1 の環境でしか動作を試してません。

以上、PowerCLI のプロンプトを工夫してみる話でした。

PowerNSX / PowerCLI のスクリプトを利用した、

NSX for vSphere ネットワーク環境構成を自動化(というか省力化)してみた様子をお伝えしてみようと思います。

 

今回は、前回作成したスクリプトで、テナントを作成してみようと思います。

PowerNSX でテナント追加の自動化をしてみる。Part.4

 

下記のような環境で、テナントっぽく NSX の論理スイッチや VM を作成、削除してみます。

powernsx-auto-5.png

 

前回の投稿にあるスクリプト ファイルは、すでに配置ずみです。

PowerNSX> ls | select Name

 

Name

----

config

add_tenant_nw.ps1

add_tenant_vm.ps1

delete_tenant.ps1

get_tenant_summary.ps1

 

 

PowerNSX> ls .\config | select Name

 

Name

----

nw_tenant-04.ps1

nw_tenant-05.ps1

vm_vm41.ps1

vm_vm42.ps1

vm_vm51.ps1

 

 

vCenter と NSX Manger に接続しておきます。

vCenter を指定して、NSX Manger にも自動接続します。

PowerNSX> Connect-NsxServer -vCenterServer <vCenter のアドレス>

1つめのテナントの作成~削除。

それでは、テナント ネットワークを作成してみます。

PowerNSX> .\add_tenant_nw.ps1 .\config\nw_tenant-04.ps1

Logical Switch: ls-tenant-04 => objectId: virtualwire-235

DLR Interface: if-tenant-04 => index: 13

SNAT Source Address: 10.1.40.0/24 => ruleId 196624

DFW Section: dfw-section-tenant-04 => id 1024

DFW Rule: allow jBox to tenant-ls SSH => id 1129

DFW Rule: allow Any to tenant-ls HTTP => id 1130

VM Folder: tenant-04 => id group-v459

 

続いて、VM を作成してみます。

PowerNSX> .\add_tenant_vm.ps1 .\config\nw_tenant-04.ps1 .\config\vm_vm41.ps1

Create Guest OS Customization Spec: osspec-vm41

Edit Guest OS Customization Spec:

New VM: vm41 => id vm-460

Delete Guest OS Customization Spec: osspec-vm41

Connect vNIC: vm41/Network adapter 1 to ls-tenant-04

Start VM: vm41

 

2台めの VM を作成してみます。

PowerNSX> .\add_tenant_vm.ps1 .\config\nw_tenant-04.ps1 .\config\vm_vm42.ps1

Create Guest OS Customization Spec: osspec-vm42

Edit Guest OS Customization Spec:

New VM: vm42 => id vm-461

Delete Guest OS Customization Spec: osspec-vm42

Connect vNIC: vm42/Network adapter 1 to ls-tenant-04

Start VM: vm42

 

作成したテナントの情報を取得してみます。

論理スイッチ、SNAT ルール、ファイアウォールルールが作成されて、

VM も作成されました。

PowerNSX> .\get_tenant_summary.ps1 .\config\nw_tenant-04.ps1

############################################################

テナント: tenant-04

実行時刻: 2017年7月13日 0:06:22

 

============================================================

Tenant Network

 

name           : ls-tenant-04

objectId       : virtualwire-235

VDSwitch       : vds02

dvPortgroup    : vxw-dvs-36-virtualwire-235-sid-10005-ls-tenant-04

DlrIfIPAddress : 10.1.40.1/24

 

============================================================

ESG SNAT ルール情報

 

translatedAddress : 192.168.1.144

originalAddress   : 10.1.40.0/24

 

============================================================

DFWセクションdfw-section-tenant-04ルール情報

 

id   name                        Src           Dst          Service action appliedTo    logged

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

1130 allow Any to tenant-ls HTTP Any           ls-tenant-04 HTTP    allow  ls-tenant-04 false

1129 allow jBox to tenant-ls SSH 192.168.1.223 ls-tenant-04 SSH     allow  ls-tenant-04 false

 

============================================================

VM / ゲスト ネットワーク情報

 

VM   HostName   State IPAddress      Gateway   GuestFullName

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

vm41 vm41     Running 10.1.40.101/24 10.1.40.1 Other 3.x or later Linux (64-bit)

vm42 vm42     Running 10.1.40.102/24 10.1.40.1 Other 3.x or later Linux (64-bit)

 

PowerNSX>

 

テナントを削除してみます。

PowerNSX> .\delete_tenant.ps1 .\config\nw_tenant-04.ps1

Remove VM

Remove DFW Rule

Remove SNAT Rule

Remove NsxLogical Switch

Remove VM Folder

 

テナントのネットワーク、VM などが消えました。

PowerNSX> .\get_tenant_summary.ps1 .\config\nw_tenant-04.ps1

############################################################

テナント: tenant-04

実行時刻: 2017年7月13日 0:08:36

 

 

 

============================================================

Tenant Network

 

 

 

============================================================

ESG SNAT ルール情報

 

 

 

============================================================

DFWセクションルール情報

 

 

 

============================================================

VM / ゲスト ネットワーク情報

 

 

 

PowerNSX>

 

2つめのテナントの作成。

新たにテナント「tenant-05」を追加してみます。

 

コンフィグを作成します。

ネットワーク構成は下記のようにします。

1つ目のテナントとの差分は、赤字の部分です。

 

ファイル名: nw_tenant-05.ps1

# テナント固有 変数

$tenant_name = "tenant-05"

$gw_addr = "10.1.50.1"

$nw_addr = "10.1.50.0"

$nw_msak_length = 24

 

# 共通 変数

$tz_name = "tz01"

$dlr_id = "edge-5"

$esg_id = "edge-1"

$esg_ext_addr = "192.168.1.144"

$jbox_ip = "192.168.1.223"

 

$dlr_if_name = "if-" + $tenant_name

$dfw_section_name = "dfw-section-" + $tenant_name

$ls_name = "ls-" + $tenant_name

 

VM の構成は下記のようにします。

 

ファイル名: vm_vm51.ps1

# VM 固有 変数

$vm_name = "vm51"

$ip_addr = "10.1.50.101"

$vnic_name = "Network adapter 1"

$template_name = "photon-1.0-rev2"

 

# テナント内共通 変数

$nw_msak = "255.255.255.0"

$tenant_dns = "10.1.1.1"

$domain_name = "go-lab.jp"

$cluster_name = "nsx-cluster-01"

$datastore_name = "ds_nfs_lab02"

 

それでは、2つ目のテナントを作成します。

テナントを作成してみます。

PowerNSX> .\add_tenant_nw.ps1 .\config\nw_tenant-05.ps1

Logical Switch: ls-tenant-05 => objectId: virtualwire-236

DLR Interface: if-tenant-05 => index: 13

SNAT Source Address: 10.1.50.0/24 => ruleId 196625

DFW Section: dfw-section-tenant-05 => id 1025

DFW Rule: allow jBox to tenant-ls SSH => id 1131

DFW Rule: allow Any to tenant-ls HTTP => id 1132

VM Folder: tenant-05 => id group-v463

 

VM を作成してみます。

PowerNSX> .\add_tenant_vm.ps1 .\config\nw_tenant-05.ps1 .\config\vm_vm51.ps1

Create Guest OS Customization Spec:

Edit Guest OS Customization Spec:

New VM: vm51 => id vm-464

Delete Guest OS Customization Spec: osspec-vm51

Connect vNIC: vm51/Network adapter 1 to ls-tenant-05

Start VM: vm51

 

2つめのテナントのネットワークと、1つの VM が作成されています。

PowerNSX> .\get_tenant_summary.ps1 .\config\nw_tenant-05.ps1

############################################################

テナント: tenant-05

実行時刻: 2017年7月13日 0:20:38

 

============================================================

Tenant Network

 

name           : ls-tenant-05

objectId       : virtualwire-236

VDSwitch       : vds02

dvPortgroup    : vxw-dvs-36-virtualwire-236-sid-10005-ls-tenant-05

DlrIfIPAddress : 10.1.50.1/24

 

============================================================

ESG SNAT ルール情報

 

translatedAddress : 192.168.1.144

originalAddress   : 10.1.50.0/24

 

============================================================

DFWセクションdfw-section-tenant-05ルール情報

 

id   name                        Src           Dst          Service action appliedTo    logged

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

1132 allow Any to tenant-ls HTTP Any           ls-tenant-05 HTTP    allow  ls-tenant-05 false

1131 allow jBox to tenant-ls SSH 192.168.1.223 ls-tenant-05 SSH     allow  ls-tenant-05 false

 

============================================================

VM / ゲスト ネットワーク情報

 

VM   HostName   State IPAddress      Gateway   GuestFullName

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

vm51 vm51     Running 10.1.50.101/24 10.1.50.1 Other 3.x or later Linux (64-bit)

 

PowerNSX>

 

NSX は多機能なので環境によって利用する機能も違うと思いますが、

vSphere Web Client の Network and Security 画面からの操作や情報確認は、PowerNSX でも可能です。

このような感じで、PowerNSX を利用するとネットワーク構成を省力化することができます。

 

まだ続くかもしれない。

ここまでの PowerNSX でのテナント追加と削除を、

簡易的なスクリプトにして省力化してみようと思います。

 

これまでの流れについて。

PowerNSX でテナント追加の自動化をしてみる。Part.1

PowerNSX でテナント追加の自動化をしてみる。Part.2

PowerNSX でテナント追加の自動化をしてみる。Part.3

 

ここまで実施してきたことを参考に、スクリプト化してみます。

今回の環境は、複雑になりすぎないようにあえてシンプルな構成にしています。

たとえば、下記のような感じです。

  • テナントごとに、論理スイッチ(VXLAN)は 1つだけ。
  • ファイアウォール ルールの通信元 / 通信先 やサービスなどは 1つしか指定しない。
  • VM の vNIC は 1つだけ。

実際の環境で使用する場合は、オブジェクトの確認やエラー制御などが必要に

なりますが、今回はできるだけ省略しています。

 

作成する環境の構成について。

設定値については、スクリプトとは別のファイルに分割してみました。

テナント ネットワークにかかわる設定値と、

テナント内の VM にかかわる設定値を、それぞれファイルを分けてみました。

NSX Edge(Edge Service Gateway と DLR Control VM)については、

はじめから  Object ID を確認しておいて決め打ちしています。

 

下記のような構成にしています。

 

テナント ネットワークの構成ファイル。

テナントの名前として、tenant-04 という文字列を使っています。

 

ファイル名: nw_tenant-04.ps1

# テナント固有 変数

$tenant_name = "tenant-04"

$gw_addr = "10.1.40.1"

$nw_addr = "10.1.40.0"

$nw_msak_length = 24

 

# 共通 変数

$tz_name = "tz01"

$dlr_id = "edge-5"

$esg_id = "edge-1"

$esg_ext_addr = "192.168.1.144"

$jbox_ip = "192.168.1.223"

 

$dlr_if_name = "if-" + $tenant_name

$dfw_section_name = "dfw-section-" + $tenant_name

$ls_name = "ls-" + $tenant_name

 

VM 1台目(vm41)の構成ファイル。

ファイル名: vm_vm41.ps1

# VM 固有 変数

$vm_name = "vm41"

$ip_addr = "10.1.40.101"

$vnic_name = "Network adapter 1"

$template_name = "photon-1.0-rev2"

 

# テナント内共通 変数

$nw_msak = "255.255.255.0"

$tenant_dns = "10.1.1.1"

$domain_name = "go-lab.jp"

$cluster_name = "nsx-cluster-01"

$datastore_name = "ds_nfs_lab02"

 

VM 2台目(vm42)の構成ファイル。

1台目との差分は VM 名と IP アドレスだけにしています。

ファイル名: vm_vm42.ps1

# VM 固有 変数

$vm_name = "vm42"

$ip_addr = "10.1.40.102"

$vnic_name = "Network adapter 1"

$template_name = "photon-1.0-rev2"

 

# テナント内共通 変数

$nw_msak = "255.255.255.0"

$tenant_dns = "10.1.1.1"

$domain_name = "go-lab.jp"

$cluster_name = "nsx-cluster-01"

$datastore_name = "ds_nfs_lab02"

 

テナント作成と VM の追加のスクリプト例。

PowerNSX でテナント追加の自動化をしてみる。Part.1 のように、

ネットワーク環境と VM を作成して、VM をネットワーク(論理スイッチ)に接続します。

 

テナントの作成 スクリプトの内容。

1つ目の引数で、テナントネットワークの構成ファイルを指定しています。

 

ファイル名: add_tenant_nw.ps1

$tenant_nw_config =  $args[0]

. $tenant_nw_config

 

# テナント 論理スイッチ作成

$tz = Get-NsxTransportZone -name $tz_name

$ls = New-NsxLogicalSwitch -TransportZone $tz -Name $ls_name

$ls | % {"Logical Switch: " + $_.name + " => objectId: " + $_.objectId}

 

# DLR 接続

$dlr = Get-NsxLogicalRouter -objectId $dlr_id

$dlr_if = $dlr | New-NsxLogicalRouterInterface `

    -Type internal -PrimaryAddress $gw_addr -SubnetPrefixLength $nw_msak_length `

    -ConnectedTo $ls -Name $dlr_if_name

$dlr_if | select -ExpandProperty interface |

    % {"DLR Interface: " + $_.name + " => index: " + $_.index}

 

# SNAT ルール追加

$nat_original_addr = $nw_addr + "/" + $nw_msak_length

$esg = Get-NsxEdge -objectId $esg_id

$snat_rule = $esg | Get-NsxEdgeNat | New-NsxEdgeNatRule `

    -Vnic 0 -action snat `

    -OriginalAddress $nat_original_addr -TranslatedAddress $esg_ext_addr

$snat_rule | % {"SNAT Source Address: " + $_.originalAddress + " => ruleId " + $_.ruleId}

 

# DFW ルール追加

$dfw_section = New-NsxFirewallSection -Name $dfw_section_name

$dfw_section | % {"DFW Section: " + $_.name + " => id " + $_.id}

 

$dfw_rule_name = "allow jBox to tenant-ls SSH"

$dfw_section = Get-NsxFirewallSection -objectId $dfw_section.id

$svc = Get-NsxService -Name SSH | where {$_.isUniversal -eq $false}

$dfw_rule = $dfw_section | New-NsxFirewallRule -Name $dfw_rule_name `

    -Action allow -Source $jbox_ip -Destination $ls -Service $svc -AppliedTo $ls

$dfw_rule | % {"DFW Rule: " + $_.name + " => id " + $_.id}

 

$dfw_rule_name = "allow Any to tenant-ls HTTP"

$dfw_section = Get-NsxFirewallSection -objectId $dfw_section.id

$svc = Get-NsxService -Name HTTP | where {$_.isUniversal -eq $false}

$dfw_rule = $dfw_section | New-NsxFirewallRule -Name $dfw_rule_name `

    -Action allow -Destination $ls -Service $svc -AppliedTo $ls

$dfw_rule | % {"DFW Rule: " + $_.name + " => id " + $_.id}

 

$vm_folder = Get-Folder -Type VM vm | New-Folder -Name $tenant_name

$vm_folder | % {"VM Folder: " + $_.Name + " => id " + $_.ExtensionData.MoRef.Value}

 

少し長いスクリプトですが、実行すると下記のような出力結果となります。

get_tenant_summary.png

 

VM の追加 スクリプトの内容。

1つ目の引数で、テナントネットワークの構成ファイルを指定して、

2つ目の引数で、VM の構成ファイルを指定しています。

 

ファイル名: add_tenant_vm.ps1

$tenant_nw_config =  $args[0]

. $tenant_nw_config

$tenant_vm_config = $args[1]

. $tenant_vm_config

 

$ls = Get-NsxTransportZone -name $tz_name | Get-NsxLogicalSwitch -Name $ls_name

 

"Create Guest OS Customization Spec: " + $os_spec_name

$os_spec_name = "osspec-" + $vm_name

$spec = New-OSCustomizationSpec -Name $os_spec_name `

    -OSType Linux -DnsServer $tenant_dns -Domain $domain_name

 

"Edit Guest OS Customization Spec: " + $_.Name

$spec | Get-OSCustomizationNicMapping |

    Set-OSCustomizationNicMapping -IpMode UseStaticIP `

    -IpAddress $ip_addr -SubnetMask $nw_msak -DefaultGateway $gw_addr | Out-Null

 

$vm = Get-Template -Name $template_name |

    New-VM -Name $vm_name -Location (Get-Folder -Type VM $tenant_name) `

    -ResourcePool $cluster_name -Datastore $datastore_name -OSCustomizationSpec $spec

$vm | % {"New VM: " + $_.Name + " => id " + $_.ExtensionData.MoRef.Value}

 

"Delete Guest OS Customization Spec: " + $spec.Name

$spec | Remove-OSCustomizationSpec -Confirm:$false

 

"Connect vNIC: " + ($vm.Name + "/" + $vnic_name + " to " + $ls.Name)

$vm | Get-NetworkAdapter -Name $vnic_name | Connect-NsxLogicalSwitch $ls

$vm | Start-VM | % {"Start VM: " + $_.Name}

 

テナント情報取得スクリプトの例。

PowerNSX でテナント追加の自動化をしてみる。Part.2 で確認したような情報を取得してみます。

しかし、あまり詳細な情報までとらず、特徴的なサマリを表示するようにしてみました。

 

https://gist.github.com/gowatana/0dfab57feb0598452bccf2448c45f4d9

テナント情報取得スクリプトの内容。

1つ目の引数で、テナントネットワークの構成ファイルを指定しています。

 

ファイル名: get_tenant_summary.ps1

$tenant_nw_config =  $args[0]

. $tenant_nw_config

 

function format_output ($title, $object) {

    "=" * 60

    $title

    ""

    ($object | Out-String).Trim()

    ""

}

 

"#" * 60

"テナント: " + $tenant_name

"実行時刻: " + (Get-Date).DateTime

""

 

$ls =  Get-NsxTransportZone $tz_name | Get-NsxLogicalSwitch -Name $ls_name

$ls_id = $ls.objectId

$dvpg = $ls | Get-NsxBackingPortGroup

$dlr = Get-NsxLogicalRouter -objectId $dlr_id

$dlr_if = $dlr | Get-NsxLogicalRouterInterface | where {$_.connectedToId -eq $ls_id}

$dlr_if_addr = $dlr_if.addressGroups.addressGroup | %{$_.primaryAddress + "/" + $_.subnetPrefixLength}

$ls_info = $ls | fl `

    name,

    objectId,

    @{N="VDSwitch";E={$dvpg.VDSwitch.Name}},

    @{N="dvPortgroup";E={$dvpg.Name}},

    @{N="DlrIfIPAddress";E={$dlr_if_addr}}

format_output "Tenant Network" $ls_info

 

$esg = Get-NsxEdge -objectId $esg_id

$nat_original_addr = $nw_addr + "/" + $nw_msak_length

$snat_rule = $esg | Get-NsxEdgeNat | Get-NsxEdgeNatRule |

    where {$_.originalAddress -eq $nat_original_addr}

$snat_rule_info = $snat_rule | fl translatedAddress,originalAddress

format_output "ESG SNAT ルール情報" $snat_rule_info

 

$dfw_section = Get-NsxFirewallSection -Name $dfw_section_name

$dfw_rules = $dfw_section.rule

$dfw_rules_info = $dfw_rules | select `

    id,

    name,

    @{N="Src";E={

            $member = $_ | Get-NsxFirewallRuleMember |

                where {$_.MemberType -eq "Source"} |

                % {if($_.Name -eq $null){$_.Value}else{$_.Name}

            }

            if(($member).Count -eq 0){$member = "Any"}

            $member

        }

    },

    @{N="Dst";E={

            $member = $_ | Get-NsxFirewallRuleMember |

                where {$_.MemberType -eq "Destination"} |

                % {if($_.Name -eq $null){$_.Value}else{$_.Name}

            }

            if(($member).Count -eq 0){$member = "Any"}

            $member

        }

    },

    @{N="Service";E={$_.services.service.name}},

    action,

    @{N="appliedTo";E={$_.appliedToList.appliedTo.name}},

    logged | ft -AutoSize

format_output ("DFWセクション" + $dfw_section.name + "ルール情報") $dfw_rules_info

 

# 論理スイッチに接続されているVMの情報

$vms = $ls | Get-NsxBackingPortGroup | Get-VM | sort Name

$vm_info = $vms | % {

    $vm = $_

    $guest = $_ | Get-VmGuest

    $vm | select `

        @{N="VM";E={$_.Name}},

        @{N="HostName";E={$_.Guest.ExtensionData.HostName}},

        @{N="State";E={$_.Guest.State}},

        @{N="IPAddress";E={

                $_.Guest.ExtensionData.Net.IpConfig.IpAddress |

                    where {$_.PrefixLength -le 32} |

                    % {$_.IpAddress + "/" + $_.PrefixLength}

            }

        },

        @{N="Gateway";E={

                $guest_dgw = $_.Guest.ExtensionData.IpStack.IpRouteConfig.IpRoute |

                    where {$_.Network -eq "0.0.0.0"}

                $guest_dgw.Gateway.IpAddress

            }

        },

        @{N="GuestFullName";E={$_.Guest.ExtensionData.GuestFullName}}

} | ft -AutoSize

format_output "VM / ゲスト ネットワーク情報" $vm_info

 

テナント削除スクリプトの例。

PowerNSX でテナント追加の自動化をしてみる。Part.3 のように、

VM を削除して、論理スイッチも削除します。

特に対話的な確認メッセージもなく、一気に削除するようにしています。

 

テナント削除 スクリプトの内容。

1つ目の引数で、テナントネットワークの構成ファイルを指定しています。

 

ファイル名: delete_tenant.ps1

$tenant_nw_config =  $args[0]

. $tenant_nw_config

 

$ls = Get-NsxTransportZone $tz_name | Get-NsxLogicalSwitch -Name $ls_name

 

"Remove VM"

$ls | Get-NsxBackingPortGroup | Get-VM | Stop-VM -Confirm:$false | Out-Null

$ls | Get-NsxBackingPortGroup | Get-VM | Remove-VM -DeletePermanently -Confirm:$false

 

"Remove DFW Rule"

Get-NsxFirewallSection -Name $dfw_section_name |

    Remove-NsxFirewallSection -force -Confirm:$false

 

"Remove SNAT Rule"

$nat_original_addr = $nw_addr + "/" + $nw_msak_length

Get-NsxEdge -objectId $esg_id | Get-NsxEdgeNat | Get-NsxEdgeNatRule |

    where {$_.originalAddress -eq $nat_original_addr} |

    Remove-NsxEdgeNatRule -Confirm:$false

 

"Remove NsxLogical Switch"

Get-NsxLogicalRouter -objectId $dlr_id | Get-NsxLogicalRouterInterface |

    where {$_.connectedToId -eq $ls.objectId} |

    Remove-NsxLogicalRouterInterface -Confirm:$false

$ls | Remove-NsxLogicalSwitch -Confirm:$false

 

"Remove VM Folder"

Get-Folder -Type VM $tenant_name | Remove-Folder -Confirm:$false

 

まだつづく。

PowerNSX でテナント追加の自動化をしてみる。Part.5

これまで、論理スイッチや VM を PowerCLI / PowerNSX で作成してみましたが、

ひたすらオブジェクトを作成していくだけというのは現実的ではないと思います。

そこで、これまでに(下記で)作成したテナントを PowerCLI / PowerNSX でいったん削除してみます。

PowerNSX でテナント追加の自動化をしてみる。Part.2

 

NSX には直接マルチ テナントを構成する機能はありませんが、

テナントっぽく作成した下記のオブジェクトを、作成した順番とは逆に削除していきます。

  1. VM
  2. DFW ルール
  3. SNAT ルール
  4. 論理スイッチ

 

1. VM の削除。

まず、論理スイッチなど他のオブジェクトを削除する前に、VM を削除します。

今回は、論理スイッチ「ls-tenant-04」を割り当てている VM をまとめて削除します。

 

まず、下記が削除対象の VM です。

VM は 2つ(vm41 と vm42)を作成して、論理スイッチに接続しています。

論理スイッチのバッキング ポートグループから VM を取得していますが、

この環境ではDLRの内部インターフェースにも論理スイッチ「ls-tenant-04」を割り当てていますが

DLR Control VM は、実際はポートグループが割り当てられないため含まれないようです。

PowerNSX> Get-NsxLogicalSwitch -Name ls-tenant-04 | Get-NsxBackingPortGroup | Get-VM

 

Name                 PowerState Num CPUs MemoryGB

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

vm41                 PoweredOn  1        2.000

vm42                 PoweredOn  1        2.000

 

 

VM を停止します。

PowerNSX> Get-NsxLogicalSwitch -Name ls-tenant-04 | Get-NsxBackingPortGroup | Get-VM | Stop-VM -Confirm:$false

 

Name                 PowerState Num CPUs MemoryGB

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

vm42                 PoweredOff 1        2.000

vm41                 PoweredOff 1        2.000

 

 

VM を削除します。

VM が削除されたため、以前は VM を 2つ取得できていたコマンドを実行しても何も表示されなくなりました。

PowerNSX> Get-NsxLogicalSwitch -Name ls-tenant-04 | Get-NsxBackingPortGroup | Get-VM | Remove-VM -DeletePermanently -Confirm:$false

PowerNSX> Get-NsxLogicalSwitch -Name ls-tenant-04 | Get-NsxBackingPortGroup | Get-VM

PowerNSX>

 

2. DFW ルールの削除。

DFW ルールは、テナントごとにセクションを作成しておいたので、

ここではルールごとではなくセクションごと削除してみます。

DFW のセクションには まだルールが残っている状態なので「-force」オプションで削除します。

PowerNSX> Get-NsxFirewallSection -Name dfw-section-04

 

 

id               : 1009

name             : dfw-section-04

generationNumber : 1499559304897

timestamp        : 1499559304897

type             : LAYER3

rule             : {allow any to t04 http, allow jbox to t04 ssh}

 

 

PowerNSX> Get-NsxFirewallSection -Name dfw-section-04 | Remove-NsxFirewallSection -force -Confirm:$false

PowerNSX> Get-NsxFirewallSection -Name dfw-section-04

PowerNSX>

 

3. SNAT ルールの削除。

Edge Service Gateway(ESG)の NAT サービスに作成した、SNAT ルールを削除します。

PowerNSX> Get-NsxEdge -objectId edge-1 | Get-NsxEdgeNat | Get-NsxEdgeNatRule | where {$_.originalAddress -eq "10.1.40.0/24"}

 

 

ruleId                      : 196611

ruleTag                     : 196611

ruleType                    : user

action                      : snat

vnic                        : 0

originalAddress             : 10.1.40.0/24

translatedAddress           : 192.168.1.144

snatMatchDestinationAddress : any

loggingEnabled              : false

enabled                     : true

protocol                    : any

originalPort                : any

translatedPort              : any

snatMatchDestinationPort    : any

edgeId                      : edge-1

 

 

PowerNSX> Get-NsxEdge -objectId edge-1 | Get-NsxEdgeNat | Get-NsxEdgeNatRule | where {$_.originalAddress -eq "10.1.40.0/24"} | Remove-NsxEdgeNatRule -Confirm:$false

PowerNSX> Get-NsxEdge -objectId edge-1 | Get-NsxEdgeNat | Get-NsxEdgeNatRule | where {$_.originalAddress -eq "10.1.40.0/24"}

PowerNSX>

 

4. 論理スイッチの削除。

削除対象の論理スイッチの Object ID は「virtualwire-222」になっています。

PowerNSX> Get-NsxTransportZone tz01 | Get-NsxLogicalSwitch -Name ls-tenant-04 | fl name,objectId

 

name     : ls-tenant-04

objectId : virtualwire-222

 

 

まず DLR から、論理スイッチ「ls-tenant-04」の接続されたインターフェースを削除します。

PowerNSX> Get-NsxLogicalRouter -objectId edge-5 | Get-NsxLogicalRouterInterface | where {$_.connectedToId -eq "virtualwire-222"}

 

 

label           : 27110000000d

name            : if-tenant-04

addressGroups   : addressGroups

mtu             : 1500

type            : internal

isConnected     : true

isSharedNetwork : false

index           : 13

connectedToId   : virtualwire-222

connectedToName : ls-tenant-04

logicalRouterId : edge-5

 

 

PowerNSX> Get-NsxLogicalRouter -objectId edge-5 | Get-NsxLogicalRouterInterface | where {$_.connectedToId -eq "virtualwire-222"} | Remove-NsxLogicalRouterInterface -Confirm:$false

PowerNSX> Get-NsxLogicalRouter -objectId edge-5 | Get-NsxLogicalRouterInterface | where {$_.connectedToId -eq "virtualwire-222"}

PowerNSX>

 

まだ論理スイッチは残っている状態です。

そして、そのバッキング分散ポートグループも存在しています。

PowerNSX> Get-NsxLogicalSwitch -Name ls-tenant-04 | Get-NsxBackingPortGroup | fl VDSwitch,Name,Id

 

 

VDSwitch : vds02

Name     : vxw-dvs-36-virtualwire-222-sid-10005-ls-tenant-04

Id       : DistributedVirtualPortgroup-dvportgroup-412

 

 

論理スイッチ「ls-tenant-04」を削除します。

PowerNSX> Get-NsxLogicalSwitch -Name ls-tenant-04 | Remove-NsxLogicalSwitch -Confirm:$false

PowerNSX> Get-NsxLogicalSwitch -Name ls-tenant-04

PowerNSX>

 

ちなみに vDS に作成されているバッキング分散ポートグループも、

ちゃんと自動的に削除されて存在しない状態になりました。

PowerNSX> Get-VDPortgroup vxw-dvs-36-virtualwire-222-sid-10005-ls-tenant-04

Get-VDPortgroup : 2017/07/09 12:38:12   Get-VDPortgroup         VDPortgroup with name 'vxw-dvs-36-virtualwire-222-sid-10005-ls-tenant-04' was not found using the specified filter(s).

発生場所 行:1 文字:1

+ Get-VDPortgroup vxw-dvs-36-virtualwire-222-sid-10005-ls-tenant-04

+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    + CategoryInfo          : ObjectNotFound: (:) [Get-VDPortgroup], VimException

    + FullyQualifiedErrorId : Core_OutputHelper_WriteNotFoundError,VMware.VimAutomation.Vds.Commands.Cmdlets.GetVDPort

   group

PowerNSX>

 

これで、前回までに作成したオブジェクトを削除した状態になりました。

 

まだ続く・・・

PowerNSX でテナント追加の自動化をしてみる。Part.4

PowerNSX を使用して、NSX for vSphere へのテナント追加の自動化をしてみようと思います。

今回は前回作成したテナント環境(論理スイッチや VM など)の様子を、

PowerCLI と PowerNSX をくみあわせて確認しておきます。

 

前回はこちら。

PowerNSX でテナント追加の自動化をしてみる。Part.1

 

テナント環境の確認。

作成した論理スイッチ「ls-tenant-04」です。

Object ID は「virtualwire-222」になりました。

PowerNSX> Get-NsxTransportZone tz01 | Get-NsxLogicalSwitch -Name ls-tenant-04 | fl name,objectId

 

 

name     : ls-tenant-04

objectId : virtualwire-222

 

 

論理スイッチのバッキングの分散ポートグループが、

「vxw-dvs-36-virtualwire-222-sid-10005-ls-tenant-04」だとわかります。

※Transport Zone は 1つなので省略しています。

PowerNSX> Get-NsxLogicalSwitch -Name ls-tenant-04 | select -ExpandProperty vdsContextWithBacking

 

 

switch          : switch

mtu             : 1600

promiscuousMode : false

backingType     : portgroup

backingValue    : dvportgroup-412

missingOnVc     : false

 

 

PowerNSX> Get-NsxLogicalSwitch -Name ls-tenant-04 | Get-NsxBackingPortGroup | fl VDSwitch,Name,Id

 

 

VDSwitch : vds02

Name     : vxw-dvs-36-virtualwire-222-sid-10005-ls-tenant-04

Id       : DistributedVirtualPortgroup-dvportgroup-412

 

 

バッキングの分散ポートグループも存在しています。

PowerNSX> Get-VDPortgroup | where {$_.Name -eq "vxw-dvs-36-virtualwire-222-sid-10005-ls-tenant-04"} | select Id

 

 

Id

--

DistributedVirtualPortgroup-dvportgroup-412

 

 

DLR インスタンスと、論理スイッチ(virtualwire-222)の接続されたインターフェースを見てみます。

PowerNSX> Get-NsxLogicalRouter -objectId edge-5 | Get-NsxLogicalRouterInterface | where {$_.connectedToId -eq "virtualwire-222"}

 

 

label           : 27110000000d

name            : if-tenant-04

addressGroups   : addressGroups

mtu             : 1500

type            : internal

isConnected     : true

isSharedNetwork : false

index           : 13

connectedToId   : virtualwire-222

connectedToName : ls-tenant-04

logicalRouterId : edge-5

 

 

インターフェースに「10.1.40.1/24」が設定されたこともわかります。

PowerNSX> Get-NsxLogicalRouter -objectId edge-5 | Get-NsxLogicalRouterInterface | where {$_.connectedToId -eq "virtualwire-222"} | select -ExpandProperty addressGroups | select -ExpandProperty addressGroup | fl

 

primaryAddress     : 10.1.40.1

subnetMask         : 255.255.255.0

subnetPrefixLength : 24

 

 

PowerNSX での情報取得は XmlElement で階層が深く、この先「select -ExpandProperty」が多くなります。

かわりに、下記のように Format-XML によって XML で出力することもできたりします。

PowerNSX> Get-NsxLogicalRouter -objectId edge-5 | Get-NsxLogicalRouterInterface | where {$_.connectedToId -eq "virtualwire-222"} | select -ExpandProperty addressGroups | Format-XML

<addressGroups>

  <addressGroup>

    <primaryAddress>10.1.40.1</primaryAddress>

    <subnetMask>255.255.255.0</subnetMask>

    <subnetPrefixLength>24</subnetPrefixLength>

  </addressGroup>

</addressGroups>

PowerNSX>

 

ESG に作成した、SNAT ルールです。

10.1.40.0/24 のソース アドレスが、192.168.1.144 に変換されます。

PowerNSX> Get-NsxEdge -objectId edge-1 | Get-NsxEdgeNat | Get-NsxEdgeNatRule | where {$_.originalAddress -eq "10.1.40.0/24"}

 

ruleId                      : 196611

ruleTag                     : 196611

ruleType                    : user

action                      : snat

vnic                        : 0

originalAddress             : 10.1.40.0/24

translatedAddress           : 192.168.1.144

snatMatchDestinationAddress : any

loggingEnabled              : false

enabled                     : true

protocol                    : any

originalPort                : any

translatedPort              : any

snatMatchDestinationPort    : any

edgeId                      : edge-1

 

 

作成した DFW ルールを見てみます。

ルールは「dfw-section-04」セクションに作成しました。

ルールが2つあることがわかります。

PowerNSX> Get-NsxFirewallSection -Name dfw-section-04

 

 

id               : 1009

name             : dfw-section-04

generationNumber : 1499213132983

timestamp        : 1499213132983

type             : LAYER3

rule             : {allow any to t04 http, allow jbox to t04 ssh}

 

 

2つとも、許可(action: allow)ルールです。

PowerNSX> Get-NsxFirewallSection -Name dfw-section-04 | select -ExpandProperty rule

 

 

id            : 1105

disabled      : false

logged        : false

name          : allow any to t04 http

action        : allow

appliedToList : appliedToList

sectionId     : 1009

destinations  : destinations

services      : services

direction     : inout

packetType    : any

 

id            : 1104

disabled      : false

logged        : false

name          : allow jbox to t04 ssh

action        : allow

appliedToList : appliedToList

sectionId     : 1009

sources       : sources

destinations  : destinations

services      : services

direction     : inout

packetType    : any

 

 

ルールの通信元 / 通信先 も確認できます。

踏み台から論理スイッチへの SSH を許可するルール(RuleId: 1104)は下記のようになっています。

PowerNSX> Get-NsxFirewallRule -RuleId 1104 | Get-NsxFirewallRuleMember

 

 

RuleId     : 1104

SectionId  : 1009

MemberType : Source

Name       :

Value      : 192.168.1.223

Type       : Ipv4Address

isValid    : true

 

RuleId     : 1104

SectionId  : 1009

MemberType : Destination

Name       : ls-tenant-04

Value      : virtualwire-222

Type       : VirtualWire

isValid    : true

 

 

ルール ID 1104 のサービスは、SSH です。

PowerNSX> Get-NsxFirewallRule -RuleId 1104 | select -ExpandProperty services | select -ExpandProperty service | fl

 

 

name    : SSH

value   : application-368

type    : Application

isValid : true

 

 

任意の場所から論理スイッチへの HTTP を許可するルール(RuleId: 1105)は

通信元はなく、通信先(Destination)だけ指定されています。

PowerNSX> Get-NsxFirewallRule -RuleId 1105 | Get-NsxFirewallRuleMember

 

 

RuleId     : 1105

SectionId  : 1009

MemberType : Destination

Name       : ls-tenant-04

Value      : virtualwire-222

Type       : VirtualWire

isValid    : true

 

 

ルール ID 1105 のサービスは、HTTP です。

PowerNSX> Get-NsxFirewallRule -RuleId 1105 | select -ExpandProperty services | select -ExpandProperty service | fl

 

 

name    : HTTP

value   : application-253

type    : Application

isValid : true

 

 

作成した VM の確認。

VM の情報は、主に PowerCLI で確認しています。

作成した VM「vm41」は、指定したデータストア「ds_nfs_lab02」に配置されています。

PowerNSX> Get-VM vm41 | fl Name,PowerState,GuestId,@{N="Datastore";E={$_|Get-Datastore}}

 

 

Name       : vm41

PowerState : PoweredOn

GuestId    : other3xLinux64Guest

Datastore  : ds_nfs_lab02

 

 

vNIC には、論理スイッチのバッキングポートグループが設定されています。

PowerNSX> Get-VM vm41 | Get-NetworkAdapter | fl Parent,Name,NetworkName,@{N="Connected";E={$_.ConnectionState.Connected}}

 

 

Parent      : vm41

Name        : Network adapter 1

NetworkName : vxw-dvs-36-virtualwire-222-sid-10005-ls-tenant-04

Connected   : True

 

 

vm41 のゲスト OS の情報です。
VMware Tools(Photon OS なので open-vm-tools)がインストールされた状態です。

PowerNSX> (Get-VM vm41 | Get-VMGuest).ExtensionData | select HostName,GuestState,ToolsStatus,IpAddress,GuestFullName

 

 

HostName      : vm41

GuestState    : running

ToolsStatus   : toolsOk

IpAddress     : 10.1.40.101

GuestFullName : Other 3.x or later Linux (64-bit)

 

 

ゲスト OS には、アドレス「10.1.40.101」が設定できています。

PowerNSX> (Get-VM vm41 | Get-VMGuest).ExtensionData.Net.IpConfig | select -ExpandProperty IpAddress | select IpAddress,PrefixLength

 

 

IpAddress                PrefixLength

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

10.1.40.101                        24

fe80::250:56ff:feaf:d89a           64

 

 

デフォルトゲートウェイ も設定できています。

PowerNSX> (Get-VM vm41 | Get-VMGuest).ExtensionData.IpStack | select -ExpandProperty IpRouteConfig | select -ExpandProperty IpRoute | where {$_.Network -eq "0.0.0.0"} | select @{N="Gateway";E={$_.Gateway.IpAddress}}

 

 

Gateway

-------

10.1.40.1

 

 

論理スイッチに、作成した VM が接続されていることもわかります。

PowerNSX> Get-NsxLogicalSwitch -Name ls-tenant-04 | Get-NsxBackingPortGroup | Get-VM

 

 

 

Name                 PowerState Num CPUs MemoryGB

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

vm41                 PoweredOn  1        2.000

 

 

 

つづく。

PowerNSX でテナント追加の自動化をしてみる。Part.3

PowerNSX を使用して、NSX for vSphere へのテナント追加の自動化をしてみようと思います。

とはいっても、現行の NSX にマルチテナント化の機能がるわけではないので、

既に構築済みの DLR + VXLAN 環境に、新規の論理スイッチと VM をテナントっぽく追加してみます。

 

今回は、DLR とそれより上位のネットワークは構成ずみである想定とします。

下記のような、シンプルなネットワーク環境を使用しています。

NSX Edge のスタティック ルート設定を PowerNSX で見てみる。

 

今回のテナント追加の流れ。

ネットワークを作成してから、VM を作成してネットワークに接続します。

作成した VM は、テナント ネットワークのIP アドレスが設定された状態になる想定です。

 

テナント ネットワークを作成。

  • 1. 論理スイッチを作成。
  • 2. 論理スイッチを DLR に接続。
  • 3. ESG に SNAT ルール追加。
  • 4. DFW の許可ルールを作成。

 

VM を作成してテナント ネットワークに接続。

  • 5. テンプレートから VM を作成。
  • 6. VM を論理スイッチに接続。

 

下記のようなイメージで、追加テナント(赤枠の中の部分)を作成します。

powernsx-automation-img.png

まずは、PowerNSX を対話的に実行してテナントをひととおり作成してみます。

あらかじめ、Connect-NsxServer で NSX 環境に接続しておきます。

PowerNSX での NSX への接続方法について。

PowerNSX> Connect-NsxServer -vCenterServer <vCenter のアドレス>

 

1. 論理スイッチを作成。

テナント ネットワークとして利用する論理スイッチ「ls-tenant-04」を作成します。

今回の環境の Transport Zone は、「tz01」という名前です。

PowerNSX> $tz = Get-NsxTransportZone -name tz01

PowerNSX> $ls = New-NsxLogicalSwitch -TransportZone $tz -Name ls-tenant-04

PowerNSX> $ls | select Name,objectId

 

 

name         objectId

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

ls-tenant-04 virtualwire-222

 

 

2. 論理スイッチを DLR に接続。

作成した論理スイッチを、DLR インスタンス(今回は edge-5)に接続します。

テナントのゲートウェイとなる IP アドレス(今回は 10.1.40.1)も設定します。

PowerNSX> Get-NsxLogicalRouter -objectId edge-5 | New-NsxLogicalRouterInterface -Type internal -PrimaryAddress 10.1.40.1 -SubnetPrefixLength 24 -ConnectedTo $ls -Name if-tenant-04

 

3. ESG に SNAT ルール追加。

Edge Service Gateway(ESG)に、テナントで使用するネットワークに対応したSNAT ルールを追加します。

  • ESG のアップリンクのアドレスは 192.168.1.144 です。
  • テナントで使用するネットワーク アドレス 10.1.40.0/24 としました。

 

ESG での SNAT の利用については下記もどうぞ

NSX ESG の SNAT 設定の様子。

 

PowerNSX> Get-NsxEdge -objectId edge-1 | Get-NsxEdgeNat | New-NsxEdgeNatRule -Vnic 0 -action snat -OriginalAddress "10.1.40.0/24" -TranslatedAddress 192.168.1.144

 

4. DFW の許可ルールを作成。

分散ファイアウォール(DFW)に、今回は下記のように通信許可ルールを追加します。

  • デフォルトのままでは、通信が拒否されるようにしてあります。
    別テナントからは、許可ルールを入れていないので、つながらない状態のままになります。
  • テナント向けに、DFW ルールのセクション(dfw-section-04)を作成します。
  • 踏み台サーバ(192.168.1.223)からテナントへの SSH を許可します。
  • 任意のネットワーク(Any)からテナントへの HTTP も許可します。

 

DFW のルールは、VM 追加ごとに変更しなくてよいように、適用先を論理スイッチにしてあります。

また今回は簡易的な環境構築なので、ちょっとルールが微妙なところもあるかもしれません。

PowerNSX> $dfw_section = New-NsxFirewallSection -Name dfw-section-04

PowerNSX> $svc = Get-NsxService -Name SSH | where {$_.isUniversal -eq $false}

PowerNSX> $dfw_section | New-NsxFirewallRule -Name "allow jbox to t04 ssh"   -Action allow -Source 192.168.1.223 -Destination $ls -Service $svc -AppliedTo $ls

PowerNSX> $svc = Get-NsxService -Name HTTP | where {$_.isUniversal -eq $false}

PowerNSX> $dfw_section | New-NsxFirewallRule -Name "allow any to t04 http" -Action allow -Destination $ls -Service $svc -AppliedTo $ls

 

5. テンプレートから VM を作成。

あらかじめ用意しておいた VM テンプレートから、VM を作成します。

VM 作成(クローン)するときに、IP アドレスなどの設定もしています。

ちなみに VM は、Photon OS 1.0 rev-2 の OVA を利用しています。

 

まず、カスタマイズ仕様を作成します。

PowerNSX> New-OSCustomizationSpec -Name spec-vm41 -OSType Linux -DnsServer 10.1.1.1 -Domain go-lab.jp

PowerNSX> Get-OSCustomizationSpec -Name spec-vm41 | Get-OSCustomizationNicMapping | Set-OSCustomizationNicMapping -IpMode UseStaticIP -IpAddress 10.1.40.101 -SubnetMask 255.255.255.0 -DefaultGateway 10.1.40.1

 

そしてカスタマイズ仕様を指定して、VM を作成します。

クローンが終了した直後に、カスタマイズ仕様 は削除しています。

PowerNSX> $spac = Get-OSCustomizationSpec -Name spec-vm41

PowerNSX> Get-Template -Name photon-1.0-rev2 | New-VM -Name vm41 -ResourcePool nsx-cluster-01 -Datastore ds_nfs_lab02 -OSCustomizationSpec $spec
PowerNSX> $spec | Remove-OSCustomizationSpec -Confirm:$false

 

6. VM を論理スイッチに接続。

VM のクローンが完了したら、vNIC を論理スイッチに接続します。

 

New-VM でバッキングの分散ポートグループを指定することも可能ですが、

今回はあえて Connect-NsxLogicalSwitch を使用しました。

PowerNSX> Get-VM vm41 | Get-NetworkAdapter -Name "Network adapter 1" | Connect-NsxLogicalSwitch $ls

 

VM を起動すると、論理スイッチに接続された状態になります。

PowerNSX> Start-VM vm41

 

IP アドレスが設定された状態で、ネットーワークに接続されます。

PowerNSX> Get-VM vm41 | Get-VMGuest | select VM,State,IPAddress,OSFullName

 

 

VM     State IPAddress                               OSFullName

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

vm41 Running {10.1.40.101, fe80::250:56ff:feaf:d89a} Other 3.x or later Linux (64-bit)

 

 

つづく・・・

PowerNSX でテナント追加の自動化をしてみる。Part.2

今回は、 NSX Edge Service Gateway(ESG) の NAT サービスの様子を紹介してみます。

私は自宅ラボの NSX 環境からインターネットに出る場合などに SNAT を利用しています。

esg-snat.png

 

この環境の ESG のアップリンクには、192.168.1.144 のアドレスを設定しています。

esg-snat-01.png

 

そして、インターネット接続したい VM のセグメント(今回は 10.1.30.0/24)がソース アドレスの場合に、

ESG のアップリンクのアドレスに変換する SNAT ルールを設定しています。

esg-snat-02.png

 

SNAT ルールの設定画面は、下記のような感じです。

esg-snat-03.png

 

ちなみに、PowerNSX で NAT ルールを確認することもできます。

PowerCLI C:\> Get-NsxEdge -objectId edge-1 | Get-NsxEdgeNat | Get-NsxEdgeNatRule

 

 

ruleId                      : 196609

ruleTag                     : 196609

ruleType                    : user

action                      : snat

vnic                        : 0

originalAddress             : 10.1.30.0/24

translatedAddress           : 192.168.1.144

snatMatchDestinationAddress : any

loggingEnabled              : false

enabled                     : true

description                 :

protocol                    : any

originalPort                : any

translatedPort              : any

snatMatchDestinationPort    : any

edgeId                      : edge-1

 

 

 

以上、最近のほかの投稿の参考情報として、自宅 NSX ESG の NAT の様子を投稿してみました。

今回は、 NSX 環境に設定されたルーティングを PowerNSX / PowerCLI で見てみます。

 

自宅環境の都合上 NSX Edge をたくさん並べるのが困難なので、

OSPF などのルーティングプロトコルは動作させていません。

単純に Edge Service Gateway(ESG)1台、DLR Control VM 1 台がある、なんとか NSX っぽい構成にしてあります。

この環境で、NSX で管理されている NSX Edge のルーティング(赤枠のフキダシ)を PowerNSX で確認してみます。

nsx-edge-route.png

 

まず vSphere Web Client でルーティング設定を見てみます。

 

NSX Edge が2台あります。

このあと ID を指定するため、ESG は edge-1、DLR Control VM は edge-5 であることをおぼえておきます。

nsx-edge-rt-00.png

 

ESG の NSX Edge です。インターフェースが 2つ作成されています。

nsx-edge-rt-01.png

 

「if-uplink」という名前の インターフェースの方向にゲートウェイを設定していますが、

これはインターネットなど、NSX 外部に接続するルータのアドレスを指定しています。

nsx-edge-rt-02.png

 

NSX のラボ環境むけに、スタティック ルートは DLR のアップリンクにむけて設定しています。

nsx-edge-rt-03.png

 

DLR Control VM の NSX Edge です。

ESG でスタティックルートをむけているアップリンクのほかに、

いくつか内部インターフェースを作成して、論理スイッチを接続しています。

nsx-edge-rt-04.png


DLR では、デフォルト ゲートウェイを ESG のインターフェースにむけています。

nsx-edge-rt-05.png

 

PowerNSX で見ると、こんな感じです。

あらためて、ESG と、DLR の Object ID を確認しておきます。

ESG は edge-1、DLR は edge-5 です。

PowerCLI C:\> Get-NsxEdge | fl id,name,type

 

id   : edge-1

name : nsxesg01

type : gatewayServices

 

 

PowerCLI C:\> Get-NsxLogicalRouter | fl id,name,type

 

 

id   : edge-5

name : nsxdlr01

type : distributedRouter

 

 

ESG のスタティックルートの設定確認については、わかりやすいコマンドレットが用意されています。

今回は DLR にはスタティックルートを設定していないのですが、DRL にも同様に、

Get-NsxLogicalRouterRouting、Get-NsxLogicalRouterStaticRoute  が用意されています。

PowerCLI C:\> Get-NsxEdge -objectId edge-1 | Get-NsxEdgeRouting | Get-NsxEdgeStaticRoute

 

 

mtu           : 1500

description   :

type          : user

vnic          : 1

network       : 10.0.0.0/8

nextHop       : 10.1.1.2

adminDistance : 1

edgeId        : edge-1

 

 

一方、デフォルトゲートウェイ(というかデフォルト ルート)の設定確認については、ちょっと工夫がいりそうな雰囲気です。

ESG の デフォルト ルートを見てみましたが、「select -ExpandProperty」でけっこう深くたどりました。

PowerCLI C:\> Get-NsxEdge -objectId edge-1 | Get-NsxEdgeRouting | select -ExpandProperty staticRouting | select -ExpandProperty defaultRoute | select gatewayAddress

 

gatewayAddress

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

192.168.1.1

 

 

DLR のデフォルト ルートの確認も同様に、シンプルなコマンドレットでというわけでなないようです。

PowerCLI C:\> Get-NsxLogicalRouter -objectId edge-5 | Get-NsxLogicalRouterRouting | select -ExpandProperty staticRouting | select -ExpandProperty defaultRoute

 

 

 

mtu  gatewayAddress adminDistance

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

1500 10.1.1.1       1

 

 

 

PowerNSX には、XPath のクエリをあつかうコマンドレット(Invoke-XpathQuery)も用意されています。

実はこの情報は XmlElement なので、そちらを使ってしまったほうがシンプルかもしれません。

PowerCLI C:\> $r = Get-NsxLogicalRouter -objectId edge-5 | Get-NsxLogicalRouterRouting

PowerCLI C:\> Invoke-XpathQuery -QueryMethod SelectNodes -Node $r -query "//gatewayAddress"

 

#text

-----

10.1.1.1

 

 

このように、PowerNSX でも vSphere Web Client と同様に

NSX Edge のルーティング 情報を取得することが(そして設定することも)できます。

一方 NSX で管理されていない、 NSX Edge 以外のルーティングは、

基本的には個別に ログインしたりして確認することになります。

 

ただし、VMware Tools がインストールされている ゲスト OS であれば、

PowerCLI から取得できたりします。

PowerCLI C:\> Get-VM vm01 | Get-VMGuest | % {$_.ExtensionData.IpStack.IpRouteConfig.IpRoute | select Network,PrefixLength,@{N="Gateway";E={$_.Gateway.IpAddress}}}

 

 

Network   PrefixLength Gateway

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

0.0.0.0              0 10.1.10.1

10.1.10.0           24

10.1.10.1           32

fe80::              64

 

 

以上、最近のほかの投稿の参考情報として、自宅 NSX のルーティングの様子を投稿してみました。

PowerNSX で、NSX vor vSphere 環境を操作するときには、まず Connect-NsxServer で接続します。

接続先の指定方法はいろいろあり、たとえば下記のようなパターンがあります。

  • vCenter を指定(-vCenterServer)して、NSX Manager にも自動接続。
  • vCenter 接続(Connect-VIServer)しておき、NSX Manager にあとから接続する。
  • NSX Manager と、vCenter を両方指定して接続する。
  • NSX Manager だけに接続する。(-DisableVIAutoConnect)

 

これまでは、NSX Manager のアドレスを指定して、NSX Manager のローカルユーザで

ログインする接続方法がとられていたようですが、

今後は、基本的に 「vCenter を指定して、NSX Manager にも自動接続」の接続が推奨されるようです。

vSphere Web Client で NSX(Network and Security 画面)を操作するときと同様、

利用者が明示的に指定するのは vCenter のアドレスだけで十分となります。

そして、その時のログインは vCenter Single Sign-On(vCenter SSO)のユーザを使用します。

 

現時点のバージョンの PowerNSX では、下記のように「-vCenterServer」で vCenter を指定してログインします。

PowerCLI> Connect-NsxServer -vCenterServer <vCenter のアドレス>

 

Connect-NsxServer で NSX 環境に接続。

下記のように Connect-NsxServer を実行することで、vCenter と NSX Manager に接続できます。

※1行目は、証明書の警告を抑止するため実行しています。

※「vc-sv02.go-lab.jp」は、うちの vCenter です。

PowerCLI C:\> Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -Scope Session -Confirm:$false

PowerCLI C:\> Connect-NsxServer -vCenterServer vc-sv02.go-lab.jp

 

ユーザ / パスワードの入力画面が表示されるので、

vCenter (vCenter SSO)のユーザでログインすると NSX Manager に接続できていることがわかります。

今回は PowerCLI のウインドウから実行していますが、PowerShell のプロンプトからでも実行可能です。

conn-nsx-01.png

 

vCenter の接続

PowerCLI C:\> $global:DefaultVIServer | fl Name,Version,Build,User,ISConnected


Name        : vc-sv02.go-lab.jp

Version     : 6.5

Build       : 5318154

User        : GO-LAB\gowatana

IsConnected : True

 

NSX Manager の接続

※「192.168.1.141」は、今回の NSX Manager(nsxmgr01)の IP アドレスです。

PowerCLI C:\> $DefaultNSXConnection

 

 

Version             : 6.3.1

BuildNumber         : 5124716

Credential          : System.Management.Automation.PSCredential

Server              : 192.168.1.141

Port                : 443

Protocol            : https

ValidateCertificate : False

VIConnection        : vc-sv02.go-lab.jp

DebugLogging        : False

DebugLogfile        : C:\Users\gowatana\AppData\Local\Temp\PowerNSXLog-gowatana@-2017_07_04_23_44_35.log

 

 

今回は、NSX Manager で vCenter / vCenter SSO 連携を設定ずみです。

※下記にはありませんが、NSX のロール割り当ても設定ずみです。

※ちなみにうちの vCenter SSO では、LDAP を ID ソースにしていています。

PowerCLI C:\> Get-NsxManagerVcenterConfig | fl ipAddress,userName,Connected

 

 

ipAddress : vc-sv02.go-lab.jp

userName  : nsx-admin@go-lab.jp

Connected : true

 

 

PowerCLI C:\> Get-NsxManagerSsoConfig | fl ssoLookupServiceUrl,ssoAdminUsername,Connected

 

 

ssoLookupServiceUrl : https://vc-sv02.go-lab.jp:443/lookupservice/sdk

ssoAdminUsername    : nsx-admin@go-lab.jp

Connected           : true

 

 

 

NSX Manager を直接指定した接続。

NSX Manager を「-Server」で指定して接続する方法も将来的に廃止されて

super_user 権限が必要な場合は「-NsxServer」で NSX Manager を指定して

admin ユーザでログインすることになります。

 

たとえば、vCenter に接続しないで NSX Manager だけに admin ユーザで接続する場合は

下記のような感じになります。

conn-nsx-02.png

 

一方、「-Server」で NSX Manager を指定して接続すると、接続は可能ですが警告が表示されます。

conn-nsx-03.png

 

今回の PowerCLI / PowerNSX のバージョン。

今回の PowerNSX は、下記のバージョンでした。

PowerCLI C:\> Get-PowerNsxVersion | select Version

 

 

Version

-------

3.0.0

 

 

依存関係がある PowerCLI のモジュールのバージョンは下記です。

PowerCLI C:\> Get-Module VMware.VimAutomation.Core,VMware.VimAutomation.Vds | select Name,Version

 

 

Name                      Version

----                      -------

VMware.VimAutomation.Core 6.5.0.2604913

VMware.VimAutomation.Vds  6.5.0.4624695

 

 

以上、PowerNSX の接続方法についての話でした。