- IPsrcaddr: add warning about possible issues when used with DHCP,
and add error message when matching route not found Resolves: rhbz#2055016
This commit is contained in:
parent
fa593eb6d9
commit
6ca19aa95b
49
bz2055016-2-IPsrcaddr-error-message-route-not-found.patch
Normal file
49
bz2055016-2-IPsrcaddr-error-message-route-not-found.patch
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
From 5a65f66ff803ad7ed15af958cc1efdde4d53dcb7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Reid Wahl <nrwahl@protonmail.com>
|
||||||
|
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 <nrwahl@protonmail.com>
|
||||||
|
---
|
||||||
|
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
|
56
bz2055016-3-IPsrcaddr-fix-indentation.patch
Normal file
56
bz2055016-3-IPsrcaddr-fix-indentation.patch
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
From 0a197f1cd227e768837dff778a0c56fc1085d434 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||||
|
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
|
117
bz2055016-4-IPsrcaddr-fixes.patch
Normal file
117
bz2055016-4-IPsrcaddr-fixes.patch
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
From 50a596bfb977b18902dc62b99145bbd1a087690a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||||
|
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"
|
@ -45,7 +45,7 @@
|
|||||||
Name: resource-agents
|
Name: resource-agents
|
||||||
Summary: Open Source HA Reusable Cluster Resource Scripts
|
Summary: Open Source HA Reusable Cluster Resource Scripts
|
||||||
Version: 4.10.0
|
Version: 4.10.0
|
||||||
Release: 7%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist}
|
Release: 8%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist}
|
||||||
License: GPLv2+ and LGPLv2+
|
License: GPLv2+ and LGPLv2+
|
||||||
URL: https://github.com/ClusterLabs/resource-agents
|
URL: https://github.com/ClusterLabs/resource-agents
|
||||||
Source0: %{upstream_prefix}-%{upstream_version}.tar.gz
|
Source0: %{upstream_prefix}-%{upstream_version}.tar.gz
|
||||||
@ -57,7 +57,10 @@ Patch4: bz2029796-Route-return-OCF_NOT_RUNNING-missing-route.patch
|
|||||||
Patch5: bz2029704-1-db2-crm_attribute-use-forever.patch
|
Patch5: bz2029704-1-db2-crm_attribute-use-forever.patch
|
||||||
Patch6: bz2029704-2-db2-fixes.patch
|
Patch6: bz2029704-2-db2-fixes.patch
|
||||||
Patch7: bz2029753-podman-remove-anonymous-volumes.patch
|
Patch7: bz2029753-podman-remove-anonymous-volumes.patch
|
||||||
Patch8: bz2055016-IPsrcaddr-dhcp-warning.patch
|
Patch8: bz2055016-1-IPsrcaddr-dhcp-warning.patch
|
||||||
|
Patch9: bz2055016-2-IPsrcaddr-error-message-route-not-found.patch
|
||||||
|
Patch10: bz2055016-3-IPsrcaddr-fix-indentation.patch
|
||||||
|
Patch11: bz2055016-4-IPsrcaddr-fixes.patch
|
||||||
|
|
||||||
# bundled ha-cloud-support libs
|
# bundled ha-cloud-support libs
|
||||||
Patch500: ha-cloud-support-aws.patch
|
Patch500: ha-cloud-support-aws.patch
|
||||||
@ -190,6 +193,9 @@ exit 1
|
|||||||
%patch6 -p1
|
%patch6 -p1
|
||||||
%patch7 -p1
|
%patch7 -p1
|
||||||
%patch8 -p1
|
%patch8 -p1
|
||||||
|
%patch9 -p1
|
||||||
|
%patch10 -p1
|
||||||
|
%patch11 -p1
|
||||||
|
|
||||||
# bundled ha-cloud-support libs
|
# bundled ha-cloud-support libs
|
||||||
%patch500 -p1
|
%patch500 -p1
|
||||||
@ -519,16 +525,17 @@ rm -rf %{buildroot}/usr/share/doc/resource-agents
|
|||||||
%{_usr}/lib/ocf/lib/heartbeat/OCF_*.pm
|
%{_usr}/lib/ocf/lib/heartbeat/OCF_*.pm
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Mar 3 2022 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-8
|
||||||
|
- IPsrcaddr: add warning about possible issues when used with DHCP,
|
||||||
|
and add error message when matching route not found
|
||||||
|
|
||||||
|
Resolves: rhbz#2055016
|
||||||
|
|
||||||
* Wed Feb 23 2022 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-7
|
* Wed Feb 23 2022 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-7
|
||||||
- db2: use -l forever to fix crm_attribute issue
|
- db2: use -l forever to fix crm_attribute issue
|
||||||
|
|
||||||
Resolves: rhbz#2029704
|
Resolves: rhbz#2029704
|
||||||
|
|
||||||
* Wed Feb 16 2022 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-6
|
|
||||||
- IPsrcaddr: add warning about possible issues when used with DHCP
|
|
||||||
|
|
||||||
Resolves: rhbz#2055016
|
|
||||||
|
|
||||||
* Wed Jan 5 2022 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-5
|
* Wed Jan 5 2022 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-5
|
||||||
- podman: remove anonymous volumes
|
- podman: remove anonymous volumes
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user