Ansible如何获取Windows主机Ethernet网卡MAC地址并存入变量
问题解答
1. ansible_interfaces的类型判断
ansible_interfaces是数组(列表)类型,JSON中以[]包裹的有序元素集合就是数组,它的每一个元素是存储单块网卡全部属性信息的字典。
2. 提取指定网卡MAC地址到自定义变量的方法
你可以直接用Ansible内置过滤器实现筛选赋值,以下是两种常用可行方案:
方法1:selectattr过滤器(无额外依赖,推荐)
不需要安装额外工具,直接在playbook中通过set_fact赋值即可:
- name: 提取Ethernet网卡MAC地址到自定义变量 ansible.builtin.set_fact: ethernet_mac: "{{ ansible_interfaces | selectattr('connection_name', 'equalto', 'Ethernet') | map(attribute='macaddress') | first }}"
赋值完成后可直接通过{{ ethernet_mac }}调用对应MAC值,本次示例中该变量最终取值为A4:AE:11:1C:D5:7F。
方法2:json_query过滤器(适合复杂筛选场景)
如果后续有更复杂的多条件筛选需求可以使用该方案,需要先在Ansible控制节点安装依赖库pip install jmespath:
- name: 提取Ethernet网卡MAC地址到自定义变量 ansible.builtin.set_fact: ethernet_mac: "{{ ansible_interfaces | json_query('[?connection_name==`Ethernet`].macaddress') | first }}"
结果验证
可以新增debug任务确认变量取值是否正确:
- name: 打印获取到的Ethernet网卡MAC地址 ansible.builtin.debug: var: ethernet_mac
内容的提问来源于stack exchange,提问作者hurr1k4ne
相关产品推荐
相关产品推荐

