From 15c280787e50fe2a372b6177c5a63b48595aae38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Harald=20Jens=C3=A5s?= Date: Fri, 20 Nov 2020 00:36:01 +0100 Subject: [PATCH] Restore network_data net order nicX contract With the Heat multi-nic example templates the loop.index was used to set the nicX for each interface, and ordered iteration was done over all networks in network_data.yaml. The ctlplane was always nic1, then nic2 was mapped to the first network in the network_data.yaml definition. When converting multi-nic templates to ansible the ordering contract between network_data.yaml and the nicX for each network was broken because iteration happens only over networks associated with the role. This change restores the ordering contract in the multi-nic templates by iterating over the 'networks_all' group_var which holds all enabled networks in the order of apperance in network_data.yaml. Depends-On: https://review.opendev.org/763497 Closes-Bug: #1904894 Change-Id: I9d2767d7ce4f24645684fde6044c38a4b920dbb1 --- .../templates/multiple_nics/multiple_nics.j2 | 6 +-- .../multiple_nics/multiple_nics_dpdk.j2 | 6 +-- .../multiple_nics/multiple_nics_dvr.j2 | 41 ++++++++-------- .../multiple_nics_vlans.j2 | 6 +-- .../multiple_nics_vlans_dpdk.j2 | 6 +-- .../multiple_nics_vlans_dvr.j2 | 47 +++++++++---------- 6 files changed, 55 insertions(+), 57 deletions(-) diff --git a/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics/multiple_nics.j2 b/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics/multiple_nics.j2 index 8c41d95b1..6135f1fde 100644 --- a/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics/multiple_nics.j2 +++ b/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics/multiple_nics.j2 @@ -9,8 +9,8 @@ network_config: use_dhcp: false addresses: - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_subnet_cidr }} -{% for network in role_networks if network not in networks_skip_config %} -{% if network not in ["External", "Tenant"] %} +{% for network in networks_all if network not in networks_skip_config %} +{% if network not in ["External", "Tenant"] and network in role_networks %} - type: interface name: nic{{ loop.index +1 }} mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} @@ -19,7 +19,7 @@ network_config: - ip_netmask: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }} routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }} -{% elif 'external_bridge' in role_tags %} +{% elif network in role_networks or 'external_bridge' in role_tags %} - type: ovs_bridge {% if network == 'External' %} name: {{ neutron_physical_bridge_name }} diff --git a/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics/multiple_nics_dpdk.j2 b/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics/multiple_nics_dpdk.j2 index 695609f18..9b906c0ec 100644 --- a/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics/multiple_nics_dpdk.j2 +++ b/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics/multiple_nics_dpdk.j2 @@ -10,8 +10,8 @@ network_config: addresses: - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_subnet_cidr }} {% set nics_used = [1] %} -{% for network in role_networks if network not in networks_skip_config %} -{% if network not in ["External", "Tenant"] %} +{% for network in networks_all if network not in networks_skip_config %} +{% if network not in ["External", "Tenant"] and network in role_networks %} - type: interface name: nic{{ loop.index +1 }} mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} @@ -20,7 +20,7 @@ network_config: - ip_netmask: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }} routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }} -{% elif 'external_bridge' in role_tags %} +{% elif network in role_networks or 'external_bridge' in role_tags %} - type: ovs_bridge {% if network == 'External' %} name: {{ neutron_physical_bridge_name }} diff --git a/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics/multiple_nics_dvr.j2 b/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics/multiple_nics_dvr.j2 index b1783fe1f..fb0f818dd 100644 --- a/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics/multiple_nics_dvr.j2 +++ b/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics/multiple_nics_dvr.j2 @@ -9,9 +9,25 @@ network_config: use_dhcp: false addresses: - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_subnet_cidr }} -{% set nics_used = [1] %} -{% for network in role_networks if network not in networks_skip_config %} -{% if network not in ["External", "Tenant"] %} +{% for network in networks_all if network not in networks_skip_config|default([]) %} +{% if network == 'External' %} +- type: ovs_bridge + name: {{ neutron_physical_bridge_name }} + mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} + dns_servers: {{ ctlplane_dns_nameservers }} + use_dhcp: false +{% if network in role_networks %} + addresses: + - ip_netmask: + {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }} + routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }} +{% endif %} + members: + - type: interface + name: nic{{ loop.index +1 }} + mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} + primary: true +{% elif network not in ["External", "Tenant"] and network in role_networks %} - type: interface name: nic{{ loop.index +1 }} mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} @@ -20,7 +36,7 @@ network_config: - ip_netmask: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }} routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }} -{% elif network == 'Tenant' %} +{% elif network == 'Tenant' and network in role_networks %} - type: ovs_bridge name: {{ 'br-' ~ networks_lower[network] }} mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} @@ -37,21 +53,4 @@ network_config: use_dhcp: false primary: true {% endif %} -{% set _ = nics_used.append(loop.index) %} {% endfor %} -- type: ovs_bridge - name: {{ neutron_physical_bridge_name }} - mtu: {{ lookup('vars', networks_lower['External'] ~ '_mtu') }} - dns_servers: {{ ctlplane_dns_nameservers }} - use_dhcp: false -{% if 'External' in role_networks %} - addresses: - - ip_netmask: - {{ lookup('vars', networks_lower['External'] ~ '_ip') }}/{{ lookup('vars', networks_lower['External'] ~ '_cidr') }} - routes: {{ lookup('vars', networks_lower['External'] ~ '_host_routes') }} -{% endif %} - members: - - type: interface - name: nic{{nics_used[-1] + 1}} - mtu: {{ lookup('vars', networks_lower['External'] ~ '_mtu') }} - primary: true diff --git a/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics_vlans/multiple_nics_vlans.j2 b/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics_vlans/multiple_nics_vlans.j2 index 19de35943..93c771fad 100644 --- a/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics_vlans/multiple_nics_vlans.j2 +++ b/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics_vlans/multiple_nics_vlans.j2 @@ -9,8 +9,8 @@ network_config: use_dhcp: false addresses: - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_subnet_cidr }} -{% for network in role_networks if network not in networks_skip_config %} -{% if network not in ["External", "Tenant"] %} +{% for network in networks_all if network not in networks_skip_config %} +{% if network not in ["External", "Tenant"] and network in role_networks %} - type: interface name: nic{{ loop.index + 1 }} mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} @@ -23,7 +23,7 @@ network_config: - ip_netmask: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }} routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }} -{% elif 'external_bridge' in role_tags %} +{% elif network in role_networks or 'external_bridge' in role_tags %} - type: ovs_bridge {% if network == 'External' %} name: {{ neutron_physical_bridge_name }} diff --git a/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics_vlans/multiple_nics_vlans_dpdk.j2 b/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics_vlans/multiple_nics_vlans_dpdk.j2 index d39cdd2d3..ec919d2b5 100644 --- a/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics_vlans/multiple_nics_vlans_dpdk.j2 +++ b/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics_vlans/multiple_nics_vlans_dpdk.j2 @@ -10,8 +10,8 @@ network_config: addresses: - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_subnet_cidr }} {% set nics_used = [1] %} -{% for network in role_networks if network not in networks_skip_config %} -{% if network not in ["External", "Tenant"] %} +{% for network in networks_all if network not in networks_skip_config %} +{% if network not in ["External", "Tenant"] and network in role_networks %} - type: interface name: nic{{ loop.index + 1 }} mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} @@ -24,7 +24,7 @@ network_config: - ip_netmask: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }} routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }} -{% elif 'external_bridge' in role_tags %} +{% elif network in role_networks or 'external_bridge' in role_tags %} - type: ovs_bridge {% if network == 'External' %} name: {{ neutron_physical_bridge_name }} diff --git a/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics_vlans/multiple_nics_vlans_dvr.j2 b/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics_vlans/multiple_nics_vlans_dvr.j2 index 206fcacb0..9eef12149 100644 --- a/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics_vlans/multiple_nics_vlans_dvr.j2 +++ b/tripleo_ansible/roles/tripleo_network_config/templates/multiple_nics_vlans/multiple_nics_vlans_dvr.j2 @@ -9,9 +9,28 @@ network_config: use_dhcp: false addresses: - ip_netmask: {{ ctlplane_ip }}/{{ ctlplane_subnet_cidr }} -{% set nics_used = [1] %} -{% for network in role_networks if network not in networks_skip_config %} -{% if network not in ["External", "Tenant"] %} +{% for network in networks_all if network not in networks_skip_config|default([]) %} +{% if network == 'External' %} +- type: ovs_bridge + name: {{ neutron_physical_bridge_name }} + mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} + dns_servers: {{ ctlplane_dns_nameservers }} + use_dhcp: false + members: + - type: interface + name: nic{{ loop.index + 1 }} + mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} + primary: true +{% if network in role_networks %} + - type: vlan + mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} + vlan_id: {{ lookup('vars', networks_lower[network] ~ '_vlan_id') }} + addresses: + - ip_netmask: + {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }} + routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }} +{% endif %} +{% elif network not in ["External", "Tenant"] and network in role_networks %} - type: interface name: nic{{ loop.index + 1 }} mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} @@ -24,7 +43,7 @@ network_config: - ip_netmask: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }} routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }} -{% elif network == 'Tenant' %} +{% elif network == 'Tenant' and network in role_networks %} - type: ovs_bridge name: {{ 'br-' ~ networks_lower[network] }} mtu: {{ lookup('vars', networks_lower[network] ~ '_mtu') }} @@ -44,24 +63,4 @@ network_config: {{ lookup('vars', networks_lower[network] ~ '_ip') }}/{{ lookup('vars', networks_lower[network] ~ '_cidr') }} routes: {{ lookup('vars', networks_lower[network] ~ '_host_routes') }} {% endif %} -{% set _ = nics_used.append(loop.index) %} {% endfor %} -- type: ovs_bridge - name: {{ neutron_physical_bridge_name }} - mtu: {{ lookup('vars', networks_lower['External'] ~ '_mtu') }} - dns_servers: {{ ctlplane_dns_nameservers }} - use_dhcp: false - members: - - type: interface - name: nic{{nics_used[-1] + 1}} - mtu: {{ lookup('vars', networks_lower['External'] ~ '_mtu') }} - primary: true -{% if 'External' in role_networks %} - - type: vlan - mtu: {{ lookup('vars', networks_lower['External'] ~ '_mtu') }} - vlan_id: {{ lookup('vars', networks_lower['External'] ~ '_vlan_id') }} - addresses: - - ip_netmask: - {{ lookup('vars', networks_lower['External'] ~ '_ip') }}/{{ lookup('vars', networks_lower['External'] ~ '_cidr') }} - routes: {{ lookup('vars', networks_lower['External'] ~ '_host_routes') }} -{% endif %}