diff --git a/cts/schemas/test-3/ref.err/multiple-location-rules.ref.err-0 b/cts/schemas/test-3/ref.err/multiple-location-rules.ref.err-0 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cts/schemas/test-3/ref.err/multiple-location-rules.ref.err-1 b/cts/schemas/test-3/ref.err/multiple-location-rules.ref.err-1 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cts/schemas/test-3/ref.err/multiple-location-rules.ref.err-2 b/cts/schemas/test-3/ref.err/multiple-location-rules.ref.err-2 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cts/schemas/test-3/ref.err/multiple-location-rules.ref.err-99 b/cts/schemas/test-3/ref.err/multiple-location-rules.ref.err-99 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/cts/schemas/test-3/ref/multiple-location-rules.ref-0 b/cts/schemas/test-3/ref/multiple-location-rules.ref-0 new file mode 100644 index 0000000000..38355bbf07 --- /dev/null +++ b/cts/schemas/test-3/ref/multiple-location-rules.ref-0 @@ -0,0 +1,121 @@ +<cib crm_feature_set="3.19.7" validate-with="pacemaker-3.10" epoch="16" num_updates="0" admin_epoch="0" original="1"> + <configuration original="1"> + <!-- The essential elements of this test are: + * There is a location constraint (ban-rsc1) containing a rsc attribute + and two top-level rules. + * There is a location constraint (allow-rsc1) containing a rsc + attribute and one top-level rule. + * There is a location constraint (allow-rsc2) containing a rsc + attribute and one top-level rule with two nested rules. + * There is a location constraint (ban-rsc3-rsc4-node1-node2) containing + two resource_set elements (with id attributes), two top-level + rules, and two rule elements (with id attributes) within a lifetime + element. + * There is a location constraint (ban-rsc3-rsc4-node1-node2) containing + two resource_set elements (with id-ref attributes), two top-level + rules, and two rule elements (with id-ref attributes) within a + lifetime element. + + In this situation: + * ban-rsc1 should be replaced by two new location constraints, each + containing one of the original rules. + * allow-rsc1 and allow-rsc2 should be unmodified. + * ban-rsc3-rsc4-node1-node2 should be replaced by two new location + constraints, each containing one of the original rules. The first of + the new constraints should contain the original resource_set and + lifetime rule elements, while the second should contain id-refs to + them. + * ban-rsc3-rsc4-node3-node4 should be replaced by two new location + constraints, each containing one of the original rules. Both of the + new constraints should contain the original resource_set and lifetime + rule elements, which are id-refs to resource sets defined in + ban-rsc3-rsc4-node1-node2. + * The rules within a lifetime element should be converted to an "or" + rule set nested alongside an "and" rule set containing the other + top-level rule. + --> + <crm_config original="1"/> + <nodes original="1"> + <node id="node1" uname="node1" type="member" original="1"/> + <node id="node2" uname="node2" type="member" original="1"/> + <node id="node3" uname="node3" type="member" original="1"/> + <node id="node4" uname="node3" type="member" original="1"/> + </nodes> + <resources original="1"> + <primitive id="rsc1" class="ocf" type="Dummy" provider="pacemaker" original="1"/> + <primitive id="rsc2" class="ocf" type="Dummy" provider="pacemaker" original="1"/> + <primitive id="rsc3" class="ocf" type="Dummy" provider="pacemaker" original="1"/> + <primitive id="rsc4" class="ocf" type="Dummy" provider="pacemaker" original="1"/> + </resources> + <constraints original="1"> + <rsc_location id="ban-rsc1" rsc="rsc1" original="1"> + <rule id="ban-rsc1-rule1" score="-INFINITY" original="1"> + <expression id="ban-rsc1-rule1-expr" attribute="#uname" operation="eq" value="node1" original="1"/> + </rule> + <rule id="ban-rsc1-rule2" score="-INFINITY" original="1"> + <expression id="ban-rsc1-rule2-expr" attribute="#uname" operation="eq" value="node2" original="1"/> + </rule> + </rsc_location> + <rsc_location id="allow-rsc1" rsc="rsc1" original="1"> + <rule id="allow-rsc1-rule" score="INFINITY" original="1"> + <expression id="allow-rsc1-rule-expr" attribute="#uname" operation="eq" value="node3" original="1"/> + </rule> + </rsc_location> + <rsc_location id="allow-rsc2" rsc="rsc2" original="1"> + <rule id="allow-rsc2-rule" score="INFINITY" boolean-op="or" original="1"> + <rule id="allow-rsc2-rule-subrule1" original="1"> + <expression id="allow-rsc2-rule-subrule1-expr" attribute="#uname" operation="eq" value="node1" original="1"/> + </rule> + <rule id="allow-rsc2-rule-subrule2" original="1"> + <expression id="allow-rsc2-rule-subrule2-expr" attribute="#uname" operation="eq" value="node2" original="1"/> + </rule> + </rule> + </rsc_location> + <rsc_location id="ban-rsc3-rsc4-node1-node2" original="1"> + <resource_set id="ban-rsc3-rsc4-node1-node2-set1" original="1"> + <resource_ref id="rsc3" original="1"/> + </resource_set> + <resource_set id="ban-rsc3-rsc4-node1-node2-set2" original="1"> + <resource_ref id="rsc4" original="1"/> + </resource_set> + <rule id="ban-rsc3-rsc4-node1-node2-rule1" score="-INFINITY" original="1"> + <expression id="ban-rsc3-rsc4-node1-node2-rule1-expr" attribute="#uname" operation="eq" value="node1" original="1"/> + </rule> + <rule id="ban-rsc3-rsc4-node1-node2-rule2" score="-INFINITY" original="1"> + <expression id="ban-rsc3-rsc4-node1-node2-rule2-expr" attribute="#uname" operation="eq" value="node2" original="1"/> + </rule> + <lifetime original="1"> + <rule id="ban-rsc3-rsc4-node1-node2-lifetime-rule1" original="1"> + <date_expression id="ban-rsc3-rsc4-node1-node2-lifetime-rule1-expr" operation="in_range" start="2004-001" original="1"/> + </rule> + <rule id="ban-rsc3-rsc4-node1-node2-lifetime-rule2" original="1"> + <date_expression id="ban-rsc3-rsc4-node1-node2-lifetime-rule2-expr" operation="in_range" end="2005-001" original="1"/> + </rule> + </lifetime> + </rsc_location> + <rsc_location id="ban-rsc3-rsc4-node3-node4" original="1"> + <resource_set id="ban-rsc3-rsc4-node1-node2-set1" original="0"> + <resource_ref id="rsc3" original="0"/> + </resource_set> + <resource_set id="ban-rsc3-rsc4-node1-node2-set2" original="0"> + <resource_ref id="rsc4" original="0"/> + </resource_set> + <rule id="ban-rsc3-rsc4-node3-node4-rule1" score="-INFINITY" original="1"> + <expression id="ban-rsc3-rsc4-node3-node4-rule1-expr" attribute="#uname" operation="eq" value="node3" original="1"/> + </rule> + <rule id="ban-rsc3-rsc4-node3-node4-rule2" score="-INFINITY" original="1"> + <expression id="ban-rsc3-rsc4-node3-node4-rule2-expr" attribute="#uname" operation="eq" value="node4" original="1"/> + </rule> + <lifetime original="1"> + <rule id="ban-rsc3-rsc4-node1-node2-lifetime-rule1" original="0"> + <date_expression id="ban-rsc3-rsc4-node1-node2-lifetime-rule1-expr" operation="in_range" start="2004-001" original="0"/> + </rule> + <rule id="ban-rsc3-rsc4-node1-node2-lifetime-rule2" original="0"> + <date_expression id="ban-rsc3-rsc4-node1-node2-lifetime-rule2-expr" operation="in_range" end="2005-001" original="0"/> + </rule> + </lifetime> + </rsc_location> + </constraints> + </configuration> + <status original="1"/> +</cib> diff --git a/cts/schemas/test-3/ref/multiple-location-rules.ref-1 b/cts/schemas/test-3/ref/multiple-location-rules.ref-1 new file mode 100644 index 0000000000..b9e0233243 --- /dev/null +++ b/cts/schemas/test-3/ref/multiple-location-rules.ref-1 @@ -0,0 +1,121 @@ +<cib crm_feature_set="3.19.7" validate-with="pacemaker-4.0" epoch="16" num_updates="0" admin_epoch="0" original="1"> + <configuration original="1"> + <!-- The essential elements of this test are: + * There is a location constraint (ban-rsc1) containing a rsc attribute + and two top-level rules. + * There is a location constraint (allow-rsc1) containing a rsc + attribute and one top-level rule. + * There is a location constraint (allow-rsc2) containing a rsc + attribute and one top-level rule with two nested rules. + * There is a location constraint (ban-rsc3-rsc4-node1-node2) containing + two resource_set elements (with id attributes), two top-level + rules, and two rule elements (with id attributes) within a lifetime + element. + * There is a location constraint (ban-rsc3-rsc4-node1-node2) containing + two resource_set elements (with id-ref attributes), two top-level + rules, and two rule elements (with id-ref attributes) within a + lifetime element. + + In this situation: + * ban-rsc1 should be replaced by two new location constraints, each + containing one of the original rules. + * allow-rsc1 and allow-rsc2 should be unmodified. + * ban-rsc3-rsc4-node1-node2 should be replaced by two new location + constraints, each containing one of the original rules. The first of + the new constraints should contain the original resource_set and + lifetime rule elements, while the second should contain id-refs to + them. + * ban-rsc3-rsc4-node3-node4 should be replaced by two new location + constraints, each containing one of the original rules. Both of the + new constraints should contain the original resource_set and lifetime + rule elements, which are id-refs to resource sets defined in + ban-rsc3-rsc4-node1-node2. + * The rules within a lifetime element should be converted to an "or" + rule set nested alongside an "and" rule set containing the other + top-level rule. + --> + <crm_config original="1"/> + <nodes original="1"> + <node id="node1" uname="node1" type="member" original="1"/> + <node id="node2" uname="node2" type="member" original="1"/> + <node id="node3" uname="node3" type="member" original="1"/> + <node id="node4" uname="node3" type="member" original="1"/> + </nodes> + <resources original="1"> + <primitive id="rsc1" class="ocf" type="Dummy" provider="pacemaker" original="1"/> + <primitive id="rsc2" class="ocf" type="Dummy" provider="pacemaker" original="1"/> + <primitive id="rsc3" class="ocf" type="Dummy" provider="pacemaker" original="1"/> + <primitive id="rsc4" class="ocf" type="Dummy" provider="pacemaker" original="1"/> + </resources> + <constraints original="1"> + <rsc_location id="ban-rsc1" rsc="rsc1" original="1"> + <rule id="ban-rsc1-rule1" score="-INFINITY" original="1"> + <expression id="ban-rsc1-rule1-expr" attribute="#uname" operation="eq" value="node1" original="1"/> + </rule> + <rule id="ban-rsc1-rule2" score="-INFINITY" original="1"> + <expression id="ban-rsc1-rule2-expr" attribute="#uname" operation="eq" value="node2" original="1"/> + </rule> + </rsc_location> + <rsc_location id="allow-rsc1" rsc="rsc1" original="1"> + <rule id="allow-rsc1-rule" score="INFINITY" original="1"> + <expression id="allow-rsc1-rule-expr" attribute="#uname" operation="eq" value="node3" original="1"/> + </rule> + </rsc_location> + <rsc_location id="allow-rsc2" rsc="rsc2" original="1"> + <rule id="allow-rsc2-rule" score="INFINITY" boolean-op="or" original="1"> + <rule id="allow-rsc2-rule-subrule1" original="1"> + <expression id="allow-rsc2-rule-subrule1-expr" attribute="#uname" operation="eq" value="node1" original="1"/> + </rule> + <rule id="allow-rsc2-rule-subrule2" original="1"> + <expression id="allow-rsc2-rule-subrule2-expr" attribute="#uname" operation="eq" value="node2" original="1"/> + </rule> + </rule> + </rsc_location> + <rsc_location id="ban-rsc3-rsc4-node1-node2" original="1"> + <resource_set id="ban-rsc3-rsc4-node1-node2-set1" original="1"> + <resource_ref id="rsc3" original="1"/> + </resource_set> + <resource_set id="ban-rsc3-rsc4-node1-node2-set2" original="1"> + <resource_ref id="rsc4" original="1"/> + </resource_set> + <rule id="ban-rsc3-rsc4-node1-node2-rule1" score="-INFINITY" original="1"> + <expression id="ban-rsc3-rsc4-node1-node2-rule1-expr" attribute="#uname" operation="eq" value="node1" original="1"/> + </rule> + <rule id="ban-rsc3-rsc4-node1-node2-rule2" score="-INFINITY" original="1"> + <expression id="ban-rsc3-rsc4-node1-node2-rule2-expr" attribute="#uname" operation="eq" value="node2" original="1"/> + </rule> + <lifetime original="1"> + <rule id="ban-rsc3-rsc4-node1-node2-lifetime-rule1" original="1"> + <date_expression id="ban-rsc3-rsc4-node1-node2-lifetime-rule1-expr" operation="in_range" start="2004-001" original="1"/> + </rule> + <rule id="ban-rsc3-rsc4-node1-node2-lifetime-rule2" original="1"> + <date_expression id="ban-rsc3-rsc4-node1-node2-lifetime-rule2-expr" operation="in_range" end="2005-001" original="1"/> + </rule> + </lifetime> + </rsc_location> + <rsc_location id="ban-rsc3-rsc4-node3-node4" original="1"> + <resource_set id="ban-rsc3-rsc4-node1-node2-set1" original="0"> + <resource_ref id="rsc3" original="0"/> + </resource_set> + <resource_set id="ban-rsc3-rsc4-node1-node2-set2" original="0"> + <resource_ref id="rsc4" original="0"/> + </resource_set> + <rule id="ban-rsc3-rsc4-node3-node4-rule1" score="-INFINITY" original="1"> + <expression id="ban-rsc3-rsc4-node3-node4-rule1-expr" attribute="#uname" operation="eq" value="node3" original="1"/> + </rule> + <rule id="ban-rsc3-rsc4-node3-node4-rule2" score="-INFINITY" original="1"> + <expression id="ban-rsc3-rsc4-node3-node4-rule2-expr" attribute="#uname" operation="eq" value="node4" original="1"/> + </rule> + <lifetime original="1"> + <rule id="ban-rsc3-rsc4-node1-node2-lifetime-rule1" original="0"> + <date_expression id="ban-rsc3-rsc4-node1-node2-lifetime-rule1-expr" operation="in_range" start="2004-001" original="0"/> + </rule> + <rule id="ban-rsc3-rsc4-node1-node2-lifetime-rule2" original="0"> + <date_expression id="ban-rsc3-rsc4-node1-node2-lifetime-rule2-expr" operation="in_range" end="2005-001" original="0"/> + </rule> + </lifetime> + </rsc_location> + </constraints> + </configuration> + <status original="1"/> +</cib> diff --git a/cts/schemas/test-3/ref/multiple-location-rules.ref-2 b/cts/schemas/test-3/ref/multiple-location-rules.ref-2 new file mode 100644 index 0000000000..b9e0233243 --- /dev/null +++ b/cts/schemas/test-3/ref/multiple-location-rules.ref-2 @@ -0,0 +1,121 @@ +<cib crm_feature_set="3.19.7" validate-with="pacemaker-4.0" epoch="16" num_updates="0" admin_epoch="0" original="1"> + <configuration original="1"> + <!-- The essential elements of this test are: + * There is a location constraint (ban-rsc1) containing a rsc attribute + and two top-level rules. + * There is a location constraint (allow-rsc1) containing a rsc + attribute and one top-level rule. + * There is a location constraint (allow-rsc2) containing a rsc + attribute and one top-level rule with two nested rules. + * There is a location constraint (ban-rsc3-rsc4-node1-node2) containing + two resource_set elements (with id attributes), two top-level + rules, and two rule elements (with id attributes) within a lifetime + element. + * There is a location constraint (ban-rsc3-rsc4-node1-node2) containing + two resource_set elements (with id-ref attributes), two top-level + rules, and two rule elements (with id-ref attributes) within a + lifetime element. + + In this situation: + * ban-rsc1 should be replaced by two new location constraints, each + containing one of the original rules. + * allow-rsc1 and allow-rsc2 should be unmodified. + * ban-rsc3-rsc4-node1-node2 should be replaced by two new location + constraints, each containing one of the original rules. The first of + the new constraints should contain the original resource_set and + lifetime rule elements, while the second should contain id-refs to + them. + * ban-rsc3-rsc4-node3-node4 should be replaced by two new location + constraints, each containing one of the original rules. Both of the + new constraints should contain the original resource_set and lifetime + rule elements, which are id-refs to resource sets defined in + ban-rsc3-rsc4-node1-node2. + * The rules within a lifetime element should be converted to an "or" + rule set nested alongside an "and" rule set containing the other + top-level rule. + --> + <crm_config original="1"/> + <nodes original="1"> + <node id="node1" uname="node1" type="member" original="1"/> + <node id="node2" uname="node2" type="member" original="1"/> + <node id="node3" uname="node3" type="member" original="1"/> + <node id="node4" uname="node3" type="member" original="1"/> + </nodes> + <resources original="1"> + <primitive id="rsc1" class="ocf" type="Dummy" provider="pacemaker" original="1"/> + <primitive id="rsc2" class="ocf" type="Dummy" provider="pacemaker" original="1"/> + <primitive id="rsc3" class="ocf" type="Dummy" provider="pacemaker" original="1"/> + <primitive id="rsc4" class="ocf" type="Dummy" provider="pacemaker" original="1"/> + </resources> + <constraints original="1"> + <rsc_location id="ban-rsc1" rsc="rsc1" original="1"> + <rule id="ban-rsc1-rule1" score="-INFINITY" original="1"> + <expression id="ban-rsc1-rule1-expr" attribute="#uname" operation="eq" value="node1" original="1"/> + </rule> + <rule id="ban-rsc1-rule2" score="-INFINITY" original="1"> + <expression id="ban-rsc1-rule2-expr" attribute="#uname" operation="eq" value="node2" original="1"/> + </rule> + </rsc_location> + <rsc_location id="allow-rsc1" rsc="rsc1" original="1"> + <rule id="allow-rsc1-rule" score="INFINITY" original="1"> + <expression id="allow-rsc1-rule-expr" attribute="#uname" operation="eq" value="node3" original="1"/> + </rule> + </rsc_location> + <rsc_location id="allow-rsc2" rsc="rsc2" original="1"> + <rule id="allow-rsc2-rule" score="INFINITY" boolean-op="or" original="1"> + <rule id="allow-rsc2-rule-subrule1" original="1"> + <expression id="allow-rsc2-rule-subrule1-expr" attribute="#uname" operation="eq" value="node1" original="1"/> + </rule> + <rule id="allow-rsc2-rule-subrule2" original="1"> + <expression id="allow-rsc2-rule-subrule2-expr" attribute="#uname" operation="eq" value="node2" original="1"/> + </rule> + </rule> + </rsc_location> + <rsc_location id="ban-rsc3-rsc4-node1-node2" original="1"> + <resource_set id="ban-rsc3-rsc4-node1-node2-set1" original="1"> + <resource_ref id="rsc3" original="1"/> + </resource_set> + <resource_set id="ban-rsc3-rsc4-node1-node2-set2" original="1"> + <resource_ref id="rsc4" original="1"/> + </resource_set> + <rule id="ban-rsc3-rsc4-node1-node2-rule1" score="-INFINITY" original="1"> + <expression id="ban-rsc3-rsc4-node1-node2-rule1-expr" attribute="#uname" operation="eq" value="node1" original="1"/> + </rule> + <rule id="ban-rsc3-rsc4-node1-node2-rule2" score="-INFINITY" original="1"> + <expression id="ban-rsc3-rsc4-node1-node2-rule2-expr" attribute="#uname" operation="eq" value="node2" original="1"/> + </rule> + <lifetime original="1"> + <rule id="ban-rsc3-rsc4-node1-node2-lifetime-rule1" original="1"> + <date_expression id="ban-rsc3-rsc4-node1-node2-lifetime-rule1-expr" operation="in_range" start="2004-001" original="1"/> + </rule> + <rule id="ban-rsc3-rsc4-node1-node2-lifetime-rule2" original="1"> + <date_expression id="ban-rsc3-rsc4-node1-node2-lifetime-rule2-expr" operation="in_range" end="2005-001" original="1"/> + </rule> + </lifetime> + </rsc_location> + <rsc_location id="ban-rsc3-rsc4-node3-node4" original="1"> + <resource_set id="ban-rsc3-rsc4-node1-node2-set1" original="0"> + <resource_ref id="rsc3" original="0"/> + </resource_set> + <resource_set id="ban-rsc3-rsc4-node1-node2-set2" original="0"> + <resource_ref id="rsc4" original="0"/> + </resource_set> + <rule id="ban-rsc3-rsc4-node3-node4-rule1" score="-INFINITY" original="1"> + <expression id="ban-rsc3-rsc4-node3-node4-rule1-expr" attribute="#uname" operation="eq" value="node3" original="1"/> + </rule> + <rule id="ban-rsc3-rsc4-node3-node4-rule2" score="-INFINITY" original="1"> + <expression id="ban-rsc3-rsc4-node3-node4-rule2-expr" attribute="#uname" operation="eq" value="node4" original="1"/> + </rule> + <lifetime original="1"> + <rule id="ban-rsc3-rsc4-node1-node2-lifetime-rule1" original="0"> + <date_expression id="ban-rsc3-rsc4-node1-node2-lifetime-rule1-expr" operation="in_range" start="2004-001" original="0"/> + </rule> + <rule id="ban-rsc3-rsc4-node1-node2-lifetime-rule2" original="0"> + <date_expression id="ban-rsc3-rsc4-node1-node2-lifetime-rule2-expr" operation="in_range" end="2005-001" original="0"/> + </rule> + </lifetime> + </rsc_location> + </constraints> + </configuration> + <status original="1"/> +</cib> diff --git a/cts/schemas/test-3/ref/multiple-location-rules.ref-99 b/cts/schemas/test-3/ref/multiple-location-rules.ref-99 new file mode 100644 index 0000000000..e99b327917 --- /dev/null +++ b/cts/schemas/test-3/ref/multiple-location-rules.ref-99 @@ -0,0 +1,113 @@ +<cib crm_feature_set="3.19.7" validate-with="pacemaker-4.0" epoch="16" num_updates="0" admin_epoch="0"> + <configuration> + <!-- The essential elements of this test are: + * There is a location constraint (ban-rsc1) containing a rsc attribute + and two top-level rules. + * There is a location constraint (allow-rsc1) containing a rsc + attribute and one top-level rule. + * There is a location constraint (allow-rsc2) containing a rsc + attribute and one top-level rule with two nested rules. + * There is a location constraint (ban-rsc3-rsc4-node1-node2) containing + two resource_set elements (with id attributes), two top-level + rules, and two rule elements (with id attributes) within a lifetime + element. + * There is a location constraint (ban-rsc3-rsc4-node1-node2) containing + two resource_set elements (with id-ref attributes), two top-level + rules, and two rule elements (with id-ref attributes) within a + lifetime element. + + In this situation: + * ban-rsc1 should be replaced by two new location constraints, each + containing one of the original rules. + * allow-rsc1 and allow-rsc2 should be unmodified. + * ban-rsc3-rsc4-node1-node2 should be replaced by two new location + constraints, each containing one of the original rules. The first of + the new constraints should contain the original resource_set and + lifetime rule elements, while the second should contain id-refs to + them. + * ban-rsc3-rsc4-node3-node4 should be replaced by two new location + constraints, each containing one of the original rules. Both of the + new constraints should contain the original resource_set and lifetime + rule elements, which are id-refs to resource sets defined in + ban-rsc3-rsc4-node1-node2. + * The rules within a lifetime element should be converted to an "or" + rule set nested alongside an "and" rule set containing the other + top-level rule. + --> + <crm_config/> + <nodes> + <node id="node1" uname="node1" type="member"/> + <node id="node2" uname="node2" type="member"/> + <node id="node3" uname="node3" type="member"/> + <node id="node4" uname="node3" type="member"/> + </nodes> + <resources> + <primitive id="rsc1" class="ocf" type="Dummy" provider="pacemaker"/> + <primitive id="rsc2" class="ocf" type="Dummy" provider="pacemaker"/> + <primitive id="rsc3" class="ocf" type="Dummy" provider="pacemaker"/> + <primitive id="rsc4" class="ocf" type="Dummy" provider="pacemaker"/> + </resources> + <constraints> + <rsc_location id="ban-rsc1" rsc="rsc1"> + <rule id="ban-rsc1-rule1" score="-INFINITY"> + <expression id="ban-rsc1-rule1-expr" attribute="#uname" operation="eq" value="node1"/> + </rule> + <rule id="ban-rsc1-rule2" score="-INFINITY"> + <expression id="ban-rsc1-rule2-expr" attribute="#uname" operation="eq" value="node2"/> + </rule> + </rsc_location> + <rsc_location id="allow-rsc1" rsc="rsc1"> + <rule id="allow-rsc1-rule" score="INFINITY"> + <expression id="allow-rsc1-rule-expr" attribute="#uname" operation="eq" value="node3"/> + </rule> + </rsc_location> + <rsc_location id="allow-rsc2" rsc="rsc2"> + <rule id="allow-rsc2-rule" score="INFINITY" boolean-op="or"> + <rule id="allow-rsc2-rule-subrule1"> + <expression id="allow-rsc2-rule-subrule1-expr" attribute="#uname" operation="eq" value="node1"/> + </rule> + <rule id="allow-rsc2-rule-subrule2"> + <expression id="allow-rsc2-rule-subrule2-expr" attribute="#uname" operation="eq" value="node2"/> + </rule> + </rule> + </rsc_location> + <rsc_location id="ban-rsc3-rsc4-node1-node2"> + <resource_set id="ban-rsc3-rsc4-node1-node2-set1"> + <resource_ref id="rsc3"/> + </resource_set> + <resource_set id="ban-rsc3-rsc4-node1-node2-set2"> + <resource_ref id="rsc4"/> + </resource_set> + <rule id="ban-rsc3-rsc4-node1-node2-rule1" score="-INFINITY"> + <expression id="ban-rsc3-rsc4-node1-node2-rule1-expr" attribute="#uname" operation="eq" value="node1"/> + </rule> + <rule id="ban-rsc3-rsc4-node1-node2-rule2" score="-INFINITY"> + <expression id="ban-rsc3-rsc4-node1-node2-rule2-expr" attribute="#uname" operation="eq" value="node2"/> + </rule> + <lifetime> + <rule id="ban-rsc3-rsc4-node1-node2-lifetime-rule1"> + <date_expression id="ban-rsc3-rsc4-node1-node2-lifetime-rule1-expr" operation="in_range" start="2004-001"/> + </rule> + <rule id="ban-rsc3-rsc4-node1-node2-lifetime-rule2"> + <date_expression id="ban-rsc3-rsc4-node1-node2-lifetime-rule2-expr" operation="in_range" end="2005-001"/> + </rule> + </lifetime> + </rsc_location> + <rsc_location id="ban-rsc3-rsc4-node3-node4"> + <resource_set id-ref="ban-rsc3-rsc4-node1-node2-set1"/> + <resource_set id-ref="ban-rsc3-rsc4-node1-node2-set2"/> + <rule id="ban-rsc3-rsc4-node3-node4-rule1" score="-INFINITY"> + <expression id="ban-rsc3-rsc4-node3-node4-rule1-expr" attribute="#uname" operation="eq" value="node3"/> + </rule> + <rule id="ban-rsc3-rsc4-node3-node4-rule2" score="-INFINITY"> + <expression id="ban-rsc3-rsc4-node3-node4-rule2-expr" attribute="#uname" operation="eq" value="node4"/> + </rule> + <lifetime> + <rule id-ref="ban-rsc3-rsc4-node1-node2-lifetime-rule1"/> + <rule id-ref="ban-rsc3-rsc4-node1-node2-lifetime-rule2"/> + </lifetime> + </rsc_location> + </constraints> + </configuration> + <status/> +</cib> diff --git a/cts/schemas/test-3/xml/multiple-location-rules.xml b/cts/schemas/test-3/xml/multiple-location-rules.xml new file mode 100644 index 0000000000..9f70653bea --- /dev/null +++ b/cts/schemas/test-3/xml/multiple-location-rules.xml @@ -0,0 +1,113 @@ +<cib crm_feature_set="3.19.7" validate-with="pacemaker-3.10" epoch="16" num_updates="0" admin_epoch="0"> + <configuration> + <!-- The essential elements of this test are: + * There is a location constraint (ban-rsc1) containing a rsc attribute + and two top-level rules. + * There is a location constraint (allow-rsc1) containing a rsc + attribute and one top-level rule. + * There is a location constraint (allow-rsc2) containing a rsc + attribute and one top-level rule with two nested rules. + * There is a location constraint (ban-rsc3-rsc4-node1-node2) containing + two resource_set elements (with id attributes), two top-level + rules, and two rule elements (with id attributes) within a lifetime + element. + * There is a location constraint (ban-rsc3-rsc4-node1-node2) containing + two resource_set elements (with id-ref attributes), two top-level + rules, and two rule elements (with id-ref attributes) within a + lifetime element. + + In this situation: + * ban-rsc1 should be replaced by two new location constraints, each + containing one of the original rules. + * allow-rsc1 and allow-rsc2 should be unmodified. + * ban-rsc3-rsc4-node1-node2 should be replaced by two new location + constraints, each containing one of the original rules. The first of + the new constraints should contain the original resource_set and + lifetime rule elements, while the second should contain id-refs to + them. + * ban-rsc3-rsc4-node3-node4 should be replaced by two new location + constraints, each containing one of the original rules. Both of the + new constraints should contain the original resource_set and lifetime + rule elements, which are id-refs to resource sets defined in + ban-rsc3-rsc4-node1-node2. + * The rules within a lifetime element should be converted to an "or" + rule set nested alongside an "and" rule set containing the other + top-level rule. + --> + <crm_config/> + <nodes> + <node id="node1" uname="node1" type="member"/> + <node id="node2" uname="node2" type="member"/> + <node id="node3" uname="node3" type="member"/> + <node id="node4" uname="node3" type="member"/> + </nodes> + <resources> + <primitive id="rsc1" class="ocf" type="Dummy" provider="pacemaker"/> + <primitive id="rsc2" class="ocf" type="Dummy" provider="pacemaker"/> + <primitive id="rsc3" class="ocf" type="Dummy" provider="pacemaker"/> + <primitive id="rsc4" class="ocf" type="Dummy" provider="pacemaker"/> + </resources> + <constraints> + <rsc_location id="ban-rsc1" rsc="rsc1"> + <rule id="ban-rsc1-rule1" score="-INFINITY"> + <expression id="ban-rsc1-rule1-expr" attribute="#uname" operation="eq" value="node1"/> + </rule> + <rule id="ban-rsc1-rule2" score="-INFINITY"> + <expression id="ban-rsc1-rule2-expr" attribute="#uname" operation="eq" value="node2"/> + </rule> + </rsc_location> + <rsc_location id="allow-rsc1" rsc="rsc1"> + <rule id="allow-rsc1-rule" score="INFINITY"> + <expression id="allow-rsc1-rule-expr" attribute="#uname" operation="eq" value="node3"/> + </rule> + </rsc_location> + <rsc_location id="allow-rsc2" rsc="rsc2"> + <rule id="allow-rsc2-rule" score="INFINITY" boolean-op="or"> + <rule id="allow-rsc2-rule-subrule1"> + <expression id="allow-rsc2-rule-subrule1-expr" attribute="#uname" operation="eq" value="node1"/> + </rule> + <rule id="allow-rsc2-rule-subrule2"> + <expression id="allow-rsc2-rule-subrule2-expr" attribute="#uname" operation="eq" value="node2"/> + </rule> + </rule> + </rsc_location> + <rsc_location id="ban-rsc3-rsc4-node1-node2"> + <resource_set id="ban-rsc3-rsc4-node1-node2-set1"> + <resource_ref id="rsc3"/> + </resource_set> + <resource_set id="ban-rsc3-rsc4-node1-node2-set2"> + <resource_ref id="rsc4"/> + </resource_set> + <rule id="ban-rsc3-rsc4-node1-node2-rule1" score="-INFINITY"> + <expression id="ban-rsc3-rsc4-node1-node2-rule1-expr" attribute="#uname" operation="eq" value="node1"/> + </rule> + <rule id="ban-rsc3-rsc4-node1-node2-rule2" score="-INFINITY"> + <expression id="ban-rsc3-rsc4-node1-node2-rule2-expr" attribute="#uname" operation="eq" value="node2"/> + </rule> + <lifetime> + <rule id="ban-rsc3-rsc4-node1-node2-lifetime-rule1"> + <date_expression id="ban-rsc3-rsc4-node1-node2-lifetime-rule1-expr" operation="in_range" start="2004-001"/> + </rule> + <rule id="ban-rsc3-rsc4-node1-node2-lifetime-rule2"> + <date_expression id="ban-rsc3-rsc4-node1-node2-lifetime-rule2-expr" operation="in_range" end="2005-001"/> + </rule> + </lifetime> + </rsc_location> + <rsc_location id="ban-rsc3-rsc4-node3-node4"> + <resource_set id-ref="ban-rsc3-rsc4-node1-node2-set1"/> + <resource_set id-ref="ban-rsc3-rsc4-node1-node2-set2"/> + <rule id="ban-rsc3-rsc4-node3-node4-rule1" score="-INFINITY"> + <expression id="ban-rsc3-rsc4-node3-node4-rule1-expr" attribute="#uname" operation="eq" value="node3"/> + </rule> + <rule id="ban-rsc3-rsc4-node3-node4-rule2" score="-INFINITY"> + <expression id="ban-rsc3-rsc4-node3-node4-rule2-expr" attribute="#uname" operation="eq" value="node4"/> + </rule> + <lifetime> + <rule id-ref="ban-rsc3-rsc4-node1-node2-lifetime-rule1"/> + <rule id-ref="ban-rsc3-rsc4-node1-node2-lifetime-rule2"/> + </lifetime> + </rsc_location> + </constraints> + </configuration> + <status/> +</cib>