pacemaker  2.0.5-ba59be7122
Scalable High-Availability cluster resource manager
Macros | Typedefs | Functions
rules.c File Reference
#include <crm_internal.h>
#include <crm/crm.h>
#include <crm/msg_xml.h>
#include <crm/common/xml.h>
#include <crm/common/xml_internal.h>
#include <glib.h>
#include <crm/pengine/rules.h>
#include <crm/pengine/rules_internal.h>
#include <crm/pengine/internal.h>
#include <sys/types.h>
#include <regex.h>
#include <ctype.h>
Include dependency graph for rules.c:

Go to the source code of this file.

Macros

#define CHECK_ONE(spec, name, var)
 
#define update_field(xml_field, time_fn)
 

Typedefs

typedef struct sorted_set_s sorted_set_t
 
typedef struct unpack_data_s unpack_data_t
 

Functions

 CRM_TRACE_INIT_DATA (pe_rules)
 
gboolean pe_evaluate_rules (xmlNode *ruleset, GHashTable *node_hash, crm_time_t *now, crm_time_t *next_change)
 Evaluate any rules contained by given XML element. More...
 
gboolean pe_test_rule (xmlNode *rule, GHashTable *node_hash, enum rsc_role_e role, crm_time_t *now, crm_time_t *next_change, pe_match_data_t *match_data)
 
gboolean pe_test_expression (xmlNode *expr, GHashTable *node_hash, enum rsc_role_e role, crm_time_t *now, crm_time_t *next_change, pe_match_data_t *match_data)
 Evaluate one rule subelement (pass/fail) More...
 
enum expression_type find_expression_type (xmlNode *expr)
 
gboolean pe_test_role_expression (xmlNode *expr, enum rsc_role_e role, crm_time_t *now)
 
gboolean pe_test_attr_expression (xmlNode *expr, GHashTable *hash, crm_time_t *now, pe_match_data_t *match_data)
 
int pe_cron_range_satisfied (crm_time_t *now, xmlNode *cron_spec)
 
crm_time_t * pe_parse_xml_duration (crm_time_t *start, xmlNode *duration_spec)
 
gboolean pe_test_date_expression (xmlNode *expr, crm_time_t *now, crm_time_t *next_change)
 
int pe_eval_date_expression (xmlNode *expr, crm_time_t *now, crm_time_t *next_change)
 
void pe_eval_nvpairs (xmlNode *top, xmlNode *xml_obj, const char *set_name, pe_rule_eval_data_t *rule_data, GHashTable *hash, const char *always_first, gboolean overwrite, crm_time_t *next_change)
 
void pe_unpack_nvpairs (xmlNode *top, xmlNode *xml_obj, const char *set_name, GHashTable *node_hash, GHashTable *hash, const char *always_first, gboolean overwrite, crm_time_t *now, crm_time_t *next_change)
 Extract nvpair blocks contained by an XML element into a hash table. More...
 
char * pe_expand_re_matches (const char *string, pe_re_match_data_t *match_data)
 
gboolean pe_eval_rules (xmlNode *ruleset, pe_rule_eval_data_t *rule_data, crm_time_t *next_change)
 
gboolean pe_eval_expr (xmlNode *rule, pe_rule_eval_data_t *rule_data, crm_time_t *next_change)
 
gboolean pe_eval_subexpr (xmlNode *expr, pe_rule_eval_data_t *rule_data, crm_time_t *next_change)
 
gboolean pe__eval_attr_expr (xmlNodePtr expr, pe_rule_eval_data_t *rule_data)
 
int pe__eval_date_expr (xmlNodePtr expr, pe_rule_eval_data_t *rule_data, crm_time_t *next_change)
 
gboolean pe__eval_op_expr (xmlNodePtr expr, pe_rule_eval_data_t *rule_data)
 
gboolean pe__eval_role_expr (xmlNodePtr expr, pe_rule_eval_data_t *rule_data)
 
