概要
Ansible を WindowsServer 2016 に使ってみました
WindowsServer の構築はこちらを参考にしてください
ansible コマンドを実行する環境は CentOS になります
環境
- Windows 2016
- CentOS 7.4.1708
- ansible 2.4.0.0
- pip 9.0.1
- python 2.7.5
ansible 環境の準備
ansible は yum コマンドでインストールしています
- yum -y install ansible
必要な python モジュール等があるので準備します
wget 'https://bootstrap.pypa.io/get-pip.py'
- python get-pip.py
- pip install xmltodict
- pip install pywinrm
2 つのライブラリを追加しました
とりあえず ping を送ってみる
では ansible の playbook を作成していきます
とりあえず ansible 経由で ping を送信してみましょう
- vim inventory.yml
[windows]
192.168.56.101
ホストの情報を設定します
- mkdir group_vars
- vim group_vars/windows.yml
ansible_user: winuser1
ansible_password: winpass123
ansible_port: 5985
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore
WindowsServer に接続する認証情報を記載します
ansible が WindowsServer に接続するのは packer 時と同様で winrm を使っています
では実行してみましょう
ansible windows -i inventory.yml -m win_ping
で以下の結果が返ってくれば OK です
192.168.56.103 | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}
winrm の有効化について
今回 WindowsServer 2016 の構築は packer を使用しました
packer を使って構築する場合 winrm の有効が必須になります
なので、packer 経由で WindowsServer を構築すると必然的に winrm が有効になっています
もし有効になっていない場合はコンソール画面を使って WindowsServer を操作します
Powershell のプロンプトを管理者権限で開いて以下のコマンドを実行することで有効にすることができます
- winrm qc
で y/n を求められるので y を入力すれば有効にできます
他のプロビジョニングをしてみる
接続できたらいろいろと playbook を作成して実行してみましょう
ディレクトリ構成はベストプラクティスに沿って作成します
コマンドを実行して結果を出力する
- mkdir -p roles/common/tasks/
- vim roles/common/tasks/main.yml
- include_tasks: test.yml
- vim roles/common/tasks/test.yml
- name: run ipconfig
raw: ipconfig
register: ip_info
- debug: var=ip_info
- name: test stat module on file
win_stat: path="C:/Windows/win.ini"
register: stat_file
- debug: var=stat_file
raw はコマンドを直接実行するモジュールです
register は実行した結果を指定した変数に格納することができるモジュールです
debug は指定した情報を出力するモジュールです
var=
オプションを使うことで register で定義した変数を参照することができます
- vim site.yml
---
- hosts: all
roles:
- common
ansible-playbook -i inventory.yml site.yml
で実行すると IP アドレスの表示とファイルのチェックを行います
本当は stat_file を assert:
を使って中身を確認するところまでやったほうが良いのですが今回はサンプルなので省略しています
Powershell を実行する
- mkdir -p roles/common/files/
- vim roles/common/files/test.ps1
Write-Host "test `n"
- vim roles/common/tasks/powershell.yml
- name: execute powershell
script: files/test.ps1
register: echo_ret
- debug: var=echo_ret
- vim roles/common/tasks/main.yml
- include_tasks: test.yml
- include_tasks: powershell.yml
ansible-playbook -i inventory.yml site.yml
こんな感じです
先ほどの test.yml も実行していますが不要であれば include_tasks から削除すれば OK です
WinRAR をインストールする
- vim roles/common/files/winrar.ps1
$workdir = "c:\installer\"
If (Test-Path -Path $workdir -PathType Container)
{ Write-Host "$workdir already exists" -ForegroundColor Red}
ELSE
{ New-Item -Path $workdir -ItemType directory }
$source = "http://rarlab.com/rar/winrar-x64-540.exe"
$destination = "$workdir\winrar.exe"
Invoke-WebRequest $source -OutFile $destination
Start-Process -FilePath "$workdir\winrar.exe" -ArgumentList "/S"
Start-Sleep -s 35
rm -Force $workdir\w*
- vim roles/common/tasks/winrar.yml
- name: execute powershell
script: files/winrar.ps1
register: install_ret
- debug: var=install_ret
- vim roles/common/tasks/main.yml
- include_tasks: test.yml
- include_tasks: powershell.yml
- include_tasks: winrar.yml
ansible-playbook -i inventory.yml site.yml
成功した後にプラグラムの一覧を確認すると WinRAR がインストールされているのか確認できると思います
最後に
WindowsServer2016 に ansible を実行してみました
基本は WinRM 経由でいろいろとコマンドを実行する感じです
コマンドは shell などではなく Powershell がメインになります
Powershell を覚えさえすればいろいろとできるかなと思います
0 件のコメント:
コメントを投稿