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

如何通过NetBox API对接本地脚本实现设备数据自动入库?

实现NetBox网段扫描自动入库方案

一、在NetBox中添加网段输入交互区域

用NetBox自带的**自定义脚本(Custom Scripts)**快速实现网段输入功能,无需复杂插件开发:

  1. 登录NetBox后台,进入「Scripts」页面
  2. 创建新脚本,继承extras.scripts.Script类,添加网段输入字段:
from extras.scripts import Script, StringVar
import requests
import pynetbox

class ScanAndImport(Script):
    # 定义网段输入框
    target_cidr = StringVar(
        description="输入要扫描的IP网段(如192.168.104.0/24)",
        required=True
    )

    class Meta:
        name = "网段扫描并入库"
        description = "输入IP网段,调用本地扫描API获取设备信息并导入NetBox"

二、对接本地扫描API获取结果

在脚本中添加调用本地API的逻辑,传入网段参数并接收结构化扫描结果:

def run(self, data, commit):
    # 本地扫描API地址
    scan_api_url = "http://你的本地API地址/scan"
    # 发送POST请求携带网段参数
    response = requests.post(scan_api_url, json={"cidr": data["target_cidr"]})
    if response.status_code != 200:
        return f"扫描API调用失败:{response.text}"
    
    scan_results = response.json()
    self.log_info(f"成功获取{len(scan_results)}条设备扫描结果")

三、解析结果并写入NetBox数据库

使用pynetbox客户端连接NetBox,将扫描到的MAC、主机名、虚拟机属性等信息入库:

  1. 先在NetBox中创建好对应的设备角色、厂商等基础数据(比如「虚拟机」角色)
  2. 在脚本中添加入库逻辑:
# 初始化NetBox客户端
    nb = pynetbox.api(
        "http://你的NetBox地址",
        token="你的NetBox API令牌"
    )

    for device in scan_results:
        # 检查IP地址是否已存在
        ip_obj = nb.ipam.ip_addresses.get(address=device["ip_address"])
        if not ip_obj:
            ip_obj = nb.ipam.ip_addresses.create(address=device["ip_address"], status="active")
        
        # 准备设备数据
        device_data = {
            "name": device["hostname"],
            "role": nb.dcim.device_roles.get(name="虚拟机" if device["is_vm"] else "物理设备").id,
            "status": "active",
            "primary_ip4": ip_obj.id
        }

        # 检查设备是否已存在,不存在则创建
        existing_device = nb.dcim.devices.get(name=device["hostname"])
        if not existing_device:
            new_device = nb.dcim.devices.create(**device_data)
            # 添加MAC地址到设备接口
            interface = nb.dcim.interfaces.create(
                device=new_device.id,
                name="eth0",
                mac_address=device["mac_address"]
            )
            self.log_success(f"成功导入设备:{device['hostname']}")
        else:
            self.log_info(f"设备{device['hostname']}已存在,跳过")
    
    return "扫描入库流程完成"

四、测试验证

  1. 在NetBox的「Scripts」页面运行该脚本,输入192.168.104.0/24
  2. 查看脚本日志,确认扫描结果正常获取并入库
  3. 进入NetBox的「Devices」和「IP Addresses」页面,验证数据是否正确添加

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 05:22:37