循环网络接口并通过 Ansible 提取 MAC 地址

循环网络接口并通过 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 的解决方案。

我仔细研究了文档,但无法弄清楚 - 任何帮助将不胜感激。

谢谢!

答案1

正如弗拉基米尔上面建议的,解决方案如下:

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 }}"

相关内容