Fixing inaccurate physnet mapping iterations

In order to handle situations, when external vlan ranges are not
applicable, we should iterate properly to generate config file.
Removing physnet1 hardcode in such case.

Pillar:

  neutron:
    server:
      external_access

is not set by default anywhere, so it would be True and this
patch does not break backward compatibility for physnet1 hardcode.

Adding ironic physnet handling

Customer-Found
Change-Id: Iead3b5e2ecfa072801b6e0766751e371e36e895f
diff --git a/README.rst b/README.rst
index 3b161e5..ac0797e 100644
--- a/README.rst
+++ b/README.rst
@@ -253,6 +253,40 @@
           enabled: false
 
 
+Disable physnet1 bridge
+-----------------------
+
+By default we have external access turned on, so among any physnets in
+your reclass there would be additional one: physnet1, which is mapped to
+br-floating
+
+If you need internal nets only without this bridge, remove br-floating
+and configurations mappings. Disable mappings for this bridge on
+neutron-servers:
+
+.. code-block:: yaml
+
+    neutron:
+      server:
+        external_access: false
+
+gateways:
+
+.. code-block:: yaml
+
+    neutron:
+      gateway:
+        external_access: false
+
+compute nodes:
+
+.. code-block:: yaml
+
+    neutron:
+      compute:
+        external_access: false
+
+
 Neutron VXLAN tenant networks with Network Nodes (non DVR)
 ----------------------------------------------------------
 
diff --git a/neutron/files/mitaka/ml2_conf.ini b/neutron/files/mitaka/ml2_conf.ini
index 19ce326..d9e9d9b 100644
--- a/neutron/files/mitaka/ml2_conf.ini
+++ b/neutron/files/mitaka/ml2_conf.ini
@@ -118,7 +118,17 @@
 # A list of mappings of physical networks to MTU values. The format of the mapping is <physnet>:<mtu val>. This mapping allows specifying a
 # physical network MTU value that differs from the default global_physnet_mtu value. (list value)
 #physical_network_mtus =
-physical_network_mtus =physnet1:{{ server.backend.get('external_mtu', '1500') }}{%- if "vlan" in server.backend.tenant_network_types %},physnet2:{{ server.backend.get('external_mtu', '1500') }}{%- endif %}
+{%- set physical_network_mtus = [] %}
+{%- if server.get('external_access', True) %}
+{%- do physical_network_mtus.append(['physnet1',server.backend.get('external_mtu', '1500')]|join(":")) %}
+{%- endif %}
+{%- if "vlan" in server.backend.tenant_network_types %}
+{%- do physical_network_mtus.append(['physnet2',server.backend.get('external_mtu', '1500')]|join(":")) %}
+{%- endif %}
+{%- if server.get('ironic_enabled', False) %}
+{%- do physical_network_mtus.append(['physnet3',server.backend.get('external_mtu', '1500')]|join(":")) %}
+{%- endif %}
+physical_network_mtus = {{ ','.join(physical_network_mtus) }}
 
 # Default network type for external networks when no provider attributes are specified. By default it is None, which means that if provider
 # attributes are not specified while creating external networks then they will have the same type as tenant networks. Allowed values for
@@ -175,8 +185,17 @@
 # List of <physical_network>:<vlan_min>:<vlan_max> or <physical_network> 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 =
-network_vlan_ranges = physnet1{%- if server.backend.external_vlan_range is defined %}:{{ server.backend.external_vlan_range }}{%- endif %}{%- if "vlan" in server.backend.tenant_network_types %},physnet2:{{ server.backend.tenant_vlan_range }}{%- endif %}
-
+{%- set 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 %}
+{%- if "vlan" in server.backend.tenant_network_types %}
+{%- do network_vlan_ranges.append(['physnet2',server.backend.get('tenant_vlan_range')]|join(":")) %}
+{%- endif %}
+{%- if server.get('ironic_enabled', False) %}
+{%- do network_vlan_ranges.append(['physnet3',server.backend.get('ironic_vlan_range')]|join(":")) %}
+{%- endif %}
+network_vlan_ranges = {{ ','.join(network_vlan_ranges) }}
 
 [ml2_type_vxlan]
 
diff --git a/neutron/files/newton/ml2_conf.ini b/neutron/files/newton/ml2_conf.ini
index 19ce326..d9e9d9b 100644
--- a/neutron/files/newton/ml2_conf.ini
+++ b/neutron/files/newton/ml2_conf.ini
@@ -118,7 +118,17 @@
 # A list of mappings of physical networks to MTU values. The format of the mapping is <physnet>:<mtu val>. This mapping allows specifying a
 # physical network MTU value that differs from the default global_physnet_mtu value. (list value)
 #physical_network_mtus =
