Ответ 1
Будет ли это работать для вас?
(rc=0)$ cat training.yml
- hosts: localhost
tags: so5
gather_facts: False
vars: [
k1: 'key1',
k2: 'key2',
d1: "{
'{{k1}}': 'value1',
'{{k2}}': 'value2',
}",
]
tasks:
- debug: msg="{{item}}"
with_dict: "{{d1}}"
(rc=0)$ ansible-playbook training.yml -t so5
PLAY [localhost] ****************************************************************
PLAY [localhost] ****************************************************************
TASK: [debug msg="{{item}}"] **************************************************
ok: [localhost] => (item={'key': 'key2', 'value': 'value2'}) => {
"item": {
"key": "key2",
"value": "value2"
},
"msg": "{'value': 'value2', 'key': 'key2'}"
}
ok: [localhost] => (item={'key': 'key1', 'value': 'value1'}) => {
"item": {
"key": "key1",
"value": "value1"
},
"msg": "{'value': 'value1', 'key': 'key1'}"
}
PLAY RECAP ********************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0
(rc=0)$
Трюк состоит в том, чтобы заключить декларацию dict с двойными кавычками. Ansible применяет этот недокументированный (но непротиворечивый) и crappy-перевод (эквивалентный эквивалент расширения оболочки) для большинства (не всех) значений YAML (все RHS ':'
) в playbook. Это некоторая комбинация, которая помещает эти строки через Jinja2-engine, Python-интерпретатор и незаметный движок в некотором неизвестном порядке.