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_hostfor 루프와 함께 사용할 수 있다고 생각합니다 . 하지만 어떻게 해야할지 모르겠어요

답변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

관련 정보