ansibleのvmware_vm_shellモジュールでpowershellスクリプトを使用する方法


vmware_vm_shellを使ってPowershellのスクリプトをPlaybookに直書きできないか確認してみました。

環境

項目 バージョン 備考
vCenter 6.7.0
Windows Server 2016 Powershellを実行する対象ホスト

Powershellスクリプト

今回は簡単に検証するので以下のシンプルなPowershellスクリプトを使います。

上記のスクリプトは以下赤枠のNIC設定をするものです。
NICのオブジェクトからIPアドレスでフィルタリングして設定します。

これをvmware_vm_shellで実装すると次のようなPlaybookになります。

Playbook

スクリプトの内容はpowershellコマンドの引数で渡す必要があります。
そのため -Command オプションを使用しています。
-Command オプションの場合、普通に書くとエスケープが必要になるので、ここではスクリプトブロックを使用しています。
powershellスクリプトをそのまま貼り付けて使うことは出来ないので少し面倒ですがいくつかの部分でスクリプトブロックを使う必要が出てきます。
ここでは -filter オプションの引数やメソッドに渡す文字列を {} で囲むように改修しています。
Ansibleの変数も問題なく使うことができます。

実機で直接動作確認する場合は、以下のように実行してエラーが無ければPlaybook内でも実行できると思います。

以下は実際に動作確認した時の例です。

実行

実行して設定が反映されることを確認します。

最後に

「Powershellスクリプトを送り込んで実行する」というのは少し面倒ですが、直接Playbookに書けると楽になりますね(Playbook向けに改修が必要ですが) 🙂
WinRMが設定されていなかったりネットワークのリーチャビリティーが無くて簡単なpowershellスクリプトを実行したい時とかは便利かもしれません。
例えば、VMデプロイ後の初期設定とかですかね 🙂
これで、Playbookと一緒にPowershellスクリプトの管理も一緒に出来そうです!

それでは、みんなでハッピーオートメーション!

Leave a Reply

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください