diff --git a/neutron/Chart.yaml b/neutron/Chart.yaml index f7c1bdb90e..6e03fdab30 100644 --- a/neutron/Chart.yaml +++ b/neutron/Chart.yaml @@ -14,7 +14,7 @@ apiVersion: v1 appVersion: v1.0.0 description: OpenStack-Helm Neutron name: neutron -version: 0.2.13 +version: 0.2.14 home: https://docs.openstack.org/neutron/latest/ icon: https://www.openstack.org/themes/openstack/images/project-mascots/Neutron/OpenStack_Project_Neutron_vertical.png sources: diff --git a/neutron/templates/bin/_neutron-openvswitch-agent-init.sh.tpl b/neutron/templates/bin/_neutron-openvswitch-agent-init.sh.tpl index 969f9d0fab..3283e09e7c 100644 --- a/neutron/templates/bin/_neutron-openvswitch-agent-init.sh.tpl +++ b/neutron/templates/bin/_neutron-openvswitch-agent-init.sh.tpl @@ -87,44 +87,57 @@ function migrate_ip { local src_nic=$(get_name_by_pci_id ${pci_id}) if [ -n "${src_nic}" ] ; then - set +e - ip=$(get_ip_address_from_interface ${src_nic}) - prefix=$(get_ip_prefix_from_interface ${src_nic}) - - # Enabling explicit error handling: We must avoid to lose the IP - # address in the migration process. Hence, on every error, we - # attempt to assign the IP back to the original NIC and exit. bridge_exists=$(ip a s "${bridge_name}" | grep "${bridge_name}" | cut -f2 -d':' 2> /dev/null) if [ -z "${bridge_exists}" ] ; then echo "Bridge "${bridge_name}" does not exist. Creating it on demand." init_ovs_dpdk_bridge "${bridge_name}" fi - bridge_ip=$(get_ip_address_from_interface "${bridge_name}") - bridge_prefix=$(get_ip_prefix_from_interface "${bridge_name}") + migrate_ip_from_nic ${src_nic} ${bridge_name} + fi +} - if [[ -n "${ip}" && -n "${prefix}" ]]; then - ip addr flush dev ${src_nic} - if [ $? -ne 0 ] ; then - ip addr add ${ip}/${prefix} dev ${src_nic} - echo "Error while flushing IP from ${src_nic}." - exit 1 - fi +function migrate_ip_from_nic { + src_nic=$1 + bridge_name=$2 - ip addr add ${ip}/${prefix} dev "${bridge_name}" - if [ $? -ne 0 ] ; then - echo "Error assigning IP to bridge "${bridge_name}"." - ip addr add ${ip}/${prefix} dev ${src_nic} - exit 1 - fi - elif [[ -n "${bridge_ip}" && -n "${bridge_prefix}" ]]; then - echo "Bridge '${bridge_name}' already has IP assigned. Keeping the same:: IP:[${bridge_ip}]; Prefix:[${bridge_prefix}]..." - else - echo "Interface ${name} has invalid IP address. IP:[${ip}]; Prefix:[${prefix}]..." + # Enabling explicit error handling: We must avoid to lose the IP + # address in the migration process. Hence, on every error, we + # attempt to assign the IP back to the original NIC and exit. + set +e + + ip=$(get_ip_address_from_interface ${src_nic}) + prefix=$(get_ip_prefix_from_interface ${src_nic}) + + bridge_ip=$(get_ip_address_from_interface "${bridge_name}") + bridge_prefix=$(get_ip_prefix_from_interface "${bridge_name}") + + ip link set ${bridge_name} up + + if [[ -n "${ip}" && -n "${prefix}" ]]; then + ip addr flush dev ${src_nic} + if [ $? -ne 0 ] ; then + ip addr add ${ip}/${prefix} dev ${src_nic} + echo "Error while flushing IP from ${src_nic}." exit 1 fi - set -e + + ip addr add ${ip}/${prefix} dev "${bridge_name}" + if [ $? -ne 0 ] ; then + echo "Error assigning IP to bridge "${bridge_name}"." + ip addr add ${ip}/${prefix} dev ${src_nic} + exit 1 + fi + elif [[ -n "${bridge_ip}" && -n "${bridge_prefix}" ]]; then + echo "Bridge '${bridge_name}' already has IP assigned. Keeping the same:: IP:[${bridge_ip}]; Prefix:[${bridge_prefix}]..." + elif [[ -z "${bridge_ip}" && -z "${ip}" ]]; then + echo "Interface and bridge have no ips configured. Leaving as is." + else + echo "Interface ${name} has invalid IP address. IP:[${ip}]; Prefix:[${prefix}]..." + exit 1 fi + + set -e } function get_pf_or_vf_pci { @@ -397,6 +410,7 @@ do if [ -n "$iface" ] && [ "$iface" != "null" ] then ovs-vsctl --no-wait --may-exist add-port $bridge $iface + migrate_ip_from_nic $iface $bridge if [[ $(get_dpdk_config_value ${DPDK_CONFIG} '.enabled') != "true" ]]; then ip link set dev $iface up fi diff --git a/releasenotes/notes/neutron.yaml b/releasenotes/notes/neutron.yaml index 6784610156..c97dc99d41 100644 --- a/releasenotes/notes/neutron.yaml +++ b/releasenotes/notes/neutron.yaml @@ -27,4 +27,5 @@ neutron: - 0.2.11 Improve health probe logging - 0.2.12 Fix infinite recursion deadlock on netns cleanup cron - 0.2.13 Enable taint toleration for Openstack services + - 0.2.14 Migrate IP from bridge for auto_bridge_add ...