This source file includes following definitions.
- pcmk__xpath_num_results
1
2
3
4
5
6
7
8
9
10 #ifndef PCMK__CRM_COMMON_XPATH_INTERNAL__H
11 #define PCMK__CRM_COMMON_XPATH_INTERNAL__H
12
13 #include <stdint.h>
14
15 #include <glib.h>
16 #include <libxml/tree.h>
17 #include <libxml/xpath.h>
18 #include <qb/qbdefs.h>
19
20 #include <crm/common/options.h>
21 #include <crm/common/output_internal.h>
22 #include <crm/common/xml_names.h>
23 #include <crm/common/xml_names_internal.h>
24
25
26
27
28
29
30 #define PCMK__XP_MEMBER_NODE_CONFIG \
31 "//" PCMK_XE_CIB "/" PCMK_XE_CONFIGURATION "/" PCMK_XE_NODES \
32 "/" PCMK_XE_NODE \
33 "[not(@" PCMK_XA_TYPE ") or @" PCMK_XA_TYPE "='" PCMK_VALUE_MEMBER "']"
34
35
36 #define PCMK__XP_GUEST_NODE_CONFIG \
37 "//" PCMK_XE_CIB "//" PCMK_XE_CONFIGURATION "//" PCMK_XE_PRIMITIVE \
38 "//" PCMK_XE_META_ATTRIBUTES "//" PCMK_XE_NVPAIR \
39 "[@" PCMK_XA_NAME "='" PCMK_META_REMOTE_NODE "']"
40
41
42 #define PCMK__XP_REMOTE_NODE_CONFIG \
43 "//" PCMK_XE_CIB "//" PCMK_XE_CONFIGURATION "//" PCMK_XE_PRIMITIVE \
44 "[@" PCMK_XA_TYPE "='" PCMK_VALUE_REMOTE "']" \
45 "[@" PCMK_XA_PROVIDER "='pacemaker']"
46
47
48 #define PCMK__XP_REMOTE_NODE_STATUS \
49 "//" PCMK_XE_CIB "//" PCMK_XE_STATUS "//" PCMK__XE_NODE_STATE \
50 "[@" PCMK_XA_REMOTE_NODE "='" PCMK_VALUE_TRUE "']"
51
52
53
54
55
56
57
58
59
60
61
62
63
64 static inline int
65 pcmk__xpath_num_results(const xmlXPathObject *xpath_obj)
66 {
67 int num_results = 0;
68
69 if (xpath_obj != NULL) {
70 num_results = xmlXPathNodeSetGetLength(xpath_obj->nodesetval);
71 }
72
73
74 return QB_MAX(num_results, 0);
75 }
76
77 GString *pcmk__element_xpath(const xmlNode *xml);
78 char *pcmk__xpath_node_id(const char *xpath, const char *node);
79
80 xmlXPathObject *pcmk__xpath_search(xmlDoc *doc, const char *path);
81 xmlNode *pcmk__xpath_result(xmlXPathObject *xpath_obj, int index);
82 xmlNode *pcmk__xpath_match_element(xmlNode *match);
83 void pcmk__xpath_foreach_result(xmlDoc *doc, const char *path,
84 void (*fn)(xmlNode *, void *), void *user_data);
85 xmlNode *pcmk__xpath_find_one(xmlDoc *doc, const char *path, uint8_t level);
86
87 void pcmk__warn_multiple_name_matches(pcmk__output_t *out, xmlNode *search,
88 const char *name);
89
90 #endif