4

Ansible を使用して sshd_config ファイルをセットアップしようとしています。設計上の理由から (NIC が異なる仮想マシンと物理マシンの両方があります)、管理インターフェイスは固定されていないため、私のテンプレートでは

{{ ansible_eth0.ipv4.address }}

どのインターフェースが管理インターフェースになるかは事前にわからないので、それを発見する必要があります。IP が常に範囲内にあることはわかっています (例: 192.168.1.0/24)。

その IP を持つインターフェイスを見つけて、それをテンプレートで使用するにはどうすればよいですか?

4

2 に答える 2

12

Ansible は、ansible_all_ipv4_addressesすべての IP アドレスのリストであるファクトという名前を提供します。

管理 IP を見つけるには、次の作業例を参照してください。

test.yml:

- hosts: all
  gather_facts: yes
  tasks:
    - debug: var=ansible_all_ipv4_addresses
    - set_fact:
        man_ip: "{{ item }}"
      with_items: "{{ ansible_all_ipv4_addresses }}"
      when: "item.startswith('192.168.1')"
    - debug: var=man_ip
  • set_factは、後でプレイで使用できる変数を登録します
  • with_itemsはすべての IP アドレスを繰り返し処理します
  • when: "item.startswith('192.168.1')"は、割り当てを 192.168.1 で始まる IP に制限します

ローカルでテスト プレイを実行します。

ansible-playbook -c local -i localhost, test.yml

変数{{ man_ip }}には、管理 IP アドレスの IP アドレスが含まれます。

于 2014-09-05T13:51:01.287 に答える