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"

관련 정보