
# HG changeset patch # User Kaitlin Rupert <karupert@us.ibm.com> # Date 1239296847 25200 # Node ID cdf4fa212c15f1b22b0b4b1d1535e1716e1e52d2 # Parent 3b7ba02cd34a4b91903e4d412fc7d5dd75779598 Add logic to delete storage pools. Older versions of libvirt don't support storage pool creation / deletion. So the pool deletion logic needs to return a different error message in the case of older versions. Signed-off-by: Kaitlin Rupert <karupert@us.ibm.com> diff -r 3b7ba02cd34a -r cdf4fa212c15 libxkutil/pool_parsing.c --- a/libxkutil/pool_parsing.c Tue Apr 07 21:54:43 2009 -0300 +++ b/libxkutil/pool_parsing.c Thu Apr 09 10:07:27 2009 -0700 @@ -138,9 +138,32 @@ err1: virNetworkFree(ptr); + + } else if (res_type == CIM_RES_TYPE_DISK) { +#if VIR_USE_LIBVIRT_STORAGE + virStoragePoolPtr ptr = virStoragePoolLookupByName(conn, name); + if (ptr == NULL) { + CU_DEBUG("Storage pool %s is not defined", name); + return 0; + } + + if (virStoragePoolDestroy(ptr) != 0) { + CU_DEBUG("Unable to destroy storage pool"); + goto err2; + } + + if (virStoragePoolUndefine(ptr) != 0) { + CU_DEBUG("Unable to undefine storage pool"); + goto err2; + } + + ret = 1; + + err2: + virStoragePoolFree(ptr); +#endif } - return ret; } diff -r 3b7ba02cd34a -r cdf4fa212c15 src/Virt_ResourcePoolConfigurationService.c --- a/src/Virt_ResourcePoolConfigurationService.c Tue Apr 07 21:54:43 2009 -0300 +++ b/src/Virt_ResourcePoolConfigurationService.c Thu Apr 09 10:07:27 2009 -0700 @@ -139,6 +139,18 @@ return msg; } + +static const char *_delete_pool(virConnectPtr conn, + const char *pool_name, + uint16_t type) +{ + const char *msg = NULL; + + if (destroy_pool(conn, pool_name, type) == 0) + msg = "Unable to destroy resource pool"; + + return msg; +} #else static const char *disk_rasd_to_pool(CMPIInstance *inst, struct virt_pool *pool, @@ -146,6 +158,13 @@ { return "Storage pool creation not supported in this version of libvirt"; } + +static const char *_delete_pool(virConnectPtr conn, + const char *pool_name, + uint16_t type) +{ + return "Storage pool deletion not supported in this version of libvirt"; +} #endif static const char *rasd_to_vpool(CMPIInstance *inst, @@ -379,6 +398,7 @@ CMPIObjectPath *pool = NULL; virConnectPtr conn = NULL; const char *poolid = NULL; + const char *msg = NULL; char *pool_name = NULL; uint16_t type; @@ -432,10 +452,12 @@ goto out; } - if (destroy_pool(conn, pool_name, type) == 0) { + msg = _delete_pool(conn, pool_name, type); + if (msg != NULL) { cu_statusf(_BROKER, &s, CMPI_RC_ERR_FAILED, - "Unable to destroy resource pool"); + "Storage pool deletion error: %s", msg); + goto out; }