storage|test|vbox: Implement support for validating storage volume XMLs

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Jonathon Jongsma <jjongsma@redhat.com>
This commit is contained in:
Peter Krempa 2022-10-18 14:07:55 +02:00
parent db5f05dd22
commit df570882cd
3 changed files with 32 additions and 10 deletions

View File

@ -1877,8 +1877,13 @@ storageVolCreateXML(virStoragePoolPtr pool,
virStorageBackend *backend;
virStorageVolPtr vol = NULL, newvol = NULL;
g_autoptr(virStorageVolDef) voldef = NULL;
unsigned int parseFlags = VIR_VOL_XML_PARSE_OPT_CAPACITY;
virCheckFlags(VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA, NULL);
virCheckFlags(VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA |
VIR_STORAGE_VOL_CREATE_VALIDATE, NULL);
if (flags & VIR_STORAGE_VOL_CREATE_VALIDATE)
parseFlags |= VIR_VOL_XML_PARSE_VALIDATE;
if (!(obj = virStoragePoolObjFromStoragePool(pool)))
return NULL;
@ -1893,7 +1898,7 @@ storageVolCreateXML(virStoragePoolPtr pool,
if ((backend = virStorageBackendForType(def->type)) == NULL)
goto cleanup;
voldef = virStorageVolDefParse(def, xmldesc, NULL, VIR_VOL_XML_PARSE_OPT_CAPACITY);
voldef = virStorageVolDefParse(def, xmldesc, NULL, parseFlags);
if (voldef == NULL)
goto cleanup;
@ -2012,11 +2017,16 @@ storageVolCreateXMLFrom(virStoragePoolPtr pool,
virStorageVolPtr vol = NULL;
int buildret;
g_autoptr(virStorageVolDef) voldef = NULL;
unsigned int parseFlags = VIR_VOL_XML_PARSE_NO_CAPACITY;
virCheckFlags(VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA |
VIR_STORAGE_VOL_CREATE_REFLINK,
VIR_STORAGE_VOL_CREATE_REFLINK |
VIR_STORAGE_VOL_CREATE_VALIDATE,
NULL);
if (flags & VIR_STORAGE_VOL_CREATE_VALIDATE)
parseFlags |= VIR_VOL_XML_PARSE_VALIDATE;
obj = virStoragePoolObjFindByUUID(driver->pools, pool->uuid);
if (obj && STRNEQ(pool->name, volsrc->pool)) {
virObjectUnlock(obj);
@ -2066,7 +2076,7 @@ storageVolCreateXMLFrom(virStoragePoolPtr pool,
goto cleanup;
}
voldef = virStorageVolDefParse(def, xmldesc, NULL, VIR_VOL_XML_PARSE_NO_CAPACITY);
voldef = virStorageVolDefParse(def, xmldesc, NULL, parseFlags);
if (voldef == NULL)
goto cleanup;

View File

@ -7182,14 +7182,18 @@ testStorageVolCreateXML(virStoragePoolPtr pool,
virStoragePoolDef *def;
virStorageVolPtr ret = NULL;
g_autoptr(virStorageVolDef) privvol = NULL;
unsigned int parseFlags = 0;
virCheckFlags(0, NULL);
virCheckFlags(VIR_STORAGE_VOL_CREATE_VALIDATE, NULL);
if (flags & VIR_STORAGE_VOL_CREATE_VALIDATE)
parseFlags |= VIR_VOL_XML_PARSE_VALIDATE;
if (!(obj = testStoragePoolObjFindActiveByName(privconn, pool->name)))
return NULL;
def = virStoragePoolObjGetDef(obj);
privvol = virStorageVolDefParse(def, xmldesc, NULL, 0);
privvol = virStorageVolDefParse(def, xmldesc, NULL, parseFlags);
if (privvol == NULL)
goto cleanup;
@ -7241,14 +7245,18 @@ testStorageVolCreateXMLFrom(virStoragePoolPtr pool,
virStorageVolDef *origvol = NULL;
virStorageVolPtr ret = NULL;
g_autoptr(virStorageVolDef) privvol = NULL;
unsigned int parseFlags = 0;
virCheckFlags(0, NULL);
virCheckFlags(VIR_STORAGE_VOL_CREATE_VALIDATE, NULL);
if (flags & VIR_STORAGE_VOL_CREATE_VALIDATE)
parseFlags |= VIR_VOL_XML_PARSE_VALIDATE;
if (!(obj = testStoragePoolObjFindActiveByName(privconn, pool->name)))
return NULL;
def = virStoragePoolObjGetDef(obj);
privvol = virStorageVolDefParse(def, xmldesc, NULL, 0);
privvol = virStorageVolDefParse(def, xmldesc, NULL, parseFlags);
if (privvol == NULL)
goto cleanup;

View File

@ -409,11 +409,15 @@ vboxStorageVolCreateXML(virStoragePoolPtr pool,
virStorageVolPtr ret = NULL;
g_autoptr(virStorageVolDef) def = NULL;
g_autofree char *homedir = NULL;
unsigned int parseFlags = 0;
if (!data->vboxObj)
return ret;
virCheckFlags(0, NULL);
virCheckFlags(VIR_STORAGE_VOL_CREATE_VALIDATE, NULL);
if (flags & VIR_STORAGE_VOL_CREATE_VALIDATE)
parseFlags |= VIR_VOL_XML_PARSE_VALIDATE;
/* since there is currently one default pool now
* and virStorageVolDefFormat() just checks it type
@ -423,7 +427,7 @@ vboxStorageVolCreateXML(virStoragePoolPtr pool,
memset(&poolDef, 0, sizeof(poolDef));
poolDef.type = VIR_STORAGE_POOL_DIR;
if ((def = virStorageVolDefParse(&poolDef, xml, NULL, 0)) == NULL)
if ((def = virStorageVolDefParse(&poolDef, xml, NULL, parseFlags)) == NULL)
goto cleanup;
if (!def->name ||