43         free(
data->digest_all_calc);
    44         free(
data->digest_restart_calc);
    45         free(
data->digest_secure_calc);
    53 attr_in_string(xmlAttrPtr a, 
void *user_data)
    58     if (strstr((
const char *) user_data, 
name) == NULL) {
    59         crm_trace(
"Filtering %s (not found in '%s')",
    60                   (
const char *) a->name, (
const char *) user_data);
    69 attr_not_in_string(xmlAttrPtr a, 
void *user_data)
    74     if (strstr((
const char *) user_data, 
name) != NULL) {
    76                   (
const char *) a->name, (
const char *) user_data);
    83 #if ENABLE_VERSIONED_ATTRS    85 append_versioned_params(xmlNode *versioned_params, 
const char *ra_version, xmlNode *params)
    87     GHashTable *hash = pe_unpack_versioned_parameters(versioned_params, ra_version);
    92     g_hash_table_iter_init(&iter, hash);
    93     while (g_hash_table_iter_next(&iter, (gpointer *) &key, (gpointer *) &value)) {
    96     g_hash_table_destroy(hash);
   104     const char *ra_version = NULL;
   105     xmlNode *local_versioned_params = NULL;
   106     pe_rsc_action_details_t *details = pe_rsc_action_details(
action);
   109     pe_get_versioned_attributes(local_versioned_params, rsc, node, data_set);
   110     if (xml_op != NULL) {
   113     append_versioned_params(local_versioned_params, ra_version,
   115     append_versioned_params(rsc->versioned_parameters, ra_version,
   117     append_versioned_params(details->versioned_parameters, ra_version,
   140                       const char *task, guint *interval_ms,
   141                       xmlNode *xml_op, 
const char *op_version,
   153         crm_trace(
"Set address for bundle connection %s (on %s)",
   158     if (overrides != NULL) {
   159         const char *interval_s = g_hash_table_lookup(overrides, 
CRM_META "_"   162         if (interval_s != NULL) {
   166                 && (value_ll >= 0) && (value_ll <= G_MAXUINT)) {
   167                 *interval_ms = (guint) value_ll;
   173                            task, node, TRUE, FALSE, data_set);
   174     if (overrides != NULL) {
   181 #if ENABLE_VERSIONED_ATTRS   182     append_all_versioned_params(rsc, node, 
action, xml_op, data_set);
   195 is_fence_param(xmlAttrPtr attr, 
void *user_data)
   213                         GHashTable *params, xmlNode *xml_op,
   214                         const char *op_version, GHashTable *overrides)
   217     const char *secure_list = NULL;
   219     if (xml_op == NULL) {
   220         secure_list = 
" passwd password user ";
   226     if (overrides != NULL) {
   231     if (secure_list != NULL) {
   233                                        (
void *) secure_list);
   274                          const char *op_version)
   276     const char *value = NULL;
   279     if (xml_op == NULL) {
   322                       pe_node_t *node, xmlNode *xml_op, GHashTable *overrides,
   327     GHashTable *params = NULL;
   332     if (xml_op != NULL) {
   337     calculate_main_digest(
data, rsc, node, params, task, interval_ms, xml_op,
   338                           op_version, overrides, data_set);
   340         calculate_secure_digest(
data, rsc, params, xml_op, op_version,
   343     calculate_restart_digest(
data, xml_op, op_version);
   362 rsc_action_digest(
pe_resource_t *rsc, 
const char *task, guint interval_ms,
   363                   pe_node_t *node, xmlNode *xml_op, 
bool calc_secure,
   372                                      NULL, calc_secure, data_set);
   396     guint interval_ms = 0;
   398     const char *op_version;
   400     const char *digest_all;
   401     const char *digest_restart;
   410     data = rsc_action_digest(rsc, task, interval_ms, node, xml_op,
   415     if (digest_restart && 
data->digest_restart_calc && strcmp(
data->digest_restart_calc, digest_restart) != 0) {
   416         pe_rsc_info(rsc, 
"Parameters to %ums-interval %s action for %s on %s "   417                          "changed: hash was %s vs. now %s (restart:%s) %s",
   419                     crm_str(digest_restart), 
data->digest_restart_calc,
   424     } 
else if (digest_all == NULL) {
   428     } 
else if (strcmp(digest_all, 
data->digest_all_calc) != 0) {
   429         pe_rsc_info(rsc, 
"Parameters to %ums-interval %s action for %s on %s "   430                          "changed: hash was %s vs. now %s (%s:%s) %s",
   433                     (interval_ms > 0)? 
"reschedule" : 
"reload",
   459 create_unfencing_summary(
const char *rsc_id, 
const char *agent_type,
   460                          const char *param_digest)
   482 unfencing_digest_matches(
const char *rsc_id, 
const char *agent,
   483                          const char *digest_calc, 
const char *node_summary)
   485     bool matches = FALSE;
   487     if (rsc_id && agent && digest_calc && node_summary) {
   488         char *search_secure = create_unfencing_summary(rsc_id, agent,
   494         matches = (strstr(node_summary, search_secure) != NULL);
   495         crm_trace(
"Calculated unfencing digest '%s' %sfound in '%s'",
   496                   search_secure, matches? 
"" : 
"not ", node_summary);
   506 #define STONITH_DIGEST_TASK "stonith-on"   523     const char *node_summary = NULL;
   527                                                 node, NULL, TRUE, data_set);
   531     if (node_summary == NULL) {
   537     if (unfencing_digest_matches(rsc->
id, agent, 
data->digest_all_calc,
   545     if (unfencing_digest_matches(rsc->
id, agent, 
data->digest_secure_calc,
   550             out->
info(out, 
"Only 'private' parameters to %s "   551                       "for unfencing %s changed", rsc->
id,
   560         if (data_set->
priv != NULL) {
   562             char *digest = create_unfencing_summary(rsc->
id, agent,
   563                                                     data->digest_secure_calc);
   565             out->
info(out, 
"Parameters to %s for unfencing "   566                       "%s changed, try '%s'", rsc->
id,
   570             char *digest = create_unfencing_summary(rsc->
id, agent,
   571                                                     data->digest_secure_calc);
   573             printf(
"Parameters to %s for unfencing %s changed, try '%s'\n",
 
void hash2field(gpointer key, gpointer value, gpointer user_data)
Set XML attribute based on hash table entry. 
 
#define XML_ATTR_TRANSITION_MAGIC
 
op_digest_cache_t * rsc_action_digest_cmp(pe_resource_t *rsc, xmlNode *xml_op, pe_node_t *node, pe_working_set_t *data_set)
 
bool pcmk_stonith_param(const char *param)
Check whether a given stonith parameter is handled by Pacemaker. 
 
#define XML_LRM_ATTR_INTERVAL
 
const char * crm_xml_add(xmlNode *node, const char *name, const char *value)
Create an XML attribute with specified name and value. 
 
#define XML_LRM_ATTR_OP_DIGEST
 
#define XML_LRM_ATTR_OP_RESTART
 
#define CRM_ATTR_DIGESTS_ALL
 
void pcmk__filter_op_for_digest(xmlNode *param_set)
 
int(* info)(pcmk__output_t *out, const char *format,...) G_GNUC_PRINTF(2
 
#define XML_RSC_ATTR_REMOTE_RA_ADDR
 
#define XML_LRM_ATTR_OP_SECURE
 
xmlNode * copy_xml(xmlNode *src_node)
 
#define XML_LRM_ATTR_TASK
 
int pcmk__scan_ll(const char *text, long long *result, long long default_value)
 
char * calculate_operation_digest(xmlNode *local_cib, const char *version)
Calculate and return digest of XML operation. 
 
int crm_element_value_ms(const xmlNode *data, const char *name, guint *dest)
Retrieve the millisecond value of an XML attribute. 
 
#define pe_flag_sanitized
 
const char * crm_element_value(const xmlNode *data, const char *name)
Retrieve the value of an XML attribute. 
 
void pcmk__xe_remove_matching_attrs(xmlNode *element, bool(*match)(xmlAttrPtr, void *), void *user_data)
 
#define crm_trace(fmt, args...)
 
char * crm_strdup_printf(char const *format,...) G_GNUC_PRINTF(1
 
#define pcmk_is_set(g, f)
Convenience alias for pcmk_all_flags_set(), to check single flag. 
 
struct pe_node_shared_s * details
 
GHashTable * pe_rsc_params(pe_resource_t *rsc, pe_node_t *node, pe_working_set_t *data_set)
Get a table of resource parameters. 
 
Wrappers for and extensions to libxml2. 
 
xmlNode * create_xml_node(xmlNode *parent, const char *name)
 
#define CRM_ATTR_DIGESTS_SECURE
 
const char * pe_node_attribute_raw(pe_node_t *node, const char *name)
 
#define XML_LRM_ATTR_RESTART_DIGEST
 
#define XML_TAG_RSC_VER_ATTRS
 
void free_xml(xmlNode *child)
 
op_digest_cache_t * pe__compare_fencing_digest(pe_resource_t *rsc, const char *agent, pe_node_t *node, pe_working_set_t *data_set)
 
op_digest_cache_t * pe__calculate_digests(pe_resource_t *rsc, const char *task, guint *interval_ms, pe_node_t *node, xmlNode *xml_op, GHashTable *overrides, bool calc_secure, pe_working_set_t *data_set)
 
char * pcmk__op_key(const char *rsc_id, const char *op_type, guint interval_ms)
Generate an operation key (RESOURCE_ACTION_INTERVAL) 
 
const char * pe__add_bundle_remote_name(pe_resource_t *rsc, pe_working_set_t *data_set, xmlNode *xml, const char *field)
 
#define STONITH_DIGEST_TASK
 
void xml_remove_prop(xmlNode *obj, const char *name)
 
This structure contains everything that makes up a single output formatter. 
 
#define XML_LRM_ATTR_INTERVAL_MS
 
void hash2metafield(gpointer key, gpointer value, gpointer user_data)
Set XML attribute based on hash table entry, as meta-attribute name. 
 
#define XML_ATTR_CRM_VERSION
 
GHashTable * digest_cache
cache of calculated resource digests 
 
uint32_t pcmk_get_ra_caps(const char *standard)
Get capabilities of a resource agent standard. 
 
void pe__free_digests(gpointer ptr)
 
#define XML_ATTR_RA_VERSION
 
void pe_free_action(pe_action_t *action)
 
#define pe_rsc_info(rsc, fmt, args...)
 
#define XML_AGENT_ATTR_CLASS
 
pe_action_t * custom_action(pe_resource_t *rsc, char *key, const char *task, pe_node_t *on_node, gboolean optional, gboolean foo, pe_working_set_t *data_set)
Create or update an action object.