$ ls play.d/roles/debug/*
play.d/roles/debug/tasks:
main.yml
play.d/roles/debug/vars:
main.yml
$ cat play.d/roles/debug/tasks/main.yml
- debug: msg="{{ name }}"
- debug: msg="{{ vars[name]['test_var'] }}"
- debug: msg="{{ vars['nested_var']['test_var'] }}"
- debug: msg="{{ test_var }}"
$ cat play.d/roles/debug/vars/main.yml
test_var: "{{ 'value-1' if cpu == 'x64' else 'value-2' }}"
nested_var:
test_var: "{{ 'value-1' if cpu == 'x64' else 'value-2' }}"
$ cat play.d/debug.yml
- hosts: all
gather_facts: yes
roles:
- debug
$ cat inv.d/inv
[all:vars]
cpu = 'x64'
[test-srv]
52.19.xxx.xxx
この非常に簡単な設定では、Ansible
は、その位置(トップレベルまたはネスト)に関係なくインライン条件を評価する必要があります。しかしネストされた変数は、式のリテラル文字列となっていること、そうです:誰がやっている式は、ネストされたansible変数で評価されていない
# ansible-playbook -i inv.d/inv play.d/debug.yml -e name=nested_var -l test-srv
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
ok: [52.19.xxx.xxx]
TASK: [debug | debug msg="{{ name }}"] ****************************************
ok: [52.19.xxx.xxx] => {
"msg": "nested_var"
}
TASK: [debug | debug msg="{{ vars[name]['test_var'] }}"] **********************
ok: [52.19.xxx.xxx] => {
"msg": "{{'value-1' if cpu == 'x64' else 'value-2'}}"
}
TASK: [debug | debug msg="{{ vars['nested_var']['test_var'] }}"] **************
ok: [52.19.xxx.xxx] => {
"msg": "{{'value-1' if cpu == 'x64' else 'value-2'}}"
}
TASK: [debug | debug msg="{{ 'value-1' if cpu == 'x64' else 'value-2' }}"] ****
ok: [52.19.xxx.xxx] => {
"msg": "value-1"
}
PLAY RECAP ********************************************************************
52.19.xxx.xxx : ok=5 changed=0 unreachable=0 failed=0
が、それは間違っている、私やAnsible
?何か案は?
# ansible --version
ansible 1.9.2
'root-hash'トリックは私の問題をすべて解決しました。ありがとう。 –