Script to be called to prepare custom device for domain. Done with Xen in mind, it maps to libxl_device_disk.script. XML configuration would be: <disk type='block' device='disk'> <source dev='/dev/mapper/custom-device'/> <script path='/script/to/setup/custom-device'/> <target dev='xvdc'/> </disk> --- src/conf/domain_conf.c | 10 ++++++++++ src/conf/domain_conf.h | 1 + 2 files changed, 11 insertions(+) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index f3fca7f..257a265 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -1102,6 +1102,7 @@ void virDomainDiskDefFree(virDomainDiskDefPtr def) VIR_FREE(def->wwn); VIR_FREE(def->vendor); VIR_FREE(def->product); + VIR_FREE(def->script); if (def->auth.secretType == VIR_DOMAIN_DISK_SECRET_TYPE_USAGE) VIR_FREE(def->auth.secret.usage); virStorageEncryptionFree(def->encryption); @@ -3993,6 +3994,7 @@ virDomainDiskDefParseXML(virCapsPtr caps, char *wwn = NULL; char *vendor = NULL; char *product = NULL; + char *script = NULL; int expected_secret_usage = -1; int auth_secret_usage = -1; @@ -4148,6 +4150,9 @@ virDomainDiskDefParseXML(virCapsPtr caps, if (target && STRPREFIX(target, "ioemu:")) memmove(target, target+6, strlen(target)-5); + } else if (!script && + xmlStrEqual(cur->name, BAD_CAST "script")) { + script = virXMLPropString(cur, "path"); } else if (xmlStrEqual(cur->name, BAD_CAST "geometry")) { if (virXPathUInt("string(./geometry/@cyls)", ctxt, &def->geometry.cylinders) < 0) { @@ -4690,6 +4695,8 @@ virDomainDiskDefParseXML(virCapsPtr caps, source = NULL; def->dst = target; target = NULL; + def->script = script; + script = NULL; def->hosts = hosts; hosts = NULL; def->nhosts = nhosts; @@ -4788,6 +4795,7 @@ cleanup: VIR_FREE(wwn); VIR_FREE(vendor); VIR_FREE(product); + VIR_FREE(script); ctxt->node = save_ctxt; return def; @@ -12899,6 +12907,8 @@ virDomainDiskDefFormat(virBufferPtr buf, } } + virBufferEscapeString(buf, " <script path='%s'/>\n", def->script); + virDomainDiskGeometryDefFormat(buf, def); virDomainDiskBlockIoDefFormat(buf, def); diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index edddf25..d55d209 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -668,6 +668,7 @@ struct _virDomainDiskDef { bool rawio_specified; int rawio; /* no = 0, yes = 1 */ int sgio; /* enum virDomainDiskSGIO */ + char *script; size_t nseclabels; virSecurityDeviceLabelDefPtr *seclabels; -- 1.8.1.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list