如果这是重复的,我很抱歉 - 我在网上发现了一些类似的问题,但无法完全解决任何问题。
我正在尝试创建一个剧本,查找服务器上所有可用的网络接口,然后循环它们并提取每个接口的 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 }}"