-e (--extra-vars) オプションとは
ansible-playbook
コマンドには、-e
(または --extra-bars
) という、extra vars(一番優先される変数の種類)を指定するオプションがあります。複数指定する場合は、複数の -e
オプションを使用します。
ansible-playbook -i localhost, -e key1=val1 -e key2=val2 -e key3=val3
-e @ファイル名
で変数ファイルも指定できる
-e
オプションの指定が多かったり、リストやディクショナリの値を指定すると、コマンドが見にくくなってしまいます。そこで、-e @ファイル名
のように指定すると、変数たちを書き出したファイルを扱うことができ、コマンドをすっきりさせることができます。 (ドキュメントやコマンドヘルプにも記載があります)
ファイルは yaml か json を指定できます。 https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html?highlight=JSON#passing-variables-on-the-command-line
サンプル
- playbook
- hosts: localhost gather_facts: no tasks: - name: vars test debug: var: "{{ item }}" loop: - key1 - key2 - key3
- myvars.yml (変数たちを書き出したファイル)
--- key1: val1 key2: val2 key3: - val3_1 - val3_2 - val3_3
- 実行結果
$ ansible-playbook -i localhost, varstest.yml -e @myvars.yml PLAY [localhost] *********************************************************** TASK [vars test] *********************************************************** ok: [localhost] => (item=key1) => { "item": "key1", "key1": "val1" } ok: [localhost] => (item=key2) => { "item": "key2", "key2": "val2" } ok: [localhost] => (item=key3) => { "item": "key3", "key3": [ "val3_1", "val3_2", "val3_3" ] } PLAY RECAP ***************************************************************** localhost : ok=1 changed=0 unreachable=0 failed=0
他にも変数ファイルを取り込める機能は、host_vars
ディレクトリ、group_vars
ディレクトリ、vars_files
ディレクティブなどがありますが、この方法も選択肢として頭の隅に置いておくと良いかもしれません。