提交 a6ea791e 编写于 作者: P Peter Krempa

conf: Implement private data formatting and parsing for disks

Allow storing of private data in the status XML for disks.
Signed-off-by: NPeter Krempa <pkrempa@redhat.com>
Reviewed-by: NJán Tomko <jtomko@redhat.com>
上级 e436881b
......@@ -9679,6 +9679,33 @@ virDomainDiskDefDriverParseXML(virDomainDiskDefPtr def,
}
static int
virDomainDiskDefParsePrivateData(xmlXPathContextPtr ctxt,
virDomainDiskDefPtr disk,
virDomainXMLOptionPtr xmlopt)
{
xmlNodePtr private_node = virXPathNode("./privateData", ctxt);
xmlNodePtr save_node = ctxt->node;
int ret = -1;
if (!xmlopt ||
!xmlopt->privateData.diskParse ||
!private_node)
return 0;
ctxt->node = private_node;
if (xmlopt->privateData.diskParse(ctxt, disk) < 0)
goto cleanup;
ret = 0;
cleanup:
ctxt->node = save_node;
return ret;
}
#define VENDOR_LEN 8
#define PRODUCT_LEN 16
......@@ -10094,6 +10121,10 @@ virDomainDiskDefParseXML(virDomainXMLOptionPtr xmlopt,
goto error;
}
if (flags & VIR_DOMAIN_DEF_PARSE_STATUS &&
virDomainDiskDefParsePrivateData(ctxt, def, xmlopt) < 0)
goto error;
if (virDomainDiskDefParseValidate(def, vmSeclabels, nvmSeclabels) < 0)
goto error;
......@@ -24206,6 +24237,35 @@ virDomainDiskDefFormatMirror(virBufferPtr buf,
}
static int
virDomainDiskDefFormatPrivateData(virBufferPtr buf,
virDomainDiskDefPtr disk,
unsigned int flags,
virDomainXMLOptionPtr xmlopt)
{
virBuffer childBuf = VIR_BUFFER_INITIALIZER;
if (!(flags & VIR_DOMAIN_DEF_FORMAT_STATUS) ||
!xmlopt ||
!xmlopt->privateData.diskFormat)
return 0;
virBufferSetChildIndent(&childBuf, buf);
if (xmlopt->privateData.diskFormat(disk, &childBuf) < 0)
goto error;
if (virXMLFormatElement(buf, "privateData", NULL, &childBuf) < 0)
goto error;
return 0;
error:
virBufferFreeAndReset(&childBuf);
return -1;
}
static int
virDomainDiskDefFormat(virBufferPtr buf,
virDomainDiskDefPtr def,
......@@ -24319,6 +24379,9 @@ virDomainDiskDefFormat(virBufferPtr buf,
virDomainDeviceInfoFormat(buf, &def->info,
flags | VIR_DOMAIN_DEF_FORMAT_ALLOW_BOOT);
if (virDomainDiskDefFormatPrivateData(buf, def, flags, xmlopt) < 0)
return -1;
virBufferAdjustIndent(buf, -2);
virBufferAddLit(buf, "</disk>\n");
return 0;
......
......@@ -2738,6 +2738,11 @@ typedef int (*virDomainXMLPrivateDataParseFunc)(xmlXPathContextPtr,
typedef void *(*virDomainXMLPrivateDataGetParseOpaqueFunc)(virDomainObjPtr vm);
typedef int (*virDomainXMLPrivateDataDiskParseFunc)(xmlXPathContextPtr ctxt,
virDomainDiskDefPtr disk);
typedef int (*virDomainXMLPrivateDataDiskFormatFunc)(virDomainDiskDefPtr disk,
virBufferPtr buf);
typedef int (*virDomainXMLPrivateDataStorageSourceParseFunc)(xmlXPathContextPtr ctxt,
virStorageSourcePtr src);
typedef int (*virDomainXMLPrivateDataStorageSourceFormatFunc)(virStorageSourcePtr src,
......@@ -2752,6 +2757,8 @@ struct _virDomainXMLPrivateDataCallbacks {
/* note that private data for devices are not copied when using
* virDomainDefCopy and similar functions */
virDomainXMLPrivateDataNewFunc diskNew;
virDomainXMLPrivateDataDiskParseFunc diskParse;
virDomainXMLPrivateDataDiskFormatFunc diskFormat;
virDomainXMLPrivateDataNewFunc vcpuNew;
virDomainXMLPrivateDataNewFunc chrSourceNew;
virDomainXMLPrivateDataNewFunc vsockNew;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册