ホーム > Ansible Tower・AWX リファレンス
Ansible(AWX/Tower)環境で、Windowsホストに対して、PowerShellスクリプトを実行する方法を解説します。
Ansible(AWX/Tower)環境で、Windowsホストに接続する場合は、WinRM導入が必須になります。
まだ導入していない方は下記を参考に導入してみて下さい。
はじめに
AnsibleでWindowsホストに対して、PowerShellスクリプトを実行する方法ですが、
以下の2パターンの方法を説明します。
- コントロールノードに格納したスクリプトを実行する方法
- ターゲットノードに格納したスクリプトを実行する方法
事前準備(共通)
まずは、事前準備として、以下の作業を行います。
(*Ansibleには、コマンドライン版のAnsibleの他、GUIで使用出来るAWX[Tower(有償版)]がありますが、今回はAnsible AWXを使用します。以降、AWXと表記して進めて行きます)
- Windowsで実行するPowerShellスクリプトの作成
- AWXで実行するプレイブックの作成
- AWX各種定義の設定
- 認証情報
- インベントリー
- テンプレート
AWXの各種定義の設定
ここでは、AWXの各種定義について説明します。
認証情報
今回実行する認証情報の設定になります。
- 名前:Windows
- 認証情報タイプ:マシン
- ユーザー名:Windowsにログインするためのユーザー
- パスワード:ユーザー名に対応したパスワード
インベントリー
今回実行するインベントリーの設定ですが、AnsibleでWindows機器を操作するための最小限の設定しか行っていませんので、以下を参考にして下さい。
テンプレート
今回実行するテンプレートの設定になります。
テンプレートの設定は任意なので、下記と異なる値を設定しても問題ありません。
- 名前:7001 Exec PS1 Script
- 説明:PowerShellスクリプトの実行
- ジョブタイプ:実行
- インベントリー:Syutaku Inventory
- プロジェクト:Syutaku Project
- PLAYBOOK:PBW002_Exec_PS1_Script.yml
- 詳細:1(Verbose)
PowerShellスクリプトの作成
ここでは、実行するPowerShellスクリプトを作成します。
格納先がコントロールノードかターゲットノードのどちらかで、
記述内容が少し異なるので、それぞれ説明します。
コントロールノードに格納するPowerShellスクリプトの作成
今回は、PowerShellスクリプトが実行されたことを確認したいので、リダイレクトでファイルを出力するスクリプトを作成します。
echo PowerShell実行確認 > C:\Workspace\WinRM_Test.log
文字列「PowerShell実行確認」を「WinRM_Test.log」として、「C:\Workspace」に出力する簡単なスクリプトになります。
作成したスクリプトは、コントロールノードであるLinux機器のプロジェクト管理ディレクトリに「powershell」ディレクトリを作成して配置して下さい。
ターゲットノードに格納するPowerShellスクリプトの作成
今回は、PowerShellスクリプトが実行されたことを確認したいので、リダイレクトでファイルを出力するスクリプトを作成します。
echo PowerShell実行確認 > $PSScriptRoot\WinRM_Test.log
文字列「PowerShell実行確認」を「WinRM_Test.log」として、カレントディレクトリに出力する簡単なスクリプトになります。
作成したスクリプトは、接続先(ターゲットノード)のWindows端末内に配置して下さい。
AWXで実行するプレイブックの作成
ここでは、実行するプレイブックを作成します。
PowerShellスクリプトを実行するだけの、簡単なプレイブックですが、
格納先がコントロールノードかターゲットノードのどちらかで、
記述内容が少し異なるので、それぞれ説明します。
コントロールノードに格納するスクリプトを実行する場合
---
- hosts: all
gather_facts: False
tasks:
- name: PowerShellスクリプトの実行
script: ./powershell/WinRM_Test.ps1
ターゲットノードに格納するスクリプトを実行する場合
---
- hosts: all
gather_facts: False
tasks:
- name: PowerShellスクリプトの実行
win_shell: "C:\\Workspace\\WinRM_Test.ps1"
実行結果
プレイブックの実行結果です。
コントロールノードに格納したスクリプトを実行した場合
Using /etc/ansible/ansible.cfg as config file
SSH password:
PLAY [all] *********************************************************************
TASK [PowerShellスクリプトの実行] ******************************************************
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 [PowerShellスクリプトの実行] ******************************************************
changed: [192.168.70.200] => {"changed": true, "cmd": "C:\\\\Workspace\\\\WinRM_Test.ps1", "delta": "0:00:00.374109", "end": "2023-02-26 06:23:06.459645", "rc": 0, "start": "2023-02-26 06:23:06.085536", "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
以下のように、PowerShellスクリプトを格納したフォルダに「WinRM_Test.log」が作成されていれば、PowerShellスクリプトが正しく実行されています。
*本記事のサンプルを実行した場合は、コントロールノード、ターゲットノードに関わらず、以下のようにログファイルが作成されます。
Windowsホストでバッチファイルを実行する
バッチファイルを実行する場合は、以下を参考にして下さい。
上手く動かない場合
想定通りに動かない場合、以下を参考にしてみて下さい。
コメント