import CS resource-agents-4.10.0-64.el9
This commit is contained in:
parent
3880a0febc
commit
ef7496d4fe
343
SOURCES/RHEL-16246-aws-agents-use-curl_retry.patch
Normal file
343
SOURCES/RHEL-16246-aws-agents-use-curl_retry.patch
Normal file
@ -0,0 +1,343 @@
|
|||||||
|
From fc0657b936f6a58f741e33f851b22f82bc68bffa Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||||
|
Date: Tue, 6 Feb 2024 13:28:12 +0100
|
||||||
|
Subject: [PATCH 1/2] ocf-shellfuncs: add curl_retry()
|
||||||
|
|
||||||
|
---
|
||||||
|
heartbeat/ocf-shellfuncs.in | 34 ++++++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 34 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/ocf-shellfuncs.in b/heartbeat/ocf-shellfuncs.in
|
||||||
|
index c5edb6f57..a69a9743d 100644
|
||||||
|
--- a/heartbeat/ocf-shellfuncs.in
|
||||||
|
+++ b/heartbeat/ocf-shellfuncs.in
|
||||||
|
@@ -672,6 +672,40 @@ EOF
|
||||||
|
systemctl daemon-reload
|
||||||
|
}
|
||||||
|
|
||||||
|
+# usage: curl_retry RETRIES SLEEP ARGS URL
|
||||||
|
+#
|
||||||
|
+# Use --show-error in ARGS to log HTTP error code
|
||||||
|
+#
|
||||||
|
+# returns:
|
||||||
|
+# 0 success
|
||||||
|
+# exit:
|
||||||
|
+# 1 fail
|
||||||
|
+curl_retry()
|
||||||
|
+{
|
||||||
|
+ local retries=$1 sleep=$2 opts=$3 url=$4
|
||||||
|
+ local tries=$(($retries + 1))
|
||||||
|
+ local args="--fail $opts $url"
|
||||||
|
+ local result rc
|
||||||
|
+
|
||||||
|
+ for try in $(seq $tries); do
|
||||||
|
+ ocf_log debug "curl $args try $try of $tries"
|
||||||
|
+ result=$(echo "$args" | xargs curl 2>&1)
|
||||||
|
+ rc=$?
|
||||||
|
+
|
||||||
|
+ ocf_log debug "result: $result"
|
||||||
|
+ [ $rc -eq 0 ] && break
|
||||||
|
+ sleep $sleep
|
||||||
|
+ done
|
||||||
|
+
|
||||||
|
+ if [ $rc -ne 0 ]; then
|
||||||
|
+ ocf_exit_reason "curl $args failed $tries tries"
|
||||||
|
+ exit $OCF_ERR_GENERIC
|
||||||
|
+ fi
|
||||||
|
+
|
||||||
|
+ echo "$result"
|
||||||
|
+ return $rc
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
# usage: crm_mon_no_validation args...
|
||||||
|
# run crm_mon without any cib schema validation
|
||||||
|
# This is useful when an agent runs in a bundle to avoid potential
|
||||||
|
|
||||||
|
From 80d330557319bdae9e45aad1279e435fc481d4e7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||||
|
Date: Tue, 6 Feb 2024 13:28:25 +0100
|
||||||
|
Subject: [PATCH 2/2] AWS agents: use curl_retry()
|
||||||
|
|
||||||
|
---
|
||||||
|
heartbeat/aws-vpc-move-ip | 35 ++++++++++++++++++++++++++---------
|
||||||
|
heartbeat/aws-vpc-route53.in | 27 +++++++++++++++++++++++++--
|
||||||
|
heartbeat/awseip | 36 +++++++++++++++++++++++++++++++-----
|
||||||
|
heartbeat/awsvip | 32 ++++++++++++++++++++++++++++----
|
||||||
|
4 files changed, 110 insertions(+), 20 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/aws-vpc-move-ip b/heartbeat/aws-vpc-move-ip
|
||||||
|
index 54806f6ea..6115e5ba8 100755
|
||||||
|
--- a/heartbeat/aws-vpc-move-ip
|
||||||
|
+++ b/heartbeat/aws-vpc-move-ip
|
||||||
|
@@ -47,6 +47,8 @@ OCF_RESKEY_interface_default="eth0"
|
||||||
|
OCF_RESKEY_iflabel_default=""
|
||||||
|
OCF_RESKEY_monapi_default="false"
|
||||||
|
OCF_RESKEY_lookup_type_default="InstanceId"
|
||||||
|
+OCF_RESKEY_curl_retries_default="3"
|
||||||
|
+OCF_RESKEY_curl_sleep_default="1"
|
||||||
|
|
||||||
|
: ${OCF_RESKEY_awscli=${OCF_RESKEY_awscli_default}}
|
||||||
|
: ${OCF_RESKEY_auth_type=${OCF_RESKEY_auth_type_default}}
|
||||||
|
@@ -60,6 +62,8 @@ OCF_RESKEY_lookup_type_default="InstanceId"
|
||||||
|
: ${OCF_RESKEY_iflabel=${OCF_RESKEY_iflabel_default}}
|
||||||
|
: ${OCF_RESKEY_monapi=${OCF_RESKEY_monapi_default}}
|
||||||
|
: ${OCF_RESKEY_lookup_type=${OCF_RESKEY_lookup_type_default}}
|
||||||
|
+: ${OCF_RESKEY_curl_retries=${OCF_RESKEY_curl_retries_default}}
|
||||||
|
+: ${OCF_RESKEY_curl_sleep=${OCF_RESKEY_curl_sleep_default}}
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
|
|
||||||
|
@@ -194,6 +198,22 @@ Name of resource type to lookup in route table.
|
||||||
|
<content type="string" default="${OCF_RESKEY_lookup_type_default}" />
|
||||||
|
</parameter>
|
||||||
|
|
||||||
|
+<parameter name="curl_retries" unique="0">
|
||||||
|
+<longdesc lang="en">
|
||||||
|
+curl retries before failing
|
||||||
|
+</longdesc>
|
||||||
|
+<shortdesc lang="en">curl retries</shortdesc>
|
||||||
|
+<content type="integer" default="${OCF_RESKEY_curl_retries_default}" />
|
||||||
|
+</parameter>
|
||||||
|
+
|
||||||
|
+<parameter name="curl_sleep" unique="0">
|
||||||
|
+<longdesc lang="en">
|
||||||
|
+curl sleep between tries
|
||||||
|
+</longdesc>
|
||||||
|
+<shortdesc lang="en">curl sleep</shortdesc>
|
||||||
|
+<content type="integer" default="${OCF_RESKEY_curl_sleep_default}" />
|
||||||
|
+</parameter>
|
||||||
|
+
|
||||||
|
</parameters>
|
||||||
|
|
||||||
|
<actions>
|
||||||
|
@@ -250,8 +270,10 @@ ec2ip_validate() {
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
- TOKEN=$(curl -sX PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
|
||||||
|
- EC2_INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id -H "X-aws-ec2-metadata-token: $TOKEN")
|
||||||
|
+ TOKEN=$(curl_retry "$OCF_RESKEY_curl_retries" "$OCF_RESKEY_curl_sleep" "--show-error -sX PUT -H 'X-aws-ec2-metadata-token-ttl-seconds: 21600'" "http://169.254.169.254/latest/api/token")
|
||||||
|
+ [ $? -ne 0 ] && exit $OCF_ERR_GENERIC
|
||||||
|
+ EC2_INSTANCE_ID=$(curl_retry "$OCF_RESKEY_curl_retries" "$OCF_RESKEY_curl_sleep" "--show-error -s -H 'X-aws-ec2-metadata-token: $TOKEN'" "http://169.254.169.254/latest/meta-data/instance-id")
|
||||||
|
+ [ $? -ne 0 ] && exit $OCF_ERR_GENERIC
|
||||||
|
|
||||||
|
if [ -z "${EC2_INSTANCE_ID}" ]; then
|
||||||
|
ocf_exit_reason "Instance ID not found. Is this a EC2 instance?"
|
||||||
|
@@ -365,14 +387,9 @@ ec2ip_get_instance_eni() {
|
||||||
|
fi
|
||||||
|
ocf_log debug "MAC address associated with interface ${OCF_RESKEY_interface}: ${MAC_ADDR}"
|
||||||
|
|
||||||
|
- cmd="curl -s http://169.254.169.254/latest/meta-data/network/interfaces/macs/${MAC_ADDR}/interface-id -H \"X-aws-ec2-metadata-token: $TOKEN\""
|
||||||
|
- ocf_log debug "executing command: $cmd"
|
||||||
|
+ cmd="curl_retry \"$OCF_RESKEY_curl_retries\" \"$OCF_RESKEY_curl_sleep\" \"--show-error -s -H 'X-aws-ec2-metadata-token: $TOKEN'\" \"http://169.254.169.254/latest/meta-data/network/interfaces/macs/${MAC_ADDR}/interface-id\""
|
||||||
|
EC2_NETWORK_INTERFACE_ID="$(eval $cmd)"
|
||||||
|
- rc=$?
|
||||||
|
- if [ $rc != 0 ]; then
|
||||||
|
- ocf_log warn "command failed, rc: $rc"
|
||||||
|
- return $OCF_ERR_GENERIC
|
||||||
|
- fi
|
||||||
|
+ [ $? -ne 0 ] && exit $OCF_ERR_GENERIC
|
||||||
|
ocf_log debug "network interface id associated MAC address ${MAC_ADDR}: ${EC2_NETWORK_INTERFACE_ID}"
|
||||||
|
echo $EC2_NETWORK_INTERFACE_ID
|
||||||
|
}
|
||||||
|
diff --git a/heartbeat/aws-vpc-route53.in b/heartbeat/aws-vpc-route53.in
|
||||||
|
index 18ab157e8..eba2ed95c 100644
|
||||||
|
--- a/heartbeat/aws-vpc-route53.in
|
||||||
|
+++ b/heartbeat/aws-vpc-route53.in
|
||||||
|
@@ -53,6 +53,8 @@ OCF_RESKEY_hostedzoneid_default=""
|
||||||
|
OCF_RESKEY_fullname_default=""
|
||||||
|
OCF_RESKEY_ip_default="local"
|
||||||
|
OCF_RESKEY_ttl_default=10
|
||||||
|
+OCF_RESKEY_curl_retries_default="3"
|
||||||
|
+OCF_RESKEY_curl_sleep_default="1"
|
||||||
|
|
||||||
|
: ${OCF_RESKEY_awscli=${OCF_RESKEY_awscli_default}}
|
||||||
|
: ${OCF_RESKEY_auth_type=${OCF_RESKEY_auth_type_default}}
|
||||||
|
@@ -62,6 +64,8 @@ OCF_RESKEY_ttl_default=10
|
||||||
|
: ${OCF_RESKEY_fullname:=${OCF_RESKEY_fullname_default}}
|
||||||
|
: ${OCF_RESKEY_ip:=${OCF_RESKEY_ip_default}}
|
||||||
|
: ${OCF_RESKEY_ttl:=${OCF_RESKEY_ttl_default}}
|
||||||
|
+: ${OCF_RESKEY_curl_retries=${OCF_RESKEY_curl_retries_default}}
|
||||||
|
+: ${OCF_RESKEY_curl_sleep=${OCF_RESKEY_curl_sleep_default}}
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat <<-EOT
|
||||||
|
@@ -185,6 +189,22 @@ Time to live for Route53 ARECORD
|
||||||
|
<shortdesc lang="en">ARECORD TTL</shortdesc>
|
||||||
|
<content type="string" default="${OCF_RESKEY_ttl_default}" />
|
||||||
|
</parameter>
|
||||||
|
+
|
||||||
|
+<parameter name="curl_retries" unique="0">
|
||||||
|
+<longdesc lang="en">
|
||||||
|
+curl retries before failing
|
||||||
|
+</longdesc>
|
||||||
|
+<shortdesc lang="en">curl retries</shortdesc>
|
||||||
|
+<content type="integer" default="${OCF_RESKEY_curl_retries_default}" />
|
||||||
|
+</parameter>
|
||||||
|
+
|
||||||
|
+<parameter name="curl_sleep" unique="0">
|
||||||
|
+<longdesc lang="en">
|
||||||
|
+curl sleep between tries
|
||||||
|
+</longdesc>
|
||||||
|
+<shortdesc lang="en">curl sleep</shortdesc>
|
||||||
|
+<content type="integer" default="${OCF_RESKEY_curl_sleep_default}" />
|
||||||
|
+</parameter>
|
||||||
|
</parameters>
|
||||||
|
|
||||||
|
<actions>
|
||||||
|
@@ -357,8 +377,11 @@ r53_monitor() {
|
||||||
|
_get_ip() {
|
||||||
|
case $OCF_RESKEY_ip in
|
||||||
|
local|public)
|
||||||
|
- TOKEN=$(curl -sX PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
|
||||||
|
- IPADDRESS=$(curl -s http://169.254.169.254/latest/meta-data/${OCF_RESKEY_ip}-ipv4 -H "X-aws-ec2-metadata-token: $TOKEN");;
|
||||||
|
+ TOKEN=$(curl_retry "$OCF_RESKEY_curl_retries" "$OCF_RESKEY_curl_sleep" "--show-error -sX PUT -H 'X-aws-ec2-metadata-token-ttl-seconds: 21600'" "http://169.254.169.254/latest/api/token")
|
||||||
|
+ [ $? -ne 0 ] && exit $OCF_ERR_GENERIC
|
||||||
|
+ IPADDRESS=$(curl_retry "$OCF_RESKEY_curl_retries" "$OCF_RESKEY_curl_sleep" "--show-error -s -H 'X-aws-ec2-metadata-token: $TOKEN'" "http://169.254.169.254/latest/meta-data/${OCF_RESKEY_ip}-ipv4")
|
||||||
|
+ [ $? -ne 0 ] && exit $OCF_ERR_GENERIC
|
||||||
|
+ ;;
|
||||||
|
*.*.*.*)
|
||||||
|
IPADDRESS="${OCF_RESKEY_ip}";;
|
||||||
|
esac
|
||||||
|
diff --git a/heartbeat/awseip b/heartbeat/awseip
|
||||||
|
index 49b0ca615..ffb6223a1 100755
|
||||||
|
--- a/heartbeat/awseip
|
||||||
|
+++ b/heartbeat/awseip
|
||||||
|
@@ -49,12 +49,16 @@ OCF_RESKEY_auth_type_default="key"
|
||||||
|
OCF_RESKEY_profile_default="default"
|
||||||
|
OCF_RESKEY_region_default=""
|
||||||
|
OCF_RESKEY_api_delay_default="3"
|
||||||
|
+OCF_RESKEY_curl_retries_default="3"
|
||||||
|
+OCF_RESKEY_curl_sleep_default="1"
|
||||||
|
|
||||||
|
: ${OCF_RESKEY_awscli=${OCF_RESKEY_awscli_default}}
|
||||||
|
: ${OCF_RESKEY_auth_type=${OCF_RESKEY_auth_type_default}}
|
||||||
|
: ${OCF_RESKEY_profile=${OCF_RESKEY_profile_default}}
|
||||||
|
: ${OCF_RESKEY_region=${OCF_RESKEY_region_default}}
|
||||||
|
: ${OCF_RESKEY_api_delay=${OCF_RESKEY_api_delay_default}}
|
||||||
|
+: ${OCF_RESKEY_curl_retries=${OCF_RESKEY_curl_retries_default}}
|
||||||
|
+: ${OCF_RESKEY_curl_sleep=${OCF_RESKEY_curl_sleep_default}}
|
||||||
|
|
||||||
|
meta_data() {
|
||||||
|
cat <<END
|
||||||
|
@@ -141,6 +145,22 @@ a short delay between API calls, to avoid sending API too quick
|
||||||
|
<content type="integer" default="${OCF_RESKEY_api_delay_default}" />
|
||||||
|
</parameter>
|
||||||
|
|
||||||
|
+<parameter name="curl_retries" unique="0">
|
||||||
|
+<longdesc lang="en">
|
||||||
|
+curl retries before failing
|
||||||
|
+</longdesc>
|
||||||
|
+<shortdesc lang="en">curl retries</shortdesc>
|
||||||
|
+<content type="integer" default="${OCF_RESKEY_curl_retries_default}" />
|
||||||
|
+</parameter>
|
||||||
|
+
|
||||||
|
+<parameter name="curl_sleep" unique="0">
|
||||||
|
+<longdesc lang="en">
|
||||||
|
+curl sleep between tries
|
||||||
|
+</longdesc>
|
||||||
|
+<shortdesc lang="en">curl sleep</shortdesc>
|
||||||
|
+<content type="integer" default="${OCF_RESKEY_curl_sleep_default}" />
|
||||||
|
+</parameter>
|
||||||
|
+
|
||||||
|
</parameters>
|
||||||
|
|
||||||
|
<actions>
|
||||||
|
@@ -171,14 +191,18 @@ awseip_start() {
|
||||||
|
awseip_monitor && return $OCF_SUCCESS
|
||||||
|
|
||||||
|
if [ -n "${PRIVATE_IP_ADDRESS}" ]; then
|
||||||
|
- NETWORK_INTERFACES_MACS=$(curl -s http://169.254.169.254/latest/meta-data/network/interfaces/macs/ -H "X-aws-ec2-metadata-token: $TOKEN")
|
||||||
|
+ NETWORK_INTERFACES_MACS=$(curl_retry "$OCF_RESKEY_curl_retries" "$OCF_RESKEY_curl_sleep" "-s -H 'X-aws-ec2-metadata-token: $TOKEN'" "http://169.254.169.254/latest/meta-data/network/interfaces/macs/")
|
||||||
|
for MAC in ${NETWORK_INTERFACES_MACS}; do
|
||||||
|
- curl -s http://169.254.169.254/latest/meta-data/network/interfaces/macs/${MAC}/local-ipv4s -H "X-aws-ec2-metadata-token: $TOKEN" |
|
||||||
|
+ curl_retry "$OCF_RESKEY_curl_retries" "$OCF_RESKEY_curl_sleep" "-s -H 'X-aws-ec2-metadata-token: $TOKEN'" "http://169.254.169.254/latest/meta-data/network/interfaces/macs/${MAC%/*}/local-ipv4s" |
|
||||||
|
grep -q "^${PRIVATE_IP_ADDRESS}$"
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
- NETWORK_ID=$(curl -s http://169.254.169.254/latest/meta-data/network/interfaces/macs/${MAC}/interface-id -H "X-aws-ec2-metadata-token: $TOKEN")
|
||||||
|
+ NETWORK_ID=$(curl_retry "$OCF_RESKEY_curl_retries" "$OCF_RESKEY_curl_sleep" "-s -H 'X-aws-ec2-metadata-token: $TOKEN'" "http://169.254.169.254/latest/meta-data/network/interfaces/macs/${MAC%/*}/interface-id")
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
+ if [ -z "$NETWORK_ID" ]; then
|
||||||
|
+ ocf_exit_reason "Could not find network interface for private_ip_address: $PRIVATE_IP_ADDRESS"
|
||||||
|
+ exit $OCF_ERR_GENERIC
|
||||||
|
+ fi
|
||||||
|
$AWSCLI_CMD ec2 associate-address \
|
||||||
|
--network-interface-id ${NETWORK_ID} \
|
||||||
|
--allocation-id ${ALLOCATION_ID} \
|
||||||
|
@@ -282,8 +306,10 @@ fi
|
||||||
|
ELASTIC_IP="${OCF_RESKEY_elastic_ip}"
|
||||||
|
ALLOCATION_ID="${OCF_RESKEY_allocation_id}"
|
||||||
|
PRIVATE_IP_ADDRESS="${OCF_RESKEY_private_ip_address}"
|
||||||
|
-TOKEN=$(curl -sX PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
|
||||||
|
-INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id -H "X-aws-ec2-metadata-token: $TOKEN")
|
||||||
|
+TOKEN=$(curl_retry "$OCF_RESKEY_curl_retries" "$OCF_RESKEY_curl_sleep" "--show-error -sX PUT -H 'X-aws-ec2-metadata-token-ttl-seconds: 21600'" "http://169.254.169.254/latest/api/token")
|
||||||
|
+[ $? -ne 0 ] && exit $OCF_ERR_GENERIC
|
||||||
|
+INSTANCE_ID=$(curl_retry "$OCF_RESKEY_curl_retries" "$OCF_RESKEY_curl_sleep" "--show-error -s -H 'X-aws-ec2-metadata-token: $TOKEN'" "http://169.254.169.254/latest/meta-data/instance-id")
|
||||||
|
+[ $? -ne 0 ] && exit $OCF_ERR_GENERIC
|
||||||
|
|
||||||
|
case $__OCF_ACTION in
|
||||||
|
start)
|
||||||
|
diff --git a/heartbeat/awsvip b/heartbeat/awsvip
|
||||||
|
index bdb4d68dd..f2b238a0f 100755
|
||||||
|
--- a/heartbeat/awsvip
|
||||||
|
+++ b/heartbeat/awsvip
|
||||||
|
@@ -48,12 +48,16 @@ OCF_RESKEY_auth_type_default="key"
|
||||||
|
OCF_RESKEY_profile_default="default"
|
||||||
|
OCF_RESKEY_region_default=""
|
||||||
|
OCF_RESKEY_api_delay_default="3"
|
||||||
|
+OCF_RESKEY_curl_retries_default="3"
|
||||||
|
+OCF_RESKEY_curl_sleep_default="1"
|
||||||
|
|
||||||
|
: ${OCF_RESKEY_awscli=${OCF_RESKEY_awscli_default}}
|
||||||
|
: ${OCF_RESKEY_auth_type=${OCF_RESKEY_auth_type_default}}
|
||||||
|
: ${OCF_RESKEY_profile=${OCF_RESKEY_profile_default}}
|
||||||
|
: ${OCF_RESKEY_region=${OCF_RESKEY_region_default}}
|
||||||
|
: ${OCF_RESKEY_api_delay=${OCF_RESKEY_api_delay_default}}
|
||||||
|
+: ${OCF_RESKEY_curl_retries=${OCF_RESKEY_curl_retries_default}}
|
||||||
|
+: ${OCF_RESKEY_curl_sleep=${OCF_RESKEY_curl_sleep_default}}
|
||||||
|
|
||||||
|
meta_data() {
|
||||||
|
cat <<END
|
||||||
|
@@ -124,6 +128,22 @@ a short delay between API calls, to avoid sending API too quick
|
||||||
|
<content type="integer" default="${OCF_RESKEY_api_delay_default}" />
|
||||||
|
</parameter>
|
||||||
|
|
||||||
|
+<parameter name="curl_retries" unique="0">
|
||||||
|
+<longdesc lang="en">
|
||||||
|
+curl retries before failing
|
||||||
|
+</longdesc>
|
||||||
|
+<shortdesc lang="en">curl retries</shortdesc>
|
||||||
|
+<content type="integer" default="${OCF_RESKEY_curl_retries_default}" />
|
||||||
|
+</parameter>
|
||||||
|
+
|
||||||
|
+<parameter name="curl_sleep" unique="0">
|
||||||
|
+<longdesc lang="en">
|
||||||
|
+curl sleep between tries
|
||||||
|
+</longdesc>
|
||||||
|
+<shortdesc lang="en">curl sleep</shortdesc>
|
||||||
|
+<content type="integer" default="${OCF_RESKEY_curl_sleep_default}" />
|
||||||
|
+</parameter>
|
||||||
|
+
|
||||||
|
</parameters>
|
||||||
|
|
||||||
|
<actions>
|
||||||
|
@@ -246,10 +266,14 @@ if [ -n "${OCF_RESKEY_region}" ]; then
|
||||||
|
AWSCLI_CMD="$AWSCLI_CMD --region ${OCF_RESKEY_region}"
|
||||||
|
fi
|
||||||
|
SECONDARY_PRIVATE_IP="${OCF_RESKEY_secondary_private_ip}"
|
||||||
|
-TOKEN=$(curl -sX PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
|
||||||
|
-INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id -H "X-aws-ec2-metadata-token: $TOKEN")
|
||||||
|
-MAC_ADDRESS=$(curl -s http://169.254.169.254/latest/meta-data/mac -H "X-aws-ec2-metadata-token: $TOKEN")
|
||||||
|
-NETWORK_ID=$(curl -s http://169.254.169.254/latest/meta-data/network/interfaces/macs/${MAC_ADDRESS}/interface-id -H "X-aws-ec2-metadata-token: $TOKEN")
|
||||||
|
+TOKEN=$(curl_retry "$OCF_RESKEY_curl_retries" "$OCF_RESKEY_curl_sleep" "--show-error -sX PUT -H 'X-aws-ec2-metadata-token-ttl-seconds: 21600'" "http://169.254.169.254/latest/api/token")
|
||||||
|
+[ $? -ne 0 ] && exit $OCF_ERR_GENERIC
|
||||||
|
+INSTANCE_ID=$(curl_retry "$OCF_RESKEY_curl_retries" "$OCF_RESKEY_curl_sleep" "--show-error -s -H 'X-aws-ec2-metadata-token: $TOKEN'" "http://169.254.169.254/latest/meta-data/instance-id")
|
||||||
|
+[ $? -ne 0 ] && exit $OCF_ERR_GENERIC
|
||||||
|
+MAC_ADDRESS=$(curl_retry "$OCF_RESKEY_curl_retries" "$OCF_RESKEY_curl_sleep" "--show-error -s -H 'X-aws-ec2-metadata-token: $TOKEN'" "http://169.254.169.254/latest/meta-data/mac")
|
||||||
|
+[ $? -ne 0 ] && exit $OCF_ERR_GENERIC
|
||||||
|
+NETWORK_ID=$(curl_retry "$OCF_RESKEY_curl_retries" "$OCF_RESKEY_curl_sleep" "--show-error -s -H 'X-aws-ec2-metadata-token: $TOKEN'" "http://169.254.169.254/latest/meta-data/network/interfaces/macs/${MAC_ADDRESS}/interface-id")
|
||||||
|
+[ $? -ne 0 ] && exit $OCF_ERR_GENERIC
|
||||||
|
|
||||||
|
case $__OCF_ACTION in
|
||||||
|
start)
|
46
SOURCES/RHEL-22715-LVM-activate-fix-false-positive.patch
Normal file
46
SOURCES/RHEL-22715-LVM-activate-fix-false-positive.patch
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
From 65a066cf9066390db65c4875e21c4c391793b9ae Mon Sep 17 00:00:00 2001
|
||||||
|
From: Arslan Ahmad <arslan.ahmad97@googlemail.com>
|
||||||
|
Date: Tue, 16 Jan 2024 09:11:17 +0530
|
||||||
|
Subject: [PATCH] Avoid false positive for VG activation
|
||||||
|
|
||||||
|
When lvm.conf file has `volume_list` parameter configured and the
|
||||||
|
cluster is managing the shared storage using `system_id_source`,
|
||||||
|
then the activation of the LV fails to happen. However it is
|
||||||
|
reported as a success.
|
||||||
|
|
||||||
|
The fixes will avoid starting of `LVM-activate` resource when
|
||||||
|
the cluster is configured with both `system_id_source` and
|
||||||
|
`volume_list`.
|
||||||
|
|
||||||
|
Signed-off-by: Arslan Ahmad <arslan.ahmad97@googlemail.com>
|
||||||
|
---
|
||||||
|
heartbeat/LVM-activate | 9 +++++++++
|
||||||
|
1 file changed, 9 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/LVM-activate b/heartbeat/LVM-activate
|
||||||
|
index f6f24a3b5..3858ed8dc 100755
|
||||||
|
--- a/heartbeat/LVM-activate
|
||||||
|
+++ b/heartbeat/LVM-activate
|
||||||
|
@@ -448,6 +448,10 @@ systemid_check()
|
||||||
|
{
|
||||||
|
# system_id_source is set in lvm.conf
|
||||||
|
source=$(lvmconfig 'global/system_id_source' 2>/dev/null | cut -d"=" -f2)
|
||||||
|
+
|
||||||
|
+ # Is volume_list set in lvm.conf
|
||||||
|
+ vol_list=$(lvmconfig 'activation/volume_list' 2>/dev/null | cut -d"=" -f2)
|
||||||
|
+
|
||||||
|
if [ "$source" = "" ] || [ "$source" = "none" ]; then
|
||||||
|
ocf_exit_reason "system_id_source in lvm.conf is not set correctly!"
|
||||||
|
exit $OCF_ERR_ARGS
|
||||||
|
@@ -458,6 +462,11 @@ systemid_check()
|
||||||
|
exit $OCF_ERR_ARGS
|
||||||
|
fi
|
||||||
|
|
||||||
|
+ if [ -n "$source" ] && [ -n "$vol_list" ]; then
|
||||||
|
+ ocf_exit_reason "Both system_id_source & volume_list cannot be defined!"
|
||||||
|
+ exit $OCF_ERR_ARGS
|
||||||
|
+ fi
|
||||||
|
+
|
||||||
|
return $OCF_SUCCESS
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
|||||||
|
From 264e38e02cb4c04877e412bac254e42c7f6b2e1c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||||
|
Date: Tue, 20 Feb 2024 12:34:42 +0100
|
||||||
|
Subject: [PATCH] Filesystem: fail when leading or trailing whitespace is
|
||||||
|
present in device or directory parameters
|
||||||
|
|
||||||
|
---
|
||||||
|
heartbeat/Filesystem | 12 ++++++++++++
|
||||||
|
1 file changed, 12 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/Filesystem b/heartbeat/Filesystem
|
||||||
|
index e1378f781..f88e3b552 100755
|
||||||
|
--- a/heartbeat/Filesystem
|
||||||
|
+++ b/heartbeat/Filesystem
|
||||||
|
@@ -995,6 +995,12 @@ if [ -n "${OCF_RESKEY_force_unmount}" ]; then
|
||||||
|
fi
|
||||||
|
|
||||||
|
DEVICE="$OCF_RESKEY_device"
|
||||||
|
+case "$DEVICE" in
|
||||||
|
+ [[:space:]]*|*[[:space:]])
|
||||||
|
+ ocf_exit_reason "device parameter does not accept leading or trailing whitespace characters"
|
||||||
|
+ exit $OCF_ERR_CONFIGURED
|
||||||
|
+ ;;
|
||||||
|
+esac
|
||||||
|
FSTYPE=$OCF_RESKEY_fstype
|
||||||
|
if [ ! -z "$OCF_RESKEY_options" ]; then
|
||||||
|
options="-o $OCF_RESKEY_options"
|
||||||
|
@@ -1032,6 +1038,12 @@ if [ -z "$OCF_RESKEY_directory" ]; then
|
||||||
|
else
|
||||||
|
MOUNTPOINT="$(echo "$OCF_RESKEY_directory" | sed 's/\/*$//')"
|
||||||
|
: ${MOUNTPOINT:=/}
|
||||||
|
+ case "$MOUNTPOINT" in
|
||||||
|
+ [[:space:]]*|*[[:space:]])
|
||||||
|
+ ocf_exit_reason "directory parameter does not accept leading or trailing whitespace characters"
|
||||||
|
+ exit $OCF_ERR_CONFIGURED
|
||||||
|
+ ;;
|
||||||
|
+ esac
|
||||||
|
if [ -e "$MOUNTPOINT" ] ; then
|
||||||
|
CANONICALIZED_MOUNTPOINT="$(readlink -f "$MOUNTPOINT")"
|
||||||
|
if [ $? -ne 0 ]; then
|
@ -0,0 +1,30 @@
|
|||||||
|
From 1317efc72af6b72d9fb37aea18dc16129c146148 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||||
|
Date: Tue, 25 Jun 2024 13:33:19 +0200
|
||||||
|
Subject: [PATCH] Filesystem: return success during stop-action when leading or
|
||||||
|
trailing whitespace is present in device or directory parameters
|
||||||
|
|
||||||
|
---
|
||||||
|
heartbeat/Filesystem | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/Filesystem b/heartbeat/Filesystem
|
||||||
|
index 8e0127531..3eb520e0c 100755
|
||||||
|
--- a/heartbeat/Filesystem
|
||||||
|
+++ b/heartbeat/Filesystem
|
||||||
|
@@ -1037,6 +1037,7 @@ fi
|
||||||
|
DEVICE="$OCF_RESKEY_device"
|
||||||
|
case "$DEVICE" in
|
||||||
|
[[:space:]]*|*[[:space:]])
|
||||||
|
+ [ "$__OCF_ACTION" = "stop" ] && exit $OCF_SUCCESS
|
||||||
|
ocf_exit_reason "device parameter does not accept leading or trailing whitespace characters"
|
||||||
|
exit $OCF_ERR_CONFIGURED
|
||||||
|
;;
|
||||||
|
@@ -1080,6 +1081,7 @@ else
|
||||||
|
: ${MOUNTPOINT:=/}
|
||||||
|
case "$MOUNTPOINT" in
|
||||||
|
[[:space:]]*|*[[:space:]])
|
||||||
|
+ [ "$__OCF_ACTION" = "stop" ] && exit $OCF_SUCCESS
|
||||||
|
ocf_exit_reason "directory parameter does not accept leading or trailing whitespace characters"
|
||||||
|
exit $OCF_ERR_CONFIGURED
|
||||||
|
;;
|
@ -0,0 +1,75 @@
|
|||||||
|
From 4357f0dbb8668ac4090cd7070c2ea195e5683326 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Damien Ciabrini <dciabrin@redhat.com>
|
||||||
|
Date: Wed, 24 Jan 2024 13:27:26 +0100
|
||||||
|
Subject: [PATCH] galera: allow joiner to report non-Primary during initial IST
|
||||||
|
|
||||||
|
It seems that with recent galera versions, when a galera node
|
||||||
|
joins a cluster, there is a small time window where the node is
|
||||||
|
connected to the primary component of the galera cluster, but it
|
||||||
|
might still be preparing its IST. During this time, it can report
|
||||||
|
itself as being 'not ready' and in 'non-primary' state.
|
||||||
|
|
||||||
|
Update the galera resource agent to allow the node to be in
|
||||||
|
non-primary state, but only if running a "promote" operation. Any
|
||||||
|
network partition during the promotion will be caught by the
|
||||||
|
promote timeout.
|
||||||
|
|
||||||
|
In reworking the promotion code, we move the check for primary
|
||||||
|
partition into the "galera_monitor" function. The check works
|
||||||
|
as before for regular "monitor" or "probe" operations.
|
||||||
|
|
||||||
|
Related-Bug: rhbz#2255414
|
||||||
|
---
|
||||||
|
heartbeat/galera.in | 25 +++++++++++++++++--------
|
||||||
|
1 file changed, 17 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/galera.in b/heartbeat/galera.in
|
||||||
|
index 6aed3e4b6d..b518595cb0 100755
|
||||||
|
--- a/heartbeat/galera.in
|
||||||
|
+++ b/heartbeat/galera.in
|
||||||
|
@@ -822,6 +822,11 @@ galera_promote()
|
||||||
|
return $rc
|
||||||
|
fi
|
||||||
|
|
||||||
|
+ # At this point, the mysql pidfile is created on disk and the
|
||||||
|
+ # mysql server is reacheable via its UNIX socket. If we are a
|
||||||
|
+ # joiner, SST transfers (rsync) have finished, but an IST may
|
||||||
|
+ # still be requested or ongoing
|
||||||
|
+
|
||||||
|
galera_monitor
|
||||||
|
rc=$?
|
||||||
|
if [ $rc != $OCF_SUCCESS -a $rc != $OCF_RUNNING_MASTER ]; then
|
||||||
|
@@ -835,12 +840,6 @@ galera_promote()
|
||||||
|
return $OCF_ERR_GENERIC
|
||||||
|
fi
|
||||||
|
|
||||||
|
- is_primary
|
||||||
|
- if [ $? -ne 0 ]; then
|
||||||
|
- ocf_exit_reason "Failure. Master instance started, but is not in Primary mode."
|
||||||
|
- return $OCF_ERR_GENERIC
|
||||||
|
- fi
|
||||||
|
-
|
||||||
|
if ocf_is_true $bootstrap; then
|
||||||
|
promote_everyone
|
||||||
|
clear_bootstrap_node
|
||||||
|
@@ -991,8 +990,18 @@ galera_monitor()
|
||||||
|
fi
|
||||||
|
rc=$OCF_RUNNING_MASTER
|
||||||
|
else
|
||||||
|
- ocf_exit_reason "local node <${NODENAME}> is started, but not in primary mode. Unknown state."
|
||||||
|
- rc=$OCF_ERR_GENERIC
|
||||||
|
+ # It seems that with recent galera (26.4+), a joiner that is
|
||||||
|
+ # connected to a Primary component and is preparing its IST
|
||||||
|
+ # request might still temporarily report its state as
|
||||||
|
+ # Non-Primary. Do not fail in this case as the promote
|
||||||
|
+ # operation will loop until the IST finishes or the promote
|
||||||
|
+ # times out.
|
||||||
|
+ if [ "$__OCF_ACTION" = "promote" ] && ! ocf_is_true $(is_bootstrap); then
|
||||||
|
+ ocf_log info "local node <${NODENAME}> is receiving a State Transfer."
|
||||||
|
+ else
|
||||||
|
+ ocf_exit_reason "local node <${NODENAME}> is started, but not in primary mode. Unknown state."
|
||||||
|
+ rc=$OCF_ERR_GENERIC
|
||||||
|
+ fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $rc
|
25
SOURCES/RHEL-32265-1-findif.sh-fix-corner-cases.patch
Normal file
25
SOURCES/RHEL-32265-1-findif.sh-fix-corner-cases.patch
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
From f717b4a3aa83c9124e62716f421b99e314d00233 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||||
|
Date: Fri, 12 Apr 2024 12:23:21 +0200
|
||||||
|
Subject: [PATCH] findif.sh: fix corner cases
|
||||||
|
|
||||||
|
---
|
||||||
|
heartbeat/findif.sh | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/findif.sh b/heartbeat/findif.sh
|
||||||
|
index 7c766e6e0..13484f827 100644
|
||||||
|
--- a/heartbeat/findif.sh
|
||||||
|
+++ b/heartbeat/findif.sh
|
||||||
|
@@ -215,9 +215,9 @@ findif()
|
||||||
|
fi
|
||||||
|
if [ -n "$nic" ] ; then
|
||||||
|
# NIC supports more than two.
|
||||||
|
- set -- $(ip -o -f $family route list match $match $scope | grep "dev $nic " | awk 'BEGIN{best=0} /\// { mask=$1; sub(".*/", "", mask); if( int(mask)>=best ) { best=int(mask); best_ln=$0; } } END{print best_ln}')
|
||||||
|
+ set -- $(ip -o -f $family route list match $match $scope | grep "dev $nic " | sed -e 's,^\([0-9.]\+\) ,\1/32 ,;s,^\([0-9a-f:]\+\) ,\1/128 ,' | sort -t/ -k2,2nr)
|
||||||
|
else
|
||||||
|
- set -- $(ip -o -f $family route list match $match $scope | awk 'BEGIN{best=0} /\// { mask=$1; sub(".*/", "", mask); if( int(mask)>=best ) { best=int(mask); best_ln=$0; } } END{print best_ln}')
|
||||||
|
+ set -- $(ip -o -f $family route list match $match $scope | sed -e 's,^\([0-9.]\+\) ,\1/32 ,;s,^\([0-9a-f:]\+\) ,\1/128 ,' | sort -t/ -k2,2nr)
|
||||||
|
fi
|
||||||
|
if [ $# = 0 ] ; then
|
||||||
|
case $OCF_RESKEY_ip in
|
365
SOURCES/RHEL-32265-2-IPsrcaddr-add-IPv6-support.patch
Normal file
365
SOURCES/RHEL-32265-2-IPsrcaddr-add-IPv6-support.patch
Normal file
@ -0,0 +1,365 @@
|
|||||||
|
From 12d73d53026d219be67c0d5353010ba08ab49e98 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||||
|
Date: Tue, 28 May 2024 09:45:55 +0200
|
||||||
|
Subject: [PATCH 1/3] findif.sh: add metric for IPv6 support and fail when
|
||||||
|
matching more than 1 route
|
||||||
|
|
||||||
|
---
|
||||||
|
heartbeat/findif.sh | 19 ++++++++++++++++---
|
||||||
|
1 file changed, 16 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/findif.sh b/heartbeat/findif.sh
|
||||||
|
index 13484f827..ca5d1a5c1 100644
|
||||||
|
--- a/heartbeat/findif.sh
|
||||||
|
+++ b/heartbeat/findif.sh
|
||||||
|
@@ -196,10 +196,13 @@ findif()
|
||||||
|
{
|
||||||
|
local match="$OCF_RESKEY_ip"
|
||||||
|
local family
|
||||||
|
+ local proto
|
||||||
|
local scope
|
||||||
|
local nic="$OCF_RESKEY_nic"
|
||||||
|
local netmask="$OCF_RESKEY_cidr_netmask"
|
||||||
|
local brdcast="$OCF_RESKEY_broadcast"
|
||||||
|
+ local metric
|
||||||
|
+ local routematch
|
||||||
|
|
||||||
|
echo $match | grep -qs ":"
|
||||||
|
if [ $? = 0 ] ; then
|
||||||
|
@@ -215,10 +218,19 @@ findif()
|
||||||
|
fi
|
||||||
|
if [ -n "$nic" ] ; then
|
||||||
|
# NIC supports more than two.
|
||||||
|
- set -- $(ip -o -f $family route list match $match $scope | grep "dev $nic " | sed -e 's,^\([0-9.]\+\) ,\1/32 ,;s,^\([0-9a-f:]\+\) ,\1/128 ,' | sort -t/ -k2,2nr)
|
||||||
|
+ routematch=$(ip -o -f $family route list match $match $proto $scope | grep "dev $nic " | sed -e 's,^\([0-9.]\+\) ,\1/32 ,;s,^\([0-9a-f:]\+\) ,\1/128 ,' | sort -t/ -k2,2nr)
|
||||||
|
else
|
||||||
|
- set -- $(ip -o -f $family route list match $match $scope | sed -e 's,^\([0-9.]\+\) ,\1/32 ,;s,^\([0-9a-f:]\+\) ,\1/128 ,' | sort -t/ -k2,2nr)
|
||||||
|
+ routematch=$(ip -o -f $family route list match $match $proto $scope | sed -e 's,^\([0-9.]\+\) ,\1/32 ,;s,^\([0-9a-f:]\+\) ,\1/128 ,' | sort -t/ -k2,2nr)
|
||||||
|
fi
|
||||||
|
+ if [ "$family" = "inet6" ]; then
|
||||||
|
+ routematch=$(echo "$routematch" | grep -v "^default")
|
||||||
|
+ fi
|
||||||
|
+
|
||||||
|
+ if [ $(echo "$routematch" | wc -l) -gt 1 ]; then
|
||||||
|
+ ocf_exit_reason "More than 1 routes match $match. Unable to decide which route to use."
|
||||||
|
+ return $OCF_ERR_GENERIC
|
||||||
|
+ fi
|
||||||
|
+ set -- $routematch
|
||||||
|
if [ $# = 0 ] ; then
|
||||||
|
case $OCF_RESKEY_ip in
|
||||||
|
127.*)
|
||||||
|
@@ -255,6 +267,7 @@ findif()
|
||||||
|
return $OCF_ERR_GENERIC
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
- echo "$nic netmask $netmask broadcast $brdcast"
|
||||||
|
+ metric=$(echo "$@" | sed "s/.*metric[[:blank:]]\([^ ]\+\).*/\1/")
|
||||||
|
+ echo "$nic netmask $netmask broadcast $brdcast metric $metric"
|
||||||
|
return $OCF_SUCCESS
|
||||||
|
}
|
||||||
|
|
||||||
|
From 488c096d63fe0f7e15938e65483ba20628080198 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||||
|
Date: Tue, 28 May 2024 09:47:11 +0200
|
||||||
|
Subject: [PATCH 2/3] IPaddr2: use metric for IPv6
|
||||||
|
|
||||||
|
---
|
||||||
|
heartbeat/IPaddr2 | 11 ++++++++---
|
||||||
|
1 file changed, 8 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/IPaddr2 b/heartbeat/IPaddr2
|
||||||
|
index 5f30b8f98..091bea418 100755
|
||||||
|
--- a/heartbeat/IPaddr2
|
||||||
|
+++ b/heartbeat/IPaddr2
|
||||||
|
@@ -561,10 +561,11 @@ ip_init() {
|
||||||
|
if
|
||||||
|
[ $rc -eq 0 ]
|
||||||
|
then
|
||||||
|
- NICINFO=`echo "$NICINFO" | sed -e 's/netmask\ //;s/broadcast\ //'`
|
||||||
|
+ NICINFO=`echo "$NICINFO" | sed -e 's/netmask\ //;s/broadcast\ //;s/metric\ //'`
|
||||||
|
NIC=`echo "$NICINFO" | cut -d" " -f1`
|
||||||
|
NETMASK=`echo "$NICINFO" | cut -d" " -f2`
|
||||||
|
BRDCAST=`echo "$NICINFO" | cut -d" " -f3`
|
||||||
|
+ METRIC=`echo "$NICINFO" | cut -d" " -f4`
|
||||||
|
else
|
||||||
|
# findif couldn't find the interface
|
||||||
|
if ocf_is_probe; then
|
||||||
|
@@ -659,13 +660,14 @@ delete_interface () {
|
||||||
|
# Add an interface
|
||||||
|
#
|
||||||
|
add_interface () {
|
||||||
|
- local cmd msg extra_opts ipaddr netmask broadcast iface label
|
||||||
|
+ local cmd msg extra_opts ipaddr netmask broadcast iface label metric
|
||||||
|
|
||||||
|
ipaddr="$1"
|
||||||
|
netmask="$2"
|
||||||
|
broadcast="$3"
|
||||||
|
iface="$4"
|
||||||
|
label="$5"
|
||||||
|
+ metric="$6"
|
||||||
|
|
||||||
|
if [ "$FAMILY" = "inet" ] && ocf_is_true $OCF_RESKEY_run_arping &&
|
||||||
|
check_binary arping; then
|
||||||
|
@@ -688,6 +690,9 @@ add_interface () {
|
||||||
|
fi
|
||||||
|
|
||||||
|
extra_opts=""
|
||||||
|
+ if [ "$FAMILY" = "inet6" ]; then
|
||||||
|
+ extra_opts="$extra_opts metric $metric"
|
||||||
|
+ fi
|
||||||
|
if [ "$FAMILY" = "inet6" ] && ocf_is_true "${OCF_RESKEY_nodad}"; then
|
||||||
|
extra_opts="$extra_opts nodad"
|
||||||
|
fi
|
||||||
|
@@ -1083,7 +1088,7 @@ ip_start() {
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
- add_interface $OCF_RESKEY_ip $NETMASK ${BRDCAST:-none} $NIC $IFLABEL
|
||||||
|
+ add_interface "$OCF_RESKEY_ip" "$NETMASK" "${BRDCAST:-none}" "$NIC" "$IFLABEL" "$METRIC"
|
||||||
|
rc=$?
|
||||||
|
|
||||||
|
if [ $rc -ne $OCF_SUCCESS ]; then
|
||||||
|
|
||||||
|
From d1c4d1969381d3e35cfaaaaae522e5687a9ed88a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||||
|
Date: Tue, 28 May 2024 09:47:56 +0200
|
||||||
|
Subject: [PATCH 3/3] IPsrcaddr: add IPv6 support
|
||||||
|
|
||||||
|
---
|
||||||
|
heartbeat/IPsrcaddr | 116 ++++++++++++++++++++++++++++++++------------
|
||||||
|
1 file changed, 85 insertions(+), 31 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr
|
||||||
|
index c732ce8df..1c87d5b7f 100755
|
||||||
|
--- a/heartbeat/IPsrcaddr
|
||||||
|
+++ b/heartbeat/IPsrcaddr
|
||||||
|
@@ -60,6 +60,7 @@ OCF_RESKEY_cidr_netmask_default=""
|
||||||
|
OCF_RESKEY_destination_default="0.0.0.0/0"
|
||||||
|
OCF_RESKEY_proto_default=""
|
||||||
|
OCF_RESKEY_metric_default=""
|
||||||
|
+OCF_RESKEY_pref_default=""
|
||||||
|
OCF_RESKEY_table_default=""
|
||||||
|
|
||||||
|
: ${OCF_RESKEY_ipaddress=${OCF_RESKEY_ipaddress_default}}
|
||||||
|
@@ -67,6 +68,7 @@ OCF_RESKEY_table_default=""
|
||||||
|
: ${OCF_RESKEY_destination=${OCF_RESKEY_destination_default}}
|
||||||
|
: ${OCF_RESKEY_proto=${OCF_RESKEY_proto_default}}
|
||||||
|
: ${OCF_RESKEY_metric=${OCF_RESKEY_metric_default}}
|
||||||
|
+: ${OCF_RESKEY_pref=${OCF_RESKEY_pref_default}}
|
||||||
|
: ${OCF_RESKEY_table=${OCF_RESKEY_table_default}}
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
|
@@ -75,10 +77,13 @@ OCF_RESKEY_table_default=""
|
||||||
|
|
||||||
|
USAGE="usage: $0 {start|stop|status|monitor|validate-all|meta-data}";
|
||||||
|
|
||||||
|
- CMDSHOW="$IP2UTIL route show $TABLE to exact $OCF_RESKEY_destination"
|
||||||
|
-CMDCHANGE="$IP2UTIL route change to "
|
||||||
|
+echo "$OCF_RESKEY_ipaddress" | grep -q ":" && FAMILY="inet6" || FAMILY="inet"
|
||||||
|
+[ "$FAMILY" = "inet6" ] && [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] && OCF_RESKEY_destination="::/0"
|
||||||
|
|
||||||
|
-if [ "$OCF_RESKEY_destination" != "0.0.0.0/0" ]; then
|
||||||
|
+ CMDSHOW="$IP2UTIL -f $FAMILY route show $TABLE to exact $OCF_RESKEY_destination"
|
||||||
|
+CMDCHANGE="$IP2UTIL -f $FAMILY route change to "
|
||||||
|
+
|
||||||
|
+if [ "$OCF_RESKEY_destination" != "0.0.0.0/0" ] && [ "$OCF_RESKEY_destination" != "::/0" ]; then
|
||||||
|
CMDSHOW="$CMDSHOW src $OCF_RESKEY_ipaddress"
|
||||||
|
fi
|
||||||
|
|
||||||
|
@@ -153,6 +158,14 @@ Metric. Only needed if incorrect metric value is used.
|
||||||
|
<content type="string" default="${OCF_RESKEY_metric_default}" />
|
||||||
|
</parameter>
|
||||||
|
|
||||||
|
+<parameter name="pref">
|
||||||
|
+<longdesc lang="en">
|
||||||
|
+IPv6 route preference (low, medium or high). Only needed if incorrect pref value is used.
|
||||||
|
+</longdesc>
|
||||||
|
+<shortdesc lang="en">IPv6 route preference.</shortdesc>
|
||||||
|
+<content type="string" default="${OCF_RESKEY_pref_default}" />
|
||||||
|
+</parameter>
|
||||||
|
+
|
||||||
|
<parameter name="table">
|
||||||
|
<longdesc lang="en">
|
||||||
|
Table to modify and use for interface lookup. E.g. "local".
|
||||||
|
@@ -196,12 +209,21 @@ errorexit() {
|
||||||
|
# where the src clause "src Y.Y.Y.Y" may or may not be present
|
||||||
|
|
||||||
|
WS="[[:blank:]]"
|
||||||
|
-OCTET="[0-9]\{1,3\}"
|
||||||
|
-IPADDR="\($OCTET\.\)\{3\}$OCTET"
|
||||||
|
+case "$FAMILY" in
|
||||||
|
+ inet)
|
||||||
|
+ GROUP="[0-9]\{1,3\}"
|
||||||
|
+ IPADDR="\($GROUP\.\)\{3\}$GROUP"
|
||||||
|
+ ;;
|
||||||
|
+ inet6)
|
||||||
|
+ GROUP="[0-9a-f]\{0,4\}"
|
||||||
|
+ IPADDR="\($GROUP\:\)\{0,\}$GROUP"
|
||||||
|
+ ;;
|
||||||
|
+esac
|
||||||
|
SRCCLAUSE="src$WS$WS*\($IPADDR\)"
|
||||||
|
-MATCHROUTE="\(.*${WS}\)\($SRCCLAUSE\)\($WS.*\|$\)"
|
||||||
|
-METRICCLAUSE=".*\(metric$WS[^ ]\+\)"
|
||||||
|
+MATCHROUTE="\(.*${WS}\)proto [^ ]\+\(.*${WS}\)\($SRCCLAUSE\)\($WS.*\|$\)"
|
||||||
|
+METRICCLAUSE=".*\(metric$WS[^ ]\+\).*"
|
||||||
|
PROTOCLAUSE=".*\(proto$WS[^ ]\+\).*"
|
||||||
|
+PREFCLAUSE=".*\(pref$WS[^ ]\+\).*"
|
||||||
|
FINDIF=findif
|
||||||
|
|
||||||
|
# findif needs that to be set
|
||||||
|
@@ -216,17 +238,17 @@ srca_read() {
|
||||||
|
errorexit "more than 1 matching route exists"
|
||||||
|
|
||||||
|
# But there might still be no matching route
|
||||||
|
- [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] && [ -z "$ROUTE" ] && \
|
||||||
|
+ ([ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] || [ "$OCF_RESKEY_destination" = "::/0" ]) && [ -z "$ROUTE" ] && \
|
||||||
|
! 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"`
|
||||||
|
+ SRCIP=`echo $ROUTE | sed -n "s/$MATCHROUTE/\4/p"`
|
||||||
|
|
||||||
|
# and what remains after stripping out the source ip address clause
|
||||||
|
- ROUTE_WO_SRC=`echo $ROUTE | sed "s/$MATCHROUTE/\1\5/"`
|
||||||
|
+ ROUTE_WO_SRC=`echo $ROUTE | sed "s/$MATCHROUTE/\1\2\6/"`
|
||||||
|
|
||||||
|
# using "src <ip>" only returns output if there's a match
|
||||||
|
- if [ "$OCF_RESKEY_destination" != "0.0.0.0/0" ]; then
|
||||||
|
+ if [ "$OCF_RESKEY_destination" != "0.0.0.0/0" ] && [ "$OCF_RESKEY_destination" != "::/0" ]; then
|
||||||
|
[ -z "$ROUTE" ] && return 1 || return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
@@ -249,12 +271,15 @@ 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 $PROTO src $1 $METRIC || \
|
||||||
|
- errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE $PROTO src $1 $METRIC' failed"
|
||||||
|
+ # NetworkManager manages routes with proto static/kernel
|
||||||
|
+ [ -z "$OCF_RESKEY_proto" ] && echo "$PROTO" | grep -q "proto \(kernel\|static\)" && PROTO="proto keepalived"
|
||||||
|
|
||||||
|
- if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then
|
||||||
|
- $CMDCHANGE $ROUTE_WO_SRC src $1 || \
|
||||||
|
- errorexit "command '$CMDCHANGE $ROUTE_WO_SRC src $1' failed"
|
||||||
|
+ $IP2UTIL route replace $TABLE $NETWORK dev $INTERFACE $PROTO src $1 $METRIC $PREF || \
|
||||||
|
+ errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE $PROTO src $1 $METRIC $PREF' failed"
|
||||||
|
+
|
||||||
|
+ if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] || [ "$OCF_RESKEY_destination" = "::/0" ]; then
|
||||||
|
+ $CMDCHANGE $ROUTE_WO_SRC $PROTO src $1 || \
|
||||||
|
+ errorexit "command '$CMDCHANGE $ROUTE_WO_SRC $PROTO src $1' failed"
|
||||||
|
fi
|
||||||
|
rc=$?
|
||||||
|
fi
|
||||||
|
@@ -290,14 +315,15 @@ srca_stop() {
|
||||||
|
fi
|
||||||
|
|
||||||
|
PRIMARY_IP="$($IP2UTIL -4 -o addr show dev $INTERFACE primary | awk '{split($4,a,"/");print a[1]}')"
|
||||||
|
- OPTS="proto kernel scope $SCOPE src $PRIMARY_IP"
|
||||||
|
+ OPTS="proto kernel scope $SCOPE"
|
||||||
|
+ [ "$FAMILY" = "inet" ] && OPTS="$OPTS src $PRIMARY_IP"
|
||||||
|
|
||||||
|
- $IP2UTIL route replace $TABLE $NETWORK dev $INTERFACE $OPTS $METRIC || \
|
||||||
|
- errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE $OPTS $METRIC' failed"
|
||||||
|
+ $IP2UTIL route replace $TABLE $NETWORK dev $INTERFACE $OPTS $METRIC $PREF || \
|
||||||
|
+ errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE $OPTS $METRIC $PREF' failed"
|
||||||
|
|
||||||
|
- if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then
|
||||||
|
- $CMDCHANGE $ROUTE_WO_SRC src $PRIMARY_IP || \
|
||||||
|
- errorexit "command '$CMDCHANGE $ROUTE_WO_SRC src $PRIMARY_IP' failed"
|
||||||
|
+ if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] || [ "$OCF_RESKEY_destination" = "::/0" ]; then
|
||||||
|
+ $CMDCHANGE $ROUTE_WO_SRC proto static || \
|
||||||
|
+ errorexit "command '$CMDCHANGE $ROUTE_WO_SRC proto static' failed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $?
|
||||||
|
@@ -330,7 +356,7 @@ CheckIP() {
|
||||||
|
case $ip in
|
||||||
|
*[!0-9.]*) #got invalid char
|
||||||
|
false;;
|
||||||
|
- .*|*.) #begin or end by ".", which is invalid
|
||||||
|
+ .*|*.) #begin or end with ".", which is invalid
|
||||||
|
false;;
|
||||||
|
*..*) #consecutive ".", which is invalid
|
||||||
|
false;;
|
||||||
|
@@ -356,6 +382,18 @@ CheckIP() {
|
||||||
|
return $? # This return is unnecessary, this comment too :)
|
||||||
|
}
|
||||||
|
|
||||||
|
+CheckIP6() {
|
||||||
|
+ ip="$1"
|
||||||
|
+ case $ip in
|
||||||
|
+ *[!0-9a-f:]*) #got invalid char
|
||||||
|
+ false;;
|
||||||
|
+ *:::*) # more than 2 consecutive ":", which is invalid
|
||||||
|
+ false;;
|
||||||
|
+ *::*::*) # more than 1 "::", which is invalid
|
||||||
|
+ false;;
|
||||||
|
+ esac
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
#
|
||||||
|
# Find out which interface or alias serves the given IP address
|
||||||
|
# The argument is an IP address, and its output
|
||||||
|
@@ -396,8 +434,7 @@ find_interface_solaris() {
|
||||||
|
# is an (aliased) interface name (e.g., "eth0" and "eth0:0").
|
||||||
|
#
|
||||||
|
find_interface_generic() {
|
||||||
|
-
|
||||||
|
- local iface=`$IP2UTIL -o -f inet addr show | grep "\ $BASEIP" \
|
||||||
|
+ local iface=`$IP2UTIL -o -f $FAMILY addr show | grep "\ $BASEIP" \
|
||||||
|
| cut -d ' ' -f2 | grep -v '^ipsec[0-9][0-9]*$'`
|
||||||
|
if [ -z "$iface" ]; then
|
||||||
|
return $OCF_ERR_GENERIC
|
||||||
|
@@ -502,7 +539,9 @@ srca_validate_all() {
|
||||||
|
|
||||||
|
# The IP address should be in good shape
|
||||||
|
if CheckIP "$ipaddress"; then
|
||||||
|
- :
|
||||||
|
+ :
|
||||||
|
+ elif CheckIP6 "$ipaddress"; then
|
||||||
|
+ :
|
||||||
|
else
|
||||||
|
ocf_exit_reason "Invalid IP address [$ipaddress]"
|
||||||
|
return $OCF_ERR_CONFIGURED
|
||||||
|
@@ -570,21 +609,36 @@ rc=$?
|
||||||
|
}
|
||||||
|
|
||||||
|
INTERFACE=`echo $findif_out | awk '{print $1}'`
|
||||||
|
-LISTROUTE=`$IP2UTIL route list dev $INTERFACE scope link $PROTO match $ipaddress`
|
||||||
|
+case "$FAMILY" in
|
||||||
|
+ inet)
|
||||||
|
+ LISTCMD="$IP2UTIL -f $FAMILY route list dev $INTERFACE scope link $PROTO match $ipaddress"
|
||||||
|
+ ;;
|
||||||
|
+ inet6)
|
||||||
|
+ LISTCMD="$IP2UTIL -f $FAMILY route list dev $INTERFACE $PROTO match $ipaddress"
|
||||||
|
+ ;;
|
||||||
|
+esac
|
||||||
|
+LISTROUTE=`$LISTCMD`
|
||||||
|
+
|
||||||
|
[ -z "$PROTO" ] && PROTO=`echo $LISTROUTE | sed -n "s/$PROTOCLAUSE/\1/p"`
|
||||||
|
if [ -n "$OCF_RESKEY_metric" ]; then
|
||||||
|
METRIC="metric $OCF_RESKEY_metric"
|
||||||
|
-elif [ -z "$TABLE" ] || [ "${TABLE#table }" = "main" ]; then
|
||||||
|
+elif [ -z "$TABLE" ] || [ "${TABLE#table }" = "main" ] || [ "$FAMILY" = "inet6" ]; then
|
||||||
|
METRIC=`echo $LISTROUTE | sed -n "s/$METRICCLAUSE/\1/p"`
|
||||||
|
else
|
||||||
|
METRIC=""
|
||||||
|
fi
|
||||||
|
-if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] ;then
|
||||||
|
+if [ "$FAMILY" = "inet6" ]; then
|
||||||
|
+ if [ -z "$OCF_RESKEY_pref" ]; then
|
||||||
|
+ PREF=`echo $LISTROUTE | sed -n "s/$PREFCLAUSE/\1/p"`
|
||||||
|
+ else
|
||||||
|
+ PREF="pref $OCF_RESKEY_pref"
|
||||||
|
+ fi
|
||||||
|
+fi
|
||||||
|
+if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] || [ "$OCF_RESKEY_destination" = "::/0" ] ;then
|
||||||
|
NETWORK=`echo $LISTROUTE | 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"
|
||||||
|
+ err_str="command '$LISTCMD' failed to find a matching route"
|
||||||
|
|
||||||
|
if [ "$__OCF_ACTION" = "start" ]; then
|
||||||
|
ocf_exit_reason "$err_str"
|
@ -0,0 +1,22 @@
|
|||||||
|
From 4075aff88776e2811ebc83b735b2a70bcf46247f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||||
|
Date: Mon, 24 Jun 2024 09:45:29 +0200
|
||||||
|
Subject: [PATCH] IPaddr2: only set metric value for IPv6 when detected
|
||||||
|
|
||||||
|
---
|
||||||
|
heartbeat/IPaddr2 | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/IPaddr2 b/heartbeat/IPaddr2
|
||||||
|
index 091bea418..3bc5abec1 100755
|
||||||
|
--- a/heartbeat/IPaddr2
|
||||||
|
+++ b/heartbeat/IPaddr2
|
||||||
|
@@ -690,7 +690,7 @@ add_interface () {
|
||||||
|
fi
|
||||||
|
|
||||||
|
extra_opts=""
|
||||||
|
- if [ "$FAMILY" = "inet6" ]; then
|
||||||
|
+ if [ "$FAMILY" = "inet6" ] && [ -n "$metric" ]; then
|
||||||
|
extra_opts="$extra_opts metric $metric"
|
||||||
|
fi
|
||||||
|
if [ "$FAMILY" = "inet6" ] && ocf_is_true "${OCF_RESKEY_nodad}"; then
|
@ -0,0 +1,25 @@
|
|||||||
|
From f561e272e9b7fe94ba598b70c6d2f44d034446ed Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||||
|
Date: Wed, 14 Aug 2024 12:05:54 +0200
|
||||||
|
Subject: [PATCH] findif.sh: ignore unreachable, blackhole, and prohibit routes
|
||||||
|
|
||||||
|
---
|
||||||
|
heartbeat/findif.sh | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/findif.sh b/heartbeat/findif.sh
|
||||||
|
index ca5d1a5c1..7b817f75c 100644
|
||||||
|
--- a/heartbeat/findif.sh
|
||||||
|
+++ b/heartbeat/findif.sh
|
||||||
|
@@ -218,9 +218,9 @@ findif()
|
||||||
|
fi
|
||||||
|
if [ -n "$nic" ] ; then
|
||||||
|
# NIC supports more than two.
|
||||||
|
- routematch=$(ip -o -f $family route list match $match $proto $scope | grep "dev $nic " | sed -e 's,^\([0-9.]\+\) ,\1/32 ,;s,^\([0-9a-f:]\+\) ,\1/128 ,' | sort -t/ -k2,2nr)
|
||||||
|
+ routematch=$(ip -o -f $family route list match $match $proto $scope | grep -v "^\(unreachable\|prohibit\|blackhole\)" | grep "dev $nic " | sed -e 's,^\([0-9.]\+\) ,\1/32 ,;s,^\([0-9a-f:]\+\) ,\1/128 ,' | sort -t/ -k2,2nr)
|
||||||
|
else
|
||||||
|
- routematch=$(ip -o -f $family route list match $match $proto $scope | sed -e 's,^\([0-9.]\+\) ,\1/32 ,;s,^\([0-9a-f:]\+\) ,\1/128 ,' | sort -t/ -k2,2nr)
|
||||||
|
+ routematch=$(ip -o -f $family route list match $match $proto $scope | grep -v "^\(unreachable\|prohibit\|blackhole\)" | sed -e 's,^\([0-9.]\+\) ,\1/32 ,;s,^\([0-9a-f:]\+\) ,\1/128 ,' | sort -t/ -k2,2nr)
|
||||||
|
fi
|
||||||
|
if [ "$family" = "inet6" ]; then
|
||||||
|
routematch=$(echo "$routematch" | grep -v "^default")
|
@ -0,0 +1,36 @@
|
|||||||
|
From f23ae9c1e9ff9a44a053c7c2378975ac5b807478 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||||
|
Date: Thu, 29 Aug 2024 16:24:02 +0200
|
||||||
|
Subject: [PATCH] IPsrcaddr: specify dev for default route, as e.g. fe80::
|
||||||
|
routes can be present on multiple interfaces
|
||||||
|
|
||||||
|
---
|
||||||
|
heartbeat/IPsrcaddr | 8 ++++----
|
||||||
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/IPsrcaddr b/heartbeat/IPsrcaddr
|
||||||
|
index 1c87d5b7f..58d89a280 100755
|
||||||
|
--- a/heartbeat/IPsrcaddr
|
||||||
|
+++ b/heartbeat/IPsrcaddr
|
||||||
|
@@ -278,8 +278,8 @@ srca_start() {
|
||||||
|
errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE $PROTO src $1 $METRIC $PREF' failed"
|
||||||
|
|
||||||
|
if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] || [ "$OCF_RESKEY_destination" = "::/0" ]; then
|
||||||
|
- $CMDCHANGE $ROUTE_WO_SRC $PROTO src $1 || \
|
||||||
|
- errorexit "command '$CMDCHANGE $ROUTE_WO_SRC $PROTO src $1' failed"
|
||||||
|
+ $CMDCHANGE $ROUTE_WO_SRC dev $INTERFACE $PROTO src $1 || \
|
||||||
|
+ errorexit "command '$CMDCHANGE $ROUTE_WO_SRC dev $INTERFACE $PROTO src $1' failed"
|
||||||
|
fi
|
||||||
|
rc=$?
|
||||||
|
fi
|
||||||
|
@@ -322,8 +322,8 @@ srca_stop() {
|
||||||
|
errorexit "command 'ip route replace $TABLE $NETWORK dev $INTERFACE $OPTS $METRIC $PREF' failed"
|
||||||
|
|
||||||
|
if [ "$OCF_RESKEY_destination" = "0.0.0.0/0" ] || [ "$OCF_RESKEY_destination" = "::/0" ]; then
|
||||||
|
- $CMDCHANGE $ROUTE_WO_SRC proto static || \
|
||||||
|
- errorexit "command '$CMDCHANGE $ROUTE_WO_SRC proto static' failed"
|
||||||
|
+ $CMDCHANGE $ROUTE_WO_SRC dev $INTERFACE proto static || \
|
||||||
|
+ errorexit "command '$CMDCHANGE $ROUTE_WO_SRC dev $INTERFACE proto static' failed"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $?
|
23
SOURCES/RHEL-32829-db2-fix-OCF_SUCESS-typo.patch
Normal file
23
SOURCES/RHEL-32829-db2-fix-OCF_SUCESS-typo.patch
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
From a9c4aeb971e9f4963345d0e215b729def62dd27c Mon Sep 17 00:00:00 2001
|
||||||
|
From: pepadelic <162310096+pepadelic@users.noreply.github.com>
|
||||||
|
Date: Mon, 15 Apr 2024 13:52:54 +0200
|
||||||
|
Subject: [PATCH] Update db2: fix OCF_SUCESS name in db2_notify
|
||||||
|
|
||||||
|
fix OCF_SUCESS to OCF_SUCCESS in db2_notify
|
||||||
|
---
|
||||||
|
heartbeat/db2 | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/db2 b/heartbeat/db2
|
||||||
|
index 95447ab6cb..1cd66f15af 100755
|
||||||
|
--- a/heartbeat/db2
|
||||||
|
+++ b/heartbeat/db2
|
||||||
|
@@ -848,7 +848,7 @@ db2_notify() {
|
||||||
|
|
||||||
|
# only interested in pre-start
|
||||||
|
[ $OCF_RESKEY_CRM_meta_notify_type = pre \
|
||||||
|
- -a $OCF_RESKEY_CRM_meta_notify_operation = start ] || return $OCF_SUCESS
|
||||||
|
+ -a $OCF_RESKEY_CRM_meta_notify_operation = start ] || return $OCF_SUCCESS
|
||||||
|
|
||||||
|
# gets FIRST_ACTIVE_LOG
|
||||||
|
db2_get_cfg $dblist || return $?
|
@ -0,0 +1,110 @@
|
|||||||
|
From 66a5308d2e8f61093716a076f4386416dc18045c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||||
|
Date: Mon, 22 Apr 2024 11:26:09 +0200
|
||||||
|
Subject: [PATCH] Filesystem: fail when incorrect device mounted on mountpoint,
|
||||||
|
and dont unmount the mountpoint in this case, or if mountpoint set to "/"
|
||||||
|
|
||||||
|
---
|
||||||
|
heartbeat/Filesystem | 71 ++++++++++++++++++++++++++++++++++++--------
|
||||||
|
1 file changed, 58 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/Filesystem b/heartbeat/Filesystem
|
||||||
|
index e1378f781..cec71f1a6 100755
|
||||||
|
--- a/heartbeat/Filesystem
|
||||||
|
+++ b/heartbeat/Filesystem
|
||||||
|
@@ -582,10 +582,16 @@ Filesystem_start()
|
||||||
|
fi
|
||||||
|
|
||||||
|
# See if the device is already mounted.
|
||||||
|
- if Filesystem_status >/dev/null 2>&1 ; then
|
||||||
|
- ocf_log info "Filesystem $MOUNTPOINT is already mounted."
|
||||||
|
- return $OCF_SUCCESS
|
||||||
|
- fi
|
||||||
|
+ Filesystem_status
|
||||||
|
+ case "$?" in
|
||||||
|
+ $OCF_SUCCESS)
|
||||||
|
+ ocf_log info "Filesystem $MOUNTPOINT is already mounted."
|
||||||
|
+ return $OCF_SUCCESS
|
||||||
|
+ ;;
|
||||||
|
+ $OCF_ERR_CONFIGURED)
|
||||||
|
+ return $OCF_ERR_CONFIGURED
|
||||||
|
+ ;;
|
||||||
|
+ esac
|
||||||
|
|
||||||
|
fstype_supported || exit $OCF_ERR_INSTALLED
|
||||||
|
|
||||||
|
@@ -801,10 +807,42 @@ Filesystem_stop()
|
||||||
|
#
|
||||||
|
Filesystem_status()
|
||||||
|
{
|
||||||
|
- match_string="${TAB}${CANONICALIZED_MOUNTPOINT}${TAB}"
|
||||||
|
- if list_mounts | grep "$match_string" >/dev/null 2>&1; then
|
||||||
|
- rc=$OCF_SUCCESS
|
||||||
|
- msg="$MOUNTPOINT is mounted (running)"
|
||||||
|
+ local match_string="${TAB}${CANONICALIZED_MOUNTPOINT}${TAB}"
|
||||||
|
+ local mounted_device=$(list_mounts | grep "$match_string" | awk '{print $1}')
|
||||||
|
+
|
||||||
|
+ if [ -n "$mounted_device" ]; then
|
||||||
|
+ if [ "X$blockdevice" = "Xyes" ]; then
|
||||||
|
+ if [ -e "$DEVICE" ] ; then
|
||||||
|
+ local canonicalized_device="$(readlink -f "$DEVICE")"
|
||||||
|
+ if [ $? -ne 0 ]; then
|
||||||
|
+ ocf_exit_reason "Could not canonicalize $DEVICE because readlink failed"
|
||||||
|
+ exit $OCF_ERR_GENERIC
|
||||||
|
+ fi
|
||||||
|
+ else
|
||||||
|
+ local canonicalized_device="$DEVICE"
|
||||||
|
+ fi
|
||||||
|
+ if [ -e "$mounted_device" ] ; then
|
||||||
|
+ local canonicalized_mounted_device="$(readlink -f "$mounted_device")"
|
||||||
|
+ if [ $? -ne 0 ]; then
|
||||||
|
+ ocf_exit_reason "Could not canonicalize $mounted_device because readlink failed"
|
||||||
|
+ exit $OCF_ERR_GENERIC
|
||||||
|
+ fi
|
||||||
|
+ else
|
||||||
|
+ local canonicalized_mounted_device="$mounted_device"
|
||||||
|
+ fi
|
||||||
|
+ if [ "$canonicalized_device" != "$canonicalized_mounted_device" ]; then
|
||||||
|
+ if ocf_is_probe || [ "$__OCF_ACTION" = "stop" ]; then
|
||||||
|
+ ocf_log debug "Another device ($mounted_device) is already mounted on $MOUNTPOINT"
|
||||||
|
+ rc=$OCF_NOT_RUNNING
|
||||||
|
+ else
|
||||||
|
+ ocf_exit_reason "Another device ($mounted_device) is already mounted on $MOUNTPOINT"
|
||||||
|
+ rc=$OCF_ERR_CONFIGURED
|
||||||
|
+ fi
|
||||||
|
+ fi
|
||||||
|
+ else
|
||||||
|
+ rc=$OCF_SUCCESS
|
||||||
|
+ msg="$MOUNTPOINT is mounted (running)"
|
||||||
|
+ fi
|
||||||
|
else
|
||||||
|
rc=$OCF_NOT_RUNNING
|
||||||
|
msg="$MOUNTPOINT is unmounted (stopped)"
|
||||||
|
@@ -1041,9 +1079,18 @@ else
|
||||||
|
else
|
||||||
|
CANONICALIZED_MOUNTPOINT="$MOUNTPOINT"
|
||||||
|
fi
|
||||||
|
- # At this stage, $MOUNTPOINT does not contain trailing "/" unless it is "/"
|
||||||
|
- # TODO: / mounted via Filesystem sounds dangerous. On stop, we'll
|
||||||
|
- # kill the whole system. Is that a good idea?
|
||||||
|
+
|
||||||
|
+ if echo "$CANONICALIZED_MOUNTPOINT" | grep -q "^\s*/\s*$"; then
|
||||||
|
+ if ocf_is_probe; then
|
||||||
|
+ ocf_log debug "/ cannot be managed in a cluster"
|
||||||
|
+ exit $OCF_NOT_RUNNING
|
||||||
|
+ elif [ "$__OCF_ACTION" = "start" ] || [ "$__OCF_ACTION" = "monitor" ] || [ "$__OCF_ACTION" = "status" ]; then
|
||||||
|
+ ocf_exit_reason "/ cannot be managed in a cluster"
|
||||||
|
+ exit $OCF_ERR_CONFIGURED
|
||||||
|
+ elif [ "$__OCF_ACTION" = "stop" ]; then
|
||||||
|
+ exit $OCF_SUCCESS
|
||||||
|
+ fi
|
||||||
|
+ fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check to make sure the utilites are found
|
||||||
|
@@ -1124,5 +1171,3 @@ case $OP in
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
exit $?
|
||||||
|
-
|
||||||
|
-
|
@ -0,0 +1,22 @@
|
|||||||
|
From 4b09b3e467a7f8076bbf20f5b027efecf16303e7 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Gianluca Piccolo <gianluca.piccolo@wuerth-phoenix.com>
|
||||||
|
Date: Thu, 6 Jun 2024 17:34:41 +0200
|
||||||
|
Subject: [PATCH] Fix #1944
|
||||||
|
|
||||||
|
---
|
||||||
|
heartbeat/Filesystem | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/Filesystem b/heartbeat/Filesystem
|
||||||
|
index a445349b9..59b6c1b51 100755
|
||||||
|
--- a/heartbeat/Filesystem
|
||||||
|
+++ b/heartbeat/Filesystem
|
||||||
|
@@ -664,7 +664,7 @@ get_pids()
|
||||||
|
if [ "X${HOSTOS}" = "XOpenBSD" ];then
|
||||||
|
fstat | grep $dir | awk '{print $3}'
|
||||||
|
else
|
||||||
|
- $FUSER -m $dir 2>/dev/null
|
||||||
|
+ $FUSER -Mm $dir 2>/dev/null
|
||||||
|
fi
|
||||||
|
elif [ "$FORCE_UNMOUNT" = "safe" ]; then
|
||||||
|
procs=$(find /proc/[0-9]*/ -type l -lname "${dir}/*" -or -lname "${dir}" 2>/dev/null | awk -F/ '{print $3}')
|
26
SOURCES/RHEL-40393-Filesystem-2-update-bsd-logic.patch
Normal file
26
SOURCES/RHEL-40393-Filesystem-2-update-bsd-logic.patch
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
From c9ba6ac66ee27a70c69e1156f17aa6beac277bc5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||||
|
Date: Fri, 7 Jun 2024 14:23:28 +0200
|
||||||
|
Subject: [PATCH] Filesystem: use fuser -c on FreeBSD, as -m and -M are used
|
||||||
|
for other functionality
|
||||||
|
|
||||||
|
---
|
||||||
|
heartbeat/Filesystem | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/Filesystem b/heartbeat/Filesystem
|
||||||
|
index 59b6c1b51..88fe2e2eb 100755
|
||||||
|
--- a/heartbeat/Filesystem
|
||||||
|
+++ b/heartbeat/Filesystem
|
||||||
|
@@ -661,8 +661,10 @@ get_pids()
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ocf_is_true "$FORCE_UNMOUNT"; then
|
||||||
|
- if [ "X${HOSTOS}" = "XOpenBSD" ];then
|
||||||
|
+ if [ "X${HOSTOS}" = "XOpenBSD" ]; then
|
||||||
|
fstat | grep $dir | awk '{print $3}'
|
||||||
|
+ elif [ "X${HOSTOS}" = "XFreeBSD" ]; then
|
||||||
|
+ $FUSER -c $dir 2>/dev/null
|
||||||
|
else
|
||||||
|
$FUSER -Mm $dir 2>/dev/null
|
||||||
|
fi
|
@ -0,0 +1,61 @@
|
|||||||
|
From 481672f73d05666ab20a883cf8fc746cb1f3050f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Oyvind Albrigtsen <oalbrigt@redhat.com>
|
||||||
|
Date: Thu, 20 Jun 2024 09:29:21 +0200
|
||||||
|
Subject: [PATCH] galera/mariadb/mysql/redis: remove Unpromoted monitor-action,
|
||||||
|
as it's covered by the regular monitor-action
|
||||||
|
|
||||||
|
---
|
||||||
|
heartbeat/galera.in | 1 -
|
||||||
|
heartbeat/mariadb.in | 1 -
|
||||||
|
heartbeat/mysql | 1 -
|
||||||
|
heartbeat/redis.in | 1 -
|
||||||
|
4 files changed, 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/heartbeat/galera.in b/heartbeat/galera.in
|
||||||
|
index b518595cb0..b29d68bf73 100755
|
||||||
|
--- a/heartbeat/galera.in
|
||||||
|
+++ b/heartbeat/galera.in
|
||||||
|
@@ -299,7 +299,6 @@ Use it with caution! (and fencing)
|
||||||
|
<action name="status" timeout="60s" />
|
||||||
|
<action name="monitor" depth="0" timeout="30s" interval="20s" />
|
||||||
|
<action name="monitor" role="Promoted" depth="0" timeout="30s" interval="10s" />
|
||||||
|
-<action name="monitor" role="Unpromoted" depth="0" timeout="30s" interval="30s" />
|
||||||
|
<action name="promote" timeout="300s" />
|
||||||
|
<action name="demote" timeout="120s" />
|
||||||
|
<action name="validate-all" timeout="5s" />
|
||||||
|
diff --git a/heartbeat/mariadb.in b/heartbeat/mariadb.in
|
||||||
|
index e0f1f3c9f1..1dca98ba68 100644
|
||||||
|
--- a/heartbeat/mariadb.in
|
||||||
|
+++ b/heartbeat/mariadb.in
|
||||||
|
@@ -255,7 +255,6 @@ The port on which the Promoted MariaDB instance is listening.
|
||||||
|
<action name="status" timeout="60s" />
|
||||||
|
<action name="monitor" depth="0" timeout="30s" interval="20s" />
|
||||||
|
<action name="monitor" role="Promoted" depth="0" timeout="30s" interval="10s" />
|
||||||
|
-<action name="monitor" role="Unpromoted" depth="0" timeout="30s" interval="30s" />
|
||||||
|
<action name="promote" timeout="120s" />
|
||||||
|
<action name="demote" timeout="120s" />
|
||||||
|
<action name="notify" timeout="90s" />
|
||||||
|
diff --git a/heartbeat/mysql b/heartbeat/mysql
|
||||||
|
index 1df2fc0f28..6b00889ff4 100755
|
||||||
|
--- a/heartbeat/mysql
|
||||||
|
+++ b/heartbeat/mysql
|
||||||
|
@@ -322,7 +322,6 @@ whether a node is usable for clients to read from.</shortdesc>
|
||||||
|
<action name="status" timeout="60s" />
|
||||||
|
<action name="monitor" depth="0" timeout="30s" interval="20s" />
|
||||||
|
<action name="monitor" role="Promoted" depth="0" timeout="30s" interval="10s" />
|
||||||
|
-<action name="monitor" role="Unpromoted" depth="0" timeout="30s" interval="30s" />
|
||||||
|
<action name="promote" timeout="120s" />
|
||||||
|
<action name="demote" timeout="120s" />
|
||||||
|
<action name="notify" timeout="90s" />
|
||||||
|
diff --git a/heartbeat/redis.in b/heartbeat/redis.in
|
||||||
|
index 6429477e11..1e541f13d5 100755
|
||||||
|
--- a/heartbeat/redis.in
|
||||||
|
+++ b/heartbeat/redis.in
|
||||||
|
@@ -221,7 +221,6 @@ is in use.
|
||||||
|
<action name="status" timeout="60s" />
|
||||||
|
<action name="monitor" depth="0" timeout="60s" interval="45s" />
|
||||||
|
<action name="monitor" role="Promoted" depth="0" timeout="60s" interval="20s" />
|
||||||
|
-<action name="monitor" role="Unpromoted" depth="0" timeout="60s" interval="60s" />
|
||||||
|
<action name="promote" timeout="120s" />
|
||||||
|
<action name="demote" timeout="120s" />
|
||||||
|
<action name="notify" timeout="90s" />
|
@ -6,7 +6,7 @@ diff --color -uNr a/heartbeat/aliyun-vpc-move-ip b/heartbeat/aliyun-vpc-move-ip
|
|||||||
OCF_RESKEY_profile_default="default"
|
OCF_RESKEY_profile_default="default"
|
||||||
OCF_RESKEY_endpoint_default="vpc.aliyuncs.com"
|
OCF_RESKEY_endpoint_default="vpc.aliyuncs.com"
|
||||||
-OCF_RESKEY_aliyuncli_default="detect"
|
-OCF_RESKEY_aliyuncli_default="detect"
|
||||||
+OCF_RESKEY_aliyuncli_default="/usr/lib/fence-agents/support/aliyun/bin/aliyuncli"
|
+OCF_RESKEY_aliyuncli_default="/usr/lib/fence-agents/support/aliyun/aliyun-cli/aliyun"
|
||||||
|
|
||||||
|
|
||||||
: ${OCF_RESKEY_address=${OCF_RESKEY_address_default}}
|
: ${OCF_RESKEY_address=${OCF_RESKEY_address_default}}
|
||||||
|
@ -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: 52%{?rcver:%{rcver}}%{?numcomm:.%{numcomm}}%{?alphatag:.%{alphatag}}%{?dirty:.%{dirty}}%{?dist}
|
Release: 64%{?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
|
||||||
@ -119,6 +119,21 @@ Patch66: RHEL-16247-aws-vpc-move-ip-aws-vpc-route53-awseip-awsvip-auth_type-role
|
|||||||
Patch67: RHEL-17072-1-storage_mon-findif-leak-unitialized-values-EOS-fixes.patch
|
Patch67: RHEL-17072-1-storage_mon-findif-leak-unitialized-values-EOS-fixes.patch
|
||||||
Patch68: RHEL-17072-2-storage_mon-use-memset-to-fix-covscan-error.patch
|
Patch68: RHEL-17072-2-storage_mon-use-memset-to-fix-covscan-error.patch
|
||||||
Patch69: RHEL-15304-2-findif.sh-dont-use-table-parameter.patch
|
Patch69: RHEL-15304-2-findif.sh-dont-use-table-parameter.patch
|
||||||
|
Patch70: RHEL-31763-galera-fix-joiner-promotion-fails-issue.patch
|
||||||
|
Patch71: RHEL-16246-aws-agents-use-curl_retry.patch
|
||||||
|
Patch72: RHEL-34777-Filesystem-fail-when-incorrect-device-mounted.patch
|
||||||
|
Patch73: RHEL-24683-1-Filesystem-fail-leading-trailing-whitespace.patch
|
||||||
|
Patch74: RHEL-24683-2-Filesystem-return-success-stop-action.patch
|
||||||
|
Patch75: RHEL-32265-1-findif.sh-fix-corner-cases.patch
|
||||||
|
Patch76: RHEL-32265-2-IPsrcaddr-add-IPv6-support.patch
|
||||||
|
Patch77: RHEL-32265-3-IPaddr2-only-set-metric-value-for-IPv6-when-detected.patch
|
||||||
|
Patch78: RHEL-32265-4-findif.sh-ignore-unreachable-blackhole-prohibit-routes.patch
|
||||||
|
Patch79: RHEL-32265-5-IPsrcaddr-specify-dev-for-default-route.patch
|
||||||
|
Patch80: RHEL-40393-Filesystem-1-dont-kill-unrelated-processes.patch
|
||||||
|
Patch81: RHEL-40393-Filesystem-2-update-bsd-logic.patch
|
||||||
|
Patch82: RHEL-32829-db2-fix-OCF_SUCESS-typo.patch
|
||||||
|
Patch83: RHEL-43579-galera-mysql-redis-remove-Unpromoted-monitor-action.patch
|
||||||
|
Patch84: RHEL-22715-LVM-activate-fix-false-positive.patch
|
||||||
|
|
||||||
# bundled ha-cloud-support libs
|
# bundled ha-cloud-support libs
|
||||||
Patch500: ha-cloud-support-aws.patch
|
Patch500: ha-cloud-support-aws.patch
|
||||||
@ -214,7 +229,7 @@ service managers.
|
|||||||
License: GPLv2+ and LGPLv2+
|
License: GPLv2+ and LGPLv2+
|
||||||
Summary: Cloud resource agents
|
Summary: Cloud resource agents
|
||||||
Requires: %{name} = %{version}-%{release}
|
Requires: %{name} = %{version}-%{release}
|
||||||
Requires: ha-cloud-support
|
Requires: ha-cloud-support >= 4.10.0-63
|
||||||
Requires: socat
|
Requires: socat
|
||||||
Provides: resource-agents-aliyun
|
Provides: resource-agents-aliyun
|
||||||
Obsoletes: resource-agents-aliyun <= %{version}
|
Obsoletes: resource-agents-aliyun <= %{version}
|
||||||
@ -312,6 +327,21 @@ exit 1
|
|||||||
%patch -p1 -P 67
|
%patch -p1 -P 67
|
||||||
%patch -p1 -P 68
|
%patch -p1 -P 68
|
||||||
%patch -p1 -P 69
|
%patch -p1 -P 69
|
||||||
|
%patch -p1 -P 70
|
||||||
|
%patch -p1 -P 71
|
||||||
|
%patch -p1 -P 72
|
||||||
|
%patch -p1 -P 73
|
||||||
|
%patch -p1 -P 74
|
||||||
|
%patch -p1 -P 75
|
||||||
|
%patch -p1 -P 76
|
||||||
|
%patch -p1 -P 77
|
||||||
|
%patch -p1 -P 78
|
||||||
|
%patch -p1 -P 79
|
||||||
|
%patch -p1 -P 80
|
||||||
|
%patch -p1 -P 81
|
||||||
|
%patch -p1 -P 82
|
||||||
|
%patch -p1 -P 83
|
||||||
|
%patch -p1 -P 84
|
||||||
|
|
||||||
# bundled ha-cloud-support libs
|
# bundled ha-cloud-support libs
|
||||||
%patch -p1 -P 500
|
%patch -p1 -P 500
|
||||||
@ -633,6 +663,58 @@ 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 Aug 29 2024 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-64
|
||||||
|
- IPsrcaddr: add IPv6 support
|
||||||
|
|
||||||
|
Resolves: RHEL-32265
|
||||||
|
|
||||||
|
* Tue Aug 13 2024 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-61
|
||||||
|
- LVM-activate: fail when both "system_id_source" and "volume_list"
|
||||||
|
are set in lvm.conf to avoid false positive activation of the VG
|
||||||
|
|
||||||
|
Resolves: RHEL-22715
|
||||||
|
|
||||||
|
* Fri Jun 28 2024 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-60
|
||||||
|
- galera/mysql/redis: remove Unpromoted monitor-action
|
||||||
|
|
||||||
|
Resolves: RHEL-43579
|
||||||
|
|
||||||
|
* Tue Jun 25 2024 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-59
|
||||||
|
- Filesystem: fail when leading or trailing whitespace is present in
|
||||||
|
device or directory parameters
|
||||||
|
|
||||||
|
Resolves: RHEL-24683
|
||||||
|
|
||||||
|
* Tue Jun 11 2024 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-58
|
||||||
|
- Filesystem: dont kill unrelated processes during stop-action
|
||||||
|
- db2: fix OCF_SUCESS typo
|
||||||
|
|
||||||
|
Resolves: RHEL-40393
|
||||||
|
Resolves: RHEL-32829
|
||||||
|
|
||||||
|
* Wed May 15 2024 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-57
|
||||||
|
- Filesystem: fail when incorrect device mounted on mountpoint, and
|
||||||
|
dont unmount the mountpoint in this case, or if mountpoint set to "/"
|
||||||
|
|
||||||
|
Resolves: RHEL-34777
|
||||||
|
|
||||||
|
* Tue Apr 30 2024 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-56
|
||||||
|
- AWS agents: retry failed metadata requests to avoid instantly
|
||||||
|
failing when there is a hiccup in the network or metadata service
|
||||||
|
|
||||||
|
Resolves: RHEL-16246
|
||||||
|
|
||||||
|
* Wed Apr 10 2024 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-54
|
||||||
|
- galera: fix issue where joiner promotion fails is the node reports
|
||||||
|
being in non-primary state
|
||||||
|
|
||||||
|
Resolves: RHEL-31763
|
||||||
|
|
||||||
|
* Wed Mar 6 2024 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-53
|
||||||
|
- aliyun-vpc-move-ip: use new aliyun-cli
|
||||||
|
|
||||||
|
Resolves: RHEL-26666
|
||||||
|
|
||||||
* Thu Feb 8 2024 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-52
|
* Thu Feb 8 2024 Oyvind Albrigtsen <oalbrigt@redhat.com> - 4.10.0-52
|
||||||
- findif.sh: fix loopback IP handling
|
- findif.sh: fix loopback IP handling
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user