pcs/SOURCES/bz1867516-01-rule-fix-mixin...

81 lines
3.6 KiB
Diff

From 85f8cbca6af296a5b8e4d43e9f56daed0d7c195b Mon Sep 17 00:00:00 2001
From: Tomas Jelinek <tojeline@redhat.com>
Date: Mon, 10 Aug 2020 12:17:01 +0200
Subject: [PATCH 1/2] rule: fix mixing 'and' and 'or' expressions
---
pcs/lib/cib/rule/parsed_to_cib.py | 5 +++++
pcs_test/tier0/lib/cib/rule/test_parsed_to_cib.py | 4 ++--
pcs_test/tier1/test_cib_options.py | 11 +++++++++--
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/pcs/lib/cib/rule/parsed_to_cib.py b/pcs/lib/cib/rule/parsed_to_cib.py
index 0fcae4f1..130663db 100644
--- a/pcs/lib/cib/rule/parsed_to_cib.py
+++ b/pcs/lib/cib/rule/parsed_to_cib.py
@@ -62,6 +62,11 @@ def __export_bool(
{
"id": create_subelement_id(parent_el, "rule", id_provider),
"boolean-op": boolean.operator.lower(),
+ # Score or score-attribute is required for nested rules, otherwise
+ # the CIB is not valid. Pacemaker doesn't use the score of nested
+ # rules. Score for the top rule, which is used by pacemaker, is
+ # supposed to be set in the export function above.
+ "score": "0",
},
)
for child in boolean.children:
diff --git a/pcs_test/tier0/lib/cib/rule/test_parsed_to_cib.py b/pcs_test/tier0/lib/cib/rule/test_parsed_to_cib.py
index f61fce99..fa639f7c 100644
--- a/pcs_test/tier0/lib/cib/rule/test_parsed_to_cib.py
+++ b/pcs_test/tier0/lib/cib/rule/test_parsed_to_cib.py
@@ -185,7 +185,7 @@ class Complex(Base):
),
"""
<rule id="X-rule" boolean-op="and" score="INFINITY">
- <rule id="X-rule-rule" boolean-op="or">
+ <rule id="X-rule-rule" boolean-op="or" score="0">
<rsc_expression id="X-rule-rule-rsc-ocf-pacemaker-Dummy"
class="ocf" provider="pacemaker" type="Dummy"
/>
@@ -197,7 +197,7 @@ class Complex(Base):
class="ocf" provider="heartbeat" type="Dummy"
/>
</rule>
- <rule id="X-rule-rule-1" boolean-op="or">
+ <rule id="X-rule-rule-1" boolean-op="or" score="0">
<op_expression id="X-rule-rule-1-op-monitor"
name="monitor" interval="30s"
/>
diff --git a/pcs_test/tier1/test_cib_options.py b/pcs_test/tier1/test_cib_options.py
index ba8f3515..92dbaed1 100644
--- a/pcs_test/tier1/test_cib_options.py
+++ b/pcs_test/tier1/test_cib_options.py
@@ -254,14 +254,21 @@ class OpDefaultsSetCreate(
self.assert_effect(
(
f"{self.cli_command} set create id=X meta nam1=val1 "
- "rule resource ::Dummy and op monitor"
+ "rule resource ::Dummy and (op start or op stop)"
),
f"""\
<{self.cib_tag}>
<meta_attributes id="X">
<rule id="X-rule" boolean-op="and" score="INFINITY">
<rsc_expression id="X-rule-rsc-Dummy" type="Dummy"/>
- <op_expression id="X-rule-op-monitor" name="monitor"/>
+ <rule id="X-rule-rule" boolean-op="or" score="0">
+ <op_expression id="X-rule-rule-op-start"
+ name="start"
+ />
+ <op_expression id="X-rule-rule-op-stop"
+ name="stop"
+ />
+ </rule>
</rule>
<nvpair id="X-nam1" name="nam1" value="val1"/>
</meta_attributes>
--
2.25.4