bbricardo/netbox-syncNetBox-Sync 是一款用于将不同来源的数据同步到 NetBox 实例的工具。该工具支持从 VMware vCenter Server 和 check_redfish 清单文件中同步数据,旨在为需要自动化网络状态导入的用户提供中间解决方案,同时保持 NetBox 作为"事实来源"的设计理念。
NetBox-synced 标签,便于识别和管理shell# RedHat/CentOS 7 yum install python36-pip # RedHat/CentOS 8+ yum install python3-pip
shellapt-get update && apt-get install python3-venv
shellcd /opt git clone [***] 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
shell# 在激活的虚拟环境中执行 pip install --upgrade 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: [***] 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"]
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
yamlnetbox: api_token: XYZXYZXYZXYZXYZXYZXYZXYZ source: my-vcenter-example: username: vcenter-readonly password: super-secret
shellkubectl create configmap netbox-sync-config --from-file=settings.yaml kubectl create secret generic netbox-sync-secrets --from-file=secrets.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
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 许可证,详情请参见 完整许可证。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
MacOS OrbStack 容器配置
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务