diff options
-rw-r--r-- | build/opnfv-apex-common.spec | 3 | ||||
-rwxr-xr-x | ci/deploy.sh | 19 | ||||
-rw-r--r-- | lib/common-functions.sh | 20 | ||||
-rw-r--r-- | lib/installer/onos/onos_gw_mac_update.sh | 56 |
4 files changed, 98 insertions, 0 deletions
diff --git a/build/opnfv-apex-common.spec b/build/opnfv-apex-common.spec index 9aaf088d..4d3c4509 100644 --- a/build/opnfv-apex-common.spec +++ b/build/opnfv-apex-common.spec @@ -38,6 +38,8 @@ install config/deploy/network/network_settings.yaml %{buildroot}%{_sysconfdir}/o mkdir -p %{buildroot}%{_var}/opt/opnfv/lib/ install lib/common-functions.sh %{buildroot}%{_var}/opt/opnfv/lib/ +mkdir -p %{buildroot}%{_var}/opt/opnfv/lib/installer/onos/ +install lib/installer/onos/onos_gw_mac_update.sh %{buildroot}%{_var}/opt/opnfv/lib/installer/onos/ mkdir -p %{buildroot}%{_docdir}/opnfv/ install LICENSE.rst %{buildroot}%{_docdir}/opnfv/ @@ -53,6 +55,7 @@ install config/deploy/network/network_settings.yaml %{buildroot}%{_docdir}/opnfv %attr(755,root,root) %{_bindir}/opnfv-deploy %attr(755,root,root) %{_bindir}/opnfv-clean %{_var}/opt/opnfv/lib/common-functions.sh +%{_var}/opt/opnfv/lib/installer/onos/onos_gw_mac_update.sh %{_sysconfdir}/opnfv-apex/os-odl_l2-nofeature-ha.yaml %{_sysconfdir}/opnfv-apex/os-odl_l2-sfc-ha.yaml %{_sysconfdir}/opnfv-apex/os-odl_l3-nofeature-ha.yaml diff --git a/ci/deploy.sh b/ci/deploy.sh index 232d8251..6ac6aff9 100755 --- a/ci/deploy.sh +++ b/ci/deploy.sh @@ -47,6 +47,7 @@ NET_MAP['storage_network']="brbm3" ##LIBRARIES source $CONFIG/lib/common-functions.sh +source $CONFIG/lib/installer/onos/onos_gw_mac_update.sh ##FUNCTIONS ##translates yaml into variables @@ -873,6 +874,16 @@ EOI fi fi done + + # for virtual, we NAT public network through instack + if [ "$virtual" == "TRUE" ]; then + if ! configure_undercloud_nat ${public_network_cidr}; then + echo -e "${red}ERROR: Unable to NAT undercloud with external net: ${public_network_cidr}${reset}" + exit 1 + else + echo -e "${blue}INFO: Undercloud (instack VM) has been setup to NAT Overcloud public network${reset}" + fi + fi } display_usage() { @@ -1029,6 +1040,14 @@ main() { echo -e "${blue}INFO: Post Install Configuration Complete${reset}" fi fi + if [[ ${deploy_options_array['sdn_controller']} == 'onos' ]]; then + if ! onos_update_gw_mac ${public_network_cidr} ${public_network_gateway}; then + echo -e "${red}ERROR:ONOS Post Install Configuration Failed, Exiting.${reset}" + exit 1 + else + echo -e "${blue}INFO: ONOS Post Install Configuration Complete${reset}" + fi + fi } main "$@" diff --git a/lib/common-functions.sh b/lib/common-functions.sh index edf06cff..1e55aa18 100644 --- a/lib/common-functions.sh +++ b/lib/common-functions.sh @@ -504,3 +504,23 @@ PEERDNS=no" > ${net_path}/ifcfg-${line} sudo systemctl restart network } + +# Update iptables rule for external network reach internet +# for virtual deployments +# params: external_cidr +function configure_undercloud_nat { + local external_cidr + if [[ -z "$1" ]]; then + return 1 + else + external_cidr=$1 + fi + + ssh -T ${SSH_OPTIONS[@]} "root@$UNDERCLOUD" <<EOI +iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE +iptables -t nat -A POSTROUTING -s ${external_cidr} -o eth0 -j MASQUERADE +iptables -A FORWARD -i eth2 -j ACCEPT +iptables -A FORWARD -s ${external_cidr} -m state --state ESTABLISHED,RELATED -j ACCEPT +service iptables save +EOI +} 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 + +} |