summaryrefslogtreecommitdiffstats
path: root/lib/installer/onos/onos_gw_mac_update.sh
blob: 323021dbf1055324875827265cc89a2f1df31263 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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 br-public | 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

}