【问题标题】:Loop through ansible hosts based on play基于播放循环通过ansible主机
【发布时间】:2016-09-16 22:36:19
【问题描述】:

我已经看到了通过执行以下操作来遍历库存文件地址的能力:

{% for url in groups['kafka'] %}
  {%- if url == ansible_fqdn or url in ansible_all_ipv4_addresses
     or ( kafka_id is defined and loop.index0 == kafka_id | int ) -%}
        broker.id={{loop.index0}}
    {% endif %}
{% endfor %}

这个想法的问题是我有几个不同的“Kafa”类型的主机,每个主机都会做一些稍微不同的事情。我想知道是否有一种方法可以通过剧本传递 groups['kafka'] 的变量,而不是在模板中对其进行硬编码。这样,我只为特定的戏剧使用主机,并且可以为所有不同的戏剧重复使用相同的模板。

【问题讨论】:

  • 我认为你可以很容易地做到这一点,但是通过你冗长的描述并试图弄清楚你的意思是一个真正的痛苦。你为什么不发布你的库存文件,剧本并要求填写有问题的部分?

标签: ansible apache-kafka ansible-playbook


【解决方案1】:

尝试仍然用引号包裹 groups['FOO'] 是我的错。我能够在剧本中设置一个变量并通过执行以下操作将其传递:

- name: Big Tree Stitch Kafka
  hosts: kafka-bts
  vars:
    kafka_hosts: "kafka-bts"
  remote_user: centos
  become_user: root
  become: yes
  roles:
    - { role: kafka }

然后在我的 jinja 模板中使用它。

% for url in groups[kafka-bts] %}
  {%- if url == ansible_fqdn or url in ansible_all_ipv4_addresses
     or ( kafka_id is defined and loop.index0 == kafka_id | int ) -%}
        broker.id={{loop.index0}}
    {% endif %}
{% endfor %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多