2

我正在尝试为确定的一组操作系统任务的每次迭代使用具有不同变量集的模板。例如,在其中一项任务中,我想为 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
4

2 回答 2

2

你可以这样做:

- 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 }}
于 2017-12-15T19:51:56.863 回答
-1

如果 postgres_desenv 在 vars/main.yml 中定义,它将自动加载并可供角色和剧本的其余部分使用。为什么必须在模板模块任务中使用“vars”选项再次指定?

于 2017-12-15T19:53:42.280 回答