この投稿は Ansible Advent Calendar 2013 の13日目の記事です。 前日はこちら 2打席目です。 息子二人が連続で胃腸炎にかかりゲロとの戦いを強いられていて書こうと思っていたネタの準備ができなかったので、モジュール一覧ページを見て、「おーっ、こんな機能あったんだぁ!」って思ったものを書いてみます。
fetch モジュールの validate_md5
validate_md5={yes|no}
というパラメータが 1.4 で追加されていました。fetch 元と fetch してきたファイルの md5sum を比較して正しくコピーできたことを確認できます。 しかし copy モジュールにはこの機能ないんですね。 代わりにといっては何ですが、 copy と template モジュールには
validate=任意のコマンド
というパラメータがあります。 %s
というマクロが使えて、作成した一時ファイル(rename前)の path に置換されて実行されます。例えば Apache のコンフィグファイルであれば
validate="/usr/sbin/httpd -t -f %s"
とすることで syntax check に失敗したら rename 前にエラーで終了させることができます。起動しない設定ファイルを反映してしまうことを防げます(もちろん syntax check では見つけられないミスもありますが)。 おっと、1.4 で lineinfile モジュールにもこの機能が追加されていました。
unarchive モジュール
1.4 で新規に追加されたモジュールです。 command モジュールで tar xf ... chdir=/some/where
使えば tar.gz でも tar.bz2 でも tar.xz も自動判別して展開はしてくれますが、このモジュールを使うと tar
の --diff
機能で差分が見つかった場合のみ実際に展開されます。これはちょっと便利。changed かどうかは重要ですからね。 zip ファイルの場合は常に展開されるようです。
file モジュールの state=touch
これまでは file
, directory
, link
, hard
, absent
だけでしたが、touch
が 1.4 で追加されていました。 Passenger アプリの deploy 時に tmp/restart.txt の timestamp を更新することでアプリだけリロードさせることができますが、こんな場合に使えますね。 もちろん command: touch /some/where/tmp/restart.txt
でできるんですけど。
postgresql_privs
思ってたより便利そう。 ヤバい時間がない…
postgresql_user
1.4 からパスワードが必須ではなくなってました。LDAP 認証時にはパスワード設定する必要ないから助かる。
頓挫した技術系アドベントカレンダーの一覧(2013年) に乗ってしまうと困るから今日はこれで終了。 3打席目やります。 明日は私の誕生日です(さらにおじさんに…) じゃなくって、明日は @r_rudi さんの2打席目です。