NSX-T のオペークネットワークを VM ポートグループとして PowerCLI で構成する方法
search cancel

NSX-T のオペークネットワークを VM ポートグループとして PowerCLI で構成する方法

book

Article ID: 431258

calendar_today

Updated On:

Products

VMware NSX

Issue/Introduction

免責事項:これは英文の記事「Configuring NSX-T opaque network as a VM port group with PowerCLI(324798)」の日本語訳です。記事はベストエフォートで翻訳を進めているため、ローカライズ化コンテンツは最新情報ではない可能性があります。最新情報は英語版の記事で参照してください。

症状:
NSX-T ベースのオペークネットワークをソースとするポートグループに関連する仮想マシンのネットワーク構成を管理しようとすると、ホスト上でネットワークが見つからないために失敗することがあります。

コマンド例:
Get-VM "APP-VM1" | Get-NetworkAdapter | Set-NetworkAdapter -NetworkName “network-name”

エラー例:
Set-NetworkAdapter : 22/03/2018 15:56:17 Set-NetworkAdapter The network "network-name" doesn't exist on the host.
At line:1 char:38
+ ... rkAdapter | Set-NetworkAdapter -NetworkName “network-name”
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : ResourceUnavailable: (Network-name:String) [Set-NetworkAdapter], iError
    + FullyQualifiedErrorId : Client20_VmHostServiceImpl_TryGetHostNetworkByName_NonexistentNetwork,VMware.VimAutomation.ViCore.Cmdlets.Commands.VirtualDevice.SetNetworkAdapter

Environment

VMware NSX-T

Resolution

現時点では、解決策はありません。

回避策:

この問題を回避するには、オペークネットワーク用の新しいオブジェクトを作成して、仮想マシン上のポートグループ設定を正しく構成する必要があります。

Set-NetworkAdapterOpaqueNetwork 関数はその新しいオブジェクトを作成し、当面の間 Set-NetworkAdapter の代わりに使用します。

function Set-NetworkAdapterOpaqueNetwork {
param(
    [Parameter(Mandatory = $true, ValueFromPipeline = $true, Position = 1)]
    [VMware.VimAutomation.Types.NetworkAdapter]
    $NetworkAdapter,

    [Parameter(Mandatory = $true, Position = 2)]
    [string]
    $OpaqueNetworkName,

    [Parameter()]
    [switch]
    $Connected,

    [Parameter()]
    [switch]
    $StartConnected
)
process {
    $opaqueNetwork = Get-View -ViewType OpaqueNetwork | ? {$_.Name -eq $OpaqueNetworkName}
    if (-not $opaqueNetwork) {
        throw "'$OpaqueNetworkName' network not found."
    }

    $opaqueNetworkBacking = New-Object VMware.Vim.VirtualEthernetCardOpaqueNetworkBackingInfo
    $opaqueNetworkBacking.OpaqueNetworkId = $opaqueNetwork.Summary.OpaqueNetworkId
    $opaqueNetworkBacking.OpaqueNetworkType = $opaqueNetwork.Summary.OpaqueNetworkType

    $device = $NetworkAdapter.ExtensionData
    $device.Backing = $opaqueNetworkBacking

    if ($StartConnected) {
        $device.Connectable.StartConnected = $true
    }

    if ($Connected) {
        $device.Connectable.Connected = $true
    }
    
    $spec = New-Object VMware.Vim.VirtualDeviceConfigSpec
    $spec.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::edit
    $spec.Device = $device
    $configSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
    $configSpec.DeviceChange = @($spec)
    $NetworkAdapter.Parent.ExtensionData.ReconfigVM($configSpec)

    # Output
    Get-NetworkAdapter -Id $NetworkAdapter.Id
    }
}

コマンド例:

Get-VM "APP-VM1" | Get-NetworkAdapter | Set-NetworkAdapterOpaqueNetwork -OpaqueNetworkName "network-name"