获取剧本中的IP地址列表

Get list of ip adresses in playbook

我是 Ansible 的新手,无法从文档中弄清楚如何实现这一点: 我有一个这样的库存文件:

example_site:
  children:
    ...
    example_hosts:
      hosts:
        h1:
          ansible_host: "192.168.0.1"
        h2:
          ansible_host: "192.168.0.2"

现在我想在剧本中启动一个 Gluster 集群:

  tasks:
    - name: Create a trusted storage pool
      become: yes
      gluster.gluster.gluster_peer:
        state: present
        nodes:
          - "192.168.0.1"
          - "192.168.0.2"

有没有办法不对这个 IP 地址列表进行硬编码?我尝试了 node: groups['example_hosts'],但没有用。

如何从清单中获取 IP 地址列表?

可以使用 ansible_host 变量访问清单中定义的主机的 IP 地址,即 hostvars['h1']['ansible_host'] =>“192.168.0.1”。由于您需要该组中主机的 IP 地址作为数组,我们可以遍历 group['example_hosts'] 中的主机,这也是一个列表 ["h1", "h2"]

在下面的示例中,我们使用 example_hosts 组中主机的 IP 地址列表创建另一个变量:

    - set_fact:
        cluster_hosts: "{{ cluster_hosts|default([]) + [ hostvars[item]['ansible_host'] ] }}"
      loop: "{{ groups['example_hosts'] }}"
      run_once: true
    - debug:
        var: cluster_hosts

这给出了 cluster_hosts 中的 IP 地址列表:

    "cluster_hosts": [
        "192.168.0.1",
        "192.168.0.2"
    ]

这个变量可以传递给gluster_peer模块的nodes参数:

        nodes: "{{ cluster_hosts }}"