Ansibleでのwindowsマシンの構成管理の始め方を解説するよ
こんにちは、Ansibleを使うのは6ヶ月ぶりぐらいです、シゲルです。
企業内の基幹システムもクラウドファーストと言われている昨今ですが一般の企業ですとWindowsサーバをたくさん使ってたりします。
基幹系のエンタープライズシステムもクラウドも合うよねーと思いますが、特にActive Directoryについてはクラウド上にポコポコっとADサーバーと並べて立ててネットワーク越しに使って、壊れたらパパっと再構成というような考え方は有りなんじゃないかと思っています。
そこで「ansible 」と「windows」の組み合わせについて調べて見ることにしました。
最終的にはコマンド一発でAzure上でADサーバーを立てれるぐらいを目指してみます。(無理かもしれない、、)。今回はAnsibleを使ってwindowsマシンを構成管理する場合に必要な準備と簡単なサンプルを実行する方法を紹介していきます。
- 実施した環境のOSのバージョン、インストールした各ソフトウェアのバージョン
- Ansibleを使ってできるwindows内の設定項目
- 構成管理の対象のWindowsマシン側の準備
- Ansibleを実行するマシンでの必要なパッケージのインストール
- 構成管理の対象サーバーを示すhostsファイルの作成
実施した環境のOSのバージョン、インストールした各ソフトウェアのバージョン
構成管理の対象のWindowsマシン、構成管理、Ansibleを実行する側のWindowsマシン、両方のWindows Firewallは切ってあります。
構成管理の対象のWindowsマシン
- Windows2012R2
- Powershell4 (標準でインストールされています。)
構成管理、Ansibleを実行する側
自分の環境で一番手軽だった「Virtual box」+「vagrant」(CentOS)で実施しました。
vagrant(Ubuntu)やMacでも実施できると思います。ただ、Windows Subsystem for Linuxについては一度やってみたのですがansible 1.5.4しかapt-getでインストールできず、apt lineの変更方法がすぐわからなかったので断念しています。本当であれば操作する側も素のWindowsマシンだけで出来たらもう少し簡単だったかな~と思っています。
Ansibleを使ってできるwindows内の設定項目
Ansibleを使ってできるwindows内の設定項目については以下の通りです。
公式ドキュメント
https://www.ansible.com/windows
- Windowsマシンの情報を集める事ができる
- Windows MSI ファイルを使ってのインストール、アンインストール
- Windowsの機能の有効化または無効化
- サービスの起動停止、管理
- ローカルユーザ、グループの作成
- パッケージマネージャ「Chocolatey」をつかったWindowsアプリの管理
- Windowsアップデートのインストール、管理
- ファイルのリモートサイトへの送付
- PowerShell scriptsの実行
こうやって見てみると色々できそうですね。わーい。今回はサンプルとしてサービスの起動停止、管理としてWindows Updateのサービスを起動状態にする様にしていきます。
構成管理の対象のWindowsマシン側の準備
Ansibleを使ってWindowsを操作する場合は操作対象のWindowsマシンにWindows Remote Management(WinRM)のインストールが必要となります。
PowerShellを通じてインストールを行いますが、PowerShellの実行ポリシーを変更しておきます。
こちらが公式のインストールスクリプになります。
ansible/ConfigureRemotingForAnsible.ps1 at devel · ansible/ansible · GitHub
#Powershellの実行ポリシーの変更 PS C:> Get-ExecutionPolicy Restricted PS C:>Set-ExecutionPolicy RemoteSigned Execution Policy Chang PS C:> Get-ExecutionPolicy RemoteSigned #Ansible用WinRMモジュールのインストール PS C:\> mkdir C:\work PS C:\> cd .\work PS C:\work> Invoke-WebRequest -Uri https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRem otingForAnsible.ps1 -OutFile ConfigureRemotingForAnsible.ps1 PS C:\work> powershell.exe .\ConfigureRemotingForAnsible.ps1
Ansibleを実行するマシンでの必要なパッケージのインストール
#パッケージのインストール sudo yum -y install epee-release ※ansibleは標準リポジトリに無かったのでこちらを追加します。 sudo yum -y install python sudo yum -y install ansible sudo yum -y install python-pip sudo yum -y install git sudo pip install --upgrade pip sudo pip install pywinrm #バージョンの確認 $ ansible --version ansible 2.3.0.0 $ python -V Python 2.7.5
構成管理の対象サーバーを示すhostsファイルの作成
続いて、Ansibleで構成管理する対象の情報を示すhostsファイルを作ってきます。
対象のWindowsマシンをIPもしくはFQDNで記載します。次にansible_ssh_use、ansible_ssh_passにwindowsのユーザー名とパスワードを下記の様に書きます。
[windows] 192.168.0.221 [windows:vars] ansible_ssh_user=administrator ansible_ssh_pass=XXXXXXXXXX ansible_ssh_port=5986 ansible_connection=winrm ansible_winrm_server_cert_validation=ignore
続いてここまでの動作確認です。pingを打つとpongが帰ってくるいう、プログラミングでいうと「Hello, world!!」的なアレです。インベントリファイルは同じディレクトリに入っているhostsファイルを使っています。
$ ansible windows -i hosts -m win_ping192.168.0.221 | SUCCESS => { "changed": false, "ping": "pong" }