diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index b8a206bb1e..18b5d1e950 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -495,7 +495,7 @@ bhyveDomainGetXMLDesc(virDomainPtr domain, unsigned int flags) if (!caps) goto cleanup; - ret = virDomainDefFormat(vm->def, caps, + ret = virDomainDefFormat(vm->def, privconn->xmlopt, caps, virDomainDefFormatConvertXMLFlags(flags)); virObjectUnref(caps); @@ -1583,7 +1583,7 @@ bhyveConnectDomainXMLFromNative(virConnectPtr conn, if (def == NULL) goto cleanup; - xml = virDomainDefFormat(def, capabilities, 0); + xml = virDomainDefFormat(def, privconn->xmlopt, capabilities, 0); cleanup: virObjectUnref(capabilities); diff --git a/src/conf/checkpoint_conf.c b/src/conf/checkpoint_conf.c index 36076c13df..cb2d83796c 100644 --- a/src/conf/checkpoint_conf.c +++ b/src/conf/checkpoint_conf.c @@ -489,8 +489,8 @@ virDomainCheckpointDefFormatInternal(virBufferPtr buf, } if (!(flags & VIR_DOMAIN_CHECKPOINT_FORMAT_NO_DOMAIN) && - virDomainDefFormatInternal(def->parent.dom, caps, domainflags, buf, - xmlopt) < 0) + virDomainDefFormatInternal(def->parent.dom, xmlopt, + caps, buf, domainflags) < 0) goto error; virBufferAdjustIndent(buf, -2); diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index f992f95906..a7a89b61b9 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -23648,8 +23648,8 @@ virDomainDefCheckABIStabilityFlags(virDomainDefPtr src, error: virErrorPreserveLast(&err); - strSrc = virDomainDefFormat(src, NULL, 0); - strDst = virDomainDefFormat(dst, NULL, 0); + strSrc = virDomainDefFormat(src, xmlopt, NULL, 0); + strDst = virDomainDefFormat(dst, xmlopt, NULL, 0); VIR_DEBUG("XMLs that failed stability check were: src=\"%s\", dst=\"%s\"", NULLSTR(strSrc), NULLSTR(strDst)); @@ -28334,13 +28334,13 @@ virDomainDefFormatFeatures(virBufferPtr buf, int virDomainDefFormatInternal(virDomainDefPtr def, + virDomainXMLOptionPtr xmlopt, virCapsPtr caps, - unsigned int flags, virBufferPtr buf, - virDomainXMLOptionPtr xmlopt) + unsigned int flags) { - return virDomainDefFormatInternalSetRootName(def, caps, flags, buf, - xmlopt, "domain"); + return virDomainDefFormatInternalSetRootName(def, xmlopt, caps, buf, + "domain", flags); } @@ -28350,11 +28350,11 @@ virDomainDefFormatInternal(virDomainDefPtr def, * Return -1 on failure. */ int virDomainDefFormatInternalSetRootName(virDomainDefPtr def, - virCapsPtr caps, - unsigned int flags, - virBufferPtr buf, virDomainXMLOptionPtr xmlopt, - const char *rootname) + virCapsPtr caps, + virBufferPtr buf, + const char *rootname, + unsigned int flags) { unsigned char *uuid; char uuidstr[VIR_UUID_STRING_BUFLEN]; @@ -28891,12 +28891,15 @@ unsigned int virDomainDefFormatConvertXMLFlags(unsigned int flags) char * -virDomainDefFormat(virDomainDefPtr def, virCapsPtr caps, unsigned int flags) +virDomainDefFormat(virDomainDefPtr def, + virDomainXMLOptionPtr xmlopt, + virCapsPtr caps, + unsigned int flags) { virBuffer buf = VIR_BUFFER_INITIALIZER; virCheckFlags(VIR_DOMAIN_DEF_FORMAT_COMMON_FLAGS, NULL); - if (virDomainDefFormatInternal(def, caps, flags, &buf, NULL) < 0) + if (virDomainDefFormatInternal(def, xmlopt, caps, &buf, flags) < 0) return NULL; return virBufferContentAndReset(&buf); @@ -28904,8 +28907,8 @@ virDomainDefFormat(virDomainDefPtr def, virCapsPtr caps, unsigned int flags) char * -virDomainObjFormat(virDomainXMLOptionPtr xmlopt, - virDomainObjPtr obj, +virDomainObjFormat(virDomainObjPtr obj, + virDomainXMLOptionPtr xmlopt, virCapsPtr caps, unsigned int flags) { @@ -28931,7 +28934,7 @@ virDomainObjFormat(virDomainXMLOptionPtr xmlopt, xmlopt->privateData.format(&buf, obj) < 0) goto error; - if (virDomainDefFormatInternal(obj->def, caps, flags, &buf, xmlopt) < 0) + if (virDomainDefFormatInternal(obj->def, xmlopt, caps, &buf, flags) < 0) goto error; virBufferAdjustIndent(&buf, -2); @@ -29091,13 +29094,13 @@ virDomainDefSaveXML(virDomainDefPtr def, int virDomainDefSave(virDomainDefPtr def, - virDomainXMLOptionPtr xmlopt G_GNUC_UNUSED, + virDomainXMLOptionPtr xmlopt, virCapsPtr caps, const char *configDir) { g_autofree char *xml = NULL; - if (!(xml = virDomainDefFormat(def, caps, VIR_DOMAIN_DEF_FORMAT_SECURE))) + if (!(xml = virDomainDefFormat(def, xmlopt, caps, VIR_DOMAIN_DEF_FORMAT_SECURE))) return -1; return virDomainDefSaveXML(def, configDir, xml); @@ -29117,7 +29120,7 @@ virDomainObjSave(virDomainObjPtr obj, g_autofree char *xml = NULL; - if (!(xml = virDomainObjFormat(xmlopt, obj, caps, flags))) + if (!(xml = virDomainObjFormat(obj, xmlopt, caps, flags))) return -1; return virDomainDefSaveXML(obj->def, statusDir, xml); @@ -29421,7 +29424,7 @@ virDomainDefCopy(virDomainDefPtr src, format_flags |= VIR_DOMAIN_DEF_FORMAT_INACTIVE | VIR_DOMAIN_DEF_FORMAT_MIGRATABLE; /* Easiest to clone via a round-trip through XML. */ - if (!(xml = virDomainDefFormat(src, caps, format_flags))) + if (!(xml = virDomainDefFormat(src, xmlopt, caps, format_flags))) return NULL; return virDomainDefParseString(xml, caps, xmlopt, parseOpaque, parse_flags); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 4a0c7b1078..6b70eda14e 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3104,23 +3104,33 @@ void virDomainIOThreadIDDel(virDomainDefPtr def, unsigned int iothread_id); unsigned int virDomainDefFormatConvertXMLFlags(unsigned int flags); char *virDomainDefFormat(virDomainDefPtr def, + virDomainXMLOptionPtr xmlopt, virCapsPtr caps, - unsigned int flags); -char *virDomainObjFormat(virDomainXMLOptionPtr xmlopt, - virDomainObjPtr obj, + unsigned int flags) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) + ATTRIBUTE_NONNULL(3); +char *virDomainObjFormat(virDomainObjPtr obj, + virDomainXMLOptionPtr xmlopt, virCapsPtr caps, - unsigned int flags); + unsigned int flags) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) + ATTRIBUTE_NONNULL(3); int virDomainDefFormatInternal(virDomainDefPtr def, + virDomainXMLOptionPtr xmlopt, virCapsPtr caps, - unsigned int flags, virBufferPtr buf, - virDomainXMLOptionPtr xmlopt); + unsigned int flags) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) + ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4); int virDomainDefFormatInternalSetRootName(virDomainDefPtr def, - virCapsPtr caps, - unsigned int flags, - virBufferPtr buf, virDomainXMLOptionPtr xmlopt, - const char *rootname); + virCapsPtr caps, + virBufferPtr buf, + const char *rootname, + unsigned int flags) + ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) + ATTRIBUTE_NONNULL(3) ATTRIBUTE_NONNULL(4) + ATTRIBUTE_NONNULL(5); int virDomainDiskSourceFormat(virBufferPtr buf, virStorageSourcePtr src, diff --git a/src/conf/snapshot_conf.c b/src/conf/snapshot_conf.c index a0509041be..0bf7d497e4 100644 --- a/src/conf/snapshot_conf.c +++ b/src/conf/snapshot_conf.c @@ -891,8 +891,8 @@ virDomainSnapshotDefFormatInternal(virBufferPtr buf, } if (def->parent.dom) { - if (virDomainDefFormatInternal(def->parent.dom, caps, domainflags, buf, - xmlopt) < 0) + if (virDomainDefFormatInternal(def->parent.dom, xmlopt, + caps, buf, domainflags) < 0) goto error; } else if (uuidstr) { virBufferAddLit(buf, "\n"); @@ -903,9 +903,9 @@ virDomainSnapshotDefFormatInternal(virBufferPtr buf, } if (def->parent.inactiveDom) { - if (virDomainDefFormatInternalSetRootName(def->parent.inactiveDom, caps, - domainflags, buf, xmlopt, - "inactiveDomain") < 0) + if (virDomainDefFormatInternalSetRootName(def->parent.inactiveDom, xmlopt, + caps, buf, "inactiveDomain", + domainflags) < 0) goto error; } diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index f8ee6db75f..81ff502769 100644 --- a/src/esx/esx_driver.c +++ b/src/esx/esx_driver.c @@ -2648,7 +2648,7 @@ esxDomainGetXMLDesc(virDomainPtr domain, unsigned int flags) if (powerState != esxVI_VirtualMachinePowerState_PoweredOff) def->id = id; - xml = virDomainDefFormat(def, priv->caps, + xml = virDomainDefFormat(def, priv->xmlopt, priv->caps, virDomainDefFormatConvertXMLFlags(flags)); } @@ -2706,7 +2706,7 @@ esxConnectDomainXMLFromNative(virConnectPtr conn, const char *nativeFormat, def = virVMXParseConfig(&ctx, priv->xmlopt, priv->caps, nativeConfig); if (def) - xml = virDomainDefFormat(def, priv->caps, + xml = virDomainDefFormat(def, priv->xmlopt, priv->caps, VIR_DOMAIN_DEF_FORMAT_INACTIVE); virDomainDefFree(def); diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c index 3a2f6602bc..ff9370d728 100644 --- a/src/hyperv/hyperv_driver.c +++ b/src/hyperv/hyperv_driver.c @@ -886,7 +886,8 @@ hypervDomainGetXMLDesc(virDomainPtr domain, unsigned int flags) /* FIXME: devices section is totally missing */ - xml = virDomainDefFormat(def, NULL, + /* XXX xmlopts must be non-NULL */ + xml = virDomainDefFormat(def, NULL, NULL, virDomainDefFormatConvertXMLFlags(flags)); cleanup: diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c index 9b9b17b173..19905442c1 100644 --- a/src/libxl/libxl_domain.c +++ b/src/libxl/libxl_domain.c @@ -844,7 +844,7 @@ libxlDomainCleanup(libxlDriverPrivatePtr driver, /* now that we know it's stopped call the hook if present */ if (virHookPresent(VIR_HOOK_DRIVER_LIBXL)) { - char *xml = virDomainDefFormat(vm->def, cfg->caps, 0); + char *xml = virDomainDefFormat(vm->def, driver->xmlopt, cfg->caps, 0); /* we can't stop the operation even if the script raised an error */ ignore_value(virHookCall(VIR_HOOK_DRIVER_LIBXL, vm->def->name, @@ -913,7 +913,7 @@ libxlDomainCleanup(libxlDriverPrivatePtr driver, /* The "release" hook cleans up additional resources */ if (virHookPresent(VIR_HOOK_DRIVER_LIBXL)) { - char *xml = virDomainDefFormat(vm->def, cfg->caps, 0); + char *xml = virDomainDefFormat(vm->def, driver->xmlopt, cfg->caps, 0); /* we can't stop the operation even if the script raised an error */ ignore_value(virHookCall(VIR_HOOK_DRIVER_LIBXL, vm->def->name, @@ -1320,7 +1320,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver, /* Run an early hook to set-up missing devices */ if (virHookPresent(VIR_HOOK_DRIVER_LIBXL)) { - char *xml = virDomainDefFormat(vm->def, cfg->caps, 0); + char *xml = virDomainDefFormat(vm->def, driver->xmlopt, cfg->caps, 0); int hookret; hookret = virHookCall(VIR_HOOK_DRIVER_LIBXL, vm->def->name, @@ -1358,7 +1358,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver, /* now that we know it is about to start call the hook if present */ if (virHookPresent(VIR_HOOK_DRIVER_LIBXL)) { - char *xml = virDomainDefFormat(vm->def, cfg->caps, 0); + char *xml = virDomainDefFormat(vm->def, driver->xmlopt, cfg->caps, 0); int hookret; hookret = virHookCall(VIR_HOOK_DRIVER_LIBXL, vm->def->name, @@ -1443,7 +1443,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver, libxlDomainCreateChannelPTY(vm->def, cfg->ctx); #endif - if ((dom_xml = virDomainDefFormat(vm->def, cfg->caps, 0)) == NULL) + if ((dom_xml = virDomainDefFormat(vm->def, driver->xmlopt, cfg->caps, 0)) == NULL) goto destroy_dom; if (libxl_userdata_store(cfg->ctx, domid, "libvirt-xml", @@ -1471,7 +1471,7 @@ libxlDomainStart(libxlDriverPrivatePtr driver, /* finally we can call the 'started' hook script if any */ if (virHookPresent(VIR_HOOK_DRIVER_LIBXL)) { - char *xml = virDomainDefFormat(vm->def, cfg->caps, 0); + char *xml = virDomainDefFormat(vm->def, driver->xmlopt, cfg->caps, 0); int hookret; hookret = virHookCall(VIR_HOOK_DRIVER_LIBXL, vm->def->name, diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index b885cf0d00..dc0d9b58f3 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -459,7 +459,7 @@ libxlReconnectDomain(virDomainObjPtr vm, /* now that we know it's reconnected call the hook if present */ if (virHookPresent(VIR_HOOK_DRIVER_LIBXL) && STRNEQ("Domain-0", vm->def->name)) { - char *xml = virDomainDefFormat(vm->def, cfg->caps, 0); + char *xml = virDomainDefFormat(vm->def, driver->xmlopt, cfg->caps, 0); int hookret; /* we can't stop the operation even if the script raised an error */ @@ -1828,7 +1828,7 @@ libxlDoDomainSave(libxlDriverPrivatePtr driver, goto cleanup; } - if ((xml = virDomainDefFormat(vm->def, cfg->caps, 0)) == NULL) + if ((xml = virDomainDefFormat(vm->def, driver->xmlopt, cfg->caps, 0)) == NULL) goto cleanup; xml_len = strlen(xml) + 1; @@ -2652,7 +2652,7 @@ libxlDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) else def = vm->def; - ret = virDomainDefFormat(def, cfg->caps, + ret = virDomainDefFormat(def, driver->xmlopt, cfg->caps, virDomainDefFormatConvertXMLFlags(flags)); cleanup: @@ -2703,7 +2703,7 @@ libxlConnectDomainXMLFromNative(virConnectPtr conn, goto cleanup; } - xml = virDomainDefFormat(def, cfg->caps, VIR_DOMAIN_DEF_FORMAT_INACTIVE); + xml = virDomainDefFormat(def, driver->xmlopt, cfg->caps, VIR_DOMAIN_DEF_FORMAT_INACTIVE); cleanup: virDomainDefFree(def); diff --git a/src/libxl/libxl_migration.c b/src/libxl/libxl_migration.c index 65ff8271a7..25a58f8018 100644 --- a/src/libxl/libxl_migration.c +++ b/src/libxl/libxl_migration.c @@ -420,7 +420,7 @@ libxlDomainMigrationSrcBegin(virConnectPtr conn, if (!libxlDomainMigrationIsAllowed(def)) goto endjob; - xml = virDomainDefFormat(def, cfg->caps, VIR_DOMAIN_DEF_FORMAT_SECURE); + xml = virDomainDefFormat(def, driver->xmlopt, cfg->caps, VIR_DOMAIN_DEF_FORMAT_SECURE); /* Valid xml means success! EndJob in the confirm phase */ if (xml) goto cleanup; @@ -494,7 +494,7 @@ libxlDomainMigrationPrepareAny(virConnectPtr dconn, char *xml; int hookret; - if (!(xml = virDomainDefFormat(*def, cfg->caps, + if (!(xml = virDomainDefFormat(*def, driver->xmlopt, cfg->caps, VIR_DOMAIN_XML_SECURE | VIR_DOMAIN_XML_MIGRATABLE))) return -1; diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c index cb0ab6e0d5..6c12543274 100644 --- a/src/lxc/lxc_driver.c +++ b/src/lxc/lxc_driver.c @@ -987,7 +987,7 @@ static char *lxcDomainGetXMLDesc(virDomainPtr dom, ret = virDomainDefFormat((flags & VIR_DOMAIN_XML_INACTIVE) && vm->newDef ? vm->newDef : vm->def, - driver->caps, + driver->xmlopt, driver->caps, virDomainDefFormatConvertXMLFlags(flags)); cleanup: @@ -1019,7 +1019,7 @@ static char *lxcConnectDomainXMLFromNative(virConnectPtr conn, if (!(def = lxcParseConfigString(nativeConfig, caps, driver->xmlopt))) goto cleanup; - xml = virDomainDefFormat(def, caps, 0); + xml = virDomainDefFormat(def, driver->xmlopt, caps, 0); cleanup: virObjectUnref(caps); diff --git a/src/lxc/lxc_process.c b/src/lxc/lxc_process.c index cae8bbacb5..c1b8b6aa09 100644 --- a/src/lxc/lxc_process.c +++ b/src/lxc/lxc_process.c @@ -171,7 +171,7 @@ static void virLXCProcessCleanup(virLXCDriverPtr driver, /* now that we know it's stopped call the hook if present */ if (virHookPresent(VIR_HOOK_DRIVER_LXC)) { - char *xml = virDomainDefFormat(vm->def, driver->caps, 0); + char *xml = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps, 0); /* we can't stop the operation even if the script raised an error */ virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name, @@ -248,7 +248,7 @@ static void virLXCProcessCleanup(virLXCDriverPtr driver, /* The "release" hook cleans up additional resources */ if (virHookPresent(VIR_HOOK_DRIVER_LXC)) { - char *xml = virDomainDefFormat(vm->def, driver->caps, 0); + char *xml = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps, 0); /* we can't stop the operation even if the script raised an error */ virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name, @@ -1271,7 +1271,7 @@ int virLXCProcessStart(virConnectPtr conn, /* Run an early hook to set-up missing devices */ if (virHookPresent(VIR_HOOK_DRIVER_LXC)) { - char *xml = virDomainDefFormat(vm->def, driver->caps, 0); + char *xml = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps, 0); int hookret; hookret = virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name, @@ -1379,7 +1379,7 @@ int virLXCProcessStart(virConnectPtr conn, /* now that we know it is about to start call the hook if present */ if (virHookPresent(VIR_HOOK_DRIVER_LXC)) { - char *xml = virDomainDefFormat(vm->def, driver->caps, 0); + char *xml = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps, 0); int hookret; hookret = virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name, @@ -1521,7 +1521,7 @@ int virLXCProcessStart(virConnectPtr conn, /* finally we can call the 'started' hook script if any */ if (virHookPresent(VIR_HOOK_DRIVER_LXC)) { - char *xml = virDomainDefFormat(vm->def, driver->caps, 0); + char *xml = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps, 0); int hookret; hookret = virHookCall(VIR_HOOK_DRIVER_LXC, vm->def->name, @@ -1701,7 +1701,7 @@ virLXCProcessReconnectDomain(virDomainObjPtr vm, /* now that we know it's reconnected call the hook if present */ if (virHookPresent(VIR_HOOK_DRIVER_LXC)) { - char *xml = virDomainDefFormat(vm->def, driver->caps, 0); + char *xml = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps, 0); int hookret; /* we can't stop the operation even if the script raised an error */ diff --git a/src/openvz/openvz_conf.c b/src/openvz/openvz_conf.c index 7676656af1..8a05aa0504 100644 --- a/src/openvz/openvz_conf.c +++ b/src/openvz/openvz_conf.c @@ -1078,3 +1078,58 @@ int openvzGetVEID(const char *name) _("Failed to parse vzlist output")); return -1; } + + +static int +openvzDomainDefPostParse(virDomainDefPtr def, + virCapsPtr caps G_GNUC_UNUSED, + unsigned int parseFlags G_GNUC_UNUSED, + void *opaque G_GNUC_UNUSED, + void *parseOpaque G_GNUC_UNUSED) +{ + /* fill the init path */ + if (def->os.type == VIR_DOMAIN_OSTYPE_EXE && !def->os.init) + def->os.init = g_strdup("/sbin/init"); + + return 0; +} + + +static int +openvzDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, + const virDomainDef *def G_GNUC_UNUSED, + virCapsPtr caps G_GNUC_UNUSED, + unsigned int parseFlags G_GNUC_UNUSED, + void *opaque G_GNUC_UNUSED, + void *parseOpaque G_GNUC_UNUSED) +{ + if (dev->type == VIR_DOMAIN_DEVICE_CHR && + dev->data.chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE && + dev->data.chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_NONE) + dev->data.chr->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_OPENVZ; + + /* forbid capabilities mode hostdev in this kind of hypervisor */ + if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV && + dev->data.hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("hostdev mode 'capabilities' is not " + "supported in %s"), + virDomainVirtTypeToString(def->virtType)); + return -1; + } + + return 0; +} + + +virDomainDefParserConfig openvzDomainDefParserConfig = { + .domainPostParseCallback = openvzDomainDefPostParse, + .devicesPostParseCallback = openvzDomainDeviceDefPostParse, + .features = VIR_DOMAIN_DEF_FEATURE_NAME_SLASH, +}; + +virDomainXMLOptionPtr openvzXMLOption(void) +{ + return virDomainXMLOptionNew(&openvzDomainDefParserConfig, + NULL, NULL, NULL, NULL); +} diff --git a/src/openvz/openvz_conf.h b/src/openvz/openvz_conf.h index cd42d697ce..6463c1704a 100644 --- a/src/openvz/openvz_conf.h +++ b/src/openvz/openvz_conf.h @@ -63,3 +63,4 @@ int strtoI(const char *str); int openvzSetDefinedUUID(int vpsid, unsigned char *uuid); int openvzGetVEID(const char *name); int openvzReadNetworkConf(virDomainDefPtr def, int veid); +virDomainXMLOptionPtr openvzXMLOption(void); diff --git a/src/openvz/openvz_driver.c b/src/openvz/openvz_driver.c index e07b3b302d..e479ebf58d 100644 --- a/src/openvz/openvz_driver.c +++ b/src/openvz/openvz_driver.c @@ -110,55 +110,6 @@ openvzDomObjFromDomain(struct openvz_driver *driver, } -static int -openvzDomainDefPostParse(virDomainDefPtr def, - virCapsPtr caps G_GNUC_UNUSED, - unsigned int parseFlags G_GNUC_UNUSED, - void *opaque G_GNUC_UNUSED, - void *parseOpaque G_GNUC_UNUSED) -{ - /* fill the init path */ - if (def->os.type == VIR_DOMAIN_OSTYPE_EXE && !def->os.init) - def->os.init = g_strdup("/sbin/init"); - - return 0; -} - - -static int -openvzDomainDeviceDefPostParse(virDomainDeviceDefPtr dev, - const virDomainDef *def G_GNUC_UNUSED, - virCapsPtr caps G_GNUC_UNUSED, - unsigned int parseFlags G_GNUC_UNUSED, - void *opaque G_GNUC_UNUSED, - void *parseOpaque G_GNUC_UNUSED) -{ - if (dev->type == VIR_DOMAIN_DEVICE_CHR && - dev->data.chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_CONSOLE && - dev->data.chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_NONE) - dev->data.chr->targetType = VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_OPENVZ; - - /* forbid capabilities mode hostdev in this kind of hypervisor */ - if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV && - dev->data.hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_CAPABILITIES) { - virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("hostdev mode 'capabilities' is not " - "supported in %s"), - virDomainVirtTypeToString(def->virtType)); - return -1; - } - - return 0; -} - - -virDomainDefParserConfig openvzDomainDefParserConfig = { - .domainPostParseCallback = openvzDomainDefPostParse, - .devicesPostParseCallback = openvzDomainDeviceDefPostParse, - .features = VIR_DOMAIN_DEF_FEATURE_NAME_SLASH, -}; - - /* generate arguments to create OpenVZ container return -1 - error 0 - OK @@ -522,7 +473,7 @@ static char *openvzDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) { if (!(vm = openvzDomObjFromDomain(driver, dom->uuid))) return NULL; - ret = virDomainDefFormat(vm->def, driver->caps, + ret = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps, virDomainDefFormatConvertXMLFlags(flags)); virDomainObjEndAPI(&vm); @@ -1360,8 +1311,7 @@ static virDrvOpenStatus openvzConnectOpen(virConnectPtr conn, if (!(driver->caps = openvzCapsInit())) goto cleanup; - if (!(driver->xmlopt = virDomainXMLOptionNew(&openvzDomainDefParserConfig, - NULL, NULL, NULL, NULL))) + if (!(driver->xmlopt = openvzXMLOption())) goto cleanup; if (openvzLoadDomains(driver) < 0) @@ -2117,7 +2067,7 @@ openvzDomainMigrateBegin3Params(virDomainPtr domain, goto cleanup; } - xml = virDomainDefFormat(vm->def, driver->caps, + xml = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps, VIR_DOMAIN_DEF_FORMAT_SECURE); cleanup: diff --git a/src/phyp/phyp_driver.c b/src/phyp/phyp_driver.c index bdfe78e035..5e00ef6448 100644 --- a/src/phyp/phyp_driver.c +++ b/src/phyp/phyp_driver.c @@ -3247,7 +3247,7 @@ phypDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) if (virDomainDefSetVcpus(&def, vcpus) < 0) goto err; - return virDomainDefFormat(&def, phyp_driver->caps, + return virDomainDefFormat(&def, phyp_driver->xmlopt, phyp_driver->caps, virDomainDefFormatConvertXMLFlags(flags)); err: diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 789a979e8c..c6f34dbc4e 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -9197,9 +9197,8 @@ qemuDomainDefFormatBufInternal(virQEMUDriverPtr driver, } format: - ret = virDomainDefFormatInternal(def, caps, - virDomainDefFormatConvertXMLFlags(flags), - buf, driver->xmlopt); + ret = virDomainDefFormatInternal(def, driver->xmlopt, caps, buf, + virDomainDefFormatConvertXMLFlags(flags)); cleanup: virDomainDefFree(copy); diff --git a/src/security/security_apparmor.c b/src/security/security_apparmor.c index 21560b2330..6da79203d7 100644 --- a/src/security/security_apparmor.c +++ b/src/security/security_apparmor.c @@ -168,7 +168,7 @@ load_profile(virSecurityManagerPtr mgr G_GNUC_UNUSED, char *xml = NULL; virCommandPtr cmd = NULL; - xml = virDomainDefFormat(def, NULL, VIR_DOMAIN_DEF_FORMAT_SECURE); + xml = virDomainDefFormat(def, NULL, NULL, VIR_DOMAIN_DEF_FORMAT_SECURE); if (!xml) goto cleanup; diff --git a/src/test/test_driver.c b/src/test/test_driver.c index 5883722d60..e7ec537bb0 100644 --- a/src/test/test_driver.c +++ b/src/test/test_driver.c @@ -2177,7 +2177,8 @@ testDomainSaveImageWrite(testDriverPtr driver, int fd = -1; g_autofree char *xml = NULL; - xml = virDomainDefFormat(def, driver->caps, VIR_DOMAIN_DEF_FORMAT_SECURE); + xml = virDomainDefFormat(def, driver->xmlopt, driver->caps, + VIR_DOMAIN_DEF_FORMAT_SECURE); if (xml == NULL) { virReportSystemError(errno, @@ -2466,7 +2467,8 @@ testDomainSaveImageGetXMLDesc(virConnectPtr conn, if ((fd = testDomainSaveImageOpen(privconn, path, &def)) < 0) goto cleanup; - ret = virDomainDefFormat(def, privconn->caps, VIR_DOMAIN_DEF_FORMAT_SECURE); + ret = virDomainDefFormat(def, privconn->xmlopt, privconn->caps, + VIR_DOMAIN_DEF_FORMAT_SECURE); cleanup: virDomainDefFree(def); @@ -3177,7 +3179,7 @@ static char *testDomainGetXMLDesc(virDomainPtr domain, unsigned int flags) def = (flags & VIR_DOMAIN_XML_INACTIVE) && privdom->newDef ? privdom->newDef : privdom->def; - ret = virDomainDefFormat(def, privconn->caps, + ret = virDomainDefFormat(def, privconn->xmlopt, privconn->caps, virDomainDefFormatConvertXMLFlags(flags)); virDomainObjEndAPI(&privdom); diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index de98dc5c84..0d22c94e06 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -4126,7 +4126,7 @@ static char *vboxDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) /* dump USB devices/filters if active */ vboxHostDeviceGetXMLDesc(data, def, machine); - ret = virDomainDefFormat(def, data->caps, + ret = virDomainDefFormat(def, data->xmlopt, data->caps, virDomainDefFormatConvertXMLFlags(flags)); cleanup: diff --git a/src/vmware/vmware_driver.c b/src/vmware/vmware_driver.c index 83974531d5..c0071fc18c 100644 --- a/src/vmware/vmware_driver.c +++ b/src/vmware/vmware_driver.c @@ -935,7 +935,7 @@ vmwareDomainGetXMLDesc(virDomainPtr dom, unsigned int flags) if (!(vm = vmwareDomObjFromDomain(driver, dom->uuid))) return NULL; - ret = virDomainDefFormat(vm->def, driver->caps, + ret = virDomainDefFormat(vm->def, driver->xmlopt, driver->caps, virDomainDefFormatConvertXMLFlags(flags)); virDomainObjEndAPI(&vm); @@ -968,7 +968,7 @@ vmwareConnectDomainXMLFromNative(virConnectPtr conn, const char *nativeFormat, def = virVMXParseConfig(&ctx, driver->xmlopt, driver->caps, nativeConfig); if (def != NULL) - xml = virDomainDefFormat(def, driver->caps, + xml = virDomainDefFormat(def, driver->xmlopt, driver->caps, VIR_DOMAIN_DEF_FORMAT_INACTIVE); virDomainDefFree(def); diff --git a/src/vz/vz_driver.c b/src/vz/vz_driver.c index 6b925653d5..1166b77b2c 100644 --- a/src/vz/vz_driver.c +++ b/src/vz/vz_driver.c @@ -728,7 +728,7 @@ vzDomainGetXMLDesc(virDomainPtr domain, unsigned int flags) def = (flags & VIR_DOMAIN_XML_INACTIVE) && dom->newDef ? dom->newDef : dom->def; - ret = virDomainDefFormat(def, privconn->driver->caps, flags); + ret = virDomainDefFormat(def, driver->xmlopt, privconn->driver->caps, flags); cleanup: virDomainObjEndAPI(&dom); @@ -2872,7 +2872,7 @@ vzDomainMigrateBeginStep(virDomainObjPtr dom, | VZ_MIGRATION_COOKIE_DOMAIN_NAME) < 0) return NULL; - return virDomainDefFormat(dom->def, driver->caps, + return virDomainDefFormat(dom->def, driver->xmlopt, driver->caps, VIR_DOMAIN_XML_MIGRATABLE); } diff --git a/tests/Makefile.am b/tests/Makefile.am index 4c2856bf97..2362b770b5 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -749,7 +749,8 @@ if WITH_OPENVZ openvzutilstest_SOURCES = \ openvzutilstest.c \ testutils.c testutils.h -openvzutilstest_LDADD = $(LDADDS) +openvzutilstest_LDADD = $(LDADDS) \ + ../src/libvirt_driver_openvz.la else ! WITH_OPENVZ EXTRA_DIST += openvzutilstest.c endif ! WITH_OPENVZ diff --git a/tests/lxcconf2xmltest.c b/tests/lxcconf2xmltest.c index c52c6e7fd7..7adc23be9f 100644 --- a/tests/lxcconf2xmltest.c +++ b/tests/lxcconf2xmltest.c @@ -42,7 +42,7 @@ testCompareXMLToConfigFiles(const char *xmlfile, if (testSanitizeDef(vmdef) < 0) goto fail; - if (!(actualxml = virDomainDefFormat(vmdef, caps, 0))) + if (!(actualxml = virDomainDefFormat(vmdef, xmlopt, caps, 0))) goto fail; if (virTestCompareToFile(actualxml, xmlfile) < 0) diff --git a/tests/openvzutilstest.c b/tests/openvzutilstest.c index 83969197c6..f43867ddc9 100644 --- a/tests/openvzutilstest.c +++ b/tests/openvzutilstest.c @@ -98,6 +98,7 @@ testReadNetworkConf(const void *data G_GNUC_UNUSED) " \n" " \n" "\n"; + virDomainXMLOptionPtr xmlopt = openvzXMLOption(); if (!(def = virDomainDefNew())) goto cleanup; @@ -112,7 +113,7 @@ testReadNetworkConf(const void *data G_GNUC_UNUSED) goto cleanup; } - actual = virDomainDefFormat(def, NULL, VIR_DOMAIN_DEF_FORMAT_INACTIVE); + actual = virDomainDefFormat(def, xmlopt, NULL, VIR_DOMAIN_DEF_FORMAT_INACTIVE); if (actual == NULL) { fprintf(stderr, "ERROR: %s\n", virGetLastErrorMessage()); @@ -127,6 +128,7 @@ testReadNetworkConf(const void *data G_GNUC_UNUSED) result = 0; cleanup: + virObjectUnref(xmlopt); VIR_FREE(actual); virDomainDefFree(def); diff --git a/tests/qemuhotplugtest.c b/tests/qemuhotplugtest.c index 7278a6a6ba..9fbc1e1a64 100644 --- a/tests/qemuhotplugtest.c +++ b/tests/qemuhotplugtest.c @@ -200,7 +200,7 @@ testQemuHotplugCheckResult(virDomainObjPtr vm, char *actual; int ret; - actual = virDomainDefFormat(vm->def, driver.caps, + actual = virDomainDefFormat(vm->def, driver.xmlopt, driver.caps, VIR_DOMAIN_DEF_FORMAT_SECURE); if (!actual) return -1; @@ -466,7 +466,7 @@ testQemuHotplugCpuFinalize(struct testQemuHotplugCpuData *data) char *configXML = NULL; if (data->file_xml_res_live) { - if (!(activeXML = virDomainDefFormat(data->vm->def, driver.caps, + if (!(activeXML = virDomainDefFormat(data->vm->def, driver.xmlopt, driver.caps, VIR_DOMAIN_DEF_FORMAT_SECURE))) goto cleanup; @@ -475,7 +475,7 @@ testQemuHotplugCpuFinalize(struct testQemuHotplugCpuData *data) } if (data->file_xml_res_conf) { - if (!(configXML = virDomainDefFormat(data->vm->newDef, driver.caps, + if (!(configXML = virDomainDefFormat(data->vm->newDef, driver.xmlopt, driver.caps, VIR_DOMAIN_DEF_FORMAT_SECURE | VIR_DOMAIN_DEF_FORMAT_INACTIVE))) goto cleanup; diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 8b43f35f06..a8f7dd4e1b 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -68,7 +68,7 @@ testCompareStatusXMLToXMLFiles(const void *opaque) goto cleanup; } - if (!(actual = virDomainObjFormat(driver.xmlopt, obj, NULL, + if (!(actual = virDomainObjFormat(obj, driver.xmlopt, NULL, VIR_DOMAIN_DEF_FORMAT_SECURE | VIR_DOMAIN_DEF_FORMAT_STATUS | VIR_DOMAIN_DEF_FORMAT_ACTUAL_NET | diff --git a/tests/testutils.c b/tests/testutils.c index 3ff582d70f..0a9f2c5d2b 100644 --- a/tests/testutils.c +++ b/tests/testutils.c @@ -1140,7 +1140,7 @@ testCompareDomXML2XMLFiles(virCapsPtr caps, virDomainXMLOptionPtr xmlopt, goto out; } - if (!(actual = virDomainDefFormat(def, caps, format_flags))) { + if (!(actual = virDomainDefFormat(def, xmlopt, caps, format_flags))) { result = TEST_COMPARE_DOM_XML2XML_RESULT_FAIL_FORMAT; goto out; } diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c index ad7b3360c3..72ee2a38c8 100644 --- a/tests/vmx2xmltest.c +++ b/tests/vmx2xmltest.c @@ -84,7 +84,7 @@ testCompareFiles(const char *vmx, const char *xml) goto cleanup; } - if (!(formatted = virDomainDefFormat(def, caps, + if (!(formatted = virDomainDefFormat(def, xmlopt, caps, VIR_DOMAIN_DEF_FORMAT_SECURE))) goto cleanup; diff --git a/tests/xlconfigtest.c b/tests/xlconfigtest.c index 5a094e3b0e..890d8bf2b4 100644 --- a/tests/xlconfigtest.c +++ b/tests/xlconfigtest.c @@ -146,7 +146,8 @@ testCompareFormatXML(const char *xlcfg, const char *xml, bool replaceVars) if (!(def = xenParseXL(conf, caps, xmlopt))) goto fail; - if (!(gotxml = virDomainDefFormat(def, caps, VIR_DOMAIN_XML_INACTIVE | + if (!(gotxml = virDomainDefFormat(def, xmlopt, caps, + VIR_DOMAIN_XML_INACTIVE | VIR_DOMAIN_XML_SECURE))) goto fail; diff --git a/tests/xmconfigtest.c b/tests/xmconfigtest.c index 82f4908a63..4a4d4192db 100644 --- a/tests/xmconfigtest.c +++ b/tests/xmconfigtest.c @@ -100,7 +100,7 @@ testCompareFormatXML(const char *xmcfg, const char *xml) if (!(def = xenParseXM(conf, caps, xmlopt))) goto fail; - if (!(gotxml = virDomainDefFormat(def, caps, VIR_DOMAIN_DEF_FORMAT_SECURE))) + if (!(gotxml = virDomainDefFormat(def, xmlopt, caps, VIR_DOMAIN_DEF_FORMAT_SECURE))) goto fail; if (virTestCompareToFile(gotxml, xml) < 0)