クラウドとマレーシアでぐだぐだする日記

いい感じのITエンジニアでいるためにアウトプットします

Ansibleでのwindowsマシンの構成管理の始め方を解説するよ

f:id:shige_shigetan:20170510180733j:plain

こんにちは、Ansibleを使うのは6ヶ月ぶりぐらいです、シゲルです。

企業内の基幹システムもクラウドファーストと言われている昨今ですが一般の企業ですとWindowsサーバをたくさん使ってたりします。

基幹系のエンタープライズシステムもクラウドも合うよねーと思いますが、特にActive Directoryについてはクラウド上にポコポコっとADサーバーと並べて立ててネットワーク越しに使って、壊れたらパパっと再構成というような考え方は有りなんじゃないかと思っています。
そこで「ansible 」と「windows」の組み合わせについて調べて見ることにしました。

最終的にはコマンド一発でAzure上でADサーバーを立てれるぐらいを目指してみます。(無理かもしれない、、)。今回はAnsibleを使ってwindowsマシンを構成管理する場合に必要な準備と簡単なサンプルを実行する方法を紹介していきます。

実施した環境の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を実行するマシンでの必要なパッケージのインストー

pythonとansiblleのインストー

 #パッケージのインストール
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"
}