Allow override default physnets
Some customers want to be able to specify list of physnets
(provider nets) explicitly, and not having default physnet1/2/3.
We already allow override 'bridge_mappings' on computes so
this is logical continuation.
Change-Id: Iff9657c5261b3b2f715a8b1fbd7dd925187a7857
Related-Prod: PROD-21121
diff --git a/README.rst b/README.rst
index 9ee240f..a5f8e8a 100644
--- a/README.rst
+++ b/README.rst
@@ -678,8 +678,8 @@
ovs:
driver: openvswitch
-Neutron with additional physical networks
------------------------------------------
+Neutron with explicit physical networks
+---------------------------------------
Neutron Server only
@@ -693,9 +693,11 @@
engine: ml2
tenant_network_types: "flat,vlan" # Can be mixed flat,vlan,vxlan
...
- # also need to configure corresponding additional bridge_mappings on
+ # also need to configure corresponding bridge_mappings on
# compute and gateway nodes
- physnets:
+ physnets: # only listed physnets will be configured (overrides physnet1/2/3)
+ external:
+ mtu: 1500
sriov_net:
mtu: 9000 # Optional, defaults to 1500
vlan_range: '100:200' # Optional
diff --git a/neutron/files/ocata/ml2_conf.ini b/neutron/files/ocata/ml2_conf.ini
index 300afce..6f2df28 100644
--- a/neutron/files/ocata/ml2_conf.ini
+++ b/neutron/files/ocata/ml2_conf.ini
@@ -166,6 +166,13 @@
# (list value)
#physical_network_mtus =
{%- set physical_network_mtus = [] %}
+
+{%- for physnet, params in server.backend.get('physnets', {}).iteritems() %}
+{%- do physical_network_mtus.append([physnet, params.get('mtu')]|join(":")) if params.get('mtu', False) %}
+{%- endfor %}
+
+{%- if not physical_network_mtus %}
+
{%- if server.get('external_access', True) %}
{%- do physical_network_mtus.append(['physnet1',server.backend.get('external_mtu', '1500')]|join(":")) %}
{%- endif %}
@@ -176,9 +183,8 @@
{%- do physical_network_mtus.append(['physnet3',server.backend.get('ironic_net_mtu', server.backend.get('external_mtu', '1500'))]|join(":")) %}
{%- endif %}
-{%- for physnet, params in server.backend.get('physnets', {}).iteritems() %}
-{%- do physical_network_mtus.append([physnet, params.get('mtu')]|join(":")) if params.get('mtu', False) %}
-{%- endfor %}
+{%- endif %}
+
physical_network_mtus = {{ ','.join(physical_network_mtus) }}
# Default network type for external networks when no provider attributes are
@@ -251,6 +257,13 @@
# tenant networks. (list value)
#network_vlan_ranges =
{%- set network_vlan_ranges = [] %}
+
+{%- for physnet, params in server.backend.get('physnets', {}).iteritems() %}
+{%- do network_vlan_ranges.append([physnet, params.get('vlan_range')]|join(":") if params.get('vlan_range', False) else physnet) %}
+{%- endfor %}
+
+{%- if not network_vlan_ranges %}
+
{%- if server.backend.external_vlan_range is defined %}
{%- do network_vlan_ranges.append(['physnet1',server.backend.get('external_vlan_range')]|join(":")) %}
{%- endif %}
@@ -261,9 +274,8 @@
{%- do network_vlan_ranges.append(['physnet3',server.backend.get('ironic_vlan_range')]|join(":")) %}
{%- endif %}
-{%- for physnet, params in server.backend.get('physnets', {}).iteritems() %}
-{%- do network_vlan_ranges.append([physnet, params.get('vlan_range')]|join(":") if params.get('vlan_range', False) else physnet) %}
-{%- endfor %}
+{%- endif %}
+
network_vlan_ranges = {{ ','.join(network_vlan_ranges) }}
[ml2_type_vxlan]
diff --git a/neutron/files/pike/ml2_conf.ini b/neutron/files/pike/ml2_conf.ini
index 88c4c8e..aaee0b0 100644
--- a/neutron/files/pike/ml2_conf.ini
+++ b/neutron/files/pike/ml2_conf.ini
@@ -170,6 +170,13 @@
# (list value)
#physical_network_mtus =
{%- set physical_network_mtus = [] %}
+
+{%- for physnet, params in server.backend.get('physnets', {}).iteritems() %}
+{%- do physical_network_mtus.append([physnet, params.get('mtu')]|join(":")) if params.get('mtu', False) %}
+{%- endfor %}
+
+{%- if not physical_network_mtus %}
+
{%- if server.get('external_access', True) %}
{%- do physical_network_mtus.append(['physnet1',server.backend.get('external_mtu', '1500')]|join(":")) %}
{%- endif %}
@@ -180,9 +187,8 @@
{%- do physical_network_mtus.append(['physnet3',server.backend.get('ironic_net_mtu', server.backend.get('external_mtu', '1500'))]|join(":")) %}
{%- endif %}
-{%- for physnet, params in server.backend.get('physnets', {}).iteritems() %}
-{%- do physical_network_mtus.append([physnet, params.get('mtu')]|join(":")) if params.get('mtu', False) %}
-{%- endfor %}
+{%- endif %}
+
physical_network_mtus = {{ ','.join(physical_network_mtus) }}
# Default network type for external networks when no provider attributes are
@@ -253,8 +259,14 @@
# specifying physical_network names usable for VLAN provider and tenant
# networks, as well as ranges of VLAN tags on each available for allocation to
# tenant networks. (list value)
-#network_vlan_ranges =
{%- set network_vlan_ranges = [] %}
+
+{%- for physnet, params in server.backend.get('physnets', {}).iteritems() %}
+{%- do network_vlan_ranges.append([physnet, params.get('vlan_range')]|join(":") if params.get('vlan_range', False) else physnet) %}
+{%- endfor %}
+
+{%- if not network_vlan_ranges %}
+
{%- if server.backend.external_vlan_range is defined %}
{%- do network_vlan_ranges.append(['physnet1',server.backend.get('external_vlan_range')]|join(":")) %}
{%- endif %}
@@ -265,9 +277,8 @@
{%- do network_vlan_ranges.append(['physnet3',server.backend.get('ironic_vlan_range')]|join(":")) %}
{%- endif %}
-{%- for physnet, params in server.backend.get('physnets', {}).iteritems() %}
-{%- do network_vlan_ranges.append([physnet, params.get('vlan_range')]|join(":") if params.get('vlan_range', False)) %}
-{%- endfor %}
+{%- endif %}
+
network_vlan_ranges = {{ ','.join(network_vlan_ranges) }}
[ml2_type_vxlan]
diff --git a/neutron/files/queens/ml2_conf.ini b/neutron/files/queens/ml2_conf.ini
index 45e8708..d6cefbe 100644
--- a/neutron/files/queens/ml2_conf.ini
+++ b/neutron/files/queens/ml2_conf.ini
@@ -76,6 +76,13 @@
# (list value)
#physical_network_mtus =
{%- set physical_network_mtus = [] %}
+
+{%- for physnet, params in server.backend.get('physnets', {}).iteritems() %}
+{%- do physical_network_mtus.append([physnet, params.get('mtu')]|join(":")) if params.get('mtu', False) %}
+{%- endfor %}
+
+{%- if not physical_network_mtus %}
+
{%- if server.get('external_access', True) %}
{%- do physical_network_mtus.append(['physnet1',server.backend.get('external_mtu', '1500')]|join(":")) %}
{%- endif %}
@@ -86,9 +93,8 @@
{%- do physical_network_mtus.append(['physnet3',server.backend.get('ironic_net_mtu', server.backend.get('external_mtu', '1500'))]|join(":")) %}
{%- endif %}
-{%- for physnet, params in server.backend.get('physnets', {}).iteritems() %}
-{%- do physical_network_mtus.append([physnet, params.get('mtu')]|join(":")) if params.get('mtu', False) %}
-{%- endfor %}
+{%- endif %}
+
physical_network_mtus = {{ ','.join(physical_network_mtus) }}
# Default network type for external networks when no provider attributes are
@@ -161,6 +167,13 @@
# tenant networks. (list value)
#network_vlan_ranges =
{%- set network_vlan_ranges = [] %}
+
+{%- for physnet, params in server.backend.get('physnets', {}).iteritems() %}
+{%- do network_vlan_ranges.append([physnet, params.get('vlan_range')]|join(":") if params.get('vlan_range', False) else physnet) %}
+{%- endfor %}
+
+{%- if not network_vlan_ranges %}
+
{%- if server.backend.external_vlan_range is defined %}
{%- do network_vlan_ranges.append(['physnet1',server.backend.get('external_vlan_range')]|join(":")) %}
{%- endif %}
@@ -171,9 +184,8 @@
{%- do network_vlan_ranges.append(['physnet3',server.backend.get('ironic_vlan_range')]|join(":")) %}
{%- endif %}
-{%- for physnet, params in server.backend.get('physnets', {}).iteritems() %}
-{%- do network_vlan_ranges.append([physnet, params.get('vlan_range')]|join(":") if params.get('vlan_range', False) else physnet) %}
-{%- endfor %}
+{%- endif %}
+
network_vlan_ranges = {{ ','.join(network_vlan_ranges) }}
[ml2_type_vxlan]
diff --git a/tests/pillar/control_single.sls b/tests/pillar/control_single.sls
index 445806c..79894f7 100644
--- a/tests/pillar/control_single.sls
+++ b/tests/pillar/control_single.sls
@@ -18,6 +18,8 @@
token: token
tenant: admin
physnets:
+ external:
+ mtu: 1500
sriov_net:
mtu: 9000 # Optional, defaults to 1500
vlan_range: '100:200' # Optional