- 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
|
||||
Summary: Open Source HA Reusable Cluster Resource Scripts
|
||||
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+
|
||||
URL: https://github.com/ClusterLabs/resource-agents
|
||||
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
|
||||
Patch6: bz2029704-2-db2-fixes.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
|
||||
Patch500: ha-cloud-support-aws.patch
|
||||
@ -190,6 +193,9 @@ exit 1
|
||||
%patch6 -p1
|
||||
%patch7 -p1
|
||||
%patch8 -p1
|
||||
%patch9 -p1
|
||||
%patch10 -p1
|
||||
%patch11 -p1
|
||||
|
||||
# bundled ha-cloud-support libs
|
||||
%patch500 -p1
|
||||
@ -519,16 +525,17 @@ rm -rf %{buildroot}/usr/share/doc/resource-agents
|
||||
%{_usr}/lib/ocf/lib/heartbeat/OCF_*.pm
|
||||
|
||||
%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
|
||||
- db2: use -l forever to fix crm_attribute issue
|
||||
|
||||
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
|
||||
- podman: remove anonymous volumes
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user