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

Ansible Netbox自动化:如何根据IP获取对应网络接口名称?

Ansible遍历多IP接口生成IP-接口映射

收集到的接口数据

"interface_ips": {
  "br0": {
    "ipv4": [                
      "10.0.0.10",
      "10.0.0.11"
    ],
    "ipv6": [],
    "mac": "aa:bb:cc:dd:ee:ff",
    "mtu": "1500",
    "type": "bridge"
  },
  "lxcbr0": {
    "ipv4": [
      "10.100.0.10"
    ],
    "ipv6": [],
    "mac": "ff:ee:dd:cc:bb:aa",
    "mtu": "1500",
    "type": "bridge"
  }
}

需求

遍历所有IPv4和IPv6地址,生成每个IP对应的接口名称列表,期望输出:

  • 10.0.0.10 - br0 - host
  • 10.0.0.11 - br0 - host
  • 10.100.0.10 - lxcbr0 - host

尝试的错误任务

仅能获取每个接口的第一个IPv4地址,无法遍历所有地址:

- name: Extract IPv4 addresses and interface names
  set_fact:
    ip_interface_map: "{{ ip_interface_map | default({}) | combine({item.value.ipv4[0]: item.key}) }}"
    loop: "{{ interface_ips | dict2items }}"

解决方案

使用loop遍历每个接口,再通过map处理该接口下的所有IP地址,将其格式化为目标字符串并收集到列表中:

- name: 生成IP-接口映射列表
  set_fact:
    ip_interface_list: >-
      {{
        ip_interface_list | default([]) +
        item.value.ipv4 | map('regex_replace', '^(.*)$', '\1 - ' ~ item.key ~ ' - host') | list +
        item.value.ipv6 | map('regex_replace', '^(.*)$', '\1 - ' ~ item.key ~ ' - host') | list
      }}
  loop: "{{ interface_ips | dict2items }}"

说明

  1. interface_ips | dict2items:将接口字典转换为{key: 接口名, value: 接口详情}的列表格式,方便遍历。
  2. 对每个接口的ipv4和ipv6列表,用map结合regex_replace给每个IP添加接口名和固定后缀- host。
  3. 将处理后的IPv4、IPv6地址列表合并到ip_interface_list中,最终得到所有IP的映射条目。

执行完成后,ip_interface_list变量就会包含你期望的所有条目,可直接用于后续输出或Netbox自动化操作。

内容的提问来源于stack exchange,提问作者Mateusz Jasek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 20:43:25