はじめに
- AnsibleからWindows Serverの自動化を行う。その際のセットアップ手順を実際に実行してみたのでまとめておく。
- なお、筆者の環境ではAnsibleサーバは既にセットアップ済みのためAnsibleのインストール手順は割愛する。
- また、あらかじめターゲットサーバにWindows Server 2022をインストールしておく必要がある。
公式ドキュメント
- 基本的に以下のドキュメントに従って設定を行う。
- Windows ホストのセットアップ — Ansible Documentation
環境
- Ansibleサーバ
- OS: AlmaLinux 9.4
- Ansible: 2.15.12
- Python: 3.9.18
- pywinrm: 0.5.0
- ターゲットサーバ
- OS: Windows Server 2022
WinRMの設定
- AnsibleからWindowsホストに接続するために必要なWinRMの設定を行う。
- 設定には公式ドキュメントに記載されているスクリプトを実行するが、筆者が実行しようとした際、
$url
のリンクが404 not foundになっていた。 - 削除された理由は不明だが、設定に必要な
ConfigureRemotingForAnsible.ps1
が最後に存在したstable-2.112
ブランチのものを使用することにする。
PS > $url = "https://raw.githubusercontent.com/ansible/ansible/stable-2.12/examples/scripts/ConfigureRemotingForAnsible.ps1"
PS > $file = "$env:temp\ConfigureRemotingForAnsible.ps1"
PS > (New-Object -TypeName System.Net.WebClient).DownloadFile($url, $file)
PS > powershell.exe -ExecutionPolicy ByPass -File $file
WinRMリスナーの確認
- 上記のスクリプトにより、HTTP経由のポート
5985
、HTTPS経由のポート5986
で要求をリッスンしていることを確認する。
PS > winrm enumerate winrm/config/Listener
Listener
Address = *
Transport = HTTP
Port = 5985
Hostname
Enabled = true
URLPrefix = wsman
CertificateThumbprint
ListeningOn = 10.0.2.15, 127.0.0.1, 192.168.56.155, ::1, fe80::5efe:10.0.2.15%6, fe80::5efe:192.168.56.155%8, fe80:ffff:ffff:fffe%2, fe80::203d:7d97:c2ed:ec78%3, fe80::e8ea:d765:2c69:7756%7
Listener
Address = *
Transport = HTTPS
Port = 5986
Hostname = SERVER2016
Enabled = true
URLPrefix = wsman
CertificateThumbprint = E6CDAA82EEAF2ECE8546E05DB7F3E01AA47D76CE
ListeningOn = 10.0.2.15, 127.0.0.1, 192.168.56.155, ::1, fe80::5efe:10.0.2.15%6, fe80::5efe:192.168.56.155%8, fe80:ffff:ffff:fffe%2, fe80::203d:7d97:c2ed:ec78%3, fe80::e8ea:d765:2c69:7756%7
pywinrmのインストール
- AnsibleサーバーにWinRMを操作するための
pywinrm
をインストールする。
$ pip install pywinrm
$ grep pywinrm
pywinrm 0.5.0
インベントリファイル作成
- インベントリファイルにWindows Serverについて定義する。
[windows]
<Windows ServerのIPアドレス> ansible_user=<Windows Serverのユーザ名> ansible_password=<Windows Serverのパスワード>
[windows:vars]
ansible_port=5985
ansible_connection=winrm
ansible_winrm_transport=ntlm
ansible_winrm_server_cert_validation=ignore
実行
- 今回は"pong"を返してくれるだけのwin_pingモジュールを実行する。
$ ansible windows -i hosts -m win_ping
SUCCESS => {
"changed": false,
"ping": "pong"
}
Windowsモジュール
- 今回は
win_ping
モジュールを試したが、以下のドキュメントから様々なモジュールを参照できる。 - Windows modules — Ansible Documentation