我有一个清单文件,其中定义了一组服务器
[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