ショーのすべてのホストのリストとそのホストの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