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
答案 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"