[libvirt] [ v3 2/4] 1) Loader: Add a more elaborate definition.

Prerna saxenap.ltc at gmail.com
Wed Jun 6 11:00:02 UTC 2018


On Mon, Jun 4, 2018 at 6:24 PM, John Ferlan <jferlan at redhat.com> wrote:

>
> On 05/21/2018 07:10 AM, Prerna Saxena wrote:
> > Augment definition to include virStorageSourcePtr that
> > more comprehensively describes the nature of backing element.
> > Also include flags for annotating if input XML definition is
> > old-style or new-style.
> >
> > 2) Parse domain XML to generate virDomainLoaderDef & virDomainNvramDef.
> >
> > This patch is used to interpret domain XML and store the Loader &
> > Nvram's backing definitions as virStorageSource.
> > It also identifies if input XML used old or new-style declaration.
> > (This will later be used by the formatter).
> >
> > 3) Format the loader source appropriately.
> >
> > If the initial XML used the old-style declaration as follows:
> > <loader type='pflash'>/path/to/file</loader>
> >
> > we format it as was read.
> >
> > However, if it used new-style declaration:
> > <loader type='pflash' backing='file'>
> >   <source file='path/to/file'/>
> > </loader>
> >
> > The formatter identifies that this is a new-style format
> > and renders it likewise.
> >
> > 4) Plumb the loader source into generation of QEMU command line.
> >
> > Given that nvram & loader elements can now be backed by a non-local
> > source too, adjust all steps leading to generation of
> > QEMU command line.
> >
> > 5) Fix the domain def inference logic to correctly account for
> network-backed
> > pflash devices.
> >
> > 6) Bhyve: Fix command line generation to correctly pick up local loader
> path.
> >
> > 7) virt-aa-helper: Adjust references to loader & nvram elements to
> correctly
> > parse the virStorageSource types.
> >
> > 8) Vbox: Adjust references to 'loader' and 'nvram' elements given that
> > these are now represented by virStorageSourcePtr.
> >
> > 9)Xen: Adjust all references to loader & nvram elements given that they
> are now backed by virStorageSourcePtr
> > ---
> >  src/bhyve/bhyve_command.c       |   6 +-
> >  src/conf/domain_conf.c          | 250 ++++++++++++++++++++++++++++++
> +++++++---
> >  src/conf/domain_conf.h          |  11 +-
> >  src/qemu/qemu_cgroup.c          |  13 ++-
> >  src/qemu/qemu_command.c         |  21 +++-
> >  src/qemu/qemu_domain.c          |  31 +++--
> >  src/qemu/qemu_driver.c          |   7 +-
> >  src/qemu/qemu_parse_command.c   |  30 ++++-
> >  src/qemu/qemu_process.c         |  54 ++++++---
> >  src/security/security_dac.c     |   6 +-
> >  src/security/security_selinux.c |   6 +-
> >  src/security/virt-aa-helper.c   |  14 ++-
> >  src/vbox/vbox_common.c          |  11 +-
> >  src/xenapi/xenapi_driver.c      |   4 +-
> >  src/xenconfig/xen_sxpr.c        |  19 +--
> >  src/xenconfig/xen_xm.c          |   9 +-
> >  16 files changed, 409 insertions(+), 83 deletions(-)
> >
>
> The $SUBJ and commit message are just poorly formatted.
>
> But it pretty much shows that everything just got thrown into this one
> patch and you went from there.
>
> This series needs to progress a bit more "reasonably" to the desired
> goal. Consider this progression (with the following as patch 1 of the
> entire series):
>
> 1. Change path of loader to union:
>
> struct _virDomainLoaderDef {
>     union {
>         char *path;
>     } loader;
>
> then compile/fix up references.
>
> 2. Create an accessor to loader.path - that way future consumers can
> just fetch the source path, e.g.:
>
> const char *
> virDomainLoaderDefGetLoaderPath(virDomainLoaderDefPtr loader)
> {
>     return loader->loader.path;
> }
>
> Anything that accesses loader.path should change to use this via
> something like:
>
>     const char *loaderPath;
> ...
>     loaderPath = virDomainLoaderDefGetLoaderPath(xxx)
> ...
>
> Eventually this code will return either loader.path or loader.src->path
> since both FILE and NETWORK storage use src->path.
>
> 3. Add virStorageSourcePtr to the loader union and modify places in the
> code to use/read it. Update the domaincommon.rng, update formatdomain to
> describe usage of <source> for <loader>, add genericxml2xmltests for
> both "loader-source-file" and "loader-source-network" type formats for
> at least "type='rom'". You could add type='pflash' tests too...
>
> ...
>     union {
>         char *path;
>         virStorageSourcePtr src;
>     } loader;
>     bool useLoaderSrc;
> ...
>
> The patch code to parse needs to be changed to follow more closely what
> virDomainDisk{BackingStore|DefMirror}Parse does...  Alter ctxt locally
> to the passed @node (and restore at the end).  It should also be able to
> use the union to do the magic, consider:
>
>     loader->loader.path = (char *) xmlNodeGetContent(node);
>
>     /* When not present, could return '' */
>     if (virStringIsEmpty(loader->loader.path))
>         VIR_FREE(loader->loader.path);
>
>     /* See if we need to look for new style <source...> subelement */
>     if (!loader->loader.path) {
>         xmlNodePtr source;
>
>         if (!(source = virXPathNode("./source", ctxt))) {
>             virReportError(VIR_ERR_XML_ERROR, "%s"
>                            _("missing os loader source"));
>             goto cleanup;
>         }
>
>         if (VIR_ALLOC(loader->loader.src) < 0)
>             goto cleanup;
>
>         if ((tmp = virXMLPropString(source, "file")))
>             loader->loader.src->type = VIR_STORAGE_TYPE_FILE;
>         else if ((tmp = virXMLPropString(source, "protocol")))
>             loader->loader.src->type = VIR_STORAGE_TYPE_NETWORK;
>
>         if (loader->loader.src->type == VIR_STORAGE_TYPE_NONE) {
>             virReportError(VIR_ERR_XML_ERROR,
>                            _("unknown loader source type: '%s"), tmp);
>             goto cleanup;
>         }
>
>         if (virDomainStorageSourceParse(source, ctxt,
> loader->loader.src, 0) < 0)
>             goto cleanup;
>
>         loader->useLoaderSrc = true;
>     }
>
>
> Then do the similar set of changes for nvram...  Although for this one -
> it's slightly trickier since <nvram> is optional...  You'll probably
> also need to modify qemuDomainDefPostParse to not automagically generate
> an nvram.path if you're using <source>.
>
> Once the xml2xml portion is done, the next patch alters qemu_command,
> adds more tests, etc. Since you have generic xml2xml files, you probably
> could just create a link from the qemuxml2argvdata directory or
> create/use new files.  Eventually it'd be nice for hte qemuxml2* code to
> be able to use the generic xml files, but that's outside this scope.
>
> BTW: I wouldn't bother with too many qemu_parse_command.c changes. Just
> do the minimum. That code is so far out of date it's going to take a
> solid effort to bring it back to today's options.
>
> In any case, there's a lot of changes to be made so it's really not
> worth going through each of the files in depth... I'll just point out
> the domain_conf.h changes.
>

Thanks John for the elaborate review. I will start in this direction and
post the next series asap.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20180606/542afbf1/attachment-0001.htm>


More information about the libvir-list mailing list