Send Linux-ha-cvs mailing list submissions to
        linux-ha-cvs@lists.linux-ha.org

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: include by andrew from 
      (linux-ha-cvs@lists.linux-ha.org)
   2. Linux-HA CVS: lib by andrew from 
      (linux-ha-cvs@lists.linux-ha.org)
   3. Linux-HA CVS: crm by andrew from 
      (linux-ha-cvs@lists.linux-ha.org)


----------------------------------------------------------------------

Message: 1
Date: Fri,  4 Aug 2006 03:47:21 -0600 (MDT)
From: linux-ha-cvs@lists.linux-ha.org
Subject: [Linux-ha-cvs] Linux-HA CVS: include by andrew from 
To: [EMAIL PROTECTED]
Message-ID: <[EMAIL PROTECTED]>

linux-ha CVS committal

Author  : andrew
Host    : 
Project : linux-ha
Module  : include

Dir     : linux-ha/include/crm/common


Modified Files:
        xml.h 


Log Message:
Utility function for finding all XML nodes matching the supplied criteria 

===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/include/crm/common/xml.h,v
retrieving revision 1.49
retrieving revision 1.50
diff -u -3 -r1.49 -r1.50
--- xml.h       18 Jul 2006 06:16:09 -0000      1.49
+++ xml.h       4 Aug 2006 09:47:21 -0000       1.50
@@ -1,4 +1,4 @@
-/* $Id: xml.h,v 1.49 2006/07/18 06:16:09 andrew Exp $ */
+/* $Id: xml.h,v 1.50 2006/08/04 09:47:21 andrew Exp $ */
 /* 
  * Copyright (C) 2004 Andrew Beekhof <[EMAIL PROTECTED]>
  * 
@@ -236,7 +236,9 @@
 
 extern gboolean update_xml_child(crm_data_t *child, crm_data_t *to_update);
 
-extern gboolean find_xml_child(crm_data_t *child, const char *tag, const char 
*id);
+extern int find_xml_children(
+       crm_data_t **children, crm_data_t *root,
+       const char *tag, const char *field, const char *value);
 
 /*
  *




------------------------------

Message: 2
Date: Fri,  4 Aug 2006 03:47:22 -0600 (MDT)
From: linux-ha-cvs@lists.linux-ha.org
Subject: [Linux-ha-cvs] Linux-HA CVS: lib by andrew from 
To: [EMAIL PROTECTED]
Message-ID: <[EMAIL PROTECTED]>

linux-ha CVS committal

Author  : andrew
Host    : 
Project : linux-ha
Module  : lib

Dir     : linux-ha/lib/crm/common


Modified Files:
        xml.c 


Log Message:
Utility function for finding all XML nodes matching the supplied criteria 

===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/lib/crm/common/xml.c,v
retrieving revision 1.101
retrieving revision 1.102
diff -u -3 -r1.101 -r1.102
--- xml.c       18 Jul 2006 06:16:09 -0000      1.101
+++ xml.c       4 Aug 2006 09:47:21 -0000       1.102
@@ -1,4 +1,4 @@
-/* $Id: xml.c,v 1.101 2006/07/18 06:16:09 andrew Exp $ */
+/* $Id: xml.c,v 1.102 2006/08/04 09:47:21 andrew Exp $ */
 /* 
  * Copyright (C) 2004 Andrew Beekhof <[EMAIL PROTECTED]>
  * 
@@ -2096,31 +2096,32 @@
 }
 
 
-gboolean
-find_xml_child(crm_data_t *child, const char *tag, const char *id)
+int
+find_xml_children(crm_data_t **children, crm_data_t *root,
+                 const char *tag, const char *field, const char *value)
 {
-       gboolean match_found = TRUE;
+       int match_found = 0;
        
-       CRM_CHECK(child != NULL, return FALSE);
+       CRM_CHECK(root != NULL, return FALSE);
+       CRM_CHECK(children != NULL, return FALSE);
        
-       if(safe_str_neq(tag, crm_element_name(child))) {
-               match_found = FALSE;
+       if(tag != NULL && safe_str_neq(tag, crm_element_name(root))) {
 
-       } else if(safe_str_neq(id, ID(child))) {
-               match_found = FALSE;
+       } else if(value != NULL
+                 && safe_str_neq(value, crm_element_value(root, field))) {
 
-       } else if(match_found) {
-               crm_err("Update match found for <%s id=%s.../>", tag, id);
-               crm_log_xml_debug(child, __FUNCTION__);
+       } else {
+               if(*children == NULL) {
+                       *children = create_xml_node(NULL, __FUNCTION__);
+               }
+               add_node_copy(*children, root);
+               match_found = 1;
        }
        
        xml_child_iter(
-               child, child_of_child, 
-               /* only find the first one */
-               if(match_found) {
-                       break;
-               }
-               match_found = find_xml_child(child_of_child, tag, id);
+               root, child, 
+               match_found += find_xml_children(
+                       children, child, tag, field, value);
                );
        
        return match_found;




