ansible에서 play_hosts 및 해당 eth0 IP 주소 사전을 생성합니다.

ansible에서 play_hosts 및 해당 eth0 IP 주소 사전을 생성합니다.

쇼의 모든 호스트 목록과 해당 호스트의 eth0 IP 주소를 어떻게 생성합니까? 나는 다음과 같은 목록을 원합니다.

host2ip:
  - host1: 10.0.0.1
  - host2: 10.0.0.2
  - host3: 10.0.0.3

답변1

하위 집합 가져오기 및 변수 설정아이피. 의 가치아이피목록이 될 것입니다. 왜냐하면상호 작용IP 주소가 더 있을 수 있습니다.

    - setup:
        gather_subset: interfaces
    - set_fact:
        ip: "{{ lookup('vars', 'ansible_' ~ interface).ipv4 |
                map(attribute='address') }}"

성명상호 작용호스트와 해당 IP 주소의 사전입니다. 예를 들어,

    interface: em0
    host_ip: "{{ dict(ansible_play_hosts |
                      zip(ansible_play_hosts |
                          map('extract', hostvars, 'ip'))) }}"

이 사전은 자주 사용되는 패턴입니다. 바라보다사전(키|zip(값)).

예를 들어, 주어진

  host_ip:
    test_01: [10.1.0.51]
    test_02: [10.1.0.52]
    test_03: [10.1.0.53]

이 경우 사전이 더 나은 구조입니다. 반복하고 싶다면 목록으로 쉽게 변환할 수 있습니다. 예를 들어,

  host_ip | dict2items:
    - key: test_01
      value: [10.1.0.51]
    - key: test_02
      value: [10.1.0.52]
    - key: test_03
      value: [10.1.0.53]

체크리스트를 요구하는 경우 다음 진술을 작성하십시오.

    host_ip_list: |
      {% filter from_yaml %}
      {% for host in ansible_play_hosts %}
      - {{ host }}: {{ hostvars[host]['ip'] | first }}
      {% endfor %}
      {% endfilter %}

첫 번째 주소 선택을 포함하여 원하는 것을 제공하십시오

  host_ip_list:
  - test_01: 10.1.0.51
  - test_02: 10.1.0.52
  - test_03: 10.1.0.53

테스트를 위한 완전한 플레이북 예시

- hosts: test

  vars:
    interface: em0
    host_ip: "{{ dict(ansible_play_hosts |
                      zip(ansible_play_hosts |
                          map('extract', hostvars, 'ip'))) }}"
    host_ip_list: |
      {% filter from_yaml %}
      {% for host in ansible_play_hosts %}
      - {{ host }}: {{ hostvars[host]['ip'] | first }}
      {% endfor %}
      {% endfilter %}
    
  tasks:

    - setup:
        gather_subset: interfaces
    - set_fact:
        ip: "{{ lookup('vars', 'ansible_' ~ interface).ipv4 |
                map(attribute='address') }}"
    - debug:
        var: ip

    - block:
        - debug:
            var: host_ip | to_yaml
        - debug:
            var: host_ip | dict2items | to_yaml
        - debug:
            var: host_ip_list
      run_once: true

관련 정보