You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Jinja2模板提取匹配ansible_host的接口MAC地址生成DHCP预留文件?

从Ansible库存中提取匹配ansible_host的MAC地址(Jinja2实现)

核心需求

从库存的interfaces数组里,找到IP地址与ansible_host匹配的接口,提取对应的mac_address值。注意库存中IP地址带子网掩码(如192.171.130.8/32),需要先剥离子网部分再做匹配。

实现代码

{% set target_ip = hostvars[host].ansible_host %}
{% set matching_interface = hostvars[host].interfaces 
    | selectattr('ip_addresses', 'any', 
        lambda ip_entry: ip_entry.address.split('/')[0] == target_ip) 
    | first %}
{{ matching_interface.mac_address }}

代码解释

  • 先把目标IP(ansible_host的值)存入target_ip变量,方便后续复用。
  • 用selectattr过滤interfaces数组:
    • 检查每个接口的ip_addresses列表,通过lambda函数剥离IP的子网部分(split('/')[0]),和target_ip做匹配。
    • any表示只要ip_addresses里有一个IP匹配就符合条件。
  • | first取第一个匹配的接口(默认一个IP对应唯一接口)。
  • 最后输出该接口的MAC地址。

边界处理(可选)

如果担心出现无匹配接口的情况,可以添加默认值:

{{ matching_interface.mac_address | default('unknown') }}

示例验证

针对你提供的库存数据:

  • ansible_host为192.171.130.8,会匹配到第一个接口,输出结果为:C8-F1-13-78-9E-E7

内容的提问来源于stack exchange,提问作者Damien Dye

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 23:32:19