작업에 정의되지 않은 변수가 있는 옵션이 포함되어 있습니다. 오류는 정의되지
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"