On Thu, Jan 15, 2015 at 11:14:37AM +0100, Jiri Denemark wrote: > On Tue, Jan 13, 2015 at 17:00:16 +0000, Daniel Berrange wrote: > > The 'virsh edit' command gets XML validation enabled by default, > > with a --skip-validate option to disable it. The 'virsh define' > > and 'virsh create' commands get a --validate option to enable > > it, to avoid regressions for existing scripts. > > > > The quality of error reporting from libxml2 varies depending > > on the type of XML error made. Sometimes it is quite clear > > and useful, other times it is obscure & inaccurate. At least > > the user will see an error now, rather than having their > > XML modification silently disappear. > > --- > > tools/virsh-domain.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++------ > > 1 file changed, 78 insertions(+), 9 deletions(-) > > > > diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c > > index 6733cfa..fe8f4ba 100644 > > --- a/tools/virsh-domain.c > > +++ b/tools/virsh-domain.c > > @@ -133,6 +133,56 @@ vshCommandOptDomainBy(vshControl *ctl, const vshCmd *cmd, > > return vshLookupDomainInternal(ctl, cmd->def->name, n, flags); > > } > > > > +static virDomainPtr > > +vshDomainDefine(virConnectPtr conn, const char *xml, unsigned int flags) > > +{ > > + virDomainPtr dom; > > + if (flags) { > > + dom = virDomainDefineXMLFlags(conn, xml, flags); > > + /* If validate is the only flag, just drop it and > > + * try again. > > + */ > > This behavior is fine for virsh edit, where we enable validation by > default but if it is enabled explicitly by a user for virsh define, I > think we should propagate the error back instead of silently ignoring > the --validate option. > > > + if (!dom) { > > + virErrorPtr err = virGetLastError(); > > + if (err && > > + (err->code == VIR_ERR_NO_SUPPORT) && > > + (flags == VIR_DOMAIN_DEFINE_VALIDATE)) > > + dom = virDomainDefineXML(conn, xml); > > + } > > + } else { > > + dom = virDomainDefineXML(conn, xml); > > + } > > + return dom; > > +} > > + > > + > > +static virDomainPtr > > +vshDomainCreateXML(virConnectPtr conn, const char *xml, > > + size_t nfds, int *fds, unsigned int flags) > > +{ > > + virDomainPtr dom; > > + if (nfds) > > + dom = virDomainCreateXMLWithFiles(conn, xml, > > + nfds, fds, flags); > > + else > > + dom = virDomainCreateXML(conn, xml, flags); > > + /* If validate is set, just drop it and try again */ > > + if (!dom) { > > + virErrorPtr err = virGetLastError(); > > + if (err && > > + (err->code == VIR_ERR_INVALID_ARG) && > > + (flags & VIR_DOMAIN_START_VALIDATE)) { > > + flags &= ~VIR_DOMAIN_START_VALIDATE; > > + if (nfds) > > + dom = virDomainCreateXMLWithFiles(conn, xml, > > + nfds, fds, flags); > > + else > > + dom = virDomainCreateXML(conn, xml, flags); > > + } > > + } > > We shouldn't need anything clever here since vshDomainCreateXML is > called with VIR_DOMAIN_START_VALIDATE iff it was explicitly requested. True, I forgot about that. Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list