[Libvirt-cim] [PATCH] Add support for StoragePool autostart

Sharad Mishra snmishra at us.ibm.com
Thu Apr 14 17:01:34 UTC 2011


# HG changeset patch
# User Sharad Mishra <snmishra at us.ibm.com>
# Date 1302722853 25200
# Node ID b1695aa081851829a25a8210bef8de0348c7b089
# Parent  a521a11eeec4b41399ca954ab17b874a708eb4b3
Add support for StoragePool autostart.

This patch adds support to set autostart on StoragePools

Signed-off-by: Sharad Mishra <snmishra at us.ibm.com>

diff -r a521a11eeec4 -r b1695aa08185 libxkutil/pool_parsing.c
--- a/libxkutil/pool_parsing.c	Wed Mar 23 09:32:46 2011 -0700
+++ b/libxkutil/pool_parsing.c	Wed Apr 13 12:27:33 2011 -0700
@@ -241,6 +241,7 @@
         const xmlChar *xpathstr = (xmlChar *)"/pool";
         const char *name;
 
+        CU_DEBUG("Pool XML : %s", xml);
 	len = strlen(xml) + 1;
 
         if ((xmldoc = xmlParseMemory(xml, len)) == NULL)
@@ -277,11 +278,11 @@
         return ret;
 }
 
-int define_pool(virConnectPtr conn, const char *xml, int res_type)
+int define_pool(virConnectPtr conn, const char *xml, struct virt_pool *pool)
 {
         int ret = 1;
 
-        if (res_type == CIM_RES_TYPE_NET) {
+        if (pool->type == CIM_RES_TYPE_NET) {
                 virNetworkPtr ptr = virNetworkDefineXML(conn, xml);
                 if (ptr == NULL) {
                         CU_DEBUG("Unable to define virtual network");
@@ -297,7 +298,7 @@
                 }
 
                 virNetworkFree(ptr);
-        } else if (res_type == CIM_RES_TYPE_DISK) {
+        } else if (pool->type == CIM_RES_TYPE_DISK) {
 #if VIR_USE_LIBVIRT_STORAGE
                 virStoragePoolPtr ptr = virStoragePoolDefineXML(conn, xml, 0);
                 if (ptr == NULL) {
@@ -313,6 +314,11 @@
                                 CU_DEBUG("Unable to undefine storage pool");
                 }
 
+                if (pool->pool_info.disk.autostart == 1) {
+                        if (virStoragePoolSetAutostart(ptr, 1) != 0) 
+                                CU_DEBUG("Unable to set autostart for pool");
+                }
+
                 virStoragePoolFree(ptr);
 #endif
         }
diff -r a521a11eeec4 -r b1695aa08185 libxkutil/pool_parsing.h
--- a/libxkutil/pool_parsing.h	Wed Mar 23 09:32:46 2011 -0700
+++ b/libxkutil/pool_parsing.h	Wed Apr 13 12:27:33 2011 -0700
@@ -53,6 +53,7 @@
         char *adapter;
         char *port_name;
         char *node_name;
+        uint16_t autostart;
 };
 
 struct virt_pool {
@@ -89,7 +90,7 @@
 int get_pool_from_xml(const char *xml, struct virt_pool *pool, int type);
 char *get_disk_pool_type(uint16_t type);
 
-int define_pool(virConnectPtr conn, const char *xml, int res_type);
+int define_pool(virConnectPtr conn, const char *xml, struct virt_pool *pool);
 int destroy_pool(virConnectPtr conn, const char *name, int res_type);
 
 char *create_resource(virConnectPtr conn, const char *pname,
diff -r a521a11eeec4 -r b1695aa08185 schema/ResourceAllocationSettingData.mof
--- a/schema/ResourceAllocationSettingData.mof	Wed Mar 23 09:32:46 2011 -0700
+++ b/schema/ResourceAllocationSettingData.mof	Wed Apr 13 12:27:33 2011 -0700
@@ -350,6 +350,7 @@
         Values {"Unknown", "Directory, File System, Network File System, "
                 "Disk, ISCSI, Logical, SCSI Host Bus Adapter"}]
       uint16 Type;
+      uint16 Autostart;
       string Path;
       string DevicePaths[];
       string Host;
@@ -369,6 +370,7 @@
         Values {"Unknown", "Directory, File System, Network File System, "
                 "Disk, ISCSI, Logical, SCSI Host Bus Adapter"}]
       uint16 Type;
+      uint16 Autostart;
       string Path;
       string DevicePaths[];
       string Host;
@@ -388,6 +390,7 @@
         Values {"Unknown", "Directory, File System, Network File System, "
                 "Disk, ISCSI, Logical, SCSI Host Bus Adapter"}]
       uint16 Type;
+      uint16 Autostart;
       string Path;
       string DevicePaths[];
       string Host;