gboolean pe__eval_rsc_expr (xmlNodePtr expr, pe_rule_eval_data_t *rule_data)
 
gboolean test_ruleset (xmlNode *ruleset, GHashTable *node_hash, crm_time_t *now)
 
gboolean test_rule (xmlNode *rule, GHashTable *node_hash, enum rsc_role_e role, crm_time_t *now)
 
gboolean pe_test_rule_re (xmlNode *rule, GHashTable *node_hash, enum rsc_role_e role, crm_time_t *now, pe_re_match_data_t *re_match_data)
 
gboolean pe_test_rule_full (xmlNode *rule, GHashTable *node_hash, enum rsc_role_e role, crm_time_t *now, pe_match_data_t *match_data)
 
gboolean test_expression (xmlNode *expr, GHashTable *node_hash, enum rsc_role_e role, crm_time_t *now)
 
gboolean pe_test_expression_re (xmlNode *expr, GHashTable *node_hash, enum rsc_role_e role, crm_time_t *now, pe_re_match_data_t *re_match_data)
 
gboolean pe_test_expression_full (xmlNode *expr, GHashTable *node_hash, enum rsc_role_e role, crm_time_t *now, pe_match_data_t *match_data)
 
void unpack_instance_attributes (xmlNode *top, xmlNode *xml_obj, const char *set_name, GHashTable *node_hash, GHashTable *hash, const char *always_first, gboolean overwrite, crm_time_t *now)
 

Macro Definition Documentation

◆ CHECK_ONE

#define CHECK_ONE (   spec,
  name,
  var 
)
Value:
do { \
int subpart_rc = check_one(spec, name, var); \
if (check_passes(subpart_rc) == FALSE) { \
return subpart_rc; \
} \
} while (0)

Definition at line 266 of file rules.c.

◆ update_field

#define update_field (   xml_field,
  time_fn 
)
Value:
value = crm_element_value(duration_spec, xml_field); \
if(value != NULL) { \
int value_i = crm_parse_int(value, "0"); \
time_fn(end, value_i); \
}

Definition at line 307 of file rules.c.

Typedef Documentation

◆ sorted_set_t

typedef struct sorted_set_s sorted_set_t

◆ unpack_data_t

typedef struct unpack_data_s unpack_data_t

Function Documentation

◆ CRM_TRACE_INIT_DATA()

CRM_TRACE_INIT_DATA ( pe_rules  )

◆ find_expression_type()

enum expression_type find_expression_type ( xmlNode *  expr)

Definition at line 88 of file rules.c.

◆ pe__eval_attr_expr()

gboolean pe__eval_attr_expr ( xmlNodePtr  expr,
pe_rule_eval_data_t *  rule_data 
)

Definition at line 1108 of file rules.c.

◆ pe__eval_date_expr()

int pe__eval_date_expr ( xmlNodePtr  expr,
pe_rule_eval_data_t *  rule_data,
crm_time_t *  next_change 
)

Definition at line 1175 of file rules.c.

◆ pe__eval_op_expr()

gboolean pe__eval_op_expr ( xmlNodePtr  expr,
pe_rule_eval_data_t *  rule_data 
)

Definition at line 1257 of file rules.c.

◆ pe__eval_role_expr()

gboolean pe__eval_role_expr ( xmlNodePtr  expr,
pe_rule_eval_data_t *  rule_data 
)

Definition at line 1289 of file rules.c.

◆ pe__eval_rsc_expr()

gboolean pe__eval_rsc_expr ( xmlNodePtr  expr,
pe_rule_eval_data_t *  rule_data 
)

Definition at line 1330 of file rules.c.

◆ pe_cron_range_satisfied()

int pe_cron_range_satisfied ( crm_time_t *  now,
xmlNode *  cron_spec 
)

Definition at line 274 of file rules.c.

◆ pe_eval_date_expression()

