ansible-playbook --diff --check
で、Ansibleが反映させる作業の差分は事前に確認できるけど、単にテンプレートがどのような出力になるか調べたい。
結論
ansible localhost -m template -a "src=<テンプレートファイルの場所> dest=<出力結果の保存先>" -e <variablesかvariablesファイルの場所>
のように、ansible
コマンドでtemplate
モジュールを利用する。
例えば、以下のように書ける:
ansible localhost -m template \
-a "src=roles/my-app/templates/application.yml.j2 dest=./output/application.yml.txt" \
-e @roles/my-app/defaults/main.yml \
-e @group_vars/dev.yml
-a
で渡せるオプションは、template moduleのドキュメントのOptionsと対応。
template - Templates a file out to a remote server — Ansible Documentation
Ansibleコマンドについて
ちゃんとAnsibleのドキュメント読んでなかったので、書いておく。
参考:
ansible
コマンドは、1つのタスクを実行するコマンド。
サーバの構成管理するとき(設定ファイルの差分反映を実施するときなど)は、ansible-playbook
コマンドを使う。
Ansibleの本来の価値は、サーバの構築作業をPlaybookに記録し、実行することだが、PlaybookなしにアドホックにAnsibleの機能を試したいときにはansible
コマンドを使うことができる。
playbook内で記述する、Ansibleのmoduleも単体で使うことができる。
例えば、以下のようにcopyモジュールを使って記述されているタスクは、
copy:
src: foo.txt
dest: /tmp/foo.txt
ansible
コマンドで以下のように実行できる:
ansible localhost -m copy -a "src=foo.txt dest=/tmp/foo.txt"
-m
オプションでモジュール名を指定して、-a
オプションでモジュールに渡すパラメータを指定する。
この例では、copy moduleのドキュメントに記載されているOptionsのパラメータを-a
に指定して実行している。
タスクに変数を使う場合
以下のように、タスクに変数を使っている場合は、
copy:
src: foo.txt
dest: {{ dirname }}/foo.txt
ansible
コマンドでは以下のように表現できる:
ansible localhost -m copy -a "src=foo.txt dest=/tmp/foo.txt" -e '{"dirname": "/tmp"}'
変数をファイルに書く場合は、@
をファイル名の前につける。
ansible localhost -m copy -a "src=foo.txt dest=/tmp/foo.txt" -e @vars.yml