NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

Nutanix PowerShell Cmdlets v2.0 でコマンドレットの Prefix を設定してみる。

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 両方のモジュールがインポートされました。

f:id:gowatana:20220304234648p:plain

この状態で 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 を指定すると便利かなと思いました。

以上。

©2021 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。