int pe_eval_date_expression ( xmlNode *  expr,
crm_time_t *  now,
crm_time_t *  next_change 
)

Definition at line 389 of file rules.c.

◆ pe_eval_expr()

gboolean pe_eval_expr ( xmlNode *  rule,
pe_rule_eval_data_t *  rule_data,
crm_time_t *  next_change 
)

Definition at line 849 of file rules.c.

◆ pe_eval_nvpairs()

void pe_eval_nvpairs ( xmlNode *  top,
xmlNode *  xml_obj,
const char *  set_name,
pe_rule_eval_data_t *  rule_data,
GHashTable *  hash,
const char *  always_first,
gboolean  overwrite,
crm_time_t *  next_change 
)

Definition at line 690 of file rules.c.

◆ pe_eval_rules()

gboolean pe_eval_rules ( xmlNode *  ruleset,
pe_rule_eval_data_t *  rule_data,
crm_time_t *  next_change 
)

Definition at line 825 of file rules.c.

◆ pe_eval_subexpr()

gboolean pe_eval_subexpr ( xmlNode *  expr,
pe_rule_eval_data_t *  rule_data,
crm_time_t *  next_change 
)

Definition at line 891 of file rules.c.

◆ pe_evaluate_rules()

gboolean pe_evaluate_rules ( xmlNode *  ruleset,
GHashTable *  node_hash,
crm_time_t *  now,
crm_time_t *  next_change 
)

Evaluate any rules contained by given XML element.

Parameters
[in]xmlXML element to check for rules
[in]node_hashNode attributes to use when evaluating expressions
[in]nowTime to use when evaluating expressions
[out]next_changeIf not NULL, set to when evaluation will change
Returns
TRUE if no rules, or any of rules present is in effect, else FALSE

Definition at line 39 of file rules.c.

◆ pe_expand_re_matches()

char* pe_expand_re_matches ( const char *  string,
pe_re_match_data_t *  match_data 
)

Definition at line 743 of file rules.c.

◆ pe_parse_xml_duration()

crm_time_t* pe_parse_xml_duration ( crm_time_t *  start,
xmlNode *  duration_spec 
)

Definition at line 315 of file rules.c.

◆ pe_test_attr_expression()

gboolean pe_test_attr_expression ( xmlNode *  expr,
GHashTable *  hash,
crm_time_t *  now,
pe_match_data_t *  match_data 
)

Definition at line 159 of file rules.c.

◆ pe_test_date_expression()

gboolean pe_test_date_expression ( xmlNode *  expr,
crm_time_t *  now,
crm_time_t *  next_change 
)

Definition at line 345 of file rules.c.

◆ pe_test_expression()

gboolean pe_test_expression ( xmlNode *  expr,
GHashTable *  node_hash,
enum rsc_role_e  role,
crm_time_t *  now,
crm_time_t *  next_change,
pe_match_data_t *  match_data 
)

Evaluate one rule subelement (pass/fail)

A rule element may contain another rule, a node attribute expression, or a date expression. Given any one of those, evaluate it and return whether it passed.

Parameters
[in]exprRule subelement XML
[in]node_hashNode attributes to use when evaluating expression
[in]roleResource role to use when evaluating expression
[in]nowTime to use when evaluating expression
[out]next_changeIf not NULL, set to when evaluation will change
[in]match_dataIf not NULL, resource back-references and params
Returns
TRUE if expression is in effect under given conditions, else FALSE

Definition at line 88 of file rules.c.

◆ pe_test_expression_full()

gboolean pe_test_expression_full ( xmlNode *  expr,
GHashTable *  node_hash,
enum rsc_role_e  role,
crm_time_t *  now,
pe_match_data_t *  match_data 
)
Deprecated:
Use pe_test_expression() instead

Definition at line 1436 of file rules.c.

◆ pe_test_expression_re()

