Ansible ファクトが定義されていません: `ansible_all_ipv4_addresses` が定義されていません。

Ansible ファクトが定義されていません: `ansible_all_ipv4_addresses` が定義されていません。

ジョブに定義されていない変数を含むオプションが含まれています。エラーは定義されていansible_all_ipv4_addressesません。

ipv4経由で接続するとこのエラーが発生するのはなぜですか?捨てようとしていますが、

"{{ ansible_all_ipv4_addresses[0] }}"

動作しているか確認できますが、

$ ansible -u centos -m setup 10.1.38.15 | grep ansible_all_ipv4_addresses -A2 -B1
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "172.16.0.13"
        ],

しかし、上記と非常に似ています。

$ ansible -u centos -m debug -a "msg='{{ansible_all_ipv4_addresses}}'" 10.1.38.15
10.1.38.15 | FAILED! => {
    "msg": "The task includes an option with an undefined variable. The error was: 'ansible_all_ipv4_addresses' is undefined"
}

答え1

私にとって問題は私のスクリプトです

gather_facts: false

私のスクリプトの上部に設定します。デバッグモジュールで実際に使用が機能しない理由は、この質問を参照してください。

答え2

私にとって、dockerのUbuntuにはデフォルトでiproute2パッケージがありません。

私はCentOSを使っていると思いますが、これがGoogleの最初のリンクだったので言及する価値があると思いました。このスレッド、実際に答えを見つけました。

誰かが役に立つと思う場合に備えて、スクリプトに追加したブロックは次のとおりです。

---
- name: Install iproute2 on ubuntu to gather facts properly
  block:
    - name: install iproute
      apt:
        name: iproute2
        state: present
    - name: Recollect facts
      ansible.builtin.setup:
        gather_subset:
          - all
    - debug: msg="{{ hostvars[inventory_hostname]['ansible_all_ipv4_addresses'] }}"
  when: ansible_distribution == "Ubuntu"

関連情報