Nutanix PowerShell Cmdlets v2.0 を、Docker / Podman などで利用できるコンテナにしてみます。
今回の内容です。
今回の環境
Nutanix と Podman 環境は、下記投稿のものを利用しています。今回は Podman を利用していますが、Docker の場合はコマンドラインを podman → docker に変更すればそのまま実行できるはずです。
コンテナ イメージの作成
Dockerfile
今回は、下記のような Dockerfile を作成しました。
- PowerShell Core 7.2.1
- Nutanix.Cli 2.0.1
- PowerShell のプロンプトを「pwsh-nutanix>」に変更
- PowerShell(pwsh)起動時に Nutanix.Cli モジュールをインポート
Podman でのビルド
podman でれば、下記のようにコンテナ イメージをビルドします。Docker の場合も、「docker build」で同じオプション指定でビルドできます。
[root@ol8-vm-01 ~]# podman build --tag pwsh-nutanix:v2.0.1 .
イメージが作成できました。
[root@ol8-vm-01 ~]# podman images REPOSITORY TAG IMAGE ID CREATED SIZE localhost/pwsh-nutanix v2.0.1 5daf7425c0b4 About a minute ago 635 MB mcr.microsoft.com/powershell 7.2.1-centos-7-20220223 4a604f24b373 9 days ago 629 MB
コンテナの起動
作成したコンテナイメージから、コンテナを起動してみます。
対話モードでの実行
コンテナを起動すると、Nutanix.Cli が読み込まれた状態で PowerShell(pwsh)のコンソールが起動します。例では podman run で起動していますが、docker でも同様のオプションで起動できます。
[root@ol8-vm-01 ~]# podman run -it --rm pwsh-nutanix:v2.0.1 Welcome to Nutanix PowerShell Commands .,,,,,,,. ,#########. .,,,,,,,. ,########. .,,,,,,,. ,#######. .,,,,,,,. ,#####. .,,,,,,,. ,##. .,,,,,,. .,,,,,,,. ,#. .,,,,,,,. ,#####. .,,,,,,,. ,#######. .,,,,,,,. ,########. .,,,,,,,. ,#########. pwsh-nutanix>
スクリプトの実行
あらかじめコンテナ ホスト側にスクリプトを用意しておき、それをコンテナ内部で実行してみます。
まず、scripts というディレクトリを作成してスクリプトを配置しておきます。
[root@ol8-vm-01 ~]# ls ./scripts/ get_poweron_vm_1.ps1 get_poweron_vm_2.ps1
今回は、下記のようなスクリプトを作成しておきます。
get_poweron_vm_1.ps1
get_poweron_vm_2.ps1
※get_poweron_vm_1.ps1 の出力を Out-Null しただけです。
下記のように「-v」オプションで、scripts ディレクトリをコンテナの /scripts にマウントします。
[root@ol8-vm-01 ~]# podman run -it --rm -v $(pwd)/scripts:/scripts:Z pwsh-nutanix:v2.0.1 Welcome to Nutanix PowerShell Commands .,,,,,,,. ,#########. .,,,,,,,. ,########. .,,,,,,,. ,#######. .,,,,,,,. ,#####. .,,,,,,,. ,##. .,,,,,,. .,,,,,,,. ,#. .,,,,,,,. ,#####. .,,,,,,,. ,#######. .,,,,,,,. ,########. .,,,,,,,. ,#########. pwsh-nutanix> pwsh-nutanix> df -h /scripts Filesystem Size Used Avail Use% Mounted on /dev/mapper/ol-root 17G 3.0G 15G 18% /scripts pwsh-nutanix> ls /scripts get_poweron_vm_1.ps1 get_poweron_vm_2.ps1
これで、コンテナ ホスト OS 側のスクリプトを、コンテナ内部で実行できるようになります。
pwsh-nutanix> ./scripts/get_poweron_vm_1.ps1 Server : lab-nxpc-01.go-lab.jp Version : pc.2020.09.16 UserName : admin AcceptInvalidSSLCerts : True ForcedConnection : False vmName : NTNX-624676c4-A-CVM pcHostName : lab-nxpc-01.go-lab.jp vmName : lab-nxpc-01 pcHostName : lab-nxpc-01.go-lab.jp vmName : ol8-vm-01 pcHostName : lab-nxpc-01.go-lab.jp
下記のように、コンテナ起動と同時に実行することもできます。
この場合は pwsh 起動時に Nutanix.Cli が読み込まれないので、Import-Module Nutanix.Cli をスクリプトの冒頭に記載してあります。
[root@ol8-vm-01 ~]# podman run -it --rm -v $(pwd)/scripts:/scripts:Z pwsh-nutanix:v2.0.1 pwsh -c ./scripts/get_poweron_vm_1.ps1 Welcome to Nutanix PowerShell Commands .,,,,,,,. ,#########. .,,,,,,,. ,########. .,,,,,,,. ,#######. .,,,,,,,. ,#####. .,,,,,,,. ,##. .,,,,,,. .,,,,,,,. ,#. .,,,,,,,. ,#####. .,,,,,,,. ,#######. .,,,,,,,. ,########. .,,,,,,,. ,#########. Server : lab-nxpc-01.go-lab.jp Version : pc.2020.09.16 UserName : admin AcceptInvalidSSLCerts : True ForcedConnection : False vmName : NTNX-624676c4-A-CVM pcHostName : lab-nxpc-01.go-lab.jp vmName : lab-nxpc-01 pcHostName : lab-nxpc-01.go-lab.jp vmName : ol8-vm-01 pcHostName : lab-nxpc-01.go-lab.jp [root@ol8-vm-01 ~]#
モジュールのインポートや Prism Central 接続時の出力は、Out-Null などで抑止できます。
[root@ol8-vm-01 ~]# podman run -it --rm -v $(pwd)/scripts:/scripts:Z pwsh-nutanix:v2.0.1 pwsh -c ./scripts/get_poweron_vm_2.ps1 vmName pcHostName ------ ---------- NTNX-624676c4-A-CVM lab-nxpc-01.go-lab.jp lab-nxpc-01 lab-nxpc-01.go-lab.jp ol8-vm-01 lab-nxpc-01.go-lab.jp [root@ol8-vm-01 ~]#
(おまけ)Docker Hub から実行
Docker Hub でもこのコンテナ イメージをビルドしてみました。
イメージ名を下記のように指定するとダウンロードできるはずです。
- gowatana/pwsh-nutanix
- gowatana/pwsh-nutanix:v2.0.1
[root@ol8-vm-01 ~]# podman run -it --rm gowatana/pwsh-nutanix Welcome to Nutanix PowerShell Commands .,,,,,,,. ,#########. .,,,,,,,. ,########. .,,,,,,,. ,#######. .,,,,,,,. ,#####. .,,,,,,,. ,##. .,,,,,,. .,,,,,,,. ,#. .,,,,,,,. ,#####. .,,,,,,,. ,#######. .,,,,,,,. ,########. .,,,,,,,. ,#########. pwsh-nutanix>
以上。