Netbox添加批量添加设(CSV格式)

接上面添加设备的文章


1、少量的设备添加,可以通过将设备信息写入脚本里面。但是如果有几百台,通过在脚本里面写不现实。可以将设备信息写入CSV文件,然让脚本读取CSV文件内容,从而实现批量添加设备。

2、在win上将设备的信息编辑好,复制到linux里面,创建一个CSV格式的文件

3、linux的中生成的CSV文件是在字符之间有规则空格,要将空格替换成逗哈“,”

使用awk 来进行替换,将aaa.cvs文件里面的空格替换为“,”逗号,然后生成111_modified.csv文件

这样Python就可以读取了

awk '{$1=$1; gsub(/ /,","); print}' aaa.csv > 111_modified.csv
 

批量添加代码如下

import csv
import pynetbox

# 配置NetBox实例URL和API令牌
nb_url = 'http://10.8.110.48/'
token = 'f6b0247f80a3abea244843f9d0661b749494527f'

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

# 读取CSV文件
devices = []
with open('111.csv', mode='r', encoding='utf-8') as file:
    csv_reader = csv.DictReader(file)
    for row in csv_reader:
        devices.append(row)


        # 批量添加设备
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.")

  • 1
    点赞
  • 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、付费专栏及课程。

余额充值