
+static CMPIStatus set_disk_props(int type, + const CMPIObjectPath *ref, + const char *id, + const char *disk_path, + uint64_t disk_size, + uint16_t emu_type, + struct inst_list *list) +{ + const char *dev; + CMPIInstance *inst; + CMPIStatus s = {CMPI_RC_OK, NULL}; + + if (type == DOMAIN_LXC) { + dev = "/lxc_mnt/tmp"; + } + else { + dev = "hda"; + } + + inst = sdc_rasd_inst(&s, ref, CIM_RES_TYPE_DISK); + if ((inst == NULL) || (s.rc != CMPI_RC_OK)) + goto out; + + CMSetProperty(inst, "InstanceID", (CMPIValue *)id, CMPI_chars); + CMSetProperty(inst, "AllocationQuantity", + (CMPIValue *)"MegaBytes", CMPI_chars); + CMSetProperty(inst, "Address", (CMPIValue *)disk_path, CMPI_chars); + +#if !VIR_USE_LIBVIRT_STORAGE + CMSetProperty(inst, "VirtualQuantity", + (CMPIValue *)&disk_size, CMPI_uint64); +#endif
There's no need to set the VirtualQuantity for the CDROM. I know this is set in the current code, but it really doesn't make much sense. So I would remove this case.
+ + if (type == DOMAIN_LXC) + CMSetProperty(inst, "MountPoint", (CMPIValue *)dev, CMPI_chars); + else { +#if VIR_USE_LIBVIRT_STORAGE + if (emu_type == 0) + CMSetProperty(inst, "VirtualQuantity", + (CMPIValue *)&disk_size, CMPI_uint64); +#endif
You can remove the #if / #endif here. Just set the VirtualQuantity in the case where emu_type == 0.
+ + if (type == DOMAIN_XENPV) { + dev = "xvda"; + CMSetProperty(inst, "Caption", + (CMPIValue *)"PV disk", CMPI_chars); + } else if (type == DOMAIN_XENFV) { + CMSetProperty(inst, "Caption", + (CMPIValue *)"FV disk", CMPI_chars); + } + + CMSetProperty(inst, "VirtualDevice", + (CMPIValue *)dev, CMPI_chars); + CMSetProperty(inst, "EmulatedType", + (CMPIValue *)&emu_type, CMPI_uint16); + } + + inst_list_add(list, inst); + + out: + return s; +} + +#if VIR_USE_LIBVIRT_STORAGE +static CMPIStatus cdrom_template(const CMPIObjectPath *ref, + int template_type, + struct inst_list *list)
Why not use the CDROM template for both the VIR_USE_LIBVIRT_STORAGE and the !VIR_USE_LIBVIRT_STORAGE cases? The CDROM device should look the same regardless of whether this is storage pool support. Why not call this to handle CDROM devices in both situations?
+static CMPIStatus lxc_template(const CMPIObjectPath *ref, + int template_type, + struct inst_list *list) +{ + uint64_t vol_size = 0; + int emu_type = 0; + const char *vol_path = "/tmp"; + const char *id;
This function looks really similar to the disk_template() function (for the !VIR_USE_LIBVIRT_STORAGE case). Why not use the same function for both? This is why I suggested using a default_disk_template() function.
+ + CMPIStatus s = {CMPI_RC_OK, NULL}; + + switch(template_type) { + case SDC_RASD_MIN: + id = "Minimum"; + break; + case SDC_RASD_MAX: + id = "Maximum"; + break; + case SDC_RASD_INC: + id = "Increment"; + break; + case SDC_RASD_DEF: + id = "Default"; + break; + default: + cu_statusf(_BROKER, &s, + CMPI_RC_ERR_FAILED, + "Unsupported sdc_rasd type"); + goto out; + } + + s = set_disk_props(DOMAIN_LXC, + ref, + id, + vol_path, + vol_size, + emu_type, + list); + + out: + return s; + +}
static CMPIStatus disk_template(const CMPIObjectPath *ref, int template_type, struct inst_list *list)
This code looks similar to the lxc_template() code. Why not move this code to a separate function?
@@ -673,6 +1006,7 @@ const char *id; uint64_t disk_size; uint16_t emu_type = 0; + const char *addr = "/dev/null"; CMPIStatus s = {CMPI_RC_OK, NULL};
switch(template_type) { @@ -702,7 +1036,6 @@ }
pfx = class_prefix_name(CLASSNAME(ref)); - if (STREQ(pfx, "Xen")) { int xen_type[2] = {DOMAIN_XENFV, DOMAIN_XENPV}; int i = 0; @@ -712,6 +1045,7 @@ s = set_disk_props(xen_type[i], ref, id, + addr, disk_size, emu_type, list); @@ -721,7 +1055,8 @@ emu_type = 1; s = set_disk_props(xen_type[i], ref, - id, + id, + addr, disk_size, emu_type, list); @@ -731,7 +1066,8 @@ } else if (STREQ(pfx, "KVM")) { s = set_disk_props(DOMAIN_KVM, ref, - id, + id, + addr, disk_size, emu_type, list); @@ -742,13 +1078,16 @@ s = set_disk_props(DOMAIN_KVM, ref, id, + addr, disk_size, emu_type, list); } else if (STREQ(pfx, "LXC")) { + addr = "/tmp"; s = set_disk_props(DOMAIN_LXC, ref, id, + addr, disk_size, emu_type, list); @@ -761,6 +1100,7 @@ out: return s; } +#endif
static CMPIStatus graphics_template(const CMPIObjectPath *ref, int template_type,
_______________________________________________ Libvirt-cim mailing list Libvirt-cim@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-cim
-- Kaitlin Rupert IBM Linux Technology Center kaitlin@linux.vnet.ibm.com