我试图从库存组中获取IP地址列表而不是主机名。这些IP地址已经在我的 hostvars 中,但我不能使它们与组名称中的列表匹配。
这是我原来的剧本:
- name: Install Kafka
hosts: kafka
roles:
- role: kafka
kafka_hosts: "{{ groups['kafka'] | list }}"
kafka_zookeeper_hosts: "{{ groups['zookeeper'] | list }}"
如您所见, kafka_hosts 和 kafka_zookeeper_hosts 是列表。 这个剧本对我的服务器配置的结果是正确的:
/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地址列表而不是主机名。
如果我手动设置我的剧本中的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
我服务器上的结果使正常工作:
/etc/kafka/consumer.properties:zookeeper.connect=192.168.48.4:2181,192.168.48.5:2181,192.168.48.6:2181
/etc/kafka/producer.properties:metadata.broker.list=192.168.48.1:9092,192.168.48.2:9092,192.168.48.3:9092
在此配置中,我必须使用相同的信息手动维护我的群组和。所以我想从 kafka 和 zookeeper 组中获取 hostvars 。
以下是 hostvars 和组,在主库存文件中定义:
[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上找到的答案:
他们都没有提供预期的IP地址列表。
答案 0 :(得分:5)
您需要使用extract
and map
combination:
kafka_hosts: "{{ groups['kafka'] | map('extract',hostvars,'ansible_host') | list }}"