------------------------------

Message: 3
Date: Fri,  4 Aug 2006 03:50:02 -0600 (MDT)
From: linux-ha-cvs@lists.linux-ha.org
Subject: [Linux-ha-cvs] Linux-HA CVS: crm by andrew from 
To: [EMAIL PROTECTED]
Message-ID: <[EMAIL PROTECTED]>

linux-ha CVS committal

Author  : andrew
Host    : 
Project : linux-ha
Module  : crm

Dir     : linux-ha/crm/admin


Modified Files:
        crm_resource.c 


Log Message:
If at all possible, figure out which resource attribute entry the user is
  trying to change.
If there are multiple matches, display those that match and optionally include
  suggestions for what to do next.

===================================================================
RCS file: /home/cvs/linux-ha/linux-ha/crm/admin/crm_resource.c,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -3 -r1.44 -r1.45
--- crm_resource.c      18 Jul 2006 06:15:54 -0000      1.44
+++ crm_resource.c      4 Aug 2006 09:50:02 -0000       1.45
@@ -1,4 +1,4 @@
-/* $Id: crm_resource.c,v 1.44 2006/07/18 06:15:54 andrew Exp $ */
+/* $Id: crm_resource.c,v 1.45 2006/08/04 09:50:02 andrew Exp $ */
 
 /* 
  * Copyright (C) 2004 Andrew Beekhof <[EMAIL PROTECTED]>
@@ -207,12 +207,18 @@
                  cib_t *cib, pe_working_set_t *data_set)
 {
        int rc = cib_ok;
+       int matches = 0;
        int cib_options = cib_sync_call;
+
+       char *local_attr_id = NULL;
+       char *local_attr_set = NULL;
+       
        crm_data_t *xml_top = NULL;
        crm_data_t *xml_obj = NULL;
+       crm_data_t *nv_children = NULL;
+       crm_data_t *set_children = NULL;
+
        resource_t *rsc = pe_find_resource(data_set->resources, rsc_id);
-       char *local_attr_id = NULL;
-       char *local_attr_set = NULL;
 
        if(do_force) {
                crm_debug("Forcing...");
@@ -223,25 +229,105 @@
                return cib_NOTEXISTS;
        }
 
-       if(attr_set == NULL) {
-               local_attr_set = crm_strdup(rsc->id);
-               attr_set = local_attr_set;
+       /* filter by set name */
+       if(attr_set != NULL) {
+               matches = find_xml_children(
+                       &set_children, rsc->xml, 
+                       XML_TAG_ATTR_SETS, XML_ATTR_ID, attr_set);
+               crm_log_xml_debug(set_children, "search by set:");
        }
 
+       matches = 0;
        if(attr_id == NULL) {
-               local_attr_id = crm_concat(attr_set, attr_name, '-');
-               attr_id = local_attr_id;
+               matches = find_xml_children(
+                       &nv_children, set_children?set_children:rsc->xml,
+                       XML_CIB_TAG_NVPAIR, XML_NVPAIR_ATTR_NAME, attr_name);
+               crm_log_xml_debug(nv_children, "search by name:");
+
+       } else if(attr_id != NULL) {
+               matches = find_xml_children(
+                       &nv_children, set_children?set_children:rsc->xml,
+                       XML_CIB_TAG_NVPAIR, XML_ATTR_ID, attr_id);
+               crm_log_xml_debug(nv_children, "search by id:");
        }
