はじめに
別記事の『Ansible入門者向けガイド(CentOS編)』では『 CentOS 』をAnsibleのターゲットにしましたが、今回は『Windows』を対象に、モジュールやWindowsの接続方法、『CentOS』と異なる部分を中心に記事にまとめました。
目次
- Ansibleを操作するサーバを準備(以降コントロールノードと呼ぶ)
- 構築対象となるサーバを準備(以降ターゲットノードと呼ぶ)
- コントロールノードにansibleをインストール
- WinRMの設定(ターゲットノードの設定)
- Ansible疎通確認
- ターゲットノードで設定を行い内容を手作業で確認
- playbook作成
- playbook実行
- ターゲットノードでインストールできていることを確認
- おわりに
項番1,2の手順は様々な環境が存在するため、省略いたします。
OSがインストールされており、ネットワークの設定済みの環境を使用します。
使用環境
- CentOS7.7(コントロールノード)
- Windows_Server_2016(ターゲットノード)
- Ansible 2.9.6
- Python 2.7.5
3. コントロールノードにAnsibleをインストール
インストールの手順は以下です。 (yum を使用したインストール方法)
[root@Kensyo ~]# yum install epel-release -y
[root@Kensyo ~]# yum install ansible
[root@Kensyo ~]# ansible --version
ansible 2.9.6
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
※Ansibleの特定のバージョンをインストールしたい場合は『pip』を使用しインストールします。
[root@Kensyo ~]# yum install epel-release -y
[root@Kensyo ~]# yum install python-pip
[root@Kensyo ~]# pip install ansible==2.4.0
[root@Kensyo ~]# ansible --version
ansible 2.4.0.0
config file = None
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Aug 7 2019, 00:51:29) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
また、『 virtualenv 』を使用してAnsibleのバージョンを複数試すことができます。
例えば、書籍「Ansible 実践ガイド3版」には『virtualenv』を使用した記載があります。
4. WinRmの設定(ターゲットノードの設定)
まず画面左下のWindowsマークを左クリックします。
『Windows PowerShell』を右クリックします。
『その他』から『管理者として実行』をクリックします。
以下のようにプロンプトが表示されます。
PS C:\Users\Administrator>
任意のドライブで作業用ディレクトリを作成します。
PS C:\Users\Administrator> mkdir C:\work
PS C:\Users\Administrator> cd C:\work
PS C:\work>
セットアップスクリプトをダウンロードします。
PS C:\work> Invoke-WebRequest -Uri https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 -OutFile ConfigureRemotingForAnsible.ps1
ネットワークプロファイルの『NetworkCategory』設定を確認します。
デフォルトでは『Public』になっています。
PS C:\work> Get-NetConnectionProfile -IPv4Connectivity Internet
Name : ネットワーク
InterfaceAlias : Ethernet0
InterfaceIndex : 9
NetworkCategory : Public
IPv4Connectivity : Internet
IPv6Connectivity : NoTraffic
『public』の状態で実行するには『-SkipNetworkProfileCheck』を記載し実行します。以下のように表示されていれば問題ありません。
PS C:\work> powershell -ExecutionPolicy RemoteSigned .\ConfigureRemotingForAnsible.ps1 -SkipNetworkProfileCheck
Self-signed SSL certificate generated; thumbprint: C19E9402046B5F9C99666B6C3CDEF5CEAE155F31
wxf : http://schemas.xmlsoap.org/ws/2004/09/transfer
a : http://schemas.xmlsoap.org/ws/2004/08/addressing
w : http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd
lang : ja-JP
Address : http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous
ReferenceParameters : ReferenceParameters
OK
5. Ansibleの疎通確認
コントロールノードとターゲットノードの疎通を行えるよう設定します。
pipコマンドを使用できるようにします。
[root@Kensyo etc]# yum install -y python-pip
WinRMのモジュールをインストールします。
[root@Kensyo etc]# pip install pywinrm
疎通確認をするためにまずインベントリファイルを作成する必要があります。
インベントリとは、ターゲットノードの接続情報を記載したファイルです。
[root@Kensyo ~]# cd /etc/ansible/
[root@Kensyo ansible]# ls
ansible.cfg hosts roles
インベントリファイル『hosts』がデフォルトで存在しますので接続情報を記載します。記載内容を以下とします。
1行目、[〇〇]でグループ名を設定します。今回[target]と命名しましたが、各自分かりやすいものを設定してください。
2行目、ターゲットノードのホスト名を記載しスペースを空け『 ansible_host=”IP アドレス” 』を記載します。
『[target:vars]』グループ変数を指定します。
『ansible_user=Administrator』コントロールノードのユーザを指定。
『ansible_port=5986』接続portは5986です。基本的には変更しなくて構いません。
『ansible_connection=winrm』Connection Pluginをwinrmに指定します。
『ansible_winrm_server_cert_validation=ignore』SSL証明書検証の無効化をします
[root@Kensyo ansible]# vi hosts
[target]
WIN-Q2VNSHQHMBR ansible_host=192.168.181.102
[target:vars]
ansible_user=Administrator
ansible_port= 5986
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
ansibleコマンドを実行し疎通確認を行います 。コマンド実行後、パスワードを入力してください。
[root@Kensyo ansible]# ansible all -i hosts -m win_ping -k
SSH password:
WIN-Q2VNSHQHMBR | SUCCESS => {
"changed": false,
"ping": "pong"
}
6. ターゲットノードで設定を行い内容を手作業で確認
操作前にスナップショット等により、手作業確認後、設定前の状態に復元できるようにしてください。
左下のスタートメニューからサーバーマネージャを起動します。
サーバーマネージャ画面右上『管理』から『役割と機能の追加』をクリックします。
『役割と機能の追加ウィザード』が表示されます。
『 開始する前に 』の内容は特に変更せず『次へ』をクリックします。
『 インストールの種類の選択の内容 』は特に変更せず 『次へ』をクリックします。
『 対象サーバの選択の内容 』は特に変更せず『次へ』をクリックします。
『サーバの役割の選択』は特に変更せず『次へ』をクリックします。
『機能の選択』で『SNMPサービス』にチェックを付けます。『管理ツールを含める』にチェックをし『機能の追加』をクリックします。『次へ』をクリックします。
『 インストールオプションの確認 』は特に変更せず『インストール』をクリックします。
インストール後『ツール』から『サービス』をクリックし、『SNMP Service』があることを確認したら作業は完了になりますので、環境を設定前に戻してください。
7. playbook作成
まず、タスクから作成します。
『win_feature』モジュールを使用します。Windows用のモジュールは頭に『win_』が記載されています。
『win_feature:』の下の『name:』にはインストールする、役割と機能の名称を英語表記で入力します。役割と機能の名称については以下にまとまっています。
http://wiki.yottun8.com/Windows%20Server%202016%20%E5%BD%B9%E5%89%B2%E3%81%A8%E6%A9%9F%E8%83%BD.html?Windows+Server+2016+%E5%BD%B9%E5%89%B2%E3%81%A8%E6%A9%9F%E8%83%BD
『state』でインストールもしくはアンインストールを設定します。
[root@Kensyo roles]# mkdir feature
[root@Kensyo roles]# cd feature/
[root@Kensyo feature]# ls
[root@Kensyo feature]# mkdir tasks
[root@Kensyo feature]# cd tasks/
[root@Kensyo tasks]# vi install.yml
---
- name: snmpサービスをインストールします。
win_feature:
name: SNMP-Service
state: present
include_management_tools: yes
main.ymlを作成します。
[root@Kensyo tasks]# vi main.yml
---
- import_tasks: install.yml
site.ymlを作成します。
[root@Kensyo ansible]# vi site.yml
---
- hosts: all
gather_facts: false
roles:
- feature
8. playbookの実行
作成したplaybookを実行します。
[root@Kensyo ansible]# ansible-playbook site.yml -i hosts
TASK [feature : snmpサービスをインストールします。] ***********************************************************
changed: [WIN-Q2VNSHQHMBR]
PLAY RECAP *************************************************************************************
WIN-Q2VNSHQHMBR : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
9. ターゲットノードでインストールできていることを確認
『サーバマネージャー』から『役割と機能の追加』をクリックします。
『機能の選択』まで進み『SNMPサービス』にチェックが入っていることを確認します。また、管理ツールの『SNMPツール』もチェックが入っていることを確認します。
『サーバマネージャー』から 『ツール』をクリックし『サービス』から『SNMP Service』があることも確認出来たら成功です。
10.おわりに
本記事で使用した『win_feature』モジュール以外にも、Ansible 2.9では約100種類ほどWindowsモジュールがあります。
参考URL:https://docs.ansible.com/ansible/latest/modules/list_of_windows_modules.html