Ansible-将组变量和主机变量中的变量合并到一个列表中

Ansible-将组变量和主机变量中的变量合并到一个列表中,ansible,ansible-2.x,ansible-inventory,Ansible,Ansible 2.x,Ansible Inventory,我试图从清单组中获取IP地址列表,而不是主机名。这些IP地址已经在我的HostVar中,但我无法使它们与组名中的列表相匹配 这是我的原创剧本: - name: Install Kafka hosts: kafka roles: - role: kafka kafka_hosts: "{{ groups['kafka'] | list }}" kafka_zookeeper_hosts: "{{ groups['zookeeper'] | list }}"

我试图从清单组中获取IP地址列表,而不是主机名。这些IP地址已经在我的HostVar中,但我无法使它们与组名中的列表相匹配

这是我的原创剧本:

- name: Install Kafka
  hosts: kafka
  roles: 
    - role: kafka
      kafka_hosts: "{{ groups['kafka'] | list }}"
      kafka_zookeeper_hosts: "{{ groups['zookeeper'] | list }}"
如您所见,kafka_主机和kafka_zookeeper_主机是列表。 此playbook to my servers配置的结果是正确的:

/etc/kafka/consumer.properties:zookeeper.connect=opo-4:2181,opo-5:2181,opo-6:2181
/etc/kafka/producer.properties:metadata.broker.list=opo-1:9092,opo-2:9092,opo-3:9092
不幸的是,由于DNS问题,此配置不适用于我的所有服务器。我需要一个IP地址列表,而不是主机名

如果我在playbook中手动设置IP地址,我的配置将正常工作,不幸的是,不是动态的:

  kafka_hosts: 
    - 192.168.48.1
    - 192.168.48.2
    - 192.168.48.3
  kafka_zookeeper_hosts: 
    - 192.168.48.4
    - 192.168.48.5
    - 192.168.48.6
我的服务器上的结果使它工作:

在这种配置中,我必须手动维护具有相同信息的组和剧本。所以我想从卡夫卡和动物园管理员那里弄到人质

以下是主资源清册文件中定义的主机变量和组:

[opo]
opo-1 ansible_host=192.168.48.1
opo-2 ansible_host=192.168.48.2
...
opo-6 ansible_host=192.168.48.6

[zookeeper]
opo-1
opo-2
opo-3

[kafka]
opo-4
opo-5
opo-6
我的尝试-基于stackoverflow上类似问题的答案:

  • 卡夫卡大学主机:{{groups[['kafka']['ansible_host']]}
  • kafka|u hosts:“{{[hostvars[groups['kafka'][0]['ansible_host']]| list}}”列表仅包含第一个ip地址
  • 卡夫卡主机:{{[hostvars[groups['kafka']]['ansible_host']]}
  • 卡夫卡主持人:“{{hostvars[groups['kafka']].ansible|u host | list}”
  • kafka_主机:{{[hostvars.[groups['kafka']].ansible_主机]| list}
  • 卡夫卡主持人:“{{groups['kafka'].ansible|u host}”
它们都没有提供预期的IP地址列表。

您需要使用:


这是正确的语法。很好!谢谢你,康斯坦丁。
[opo]
opo-1 ansible_host=192.168.48.1
opo-2 ansible_host=192.168.48.2
...
opo-6 ansible_host=192.168.48.6

[zookeeper]
opo-1
opo-2
opo-3

[kafka]
opo-4
opo-5
opo-6
kafka_hosts: "{{ groups['kafka'] | map('extract',hostvars,'ansible_host') | list }}"