ホーム > Ansible Tower・AWX リファレンス
Ansible(AWX・Tower)環境で、Windowsホストに対して、引数を渡しつつVBScriptを実行する方法を解説します。
Ansible(AWX・Tower)環境で、Windowsホストに接続する場合は、WinRM導入が必須になります。
まだ導入していない方は下記を参考に導入してみて下さい。
はじめに
以前、Ansibleを使用して、Windows機器でVBScriptを実行する方法を解説しました。
今回は、引数を渡しつつスクリプトを実行する方法を解説したいと思います。
また、AnsibleでWindowsホストに対して、VBScriptファイルを実行する方法ですが、
以下の2パターンの方法を説明します。
- コントロールノードに格納したスクリプトを実行する方法
- ターゲットノードに格納したスクリプトを実行する方法
事前準備(共通)
事前準備については、以前解説した内容とほとんど同じなので、以下を参考にして下さい。
また、テンプレート追加変数には、スクリプトに渡す引数として、以下を設定しています。
--- args1: "テスト文字列"
VBScriptファイルの作成
ここでは、実行するVBScriptファイルを作成します。
今回は、VBScriptが実行されたことを確認したいので、ファイルシステムオブジェクトを使用して、ファイルを出力するスクリプトを作成します。
また、引数が渡されたことを確認したいので、引数として渡された文字列をそのままテキストファイルに出力する処理としています。
ファイル名は「引数情報出力.vbs」としました。
Option Explicit ' 出力ファイル Const LOG_FILE = "C:\Workspace\log.txt" Dim fso, file ' ファイルシステムオブジェクトの作成 Set fso = CreateObject("Scripting.FileSystemObject") ' テキストファイルのオープン(追記モード) Set file = fso.OpenTextFile(LOG_FILE, 8, True) ' 引数情報を出力 file.WriteLine(WScript.Arguments(0)) ' テキストファイルのクローズ file.Close ' ファイルシステムオブジェクトの破棄 Set fso = Nothing
下記では、VBScriptの基本から応用までを解説しています。
こちらを参考に、様々なスクリプトを組んでみて下さい。
AWXで実行するプレイブックの作成
ここでは、実行するプレイブックを作成します。
VBScriptを実行するだけの、簡単なプレイブックですが、
格納先がコントロールノードかターゲットノードのどちらかで、
記述内容が少し異なるので、それぞれ説明します。
コントロールノードに格納するスクリプトを実行する場合
---
- hosts: all
gather_facts: False
tasks:
- name: VBScriptの実行
script: "./vbs/引数情報出力.vbs {{ args1 }}"
ターゲットノードに格納するスクリプトを実行する場合
---
- hosts: all
gather_facts: False
tasks:
- name: VBScriptの実行
win_shell: "cscript /nologo C:\\Workspace\\引数情報出力.vbs {{ args1 }}"
実行結果
プレイブックの実行結果です。
コントロールノードに格納したスクリプトを実行した場合
Using /etc/ansible/ansible.cfg as config file
SSH password:
PLAY [all] *********************************************************************
TASK [VBScriptの実行 *************************************************************
changed: [192.168.70.200] => {"changed": true, "rc": 0, "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
PLAY RECAP *********************************************************************
192.168.70.200 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ターゲットノードに格納したスクリプトを実行した場合
Using /etc/ansible/ansible.cfg as config file
SSH password:
PLAY [all] *********************************************************************
TASK [VBScriptの実行] *************************************************************
changed: [192.168.70.200] => {"changed": true, "cmd": "cscript /nologo C:\\\\Workspace\\\\引数情報出力.vbs テスト文字列", "delta": "0:00:00.453295", "end": "2023-03-31 12:05:17.162241", "rc": 0, "start": "2023-03-31 12:05:16.708945", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
PLAY RECAP *********************************************************************
192.168.70.200 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
以下のように、VBScriptに記述したファイル「C:\Workspace\log.txt」が作成され、
そのファイルに引数で渡した文字列が出力されていれば、VBScriptが正しく実行されています。
(例では、「テスト文字列」という文字列が出力されます)
*本記事のサンプルを実行した場合は、コントロールノード、ターゲットノードに関わらず、以下のようにログファイルが作成されます。
Windowsホストでバッチファイルを実行する
バッチファイルを実行する場合は、以下を参考にして下さい。
WindowsホストでPowerShellを実行する
PowerShellを実行する場合は、以下を参考にして下さい。
上手く動かない場合
想定通りに動かない場合、以下を参考にしてみて下さい。
コメント