]> xenbits.xensource.com Git - libvirt.git/commitdiff
vz: add serial number to disk devices
authorNikolay Shirokovskiy <nshirokovskiy@virtuozzo.com>
Thu, 22 Sep 2016 14:55:41 +0000 (17:55 +0300)
committerMaxim Nestratov <mnestratov@virtuozzo.com>
Fri, 21 Oct 2016 13:18:56 +0000 (16:18 +0300)
vz sdk supports setting serial number only for disk devices.
Getting serial upon cdrom(for example) is error however
setting is just ignored. Let's check for disk device
explicitly for clarity in both cases.

Setting serial number for other devices is ignored
with an info note just as before.

We need usual conversion from "" to NULL in direction
vz sdk -> libvirt, because "" is not valid for libvirt
and "" means unspecifiend in vz sdk which is NULL for libvirt.

src/vz/vz_sdk.c
src/vz/vz_utils.c

index f36064d9c74a50798c969e6b566a4e4b28fb86f1..a97dc29799a3be335aae1cb5efa3d5f95d63ebeb 100644 (file)
@@ -639,6 +639,14 @@ prlsdkGetDiskInfo(vzDriverPtr driver,
 
     disk->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE;
 
+    if (!isCdrom) {
+        if (!(disk->serial = prlsdkGetStringParamVar(PrlVmDevHd_GetSerialNumber, prldisk)))
+            goto cleanup;
+
+        if (*disk->serial == '\0')
+            VIR_FREE(disk->serial);
+    }
+
     ret = 0;
 
  cleanup:
@@ -3492,6 +3500,11 @@ static int prlsdkConfigureDisk(vzDriverPtr driver,
     pret = PrlVmDev_SetStackIndex(sdkdisk, idx);
     prlsdkCheckRetGoto(pret, cleanup);
 
+    if (devType == PDE_HARD_DISK) {
+        pret = PrlVmDevHd_SetSerialNumber(sdkdisk, disk->serial);
+        prlsdkCheckRetGoto(pret, cleanup);
+    }
+
     return 0;
  cleanup:
     PrlHandle_Free(sdkdisk);
index eaf09f2bc82e924ff34d3189ed76ae213a460cd4..81429d2b0468c039d12e0557ec5577873f161b78 100644 (file)
@@ -323,9 +323,9 @@ vzCheckDiskUnsupportedParams(virDomainDiskDefPtr disk)
         return -1;
     }
 
-    if (disk->serial) {
-        VIR_INFO("%s", _("Setting disk serial number is not "
-                         "supported by vz driver."));
+    if (disk->serial && disk->device != VIR_DOMAIN_DISK_DEVICE_DISK) {
+        VIR_INFO("%s", _("Setting disk serial number is "
+                         "supported only for disk devices."));
     }
 
     if (disk->wwn) {