|
...
|
...
|
@@ -779,9 +779,41 @@ function stop_neutron {
|
|
779
|
779
|
fi
|
|
780
|
780
|
}
|
|
781
|
781
|
|
|
|
782
|
+# _move_neutron_addresses_route() - Move the primary IP to the OVS bridge
|
|
|
783
|
+# on startup, or back to the public interface on cleanup
|
|
|
784
|
+function _move_neutron_addresses_route {
|
|
|
785
|
+ local from_intf=$1
|
|
|
786
|
+ local to_intf=$2
|
|
|
787
|
+ local add_ovs_port=$3
|
|
|
788
|
+
|
|
|
789
|
+ if [[ -n "$from_intf" && -n "$to_intf" ]]; then
|
|
|
790
|
+ # Remove the primary IP address from $from_intf and add it to $to_intf,
|
|
|
791
|
+ # along with the default route, if it exists. Also, when called
|
|
|
792
|
+ # on configure we will also add $from_intf as a port on $to_intf,
|
|
|
793
|
+ # assuming it is an OVS bridge.
|
|
|
794
|
+
|
|
|
795
|
+ local IP_BRD=$(ip -4 a s dev $from_intf | awk '/inet/ { print $2, $3, $4; exit }')
|
|
|
796
|
+ local DEFAULT_ROUTE_GW=$(ip r | awk "/default.+$from_intf/ { print \$3; exit }")
|
|
|
797
|
+ local ADD_OVS_PORT=""
|
|
|
798
|
+
|
|
|
799
|
+ if [ "$DEFAULT_ROUTE_GW" != "" ]; then
|
|
|
800
|
+ ADD_DEFAULT_ROUTE="sudo ip r replace default via $DEFAULT_ROUTE_GW dev $to_intf"
|
|
|
801
|
+ fi
|
|
|
802
|
+
|
|
|
803
|
+ if [[ "$add_ovs_port" == "True" ]]; then
|
|
|
804
|
+ ADD_OVS_PORT="sudo ovs-vsctl add-port $to_intf $from_intf"
|
|
|
805
|
+ fi
|
|
|
806
|
+
|
|
|
807
|
+ sudo ip addr del $IP_BRD dev $from_intf; sudo ip addr add $IP_BRD dev $to_intf; $ADD_OVS_PORT; $ADD_DEFAULT_ROUTE
|
|
|
808
|
+ fi
|
|
|
809
|
+}
|
|
|
810
|
+
|
|
782
|
811
|
# cleanup_neutron() - Remove residual data files, anything left over from previous
|
|
783
|
812
|
# runs that a clean run would need to clean up
|
|
784
|
813
|
function cleanup_neutron {
|
|
|
814
|
+
|
|
|
815
|
+ _move_neutron_addresses_route "$OVS_PHYSICAL_BRIDGE" "$PUBLIC_INTERFACE" False
|
|
|
816
|
+
|
|
785
|
817
|
if is_provider_network && is_ironic_hardware; then
|
|
786
|
818
|
for IP in $(ip addr show dev $OVS_PHYSICAL_BRIDGE | grep ' inet ' | awk '{print $2}'); do
|
|
787
|
819
|
sudo ip addr del $IP dev $OVS_PHYSICAL_BRIDGE
|
|
...
|
...
|
@@ -956,6 +988,10 @@ function _configure_neutron_l3_agent {
|
|
956
|
956
|
_neutron_setup_interface_driver $Q_L3_CONF_FILE
|
|
957
|
957
|
|
|
958
|
958
|
neutron_plugin_configure_l3_agent
|
|
|
959
|
+
|
|
|
960
|
+ if [[ $(ip -4 a s dev "$PUBLIC_INTERFACE" | grep -c 'inet') != 0 ]]; then
|
|
|
961
|
+ _move_neutron_addresses_route "$PUBLIC_INTERFACE" "$OVS_PHYSICAL_BRIDGE" True
|
|
|
962
|
+ fi
|
|
959
|
963
|
}
|
|
960
|
964
|
|
|
961
|
965
|
function _configure_neutron_metadata_agent {
|
|
...
|
...
|
@@ -1227,8 +1263,10 @@ function _neutron_configure_router_v4 {
|
|
1227
|
1227
|
if is_neutron_ovs_base_plugin && [[ "$Q_USE_NAMESPACE" = "True" ]]; then
|
|
1228
|
1228
|
local ext_gw_interface=$(_neutron_get_ext_gw_interface)
|
|
1229
|
1229
|
local cidr_len=${FLOATING_RANGE#*/}
|
|
1230
|
|
- sudo ip addr add $ext_gw_ip/$cidr_len dev $ext_gw_interface
|
|
1231
|
|
- sudo ip link set $ext_gw_interface up
|
|
|
1230
|
+ if [[ $(ip addr show dev $ext_gw_interface | grep -c $ext_gw_ip) == 0 && $Q_USE_PROVIDERNET_FOR_PUBLIC == "False" ]]; then
|
|
|
1231
|
+ sudo ip addr add $ext_gw_ip/$cidr_len dev $ext_gw_interface
|
|
|
1232
|
+ sudo ip link set $ext_gw_interface up
|
|
|
1233
|
+ fi
|
|
1232
|
1234
|
ROUTER_GW_IP=`neutron port-list -c fixed_ips -c device_owner | grep router_gateway | awk -F '"' -v subnet_id=$PUB_SUBNET_ID '$4 == subnet_id { print $8; }'`
|
|
1233
|
1235
|
die_if_not_set $LINENO ROUTER_GW_IP "Failure retrieving ROUTER_GW_IP"
|
|
1234
|
1236
|
sudo route add -net $FIXED_RANGE gw $ROUTER_GW_IP
|