서버 세트를 정의하는 매니페스트 파일이 있습니다.
[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