On Fri, May 27, 2016 at 02:21:51PM +0200, Peter Krempa wrote: > Until now we weren't able to add checks would reject configuration once s/checks would/check that would > accepted by the parser. This patch adds a new callback and > infrastructure to add such checks. In this patch all the places where > rejecting a now-invalid configuration wouldn't be a good idea are marked > with a new parser flag. > --- > src/conf/domain_conf.c | 48 ++++++++++++++++++++++++++++++++++++++++++- > src/conf/domain_conf.h | 16 +++++++++++++++ > src/conf/snapshot_conf.c | 3 ++- > src/conf/virdomainobjlist.c | 6 ++++-- > src/libvirt_private.syms | 1 + > src/libxl/libxl_domain.c | 3 ++- > src/libxl/libxl_migration.c | 6 ++++-- > src/openvz/openvz_driver.c | 3 ++- > src/qemu/qemu_domain.c | 3 ++- > src/qemu/qemu_driver.c | 9 +++++--- > src/qemu/qemu_migration.c | 12 +++++++---- > src/security/virt-aa-helper.c | 3 ++- > 12 files changed, 96 insertions(+), 17 deletions(-) > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index e2e247a..d6bd737 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -4540,6 +4540,47 @@ virDomainDefPostParse(virDomainDefPtr def, > } > > > +static int > +virDomainDefValidateInternal(const virDomainDef *def ATTRIBUTE_UNUSED) > +{ > + return 0; > +} > + > + > +/** > + * virDomainDefValidate: > + * @def: domain definition You're missing the rest o the parameters. > + * > + * This validation function is designed to take checks of globally invalid > + * configurations that the parser needs to accept so that VMs don't vanish upon > + * daemon restart. Such definition can be rejected upon startup or define, where > + * this function shall be called. > + * > + * Returns 0 if domain definition is valid, -1 on error and reports an > + * appropriate message. > + */ > +int > +virDomainDefValidate(const virDomainDef *def, > + virCapsPtr caps, > + unsigned int parseFlags, > + virDomainXMLOptionPtr xmlopt) > +{ > + /* validate configuration only in certain places */ > + if (parseFlags & VIR_DOMAIN_DEF_PARSE_SKIP_VALIDATE) > + return 0; > + > + /* call the domain config callback */ > + if (xmlopt->config.domainValidateCallback && > + xmlopt->config.domainValidateCallback(def, caps, xmlopt->config.priv) < 0) > + return -1; > + > + if (virDomainDefValidateInternal(def) < 0) > + return -1; > + > + return 0; > +} ACK with the defects fixed. -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list