diff --git a/SOURCES/bz1654862-1-IPsrcaddr-dhcp-warning.patch b/SOURCES/bz1654862-1-IPsrcaddr-dhcp-warning.patch deleted file mode 100644 index 34bad14..0000000 --- a/SOURCES/bz1654862-1-IPsrcaddr-dhcp-warning.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 6d2ed7615614ede093f097189876d0f08553a43e Mon Sep 17 00:00:00 2001 -From: Reid Wahl -Date: Mon, 14 Feb 2022 22:23:39 -0800 -Subject: [PATCH] IPsrcaddr: Add warning about DHCP - -If DHCP is enabled for the interface that serves OCF_RESKEY_ipaddress, -then NetworkManager (and possibly dhclient in systems without NM; -unsure) may later re-add a route that the IPsrcaddr resource replaced. -This may cause the resource to fail or cause other unexpected behavior. - -So far this has been observed with a default route, albeit with an edge -case of a configuration (OCF_RESKEY_ipaddress on a different subnet) -that may not be totally valid. There are likely to be other situations -as well where DHCP can cause conflicts with IPsrcaddr's manual updates -via iproute. The safest option is to use only static configuration for -the involved interface. - -Resolves: RHBZ#1654862 - -Signed-off-by: Reid Wahl ---- - heartbeat/IPsrcaddr | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr -index ec868409f..fd7b6f68d 100755 ---- a/heartbeat/IPsrcaddr -+++ b/heartbeat/IPsrcaddr -@@ -99,6 +99,12 @@ meta_data() { - - Resource script for IPsrcaddr. It manages the preferred source address - modification. -+ -+Note: DHCP should not be enabled for the interface serving the preferred -+source address. Enabling DHCP may result in unexpected behavior, such as -+the automatic addition of duplicate or conflicting routes. This may -+cause the IPsrcaddr resource to fail, or it may produce undesired -+behavior while the resource continues to run. - - Manages the preferred source address for outgoing IP packets - diff --git a/SOURCES/bz1654862-2-IPsrcaddr-error-message-route-not-found.patch b/SOURCES/bz1654862-2-IPsrcaddr-error-message-route-not-found.patch deleted file mode 100644 index 8a4a6fc..0000000 --- a/SOURCES/bz1654862-2-IPsrcaddr-error-message-route-not-found.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 5a65f66ff803ad7ed15af958cc1efdde4d53dcb7 Mon Sep 17 00:00:00 2001 -From: Reid Wahl -Date: Thu, 17 Feb 2022 03:53:21 -0800 -Subject: [PATCH] IPsrcaddr: Better error message when no matching route found - -If OCF_RESKEY_destination is not explicitly set and `ip route list` -can't find a route matching the specifications, the NETWORK variable -doesn't get set. This causes a certain failure of the start operation, -because there is no PREFIX argument to `ip route replace` (syntax -error). It may also cause unexpected behavior for stop operations (but -not in all cases). During a monitor, this event can only happen if -something has changed outside the cluster's control, and so is cause -for warning there. - -Exit OCF_ERR_ARGS for start, log debug for probe, log warning for all -other ops. - -Resolves: RHBZ#1654862 - -Signed-off-by: Reid Wahl ---- - heartbeat/IPsrcaddr | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) - -diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr -index fd7b6f68d..f0216722d 100755 ---- a/heartbeat/IPsrcaddr -+++ b/heartbeat/IPsrcaddr -@@ -549,6 +549,20 @@ rc=$? - INTERFACE=`echo $findif_out | awk '{print $1}'` - if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then - NETWORK=`$IP2UTIL route list dev $INTERFACE scope link $PROTO match $ipaddress|grep -m 1 -o '^[^ ]*'` -+ -+ if [ -z "$NETWORK" ]; then -+ err_str="command '$IP2UTIL route list dev $INTERFACE scope link $PROTO" -+ err_str="$err_str match $ipaddress' failed to find a matching route" -+ -+ if [ "$__OCF_ACTION" = "start" ]; then -+ ocf_exit_reason "$err_str" -+ exit $OCF_ERR_ARGS -+ elif ! ocf_is_probe; then -+ ocf_log warn "$err_str" -+ else -+ ocf_log debug "$err_str" -+ fi -+ fi - else - NETWORK="$OCF_RESKEY_destination" - fi diff --git a/SOURCES/bz1654862-3-IPsrcaddr-fix-indentation.patch b/SOURCES/bz1654862-3-IPsrcaddr-fix-indentation.patch deleted file mode 100644 index 337943d..0000000 --- a/SOURCES/bz1654862-3-IPsrcaddr-fix-indentation.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 0a197f1cd227e768837dff778a0c56fc1085d434 Mon Sep 17 00:00:00 2001 -From: Oyvind Albrigtsen -Date: Mon, 21 Feb 2022 13:54:04 +0100 -Subject: [PATCH] IPsrcaddr: fix indentation in better error message code - ---- - heartbeat/IPsrcaddr | 30 +++++++++++++++--------------- - 1 file changed, 15 insertions(+), 15 deletions(-) - -diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr -index f0216722d..c82adc0e9 100755 ---- a/heartbeat/IPsrcaddr -+++ b/heartbeat/IPsrcaddr -@@ -542,27 +542,27 @@ fi - findif_out=`$FINDIF -C` - rc=$? - [ $rc -ne 0 ] && { -- ocf_exit_reason "[$FINDIF -C] failed" -- exit $rc -+ ocf_exit_reason "[$FINDIF -C] failed" -+ exit $rc - } - - INTERFACE=`echo $findif_out | awk '{print $1}'` - if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then - NETWORK=`$IP2UTIL route list dev $INTERFACE scope link $PROTO match $ipaddress|grep -m 1 -o '^[^ ]*'` - -- if [ -z "$NETWORK" ]; then -- err_str="command '$IP2UTIL route list dev $INTERFACE scope link $PROTO" -- err_str="$err_str match $ipaddress' failed to find a matching route" -- -- if [ "$__OCF_ACTION" = "start" ]; then -- ocf_exit_reason "$err_str" -- exit $OCF_ERR_ARGS -- elif ! ocf_is_probe; then -- ocf_log warn "$err_str" -- else -- ocf_log debug "$err_str" -- fi -- fi -+ if [ -z "$NETWORK" ]; then -+ err_str="command '$IP2UTIL route list dev $INTERFACE scope link $PROTO" -+ err_str="$err_str match $ipaddress' failed to find a matching route" -+ -+ if [ "$__OCF_ACTION" = "start" ]; then -+ ocf_exit_reason "$err_str" -+ exit $OCF_ERR_ARGS -+ elif ! ocf_is_probe; then -+ ocf_log warn "$err_str" -+ else -+ ocf_log debug "$err_str" -+ fi -+ fi - else - NETWORK="$OCF_RESKEY_destination" - fi diff --git a/SOURCES/bz1654862-4-IPsrcaddr-fixes.patch b/SOURCES/bz1654862-4-IPsrcaddr-fixes.patch deleted file mode 100644 index c099fa5..0000000 --- a/SOURCES/bz1654862-4-IPsrcaddr-fixes.patch +++ /dev/null @@ -1,117 +0,0 @@ -From 50a596bfb977b18902dc62b99145bbd1a087690a Mon Sep 17 00:00:00 2001 -From: Oyvind Albrigtsen -Date: Tue, 1 Mar 2022 11:06:07 +0100 -Subject: [PATCH] IPsrcaddr: fixes - -- use findif.sh to detect secondary interfaces -- get metric and proto to update the correct route/update it correctly -- match route using interface to fail when trying to update secondary - interfaces without specifying destination (would update default route - before) -- also use PRIMARY_IP/OPTS during stop-action for default routes (to get - back to the exact routes we started with) -- dont fail during stop-action if route doesnt exist -- use [[:blank:]] for WS to follow POSIX standard (suggested by nrwahl) ---- - heartbeat/IPsrcaddr | 35 +++++++++++++++++++---------------- - 1 file changed, 19 insertions(+), 16 deletions(-) - -diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr -index c82adc0e9..7dbf65ff5 100755 ---- a/heartbeat/IPsrcaddr -+++ b/heartbeat/IPsrcaddr -@@ -52,6 +52,7 @@ - # Initialization: - : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} - . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs -+. ${OCF_FUNCTIONS_DIR}/findif.sh - - # Defaults - OCF_RESKEY_ipaddress_default="" -@@ -181,19 +182,21 @@ errorexit() { - # - # where the src clause "src Y.Y.Y.Y" may or may not be present - --WS="[`echo -en ' \t'`]" -+WS="[[:blank:]]" - OCTET="[0-9]\{1,3\}" - IPADDR="\($OCTET\.\)\{3\}$OCTET" - SRCCLAUSE="src$WS$WS*\($IPADDR\)" - MATCHROUTE="\(.*${WS}\)\($SRCCLAUSE\)\($WS.*\|$\)" --FINDIF=$HA_BIN/findif -+METRICCLAUSE=".*\(metric$WS[^ ]\+\)" -+PROTOCLAUSE=".*\(proto$WS[^ ]\+\)" -+FINDIF=findif - - # findif needs that to be set - export OCF_RESKEY_ip=$OCF_RESKEY_ipaddress - - srca_read() { - # Capture matching route - doublequotes prevent word splitting... -- ROUTE="`$CMDSHOW 2> /dev/null`" || errorexit "command '$CMDSHOW' failed" -+ ROUTE="`$CMDSHOW dev $INTERFACE 2> /dev/null`" || errorexit "command '$CMDSHOW' failed" - - # ... so we can make sure there is only 1 matching route - [ 1 -eq `echo "$ROUTE" | wc -l` ] || \ -@@ -201,7 +204,7 @@ srca_read() { - - # But there might still be no matching route - [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] && [ -z "$ROUTE" ] && \ -- ! ocf_is_probe && errorexit "no matching route exists" -+ ! ocf_is_probe && [ "$__OCF_ACTION" != stop ] && errorexit "no matching route exists" - - # Sed out the source ip address if it exists - SRCIP=`echo $ROUTE | sed -n "s/$MATCHROUTE/\3/p"` -@@ -232,8 +235,8 @@ srca_start() { - rc=$OCF_SUCCESS - ocf_log info "The ip route has been already set.($NETWORK, $INTERFACE, $ROUTE_WO_SRC)" - else -- $IP2UTIL route replace $TABLE $NETWORK dev $INTERFACE src $1 || \ -- errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE src $1' failed" -+ $IP2UTIL route replace $TABLE $NETWORK dev $INTERFACE $PROTO src $1 $METRIC || \ -+ errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE $PROTO src $1 $METRIC' failed" - - if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then - $CMDCHANGE $ROUTE_WO_SRC src $1 || \ -@@ -266,14 +269,11 @@ srca_stop() { - - [ $rc = 2 ] && errorexit "The address you specified to stop does not match the preferred source address" - -- OPTS="" -- if [ "$OCF_RESKEY_destination" != "0.0.0.0/0" ] ;then -- PRIMARY_IP="$($IP2UTIL -4 -o addr show dev $INTERFACE primary | awk '{split($4,a,"/");print a[1]}')" -- OPTS="proto kernel scope host src $PRIMARY_IP" -- fi -+ PRIMARY_IP="$($IP2UTIL -4 -o addr show dev $INTERFACE primary | awk '{split($4,a,"/");print a[1]}')" -+ OPTS="proto kernel scope link src $PRIMARY_IP" - -- $IP2UTIL route replace $TABLE $NETWORK dev $INTERFACE $OPTS || \ -- errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE $OPTS' failed" -+ $IP2UTIL route replace $TABLE $NETWORK dev $INTERFACE $OPTS $METRIC || \ -+ errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE $OPTS $METRIC' failed" - - if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then - $CMDCHANGE $ROUTE_WO_SRC || \ -@@ -539,16 +539,19 @@ if [ $rc -ne $OCF_SUCCESS ]; then - esac - fi - --findif_out=`$FINDIF -C` -+findif_out=`$FINDIF` - rc=$? - [ $rc -ne 0 ] && { -- ocf_exit_reason "[$FINDIF -C] failed" -+ ocf_exit_reason "[$FINDIF] failed" - exit $rc - } - - INTERFACE=`echo $findif_out | awk '{print $1}'` -+LISTROUTE=`$IP2UTIL route list dev $INTERFACE scope link $PROTO match $ipaddress` -+METRIC=`echo $LISTROUTE | sed -n "s/$METRICCLAUSE/\1/p"` -+[ -z "$PROTO" ] && PROTO=`echo $LISTROUTE | sed -n "s/$PROTOCLAUSE/\1/p"` - if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then -- NETWORK=`$IP2UTIL route list dev $INTERFACE scope link $PROTO match $ipaddress|grep -m 1 -o '^[^ ]*'` -+ NETWORK=`echo $LISTROUTE | grep -m 1 -o '^[^ ]*'` - - if [ -z "$NETWORK" ]; then - err_str="command '$IP2UTIL route list dev $INTERFACE scope link $PROTO" diff --git a/SOURCES/bz1908146-bz1908147-bz1908148-bz1949114-update-openstack-agents.patch b/SOURCES/bz1908146-bz1908147-bz1908148-bz1949114-update-openstack-agents.patch new file mode 100644 index 0000000..7b1a6e8 --- /dev/null +++ b/SOURCES/bz1908146-bz1908147-bz1908148-bz1949114-update-openstack-agents.patch @@ -0,0 +1,770 @@ +diff --color -uNr a/heartbeat/Makefile.am b/heartbeat/Makefile.am +--- a/heartbeat/Makefile.am 2022-03-15 16:14:29.355209012 +0100 ++++ b/heartbeat/Makefile.am 2022-03-15 16:18:35.917048467 +0100 +@@ -217,6 +217,7 @@ + lvm-clvm.sh \ + lvm-plain.sh \ + lvm-tag.sh \ ++ openstack-common.sh \ + ora-common.sh \ + mysql-common.sh \ + nfsserver-redhat.sh \ +diff --color -uNr a/heartbeat/openstack-cinder-volume b/heartbeat/openstack-cinder-volume +--- a/heartbeat/openstack-cinder-volume 2022-03-15 16:14:29.370209063 +0100 ++++ b/heartbeat/openstack-cinder-volume 2022-03-15 16:17:36.231840008 +0100 +@@ -34,11 +34,11 @@ + : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} + . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs + ++. ${OCF_FUNCTIONS_DIR}/openstack-common.sh ++ + # Defaults +-OCF_RESKEY_openstackcli_default="/usr/bin/openstack" + OCF_RESKEY_volume_local_check_default="true" + +-: ${OCF_RESKEY_openstackcli=${OCF_RESKEY_openstackcli_default}} + : ${OCF_RESKEY_volume_local_check=${OCF_RESKEY_volume_local_check_default}} + + ####################################################################### +@@ -68,14 +68,11 @@ + Attach a cinder volume + + +- +- +-Path to command line tools for openstack. +- +-Path to Openstack CLI tool +- +- ++END + ++common_meta_data ++ ++cat < + + This option allows the cluster to monitor the cinder volume presence without +@@ -85,28 +82,19 @@ + + + +- +- +-Valid Openstack credentials as openrc file from api_access/openrc. +- +-openrc file +- +- +- + + +-Cinder volume identifier to use to attach the bloc storage. ++Cinder volume identifier to use to attach the block storage. + + Volume ID + + +- + + + + + +- ++ + + + +@@ -127,17 +115,7 @@ + osvol_validate() { + check_binary "$OCF_RESKEY_openstackcli" + +- if [ -z "$OCF_RESKEY_openrc" ]; then +- ocf_exit_reason "openrc parameter not set" +- return $OCF_ERR_CONFIGURED +- fi +- +- if [ ! -f "$OCF_RESKEY_openrc" ] ; then +- ocf_exit_reason "openrc file not found" +- return $OCF_ERR_CONFIGURED +- fi +- +- . $OCF_RESKEY_openrc ++ get_config + + if ! $OCF_RESKEY_openstackcli volume list|grep -q $OCF_RESKEY_volume_id ; then + ocf_exit_reason "volume-id $OCF_RESKEY_volume_id not found" +diff --color -uNr a/heartbeat/openstack-common.sh b/heartbeat/openstack-common.sh +--- a/heartbeat/openstack-common.sh 1970-01-01 01:00:00.000000000 +0100 ++++ b/heartbeat/openstack-common.sh 2022-03-15 16:17:36.232840011 +0100 +@@ -0,0 +1,147 @@ ++OCF_RESKEY_openstackcli_default="/usr/bin/openstack" ++OCF_RESKEY_insecure_default="false" ++ ++: ${OCF_RESKEY_openstackcli=${OCF_RESKEY_openstackcli_default}} ++: ${OCF_RESKEY_insecure=${OCF_RESKEY_insecure_default}} ++ ++if ocf_is_true "${OCF_RESKEY_insecure}"; then ++ OCF_RESKEY_openstackcli="${OCF_RESKEY_openstackcli} --insecure" ++fi ++ ++common_meta_data() { ++ cat < ++ ++Openstack cloud (from ~/.config/openstack/clouds.yaml or /etc/openstack/clouds.yaml). ++ ++Cloud from clouds.yaml ++ ++ ++ ++ ++ ++Openstack credentials as openrc file from api_access/openrc. ++ ++openrc file ++ ++ ++ ++ ++ ++Keystone Auth URL ++ ++Keystone Auth URL ++ ++ ++ ++ ++ ++Username. ++ ++Username ++ ++ ++ ++ ++ ++Password. ++ ++Password ++ ++ ++ ++ ++ ++Keystone Project. ++ ++Keystone Project ++ ++ ++ ++ ++ ++Keystone User Domain Name. ++ ++Keystone User Domain Name ++ ++ ++ ++ ++ ++Keystone Project Domain Name. ++ ++Keystone Project Domain Name ++ ++ ++ ++ ++ ++Path to command line tools for openstack. ++ ++Path to Openstack CLI tool ++ ++ ++ ++ ++ ++Allow insecure connections ++ ++Allow insecure connections ++ ++ ++END ++} ++ ++get_config() { ++ if [ -n "$OCF_RESKEY_cloud" ]; then ++ TILDE=$(echo ~) ++ clouds_yaml="$TILDE/.config/openstack/clouds.yaml" ++ if [ ! -f "$clouds_yaml" ]; then ++ clouds_yaml="/etc/openstack/clouds.yaml" ++ fi ++ if [ ! -f "$clouds_yaml" ]; then ++ ocf_exit_reason "~/.config/openstack/clouds.yaml and /etc/openstack/clouds.yaml does not exist" ++ exit $OCF_ERR_CONFIGURED ++ fi ++ OCF_RESKEY_openstackcli="${OCF_RESKEY_openstackcli} --os-cloud $OCF_RESKEY_cloud" ++ elif [ -n "$OCF_RESKEY_openrc" ]; then ++ if [ ! -f "$OCF_RESKEY_openrc" ]; then ++ ocf_exit_reason "$OCF_RESKEY_openrc does not exist" ++ exit $OCF_ERR_CONFIGURED ++ fi ++ . $OCF_RESKEY_openrc ++ else ++ if [ -z "$OCF_RESKEY_auth_url" ]; then ++ ocf_exit_reason "auth_url not set" ++ exit $OCF_ERR_CONFIGURED ++ fi ++ if [ -z "$OCF_RESKEY_username" ]; then ++ ocf_exit_reason "username not set" ++ exit $OCF_ERR_CONFIGURED ++ fi ++ if [ -z "$OCF_RESKEY_password" ]; then ++ ocf_exit_reason "password not set" ++ exit $OCF_ERR_CONFIGURED ++ fi ++ if [ -z "$OCF_RESKEY_project_name" ]; then ++ ocf_exit_reason "project_name not set" ++ exit $OCF_ERR_CONFIGURED ++ fi ++ if [ -z "$OCF_RESKEY_user_domain_name" ]; then ++ ocf_exit_reason "user_domain_name not set" ++ exit $OCF_ERR_CONFIGURED ++ fi ++ if [ -z "$OCF_RESKEY_project_domain_name" ]; then ++ ocf_exit_reason " not set" ++ exit $OCF_ERR_CONFIGURED ++ fi ++ ++ OCF_RESKEY_openstackcli="${OCF_RESKEY_openstackcli} --os-auth-url $OCF_RESKEY_auth_url" ++ OCF_RESKEY_openstackcli="${OCF_RESKEY_openstackcli} --os-username $OCF_RESKEY_username" ++ OCF_RESKEY_openstackcli="${OCF_RESKEY_openstackcli} --os-password $OCF_RESKEY_password" ++ OCF_RESKEY_openstackcli="${OCF_RESKEY_openstackcli} --os-project-name $OCF_RESKEY_project_name" ++ OCF_RESKEY_openstackcli="${OCF_RESKEY_openstackcli} --os-user-domain-name $OCF_RESKEY_user_domain_name" ++ OCF_RESKEY_openstackcli="${OCF_RESKEY_openstackcli} --os-project-domain-name $OCF_RESKEY_project_domain_name" ++ fi ++} +diff --color -uNr a/heartbeat/openstack-floating-ip b/heartbeat/openstack-floating-ip +--- a/heartbeat/openstack-floating-ip 2022-03-15 16:14:29.370209063 +0100 ++++ b/heartbeat/openstack-floating-ip 2022-03-15 16:17:36.233840014 +0100 +@@ -34,10 +34,9 @@ + : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} + . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs + +-# Defaults +-OCF_RESKEY_openstackcli_default="/usr/bin/openstack" ++. ${OCF_FUNCTIONS_DIR}/openstack-common.sh + +-: ${OCF_RESKEY_openstackcli=${OCF_RESKEY_openstackcli_default}} ++# Defaults + + ####################################################################### + +@@ -67,22 +66,11 @@ + Move a floating IP + + +- +- +-Path to command line tools for openstack. +- +-Path to Openstack CLI tool +- +- ++END + +- +- +-Valid Openstack credentials as openrc file from api_access/openrc. +- +-openrc file +- +- ++common_meta_data + ++cat < + + Floating IP Identifier. +@@ -104,7 +92,7 @@ + + + +- ++ + + + +@@ -115,17 +103,7 @@ + osflip_validate() { + check_binary "$OCF_RESKEY_openstackcli" + +- if [ -z "$OCF_RESKEY_openrc" ]; then +- ocf_exit_reason "openrc parameter not set" +- return $OCF_ERR_CONFIGURED +- fi +- +- if [ ! -f "$OCF_RESKEY_openrc" ] ; then +- ocf_exit_reason "openrc file not found" +- return $OCF_ERR_CONFIGURED +- fi +- +- . $OCF_RESKEY_openrc ++ get_config + + if ! $OCF_RESKEY_openstackcli floating ip list|grep -q $OCF_RESKEY_ip_id ; then + ocf_exit_reason "ip-id $OCF_RESKEY_ip_id not found" +diff --color -uNr a/heartbeat/openstack-info b/heartbeat/openstack-info +--- a/heartbeat/openstack-info 1970-01-01 01:00:00.000000000 +0100 ++++ b/heartbeat/openstack-info 2022-03-15 16:17:36.234840018 +0100 +@@ -0,0 +1,270 @@ ++#!/bin/sh ++# ++# ++# OCF resource agent to set attributes from Openstack instance details. ++# It records (in the CIB) various attributes of a node ++# ++# Copyright (c) 2018 Mathieu Grzybek ++# All Rights Reserved. ++# ++# This program is free software; you can redistribute it and/or modify ++# it under the terms of version 2 of the GNU General Public License as ++# published by the Free Software Foundation. ++# ++# This program is distributed in the hope that it would be useful, but ++# WITHOUT ANY WARRANTY; without even the implied warranty of ++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ++# ++# Further, this software is distributed without any warranty that it is ++# free of the rightful claim of any third person regarding infringement ++# or the like. Any license provided herein, whether implied or ++# otherwise, applies only to this software file. Patent licenses, if ++# any, provided herein do not apply to combinations of this program with ++# other software, or any other product whatsoever. ++# ++# You should have received a copy of the GNU General Public License ++# along with this program; if not, write the Free Software Foundation, ++# Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. ++# ++####################################################################### ++# Initialization: ++ ++: ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} ++. ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs ++ ++. ${OCF_FUNCTIONS_DIR}/openstack-common.sh ++ ++# Defaults ++OCF_RESKEY_pidfile_default="$HA_RSCTMP/OSInfo-${OCF_RESOURCE_HOSTNAME}" ++OCF_RESKEY_delay_default="0" ++OCF_RESKEY_clone_default="0" ++OCF_RESKEY_curlcli_default="/usr/bin/curl" ++OCF_RESKEY_pythoncli_default="/usr/bin/python" ++ ++: ${OCF_RESKEY_curlcli=${OCF_RESKEY_curlcli_default}} ++: ${OCF_RESKEY_pythoncli=${OCF_RESKEY_pythoncli_default}} ++: ${OCF_RESKEY_pidfile=${OCF_RESKEY_pidfile_default}} ++: ${OCF_RESKEY_delay=${OCF_RESKEY_delay_default}} ++: ${OCF_RESKEY_clone=${OCF_RESKEY_clone_default}} ++ ++####################################################################### ++ ++meta_data() { ++ cat < ++ ++ ++1.0 ++ ++ ++OCF resource agent to set attributes from Openstack instance details. ++It records (in the CIB) various attributes of a node. ++Sample output: ++ openstack_az : nova ++ openstack_flavor : c1.small ++ openstack_id : 60ac4343-5828-49b1-8aac-7c69b1417f31 ++ openstack_ports : 7960d889-9750-4160-bf41-c69a41ad72d9:96530d18-57a3-4718-af32-30f2a74c22a2,b0e55a06-bd75-468d-8baa-22cfeb65799f:a55ae917-8016-4b1e-8ffa-04311b9dc7d6 ++ ++The layout of openstack_ports is a comma-separated list of tuples "subnet_id:port_id". ++ ++Records various node attributes in the CIB ++ ++ ++END ++ ++common_meta_data ++ ++ cat < ++PID file ++PID file ++ ++ ++ ++ ++Interval to allow values to stabilize ++Dampening Delay ++ ++ ++ ++ ++ ++Path to command line cURL binary. ++ ++Path to cURL binary ++ ++ ++ ++ ++ ++Path to command line Python interpreter. ++ ++Path to Python interpreter ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++END ++} ++ ++####################################################################### ++ ++OSInfoStats() { ++ local result ++ local value ++ local node ++ local node_id ++ ++ get_config ++ ++ # Nova data: server ID ++ node_id=$($OCF_RESKEY_curlcli \ ++ -s http://169.254.169.254/openstack/latest/meta_data.json | ++ $OCF_RESKEY_pythoncli -m json.tool | ++ grep -P '\"uuid\": \".*\",$' | ++ grep -P -o '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}') ++ ++ if [ $? -ne 0 ] ; then ++ ocf_exit_reason "Cannot find server ID" ++ exit $OCF_ERR_GENERIC ++ fi ++ ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_id -v "$node_id" ++ ++ # Nova data: flavor ++ value=$($OCF_RESKEY_openstackcli server show \ ++ --format value \ ++ --column flavor \ ++ $node_id) ++ ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_flavor -v "$value" ++ ++ # Nova data: availability zone ++ value=$($OCF_RESKEY_openstackcli server show \ ++ --format value \ ++ --column OS-EXT-AZ:availability_zone \ ++ $node_id) ++ ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_az -v "$value" ++ ++ # Network data: ports ++ value="" ++ for port_id in $($OCF_RESKEY_openstackcli port list \ ++ --format value \ ++ --column id \ ++ --server $node_id); do ++ subnet_id=$($OCF_RESKEY_openstackcli port show \ ++ --format json \ ++ --column fixed_ips \ ++ ${port_id} | grep -P '\"subnet_id\": \".*\",$' | ++ grep -P -o '[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}') ++ value+="${subnet_id}:${port_id}," ++ done ++ value=$(echo ${value} | sed -e 's/,$//g') ++ ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_ports -v "$value" ++ ++ if [ ! -z "$OS_REGION_NAME" ] ; then ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_region -v "$OS_REGION_NAME" ++ fi ++ ++ if [ ! -z "$OS_TENANT_ID" ] ; then ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_tenant_id -v "$OS_TENANT_ID" ++ ++ if [ ! -z "$OS_TENANT_NAME" ] ; then ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_tenant_name -v "$OS_TENANT_NAME" ++ fi ++ else ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_project_id -v "$OS_PROJECT_ID" ++ ++ if [ ! -z "$OS_PROJECT_NAME" ] ; then ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -n openstack_project_name -v "$OS_PROJECT_NAME" ++ fi ++ fi ++ ++} ++ ++OSInfo_usage() { ++ cat < $OCF_RESKEY_pidfile ++ OSInfoStats ++ exit $OCF_SUCCESS ++} ++ ++OSInfo_stop() { ++ rm -f $OCF_RESKEY_pidfile ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -D -n openstack_id ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -D -n openstack_flavor ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -D -n openstack_az ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -D -n openstack_ports ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -D -n openstack_region ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -D -n openstack_tenant_id ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -D -n openstack_tenant_name ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -D -n openstack_project_id ++ ${HA_SBIN_DIR}/attrd_updater ${OCF_RESKEY_delay} -D -n openstack_project_name ++ exit $OCF_SUCCESS ++} ++ ++OSInfo_monitor() { ++ if [ -f "$OCF_RESKEY_pidfile" ] ; then ++ OSInfoStats ++ exit $OCF_RUNNING ++ fi ++ exit $OCF_NOT_RUNNING ++} ++ ++OSInfo_validate() { ++ check_binary "$OCF_RESKEY_curlcli" ++ check_binary "$OCF_RESKEY_openstackcli" ++ check_binary "$OCF_RESKEY_pythoncli" ++ ++ return $OCF_SUCCESS ++} ++ ++if [ $# -ne 1 ]; then ++ OSInfo_usage ++ exit $OCF_ERR_ARGS ++fi ++ ++if [ x != x${OCF_RESKEY_delay} ]; then ++ OCF_RESKEY_delay="-d ${OCF_RESKEY_delay}" ++fi ++ ++case $__OCF_ACTION in ++meta-data) meta_data ++ exit $OCF_SUCCESS ++ ;; ++start) OSInfo_validate || exit $? ++ OSInfo_start ++ ;; ++stop) OSInfo_stop ++ ;; ++monitor) OSInfo_monitor ++ ;; ++validate-all) OSInfo_validate ++ ;; ++usage|help) OSInfo_usage ++ exit $OCF_SUCCESS ++ ;; ++*) OSInfo_usage ++ exit $OCF_ERR_UNIMPLEMENTED ++ ;; ++esac ++ ++exit $? +diff --color -uNr a/heartbeat/openstack-info.in b/heartbeat/openstack-info.in +--- a/heartbeat/openstack-info.in 2022-03-15 16:14:29.370209063 +0100 ++++ b/heartbeat/openstack-info.in 2022-03-15 16:17:36.234840018 +0100 +@@ -32,16 +32,16 @@ + : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} + . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs + ++. ${OCF_FUNCTIONS_DIR}/openstack-common.sh ++ + # Defaults + OCF_RESKEY_pidfile_default="$HA_RSCTMP/OSInfo-${OCF_RESOURCE_HOSTNAME}" + OCF_RESKEY_delay_default="0" + OCF_RESKEY_clone_default="0" + OCF_RESKEY_curlcli_default="/usr/bin/curl" +-OCF_RESKEY_openstackcli_default="/usr/bin/openstack" + OCF_RESKEY_pythoncli_default="@PYTHON@" + + : ${OCF_RESKEY_curlcli=${OCF_RESKEY_curlcli_default}} +-: ${OCF_RESKEY_openstackcli=${OCF_RESKEY_openstackcli_default}} + : ${OCF_RESKEY_pythoncli=${OCF_RESKEY_pythoncli_default}} + : ${OCF_RESKEY_pidfile=${OCF_RESKEY_pidfile_default}} + : ${OCF_RESKEY_delay=${OCF_RESKEY_delay_default}} +@@ -70,25 +70,23 @@ + Records various node attributes in the CIB + + ++END ++ ++common_meta_data ++ ++ cat < + PID file + PID file + + ++ + + Interval to allow values to stabilize + Dampening Delay + + + +- +- +-Valid Openstack credentials as openrc file from api_access/openrc. +- +-openrc file +- +- +- + + + Path to command line cURL binary. +@@ -97,14 +95,6 @@ + + + +- +- +-Path to command line tools for openstack. +- +-Path to Openstack CLI tool +- +- +- + + + Path to command line Python interpreter. +@@ -116,9 +106,9 @@ + + + +- +- +- ++ ++ ++ + + + +@@ -134,7 +124,7 @@ + local node + local node_id + +- . $OCF_RESKEY_openrc ++ get_config + + # Nova data: server ID + node_id=$($OCF_RESKEY_curlcli \ +@@ -244,16 +234,6 @@ + check_binary "$OCF_RESKEY_openstackcli" + check_binary "$OCF_RESKEY_pythoncli" + +- if [ -z "$OCF_RESKEY_openrc" ]; then +- ocf_exit_reason "openrc parameter not set" +- return $OCF_ERR_CONFIGURED +- fi +- +- if [ ! -f "$OCF_RESKEY_openrc" ] ; then +- ocf_exit_reason "openrc file not found" +- return $OCF_ERR_CONFIGURED +- fi +- + return $OCF_SUCCESS + } + +diff --color -uNr a/heartbeat/openstack-virtual-ip b/heartbeat/openstack-virtual-ip +--- a/heartbeat/openstack-virtual-ip 2022-03-15 16:14:29.370209063 +0100 ++++ b/heartbeat/openstack-virtual-ip 2022-03-15 16:17:36.235840021 +0100 +@@ -34,10 +34,9 @@ + : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} + . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs + +-# Defaults +-OCF_RESKEY_openstackcli_default="/usr/bin/openstack" ++. ${OCF_FUNCTIONS_DIR}/openstack-common.sh + +-: ${OCF_RESKEY_openstackcli=${OCF_RESKEY_openstackcli_default}} ++# Defaults + + ####################################################################### + +@@ -68,22 +67,11 @@ + Move a virtual IP + + +- +- +-Path to command line tools for openstack. +- +-Path to Openstack CLI tool +- +- ++END + +- +- +-Valid Openstack credentials as openrc file from api_access/openrc. +- +-openrc file +- +- ++common_meta_data + ++cat < + + Virtual IP Address. +@@ -105,7 +93,7 @@ + + + +- ++ + + + +@@ -128,17 +116,7 @@ + osvip_validate() { + check_binary "$OCF_RESKEY_openstackcli" + +- if [ -z "$OCF_RESKEY_openrc" ]; then +- ocf_exit_reason "openrc parameter not set" +- return $OCF_ERR_CONFIGURED +- fi +- +- if [ ! -f "$OCF_RESKEY_openrc" ] ; then +- ocf_exit_reason "openrc file not found" +- return $OCF_ERR_CONFIGURED +- fi +- +- . $OCF_RESKEY_openrc ++ get_config + + ${HA_SBIN_DIR}/attrd_updater --query -n openstack_ports -N $(crm_node -n) > /dev/null 2>&1 + if [ $? -ne 0 ] ; then diff --git a/SOURCES/bz2064342-1-IPsrcaddr-dhcp-warning.patch b/SOURCES/bz2064342-1-IPsrcaddr-dhcp-warning.patch new file mode 100644 index 0000000..34bad14 --- /dev/null +++ b/SOURCES/bz2064342-1-IPsrcaddr-dhcp-warning.patch @@ -0,0 +1,41 @@ +From 6d2ed7615614ede093f097189876d0f08553a43e Mon Sep 17 00:00:00 2001 +From: Reid Wahl +Date: Mon, 14 Feb 2022 22:23:39 -0800 +Subject: [PATCH] IPsrcaddr: Add warning about DHCP + +If DHCP is enabled for the interface that serves OCF_RESKEY_ipaddress, +then NetworkManager (and possibly dhclient in systems without NM; +unsure) may later re-add a route that the IPsrcaddr resource replaced. +This may cause the resource to fail or cause other unexpected behavior. + +So far this has been observed with a default route, albeit with an edge +case of a configuration (OCF_RESKEY_ipaddress on a different subnet) +that may not be totally valid. There are likely to be other situations +as well where DHCP can cause conflicts with IPsrcaddr's manual updates +via iproute. The safest option is to use only static configuration for +the involved interface. + +Resolves: RHBZ#1654862 + +Signed-off-by: Reid Wahl +--- + heartbeat/IPsrcaddr | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr +index ec868409f..fd7b6f68d 100755 +--- a/heartbeat/IPsrcaddr ++++ b/heartbeat/IPsrcaddr +@@ -99,6 +99,12 @@ meta_data() { + + Resource script for IPsrcaddr. It manages the preferred source address + modification. ++ ++Note: DHCP should not be enabled for the interface serving the preferred ++source address. Enabling DHCP may result in unexpected behavior, such as ++the automatic addition of duplicate or conflicting routes. This may ++cause the IPsrcaddr resource to fail, or it may produce undesired ++behavior while the resource continues to run. + + Manages the preferred source address for outgoing IP packets + diff --git a/SOURCES/bz2064342-2-IPsrcaddr-error-message-route-not-found.patch b/SOURCES/bz2064342-2-IPsrcaddr-error-message-route-not-found.patch new file mode 100644 index 0000000..8a4a6fc --- /dev/null +++ b/SOURCES/bz2064342-2-IPsrcaddr-error-message-route-not-found.patch @@ -0,0 +1,49 @@ +From 5a65f66ff803ad7ed15af958cc1efdde4d53dcb7 Mon Sep 17 00:00:00 2001 +From: Reid Wahl +Date: Thu, 17 Feb 2022 03:53:21 -0800 +Subject: [PATCH] IPsrcaddr: Better error message when no matching route found + +If OCF_RESKEY_destination is not explicitly set and `ip route list` +can't find a route matching the specifications, the NETWORK variable +doesn't get set. This causes a certain failure of the start operation, +because there is no PREFIX argument to `ip route replace` (syntax +error). It may also cause unexpected behavior for stop operations (but +not in all cases). During a monitor, this event can only happen if +something has changed outside the cluster's control, and so is cause +for warning there. + +Exit OCF_ERR_ARGS for start, log debug for probe, log warning for all +other ops. + +Resolves: RHBZ#1654862 + +Signed-off-by: Reid Wahl +--- + heartbeat/IPsrcaddr | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr +index fd7b6f68d..f0216722d 100755 +--- a/heartbeat/IPsrcaddr ++++ b/heartbeat/IPsrcaddr +@@ -549,6 +549,20 @@ rc=$? + INTERFACE=`echo $findif_out | awk '{print $1}'` + if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then + NETWORK=`$IP2UTIL route list dev $INTERFACE scope link $PROTO match $ipaddress|grep -m 1 -o '^[^ ]*'` ++ ++ if [ -z "$NETWORK" ]; then ++ err_str="command '$IP2UTIL route list dev $INTERFACE scope link $PROTO" ++ err_str="$err_str match $ipaddress' failed to find a matching route" ++ ++ if [ "$__OCF_ACTION" = "start" ]; then ++ ocf_exit_reason "$err_str" ++ exit $OCF_ERR_ARGS ++ elif ! ocf_is_probe; then ++ ocf_log warn "$err_str" ++ else ++ ocf_log debug "$err_str" ++ fi ++ fi + else + NETWORK="$OCF_RESKEY_destination" + fi diff --git a/SOURCES/bz2064342-3-IPsrcaddr-fix-indentation.patch b/SOURCES/bz2064342-3-IPsrcaddr-fix-indentation.patch new file mode 100644 index 0000000..337943d --- /dev/null +++ b/SOURCES/bz2064342-3-IPsrcaddr-fix-indentation.patch @@ -0,0 +1,56 @@ +From 0a197f1cd227e768837dff778a0c56fc1085d434 Mon Sep 17 00:00:00 2001 +From: Oyvind Albrigtsen +Date: Mon, 21 Feb 2022 13:54:04 +0100 +Subject: [PATCH] IPsrcaddr: fix indentation in better error message code + +--- + heartbeat/IPsrcaddr | 30 +++++++++++++++--------------- + 1 file changed, 15 insertions(+), 15 deletions(-) + +diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr +index f0216722d..c82adc0e9 100755 +--- a/heartbeat/IPsrcaddr ++++ b/heartbeat/IPsrcaddr +@@ -542,27 +542,27 @@ fi + findif_out=`$FINDIF -C` + rc=$? + [ $rc -ne 0 ] && { +- ocf_exit_reason "[$FINDIF -C] failed" +- exit $rc ++ ocf_exit_reason "[$FINDIF -C] failed" ++ exit $rc + } + + INTERFACE=`echo $findif_out | awk '{print $1}'` + if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then + NETWORK=`$IP2UTIL route list dev $INTERFACE scope link $PROTO match $ipaddress|grep -m 1 -o '^[^ ]*'` + +- if [ -z "$NETWORK" ]; then +- err_str="command '$IP2UTIL route list dev $INTERFACE scope link $PROTO" +- err_str="$err_str match $ipaddress' failed to find a matching route" +- +- if [ "$__OCF_ACTION" = "start" ]; then +- ocf_exit_reason "$err_str" +- exit $OCF_ERR_ARGS +- elif ! ocf_is_probe; then +- ocf_log warn "$err_str" +- else +- ocf_log debug "$err_str" +- fi +- fi ++ if [ -z "$NETWORK" ]; then ++ err_str="command '$IP2UTIL route list dev $INTERFACE scope link $PROTO" ++ err_str="$err_str match $ipaddress' failed to find a matching route" ++ ++ if [ "$__OCF_ACTION" = "start" ]; then ++ ocf_exit_reason "$err_str" ++ exit $OCF_ERR_ARGS ++ elif ! ocf_is_probe; then ++ ocf_log warn "$err_str" ++ else ++ ocf_log debug "$err_str" ++ fi ++ fi + else + NETWORK="$OCF_RESKEY_destination" + fi diff --git a/SOURCES/bz2064342-4-IPsrcaddr-fixes.patch b/SOURCES/bz2064342-4-IPsrcaddr-fixes.patch new file mode 100644 index 0000000..c099fa5 --- /dev/null +++ b/SOURCES/bz2064342-4-IPsrcaddr-fixes.patch @@ -0,0 +1,117 @@ +From 50a596bfb977b18902dc62b99145bbd1a087690a Mon Sep 17 00:00:00 2001 +From: Oyvind Albrigtsen +Date: Tue, 1 Mar 2022 11:06:07 +0100 +Subject: [PATCH] IPsrcaddr: fixes + +- use findif.sh to detect secondary interfaces +- get metric and proto to update the correct route/update it correctly +- match route using interface to fail when trying to update secondary + interfaces without specifying destination (would update default route + before) +- also use PRIMARY_IP/OPTS during stop-action for default routes (to get + back to the exact routes we started with) +- dont fail during stop-action if route doesnt exist +- use [[:blank:]] for WS to follow POSIX standard (suggested by nrwahl) +--- + heartbeat/IPsrcaddr | 35 +++++++++++++++++++---------------- + 1 file changed, 19 insertions(+), 16 deletions(-) + +diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr +index c82adc0e9..7dbf65ff5 100755 +--- a/heartbeat/IPsrcaddr ++++ b/heartbeat/IPsrcaddr +@@ -52,6 +52,7 @@ + # Initialization: + : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat} + . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs ++. ${OCF_FUNCTIONS_DIR}/findif.sh + + # Defaults + OCF_RESKEY_ipaddress_default="" +@@ -181,19 +182,21 @@ errorexit() { + # + # where the src clause "src Y.Y.Y.Y" may or may not be present + +-WS="[`echo -en ' \t'`]" ++WS="[[:blank:]]" + OCTET="[0-9]\{1,3\}" + IPADDR="\($OCTET\.\)\{3\}$OCTET" + SRCCLAUSE="src$WS$WS*\($IPADDR\)" + MATCHROUTE="\(.*${WS}\)\($SRCCLAUSE\)\($WS.*\|$\)" +-FINDIF=$HA_BIN/findif ++METRICCLAUSE=".*\(metric$WS[^ ]\+\)" ++PROTOCLAUSE=".*\(proto$WS[^ ]\+\)" ++FINDIF=findif + + # findif needs that to be set + export OCF_RESKEY_ip=$OCF_RESKEY_ipaddress + + srca_read() { + # Capture matching route - doublequotes prevent word splitting... +- ROUTE="`$CMDSHOW 2> /dev/null`" || errorexit "command '$CMDSHOW' failed" ++ ROUTE="`$CMDSHOW dev $INTERFACE 2> /dev/null`" || errorexit "command '$CMDSHOW' failed" + + # ... so we can make sure there is only 1 matching route + [ 1 -eq `echo "$ROUTE" | wc -l` ] || \ +@@ -201,7 +204,7 @@ srca_read() { + + # But there might still be no matching route + [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] && [ -z "$ROUTE" ] && \ +- ! ocf_is_probe && errorexit "no matching route exists" ++ ! ocf_is_probe && [ "$__OCF_ACTION" != stop ] && errorexit "no matching route exists" + + # Sed out the source ip address if it exists + SRCIP=`echo $ROUTE | sed -n "s/$MATCHROUTE/\3/p"` +@@ -232,8 +235,8 @@ srca_start() { + rc=$OCF_SUCCESS + ocf_log info "The ip route has been already set.($NETWORK, $INTERFACE, $ROUTE_WO_SRC)" + else +- $IP2UTIL route replace $TABLE $NETWORK dev $INTERFACE src $1 || \ +- errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE src $1' failed" ++ $IP2UTIL route replace $TABLE $NETWORK dev $INTERFACE $PROTO src $1 $METRIC || \ ++ errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE $PROTO src $1 $METRIC' failed" + + if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then + $CMDCHANGE $ROUTE_WO_SRC src $1 || \ +@@ -266,14 +269,11 @@ srca_stop() { + + [ $rc = 2 ] && errorexit "The address you specified to stop does not match the preferred source address" + +- OPTS="" +- if [ "$OCF_RESKEY_destination" != "0.0.0.0/0" ] ;then +- PRIMARY_IP="$($IP2UTIL -4 -o addr show dev $INTERFACE primary | awk '{split($4,a,"/");print a[1]}')" +- OPTS="proto kernel scope host src $PRIMARY_IP" +- fi ++ PRIMARY_IP="$($IP2UTIL -4 -o addr show dev $INTERFACE primary | awk '{split($4,a,"/");print a[1]}')" ++ OPTS="proto kernel scope link src $PRIMARY_IP" + +- $IP2UTIL route replace $TABLE $NETWORK dev $INTERFACE $OPTS || \ +- errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE $OPTS' failed" ++ $IP2UTIL route replace $TABLE $NETWORK dev $INTERFACE $OPTS $METRIC || \ ++ errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE $OPTS $METRIC' failed" + + if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then + $CMDCHANGE $ROUTE_WO_SRC || \ +@@ -539,16 +539,19 @@ if [ $rc -ne $OCF_SUCCESS ]; then + esac + fi + +-findif_out=`$FINDIF -C` ++findif_out=`$FINDIF` + rc=$? + [ $rc -ne 0 ] && { +- ocf_exit_reason "[$FINDIF -C] failed" ++ ocf_exit_reason "[$FINDIF] failed" + exit $rc + } + + INTERFACE=`echo $findif_out | awk '{print $1}'` ++LISTROUTE=`$IP2UTIL route list dev $INTERFACE scope link $PROTO match $ipaddress` ++METRIC=`echo $LISTROUTE | sed -n "s/$METRICCLAUSE/\1/p"` ++[ -z "$PROTO" ] && PROTO=`echo $LISTROUTE | sed -n "s/$PROTOCLAUSE/\1/p"` + if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then +- NETWORK=`$IP2UTIL route list dev $INTERFACE scope link $PROTO match $ipaddress|grep -m 1 -o '^[^ ]*'` ++ NETWORK=`echo $LISTROUTE | grep -m 1 -o '^[^ ]*'` + + if [ -z "$NETWORK" ]; then + err_str="command '$IP2UTIL route list dev $INTERFACE scope link $PROTO" diff --git a/SPECS/resource-agents.spec b/SPECS/resource-agents.spec index 6f48dac..07e0e4b 100644 --- a/SPECS/resource-agents.spec +++ b/SPECS/resource-agents.spec @@ -66,7 +66,7 @@ Name: resource-agents Summary: Open Source HA Reusable Cluster Resource Scripts Version: 4.9.0 -Release: 16%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist} +Release: 17%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist} License: GPLv2+ and LGPLv2+ URL: https://github.com/ClusterLabs/resource-agents %if 0%{?fedora} || 0%{?centos_version} || 0%{?rhel} @@ -97,10 +97,11 @@ Patch10: bz2012057-Route-return-OCF_NOT_RUNNING-missing-route.patch Patch11: bz2029706-1-db2-crm_attribute-use-forever.patch Patch12: bz2029706-2-db2-fixes.patch Patch13: bz1992661-mysql-use-ssl-mode.patch -Patch14: bz1654862-1-IPsrcaddr-dhcp-warning.patch -Patch15: bz1654862-2-IPsrcaddr-error-message-route-not-found.patch -Patch16: bz1654862-3-IPsrcaddr-fix-indentation.patch -Patch17: bz1654862-4-IPsrcaddr-fixes.patch +Patch14: bz2064342-1-IPsrcaddr-dhcp-warning.patch +Patch15: bz2064342-2-IPsrcaddr-error-message-route-not-found.patch +Patch16: bz2064342-3-IPsrcaddr-fix-indentation.patch +Patch17: bz2064342-4-IPsrcaddr-fixes.patch +Patch18: bz1908146-bz1908147-bz1908148-bz1949114-update-openstack-agents.patch # bundle patches Patch1000: 7-gcp-bundled.patch @@ -292,6 +293,7 @@ exit 1 %patch15 -p1 %patch16 -p1 %patch17 -p1 +%patch18 -p1 chmod 755 heartbeat/nova-compute-wait chmod 755 heartbeat/NovaEvacuate @@ -714,10 +716,6 @@ rm -rf %{buildroot} %exclude %{_usr}/lib/ocf/resource.d/heartbeat/mpathpersist %exclude %{_usr}/lib/ocf/resource.d/heartbeat/mysql-proxy %exclude %{_usr}/lib/ocf/resource.d/heartbeat/nvmet-* -%exclude %{_usr}/lib/ocf/resource.d/heartbeat/openstack-cinder-volume -%exclude %{_usr}/lib/ocf/resource.d/heartbeat/openstack-floating-ip -%exclude %{_usr}/lib/ocf/resource.d/heartbeat/openstack-info -%exclude %{_usr}/lib/ocf/resource.d/heartbeat/openstack-virtual-ip %exclude %{_usr}/lib/ocf/resource.d/heartbeat/ovsmonitor %exclude %{_usr}/lib/ocf/resource.d/heartbeat/pgagent %exclude %{_usr}/lib/ocf/resource.d/heartbeat/pingd @@ -782,10 +780,6 @@ rm -rf %{buildroot} %exclude %{_mandir}/man7/ocf_heartbeat_mpathpersist.7.gz %exclude %{_mandir}/man7/ocf_heartbeat_mysql-proxy.7.gz %exclude %{_mandir}/man7/ocf_heartbeat_nvmet-*.7.gz -%exclude %{_mandir}/man7/ocf_heartbeat_openstack-cinder-volume.7.gz -%exclude %{_mandir}/man7/ocf_heartbeat_openstack-floating-ip.7.gz -%exclude %{_mandir}/man7/ocf_heartbeat_openstack-info.7.gz -%exclude %{_mandir}/man7/ocf_heartbeat_openstack-virtual-ip.7.gz %exclude %{_mandir}/man7/ocf_heartbeat_ovsmonitor.7.gz %exclude %{_mandir}/man7/ocf_heartbeat_pgagent.7.gz %exclude %{_mandir}/man7/ocf_heartbeat_pingd.7.gz @@ -872,11 +866,17 @@ ccs_update_schema > /dev/null 2>&1 ||: %{_usr}/lib/ocf/lib/heartbeat/OCF_*.pm %changelog +* Wed Mar 16 2022 Oyvind Albrigtsen - 4.9.0-17 +- openstack-cinder-volume/openstack-floating-ip/openstack-info/ + openstack-virtual-ip: new resource agents + + Resolves: rhbz#1908146, rhbz#1908147, rhbz#1908148, rhbz#1949114 + * Thu Mar 3 2022 Oyvind Albrigtsen - 4.9.0-16 - IPsrcaddr: add warning about possible issues when used with DHCP, and add error message when matching route not found - Resolves: rhbz#1654862 + Resolves: rhbz#2064342 * Thu Feb 24 2022 Oyvind Albrigtsen - 4.9.0-15 - db2: use -l forever to fix crm_attribute issue