
# HG changeset patch # User Sharad Mishra <snmishra@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@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); }