f935b0d20e
OBS-URL: https://build.opensuse.org/package/show/network:ha-clustering:Factory/pacemaker?expand=0&rev=122
209 lines
6.4 KiB
Diff
209 lines
6.4 KiB
Diff
commit f81b9a3f0eb134df35f1d29742ffe12cbeb74ded
|
|
Author: Gao,Yan <ygao@suse.com>
|
|
Date: Wed Jan 29 14:07:44 2014 +0800
|
|
|
|
Feature: pengine: Support id-ref in nvpair with optional "name"
|
|
|
|
If "name" isn't specified, it inherits the name from the referenced
|
|
nvpair.
|
|
|
|
diff --git a/lib/pengine/rules.c b/lib/pengine/rules.c
|
|
index f80aa47..626d7b2 100644
|
|
--- a/lib/pengine/rules.c
|
|
+++ b/lib/pengine/rules.c
|
|
@@ -607,7 +607,7 @@ sort_pairs(gconstpointer a, gconstpointer b)
|
|
}
|
|
|
|
static void
|
|
-populate_hash(xmlNode * nvpair_list, GHashTable * hash, gboolean overwrite)
|
|
+populate_hash(xmlNode * nvpair_list, GHashTable * hash, gboolean overwrite, xmlNode * top)
|
|
{
|
|
const char *name = NULL;
|
|
const char *value = NULL;
|
|
@@ -622,10 +622,18 @@ populate_hash(xmlNode * nvpair_list, GHashTable * hash, gboolean overwrite)
|
|
|
|
for (an_attr = __xml_first_child(list); an_attr != NULL; an_attr = __xml_next(an_attr)) {
|
|
if (crm_str_eq((const char *)an_attr->name, XML_CIB_TAG_NVPAIR, TRUE)) {
|
|
+ xmlNode *ref_nvpair = expand_idref(an_attr, top);
|
|
+
|
|
name = crm_element_value(an_attr, XML_NVPAIR_ATTR_NAME);
|
|
+ if (name == NULL) {
|
|
+ name = crm_element_value(ref_nvpair, XML_NVPAIR_ATTR_NAME);
|
|
+ }
|
|
|
|
crm_trace("Setting attribute: %s", name);
|
|
value = crm_element_value(an_attr, XML_NVPAIR_ATTR_VALUE);
|
|
+ if (value == NULL) {
|
|
+ value = crm_element_value(ref_nvpair, XML_NVPAIR_ATTR_VALUE);
|
|
+ }
|
|
|
|
if (name == NULL || value == NULL) {
|
|
continue;
|
|
@@ -657,6 +665,7 @@ struct unpack_data_s {
|
|
GHashTable *node_hash;
|
|
GHashTable *hash;
|
|
crm_time_t *now;
|
|
+ xmlNode *top;
|
|
};
|
|
|
|
static void
|
|
@@ -670,7 +679,7 @@ unpack_attr_set(gpointer data, gpointer user_data)
|
|
}
|
|
|
|
crm_trace("Adding attributes from %s", pair->name);
|
|
- populate_hash(pair->attr_set, unpack_data->hash, unpack_data->overwrite);
|
|
+ populate_hash(pair->attr_set, unpack_data->hash, unpack_data->overwrite, unpack_data->top);
|
|
}
|
|
|
|
void
|
|
@@ -717,6 +726,7 @@ unpack_instance_attributes(xmlNode * top, xmlNode * xml_obj, const char *set_nam
|
|
data.node_hash = node_hash;
|
|
data.now = now;
|
|
data.overwrite = overwrite;
|
|
+ data.top = top;
|
|
}
|
|
|
|
sorted = g_list_sort(unsorted, sort_pairs);
|
|
diff --git a/xml/Makefile.am b/xml/Makefile.am
|
|
index 4a7381b..87340fb 100644
|
|
--- a/xml/Makefile.am
|
|
+++ b/xml/Makefile.am
|
|
@@ -26,7 +26,7 @@ RNG_FILES = $(VERSIONED_RNG_FILES:%.rng=%-1.0.rng) \
|
|
$(VERSIONED_RNG_FILES:%.rng=%-1.2.rng) \
|
|
$(VERSIONED_RNG_FILES:%.rng=%-next.rng) \
|
|
pacemaker.rng versions.rng score.rng rule.rng nvset.rng \
|
|
- fencing.rng
|
|
+ fencing.rng nvset-1.0.rng
|
|
|
|
EXTRA_DIST = crm-1.0.dtd $(dtd_SCRIPTS)
|
|
dtd_SCRIPTS = crm.dtd $(RNG_FILES) upgrade06.xsl upgrade11.xsl crm-transitional.dtd
|
|
diff --git a/xml/nvset-1.0.rng b/xml/nvset-1.0.rng
|
|
new file mode 100644
|
|
index 0000000..0d7e72c
|
|
--- /dev/null
|
|
+++ b/xml/nvset-1.0.rng
|
|
@@ -0,0 +1,35 @@
|
|
+<?xml version="1.0" encoding="UTF-8"?>
|
|
+<!-- types: http://www.w3.org/TR/xmlschema-2/#dateTime -->
|
|
+<grammar xmlns="http://relaxng.org/ns/structure/1.0"
|
|
+ datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
|
|
+ <start>
|
|
+ <ref name="element-nvset"/>
|
|
+ </start>
|
|
+
|
|
+ <define name="element-nvset">
|
|
+ <choice>
|
|
+ <attribute name="id-ref"><data type="IDREF"/></attribute>
|
|
+ <group>
|
|
+ <attribute name="id"><data type="ID"/></attribute>
|
|
+ <interleave>
|
|
+ <optional>
|
|
+ <externalRef href="rule.rng"/>
|
|
+ </optional>
|
|
+ <zeroOrMore>
|
|
+ <element name="nvpair">
|
|
+ <attribute name="id"><data type="ID"/></attribute>
|
|
+ <attribute name="name"><text/></attribute>
|
|
+ <optional>
|
|
+ <attribute name="value"><text/></attribute>
|
|
+ </optional>
|
|
+ </element>
|
|
+ </zeroOrMore>
|
|
+ <optional>
|
|
+ <externalRef href="score.rng"/>
|
|
+ </optional>
|
|
+ </interleave>
|
|
+ </group>
|
|
+ </choice>
|
|
+ </define>
|
|
+
|
|
+</grammar>
|
|
diff --git a/xml/nvset.rng b/xml/nvset.rng
|
|
index 0d7e72c..8f1696c 100644
|
|
--- a/xml/nvset.rng
|
|
+++ b/xml/nvset.rng
|
|
@@ -17,11 +17,21 @@
|
|
</optional>
|
|
<zeroOrMore>
|
|
<element name="nvpair">
|
|
- <attribute name="id"><data type="ID"/></attribute>
|
|
- <attribute name="name"><text/></attribute>
|
|
- <optional>
|
|
- <attribute name="value"><text/></attribute>
|
|
- </optional>
|
|
+ <choice>
|
|
+ <group>
|
|
+ <attribute name="id-ref"><data type="IDREF"/></attribute>
|
|
+ <optional>
|
|
+ <attribute name="name"><text/></attribute>
|
|
+ </optional>
|
|
+ </group>
|
|
+ <group>
|
|
+ <attribute name="id"><data type="ID"/></attribute>
|
|
+ <attribute name="name"><text/></attribute>
|
|
+ <optional>
|
|
+ <attribute name="value"><text/></attribute>
|
|
+ </optional>
|
|
+ </group>
|
|
+ </choice>
|
|
</element>
|
|
</zeroOrMore>
|
|
<optional>
|
|
diff --git a/xml/pacemaker-1.0.rng b/xml/pacemaker-1.0.rng
|
|
index 7100393..93e5e5f 100644
|
|
--- a/xml/pacemaker-1.0.rng
|
|
+++ b/xml/pacemaker-1.0.rng
|
|
@@ -15,7 +15,7 @@
|
|
<element name="crm_config">
|
|
<zeroOrMore>
|
|
<element name="cluster_property_set">
|
|
- <externalRef href="nvset.rng"/>
|
|
+ <externalRef href="nvset-1.0.rng"/>
|
|
</element>
|
|
</zeroOrMore>
|
|
</element>
|
|
@@ -23,7 +23,7 @@
|
|
<element name="rsc_defaults">
|
|
<zeroOrMore>
|
|
<element name="meta_attributes">
|
|
- <externalRef href="nvset.rng"/>
|
|
+ <externalRef href="nvset-1.0.rng"/>
|
|
</element>
|
|
</zeroOrMore>
|
|
</element>
|
|
@@ -32,7 +32,7 @@
|
|
<element name="op_defaults">
|
|
<zeroOrMore>
|
|
<element name="meta_attributes">
|
|
- <externalRef href="nvset.rng"/>
|
|
+ <externalRef href="nvset-1.0.rng"/>
|
|
</element>
|
|
</zeroOrMore>
|
|
</element>
|
|
@@ -94,7 +94,7 @@
|
|
</optional>
|
|
<zeroOrMore>
|
|
<element name="instance_attributes">
|
|
- <externalRef href="nvset.rng"/>
|
|
+ <externalRef href="nvset-1.0.rng"/>
|
|
</element>
|
|
</zeroOrMore>
|
|
</element>
|
|
diff --git a/xml/resources-1.0.rng b/xml/resources-1.0.rng
|
|
index 7ea2228..743ccba 100644
|
|
--- a/xml/resources-1.0.rng
|
|
+++ b/xml/resources-1.0.rng
|
|
@@ -95,10 +95,10 @@
|
|
<zeroOrMore>
|
|
<choice>
|
|
<element name="meta_attributes">
|
|
- <externalRef href="nvset.rng"/>
|
|
+ <externalRef href="nvset-1.0.rng"/>
|
|
</element>
|
|
<element name="instance_attributes">
|
|
- <externalRef href="nvset.rng"/>
|
|
+ <externalRef href="nvset-1.0.rng"/>
|
|
</element>
|
|
</choice>
|
|
</zeroOrMore>
|