如何用Python获取NetBox虚拟机数据?修改脚本遇NameError问题求助
正确的NetBox虚拟机数据导出CSV脚本
错误原因
你遇到的NameError是因为NetBox Python API中,虚拟机的属性名是**virtual_machines**(下划线分隔),而非virtual-machines。Python不允许标识符包含连字符,virtual-machines会被解释为virtual减去machines,从而触发machines未定义的错误。
完整正确脚本
import csv # 假设nb是已初始化完成的NetBox API客户端实例 vms = nb.virtualization.virtual_machines.all() csv_file_path = 'netbox_vms.csv' with open(csv_file_path, mode='w', newline='') as csv_file: csv_writer = csv.writer(csv_file) # 定义适配虚拟机的CSV表头 csv_writer.writerow(['Name', 'Cluster', 'Role', 'vCPUs', 'Memory (GB)', 'Disk (GB)', 'Status']) for vm in vms: # 处理可能为空的字段,避免报错 cluster_name = vm.cluster.name if vm.cluster else 'N/A' role_name = vm.role.name if vm.role else 'N/A' memory_gb = vm.memory / 1024 if vm.memory else 0 # 将NetBox默认的MB单位转换为GB disk_gb = vm.disk if vm.disk else 0 status = vm.status.value csv_writer.writerow([ vm.name, cluster_name, role_name, vm.vcpus, memory_gb, disk_gb, status ])
关键说明
- 修正了API路径:将错误的
virtual-machines替换为符合规范的virtual_machines。 - 调整了字段映射:虚拟机无物理设备的制造商、序列号等属性,改用集群、vCPU数、内存等虚拟机专属字段。
- 增加空值处理:对可能为空的集群、角色等字段设置默认值,避免运行时抛出
AttributeError。
内容的提问来源于stack exchange,提问作者dr_
相关产品推荐
相关产品推荐

