summaryrefslogtreecommitdiffstats
path: root/lib/installer
diff options
context:
space:
mode:
Diffstat (limited to 'lib/installer')
-rw-r--r--lib/installer/onos/onos_gw_mac_update.sh56
1 files changed, 56 insertions, 0 deletions
diff --git a/lib/installer/onos/onos_gw_mac_update.sh b/lib/installer/onos/onos_gw_mac_update.sh
new file mode 100644
index 00000000..d003cc01
--- /dev/null
+++ b/lib/installer/onos/onos_gw_mac_update.sh
@@ -0,0 +1,56 @@
+#!/bin/bash
+
+# Update gateway mac to onos for l3 function
+
+# author: Bob zhou
+# author: Tim Rozet
+
+
+# Update gateway mac to onos for l3 function
+# params: external CIDR, external gateway
+function onos_update_gw_mac {
+ local CIDR
+ local GW_IP
+
+ if [[ -z "$1" || -z "$2" ]]; then
+ return 1
+ else
+ CIDR=$1
+ GW_IP=$2
+ fi
+
+ if [ -z "$UNDERCLOUD" ]; then
+ #if not found then dnsmasq may be using leasefile-ro
+ instack_mac=$(virsh domiflist instack | grep default | \
+ grep -Eo "[0-9a-f\]+:[0-9a-f\]+:[0-9a-f\]+:[0-9a-f\]+:[0-9a-f\]+:[0-9a-f\]+")
+ UNDERCLOUD=$(/usr/sbin/arp -e | grep ${instack_mac} | awk {'print $1'})
+ fi
+ # get controller ip address
+ controller_ip=$(ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" <<EOI
+source stackrc
+openstack server list | grep overcloud-controller-0 | grep -Eo "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+"
+EOI
+)
+
+ if [ -z "$controller_ip" ]; then
+ echo "ERROR: Failed to find controller_ip for overcloud-controller-0"
+ return 1
+ fi
+
+ # get gateway mac
+ GW_MAC=$(arping ${GW_IP} -c 1 -I brbm2 | grep -Eo '([0-9a-fA-F]{2})(([/\s:-][0-9a-fA-F]{2}){5})')
+
+ if [ -z "$GW_MAC" ]; then
+ echo "ERROR: Failed to find gateway mac for ${GW_IP}"
+ return 1
+ fi
+
+ # update gateway mac to onos
+ ssh -T ${SSH_OPTIONS[@]} "stack@$UNDERCLOUD" <<EOI
+ssh -T ${SSH_OPTIONS[@]} "heat-admin@${controller_ip}" <<EOF
+echo "external gateway mac is ${GW_MAC}"
+/opt/onos/bin/onos "externalgateway-update -m ${GW_MAC}"
+EOF
+EOI
+
+}