如何获取 ansible 库存并填充到 ansible 变量中?

如何获取 ansible 库存并填充到 ansible 变量中?

我有一个清单文件,其中定义了一组服务器

[prod]
prod1 ansible_host=10.10.2.30
prod2 ansible_host=10.10.2.40
prod3 ansible_host=10.10.2.50
prod4 ansible_host=10.10.2.60

我想定义一个变量,用于连接产品组中以逗号分隔的所有服务器。假设变量是列表,变量应该包含类似的值

list: "prod1_IP,prod2_IP,prod3_IP,prod4_IP"    
list: "10.10.2.30,10.10.2.40,10.10.2.50,10.10.2.60"

人们可以轻松地手动放置这些,但问题是,列表应该在不同的场景中扩展。

我想可以hostvars[item].ansible_host与 for 循环一起使用。但不知道如何

答案1

下面的剧本可以完成这项工作

- hosts: prod
  gather_facts: false
  tasks:
    - block:
        - set_fact:
            list1: "{{ ansible_play_hosts_all|product(['_IP'])|map('join')|
                       join(',') }}"
        - debug:
            var: list1
        - set_fact:
            list2: "{{ ansible_play_hosts_all|map('extract', hostvars, 'ansible_host')|
                       join(',') }}"
        - debug:
            var: list2
      run_once: true

给出

  list1: prod1_IP,prod2_IP,prod3_IP,prod4_IP
  list2: 10.10.2.30,10.10.2.40,10.10.2.50,10.10.2.60

相关内容