-physical_network_mtus =physnet1:{{ server.backend.get('external_mtu', '1500') }}{%- if "vlan" in server.backend.tenant_network_types %},physnet2:{{ server.backend.get('external_mtu', '1500') }}{%- endif %}
+{%- set physical_network_mtus = [] %}
+{%- if server.get('external_access', True) %}
+{%- do physical_network_mtus.append(['physnet1',server.backend.get('external_mtu', '1500')]|join(":")) %}
+{%- endif %}
+{%- if "vlan" in server.backend.tenant_network_types %}
+{%- do physical_network_mtus.append(['physnet2',server.backend.get('external_mtu', '1500')]|join(":")) %}
+{%- endif %}
+{%- if server.get('ironic_enabled', False) %}
+{%- do physical_network_mtus.append(['physnet3',server.backend.get('external_mtu', '1500')]|join(":")) %}
+{%- endif %}
+physical_network_mtus = {{ ','.join(physical_network_mtus) }}
 
 # Default network type for external networks when no provider attributes are specified. By default it is None, which means that if provider
 # attributes are not specified while creating external networks then they will have the same type as tenant networks. Allowed values for
@@ -175,8 +185,17 @@
 # List of <physical_network>:<vlan_min>:<vlan_max> or <physical_network> 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 =
-network_vlan_ranges = physnet1{%- if server.backend.external_vlan_range is defined %}:{{ server.backend.external_vlan_range }}{%- endif %}{%- if "vlan" in server.backend.tenant_network_types %},physnet2:{{ server.backend.tenant_vlan_range }}{%- endif %}
-
+{%- set 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 %}
+{%- if "vlan" in server.backend.tenant_network_types %}
+{%- do network_vlan_ranges.append(['physnet2',server.backend.get('tenant_vlan_range')]|join(":")) %}
+{%- endif %}
+{%- if server.get('ironic_enabled', False) %}
+{%- do network_vlan_ranges.append(['physnet3',server.backend.get('ironic_vlan_range')]|join(":")) %}
+{%- endif %}
+network_vlan_ranges = {{ ','.join(network_vlan_ranges) }}
 
 [ml2_type_vxlan]
 
diff --git a/neutron/files/ocata/ml2_conf.ini b/neutron/files/ocata/ml2_conf.ini
index 8f5e8dd..f7e9f78 100644
--- a/neutron/files/ocata/ml2_conf.ini
+++ b/neutron/files/ocata/ml2_conf.ini
@@ -166,7 +166,17 @@
 # network MTU value that differs from the default global_physnet_mtu value.
 # (list value)
 #physical_network_mtus =
-physical_network_mtus =physnet1:{{ server.backend.get('external_mtu', '1500') }}{%- if "vlan" in server.backend.tenant_network_types %},physnet2:{{ server.backend.get('external_mtu', '1500') }}{%- endif %}
+{%- set physical_network_mtus = [] %}
+{%- if server.get('external_access', True) %}
+{%- do physical_network_mtus.append(['physnet1',server.backend.get('external_mtu', '1500')]|join(":")) %}
+{%- endif %}
+{%- if "vlan" in server.backend.tenant_network_types %}
+{%- do physical_network_mtus.append(['physnet2',server.backend.get('external_mtu', '1500')]|join(":")) %}
+{%- endif %}
+{%- if server.get('ironic_enabled', False) %}
+{%- do physical_network_mtus.append(['physnet3',server.backend.get('external_mtu', '1500')]|join(":")) %}
+{%- endif %}
+physical_network_mtus = {{ ','.join(physical_network_mtus) }}
 
 # Default network type for external networks when no provider attributes are
 # specified. By default it is None, which means that if provider attributes are
@@ -235,8 +245,17 @@
 # networks, as well as ranges of VLAN tags on each available for allocation to
 # tenant networks. (list value)
 #network_vlan_ranges =
-network_vlan_ranges = physnet1{%- if server.backend.external_vlan_range is defined %}:{{ server.backend.external_vlan_range }}{%- endif %}{%- if "vlan" in server.backend.tenant_network_types %},physnet2:{{ server.backend.tenant_vlan_range }}{%- endif %}
-
+{%- set 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 %}
+{%- if "vlan" in server.backend.tenant_network_types %}
+{%- do network_vlan_ranges.append(['physnet2',server.backend.get('tenant_vlan_range')]|join(":")) %}
+{%- endif %}
+{%- if server.get('ironic_enabled', False) %}
+{%- do network_vlan_ranges.append(['physnet3',server.backend.get('ironic_vlan_range')]|join(":")) %}
+{%- endif %}
+network_vlan_ranges = {{ ','.join(network_vlan_ranges) }}
 
 [ml2_type_vxlan]