# HG changeset patch
# User Sharad Mishra<snmishra(a)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(a)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);
}
_______________________________________________
Libvirt-cim mailing list
Libvirt-cim(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvirt-cim
--
Chip Vincent
Open Virtualization
IBM Linux Technology Center
cvincent(a)linux.vnet.ibm.com