Blame SOURCES/bz1939281-aws-vpc-move-ip-add-ENI-lookup.patch

145c2a
From b727fe4e2a0f4c88fca0ed9f90f57e570253c961 Mon Sep 17 00:00:00 2001
145c2a
From: Costas Tyfoxylos <costas.tyf@gmail.com>
145c2a
Date: Wed, 26 Aug 2020 15:18:00 +0300
145c2a
Subject: [PATCH 1/2] aws-vpc-move-ip: Implemented optional eni lookup instead
145c2a
 of the default instance id.
145c2a
145c2a
In a shared network pattern where the cluster resides in shared subnets the instance ids of the nodes are not retrievable but the eni ids are and this optional feature gives transparent support in that situation.
145c2a
---
145c2a
 heartbeat/aws-vpc-move-ip | 41 +++++++++++++++++++++++++++++++--------
145c2a
 1 file changed, 33 insertions(+), 8 deletions(-)
145c2a
145c2a
diff --git a/heartbeat/aws-vpc-move-ip b/heartbeat/aws-vpc-move-ip
145c2a
index 1b540caec..bc82428e5 100755
145c2a
--- a/heartbeat/aws-vpc-move-ip
145c2a
+++ b/heartbeat/aws-vpc-move-ip
145c2a
@@ -44,6 +44,7 @@ OCF_RESKEY_routing_table_default=""
145c2a
 OCF_RESKEY_routing_table_role_default=""
145c2a
 OCF_RESKEY_interface_default="eth0"
145c2a
 OCF_RESKEY_monapi_default="false"
145c2a
+OCF_RESKEY_lookup_type_default="InstanceId"
145c2a
 
145c2a
 : ${OCF_RESKEY_awscli=${OCF_RESKEY_awscli_default}}
145c2a
 : ${OCF_RESKEY_profile=${OCF_RESKEY_profile_default}}
145c2a
@@ -54,6 +55,7 @@ OCF_RESKEY_monapi_default="false"
145c2a
 : ${OCF_RESKEY_routing_table_role=${OCF_RESKEY_routing_table_role_default}}
145c2a
 : ${OCF_RESKEY_interface=${OCF_RESKEY_interface_default}}
145c2a
 : ${OCF_RESKEY_monapi=${OCF_RESKEY_monapi_default}}
145c2a
+: ${OCF_RESKEY_lookup_type=${OCF_RESKEY_lookup_type_default}}
145c2a
 
145c2a
 [ -n "$OCF_RESKEY_region" ] && region_opt="--region $OCF_RESKEY_region"
145c2a
 #######################################################################
145c2a
@@ -154,6 +156,17 @@ Enable enhanced monitoring using AWS API calls to check route table entry
145c2a
 <shortdesc lang="en">Enhanced Monitoring</shortdesc>
145c2a
 <content type="boolean" default="${OCF_RESKEY_monapi_default}" />
145c2a
 </parameter>
145c2a
+
145c2a
+<parameter name="lookup_type" required="0">
145c2a
+<longdesc lang="en">
145c2a
+Name of resource type to lookup in route table.
145c2a
+"InstanceId"         : EC2 instance ID. (default)
145c2a
+"NetworkInterfaceId" : ENI ID. (useful in shared VPC setups).
145c2a
+</longdesc>
145c2a
+<shortdesc lang="en">lookup type for route table resource</shortdesc>
145c2a
+<content type="string" default="${OCF_RESKEY_lookup_type_default}" />
145c2a
+</parameter>
145c2a
+
145c2a
 </parameters>
145c2a
 
145c2a
 <actions>
