Ansibleで特定のtemplateとgroup_varsの組み合わせの出力内容を確認する

Jan 25, 2018

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
Retrun to top