Send Linux-ha-cvs mailing list submissions to
[email protected]
To subscribe or unsubscribe via the World Wide Web, visit
http://lists.community.tummy.com/mailman/listinfo/linux-ha-cvs
or, via email, send a message with subject or body 'help' to
[EMAIL PROTECTED]
You can reach the person managing the list at
[EMAIL PROTECTED]
When replying, please edit your Subject line so it is more specific
than "Re: Contents of Linux-ha-cvs digest..."
Today's Topics:
1. Linux-HA CVS: cim by panjiam from
([email protected])
----------------------------------------------------------------------
Message: 1
Date: Sun, 19 Mar 2006 20:14:10 -0700 (MST)
From: [email protected]
Subject: [Linux-ha-cvs] Linux-HA CVS: cim by panjiam from
To: [EMAIL PROTECTED]
Message-ID: <[EMAIL PROTECTED]>
linux-ha CVS committal
Author : panjiam
Host :
Project : linux-ha
Module : cim
Dir : linux-ha/cim
Modified Files:
primitive_resource_provider.c resource_group_provider.c
resource_clone_provider.c masterslave_resource_provider.c
resource_common.c
Log Message:
resources add/update
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/cim/primitive_resource_provider.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- primitive_resource_provider.c 21 Dec 2005 14:12:59 -0000 1.1
+++ primitive_resource_provider.c 20 Mar 2006 03:14:10 -0000 1.2
@@ -36,21 +36,17 @@
#include "cluster_info.h"
#include "resource_common.h"
-static const char * PROVIDER_ID = "cim-res";
-static CMPIBroker * G_broker = NULL;
-static char G_classname [] = "HA_PrimitiveResource";
+static const char * PROVIDER_ID = "cim-rsc";
+static CMPIBroker * Broker = NULL;
+static char ClassName [] = "HA_PrimitiveResource";
DeclareInstanceFunctions(PrimitiveResource);
-/**********************************************
- * Instance Provider Interface
- **********************************************/
-
static CMPIStatus
PrimitiveResourceCleanup(CMPIInstanceMI * mi, CMPIContext * ctx)
{
CMPIStatus rc;
- resource_cleanup(G_broker, G_classname, mi, ctx, TID_RES_PRIMITIVE,
&rc);
+ resource_cleanup(Broker, ClassName, mi, ctx, TID_RES_PRIMITIVE, &rc);
CMReturn(CMPI_RC_OK);
}
@@ -59,13 +55,9 @@
CMPIResult * rslt, CMPIObjectPath * ref)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
-
- init_logger(PROVIDER_ID);
- if ( enum_inst_resource(G_broker, G_classname, ctx, rslt, ref, 0,
- TID_RES_PRIMITIVE, &rc) == HA_OK ) {
- CMReturn(CMPI_RC_OK);
- }
-
+ PROVIDER_INIT_LOGGER();
+ enumerate_resource(Broker, ClassName, ctx, rslt, ref, FALSE,
+ TID_RES_PRIMITIVE, &rc);
return rc;
}
@@ -75,11 +67,9 @@
char ** properties)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- if ( enum_inst_resource(G_broker, G_classname, ctx, rslt, ref, 1,
- TID_RES_PRIMITIVE, &rc) == HA_OK ) {
- CMReturn(CMPI_RC_OK);
- }
-
+ PROVIDER_INIT_LOGGER();
+ enumerate_resource(Broker, ClassName, ctx, rslt, ref, TRUE,
+ TID_RES_PRIMITIVE, &rc);
return rc;
}
@@ -89,10 +79,9 @@
char ** properties)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- if ( get_inst_resource(G_broker, G_classname, ctx, rslt, cop,
- properties, TID_RES_PRIMITIVE, &rc) == HA_OK ) {
- CMReturn(CMPI_RC_OK);
- }
+ PROVIDER_INIT_LOGGER();
+ get_resource(Broker, ClassName, ctx, rslt, cop,
+ properties, TID_RES_PRIMITIVE, &rc);
return rc;
}
@@ -102,9 +91,10 @@
CMPIInstance* ci)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
- "CIM_ERR_NOT_SUPPORTED");
- return rc;
+ PROVIDER_INIT_LOGGER();
+ create_resource(Broker, ClassName, ctx, rslt, cop, ci,
+ TID_RES_PRIMITIVE, &rc);
+ return rc;
}
@@ -114,9 +104,10 @@
CMPIInstance * ci, char ** properties)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
- "CIM_ERR_NOT_SUPPORTED");
- return rc;
+ PROVIDER_INIT_LOGGER();
+ update_resource(Broker, ClassName, ctx, rslt, cop, ci, properties,
+ TID_RES_PRIMITIVE, &rc);
+ return rc;
}
@@ -126,8 +117,8 @@
CMPIResult * rslt, CMPIObjectPath * cop)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
- "CIM_ERR_NOT_SUPPORTED");
+ PROVIDER_INIT_LOGGER();
+ delete_resource(Broker, ClassName, ctx, rslt, cop, &rc);
return rc;
}
@@ -137,7 +128,7 @@
char * lang, char * query)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
+ CMSetStatusWithChars(Broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
"CIM_ERR_NOT_SUPPORTED");
return rc;
}
@@ -147,4 +138,4 @@
* instance MI
****************************************************/
-DeclareInstanceMI(PrimitiveResource, HA_PrimitiveResourceProvider, G_broker);
+DeclareInstanceMI(PrimitiveResource, HA_PrimitiveResourceProvider, Broker);
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/cim/resource_group_provider.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -3 -r1.1 -r1.2
--- resource_group_provider.c 21 Dec 2005 14:12:59 -0000 1.1
+++ resource_group_provider.c 20 Mar 2006 03:14:10 -0000 1.2
@@ -37,9 +37,9 @@
#include "cluster_info.h"
#include "resource_common.h"
-static const char * PROVIDER_ID = "cim-res-grp";
-static CMPIBroker * G_broker = NULL;
-static char G_classname [] = "HA_ResourceGroup";
+static const char * PROVIDER_ID = "cim-res-grp";
+static CMPIBroker * Broker = NULL;
+static char ClassName [] = "HA_ResourceGroup";
DeclareInstanceFunctions(ResourceGroup);
@@ -51,7 +51,7 @@
ResourceGroupCleanup(CMPIInstanceMI * mi, CMPIContext * ctx)
{
CMPIStatus rc;
- resource_cleanup(G_broker, G_classname, mi, ctx, TID_RES_GROUP, &rc);
+ resource_cleanup(Broker, ClassName, mi, ctx, TID_RES_GROUP, &rc);
CMReturn(CMPI_RC_OK);
}
@@ -60,14 +60,10 @@
CMPIResult * rslt, CMPIObjectPath * ref)
{
CMPIStatus rc;
- init_logger( PROVIDER_ID );
- cl_log(LOG_INFO,"%s", G_classname);
-
- if ( enum_inst_resource(G_broker, G_classname, ctx, rslt, ref, 0,
- TID_RES_GROUP, &rc) != HA_OK ){
- return rc;
- }
- CMReturn(CMPI_RC_OK);
+ PROVIDER_INIT_LOGGER();
+ enumerate_resource(Broker, ClassName, ctx, rslt, ref, FALSE,
+ TID_RES_GROUP, &rc);
+ return rc;
}
static CMPIStatus
@@ -76,13 +72,10 @@
char ** properties)
{
CMPIStatus rc;
- init_logger( PROVIDER_ID );
-
- if ( enum_inst_resource(G_broker, G_classname, ctx, rslt, ref, 1,
- TID_RES_GROUP, &rc) != HA_OK ) {
- return rc;
- }
- CMReturn(CMPI_RC_OK);
+ PROVIDER_INIT_LOGGER();
+ enumerate_resource(Broker, ClassName, ctx, rslt, ref, TRUE,
+ TID_RES_GROUP, &rc);
+ return rc;
}
static CMPIStatus
@@ -91,21 +84,21 @@
char ** properties)
{
CMPIStatus rc;
- if ( get_inst_resource(G_broker, G_classname, ctx, rslt, cop,
- properties, TID_RES_GROUP, &rc) != HA_OK ) {
- return rc;
- }
- CMReturn(CMPI_RC_OK);
+ PROVIDER_INIT_LOGGER();
+ get_resource(Broker, ClassName, ctx, rslt, cop,
+ properties, TID_RES_GROUP, &rc);
+ return rc;
}
static CMPIStatus
ResourceGroupCreateInstance(CMPIInstanceMI * mi, CMPIContext * ctx,
- CMPIResult * rslt, CMPIObjectPath * cop,
- CMPIInstance * ci)
+ CMPIResult * rslt, CMPIObjectPath * cop,
+ CMPIInstance * ci)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
- "CIM_ERR_NOT_SUPPORTED");
+ PROVIDER_INIT_LOGGER();
+ create_resource(Broker, ClassName, ctx, rslt, cop, ci,
+ TID_RES_GROUP, &rc);
return rc;
}
@@ -115,21 +108,19 @@
CMPIInstance * ci, char ** properties)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
- "CIM_ERR_NOT_SUPPORTED");
+ update_resource(Broker, ClassName, ctx, rslt, cop, ci, properties,
+ TID_RES_GROUP, &rc);
return rc;
-
}
-
static CMPIStatus
ResourceGroupDeleteInstance(CMPIInstanceMI * mi, CMPIContext * ctx,
CMPIResult * rslt, CMPIObjectPath * cop)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
- "CIM_ERR_NOT_SUPPORTED");
- return rc;
+ PROVIDER_INIT_LOGGER();
+ delete_resource(Broker, ClassName, ctx, rslt, cop, &rc);
+ return rc;
}
static CMPIStatus
@@ -138,7 +129,7 @@
char * lang, char * query)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
+ CMSetStatusWithChars(Broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
"CIM_ERR_NOT_SUPPORTED");
return rc;
}
@@ -147,5 +138,4 @@
/**************************************************************
* Entry
*************************************************************/
-
-DeclareInstanceMI(ResourceGroup, HA_ResourceGroupProvider, G_broker);
+DeclareInstanceMI(ResourceGroup, HA_ResourceGroupProvider, Broker);
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/cim/resource_clone_provider.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- resource_clone_provider.c 22 Dec 2005 06:11:48 -0000 1.2
+++ resource_clone_provider.c 20 Mar 2006 03:14:10 -0000 1.3
@@ -34,13 +34,14 @@
#include <cmpift.h>
#include <cmpimacs.h>
#include <hb_api.h>
+#include "utils.h"
#include "cmpi_utils.h"
#include "cluster_info.h"
#include "resource_common.h"
-static const char * PROVIDER_ID = "cim-clone";
-static char G_classname [] = "HA_ResourceClone";
-static CMPIBroker * G_broker = NULL;
+static const char * PROVIDER_ID = "cim-clone";
+static char ClassName [] = "HA_ResourceClone";
+static CMPIBroker * Broker = NULL;
DeclareInstanceFunctions(ResourceClone);
@@ -52,7 +53,7 @@
ResourceCloneCleanup(CMPIInstanceMI * mi, CMPIContext * ctx)
{
CMPIStatus rc;
- resource_cleanup(G_broker, G_classname, mi, ctx, TID_RES_CLONE, &rc);
+ resource_cleanup(Broker, ClassName, mi, ctx, TID_RES_CLONE, &rc);
CMReturn(CMPI_RC_OK);
}
@@ -61,16 +62,10 @@
CMPIResult * rslt, CMPIObjectPath * ref)
{
CMPIStatus rc;
-
- init_logger( PROVIDER_ID );
- cl_log(LOG_INFO, "%s", G_classname);
-
- if ( enum_inst_resource(G_broker, G_classname, ctx, rslt, ref, 0,
- TID_RES_CLONE, &rc) == HA_OK ) {
- CMReturn(CMPI_RC_OK);
- } else {
- CMReturn(CMPI_RC_ERR_FAILED);
- }
+ PROVIDER_INIT_LOGGER();
+ enumerate_resource(Broker, ClassName, ctx, rslt, ref, FALSE,
+ TID_RES_CLONE, &rc);
+ return rc;
}
@@ -80,14 +75,10 @@
char ** properties)
{
CMPIStatus rc;
-
- init_logger( PROVIDER_ID );
- if ( enum_inst_resource(G_broker, G_classname, ctx, rslt, ref, 1,
- TID_RES_CLONE, &rc) == HA_OK ) {
- CMReturn(CMPI_RC_OK);
- } else {
- CMReturn(CMPI_RC_ERR_FAILED);
- }
+ PROVIDER_INIT_LOGGER();
+ enumerate_resource(Broker, ClassName, ctx, rslt, ref, TRUE,
+ TID_RES_CLONE, &rc);
+ return rc;
}
static CMPIStatus
@@ -96,14 +87,10 @@
char ** properties)
{
CMPIStatus rc;
- init_logger( PROVIDER_ID );
-
- if ( get_inst_resource(G_broker, G_classname, ctx, rslt, cop,
properties,
- TID_RES_CLONE, &rc) == HA_OK ) {
- CMReturn(CMPI_RC_OK);
- } else {
- CMReturn(CMPI_RC_ERR_FAILED);
- }
+ PROVIDER_INIT_LOGGER();
+ get_resource(Broker, ClassName, ctx, rslt, cop, properties,
+ TID_RES_CLONE, &rc);
+ return rc;
}
static CMPIStatus
@@ -112,8 +99,8 @@
CMPIInstance * ci)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
- "CIM_ERR_NOT_SUPPORTED");
+ create_resource(Broker, ClassName, ctx, rslt, cop, ci,
+ TID_RES_CLONE, &rc);
return rc;
}
@@ -124,8 +111,9 @@
CMPIInstance * ci, char ** properties)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
- "CIM_ERR_NOT_SUPPORTED");
+ PROVIDER_INIT_LOGGER();
+ update_resource(Broker, ClassName, ctx, rslt, cop, ci, properties,
+ TID_RES_CLONE, &rc);
return rc;
}
@@ -135,8 +123,8 @@
CMPIResult * rslt, CMPIObjectPath * cop)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
- "CIM_ERR_NOT_SUPPORTED");
+ PROVIDER_INIT_LOGGER();
+ delete_resource(Broker, ClassName, ctx, rslt, cop, &rc);
return rc;
}
@@ -146,38 +134,13 @@
char * lang, char * query)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
+ CMSetStatusWithChars(Broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
"CIM_ERR_NOT_SUPPORTED");
return rc;
}
-
-/**************************************************
- * Method Provider
- *************************************************/
-static CMPIStatus
-ResourceCloneInvokeMethod(CMPIMethodMI * mi, CMPIContext * ctx,
- CMPIResult * rslt, CMPIObjectPath * ref,
- const char * method, CMPIArgs * in, CMPIArgs * out)
-{
- CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
- "CIM_ERR_NOT_SUPPORTED");
- return rc;
-}
-
-
-static CMPIStatus
-ResourceCloneMethodCleanup(CMPIMethodMI * mi, CMPIContext * ctx)
-{
- CMReturn(CMPI_RC_OK);
-}
-
-
/*****************************************************
* install provider
****************************************************/
-DeclareInstanceMI(ResourceClone, HA_ResourceCloneProvider, G_broker);
-DeclareMethodMI(ResourceClone, HA_ResourceCloneProvider, G_broker);
-
+DeclareInstanceMI(ResourceClone, HA_ResourceCloneProvider, Broker);
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/cim/masterslave_resource_provider.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- masterslave_resource_provider.c 22 Dec 2005 06:11:48 -0000 1.2
+++ masterslave_resource_provider.c 20 Mar 2006 03:14:10 -0000 1.3
@@ -38,12 +38,11 @@
#include "cluster_info.h"
#include "resource_common.h"
-static const char * PROVIDER_ID = "cim-res-ms";
-static CMPIBroker * G_broker = NULL;
-static char G_classname [] = "HA_MasterSlaveResource";
+static const char * PROVIDER_ID = "cim-res-ms";
+static CMPIBroker * Broker = NULL;
+static char ClassName [] = "HA_MasterSlaveResource";
DeclareInstanceFunctions(MasterSlaveResource);
-DeclareMethodFunctions(MasterSlaveResource);
/**********************************************
* Instance provider functions
@@ -52,7 +51,7 @@
MasterSlaveResourceCleanup(CMPIInstanceMI * mi, CMPIContext * ctx)
{
CMPIStatus rc;
- resource_cleanup(G_broker, G_classname, mi, ctx, TID_RES_MASTER, &rc);
+ resource_cleanup(Broker, ClassName, mi, ctx, TID_RES_MASTER, &rc);
CMReturn(CMPI_RC_OK);
}
@@ -61,13 +60,10 @@
CMPIResult * rslt, CMPIObjectPath * ref)
{
CMPIStatus rc;
- init_logger( PROVIDER_ID );
- if ( enum_inst_resource(G_broker, G_classname, ctx, rslt, ref, 0,
- TID_RES_MASTER, &rc) == HA_OK ) {
- CMReturn(CMPI_RC_OK);
- } else {
- return rc;
- }
+ PROVIDER_INIT_LOGGER();
+ enumerate_resource(Broker, ClassName, ctx, rslt, ref, FALSE,
+ TID_RES_MASTER, &rc);
+ return rc;
}
@@ -77,14 +73,10 @@
char ** properties)
{
CMPIStatus rc;
- init_logger( PROVIDER_ID );
-
- if ( enum_inst_resource(G_broker, G_classname, ctx, rslt, ref, 1,
- TID_RES_MASTER, &rc) == HA_OK ) {
- CMReturn(CMPI_RC_OK);
- } else {
- return rc;
- }
+ PROVIDER_INIT_LOGGER();
+ enumerate_resource(Broker, ClassName, ctx, rslt, ref, TRUE,
+ TID_RES_MASTER, &rc);
+ return rc;
}
static CMPIStatus
@@ -93,15 +85,10 @@
char ** properties)
{
CMPIStatus rc;
- init_logger( PROVIDER_ID );
-
- if ( get_inst_resource(G_broker, G_classname, ctx, rslt, cop,
- properties, TID_RES_MASTER, &rc) != HA_OK ) {
- return rc;
- }
-
- CMReturn(CMPI_RC_OK);
-
+ PROVIDER_INIT_LOGGER();
+ get_resource(Broker, ClassName, ctx, rslt, cop,
+ properties, TID_RES_MASTER, &rc);
+ return rc;
}
static CMPIStatus
@@ -110,8 +97,9 @@
CMPIInstance * ci)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
- "CIM_ERR_NOT_SUPPORTED");
+ PROVIDER_INIT_LOGGER();
+ create_resource(Broker, ClassName, ctx, rslt, cop, ci,
+ TID_RES_MASTER, &rc);
return rc;
}
@@ -122,8 +110,9 @@
CMPIInstance * ci, char ** properties)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
- "CIM_ERR_NOT_SUPPORTED");
+ PROVIDER_INIT_LOGGER();
+ update_resource(Broker, ClassName, ctx, rslt, cop, ci, properties,
+ TID_RES_MASTER, &rc);
return rc;
}
@@ -133,8 +122,8 @@
CMPIResult * rslt, CMPIObjectPath * cop)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
- "CIM_ERR_NOT_SUPPORTED");
+ PROVIDER_INIT_LOGGER();
+ delete_resource(Broker, ClassName, ctx, rslt, cop, &rc);
return rc;
}
@@ -144,38 +133,14 @@
char * lang, char * query)
{
CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
+ CMSetStatusWithChars(Broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
"CIM_ERR_NOT_SUPPORTED");
return rc;
}
-
-/**************************************************
- * Method Provider
- *************************************************/
-static CMPIStatus
-MasterSlaveResourceInvokeMethod(CMPIMethodMI * mi, CMPIContext * ctx,
- CMPIResult * rslt, CMPIObjectPath * ref,
- const char * method, CMPIArgs * in, CMPIArgs * out)
-{
- CMPIStatus rc = {CMPI_RC_OK, NULL};
- CMSetStatusWithChars(G_broker, &rc, CMPI_RC_ERR_NOT_SUPPORTED,
- "CIM_ERR_NOT_SUPPORTED");
- return rc;
-}
-
-
-static CMPIStatus
-MasterSlaveResourceMethodCleanup(CMPIMethodMI * mi, CMPIContext * ctx)
-{
- CMReturn(CMPI_RC_OK);
-}
-
-
/*****************************************************
* install provider
****************************************************/
-DeclareInstanceMI(MasterSlaveResource, HA_MasterSlaveResourceProvider,
G_broker);
-DeclareMethodMI(MasterSlaveResource, HA_MasterSlaveResourceProvider, G_broker);
+DeclareInstanceMI(MasterSlaveResource, HA_MasterSlaveResourceProvider, Broker);
===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/cim/resource_common.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- resource_common.c 22 Dec 2005 06:11:48 -0000 1.2
+++ resource_common.c 20 Mar 2006 03:14:10 -0000 1.3
@@ -12,123 +12,245 @@
#include <cmpimacs.h>
#include "cluster_info.h"
#include "resource_common.h"
+#include "cmpi_utils.h"
-static char sys_name [] = "LinuxHACluster";
-static char sys_cr_classname [] = "HA_Cluster";
-static char G_primitive_classname [] = "HA_PrimitiveResource";
-static char G_group_classname [] = "HA_ResourceGroup";
-static char G_clone_classname [] = "HA_ResourceClone";
-static char G_master_classname [] = "HA_MasterSlaveResource";
+static char SystemName [] = "LinuxHACluster";
+static char SystemClassName [] = "HA_Cluster";
+static char PrimitiveClassName [] = "HA_PrimitiveResource";
+static char GroupClassName [] = "HA_ResourceGroup";
+static char CloneClassName [] = "HA_ResourceClone";
+static char MasterClassName [] = "HA_MasterSlaveResource";
+
+static void primitive_set_properties(CMPIBroker * broker,
+ CMPIInstance * ci, CIMTable *, CMPIStatus *);
+static void group_set_properties(CMPIBroker * broker, CMPIInstance * ci,
+ CIMTable *, CMPIStatus *);
+static void clone_set_properties(CMPIBroker * broker, CMPIInstance * ci,
+ CIMTable *, CMPIStatus *);
+static void master_set_properties(CMPIBroker * broker, CMPIInstance * ci,
+ CIMTable *, CMPIStatus *);
+static void instance_set_attributes(CMPIBroker * broker, CMPIInstance * ci,
+ const char * rscid, CMPIStatus *);
+
+static int primitive_get_properties(CIMTable *, CMPIInstance *,
CMPIStatus *);
+static int clone_get_properties(CIMTable *, CMPIInstance *, CMPIStatus *);
+static int master_get_properties(CIMTable *, CMPIInstance *, CMPIStatus
*);
+static int group_get_properties(CIMTable *, CMPIInstance *, CMPIStatus *);
+
+static CIMArray * instance_get_attributes(CMPIObjectPath *,
+ CMPIInstance *, CMPIStatus *);
+static CMPIInstance * make_instance(CMPIBroker * broker, char * classname,
+ CMPIObjectPath * op, CIMTable * info,
+ uint32_t type, CMPIStatus * rc);
+static CMPIInstance * make_instance_byid(CMPIBroker * broker,
+ CMPIObjectPath * ref, char * rscid,
+ uint32_t type, CMPIStatus * rc);
+static CMPIObjectPath * make_objectpath_byid(CMPIBroker * broker,
+ CMPIObjectPath * ref, char * rscid,
+ uint32_t type, CMPIStatus * rc);
+
+static void
+instance_set_attributes(CMPIBroker * broker, CMPIInstance * ci,
+ const char * rscid, CMPIStatus * rc)
+{
+ CIMArray * attrs = NULL;
+ CMPIArray * array = NULL;
+ int len = 0, i = 0;
+ if ((attrs = cim_get_array(GET_RSC_ATTRIBUTES, rscid, NULL)) == NULL) {
+ cl_log(LOG_ERR, "Resource attribute: can't get attributes.");
+ return;
+ }
+
+ len = cim_array_len(attrs);
+ if ( ( array = CMNewArray(broker, len, CMPI_chars, rc)) == NULL ) {
+ cl_log(LOG_ERR, "Resource attribute: can't make CMPIArray.");
+ cim_array_free(attrs);
+ return;
+ }
+
+ for ( i = 0; i < cim_array_len(attrs); i++ ) {
+ char buf[MAXLEN];
+ char * id, * name, *value, *p;
+ CIMTable *attribute;
+
+ attribute = cim_array_index_v(attrs,i).v.table;
+ if ( attribute == NULL ) {
+ continue;
+ }
+
+ id = cim_table_lookup_v(attribute, "id").v.str;
+ name = cim_table_lookup_v(attribute, "name").v.str;
+ value = cim_table_lookup_v(attribute, "value").v.str;
+ snprintf(buf, MAXLEN, "%s=%s", name, value);
+
+ if ( (p = cim_strdup(buf)) ){
+ CMSetArrayElementAt(array, i, &p, CMPI_chars);
+ }
+ }
+ CMSetProperty(ci, "InstanceAttributes", &array, CMPI_charsA);
+
+}
+
+static CIMArray *
+instance_get_attributes(CMPIObjectPath* cop, CMPIInstance* ci, CMPIStatus* rc)
+{
+ char *id, *rscid, *rsc_crname;
+ CMPIArray * array;
+ int i, len;
+ CIMArray * attrs;
+
+ DEBUG_ENTER();
+ id = CMGetKeyString(cop, "Id", rc);
+ rscid = CMGetKeyString(cop, "SystemName", rc);
+ rsc_crname = CMGetKeyString(cop, "SystemCreationClassName", rc);
+
+ array = CMGetProperty(ci, "InstanceAttributes", rc).value.array;
+ if ( array == NULL ) {
+ cl_log(LOG_ERR, "instance_get_attrs: attributes missing.");
+ return NULL;
+ }
+ len = CMGetArrayCount(array, rc);
+ if ( rc->rc != CMPI_RC_OK) {
+ cl_log(LOG_ERR, "instance_get_attrs: can't get array length.");
+ return NULL;
+ }
+
+ if ((attrs = cim_array_new()) == NULL ) {
+ cl_log(LOG_ERR, "instance_get_attrs: failed to alloc array.");
+ return NULL;
+ }
+
+ for(i = 0; i < len; i++) {
+ CMPIData data;
+ CIMTable * table;
+ char **s, *v, tmp[MAXLEN] = "id-";
+ int len;
+
+ data = CMGetArrayElementAt(array, i, rc);
+ if ( rc->rc != CMPI_RC_OK ) {
+ continue;
+ }
+ v = CMGetCharPtr(data.value.string);
+
+ if((table = cim_table_new()) == NULL ) {
+ continue;
+ }
+
+ /* parse attributes, get key and value */
+ s = split_string(v, &len, " =");
+ if ( len == 2 ) {
+ cim_table_strdup_replace(table, "name", s[0]);
+ cim_table_strdup_replace(table, "value", s[1]);
+ }
+
+ strncat(tmp, s[0], MAXLEN);
+ cim_table_strdup_replace(table, "id", tmp);
+ free_2d_array(s, len, cim_free);
+
+ dump_cim_table(table, 0);
+ cim_array_append(attrs, makeTableData(table));
+ }
+
+ DEBUG_LEAVE();
+ return attrs;
+}
static void
-set_primitive_properties(CMPIInstance * ci, const struct ci_table * info)
+primitive_set_properties(CMPIBroker * broker, CMPIInstance * ci,
+ CIMTable * info, CMPIStatus * rc)
{
- char * hosting_node = NULL;
- char * id, * type, * class, * provider;
+ const mapping_t map [] = { MAPPING_HA_PrimitiveResource};
+ int len = MAPDIM(map);
+ char *hosting_node = NULL, *id;
- id = info->get_data(info, "id").value.string;
- type = info->get_data(info, "type").value.string;
- class = info->get_data(info, "class").value.string;
- provider = info->get_data(info, "provider").value.string;
-
- /* setting properties */
- CMSetProperty(ci, "Type", type, CMPI_chars);
- CMSetProperty(ci, "ResourceClass", class, CMPI_chars);
- CMSetProperty(ci, "Provider", provider, CMPI_chars);
+ cmpi_set_properties(broker, ci, info, map, len, rc);
+ id = cim_table_lookup_v(info, "id").v.str;
-
/* get hosting node */
- if ( (hosting_node = ci_get_res_running_node(id)) != NULL ){
+ if ( (hosting_node = cim_get(GET_RSC_HOST, id, NULL)) != NULL ){
cl_log(LOG_INFO, "Hosting node is %s", hosting_node);
CMSetProperty(ci, "HostingNode", hosting_node, CMPI_chars);
} else {
/* OpenWBEM will segment fault in HostedResource provider
if "HostingNode" not set */
- hosting_node = CIM_STRDUP ("Unknown");
+ hosting_node = cim_strdup ("Unknown");
CMSetProperty(ci, "HostingNode", hosting_node, CMPI_chars);
}
-
- CIM_FREE(hosting_node);
+ cim_free(hosting_node);
}
static void
-set_group_properties(CMPIInstance * ci, const struct ci_table * info)
+group_set_properties(CMPIBroker * broker, CMPIInstance * ci,
+ CIMTable * info, CMPIStatus * rc)
{
/* nothing to do */
}
static void
-set_clone_properties(CMPIInstance * ci, const struct ci_table * clone)
+clone_set_properties(CMPIBroker * broker, CMPIInstance * ci,
+ CIMTable * clone, CMPIStatus * rc)
{
- char * notify, * ordered, * interleave;
-
- notify = clone->get_data(clone, "notify").value.string;
- ordered = clone->get_data(clone, "ordered").value.string;
- interleave = clone->get_data(clone, "interleave").value.string;
- if (notify) { CMSetProperty(ci, "Notify", notify, CMPI_chars); }
- if (ordered) { CMSetProperty(ci, "Ordered", ordered, CMPI_chars); }
- if (interleave) { CMSetProperty(ci, "Interleave", interleave,
CMPI_chars); }
-
+ const mapping_t map [] = { MAPPING_HA_ResourceClone };
+ int len = MAPDIM(map);
+ cmpi_set_properties(broker, ci, clone, map, len, rc);
}
static void
-set_master_properties(CMPIInstance * ci, const struct ci_table * info)
+master_set_properties(CMPIBroker * broker, CMPIInstance * ci,
+ CIMTable * master, CMPIStatus * rc)
{
- char * max_node_masters, * max_masters;
-
- max_node_masters =info->get_data(info,
"max_node_masters").value.string;
- max_masters = info->get_data(info, "max_masters").value.string;
-
- CMSetProperty(ci, "MaxNodeMasters", max_node_masters, CMPI_chars);
- CMSetProperty(ci, "MaxMasters", max_masters, CMPI_chars);
-
+ const mapping_t map [] = { MAPPING_HA_MasterSlaveResource};
+ int len = MAPDIM(map);
+ cmpi_set_properties(broker, ci, master, map, len, rc);
}
static CMPIInstance *
-make_res_inst(CMPIBroker * broker, char * classname, CMPIObjectPath * op,
- struct ci_table * info, uint32_t type, CMPIStatus * rc)
+make_instance(CMPIBroker * broker, char * classname, CMPIObjectPath * op,
+ CIMTable * info, uint32_t type, CMPIStatus * rc)
{
CMPIInstance * ci = NULL;
- char * id , * status;
- char caption [256];
+ char * id;
+ char * status;
+ char caption [MAXLEN];
- if ( info == NULL ) { return NULL; }
ci = CMNewInstance(broker, op, rc);
if ( CMIsNullObject(ci) ) {
- cl_log(LOG_ERR, "%s: can't create instance", __FUNCTION__);
+ cl_log(LOG_ERR, "%s: Can't create instance.", __FUNCTION__);
CMSetStatusWithChars(broker, rc,
CMPI_RC_ERR_FAILED, "Can't get create instance");
goto out;
}
- id = info->get_data(info, "id").value.string;
+ id = cim_table_lookup_v(info, "id").v.str;
- sprintf(caption, "Resource.%s", id);
+ snprintf(caption, MAXLEN, "Resource.%s", id);
/* set other key properties inherited from super classes */
- CMSetProperty(ci, "SystemCreationClassName", sys_cr_classname,
CMPI_chars);
- CMSetProperty(ci, "SystemName", sys_name, CMPI_chars);
+ CMSetProperty(ci, "SystemCreationClassName",
+ SystemClassName, CMPI_chars);
+ CMSetProperty(ci, "SystemName", SystemName, CMPI_chars);
CMSetProperty(ci, "CreationClassName", classname, CMPI_chars);
CMSetProperty(ci, "Id", id, CMPI_chars);
+
/* set Caption */
CMSetProperty(ci, "Caption", caption, CMPI_chars);
-
- if (( status = ci_get_resource_status(id)) ) {
+ if (( status = cim_get_str(GET_RSC_STATUS, id, NULL)) ) {
CMSetProperty(ci, "ResourceStatus", status, CMPI_chars);
- CIM_FREE(status);
+ cim_free(status);
}
+ instance_set_attributes(broker, ci, id, rc);
switch(type){
case TID_RES_PRIMITIVE:
- set_primitive_properties(ci, info);
+ primitive_set_properties(broker, ci, info, rc);
break;
case TID_RES_GROUP:
- set_group_properties(ci, info);
+ group_set_properties(broker, ci, info, rc);
break;
case TID_RES_CLONE:
- set_clone_properties(ci, info);
+ clone_set_properties(broker, ci, info, rc);
break;
case TID_RES_MASTER:
- set_master_properties(ci, info);
+ master_set_properties(broker, ci, info, rc);
break;
}
out:
@@ -136,75 +258,80 @@
}
static CMPIInstance *
-make_res_inst_by_id(CMPIBroker * broker, CMPIObjectPath * ref,
- char * rsc_name, uint32_t type, CMPIStatus * rc)
+make_instance_byid(CMPIBroker * broker, CMPIObjectPath * ref,
+ char * rscid, uint32_t type, CMPIStatus * rc)
{
CMPIInstance * ci = NULL;
- struct ci_table * info;
char * namespace, * classname;
CMPIObjectPath * op;
+ CIMTable * info;
- if ( rsc_name == NULL ) { return NULL; }
namespace = CMGetCharPtr(CMGetNameSpace(ref, rc));
-
- cl_log(LOG_INFO, "%s: make instance for %s", __FUNCTION__, rsc_name);
switch(type) {
case TID_RES_PRIMITIVE:
- classname = G_primitive_classname;
- info = ci_get_primitive_resource(rsc_name);
+ classname = PrimitiveClassName;
+ info = cim_get(GET_PRIMITIVE, rscid, NULL);
break;
case TID_RES_GROUP:
- classname = G_group_classname;
- info = ci_get_resource_group(rsc_name);
+ classname = GroupClassName;
+ if ((info = cim_table_new())) {
+ cim_table_strdup_replace(info, "id", rscid);
+ }
break;
case TID_RES_CLONE:
- classname = G_clone_classname;
- info = ci_get_resource_clone(rsc_name);
+ classname = CloneClassName;
+ info = cim_get(GET_CLONE, rscid, NULL);
break;
case TID_RES_MASTER:
- classname = G_master_classname;
- info = ci_get_master_resource(rsc_name);
+ classname = MasterClassName;
+ info = cim_get(GET_MASTER, rscid, NULL);
break;
default:
return NULL;
}
- if ( info == NULL ) { return NULL; }
+ if ( info == NULL ) {
+ cl_log(LOG_ERR, "%s: failed to get resource", __FUNCTION__);
+ return NULL;
+ }
op = CMNewObjectPath(broker, namespace, classname, rc);
if ( CMIsNullObject(op) ) {
+ cl_log(LOG_ERR, "%s: can't create objectpath", __FUNCTION__);
return NULL;
}
- ci = make_res_inst(broker, classname, op, info, type, rc);
- info->free(info);
- CMRelease(op);
+ ci = make_instance(broker, classname, op, info, type, rc);
+ cim_table_free(info);
+ CMRelease(op);
return ci;
}
static CMPIObjectPath *
-make_res_op_by_id(CMPIBroker * broker, CMPIObjectPath * ref,
- char * rsc_name, uint32_t type, CMPIStatus * rc)
+make_objectpath_byid(CMPIBroker * broker, CMPIObjectPath * ref,
+ char * rscid, uint32_t type, CMPIStatus * rc)
{
- char * namespace, * classname;
+ char * namespace;
+ char * classname;
CMPIObjectPath * op;
- if ( rsc_name == NULL ) { return NULL; }
+ DEBUG_ENTER();
+ if ( rscid == NULL ) { return NULL; }
namespace = CMGetCharPtr(CMGetNameSpace(ref, rc));
switch(type) {
case TID_RES_PRIMITIVE:
- classname = G_primitive_classname;
+ classname = PrimitiveClassName;
break;
case TID_RES_GROUP:
- classname = G_group_classname;
+ classname = GroupClassName;
break;
case TID_RES_CLONE:
- classname = G_clone_classname;
+ classname = CloneClassName;
break;
case TID_RES_MASTER:
- classname = G_master_classname;
+ classname = MasterClassName;
break;
default:
return NULL;
@@ -215,100 +342,103 @@
return NULL;
}
- CMAddKey(op, "Id", rsc_name, CMPI_chars);
- CMAddKey(op, "SystemName", sys_name, CMPI_chars);
- CMAddKey(op, "SystemCreationClassName", sys_cr_classname, CMPI_chars);
+ CMAddKey(op, "Id", rscid, CMPI_chars);
+ CMAddKey(op, "SystemName", SystemName, CMPI_chars);
+ CMAddKey(op, "SystemCreationClassName", SystemClassName, CMPI_chars);
CMAddKey(op, "CreationClassName", classname, CMPI_chars);
+ DEBUG_LEAVE();
return op;
}
-
int
-get_inst_resource(CMPIBroker * broker, char * classname, CMPIContext * ctx,
+get_resource(CMPIBroker * broker, char * classname, CMPIContext * ctx,
CMPIResult * rslt, CMPIObjectPath * ref,
char ** properties, uint32_t type, CMPIStatus * rc)
{
- CMPIInstance* ci = NULL;
- CMPIData data_name;
- char * rsc_name = NULL;
- int ret = 0;
- uint32_t this_type;
+ CMPIInstance * ci = NULL;
+ CMPIData data_name;
+ char * rscid = NULL;
+ uint32_t this_type;
+
+ if ( cim_get_hb_status() != HB_RUNNING ) {
+ rc->rc = CMPI_RC_ERR_FAILED;
+ cl_log(LOG_WARNING, "Heartbeat not running.");
+ return HA_FAIL;
+ }
data_name = CMGetKey(ref, "Id", rc);
if ( data_name.value.string == NULL ) {
cl_log(LOG_WARNING, "key %s is NULL", "Id");
- ret = HA_FAIL;
- goto out;
+ return HA_FAIL;
}
- rsc_name = CMGetCharPtr(data_name.value.string);
+ rscid = CMGetCharPtr(data_name.value.string);
+ this_type = (type == 0)
+ ? cim_get_resource_type(rscid) : type;
- cl_log(LOG_INFO, "rsc_name = %s", rsc_name);
- this_type = type == 0 ? ci_get_resource_type(rsc_name) : type;
-
- ci = make_res_inst_by_id(broker, ref, rsc_name, this_type, rc);
+ ci = make_instance_byid(broker, ref, rscid, this_type, rc);
if ( CMIsNullObject(ci) ) {
- ret = HA_FAIL;
- cl_log(LOG_WARNING,
- "%s: can not create instance.", __FUNCTION__);
- goto out;
+ cl_log(LOG_WARNING, "Can not create resource instance.");
+ return HA_FAIL;
}
CMReturnInstance(rslt, ci);
CMReturnDone(rslt);
-
- ret = HA_OK;
-out:
- return ret;
+ return HA_OK;
}
-
/* should return primitives in group for primitive provider? no */
int
-enum_inst_resource(CMPIBroker * broker, char * classname, CMPIContext * ctx,
+enumerate_resource(CMPIBroker * broker, char * classname, CMPIContext * ctx,
CMPIResult * rslt, CMPIObjectPath * ref, int need_inst,
uint32_t type, CMPIStatus * rc)
{
- uint32_t this_type;
int i;
- struct ci_table * table;
+ CIMArray * names;
- if ( ( table = ci_get_resource_name_table ()) == NULL ) {
+ DEBUG_ENTER();
+ if ( cim_get_hb_status() != HB_RUNNING ) {
+ rc->rc = CMPI_RC_ERR_FAILED;
+ cl_log(LOG_WARNING, "Heartbeat not running.");
+ return HA_FAIL;
+ }
+
+ if ( ( names = cim_get_array(GET_RSC_LIST, NULL, NULL)) == NULL ) {
+ rc->rc = CMPI_RC_ERR_FAILED;
+ cl_log(LOG_WARNING, "Get resource list failed.");
return HA_FAIL;
}
- for ( i = 0; i < CITableSize(table); i++) {
- char * rsc_id;
- rsc_id = CITableGetAt(table, i).value.string;
- if ( rsc_id == NULL ) { continue; }
- /* if type == 0, enum all resources */
- this_type = ci_get_resource_type(rsc_id);
- if ( type != 0 && type != this_type) {
+ for ( i = 0; i < cim_array_len(names); i++) {
+ char * rsc = cim_array_index_v(names, i).v.str;
+ if ( type != cim_get_resource_type(rsc)){
continue;
}
+ /* should we return all sub resource of group/clone/master
+ for the primitive resources enumeration operation? */
if ( need_inst ) {
CMPIInstance * ci = NULL;
- ci = make_res_inst_by_id(broker, ref, rsc_id,
- this_type, rc);
- if ( CMIsNullObject(ci) ){
- CITableFree(table);
+ ci = make_instance_byid(broker, ref, rsc, type, rc);
+ if( ci == NULL) {
+ cim_array_free(names);
return HA_FAIL;
}
-
CMReturnInstance(rslt, ci);
} else {
CMPIObjectPath * op;
- op = make_res_op_by_id(broker, ref, rsc_id,
- this_type, rc);
+ op = make_objectpath_byid(broker, ref, rsc, type, rc);
+ if (op == NULL ) {
+ cim_array_free(names);
+ return HA_FAIL;
+ }
/* add object to rslt */
CMReturnObjectPath(rslt, op);
}
-
}
-
- CITableFree(table);
CMReturnDone(rslt);
+ cim_array_free(names);
+ DEBUG_LEAVE();
return HA_OK;
}
@@ -318,3 +448,185 @@
{
return HA_OK;
}
+
+int
+delete_resource(CMPIBroker * broker, char * classname, CMPIContext * ctx,
+ CMPIResult * rslt, CMPIObjectPath * ref, CMPIStatus * rc)
+{
+ char * rscid;
+ CMPIString * string;
+ int ret = HA_FAIL;
+ if ((string = CMGetKey(ref, "Id", rc).value.string) == NULL ) {
+ cl_log(LOG_WARNING, "Resource id missing.");
+ return HA_FAIL;
+ }
+ rscid = CMGetCharPtr(string);
+ ret = cim_update(DEL_RESOURCE, rscid, NULL, NULL);
+ rc->rc = (ret==HA_OK)? CMPI_RC_OK : CMPI_RC_ERR_FAILED;
+ return ret;
+}
+
+#define GET_PROPERTY(INST,T,P,K,rc) \
+{ \
+ CMPIData data; \
+ data = CMGetProperty(INST, P, rc); \
+ if ( rc->rc == CMPI_RC_OK && data.value.string != NULL ) { \
+ char * v = CMGetCharPtr(data.value.string); \
+ cim_table_strdup_replace(T, K, v);
\
+ } \
+}
+
+static int
+primitive_get_properties(CIMTable * t, CMPIInstance * ci, CMPIStatus * rc)
+{
+ char * groupid;
+ DEBUG_ENTER();
+ GET_PROPERTY(ci, t, "Id", "id", rc);
+ GET_PROPERTY(ci, t, "ResourceClass", "class", rc);
+ GET_PROPERTY(ci, t, "Provider", "provider", rc);
+ GET_PROPERTY(ci, t, "Type", "type", rc);
+ GET_PROPERTY(ci, t, "Groupid", "groupid", rc);
+
+ /* null means this primitive resource does not belong to any group */
+ groupid = cim_table_lookup_v(t, "groupid").v.str;
+ if ( groupid && strcmp(groupid, "null") == 0 ) {
+ cim_table_strdup_replace(t, "groupid", "");
+ }
+ DEBUG_LEAVE();
+ return HA_OK;
+}
+
+static int
+clone_get_properties(CIMTable * t, CMPIInstance * ci, CMPIStatus * rc)
+{
+ DEBUG_ENTER();
+ GET_PROPERTY(ci, t, "Notify", "notify", rc);
+ GET_PROPERTY(ci, t, "Ordered", "ordered", rc);
+ GET_PROPERTY(ci, t, "Interleave", "interleave", rc);
+ GET_PROPERTY(ci, t, "CloneMax", "clone_max", rc);
+ GET_PROPERTY(ci, t, "CloneNodeMax", "clone_node_max", rc);
+ DEBUG_LEAVE();
+ return HA_OK;
+}
+
+static int
+master_get_properties(CIMTable * t, CMPIInstance * ci, CMPIStatus * rc)
+{
+ DEBUG_ENTER();
+ GET_PROPERTY(ci, t, "CloneMax", "clone_max", rc);
+ GET_PROPERTY(ci, t, "CloneNodeMax", "clone_node_max", rc);
+ GET_PROPERTY(ci, t, "MaxMasters", "max_masters", rc);
+ GET_PROPERTY(ci, t, "MaxNodeMasters", "max_node_masters", rc);
+ DEBUG_LEAVE();
+ return HA_OK;
+}
+
+static int
+group_get_properties(CIMTable * t, CMPIInstance * ci, CMPIStatus * rc)
+{
+ /* nothing */
+ return HA_OK;
+}
+
+int
+update_resource(CMPIBroker * broker, char * classname, CMPIContext * ctx,
+ CMPIResult * rslt, CMPIObjectPath * cop, CMPIInstance * ci,
+ char ** properties, uint32_t type, CMPIStatus * rc)
+{
+ CIMTable * table = NULL;
+ CIMArray * attrs = NULL;
+ int ret = HA_FAIL;
+ char * rscid;
+
+ DEBUG_ENTER();
+ /* get resource id */
+ if ((rscid = CMGetKeyString(cop, "Id", rc)) == NULL ) {
+ return HA_FAIL;
+ }
+ /* get original values, and set new values */
+ switch(type){
+ case TID_RES_PRIMITIVE:
+ table = cim_get(GET_PRIMITIVE, rscid, NULL);
+ ret = primitive_get_properties(table, ci, rc);
+ break;
+ case TID_RES_CLONE:
+ table = cim_get(GET_CLONE, rscid, NULL);
+ ret = clone_get_properties(table, ci, rc);
+ ret = cim_update(UPDATE_CLONE, NULL, table, NULL);
+ break;
+ case TID_RES_MASTER:
+ table = cim_get(GET_MASTER, rscid, NULL);
+ ret = master_get_properties(table, ci, rc);
+ ret = cim_update(UPDATE_MASTER, NULL, table, NULL);
+ break;
+ case TID_RES_GROUP:
+ table = cim_table_new();
+ ret = group_get_properties(table, ci, rc);
+ break;
+ }
+
+ cim_table_free(table);
+ /* update attributes */
+ attrs = instance_get_attributes(cop, ci, rc);
+ if ( attrs ) {
+ cim_update(UPDATE_ATTRIBUTES, rscid, attrs, NULL);
+ cim_array_free(attrs);
+ }
+
+ rc->rc = (ret==HA_OK) ? CMPI_RC_OK: CMPI_RC_ERR_FAILED;
+ DEBUG_LEAVE();
+ return ret;
+}
+
+int
+create_resource(CMPIBroker * broker, char * classname, CMPIContext * ctx,
+ CMPIResult * rslt, CMPIObjectPath * cop, CMPIInstance * ci,
+ uint32_t type, CMPIStatus * rc)
+{
+ CIMTable * table = NULL;
+ CIMArray * attrs = NULL;
+ int ret = HA_FAIL;
+ char * rscid;
+
+ DEBUG_ENTER();
+ if((table = cim_table_new()) == NULL ) {
+ return HA_FAIL;
+ }
+
+ /* get resource id */
+ if ((rscid = CMGetKeyString(cop, "Id", rc)) == NULL ) {
+ return HA_FAIL;
+ }
+
+ /* get user's attribute */
+ attrs = instance_get_attributes(cop, ci, rc);
+ if ( attrs == NULL) {
+ return HA_FAIL;
+ }
+ cim_table_replace(table, cim_strdup("array"), makeArrayData(attrs));
+
+ switch(type){
+ case TID_RES_PRIMITIVE:
+ ret = primitive_get_properties(table, ci, rc);
+ break;
+ case TID_RES_CLONE:
+ cim_table_strdup_replace(table, "advance", "clone");
+ ret = clone_get_properties(table, ci, rc);
+ break;
+ case TID_RES_MASTER:
+ ret = master_get_properties(table, ci, rc);
+ cim_table_strdup_replace(table, "advance", "master");
+ break;
+ case TID_RES_GROUP:
+ ret = group_get_properties(table, ci, rc);
+ break;
+ }
+
+ ret = cim_update(CREATE_RESOURCE, rscid, table, NULL);
+ rc->rc = (ret==HA_OK) ? CMPI_RC_OK: CMPI_RC_ERR_FAILED;
+ cim_table_free(table);
+ DEBUG_LEAVE();
+ return ret;
+
+}
+
------------------------------
_______________________________________________
Linux-ha-cvs mailing list
[email protected]
http://lists.community.tummy.com/mailman/listinfo/linux-ha-cvs
End of Linux-ha-cvs Digest, Vol 28, Issue 45
********************************************