ansible - 인벤토리에서 모든 호스트 이름 및 해당 ansible_host 값 목록을 가져옵니다.

ansible - 인벤토리에서 모든 호스트 이름 및 해당 ansible_host 값 목록을 가져옵니다.

내 인벤토리는 다음과 같습니다.

db0 ansible_host=10.0.0.1
db1 ansible_host=10.0.0.2
app0 ansible_host=10.0.0.3
app1 ansible_host=10.0.0.4
...

여기에서 다음과 같은 목록을 추출해야 합니다.

- name: db0
  ip: 10.0.0.1
- name: db1
  ip: 10.0.0.2
- name: app0
  ip: 10.0.0.3
- name: app1
  ip: 10.0.0.4

를 사용하여 모든 호스트를 얻을 수 있다는 것을 알고 있습니다 groups['all'].

ansible_host를 사용하여 각 호스트의 값을 얻을 수도 있습니다 hostvars['<hostname>']['ansible_host'].

이것을 결합하여 필요한 목록을 만들려면 어떻게 해야 합니까?

답변1

예를 들어

host_ip: "{{ dict(ansible_play_hosts_all|
                  zip(ansible_play_hosts_all|
                      map('extract', hostvars, 'ansible_host'))) }}"

사전을 생성합니다

  host_ip:
    app0: 10.0.0.3
    app1: 10.0.0.4
    db0: 10.0.0.1
    db1: 10.0.0.2

그런 다음 사용dict2항목목록을 만들려면

host_ip_list: "{{ host_ip|dict2items(key_name='name',
                                     value_name='ip') }}"

예상되는 구조를 제공합니다

  host_ip_list:
  - ip: 10.0.0.1
    name: db0
  - ip: 10.0.0.2
    name: db1
  - ip: 10.0.0.3
    name: app0
  - ip: 10.0.0.4
    name: app1

관련 정보