page_adsence

2015年5月11日月曜日

Ansibleで変数入りのファイルをリモートマシンへコピーする

Ansibleで開発環境を作成しようとすると、各種設定ファイル等を使い回したくなります。
通常であれば、ホストマシン側に設定ファイルを置いておき、それをリモートマシンへcopyモジュールを利用してコピーするのですが、それだとホストマシンに置いてある設定ファイルをそのまま設置することになってしまいます。
プロジェクトによって書き換えたい部分とかが出てくると思います。ログの吐き出し先とか。
そういった場合はcopyモジュールを使用するのではなく、templateモジュールを使用する事で、元ファイルに入れてある変数を展開した状態でリモートマシンにコピーする事が出来ます。
変数の使い方に関しては割愛します。

変数入りのファイルを用意します。
$ vi files/file.conf
{{ project_name }}

プレイブックに下記の様な行を追加します。
$ vi playbook.yml
- template: src=files/file.conf dest=/etc/file.conf mode=0644

プレイブックを実行します。
ansible-playbook playbook.yml --extra-vars "project_name=test-project"

処理終了後にリモートマシンにコピーしたファイルを確認します。
$ vi /etc/file.conf
test-project

この様な感じで変数展開された状態のファイルが設置されています。