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
********************************************

Reply via email to