Ansible

循環網路介面並通過 Ansible 提取 MAC 地址

  • May 3, 2021

如果這是重複的,我很抱歉 - 我在網上找到了一些類似的問題,但無法完全解決問題。

我正在嘗試創建一個在伺服器上查找所有可用網路介面的劇本,然後遍歷它們並提取每個介面的 MAC 地址。然後我希望 Ansible 向使用者列印一條消息。

查找所有介面相當簡單:

 - name: Find NICs
   ansible.builtin.debug:
     msg: Found network interface {{ item }}
   with_items:
   - "{{ ansible_interfaces }}"

這會在作業系統中輸出介面的名稱 - 字元串,例如ens123enp456等等。

查找 MAC 也很簡單:

 - name: Find NICs MAC
   ansible.builtin.debug:
     msg: "{{ ansible_facts[' {{ item }}']['macaddress'] }}"
   with_items:
   - "{{ ansible_interfaces }}"

現在,該{{ item }}變數意味著找到的介面名稱(例如:)ens123。如果我每次都用實際名稱替換它,則該命令有效。

我也知道這可能是通過 shell 完成的一項簡單任務,但它適用於廣泛的系統,因此我正在嘗試僅 Ansible 的解決方案。

我仔細閱讀了文件但無法弄清楚 - 任何幫助將不勝感激。

謝謝!

正如弗拉基米爾(Vladimir)上面建議的那樣,解決方案如下:

msg: "{{ ansible_facts[item]['macaddress']|default(None) }}"

整塊:

 - name: Find NICs MAC
   ansible.builtin.debug:
     msg: " interface {{ item }}'s MAC is {{ ansible_facts[item]['macaddress']|default(None) }}"
   with_items:
   - "{{ ansible_interfaces }}"

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