+       
+       
+       if(matches > 1) {
+               fprintf(stderr, "Multiple attributes match name=%s for the 
resource %s:\n",
+                       attr_name, rsc->id);
+
+               if(set_children == NULL) {
+                       free_xml(set_children);
+                       set_children = NULL;
+                       find_xml_children(
+                               &set_children, rsc->xml, 
+                               XML_TAG_ATTR_SETS, NULL, NULL);
+                       xml_child_iter(
+                               set_children, set,
+                               free_xml(nv_children);
+                               nv_children = NULL;
+                               find_xml_children(
+                                       &nv_children, set,
+                                       XML_CIB_TAG_NVPAIR, 
XML_NVPAIR_ATTR_NAME, attr_name);
+                               xml_child_iter(
+                                       nv_children, child,
+                                       fprintf(stderr,"  Set: %s,\tValue: 
%s,\tID: %s\n",
+                                               ID(set),
+                                               crm_element_value(child, 
XML_NVPAIR_ATTR_VALUE),
+                                               ID(child));
+                                       );
+                               );
+                       
+               } else {
+                       xml_child_iter(
+                               nv_children, child,
+                               fprintf(stderr,"  ID: %s, Value: %s\n", 
ID(child),
+                                       crm_element_value(child, 
XML_NVPAIR_ATTR_VALUE));
+                               );
+               }
+               
+               if(BE_QUIET == FALSE) {
+                       fprintf(stderr, "\nThe following text can be suppressed 
with the -Q option:\n");
+                       if(attr_set == NULL) {
+                               fprintf(stderr, "  * To choose an existing 
entry to change, please supply one of the set names above using the -s 
option.\n");
+                       } else {
+                               fprintf(stderr, "  * To choose an existing 
entry to change, please supply one of the IDs above using the -i option.\n");   
                     
+                       }
+                       fprintf(stderr, "  * To create a new value with a 
default ID, please supply a different set name using the -s option.\n");
+                       
+                       fprintf(stderr, "You can also use --query-xml to 
display the complete resource definition.\n");
+               }
+               
+               return cib_unknown;
+               
+       } else if(matches == 0) {
+               if(attr_set == NULL) {
+                       local_attr_set = crm_strdup(rsc->id);
+                       attr_set = local_attr_set;
+               }
+               if(attr_id == NULL) {
+                       local_attr_id = crm_concat(attr_set, attr_name, '-');
+                       attr_id = local_attr_id;
+               }
+               
+               xml_top = create_xml_node(NULL, crm_element_name(rsc->xml));
+               crm_xml_add(xml_top, XML_ATTR_ID, rsc->id);
+               
+               xml_obj = create_xml_node(xml_top, XML_TAG_ATTR_SETS);
+               crm_xml_add(xml_obj, XML_ATTR_ID, attr_set);
+               
+               xml_obj = create_xml_node(xml_obj, XML_TAG_ATTRS);
+               xml_obj = create_xml_node(xml_obj, XML_CIB_TAG_NVPAIR);
 
-       xml_top = create_xml_node(NULL, crm_element_name(rsc->xml));
-       crm_xml_add(xml_top, XML_ATTR_ID, rsc->id);
-
-       xml_obj = create_xml_node(xml_top, XML_TAG_ATTR_SETS);
-       crm_xml_add(xml_obj, XML_ATTR_ID, attr_set);
-
-       xml_obj = create_xml_node(xml_obj, XML_TAG_ATTRS);
-
-       xml_obj = create_xml_node(xml_obj, XML_CIB_TAG_NVPAIR);
+       } else {
+               if(attr_id == NULL) {
+                       /* extract it */
+                       xml_child_iter(nv_children, child, attr_id = ID(child));
+               }
+               xml_obj = create_xml_node(NULL, XML_CIB_TAG_NVPAIR);
+               xml_top = xml_obj;
+       }
+               
        crm_xml_add(xml_obj, XML_ATTR_ID, attr_id);
        crm_xml_add(xml_obj, XML_NVPAIR_ATTR_NAME, attr_name);
        crm_xml_add(xml_obj, XML_NVPAIR_ATTR_VALUE, attr_value);




------------------------------

_______________________________________________
Linux-ha-cvs mailing list
Linux-ha-cvs@lists.linux-ha.org
http://lists.community.tummy.com/mailman/listinfo/linux-ha-cvs


End of Linux-ha-cvs Digest, Vol 33, Issue 3
*******************************************

Reply via email to