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

関連情報