構成管理システムが徐々に当たり前になってきている昨今、日本ではChefが盛り上がっているようですね。おそらくこのままスタンダードになると思います。
ただ、個人的にChefに対して以下をクリアできていないんですよね。
- 管理対象マシンに対してChef環境構築が必要なこと
- 上記のための作業の自動化がChefと別管理となりそうなこと
- Chef/Rubyの環境構築自体への心理的ハードル
なので、全然違うシステムを勉強しようかなぁ、と。
というわけで、見つけたのがPythonベースのAnsibleというもので、こちらを少しずつ勉強しています。
で、使い始めの部分はそれなりに情報があるのですが、応用的な書き方の情報となるとなかなか見つけづらいので、未来の自分のために少しずつ書き溜めてみようかと。
今回は、特定のファイルが特定の場所に存在していなかったら、ダウンロードしてくる、というもの。
今回の例では、WordPress日本語版をダウンロードしています。
- name: WordPress Check
action: command [ -e wordpress-3.5.2-ja.zip ]
register: result
ignore_errors: True
- name: WordPress Download
action: command wget -q "http://ja.wordpress.org/wordpress-3.5.2-ja.zip"
when: result|failed
Check部分で、"wordpress-3.5.2-ja.zip"ファイルがカレントディレクトリに存在しているかチェックしています。
ファイルが存在していない場合エラーが発生するので、それを無視して次を実行できるように"ignore_errors: True"を指定します。
Download部分の"when: result|failed"は、Check部分でエラーが発生した場合にのみ実行されるようにするものです。
"action:"で"command"を指定すれば、コマンドラインでできる大概の事はできてしまうはずです。
とりあえずは、こんな感じで。
以下は @r_rudi さんより頂いた情報により、追記です。
http://www.ansibleworks.com/docs/modules.html#get-url
こちらの情報から、commandで頑張らなくてもファイル取得が可能であることが判明しました。
書き直すと、以下のような感じです。
- name: WordPress Download
get_url: url="http://ja.wordpress.org/wordpress-3.5.2-ja.zip" dest=/tmp
ここでは"dest"でダウンロード先を"/tmp"としています。
上記だけで、ファイルダウンロード(ファイルが存在していれば何もしない)の操作が可能です。