【发布时间】:2016-05-05 17:02:59
【问题描述】:
Ansible 大师我需要您的帮助。我有一个带有变量的模板,我需要在遍历剧本中的列表时动态设置。目前尚不清楚如何将变量“注入”到模板中以在迭代时使用。
目标是在一个目录中创建许多配置文件,列表中的每个 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,每个文件中都有一个配置变量动态设置,例如 etl-one.conf 的 "topic_id": "etl.one.Event" 和 etl-two.conf 的 "topic_id": "etl.two.Event"。
非常感谢您的任何想法。 set_fact 是我最近的尝试,但失败了
ERROR: multiple actions specified in task: 'template' and 'Install Logstash config'
exit status 1
【问题讨论】:
-
我知道你让它工作了,但要指出的是,该错误消息表明你正在尝试在单个任务级别中使用多个模块('template' 和 'set_fact')。对于您的情况, set_fact 不是必需的,但如果需要,您将不得不将其作为单独的任务编写,而不是与“模板”任务一起编写。
标签: ansible jinja2 ansible-playbook