+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(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvirt-cim
--
Kaitlin Rupert
IBM Linux Technology Center
kaitlin(a)linux.vnet.ibm.com