Re: Domain XML of a restored VM

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]


On Mon, Jun 13, 2022 at 05:15:13PM +0200, Michal Prívozník wrote:
> On 6/10/22 15:31, Tomáš Golembiovský wrote:
> > Hi,
> > 
> > I am looking for clarification on what exactly is happening to the
> > domain XML when resuming a suspended VM. We would like to make sure we
> > don't lose any configuration and we also see some unexpected behavior.
> > 
> > The VM with the name/UUID same as resumed VM may or may not already
> > exist. If it does, what role does the original domain XML of a VM play
> > when resuming? Is there any merging taking place between the existing
> > domain XML and the domain XML stored in save image? Is the original XML
> > simply thrown away and replaced?
> > 
> A guest can have up to two XMLs:
> 1) defined guests have so called 'inactive' or 'config' XML. This XML
> does not contain any runtime information, and is used as the initial
> configuration when starting the guest. Once the guest is running, it'll
> also have ...

I see, so this confirms it. When restoring a running VM this XML is not
taken into account at all.

> 2) live XML. This XML contains runtime information and because of
> hotplug and plenty of APIs that tweak various XML knobs
> (virDomainSetMemoryParameters(), virDomainSetInterfaceParameters(),
> etc.) can be very different to the inactive XML. Changes to the live XML
> are thrown away as soon as the guest is shut off and we're back to
> square 1 where only the inactive XML is preserved (and used as the
> initial config for the next run).
> However, this live XML is very important because it reflects the guest
> ABI. For instance, some of our APIs offer a way for users to supply
> modified domain XML (as you say below, virDomainRestoreFlags() is onw of
> them, migration APIs are another). After this user supplied XML is
> parsed, it's thrown at an excessive ABI stability checker, who's only
> goal is to make sure that the live XML maintained by Libvirt and the
> user provided XML differ only in those ways that won't break guest ABI
> (for instance, changing the port where SPICE is allowed, removing a
> <disk/> isn't).
> Having said all of this - the XML that's saved among the domain by
> virDomainSave() API is the live XML. Because that's the one that
> reflects the current state of the saved image. Inactive XML is
> disconnected from all of this.

> > Is there any difference how the stored XML is treated compared to the
> > XML passed in `virDomainRestoreFlags()`? I see some unexpected changes
> > here. When I use `virDomainSaveImageGetXMLDesc()` to retrieve the stored
> > XML and pass it unchanged to the `virDomainRestoreFlags()` the final
> > domain XML is different then when `virDomainRestore()` is used or when
> > `virDomainRestoreFlags()` with no `dxml` argument is used. We have:
> > 
> >    <graphics ... passwdValidTo='1970-01-01T00:00:01'>
> > 
> > in the domain XML and the `passwdValidTo` argument disappears when
> > domain XML is passed in `dxml` argument but it is preserved in other
> > cases. Is this behavior expected? If yes, can we do anything to preserve
> > the configuration? What other changes in domain XML can be expected?
> No, this behaviour is definitely not expected.
> As explained above, runtime values, that don't affect guest ABI are
> allowed to change. The rest is not. Password timeout should be allowed
> to change, because guest has no idea about the password in the first
> place. This is all done in the backed (that part of SPICE that faces the
> host/clients).

I have already figured out what is happening here. The problem is
missing secrets. Libvirt discards `passwdValidTo` if there is no
`passwd` argument too. The solution is to either supply new password or
use VIR_DOMAIN_SAVE_IMAGE_XML_SECURE flag when retrieving the saved XML.


Tomáš Golembiovský <tgolembi@xxxxxxxxxx>

[Index of Archives]     [Virt Tools]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]

  Powered by Linux