在 Ansible 中使用带有模板的 Vars 中的字典
Use Dict in Vars with Templates in Ansible
我正在尝试对一组确定的 os 任务的每次迭代使用具有不同变量集的模板。例如,在其中一项任务中,我想为 postgres:
设置特定值
- name: Define values for postgres-ds
template:
src: postgres-ds.xml.j2
dest: /opt/ear_{{ instance_control.value }}/postgres-ds.xml
vars: "{{ postgres_desenv }}"
notify: Restart Service
在role/vars/main.yaml中,我定义:
postgres_desenv:
var1: somevalue
var2: someothervalue
...
仍然出现以下错误:
fatal: [rmt]: FAILED! => {
"failed": true,
"reason": "Vars in a Task must be specified as a dictionary, or a list of dictionaries
...
当我尝试在另一个上下文中使用同一个变量时,它工作正常:
- debug:
msg: "{{ item.key }} - {{ item.value }}"
with_dict: "{{ postgres_desenv }}"
我尝试按照此 的答案进行操作,但我仍然卡住了。
我的下一步是使用变量来调用vars中的变量,例如:
- name: Define values for postgres-ds
template:
src: postgres-ds.xml.j2
dest: /opt/ear_{{ instance_control.value }}/postgres-ds.xml
vars: postgres_{{ another_var }}
notify: Restart Service
你可以这样做:
- name: Define values for postgres-ds
template:
src: postgres-ds.xml.j2
dest: /opt/ear_{{ instance_control.value }}/postgres-ds.xml
vars:
settings: "{{ postgres_desenv }}"
notify: Restart Service
然后在模板中您可以参考,例如
{{ settings.var1 }}
如果 postgres_desenv 在 vars/main.yml 中定义,它将自动加载并可供角色和剧本的其余部分使用。为什么必须在模板模块任务中使用 "vars" 选项再次指定?
我正在尝试对一组确定的 os 任务的每次迭代使用具有不同变量集的模板。例如,在其中一项任务中,我想为 postgres:
设置特定值- name: Define values for postgres-ds
template:
src: postgres-ds.xml.j2
dest: /opt/ear_{{ instance_control.value }}/postgres-ds.xml
vars: "{{ postgres_desenv }}"
notify: Restart Service
在role/vars/main.yaml中,我定义:
postgres_desenv:
var1: somevalue
var2: someothervalue
...
仍然出现以下错误:
fatal: [rmt]: FAILED! => {
"failed": true,
"reason": "Vars in a Task must be specified as a dictionary, or a list of dictionaries
...
当我尝试在另一个上下文中使用同一个变量时,它工作正常:
- debug:
msg: "{{ item.key }} - {{ item.value }}"
with_dict: "{{ postgres_desenv }}"
我尝试按照此
我的下一步是使用变量来调用vars中的变量,例如:
- name: Define values for postgres-ds
template:
src: postgres-ds.xml.j2
dest: /opt/ear_{{ instance_control.value }}/postgres-ds.xml
vars: postgres_{{ another_var }}
notify: Restart Service
你可以这样做:
- name: Define values for postgres-ds
template:
src: postgres-ds.xml.j2
dest: /opt/ear_{{ instance_control.value }}/postgres-ds.xml
vars:
settings: "{{ postgres_desenv }}"
notify: Restart Service
然后在模板中您可以参考,例如
{{ settings.var1 }}
如果 postgres_desenv 在 vars/main.yml 中定义,它将自动加载并可供角色和剧本的其余部分使用。为什么必须在模板模块任务中使用 "vars" 选项再次指定?