ライトウェルブログ

2019/03/07Windows Server 2016の構築手順を自動化する その2

こんにちは!

ライトウェルの山田(ペンネーム)博之です。

Windows7のサポート終了まで1年を切りました。皆さんの会社ではWindows7の端末がどれくらい残っていますか?

あと1年以内にアップデートを終えないといけないと思うと気が遠くなりますね。。

さて、AnsibleによるWindows設定の自動化について、Ansible?なにそれ?美味しいの?と思っている方もいらっしゃるかと思いますので、

まずはAnsibleの基本的なおさらいと実際に操作ができるところまでをお伝えしたいと思います。

Windows 側 事前設定

  • 前提
    ・Windows OSがインストールされていること
    ・IPアドレスの設定が完了していること
    ・アンチウイルスソフトなどで、ポート5986が制御されていないこと
  • WinRMの有効化
    AnsibleとWindowsはWinRMのポートを使用して、通信します。
    Windows側で必要なWinRMの設定をまとめたサンプルスクリプトがGithub上で提供されています。
    このサンプルスクリプトをダウンロードしたら、適当なフォルダにスクリプトを格納して実行します。ここではC:\tempに格納してます。

PS C:\Users\Administrator> cd c:\temp
PS C:\temp> .\ConfigureRemotingForAnsible.ps1

サンプルスクリプトで実行している処理をまとめると下記を実行しています
・新しくSSL自己証明書の発行
・Windows Firewall ルールにWinRM(tcp5986)の許可
・WindowsサービスのWinRMを自動起動
・PowerShellのリモート実行の有効化

これでWindows側の準備は完了です。

 

Ansibleの環境準備

  • OSの準備
    Linux系のOSを用意してください。ここでは、CentOS7.3を使用しております。

 

  • python-pipのインストール
    Ansibleではpythonのライブラリを多く使用しており、pythonのパッケージをいくつか追加することがあるためpythonのパッケージを管理するpipというユーティリティを事前にyumでインストールします。
    python-pipは、CentOSのデフォルトのレポジトリにはないようです。代わりにepelレポジトリから導入することができます。yumでepelレポジトリを追加しましょう。
    epelが追加出来たら、epel上でpython-pipは”python2-pip”という名前で提供されていますので、yumでインストールします。 

    [root@hostname ~]# yum install epel-release
    [root@hostname ~]# yum install python2-pip

 

  • AnsibleのインストールAnsibleのインストールは、yum ・ pip いずれでも可能です。
    お好きなほうでインストールして下さい。
    【yum】
    yum install ansible
    【pip】
    pip install ansible

 

  • Ansibleのインストール後の確認
    インストールできたことを確認しましょう。 

    [root@Ansible01 ~]# ansible --version
    ansible 2.7.10
      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  4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
    [root@Ansible01 ~]#

 

  • pythoneパッケージの追加
    AnsibleからWindowsを操作するには、pythonパッケージpywinrmの導入が必要になります。 

    [root@hostname~]# pip install pywinrm

     

以上、Ansible側の環境準備です。

 

Ansible側の設定

ここでAnsibleの構成要素をおさらいしましょう。
構成要素は多数ありますが、代表的なものを6つあげます。

今回はPlaybookとInventoryの2つを作成して、Windowsを操作してみましょう。

 

  • Inventoryファイルの作成
    Ansibleから操作対象への接続情報として下記の様な形でIPアドレス、ユーザーパスワードなどを記載します。※#の右のコメントは実際には、入れないで下さい。ここでわわかりやすくするために記載しています。
    コメントを入れる場合は、前後の行に入れてください。
#Inventory
[windows]                                      #  操作対象グループ
192.168.123.123                                #  操作対象ホスト1
192.168.123.124                                #  操作対象ホスト2

[windows:vars]                                 #  操作対象グループの変数
ansible_user=Administrator                     #  接続する管理者ユーザー名
ansible_password=Password123                   #  接続する管理者パスワード
ansible_connection=winrm                       #  接続プロトコル
ansible_port=5986                              #  winrmで使用するポート
ansible_winrm_server_cert_validation=ignore    #  HTTPSの証明書の検証しない

 

ここでPlaybookを。。。

その前にAnsibleにはPlaybookを書かずにad-hocで実行が可能なansibleコマンドと言う便利なものがございます。

Inventoryファイルに記載された情報で正しく接続できるかansibleコマンドを使って接続確認してみましょう!

[root@hostname~]# ansible windows -m win_ping -i inventory
192.168.123.123| SUCCESS => {
“changed”: false,
“ping”: “pong”
}
192.168.123.124| SUCCESS => {
“changed”: false,
“ping”: “pong”
}

Inventoryに記載したホストについてSUCCESSになっていれば、接続成功です。
余談ですが、ansibleコマンドの構文は下記になります。

ansible <接続ホスト or グループ> -m <モジュール名> -i <Inventoryファイル名>
例では。win_pingと呼ばれるwindowsのansibleとの接続確認の為のモジュールを使用してInventoryファイルで定義したwindowsというグループに対して接続確認を行っています。
通常OSのpingコマンドとは異なり、IPアドレスの疎通だけではSUCCESSにはなりません。
Inventoryに記載されたユーザーパスワード情報を使ってWinRMでの接続ができるかを確認しています。

それでは接続確認ができたので以下のような簡単なPlaybookを作成してみましょう。

#playbook.yml
---
- hosts: windows
  tasks:
    - win_user:
        name: ansible_admin
        password: hogehoge123!
        state: present
        groups:
          - Administrators
          - Users

 

になります。
では実行してみましょう。

[root@hostname~]# ansible-playbook -i inventory playbook.yml
PLAY [windows] *****************************************************************
TASK [Gathering Facts] ********************************************************
ok: [192.168.123.123]
ok: [192.168.123.124]
TASK [win_user] ****************************************************************
changed: [192.168.123.123]
changed: [192.168.123.124]
PLAY RECAP*********************************************************************
192.168.123.123 : ok=2 changed=1 unreachable=0 failed=0
192.168.123.124 : ok=2 changed=1 unreachable=0 failed=0

最後の出力結果がfailedになっていなければ成功です。
実際にユーザーが追加されたか、Windows上から確認してみましょう!!


ansible_adminユーザーが追加されたことが確認できますね!

指定したグループが追加されていることも確認できます!

「これでユーザ・グループ追加の設定がたくさんあっても怖いものなしですね」

ということで、今回のここまで!!

次回はvarsの使い方や実際のWindowsの詳細な設定を詰めていきますよ~

トップページに戻る