pacemaker 2.1.8-2.1.8
Scalable High-Availability cluster resource manager
Loading...
Searching...
No Matches
xml_compat.h
Go to the documentation of this file.
1/*
2 * Copyright 2004-2024 the Pacemaker project contributors
3 *
4 * The version control history for this file may have further details.
5 *
6 * This source code is licensed under the GNU Lesser General Public License
7 * version 2.1 or later (LGPLv2.1+) WITHOUT ANY WARRANTY.
8 */
9
10#ifndef PCMK__CRM_COMMON_XML_COMPAT__H
11#define PCMK__CRM_COMMON_XML_COMPAT__H
12
13#include <glib.h> // gboolean
14#include <libxml/tree.h> // xmlNode
15
16#include <crm/common/nvpair.h> // crm_xml_add()
17#include <crm/common/xml_names.h> // PCMK_XE_CLONE
18
19#ifdef __cplusplus
20extern "C" {
21#endif
22
33#define XML_PARANOIA_CHECKS 0
34
36xmlDoc *getDocPtr(xmlNode *node);
37
39int add_node_nocopy(xmlNode * parent, const char *name, xmlNode * child);
40
42xmlNode *find_entity(xmlNode *parent, const char *node_name, const char *id);
43
45char *xml_get_path(const xmlNode *xml);
46
48void xml_log_changes(uint8_t level, const char *function, const xmlNode *xml);
49
51void xml_log_patchset(uint8_t level, const char *function, const xmlNode *xml);
52
54gboolean apply_xml_diff(xmlNode *old_xml, xmlNode *diff, xmlNode **new_xml);
55
57void crm_destroy_xml(gpointer data);
58
60gboolean xml_has_children(const xmlNode *root);
61
63static inline const char *
64crm_xml_add_boolean(xmlNode *node, const char *name, gboolean value)
65{
66 return crm_xml_add(node, name, (value? "true" : "false"));
67}
68
69// NOTE: sbd (as of at least 1.5.2) uses this
71static inline const char *
72crm_element_name(const xmlNode *xml)
73{
74 return (xml == NULL)? NULL : (const char *) xml->name;
75}
76
78char *crm_xml_escape(const char *text);
79
80// NOTE: sbd (as of at least 1.5.2) uses this
82xmlNode *copy_xml(xmlNode *src_node);
83
85xmlNode *add_node_copy(xmlNode *new_parent, xmlNode *xml_node);
86
88void purge_diff_markers(xmlNode *a_node);
89
91xmlNode *diff_xml_object(xmlNode *left, xmlNode *right, gboolean suppress);
92
94xmlNode *subtract_xml_object(xmlNode *parent, xmlNode *left, xmlNode *right,
95 gboolean full, gboolean *changed,
96 const char *marker);
97
99gboolean can_prune_leaf(xmlNode *xml_node);
100
102xmlNode *create_xml_node(xmlNode *parent, const char *name);
103
105xmlNode *pcmk_create_xml_text_node(xmlNode *parent, const char *name,
106 const char *content);
107
109xmlNode *pcmk_create_html_node(xmlNode *parent, const char *element_name,
110 const char *id, const char *class_name,
111 const char *text);
112
114xmlNode *first_named_child(const xmlNode *parent, const char *name);
115
117xmlNode *find_xml_node(const xmlNode *root, const char *search_path,
118 gboolean must_find);
119
121xmlNode *crm_next_same_xml(const xmlNode *sibling);
122
124void xml_remove_prop(xmlNode *obj, const char *name);
125
127gboolean replace_xml_child(xmlNode *parent, xmlNode *child, xmlNode *update,
128 gboolean delete_only);
129
131gboolean update_xml_child(xmlNode *child, xmlNode *to_update);
132
134int find_xml_children(xmlNode **children, xmlNode *root, const char *tag,
135 const char *field, const char *value,
136 gboolean search_matches);
137
139xmlNode *get_xpath_object_relative(const char *xpath, xmlNode *xml_obj,
140 int error_level);
141
143void fix_plus_plus_recursive(xmlNode *target);
144
146gboolean add_message_xml(xmlNode *msg, const char *field, xmlNode *xml);
147
149xmlNode *get_message_xml(const xmlNode *msg, const char *field);
150
152const char *xml_latest_schema(void);
153
155const char *get_schema_name(int version);
156
158int get_schema_version(const char *name);
159
161int update_validation(xmlNode **xml_blob, int *best, int max,
162 gboolean transform, gboolean to_logs);
163
165gboolean validate_xml(xmlNode *xml_blob, const char *validation,
166 gboolean to_logs);
167
169gboolean validate_xml_verbose(const xmlNode *xml_blob);
170
171// NOTE: sbd (as of at least 1.5.2) uses this
173gboolean cli_config_update(xmlNode **xml, int *best_version, gboolean to_logs);
174
176static inline const char *
177crm_map_element_name(const xmlNode *xml)
178{
179 if (xml == NULL) {
180 return NULL;
181 } else if (strcmp((const char *) xml->name, "master") == 0) {
182 // Can't use PCMK__XE_PROMOTABLE_LEGACY because it's internal
183 return PCMK_XE_CLONE;
184 } else {
185 return (const char *) xml->name;
186 }
187}
188
190void copy_in_properties(xmlNode *target, const xmlNode *src);
191
193void expand_plus_plus(xmlNode * target, const char *name, const char *value);
194
195#ifdef __cplusplus
196}
197#endif
198
199#endif // PCMK__CRM_COMMON_XML_COMPAT__H
const char * parent
Definition cib.c:27
const char * name
Definition cib.c:26
uint32_t version
Definition remote.c:1
char data[0]
Definition cpg.c:10
Functionality for manipulating name/value pairs.
const char * crm_xml_add(xmlNode *node, const char *name, const char *value)
Create an XML attribute with specified name and value.
Definition nvpair.c:301
const char * target
Definition pcmk_fence.c:29
gboolean update_xml_child(xmlNode *child, xmlNode *to_update)
Definition xml.c:2634
gboolean xml_has_children(const xmlNode *root)
Definition xml.c:2369
const char * get_schema_name(int version)
Definition schemas.c:1612
int get_schema_version(const char *name)
Definition schemas.c:1620
gboolean replace_xml_child(xmlNode *parent, xmlNode *child, xmlNode *update, gboolean delete_only)
Definition xml.c:2567
int update_validation(xmlNode **xml_blob, int *best, int max, gboolean transform, gboolean to_logs)
Definition schemas.c:1642
int add_node_nocopy(xmlNode *parent, const char *name, xmlNode *child)
Definition xml.c:2361
xmlNode * first_named_child(const xmlNode *parent, const char *name)
Definition xml.c:2528
xmlNode * pcmk_create_xml_text_node(xmlNode *parent, const char *name, const char *content)
Definition xml.c:2508
void copy_in_properties(xmlNode *target, const xmlNode *src)
Definition xml.c:2696
void fix_plus_plus_recursive(xmlNode *target)
Definition xml.c:2677
void xml_log_changes(uint8_t level, const char *function, const xmlNode *xml)
char * xml_get_path(const xmlNode *xml)
Get an XPath string that matches an XML element as closely as possible.
Definition xpath.c:360
const char * xml_latest_schema(void)
Definition schemas.c:1606
xmlNode * crm_next_same_xml(const xmlNode *sibling)
Definition xml.c:2555
gboolean cli_config_update(xmlNode **xml, int *best_version, gboolean to_logs)
Definition schemas.c:1729
char * crm_xml_escape(const char *text)
Definition xml.c:2402
gboolean add_message_xml(xmlNode *msg, const char *field, xmlNode *xml)
Definition messages.c:290
void purge_diff_markers(xmlNode *a_node)
Definition patchset.c:1571
xmlDoc * getDocPtr(xmlNode *node)
Definition xml.c:2330
xmlNode * pcmk_create_html_node(xmlNode *parent, const char *element_name, const char *id, const char *class_name, const char *text)
Definition xml.c:2518
gboolean apply_xml_diff(xmlNode *old_xml, xmlNode *diff, xmlNode **new_xml)
Definition patchset.c:1481
xmlNode * get_xpath_object_relative(const char *xpath, xmlNode *xml_obj, int error_level)
Definition xpath.c:374
gboolean validate_xml_verbose(const xmlNode *xml_blob)
Definition schemas.c:1701
void crm_destroy_xml(gpointer data)
Definition xml.c:2324
xmlNode * find_entity(xmlNode *parent, const char *node_name, const char *id)
Definition xml.c:2317
xmlNode * find_xml_node(const xmlNode *root, const char *search_path, gboolean must_find)
Definition xml.c:2534
xmlNode * diff_xml_object(xmlNode *left, xmlNode *right, gboolean suppress)
Definition patchset.c:1577
gboolean validate_xml(xmlNode *xml_blob, const char *validation, gboolean to_logs)
Definition schemas.c:1661
gboolean can_prune_leaf(xmlNode *xml_node)
Definition patchset.c:1590
xmlNode * add_node_copy(xmlNode *new_parent, xmlNode *xml_node)
Definition xml.c:2345
xmlNode * get_message_xml(const xmlNode *msg, const char *field)
Definition messages.c:299
xmlNode * copy_xml(xmlNode *src_node)
Definition xml.c:2461
xmlNode * create_xml_node(xmlNode *parent, const char *name)
Definition xml.c:2476
void xml_remove_prop(xmlNode *obj, const char *name)
Definition xml.c:2561
void expand_plus_plus(xmlNode *target, const char *name, const char *value)
Definition xml.c:2719
void xml_log_patchset(uint8_t level, const char *function, const xmlNode *xml)
xmlNode * subtract_xml_object(xmlNode *parent, xmlNode *left, xmlNode *right, gboolean full, gboolean *changed, const char *marker)
Definition patchset.c:1583
int find_xml_children(xmlNode **children, xmlNode *root, const char *tag, const char *field, const char *value, gboolean search_matches)
Definition xml.c:2641
Defined string constants for XML element and attribute names.
#define PCMK_XE_CLONE
Definition xml_names.h:80