【问题标题】:Ansible - get variables from group_vars and host_vars together into a listAnsible - 从 group_vars 和 host_vars 中获取变量一起放入一个列表
【发布时间】:2017-06-07 14:21:58
【问题描述】:

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

这是我原来的剧本:

- name: Install Kafka
  hosts: kafka
  roles: 
    - role: kafka
      kafka_hosts: "{{ groups['kafka'] | list }}"
      kafka_zookeeper_hosts: "{{ groups['zookeeper'] | list }}"

如您所见,kafka_hostskafka_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 地址列表而不是主机名。

如果我在 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

我的服务器上的结果使它工作

/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

在此配置中,我必须使用相同的信息手动维护我的组我的剧本。所以我想从 kafkazookeeper 组中获取 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 答案:

  • kafka_hosts: "{{ groups[['kafka']['ansible_host']] | list }}"
  • kafka_hosts: "{{ [hostvars[groups['kafka'][0]]['ansible_host']] | list }}" # 列表只包含第一个ip地址
  • kafka_hosts: "{{ [hostvars[groups['kafka']]['ansible_host']] | list }}"
  • kafka_hosts: "{{ hostvars[groups['kafka']].ansible_host | list }}"
  • kafka_hosts: "{{ [hostvars.[groups['kafka']].ansible_host] | list }}"
  • kafka_hosts: "{{ groups['kafka'].ansible_host | list }}"

它们都没有给出预期的 IP 地址列表。

【问题讨论】:

    标签: ansible ansible-2.x ansible-inventory


    【解决方案1】:

    你需要使用extract and map combination:

    kafka_hosts: "{{ groups['kafka'] | map('extract',hostvars,'ansible_host') | list }}"
    

    【讨论】:

    • 这是正确的语法。工作正常 !谢谢康斯坦丁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多