gboolean pe_test_expression_re ( xmlNode *  expr,
GHashTable *  node_hash,
enum rsc_role_e  role,
crm_time_t *  now,
pe_re_match_data_t *  re_match_data 
)
Deprecated:
Use pe_test_expression() instead

Definition at line 1425 of file rules.c.

◆ pe_test_role_expression()

gboolean pe_test_role_expression ( xmlNode *  expr,
enum rsc_role_e  role,
crm_time_t *  now 
)

Definition at line 144 of file rules.c.

◆ pe_test_rule()

gboolean pe_test_rule ( xmlNode *  rule,
GHashTable *  node_hash,
enum rsc_role_e  role,
crm_time_t *  now,
crm_time_t *  next_change,
pe_match_data_t *  match_data 
)

Definition at line 55 of file rules.c.

◆ pe_test_rule_full()

gboolean pe_test_rule_full ( xmlNode *  rule,
GHashTable *  node_hash,
enum rsc_role_e  role,
crm_time_t *  now,
pe_match_data_t *  match_data 
)
Deprecated:
Use pe_test_rule() instead

Definition at line 1412 of file rules.c.

◆ pe_test_rule_re()

gboolean pe_test_rule_re ( xmlNode *  rule,
GHashTable *  node_hash,
enum rsc_role_e  role,
crm_time_t *  now,
pe_re_match_data_t *  re_match_data 
)
Deprecated:
Use pe_test_rule() instead

Definition at line 1401 of file rules.c.

◆ pe_unpack_nvpairs()

void pe_unpack_nvpairs ( xmlNode *  top,
xmlNode *  xml_obj,
const char *  set_name,
GHashTable *  node_hash,
GHashTable *  hash,
const char *  always_first,
gboolean  overwrite,
crm_time_t *  now,
crm_time_t *  next_change 
)

Extract nvpair blocks contained by an XML element into a hash table.

Parameters
[in]topXML document root (used to expand id-ref's)
[in]xml_objXML element containing blocks of nvpair elements
[in]set_nameElement name to identify nvpair blocks
[in]node_hashNode attributes to use when evaluating rules
[out]hashWhere to store extracted name/value pairs
[in]always_firstIf not NULL, process block with this ID first
[in]overwriteWhether to replace existing values with same name
[in]nowTime to use when evaluating rules
[out]next_changeIf not NULL, set to when rule evaluation will change

Definition at line 713 of file rules.c.

◆ test_expression()

gboolean test_expression ( xmlNode *  expr,
GHashTable *  node_hash,
enum rsc_role_e  role,
crm_time_t *  now 
)
Deprecated:
Use pe_test_expression() instead

Definition at line 1419 of file rules.c.

◆ test_rule()

gboolean test_rule ( xmlNode *  rule,
GHashTable *  node_hash,
enum rsc_role_e  role,
crm_time_t *  now 
)
Deprecated:
Use pe_test_rule() instead

Definition at line 1395 of file rules.c.

◆ test_ruleset()

gboolean test_ruleset ( xmlNode *  ruleset,
GHashTable *  node_hash,
crm_time_t *  now 
)
Deprecated:
Use pe_evaluate_rules() instead

Definition at line 1389 of file rules.c.

◆ unpack_instance_attributes()

void unpack_instance_attributes ( xmlNode *  top,
xmlNode *  xml_obj,
const char *  set_name,
GHashTable *  node_hash,
GHashTable *  hash,
const char *  always_first,
gboolean  overwrite,
crm_time_t *  now 
)
Deprecated:
Use pe_unpack_nvpairs() instead

Definition at line 1444 of file rules.c.

crm_element_value
const char * crm_element_value(const xmlNode *data, const char *name)
Retrieve the value of an XML attribute.
Definition: nvpair.c:523
crm_parse_int
int crm_parse_int(const char *text, const char *default_text)
Parse an integer value from a string.
Definition: strings.c:134
name
char * name
Definition: pcmk_fence.c:31