Netbox批量添加设备

1、Netbox搭建完成后,需要将实际中的设备信息添加进入Netbox系统

2、需要提前在系统中配置好相关参数(站点、位置、机柜、设备角色、厂商、设备类型、Vlans等相关想信息,如果不配置会让脚本显得稍微复杂,我已经写好了相关参数)

详细脚本如下

import pynetbox

# 配置NetBox实例URL和API令牌
#API在管理员栏,API Tokens里面创建
nb_url = 'http://10.8.110.48/'
token = 'f6b0247f80a3abea244843f9d0661b749494527f'

# 连接到NetBox API
nb = pynetbox.api(nb_url, token=token)

# 设备列表
devices = [
    {
        'name': '2box-B-jieru5',
        'device_type': 'S5735-L48T4S-A1',
        'device_role': '接入层交换机',
        'site': '江夏基地',
        'rack': 'B3柜',
        'position': 10,
        'primary_ip': '10.5.5.151/24',
        'vlan_name': 'Vlan100' },
    {
        'name': '2box-B-jieru6',
        'device_type': 'S5735-L48T4S-A1',
        'device_role': '接入层交换机',
       'site': '江夏基地',
        'rack': 'B3柜',
        'position': 20,
        'primary_ip': '10.5.5.152/24',
        'vlan_name': 'Vlan100'
    },
]

# 批量添加设备
for device in devices:
    # 获取相关对象的ID
    device_types = nb.dcim.device_types.filter(model=device['device_type'])
    device_roles = nb.dcim.device_roles.filter(name=device['device_role'])
    sites = nb.dcim.sites.filter(name=device['site'])
    racks = nb.dcim.racks.filter(name=device['rack'])


    device_type = list(device_types)[0] if device_types else None
    device_role = list(device_roles)[0] if device_roles else None
    site = list(sites)[0] if sites else None
    rack = list(racks)[0] if racks else None

    # 打印调试信息
    print(f"Device: {device['name']}")
    print(f"Device Type: {device_type}")
    print(f"Device Role: {device_role}")
    print(f"Site: {site}")
    print(f"Rack: {rack}")

    # 检查是否获取到所有必要对象
    if not device_type:
        print(f"Error: Cannot find device_type '{device['device_type']}' for {device['name']}.")
        continue
    if not device_role:
        print(f"Error: Cannot find device_role '{device['device_role']}' for {device['name']}.")
        continue
    if not site:
        print(f"Error: Cannot find site '{device['site']}' for {device['name']}.")
        continue
    if not rack:
        print(f"Error: Cannot find rack '{device['rack']}' for {device['name']}.")
        continue


    # 创建设备
    new_device = nb.dcim.devices.create(
        name=device['name'],
        device_type=device_type.id,
        role=device_role.id,
        site=site.id,
        rack=rack.id,
        position=device['position'],
        face='front',  # 设置设备安装在机架的前面
    )
    print(f"Successfully added {device['name']} with ID {new_device.id}.")


    # 确保VLAN接口存在
    interfaces = nb.dcim.interfaces.filter(device_id=new_device.id, name=device['vlan_name'])
    if not interfaces:
        interface = nb.dcim.interfaces.create(
            device=new_device.id,
            name=device['vlan_name'],
            type='virtual',  # 假设VLAN接口是虚拟接口
        )
        print(f"Created interface {device['vlan_name']} for {device['name']}.")
    else:
        interface = interfaces[0]


        # 分配IP地址到VLAN接口
    if 'primary_ip' in device:
        # 检查IP地址是否已经存在
        ip_addresses = nb.ipam.ip_addresses.filter(address=device['primary_ip'])
        ip_addresses_list = list(ip_addresses)  # 将RecordSet对象转换为列表
        if not ip_addresses_list:
            ip_address = nb.ipam.ip_addresses.create(
                address=device['primary_ip'],
                assigned_object_type='dcim.interface',
                assigned_object_id=interface.id,
            )
        else:
            ip_address = ip_addresses_list[0]
            # 更新IP地址的分配对象
            ip_address.update({
                'assigned_object_type': 'dcim.interface',
                'assigned_object_id': interface.id,
            })

        # 设置为主要IP地址
        new_device.update({'primary_ip4': ip_address.id})
        print(f"Successfully assigned IP {device['primary_ip']} to {device['name']} on interface {interface.name}.")
    else:
        print(f"Error: Primary IP address is missing for {device['name']}.")


print("All devices processed.")

vlans、IP地址、设备,名称以实际为准。

当有很多台设备的时候,采用把上面把设备信息包含在代码里面不现实,后续更新脚本读取表格(CSV)的方式来添加设备,链接为CSV格式批量添加 

Continueding

https://mp.csdn.net/mp_blog/creation/editor?not_checkout=1

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"Powered by Netbox" 是指由Netbox提供支持。Netbox是一种开源工具,它是一个用于数据中心网络管理的Web应用程序。它的主要功能包括IP地址管理(IPAM)、设备追踪、操作系统管理和电缆管理等。通过Netbox,网络管理员可以轻松地管理和维护一个大型数据中心的网络基础设施。 Netbox的IPAM功能使管理员能够精确管理和控制网络中的IP地址分配。它提供了一个直观的界面,让管理员可以查看和编辑IP地址,轻松地添加、删除和修改地址,以及跟踪地址的使用情况。此外,Netbox还提供了与其他网络管理工具的集成,使管理员能够更好地协调和管理IP地址。 在设备追踪方面,Netbox可以记录并跟踪网络设备的详细信息,如设备型号、序列号和位置等。管理员可以轻松地查看和编辑设备信息,以及查找特定设备的位置和连接信息。这对于维护和维护设备非常有用,尤其是在一个庞大的数据中心网络中。 此外,Netbox还提供了操作系统管理功能,允许管理员记录和管理网络设备上安装的操作系统信息。管理员可以轻松地查看和编辑操作系统信息,以及为设备分配和管理操作系统。 最后,Netbox还提供了电缆管理功能,使管理员能够记录和管理网络设备之间的物理连接。管理员可以轻松地查看和编辑电缆信息,以及查找特定设备之间的连接信息。这在维护和扩展网络设备时非常有用。 总而言之,“Powered by Netbox”表示基于Netbox的功能和性能,网络管理员可以更轻松地管理和维护数据中心的网络基础设施。它提供了强大的IPAM、设备追踪、操作系统管理和电缆管理功能,使管理员能够高效地管理一个大型数据中心的网络。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值