【问题标题】:Pass a variable dynamically into Ansible template while iterating a list in playbook在迭代剧本中的列表时将变量动态传递到 Ansible 模板
【发布时间】: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


【解决方案1】:

我让它正常工作。看起来模板可以在您迭代时引用{{ 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"

【讨论】:

    猜你喜欢
    • 2020-02-11
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多