AnsibleのModule:win_scheduled_task
お疲れ様です。伊藤です。
今回はWindows側のModuleになります。いわゆるタスクスケジューラの設定用Moduleです。
説明文は下記になります。
スケジュールされたタスクを管理する
う~んそのまんまですね。
パラメータは以下です。
パラメータ | 必須 | デフォルト | 選択肢 | 備考 |
---|---|---|---|---|
arguments | no | スケジュールされたタスクアクションを提供する引数 | ||
days_of_week | no | 週単位のタスクを実行するための曜日。冪等ではありません。 | ||
description | no | スケジュールされたタスクの説明 | ||
enabled | no | True | True or False | タスクを有効または無効にする |
executable | no | スケジュールされたタスクを実行するコマンド | ||
frequency | no | once or daily or weekly | コマンドの頻度。冪等ではありません。 | |
name | yes | スケジュールされたタスクの名前 | ||
path | no | \ | このタスクが格納されるタスクフォルダ | |
state | yes | present or absent | タスクが有るか無いか | |
time | no | 偶数ではなくスケジュールされたタスクを実行する時間 | ||
user | no | スケジュールされたタスクを実行するユーザー |
例文はこちら
# コマンドプロンプトを開くスケジュールされたタスクを作成する - win_scheduled_task: name: TaskName description: open command prompt executable: cmd arguments: -opt1 -opt2 path: example time: 9am frequency: daily state: present enabled: yes user: SYSTEM
説明文についてはこちらで終了なのですが、使ってみてわかったのが「一度作成したscheduleについては変更ができない」ということでした。この部分については一度削除してから再作成することで解決しています。(もし他の解決方法をご存じに方がいらっしゃったら教えてください)
以上です。お疲れ様でした。
AnsibleでWindowsUpdateを行う
お久しぶりです。伊藤です。
すっかり更新が滞ってしまい、申し訳ありません。少々個人的なことがありましてそちらに追われておりました(その件については後程。。。)
というわけで久々に更新します。今回はAnsibleを使ってWindowsUpdateを試してみます。以前Windowsへの接続環境を作成したので、その環境を使います。でWindowsがインターネットに接続されている状態であれば、話は簡単です。
まずはインベントリファイルにホスト名とIPを追加します。追加する内容は下記。
[windows] 192.168.1.110
これだけです。IPについてはそれぞれのWindosサーバのものをどうぞ。
インベントリファイルについては既存のものに追加すればOKです。個別に用意してもいいですが、この環境ではdevelopment、staging、productionとリリースに合わせてインベントリファイルを分けていますので、煩雑さを避けるためにこのようにしました。このあたりもルールを作っておかないとその場に合わせて変更してしまい、のちに手に負えなくなりますのでご注意ください。(現に手に負えなくなりました)
次にプレイブックを作りますが、ここでロールを分けておきます。windowsというロールを作成します。
# mkdir -p role/windows/defaults # mkdir -p role/windows/files # mkdir -p role/windows/handlers # mkdir -p role/windows/meta # mkdir -p role/windows/tasks # mkdir -p role/windows/templates # mkdir -p role/windows/vars
ロールの下にプレイブックを作ります。
# vi role/windows/tasks/main.yml
内容は下記の通り。
- name: update win_updates: category_names=Updates state=searched - name: reboot win_reboot:
これでWindowsUpdate後に再起動が自動で行われます。本来はupdateの戻り値を見て更新がなければ再起動しない、などの判断を入れたいのですがとりあえず今回は見送ります。
続いて、Windowsサーバにアクセスするための環境変数を用意しておきましょう。以前はhostsというインベントリファイルに直書きしましたが、ベストプラクティスに沿って環境を作成した場合はgroup_varの下に環境変数ファイルを置くことができます。ここに指定したrole名と同じ名前のファイルがあればその環境変数を読み込みます。
# vi group_var/windows.yml
内容は下記
ansible_ssh_user: Administrator(ログインユーザ名) ansible_ssh_pass: xxxxxxxx(パスワード) ansible_ssh_port: 5986 ansible_connection: winrm ansible_winrm_server_cert_validation: ignore
で、最後に呼び出すプレイブックを作成します。
# windows.yml
内容はこんな感じ
--- - hosts: windows roles: - windows
これで実行します。
# ansible-playbook -i development windows.yml
結果は以下のような感じ
[root@18e034a057dd ansible]# ansible-playbook -i development windows.yml PLAY [windows] ********************************************* TASK [Gathering Facts] ************************************* ok: [192.168.1.110] TASK [windows : update] ************************************ changed: [192.168.1.110] TASK [windows : reboot] ************************************ changed: [192.168.1.110] PLAY RECAP ************************************************* 192.168.1.110 : ok=3 changed=2 unreachable=0 failed=0
Windows側を見ると更新されていることがわかります。(実行日は10/10)
以上です。お疲れでした。