在playbook中迭代列表时,将变量动态传递给Ansible模板

时间:2016-05-05 17:03:00

标签: ansible jinja2 ansible-playbook

Ansible gurus我需要你的帮助。我有一个模板,我需要动态设置一个变量,同时迭代播放簿中的列表。目前还不清楚如何注射"迭代时使用的模板变量。

目标是在目录中创建许多配置文件,一个用于列表中的每个var。例如,如果列表是A, B, C,我将分别需要文件A.conf,B.conf,C.conf。

在模板配置文件中,还有一个变量需要分别使用A,B或C进行设置。我尝试使用set_fact并从列表项和引用中设置变量。我尝试在其中引用{{ item }}。都失败了?

apps:
 - one
 - two
 - three

tasks:
    - name: Install Logstash config
      template: src={{ upload_dir }}/deploy/logstash-etl.conf dest=/opt/logstash/bin/etl-{{ item }}.conf
      set_fact:
        app: "{{ item }}"
      delegate_to: "{{ logstash_host }}"
      with_items: apps

在模板文件中,我试图引用{{ app }}{{ item }},我似乎无法识别动态变量以从当前值设置它的值迭代。

预计我是否有应用程序:一个,两个,三个将是一个文件夹中的3个文件,每个文件夹分别命名为etl-one.conf,etl-two.conf,etl-three.conf,并且在每个文件中配置一个变量动态设置如" topic_id":" etl.one.Event"对于etl-one.conf和" topic_id":" etl.two.Event"分别为etl-two.conf。

非常感谢任何想法。 set_fact是我最近的尝试,但是失败了

ERROR: multiple actions specified in task: 'template' and 'Install Logstash config'
exit status 1

1 个答案:

答案 0 :(得分:3)

我没有错误地工作。看起来模板CAN在您迭代时引用{{ item }}变量,因此您可以在模板中使用它。

- name: Install Logstash config
  template: src={{ upload_dir }}/deploy/logstash-etl.conf dest=/opt/logstash/bin/etl-{{ item }}.conf
  delegate_to: "{{ logstash_host }}"
  with_items: apps

在模板文件中:

"topic_id": "etl.{{ item }}.Event"