On 11/19/2014 05:50 AM, Wang Rui wrote: > We can change vnc password by using virDomainUpdateDeviceFlags API with > live flag. But it can't be changed with config flag. Error is reported as > below. > > error: Operation not supported: persistent update of device 'graphics' is not supported > > This patch supports the vnc/spice auth arguments changed with config flag. > > Signed-off-by: Wang Rui <moon.wangrui@xxxxxxxxxx> > --- > src/conf/domain_conf.c | 3 ++- > src/qemu/qemu_driver.c | 38 +++++++++++++++++++++++++++++++++++++- > 2 files changed, 39 insertions(+), 2 deletions(-) > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index 5f4b9f6..5879f54 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -20847,7 +20847,8 @@ virDomainDeviceDefCopy(virDomainDeviceDefPtr src, > rc = virDomainControllerDefFormat(&buf, src->data.controller, flags); > break; > case VIR_DOMAIN_DEVICE_GRAPHICS: > - rc = virDomainGraphicsDefFormat(&buf, src->data.graphics, flags); > + rc = virDomainGraphicsDefFormat(&buf, src->data.graphics, > + flags | VIR_DOMAIN_XML_SECURE); I'd rather add the flag to the 'flags' variable initialization. (It has no effect on formatting other devices anyway). > break; > case VIR_DOMAIN_DEVICE_HUB: > rc = virDomainHubDefFormat(&buf, src->data.hub, flags); > diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c > index a84fd47..3096ae4 100644 > --- a/src/qemu/qemu_driver.c > +++ b/src/qemu/qemu_driver.c > @@ -7397,11 +7397,48 @@ qemuDomainUpdateDeviceConfig(virQEMUCapsPtr qemuCaps, > virDomainDefPtr vmdef, > virDomainDeviceDefPtr dev) > { > + virDomainGraphicsDefPtr graphics, newGraphics; > virDomainDiskDefPtr orig, disk; > virDomainNetDefPtr net; > int pos; > > switch ((virDomainDeviceType) dev->type) { > + case VIR_DOMAIN_DEVICE_GRAPHICS: > + newGraphics = dev->data.graphics; > + graphics = qemuDomainFindGraphics(vmdef, newGraphics); > + if (!graphics) { > + virReportError(VIR_ERR_INTERNAL_ERROR, > + _("cannot find existing graphics type '%s' device to modify"), > + virDomainGraphicsTypeToString(newGraphics->type)); > + return -1; > + } > + switch (graphics->type) { > + case VIR_DOMAIN_GRAPHICS_TYPE_VNC: > + VIR_FREE(graphics->data.vnc.auth.passwd); > + graphics->data.vnc.auth.passwd = newGraphics->data.vnc.auth.passwd; > + newGraphics->data.vnc.auth.passwd = NULL; > + graphics->data.vnc.auth.validTo = newGraphics->data.vnc.auth.validTo; > + graphics->data.vnc.auth.expires = newGraphics->data.vnc.auth.expires; > + graphics->data.vnc.auth.connected = newGraphics->data.vnc.auth.connected; > + break; > + > + case VIR_DOMAIN_GRAPHICS_TYPE_SPICE: > + VIR_FREE(graphics->data.spice.auth.passwd); > + graphics->data.spice.auth.passwd = newGraphics->data.spice.auth.passwd; > + newGraphics->data.spice.auth.passwd = NULL; > + graphics->data.spice.auth.validTo = newGraphics->data.spice.auth.validTo; > + graphics->data.spice.auth.expires = newGraphics->data.spice.auth.expires; > + graphics->data.spice.auth.connected = newGraphics->data.spice.auth.connected; > + break; > + We can just free the old device and replace it with the new one, like we do for DEVICE_NET. (This will also make it work for other graphics types) Jan > + default: > + virReportError(VIR_ERR_INTERNAL_ERROR, > + _("unable to change config on '%s' graphics type"), > + virDomainGraphicsTypeToString(newGraphics->type)); > + return -1; > + } > + break; > + > case VIR_DOMAIN_DEVICE_DISK: > disk = dev->data.disk; > pos = virDomainDiskIndexByName(vmdef, disk->dst, false); > @@ -7455,7 +7492,6 @@ qemuDomainUpdateDeviceConfig(virQEMUCapsPtr qemuCaps, > case VIR_DOMAIN_DEVICE_SOUND: > case VIR_DOMAIN_DEVICE_VIDEO: > case VIR_DOMAIN_DEVICE_WATCHDOG: > - case VIR_DOMAIN_DEVICE_GRAPHICS: > case VIR_DOMAIN_DEVICE_HUB: > case VIR_DOMAIN_DEVICE_SMARTCARD: > case VIR_DOMAIN_DEVICE_MEMBALLOON: >
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list