Nutanix PowerShell Cmdlets v2.0(Nutanix.Cli)には、Get-Cluster や Get-VM といったコマンドレットが含まれています。これらは、VMware PowerCLI や Hyper-V PowerShell モジュールをインストールしてある環境だと、同名コマンドレットなので競合します。
ちなみに、Cmdlets v1 では、だいたいコマンドレットの名詞部分が NTNX や Nutanix といった名前で始まるので競合しませんでした。
そこで今回は、Nutanix Cmdlet v2.0 でコマンドレットの Prefix を設定してみます。
今回の内容です。
今回の環境
今回も、以前の投稿で用意した PowerShell の Docker / Podman コンテナを利用しています。
そして、あえて PowerCLI と Nutanix.Cli を両方インストールしておきます。
今回は、すでに PowerCLI Core をインストール(Install-Module VMware.PowerCLI)してあります。
PS /> Get-Module -ListAvailable VMware.PowerCLI | select Name,Version Name Version ---- ------- VMware.PowerCLI 12.5.0.19195797
そこに、さらに Nutanix.Cli をインストールします。
PS /> Set-PSRepository -Name PSGallery -InstallationPolicy Trusted PS /> Install-Module -Name Nutanix.Cli
コマンドレット競合の様子
まず、なにも Import-Module 指定ない状態で Get-Cluster のコマンドレット情報を確認してみると、VMware PowerCLI のものが取得されました。。
PS /> Get-Command Get-Cluster | select Name,Source,Version Name Source Version ---- ------ ------- Get-Cluster VMware.VimAutomation.Core 12.5.0.19093566
Get-Cluster を実行すると、PowerCLI のエラーが表示されます。エラーになるのは、vCenter に未接続なためです。
PS /> Get-Cluster Get-Cluster: 3/4/2022 1:49:53 PM Get-Cluster You are not currently connected to any servers. Please connect first using a Connect cmdlet.
一方、Nutanix.Cli のモジュール名(Nutanix.Prism.PS.Cmds)を指定して Get-Cluster を実行すると、Nutanix.Cli のコマンドレットの情報が取得されます。こちらも Prism Central に接続していないのでエラーになりますが、さきほどとは異なり、Not connected to any Prism Central という Nutanix ならではのメッセージが表示されました。
PS /> Nutanix.Prism.PS.Cmds\Get-Cluster Get-Cluster: Not connected to any Prism Central. Please connect to Prism Central host and try again.
これで、結局 PowerCLI / Nutanix.Cli 両方のモジュールがインポートされました。
この状態で Get-Cluster を実行すると、今度は Nutanix.Cli のコマンドレットが実行されます。
PS /> Get-Cluster Get-Cluster: Not connected to any Prism Central. Please connect to Prism Central host and try again.
これだと、どちらのコマンドレットが実行されるかわかりにくく、都度モジュール名を指定するのも大変です。そこで、Nutanix.Cli のコマンドレットに Prefix を設定してみます。
コマンドレットへの Prefix 指定
名前が競合するコマンドレットは、Nutanix.Cli に含まれる Nutanix.Prism.PS.Cmds モジュールに所属するものです。
それでは、PowerShell(pwsh)を起動しなおしてから、 Prefix にを指定して Nutanix.Prism.PS.Cmds をインポートしてみます。Prefix は、Cmdlets v1 と見た感じ重複しないように NTNX と Nutanix は避けて、「Ntnx」にしてみました。(実際には大文字小文字は区別されないのでぶつかりそう・・・)
PS /> Import-Module Nutanix.Prism.PS.Cmds -Prefix Ntnx
コマンドレットは、下記のようにインポートされました。
PS /> Get-Command -Module Nutanix.* | Sort-Object Module,Noun,Verb | select Name,Module Name Module ---- ------ New-NutanixObject Nutanix.Prism.Common Connect-PrismCentral Nutanix.Prism.Common Disconnect-PrismCentral Nutanix.Prism.Common Get-NtnxCluster Nutanix.Prism.PS.Cmds Get-NtnxImage Nutanix.Prism.PS.Cmds New-NtnxImage Nutanix.Prism.PS.Cmds Remove-NtnxImage Nutanix.Prism.PS.Cmds Set-NtnxImage Nutanix.Prism.PS.Cmds Get-NtnxMetric Nutanix.Prism.PS.Cmds Get-NtnxNetwork Nutanix.Prism.PS.Cmds Get-NtnxStorageContainer Nutanix.Prism.PS.Cmds Get-NtnxTask Nutanix.Prism.PS.Cmds Wait-NtnxTask Nutanix.Prism.PS.Cmds Get-NtnxVM Nutanix.Prism.PS.Cmds New-NtnxVM Nutanix.Prism.PS.Cmds Remove-NtnxVM Nutanix.Prism.PS.Cmds Set-NtnxVM Nutanix.Prism.PS.Cmds Start-NtnxVM Nutanix.Prism.PS.Cmds Stop-NtnxVM Nutanix.Prism.PS.Cmds
Nutanix.Prism.PS.Cmds に含まれるコマンドレットの Noun(名詞)部分に、Ntnx が追加されています。
PS /> Get-Command -Module Nutanix.* | Group Noun | select Name,{$_.Group.Verb -join ","} Name $_.Group.Verb -join "," ---- ----------------------- NtnxCluster Get NtnxImage Get,New,Remove,Set NtnxMetric Get NtnxNetwork Get NtnxStorageContainer Get NtnxTask Get,Wait NtnxVM Get,New,Remove,Set,Start,Stop NutanixObject New PrismCentral Connect,Disconnect
これで、下記のように PowerCLI(PowerCLI)と Nutanix.Cli(Get-NtnxCluster)をわかりやすく使い分けられるようになりました。
PS /> Get-Cluster Get-Cluster: 3/4/2022 2:06:24 PM Get-Cluster You are not currently connected to any servers. Please connect first using a Connect cmdlet. PS /> Get-NtnxCluster Get-NtnxCluster: Not connected to any Prism Central. Please connect to Prism Central host and try again.
Prism Central に接続すると・・・
PS /> $cred = (Get-Credential) PowerShell credential request Enter your credentials. User: admin Password for user admin: ************* PS /> Connect-PrismCentral -Server lab-nxpc-01.go-lab.jp -AcceptInvalidSSLCerts -Credential $cred Server : lab-nxpc-01.go-lab.jp Version : pc.2020.09.16 UserName : admin AcceptInvalidSSLCerts : True ForcedConnection : False
Get-NtnxCluster でクラスタ情報がちゃんと取得できます。
PS /> Get-NtnxCluster State : COMPLETE ClusterName : lab-nxce-01 UUID : 0005bcc8-1ddc-c8ba-37dd-1c697a630d37 PC_Name : lab-nxpc-01 PC_UUID : 211b10a1-5651-4532-b5e7-9b4200af2caf PC_Host : lab-nxpc-01.go-lab.jp
ハイパーバイザが AHV のみの Nutanix 環境では Nutanix.Cli だけをインストールした PowerShell 実行環境を用意すればよいですが、ESXi 環境の Nutanix 環境では PowerCLI も併用すると思うので、コマンドレットに Prefix を指定すると便利かなと思いました。
以上。