python - 使用 libvirt 获取来宾 KVM 的 Mac 地址
问题描述
我目前正在尝试获取mac地址,但我有点困惑。当我尝试
import libvirt # To connect to the hypervisor
# Connect to your local hypervisor. See https://libvirt.org/uri.html
conn = libvirt.open('qemu+ssh://%s/system' % servidor.ubicacion_ip) # Open the hypervisor in read-only mode
# conn = libvirt.open(None) # Open the default hypervisor in read-write mode (require
if conn == None:
raise Exception('Failed to open connection to the hypervisor')
dom = conn.lookupByName('userid_%s_servidor_%s.qcow2' % (user.id, servidor.id))
但是当我在 libvirt 中检查来宾python api 命令时,但c api 命令似乎表明它应该有办法获取 mac 地址?
解决方案
好的,所以我找到了一种方法,使用 libvirt 输出的 xml 解析。
from salt._compat import StringIO as _StringIO
from salt.exceptions import CommandExecutionError
from xml.dom import minidom
# Connect to your local hypervisor. See https://libvirt.org/uri.html
conn = libvirt.open('qemu+ssh://%s/system' % servidor.ubicacion_ip) # Open the hypervisor in read-only mode
# conn = libvirt.open(None) # Open the default hypervisor in read-write mode (require
if conn == None:
raise Exception('Failed to open connection to the hypervisor')
this_vm = conn.lookupByName('userid_%s_servidor_%s.qcow2' % (user.id, servidor.id))
macs = []
doc = minidom.parse(_StringIO(this_vm.XMLDesc(0)))
for node in doc.getElementsByTagName('devices'):
i_nodes = node.getElementsByTagName('interface')
for i_node in i_nodes:
for v_node in i_node.getElementsByTagName('mac'):
macs.append(v_node.getAttribute('address'))
推荐阅读
- python - 在 PyTest 如何配置 CaptureManager 插件错误“CaptureManager”对象没有属性“suspendcapture”
- python - python中检查同一个桶中是否存在多个s3键的最有效方法是什么?
- angular6 - Angular、Maven 之类的项目
- sql-server - SSIS 中的 ISNULL 函数
- linux - 从两行中提取文本
- ios - 线程 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) Swift
- html - Django 页脚位于页面中间
- javascript - 课堂风格不起作用
- ruby-on-rails - Fushion 图表 pie3d 在 ruby on rails 上无法正常工作
- java - 使用 java8 流 api 为限制 10 累积查找索引