Ansible2.0でWindows Serverを操作してみた

記事タイトルとURLをコピーする

こんにちは。福岡オフィスのtakadaです。
福岡の朝のテレビでは、毎日ソフトバンクホークスの宮崎キャンプの模様が流れます。
今朝は、ノースリーブに手袋で練習している柳田選手が紹介されており、あやかってノースリーブに軍手で出社しようと思ったのですが、捕まりそうなので、やめときました。
さて、今回は、はじめて、Ansibleを触ってみました。

 

 

Ansibleとは

 Ansibleは、ChefやPuppetなどと並ぶ構成管理ツールの一つです。
ChefやPuppetと比較した特徴は、エージェントソフトウェアを管理対象に入れなくても、操作が行える点です。(エージェントレス構成)先月、2016年1月に、新しいバージョンの2.0がリリースされました。

 

今回、試してみたこと

 Ansibleは、Linux系の管理対象では、SSHを使ってエージェントレス構成を実現しますが、Windowsの場合は、Windows Remote Management(WinRM)というSOAPベースのプロトコルを使用して実現するようです。今回は、実際にWindowsを管理対象として、Ansibleが操作をできるのか、試してみました。

 


Ansibleのイントールと設定

 管理用のサーバを用意して、Ansibleをインストールします。今回は、Amazon Linux AMI 2015.09.2 (HVM), SSD Volume Type - ami-63b25203 を使って構成してみました。

  1. Python用のパッケージ管理システムのpipをインストールします。
    $ sudo easy_install pip
  2. Ansibleをインストールします
    $ sudo pip install ansible
  3. Ansibleのバージョンを確認します。
    $ ansible --version
  4. PythonでWinRMを扱うためのモジュールをインストールします。
    $ sudo pip install pywinrm
  5. Windows側の自己証明書の検証をスキップする設定を入れます。
    $ sudo mkdir /etc/ansible/callback_plugins
    $ sudo vim /etc/ansible/callback_plugins/fix-ssl.py
    import ssl
    
    if hasattr(ssl, '_create_default_https_context') and hasattr(ssl, '_create_unverified_context'):
    
        ssl._create_default_https_context = ssl._create_unverified_context
    
    class CallbackModule(object):
    
        pass
    
      $ sudo vim /etc/ansible/ansible.cfg
    [defaults]
    bin_ansible_callbacks=True
    callback_plugins = ./callback_plugins
    

    ここで、callback_plugins = /etc/ansible/callback_plugins を絶対パスで書くように注意します。​相対パスで書いた場合、/etc/ansibleがカレントディレクトリでないと、windowsに対する操作が失敗します。
  6. 管理対象ホストを記載するファイル(Inventory)を作成します。
    $ sudo vim /etc/ansible/hosts
    [windows]
    172.31.11.171
    
    [windows:vars]
    
    ansible_ssh_user=ここにWindowsユーザ名
    
    ansible_ssh_pass=ここにWindowsユーザのパスワード
    
    ansible_connection=winrm
        

 

管理対象 Windowsサーバの設定

 

次に、管理対象となるWindowsサーバを準備します。こちらは、Windows_Server-2012-R2_RTM-Japanese-64Bit-Base-2016.02.10 (ami-17856577)を使って構成しました。
Ansibleで管理するには、PowerShell 3.0以上が必要となります。使用したAMIでは、PowerShell 4.0がインストールされていました。加えて、以下の手順が必要となります。

  1. Ansibleから提供されているWindows構成スクリプトをダウンロードします。
    PS> mkdir c:tmp
    PS> cd c:tmp
    PS> Invoke-WebRequest -Uri https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1 -OutFile ConfigureRemotingForAnsible.ps1
  2. 1でダウンロードしたスクリプトを実行します。 PS> powershell -ExecutionPolicy RemoteSigned .ConfigureRemotingForAnsible.ps
    以下のような結果が返ります。  
    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
    
     

AnsibleからWindowsのローカルユーザアカウント作成

 準備ができましたので、実際に管理用サーバからWindowsサーバを操作してみます。今回は、WIndowsサーバ内に新規でユーザアカウント(ansible)を作成してみます。

まず、win_pingモジュールで疎通確認を行います。

$ ansible windows -m win_ping

以下のような結果が返ると、成功です。

172.31.11.171 | success >> {
"changed": false,
"ping": "pong"
}

 次に、ユーザアカウントを作成する手順をまとめたファイル(Playbook)を作成して、これを使って操作を実施します。

  1. 管理用サーバ上の任意の場所に、Playbookファイルを作成します。
    $ vim /home/ec2-user/playbooks/win_user_test.yml
    - name: Add a user
    hosts: windows
    gather_facts: false
    tasks:
    - name: Add User
      win_user:
        name: ansible
        password: "任意のパスワード"
        groups: ["Users"]
    
    
     
  2. Playbookファイルを指定して、ansible-playbookコマンドを実行します。
    $ ansible-playbook /home/ec2-user/playbooks/win_user_test.yml 以下のように、「ok」と「changed」の値が返ってくると成功です。
    PLAY [Add a user] **************************************************************
    
    TASK [Add User] ****************************************************************
    changed: [172.31.11.171]
    
    PLAY RECAP *********************************************************************
    172.31.11.171              : ok=1    changed=1    unreachable=0    failed=0
    
    

 

Windowsサーバで、ユーザー情報を確認してみます。

ansible_useradd

 

上記のとおり、ansibleユーザが作成されました。
 


まとめ

 今回は、AnsibleでWindowsサーバの操作する触りの部分を試してみました。
 Ansibleは、この他にも公式ドキュメントにあるように、AWSのEC2、RDS、S3をはじめRoute53やCloudFormationなども操作でき、クラウドプラットフォーム自体の構成管理も行えるようですので、機会があったら試してみたいと思います。

 

参考文献等