diff --git a/crm-fence-peer-pacemaker2.patch b/crm-fence-peer-pacemaker2.patch new file mode 100644 index 0000000..58d0647 --- /dev/null +++ b/crm-fence-peer-pacemaker2.patch @@ -0,0 +1,86 @@ +commit fd2eec6eca91e3d4d24852b5bac4dd61f9854e67 +Author: Lars Ellenberg +Date: Mon Mar 2 14:12:55 2020 +0100 + + crm-fence-peer: detect pacemaker 2 "promotable clones" + + The sed-script to guess the pacemaker xml-id to be used in location + constraints from the DRBD resource name expected ' tag + to decide between the two. + +diff --git a/scripts/crm-fence-peer.9.sh b/scripts/crm-fence-peer.9.sh +index 94c32747..26b67b9e 100755 +--- a/scripts/crm-fence-peer.9.sh ++++ b/scripts/crm-fence-peer.9.sh +@@ -197,15 +197,28 @@ fence_peer_init() + { + # we know which instance we are: $OCF_RESOURCE_INSTANCE. + # but we do not know the xml ID of the :( ++ ++ # with Pacemaker 2, its "promotable clones" instead of the ++ # "master" (which was deemed a bad naming choice). ++ # detect older pacemaker by crm_feature_set < 3.1.0 ++ local clone_or_master=clone ++ case $crm_feature_set in ++ 3.0.*|[012].*) : "pacemaker version < 2, master slave" ++ clone_or_master=master ;; ++ esac ++ + # cibadmin -Ql --xpath \ + # '//master[primitive[@type="drbd" and instance_attributes/nvpair[@name = "drbd_resource" and @value="r0"]]]/@id' + # but I'd have to pipe that through sed anyways, because @attribute + # xpath queries are not supported. + # and I'd be incompatible with older cibadmin not supporting --xpath. +- # be cool, sed it out: ++ # be cool, sed it out. ++ # I could be more strict about primitive class:provider:type, ++ # or double check that it is in fact a promotable="true" clone... ++ # But in the real world, this is good enough. + : ${master_id=$(set +x; echo "$cib_xml" | +- sed -ne '// { +- // { ++ /<$clone_or_master / h;"' + / :( ++ ++ # with Pacemaker 2, its "promotable clones" instead of the ++ # "master" (which was deemed a bad naming choice). ++ # detect older pacemaker by crm_feature_set < 3.1.0 ++ local clone_or_master=clone ++ case $crm_feature_set in ++ 3.0.*|[012].*) : "pacemaker version < 2, master slave" ++ clone_or_master=master ;; ++ esac ++ + # cibadmin -Ql --xpath \ + # '//master[primitive[@type="drbd" and instance_attributes/nvpair[@name = "drbd_resource" and @value="r0"]]]/@id' + # but I'd have to pipe that through sed anyways, because @attribute + # xpath queries are not supported. + # and I'd be incompatible with older cibadmin not supporting --xpath. +- # be cool, sed it out: ++ # be cool, sed it out. ++ # I could be more strict about primitive class:provider:type, ++ # or double check that it is in fact a promotable="true" clone... ++ # But in the real world, this is good enough. + : ${master_id=$(set +x; echo "$cib_xml" | +- sed -ne '// { +- // { ++ /<$clone_or_master / h;"' + / + +- bsc#1166200 ,fix crm-fence-peer regex issue with pacemaker 2. +- Add patch crm-fence-peer-pacemaker2.patch + ------------------------------------------------------------------- Tue Feb 25 06:18:56 UTC 2020 - nick wang diff --git a/drbd-utils.spec b/drbd-utils.spec index 74c7102..64d31ef 100644 --- a/drbd-utils.spec +++ b/drbd-utils.spec @@ -36,6 +36,7 @@ Patch3: fence-after-pacemaker-down.patch # PATCH-SUSE-FIX: Disable quorum in default configuration (bsc#1032142) Patch4: 0001-Disable-quorum-in-default-configuration-bsc-1032142.patch Patch5: move_fencing_from_disk_to_net_in_example.patch +Patch6: crm-fence-peer-pacemaker2.patch Provides: drbd-bash-completion = %{version} Provides: drbd-pacemaker = %{version} @@ -86,6 +87,7 @@ raid 1. It is a building block for setting up clusters. %patch3 -p1 %patch4 -p1 %patch5 -p1 +%patch6 -p1 %build export WANT_DRBD_REPRODUCIBLE_BUILD=1