
NetBox-Sync 是一款用于将不同来源的数据同步到 NetBox 实例的工具。该工具支持从 VMware vCenter Server 和 check_redfish 清单文件中同步数据,旨在为需要自动化网络状态导入的用户提供中间解决方案,同时保持 NetBox 作为"事实来源"的设计理念。
NetBox-synced 标签,便于识别和管理软件要求
环境要求
数据源要求
RedHat 系操作系统
shell# RedHat/CentOS 7 yum install python36-pip # RedHat/CentOS 8+ yum install python3-pip
Ubuntu 18.04/20.04/22.04
shellapt-get update && apt-get install python3-venv
克隆仓库并安装依赖
shellcd /opt git clone https://github.com/bb-Ricardo/netbox-sync.git cd netbox-sync python3 -m venv .venv . .venv/bin/activate pip3 install --upgrade pip || pip install --upgrade pip pip3 install wheel || pip install wheel # 对于 Python 3.6,请使用 requirements_3.6.txt pip3 install -r requirements.txt || pip install -r requirements.txt
VMware 标签同步支持(如需要)
shell# 在激活的虚拟环境中执行 pip install --upgrade git+https://github.com/vmware/vsphere-automation-sdk-python.git
需要一个具有以下权限的 NetBox API 令牌:
基本用法
usage: netbox-sync.py [-h] [-c settings.ini [settings.ini ...]] [-g] [-l {DEBUG3,DEBUG2,DEBUG,INFO,WARNING,ERROR}] [-n] [-p] Sync objects from various sources to NetBox Version: 1.8.0 (2025-03-07) Project URL: https://github.com/bb-Ricardo/netbox-sync options: -h, --help 显示帮助信息并退出 -c settings.ini [settings.ini ...] 指定配置文件路径 -g, --generate_config 生成默认配置文件 -l {DEBUG3,DEBUG2,DEBUG,INFO,WARNING,ERROR} 设置日志级别(覆盖配置) -n, --dry_run 模拟运行,不实际修改 NetBox 数据 -p, --purge 删除所有由该脚本创建的同步对象
测试建议
建议使用 DEBUG2 日志级别和干运行选项 -n 进行测试,以避免直接修改 NetBox 数据:
shell/opt/netbox-sync/netbox-sync.py -l DEBUG2 -n
NetBox-Sync 支持两种配置方式,可以组合使用:
./settings.ini)配置文件
支持的配置文件类型:
可以指定多个配置文件,按顺序解析并覆盖相同配置项:
bash/opt/netbox-sync/netbox-sync.py -c common.ini all-sources.yaml additional-config.yaml
生成配置文件示例:
bash# 生成 ini 格式示例配置 /opt/netbox-sync/netbox-sync.py -g -c settings-example.ini # 生成 yaml 格式示例配置 /opt/netbox-sync/netbox-sync.py -g -c settings-example.yaml
环境变量
所有配置项都可以通过环境变量设置,前缀为 NBS,格式如下:
NBS_<SECTION_NAME>_<CONFIG_OPTION_KEY>=value
示例:
bash# 等同于在配置文件中设置 common.log_level = DEBUG2 NBS_COMMON_LOG_LEVEL="DEBUG2" # 等同于在配置文件中设置 netbox.host_fqdn = netbox-host.example.com NBS_NETBOX_HOST_FQDN="netbox-host.example.com"
数据源配置需要使用索引:
bash# 定义一个名为 example-vcenter 的数据源 NBS_SOURCE_1_NAME="example-vcenter" NBS_SOURCE_1_PASSWORD="super-secret-password" NBS_SOURCE_1_CUSTOM_DNS_SERVERS="10.0.23.23, 10.0.42.42"
构建镜像
shelldocker build -t bbricardo/netbox-sync:latest .
运行容器
shelldocker run --rm -it -v $(pwd)/settings.ini:/app/settings.ini bbricardo/netbox-sync:latest
使用环境变量配置
shelldocker run --rm -it \ -e NBS_NETBOX_HOST_FQDN="netbox.example.com" \ -e NBS_NETBOX_API_KEY="your-api-key" \ -e NBS_SOURCE_1_NAME="vcenter-source" \ -e NBS_SOURCE_1_TYPE="vmware" \ -e NBS_SOURCE_1_HOST_FQDN="vcenter.example.com" \ -e NBS_SOURCE_1_USERNAME="vcenter-readonly" \ -e NBS_SOURCE_1_PASSWORD="secret" \ bbricardo/netbox-sync:latest
yamlversion: '3.8' services: netbox-sync: image: bbricardo/netbox-sync:latest container_name: netbox-sync restart: unless-stopped environment: - NBS_COMMON_LOG_LEVEL=INFO - NBS_NETBOX_HOST_FQDN=netbox.example.com - NBS_NETBOX_API_KEY=${NETBOX_API_KEY} - NBS_NETBOX_PRUNE_ENABLED=true - NBS_SOURCE_1_NAME=vcenter-main - NBS_SOURCE_1_TYPE=vmware - NBS_SOURCE_1_HOST_FQDN=vcenter.example.com - NBS_SOURCE_1_USERNAME=${VCENTER_USERNAME} - NBS_SOURCE_1_PASSWORD=${VCENTER_PASSWORD} volumes: - ./config:/app/config command: ["-c", "/app/config/settings.yaml"]
创建配置文件 (settings.yaml)
yamlnetbox: host_fqdn: netbox.example.com prune_enabled: true source: my-vcenter-example: type: vmware host_fqdn: vcenter.example.com permitted_subnets: 172.16.0.0/12, 10.0.0.0/8, 192.168.0.0/16, fd00::/8
创建密钥文件 (secrets.yaml)
yamlnetbox: api_token: XYZXYZXYZXYZXYZXYZXYZXYZ source: my-vcenter-example: username: vcenter-readonly password: super-secret
创建 Kubernetes 资源
shellkubectl create configmap netbox-sync-config --from-file=settings.yaml kubectl create secret generic netbox-sync-secrets --from-file=secrets.yaml
CronJob 配置 (k8s-netbox-sync-cronjob.yaml)
yamlapiVersion: batch/v1 kind: CronJob metadata: name: netbox-sync spec: schedule: "23 */2 * * *" jobTemplate: spec: template: spec: containers: - name: netbox-sync image: bbricardo/netbox-sync:latest volumeMounts: - name: config-volume mountPath: /app/config - name: secret-volume mountPath: /app/secrets readOnly: true command: ["/app/netbox-sync.py", "-c", "/app/config/settings.yaml", "/app/secrets/secrets.yaml"] volumes: - name: config-volume configMap: name: netbox-sync-config - name: secret-volume secret: secretName: netbox-sync-secrets restartPolicy: OnFailure
部署 CronJob
shellkubectl apply -f k8s-netbox-sync-cronjob.yaml
在 Linux 系统中,可以通过 cron 定时运行同步任务:
shell# 编辑 crontab crontab -e # 添加以下行(每2小时的第23分钟运行) 23 */2 * * * /opt/netbox-sync/.venv/bin/python3 /opt/netbox-sync/netbox-sync.py >/dev/null 2>&1
可以配置多个相同类型的数据源,例如多个 vCenter 实例:
ini[source/vcenter-BLN] enabled = True host_fqdn = vcenter1.berlin.example.com [source/vcenter-NYC] enabled = True host_fqdn = vcenter2.new-york.example.com
NetBox 中不再存在于任何数据源的对象将被清理:
支持清理的对象类型:
其他对象(如 VLAN、集群、制造商)将保留来源标签但不会被删除,因为它们可能被其他 NetBox 对象使用。
NetBox-Sync 采用 MIT 许可证,详情请参见 https://github.com/bb-Ricardo/netbox-sync/blob/main/LICENSE.txt%E3%80%82



探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务