static int testCompareXMLToXMLFiles(const char *poolxml, const char *inxml, const char *outxml, unsigned int flags) { char *actual = NULL; int ret = -1; virStoragePoolDefPtr pool = NULL; virStorageVolDefPtr dev = NULL; if (!(pool = virStoragePoolDefParseFile(poolxml))) goto fail; if (!(dev = virStorageVolDefParseFile(pool, inxml, flags))) goto fail; if (!(actual = virStorageVolDefFormat(pool, dev))) goto fail; if (virTestCompareToFile(actual, outxml) < 0) goto fail; ret = 0; fail: VIR_FREE(actual); virStoragePoolDefFree(pool); virStorageVolDefFree(dev); return ret; }
static int testCompareXMLToXMLFiles(const char *poolxml, const char *inxml, const char *outxml) { char *poolXmlData = NULL; char *inXmlData = NULL; char *outXmlData = NULL; char *actual = NULL; int ret = -1; virStoragePoolDefPtr pool = NULL; virStorageVolDefPtr dev = NULL; if (virtTestLoadFile(poolxml, &poolXmlData) < 0) goto fail; if (virtTestLoadFile(inxml, &inXmlData) < 0) goto fail; if (virtTestLoadFile(outxml, &outXmlData) < 0) goto fail; if (!(pool = virStoragePoolDefParseString(poolXmlData))) goto fail; if (!(dev = virStorageVolDefParseString(pool, inXmlData))) goto fail; if (!(actual = virStorageVolDefFormat(pool, dev))) goto fail; if (STRNEQ(outXmlData, actual)) { virtTestDifference(stderr, outXmlData, actual); goto fail; } ret = 0; fail: VIR_FREE(poolXmlData); VIR_FREE(inXmlData); VIR_FREE(outXmlData); VIR_FREE(actual); virStoragePoolDefFree(pool); virStorageVolDefFree(dev); return ret; }
static char * parallelsStorageVolGetXMLDesc(virStorageVolPtr vol, unsigned int flags) { parallelsConnPtr privconn = vol->conn->privateData; virStoragePoolObjPtr privpool; virStorageVolDefPtr privvol; char *ret = NULL; virCheckFlags(0, NULL); parallelsDriverLock(privconn); privpool = virStoragePoolObjFindByName(&privconn->pools, vol->pool); parallelsDriverUnlock(privconn); if (privpool == NULL) { parallelsPoolNotFoundError(vol->pool); goto cleanup; } privvol = virStorageVolDefFindByName(privpool, vol->name); if (privvol == NULL) { virReportError(VIR_ERR_NO_STORAGE_VOL, _("no storage vol with matching name '%s'"), vol->name); goto cleanup; } if (!virStoragePoolObjIsActive(privpool)) { virReportError(VIR_ERR_OPERATION_INVALID, _("storage pool '%s' is not active"), vol->pool); goto cleanup; } ret = virStorageVolDefFormat(privpool->def, privvol); cleanup: if (privpool) virStoragePoolObjUnlock(privpool); return ret; }
static char * esxStorageVolGetXMLDesc(virStorageVolPtr volume, unsigned int flags) { esxPrivate *priv = volume->conn->privateData; virStoragePoolDef pool; char *datastorePath = NULL; esxVI_FileInfo *fileInfo = NULL; esxVI_VmDiskFileInfo *vmDiskFileInfo = NULL; esxVI_IsoImageFileInfo *isoImageFileInfo = NULL; esxVI_FloppyImageFileInfo *floppyImageFileInfo = NULL; virStorageVolDef def; char *xml = NULL; virCheckFlags(0, NULL); memset(&pool, 0, sizeof(pool)); memset(&def, 0, sizeof(def)); if (esxLookupVMFSStoragePoolType(priv->primary, volume->pool, &pool.type) < 0) { return NULL; } /* Lookup file info */ if (virAsprintf(&datastorePath, "[%s] %s", volume->pool, volume->name) < 0) goto cleanup; if (esxVI_LookupFileInfoByDatastorePath(priv->primary, datastorePath, false, &fileInfo, esxVI_Occurrence_RequiredItem) < 0) { goto cleanup; } vmDiskFileInfo = esxVI_VmDiskFileInfo_DynamicCast(fileInfo); isoImageFileInfo = esxVI_IsoImageFileInfo_DynamicCast(fileInfo); floppyImageFileInfo = esxVI_FloppyImageFileInfo_DynamicCast(fileInfo); def.name = volume->name; if (esxVI_LookupStorageVolumeKeyByDatastorePath(priv->primary, datastorePath, &def.key) < 0) { goto cleanup; } def.type = VIR_STORAGE_VOL_FILE; def.target.path = datastorePath; if (vmDiskFileInfo) { /* Scale from kilobyte to byte */ def.target.capacity = vmDiskFileInfo->capacityKb->value * 1024; def.target.allocation = vmDiskFileInfo->fileSize->value; def.target.format = VIR_STORAGE_FILE_VMDK; } else if (isoImageFileInfo) { def.target.capacity = fileInfo->fileSize->value; def.target.allocation = fileInfo->fileSize->value; def.target.format = VIR_STORAGE_FILE_ISO; } else if (floppyImageFileInfo) { def.target.capacity = fileInfo->fileSize->value; def.target.allocation = fileInfo->fileSize->value; def.target.format = VIR_STORAGE_FILE_RAW; } else { virReportError(VIR_ERR_INTERNAL_ERROR, _("File '%s' has unknown type"), datastorePath); goto cleanup; } xml = virStorageVolDefFormat(&pool, &def); cleanup: VIR_FREE(datastorePath); esxVI_FileInfo_Free(&fileInfo); VIR_FREE(def.key); return xml; }
static char *vboxStorageVolGetXMLDesc(virStorageVolPtr vol, unsigned int flags) { vboxDriverPtr data = vol->conn->privateData; IMedium *hardDisk = NULL; unsigned char uuid[VIR_UUID_BUFLEN]; PRUnichar *hddFormatUtf16 = NULL; char *hddFormatUtf8 = NULL; PRUint64 hddLogicalSize = 0; PRUint64 hddActualSize = 0; virStoragePoolDef pool; virStorageVolDef def; vboxIID hddIID; PRUint32 hddstate; nsresult rc; char *ret = NULL; if (!data->vboxObj) return ret; virCheckFlags(0, NULL); memset(&pool, 0, sizeof(pool)); memset(&def, 0, sizeof(def)); if (virUUIDParse(vol->key, uuid) < 0) { virReportError(VIR_ERR_INVALID_ARG, _("Could not parse UUID from '%s'"), vol->key); return ret; } VBOX_IID_INITIALIZE(&hddIID); vboxIIDFromUUID(&hddIID, uuid); rc = gVBoxAPI.UIVirtualBox.GetHardDiskByIID(data->vboxObj, &hddIID, &hardDisk); if (NS_FAILED(rc)) goto cleanup; gVBoxAPI.UIMedium.GetState(hardDisk, &hddstate); if (hddstate == MediaState_Inaccessible) goto cleanup; /* since there is currently one default pool now * and virStorageVolDefFormat() just checks it type * so just assign it for now, change the behaviour * when vbox supports pools. */ pool.type = VIR_STORAGE_POOL_DIR; def.type = VIR_STORAGE_VOL_FILE; rc = gVBoxAPI.UIMedium.GetLogicalSize(hardDisk, &hddLogicalSize); if (NS_FAILED(rc)) goto cleanup; def.target.capacity = hddLogicalSize; rc = gVBoxAPI.UIMedium.GetSize(hardDisk, &hddActualSize); if (NS_FAILED(rc)) goto cleanup; if (VIR_STRDUP(def.name, vol->name) < 0) goto cleanup; if (VIR_STRDUP(def.key, vol->key) < 0) goto cleanup; rc = gVBoxAPI.UIMedium.GetFormat(hardDisk, &hddFormatUtf16); if (NS_FAILED(rc)) goto cleanup; VBOX_UTF16_TO_UTF8(hddFormatUtf16, &hddFormatUtf8); if (!hddFormatUtf8) goto cleanup; VIR_DEBUG("Storage Volume Format: %s", hddFormatUtf8); if (STRCASEEQ("vmdk", hddFormatUtf8)) def.target.format = VIR_STORAGE_FILE_VMDK; else if (STRCASEEQ("vhd", hddFormatUtf8)) def.target.format = VIR_STORAGE_FILE_VPC; else if (STRCASEEQ("vdi", hddFormatUtf8)) def.target.format = VIR_STORAGE_FILE_VDI; else def.target.format = VIR_STORAGE_FILE_RAW; ret = virStorageVolDefFormat(&pool, &def); cleanup: VBOX_UTF16_FREE(hddFormatUtf16); VBOX_UTF8_FREE(hddFormatUtf8); VBOX_MEDIUM_RELEASE(hardDisk); vboxIIDUnalloc(&hddIID); return ret; }