Windowsに対してAnsibleを実行してみる
概要
Table of Contents
環境
- OS
- Windows Server 2022
- Ansible
- 2.15.9
Windowsへの接続要件を確認する
- AnsibleでWindowsへ接続するにはAnsible Community Documentation - Setting up a Windows Hostに記載の要件を満たす必要があります
- Microsoft の現在のサポートと延長サポートの対象となる Windows バージョンを一般的に管理できる
- Windows ホストに PowerShell 5.1 以降と少なくとも .NET 4.0 をインストールする必要がある
- WinRM リスナーを作成してアクティブ化する必要があります。
サポート対象のWindowsバージョン確認
- 製品およびサービスのライフサイクル情報の検索で確認できます
PowerShellのバージョン確認
- PowerShellのバージョンはPowerShellで下記のコマンドを実行することで確認できます
- エラーが出る場合はWinRMサービスが起動していないことが想定されるため、
Windows Remote Managementを起動しているかご確認ください
- エラーが出る場合はWinRMサービスが起動していないことが想定されるため、
PS C:\Users\Administrator> winrm enumerate winrm/config/Listener
Listener
Address = *
Transport = HTTP
Port = 5985
Hostname
Enabled = true
URLPrefix = wsman
CertificateThumbprint
ListeningOn = 127.0.0.1, 192.168.48.138, ::1, fe80::902f:4d50:638f:38e%14
.Net Frameworkのバージョン確認
- .Net FrameworkのバージョンはPowerShellでコマンドを実行することで確認ができます。
- インストールされているバージョンによって実行するコマンドが違うため、Lern Microsoft - インストールされている .NET Framework バージョンを確認するを確認し対象のコマンドを実行してください
PS C:\Users\Administrator> $release = Get-ItemPropertyValue -LiteralPath 'HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full' -Name Release
PS C:\Users\Administrator> switch ($release) {
>> { $_ -ge 533320 } { $version = '4.8.1 or later'; break }
>> { $_ -ge 528040 } { $version = '4.8'; break }
>> { $_ -ge 461808 } { $version = '4.7.2'; break }
>> { $_ -ge 461308 } { $version = '4.7.1'; break }
>> { $_ -ge 460798 } { $version = '4.7'; break }
>> { $_ -ge 394802 } { $version = '4.6.2'; break }
>> { $_ -ge 394254 } { $version = '4.6.1'; break }
>> { $_ -ge 393295 } { $version = '4.6'; break }
>> { $_ -ge 379893 } { $version = '4.5.2'; break }
>> { $_ -ge 378675 } { $version = '4.5.1'; break }
>> { $_ -ge 378389 } { $version = '4.5'; break }
>> default { $version = $null; break }
>> }
PS C:\Users\Administrator>
PS C:\Users\Administrator> if ($version) {
>> Write-Host -Object ".NET Framework Version: $version"
>> } else {
>> Write-Host -Object '.NET Framework Version 4.5 or later is not detected.'
>> }
.NET Framework Version: 4.8
AnsibleでWindowsに接続
winrmモジュールのインストール
- Windowsへ接続するためにAnsibleサーバに
pywinrmモジュールが必要のためインストールします
pip install pywinrm
インベントリの準備
- Windowsに接続するための情報を記載したインベントリを作成
--- all: hosts: Win2022: ansible_host: 192.168.48.138 ansible_user: Administrator ansible_password: P@ssword ansible_connection: winrm ansible_port: 5985 ansible_winrm_transport: ntlm win10: ansible_host: 192.168.48.139 ansible_user: hii ansible_password: hii ansible_connection: winrm ansible_port: 5985 ansible_winrm_transport: ntlm
Playbookの準備
- Windowsへの接続を確認するためのPlaybookを作成
--- - name: Windows connection test hosts: all gather_facts: false tasks: - name: Ping win_ping:
Playbook実行
ansible-playbook -i inventory.yml main.yml PLAY [Windows connection test] *********************************************************************************************************************************************************************** TASK [Ping] ****************************************************************************************************************************************************************************************** ok: [Win2022] ok: [win10] PLAY RECAP ******************************************************************************************************************************************************************************************* Win2022 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 win10 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Windows 10へ実行した際のエラー
- Windows 10に対して実行した際に下記のエラーが出力されました
fatal: [win10]: UNREACHABLE! => {
"changed": false,
"msg": "ntlm: the specified credentials were rejected by the server",
"unreachable": true
}
結果としてWindows 10のネットワーク接続の種類がPublicになっているとNGらしく、Privateに変更することで解消できました


さいごに
- httpでの接続ですが無事接続することができました。
- httpsで接続する場合は証明書を準備したりと手間はかかりますがより安全に接続することができるので要件に合わせて実施してみてください
リンク