Variable

如何獲取 ansible 庫存並填充 ansible 變數?

  • March 3, 2021

我有一個定義了一組伺服器的清單文件

[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

我想定義一個變數來連接由逗號分隔的 prod 組中的所有伺服器。假設變數是列表,變數應該包含類似的值

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_hostfor 循環。但不確定如何

下面的劇本可以完成這項工作

- 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

引用自:https://unix.stackexchange.com/questions/637367