diff -r a521a11eeec4 -r b1695aa08185 src/Virt_DevicePool.c
--- a/src/Virt_DevicePool.c	Wed Mar 23 09:32:46 2011 -0700
+++ b/src/Virt_DevicePool.c	Wed Apr 13 12:27:33 2011 -0700
@@ -101,6 +101,8 @@
         if (xml == NULL)
                 return 0;
 
+        CU_DEBUG("pool xml is %s", xml);
+
         *pool = malloc(sizeof(**pool));
         if (*pool == NULL) {
                 ret = 0;
@@ -175,6 +177,8 @@
         uint16_t type;
         struct virt_pool *pool_vals = NULL;
         const char *pool_str = NULL;
+        uint16_t autostart;
+        int  start;
 
         pool = virStoragePoolLookupByName(conn, _pool->tag);
         if (pool == NULL) {
@@ -215,6 +219,17 @@
                               CMPI_chars);
         }
 
+        if (virStoragePoolGetAutostart(pool, &start) == -1) {
+                CU_DEBUG("Failed to read if %s StoragePool is set for "
+                         "Autostart", _pool->tag);
+                goto out;
+        }
+
+        autostart = start;
+
+        CMSetProperty(inst, "Autostart",
+                      (CMPIValue *)&autostart, CMPI_uint16);
+
         result = true;
  out:
         virStoragePoolFree(pool);
diff -r a521a11eeec4 -r b1695aa08185 src/Virt_ResourcePoolConfigurationService.c
--- a/src/Virt_ResourcePoolConfigurationService.c	Wed Mar 23 09:32:46 2011 -0700
+++ b/src/Virt_ResourcePoolConfigurationService.c	Wed Apr 13 12:27:33 2011 -0700
@@ -150,6 +150,7 @@
         pool->pool_info.disk.adapter = NULL;
         pool->pool_info.disk.port_name = NULL;
         pool->pool_info.disk.node_name = NULL;
+        pool->pool_info.disk.autostart = 0;
 }
 
 static char *get_dev_paths(CMPIInstance *inst, 
@@ -289,6 +290,7 @@
         const char *val = NULL;
         const char *msg = NULL;
         uint16_t type;
+        uint16_t autostart;
 
         if (cu_get_u16_prop(inst, "Type", &type) != CMPI_RC_OK)
                 return "Missing `Type' property";
@@ -326,6 +328,14 @@
 
         pool->pool_info.disk.path = strdup(val);
 
+        if (cu_get_u16_prop(inst, "Autostart", &autostart) != CMPI_RC_OK) {
+                CU_DEBUG("Failed to get Autostart, defaulting "
+                         "to no autostart");
+                autostart = 0;
+        }
+
+        pool->pool_info.disk.autostart = autostart;
+
  out:
         return msg;
 
@@ -440,7 +450,7 @@
 static CMPIInstance *connect_and_create(char *xml,
                                         const CMPIObjectPath *ref,
                                         const char *id,
-                                        int res_type,
+                                        struct virt_pool *pool,
                                         CMPIStatus *s)
 {
         virConnectPtr conn;
@@ -452,7 +462,7 @@
                 return NULL;
         }
 
-        if (define_pool(conn, xml, res_type) == 0) {
+        if (define_pool(conn, xml, pool) == 0) {
                 virt_set_status(_BROKER, s,
                                 CMPI_RC_ERR_FAILED,
                                 conn,
@@ -544,7 +554,7 @@
 
         CU_DEBUG("Pool XML:\n%s", xml);
 
-        inst = connect_and_create(xml, reference, full_id, pool->type, &s);
+        inst = connect_and_create(xml, reference, full_id, pool, &s);
         if (s.rc != CMPI_RC_OK)
                 goto out;
 
diff -r a521a11eeec4 -r b1695aa08185 src/Virt_SettingsDefineCapabilities.c
--- a/src/Virt_SettingsDefineCapabilities.c	Wed Mar 23 09:32:46 2011 -0700
+++ b/src/Virt_SettingsDefineCapabilities.c	Wed Apr 13 12:27:33 2011 -0700
@@ -1521,19 +1521,24 @@
                        DISK_POOL_SCSI};
         int pool_types = 7;
         int i;
+        uint16_t autostart;
 
         switch (template_type) {
         case SDC_RASD_MIN:
                 id = "Minimum";
+                autostart = 0;
                 break;
         case SDC_RASD_MAX:
                 id = "Maximum";
+                autostart = 1;
                 break;
         case SDC_RASD_INC:
                 id = "Increment";
+                autostart = 1;
                 break;
         case SDC_RASD_DEF:
                 id = "Default";
+                autostart = 0;
                 break;
         default:
                 cu_statusf(_BROKER, &s,
@@ -1633,6 +1638,8 @@
 
                 CMSetProperty(inst, "Type", (CMPIValue *)&type[i], CMPI_uint16);
                 CMSetProperty(inst, "Path", (CMPIValue *)path, CMPI_chars);
+                CMSetProperty(inst, "Autostart", (CMPIValue *)&autostart, 
+                              CMPI_uint16);
 
                 inst_list_add(list, inst);
         }




More information about the Libvirt-cim mailing list