Libvirt: изменить сетевой интерфейс работающего домена

Virt-Manager может изменять сетевые интерфейсы работающих доменов, например, изменять подключенную сеть.

Я хочу написать это на python с помощью libvirt-API.

import libvirt
conn = libvirt.open('qemu:///system')
deb = conn.lookupByName('Testdebian')
xml = deb.XMLDesc()
xml = replace('old-network-name', 'new-network-name')
deb.undefine()
deb = conn.defineXML(xml)

Но это не работает. Сеть не меняется. Может ли кто-нибудь дать мне совет, как изменить работающий домен с помощью libvirt? Я не мог найти ничего об этом в документах. Но это должно быть возможно, поскольку Virt-Manager может это сделать.

Спасибо за любую помощь.

Редактировать: мне удалось выполнить изменение сети через virsh:

virsh update-device 16 Testdebian.xml

Testdebian.xml должен содержать только интерфейсное устройство, а не весь домен-XML.

Но как мне это сделать через libvirt-API? Кажется, нет способа выполнить обновление устройства через API....


person MPW    schedule 20.11.2016    source источник


Ответы (2)


Я наконец нашел решение:

import libvirt
conn = libvirt.open('qemu:///system')
deb = conn.lookupByName('Testdebian')

deb.updateDeviceFlags(xml)

где xml — строка, содержащая описание устройства.

Я нашел это в JavaDocs от Libvirt, Python и документации C, похоже, не хватает многих функций.

person MPW    schedule 20.11.2016

updateDeviceFlags(xml, flags=0) method of libvirt.virDomain instance
Change a virtual device on a domain, using the flags parameter
to control how the device is changed.  VIR_DOMAIN_AFFECT_CURRENT
specifies that the device change is made based on current domain
state.  VIR_DOMAIN_AFFECT_LIVE specifies that the device shall be
changed on the active domain instance only and is not added to the
persisted domain configuration. VIR_DOMAIN_AFFECT_CONFIG
specifies that the device shall be changed on the persisted domain
configuration only.  Note that the target hypervisor must return an
error if unable to satisfy flags.  E.g. the hypervisor driver will
return failure if LIVE is specified but it only supports modifying the
persisted device allocation.

This method is used for actions such changing CDROM/Floppy device
media, altering the graphics configuration such as password,
reconfiguring the NIC device backend connectivity, etc.

Где VIR_DOMAIN* — константы, определенные в модуле libvirt.

Плохо то, что вы не можете изменить MAC или PCI-адрес таким образом. Например

libvirtError: operation failed: no device matching mac address 68:80:82:e3:7b:4b found on 0000:00:09.0
person Magwan    schedule 11.12.2016
comment
Еще одна плохая вещь заключается в том, что интерфейсы, настроенные для сетевого типа, представлены как мостовые, когда домен активен, поэтому вы не можете использовать группы портов для изменения конфигурации работающего домена. - person Magwan; 11.12.2016