Ansible
循環網路介面並通過 Ansible 提取 MAC 地址
如果這是重複的,我很抱歉 - 我在網上找到了一些類似的問題,但無法完全解決問題。
我正在嘗試創建一個在伺服器上查找所有可用網路介面的劇本,然後遍歷它們並提取每個介面的 MAC 地址。然後我希望 Ansible 向使用者列印一條消息。
查找所有介面相當簡單:
- name: Find NICs ansible.builtin.debug: msg: Found network interface {{ item }} with_items: - "{{ ansible_interfaces }}"
這會在作業系統中輸出介面的名稱 - 字元串,例如
ens123
,enp456
等等。查找 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 }}"