CI: Configure IP on a linux bridge instead of OVS br-ex

OVS upgrade jobs failed due to assigning an IP on the br-ex interface
(which is recycled during OVS upgrade). This change introduces a bridge
and veth pair for Neutron to use.

Change-Id: Ib3bee6e810fb8d31552d4c72c2a1ccae382c51f0
This commit is contained in:
Michał Nasiadka 2021-05-20 12:22:27 +02:00 committed by Radosław Piliszek
parent 1da7158021
commit 337771143b
6 changed files with 45 additions and 17 deletions

View File

@ -0,0 +1,12 @@
---
- name: Create bridge
become: true
command: ip link add {{ bridge_name }} type bridge
- name: Bring bridge interface up
become: true
command: ip link set {{ bridge_name }} up
- name: Add member interface to bridge
become: true
command: ip link set {{ bridge_member_name }} master {{ bridge_name }}

12
roles/veth/tasks/main.yml Normal file
View File

@ -0,0 +1,12 @@
---
- name: Create veth pair
become: true
command: ip link add {{ veth_pair.0 }} type veth peer name {{ veth_pair.1 }}
- name: Bring veth pair up
become: true
shell: ip link set {{ veth_pair.0 }} up && ip link set {{ veth_pair.1 }} up
- name: Add first veth pair port to bridge
become: true
command: ip link set {{ veth_pair.0 }} master {{ bridge_name }}

View File

@ -13,19 +13,6 @@ function init_runonce {
echo "Initialising OpenStack resources via init-runonce"
KOLLA_DEBUG=1 tools/init-runonce |& gawk '{ print strftime("%F %T"), $0; }' &> /tmp/logs/ansible/init-runonce
echo "Setting address on the external network bridge"
if [[ $SCENARIO == "linuxbridge" ]]; then
# NOTE(yoctozepto): linuxbridge agent manages its bridges by itself
# hence, we need to find the current name of the external network bridge
devname=$(basename $(readlink /sys/class/net/${EXT_NET_SLAVE_DEVICE}/master))
else
devname=br-ex
# NOTE(yoctozepto): ovs virtual interfaces are down (not used) by default
# hence, we need to bring the external network bridge up
sudo ip link set ${devname} up
fi
sudo ip addr add ${EXT_NET_LOCAL_ADDR} dev ${devname}
}

View File

@ -20,8 +20,25 @@
# because it is enslaved by a bridge
- role: multi-node-vxlan-overlay
vars:
vxlan_interface_name: "{{ neutron_external_interface_name }}"
vxlan_interface_name: "{{ neutron_external_vxlan_interface_name }}"
vxlan_vni: 10001
- role: bridge
vars:
bridge_name: "{{ neutron_external_bridge_name }}"
bridge_member_name: "{{ neutron_external_vxlan_interface_name }}"
# TODO(mnasiadka): Update ipv6 jobs to test ipv6 in Neutron
- role: multi-node-managed-addressing
vars:
managed_interface_name: "{{ neutron_external_bridge_name }}"
managed_network_prefix: "{{ neutron_external_network_prefix }}"
managed_network_prefix_length: "{{ neutron_external_network_prefix_length }}"
managed_network_address_family: "ipv4"
- role: veth
vars:
veth_pair:
- "veth-{{ neutron_external_bridge_name }}"
- "veth-{{ neutron_external_bridge_name }}-ext"
bridge_name: "{{ neutron_external_bridge_name }}"
tasks:
# NOTE(yoctozepto): we use gawk to add time to each logged line
# outside of Ansible (e.g. for init-runonce)

View File

@ -374,8 +374,6 @@
EXT_NET_CIDR: "{{ neutron_external_network_prefix }}0/{{ neutron_external_network_prefix_length }}"
EXT_NET_RANGE: "start={{ neutron_external_network_prefix }}150,end={{ neutron_external_network_prefix }}199"
EXT_NET_GATEWAY: "{{ neutron_external_network_prefix }}1"
EXT_NET_LOCAL_ADDR: "{{ neutron_external_network_prefix }}1/{{ neutron_external_network_prefix_length }}"
EXT_NET_SLAVE_DEVICE: "{{ neutron_external_interface_name }}"
SCENARIO: "{{ scenario }}"
when: openstack_core_tested or scenario in ['ironic', 'magnum', 'scenario_nfv', 'zun', 'octavia']

View File

@ -37,7 +37,9 @@
address_family: 'ipv4'
neutron_external_network_prefix: "198.51.100."
neutron_external_network_prefix_length: "24"
neutron_external_interface_name: vxlan1
neutron_external_bridge_name: br0
neutron_external_interface_name: "veth-{{ neutron_external_bridge_name }}-ext"
neutron_external_vxlan_interface_name: vxlan1
tls_enabled: false
# NOTE(yoctozepto): Ansible on Debian defaults to /usr/bin/python which is
# python2. Let's use python3 instead as expected in 2020 and beyond.