Networking

Ansible 事實未定義:ansible_all_ipv4_addresses 未定義

  • February 27, 2022

該任務包括一個帶有未定義變數的選項。錯誤是: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"
}

對我來說,問題是我的劇本有

gather_facts: false

設置在我的劇本的頂部。至於為什麼事實的使用不適用於調試模組,請參閱這個問題

對我來說,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"

引用自:https://unix.stackexchange.com/questions/561299