145c2a
@@ -187,7 +200,7 @@ execute_cmd_as_role(){
145c2a
 
145c2a
 ec2ip_set_address_param_compat(){
145c2a
 	# Include backward compatibility for the deprecated address parameter
145c2a
-	if [ -z  "$OCF_RESKEY_ip" ] && [ -n "$OCF_RESKEY_address" ]; then
145c2a
+	if [ -z "$OCF_RESKEY_ip" ] && [ -n "$OCF_RESKEY_address" ]; then
145c2a
 		OCF_RESKEY_ip="$OCF_RESKEY_address"
145c2a
 	fi
145c2a
 }
145c2a
@@ -213,16 +226,24 @@ ec2ip_validate() {
145c2a
 }
145c2a
 
145c2a
 ec2ip_monitor() {
145c2a
-        MON_RES=""
145c2a
+	MON_RES=""
145c2a
+	if [ "${OCF_RESKEY_lookup_type}" = "NetworkInterfaceId" ]; then
145c2a
+		EC2_ID="$(ec2ip_get_instance_eni)"
145c2a
+		RESOURCE_TYPE="interface"
145c2a
+	else
145c2a
+		EC2_ID="$EC2_INSTANCE_ID"
145c2a
+		RESOURCE_TYPE="instance"
145c2a
+	fi
145c2a
+
145c2a
 	if ocf_is_true ${OCF_RESKEY_monapi} || [ "$__OCF_ACTION" = "start" ] || ocf_is_probe; then
145c2a
 		for rtb in $(echo $OCF_RESKEY_routing_table | sed -e 's/,/ /g'); do
145c2a
 			ocf_log info "monitor: check routing table (API call) - $rtb"
145c2a
 			if [[ -z "${OCF_RESKEY_routing_table_role}" ]]; then
145c2a
-				cmd="$OCF_RESKEY_awscli --profile $OCF_RESKEY_profile $region_opt --output text ec2 describe-route-tables --route-table-ids $rtb --query RouteTables[*].Routes[?DestinationCidrBlock=='$OCF_RESKEY_ip/32'].InstanceId"
145c2a
+				cmd="$OCF_RESKEY_awscli --profile $OCF_RESKEY_profile $region_opt --output text ec2 describe-route-tables --route-table-ids $rtb --query RouteTables[*].Routes[?DestinationCidrBlock=='$OCF_RESKEY_ip/32'].$OCF_RESKEY_lookup_type"
145c2a
 				ocf_log debug "executing command: $cmd"
145c2a
 				ROUTE_TO_INSTANCE="$($cmd)"
145c2a
 			else
145c2a
-				cmd="$OCF_RESKEY_awscli $region_opt --output text ec2 describe-route-tables --route-table-ids $rtb --query RouteTables[*].Routes[?DestinationCidrBlock=='$OCF_RESKEY_ip/32'].InstanceId"
145c2a
+				cmd="$OCF_RESKEY_awscli $region_opt --output text ec2 describe-route-tables --route-table-ids $rtb --query RouteTables[*].Routes[?DestinationCidrBlock=='$OCF_RESKEY_ip/32'].$OCF_RESKEY_lookup_type"
145c2a
 				ROUTE_TO_INSTANCE="$(execute_cmd_as_role "$cmd" $OCF_RESKEY_routing_table_role)"
145c2a
 			fi
145c2a
 			ocf_log debug "Overlay IP is currently routed to ${ROUTE_TO_INSTANCE}"
145c2a
@@ -230,8 +251,8 @@ ec2ip_monitor() {
145c2a
 				ROUTE_TO_INSTANCE="<unknown>"
145c2a
 			fi
145c2a
 
145c2a
-			if [ "$EC2_INSTANCE_ID" != "$ROUTE_TO_INSTANCE" ]; then 
145c2a
-				ocf_log warn "not routed to this instance ($EC2_INSTANCE_ID) but to instance $ROUTE_TO_INSTANCE on $rtb"
145c2a
+			if [ "$EC2_ID" != "$ROUTE_TO_INSTANCE" ]; then
145c2a
+				ocf_log warn "not routed to this $RESOURCE_TYPE ($EC2_ID) but to $RESOURCE_TYPE $ROUTE_TO_INSTANCE on $rtb"
145c2a
 				MON_RES="$MON_RES $rtb"
145c2a
 			fi
145c2a
 			sleep 1
145c2a
@@ -275,7 +296,7 @@ ec2ip_drop() {
145c2a
 	return $OCF_SUCCESS
145c2a
 }
145c2a
 
145c2a
-ec2ip_get_and_configure() {
145c2a
+ec2ip_get_instance_eni() {
145c2a
 	MAC_FILE="/sys/class/net/${OCF_RESKEY_interface}/address"
145c2a
 	if [ -f $MAC_FILE ]; then
145c2a
 		cmd="cat ${MAC_FILE}"
145c2a
@@ -300,7 +321,11 @@ ec2ip_get_and_configure() {
145c2a
 		return $OCF_ERR_GENERIC
145c2a
 	fi
145c2a
 	ocf_log debug "network interface id associated MAC address ${MAC_ADDR}: ${EC2_NETWORK_INTERFACE_ID}"
145c2a
+	echo $EC2_NETWORK_INTERFACE_ID
145c2a
+}
145c2a
 
145c2a
+ec2ip_get_and_configure() {
145c2a
+	EC2_NETWORK_INTERFACE_ID="$(ec2ip_get_instance_eni)"
145c2a
 	for rtb in $(echo $OCF_RESKEY_routing_table | sed -e 's/,/ /g'); do
145c2a
 		if [ -z "${OCF_RESKEY_routing_table_role}" ]; then
145c2a
 			cmd="$OCF_RESKEY_awscli --profile $OCF_RESKEY_profile $region_opt --output text ec2 replace-route --route-table-id $rtb --destination-cidr-block ${OCF_RESKEY_ip}/32 --network-interface-id $EC2_NETWORK_INTERFACE_ID"
145c2a
145c2a
From f4c8daae098dd33bdd5136ca4846eb505110e006 Mon Sep 17 00:00:00 2001
145c2a
From: Sander Botman <sbotman@schubergphilis.com>
145c2a
Date: Fri, 28 Aug 2020 22:01:03 +0200
145c2a
Subject: [PATCH 2/2] aws-vpc-move-ip: Fix the region option
145c2a
145c2a
---
145c2a
 heartbeat/aws-vpc-move-ip | 4 ++--
145c2a
 1 file changed, 2 insertions(+), 2 deletions(-)
145c2a
145c2a
diff --git a/heartbeat/aws-vpc-move-ip b/heartbeat/aws-vpc-move-ip
145c2a
index bc82428e5..a5b28ad92 100755
145c2a
--- a/heartbeat/aws-vpc-move-ip
145c2a
+++ b/heartbeat/aws-vpc-move-ip
145c2a
@@ -243,7 +243,7 @@ ec2ip_monitor() {
145c2a
 				ocf_log debug "executing command: $cmd"
145c2a
 				ROUTE_TO_INSTANCE="$($cmd)"
145c2a
 			else
145c2a
-				cmd="$OCF_RESKEY_awscli $region_opt --output text ec2 describe-route-tables --route-table-ids $rtb --query RouteTables[*].Routes[?DestinationCidrBlock=='$OCF_RESKEY_ip/32'].$OCF_RESKEY_lookup_type"
145c2a
+				cmd="$OCF_RESKEY_awscli $region_opt --output text ec2 describe-route-tables --route-table-ids $rtb --query RouteTables[*].Routes[?DestinationCidrBlock=='$OCF_RESKEY_ip/32'].$OCF_RESKEY_lookup_type"
145c2a
 				ROUTE_TO_INSTANCE="$(execute_cmd_as_role "$cmd" $OCF_RESKEY_routing_table_role)"
145c2a
 			fi
145c2a
 			ocf_log debug "Overlay IP is currently routed to ${ROUTE_TO_INSTANCE}"