81 lines
3.6 KiB
Diff
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
|
|
|