Merge "Support several vlan ranges per physnet"
diff --git a/README.rst b/README.rst
index 00a74c4..1d03977 100644
--- a/README.rst
+++ b/README.rst
@@ -743,7 +743,7 @@
                 - flat # possible values - 'flat' or 'vlan'
             sriov_net:
               mtu: 9000 # Optional, defaults to 1500
-              vlan_range: '100:200' # Optional
+              vlan_range: '100:200,300:400' # Optional
               types:
                 - vlan
             ext_net2:
diff --git a/neutron/files/ocata/ml2_conf.ini b/neutron/files/ocata/ml2_conf.ini
index 561f518..3f070d9 100644
--- a/neutron/files/ocata/ml2_conf.ini
+++ b/neutron/files/ocata/ml2_conf.ini
@@ -281,7 +281,15 @@
 {%- 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) if 'vlan' in params.get('types', ['vlan']) %}
+{%-   if 'vlan' in params.get('types', ['vlan']) %}
+{%-     if params.get('vlan_range', False) %}
+{%-       for vlan_range in params.get('vlan_range').split(',') %}
+{%-         do network_vlan_ranges.append([physnet, vlan_range]|join(":")) %}
+{%-       endfor %}
+{%-     else %}
+{%-       do network_vlan_ranges.append(physnet) %}
+{%-     endif %}
+{%-   endif %}
 {%- endfor %}
 
 {%- if not network_vlan_ranges %}
diff --git a/neutron/files/pike/ml2_conf.ini b/neutron/files/pike/ml2_conf.ini
index a953f0a..17818ee 100644
--- a/neutron/files/pike/ml2_conf.ini
+++ b/neutron/files/pike/ml2_conf.ini
@@ -284,7 +284,15 @@
 {%- 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) if 'vlan' in params.get('types', ['vlan']) %}
+{%-   if 'vlan' in params.get('types', ['vlan']) %}
+{%-     if params.get('vlan_range', False) %}
+{%-       for vlan_range in params.get('vlan_range').split(',') %}
+{%-         do network_vlan_ranges.append([physnet, vlan_range]|join(":")) %}
+{%-       endfor %}
+{%-     else %}
+{%-       do network_vlan_ranges.append(physnet) %}
+{%-     endif %}
+{%-   endif %}
 {%- endfor %}
 
 {%- if not network_vlan_ranges %}
diff --git a/neutron/files/queens/ml2_conf.ini b/neutron/files/queens/ml2_conf.ini
index 6f0ee0d..bb2f126 100644
--- a/neutron/files/queens/ml2_conf.ini
+++ b/neutron/files/queens/ml2_conf.ini
@@ -181,7 +181,15 @@
 {%- 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) if 'vlan' in params.get('types', ['vlan']) %}
+{%-   if 'vlan' in params.get('types', ['vlan']) %}
+{%-     if params.get('vlan_range', False) %}
+{%-       for vlan_range in params.get('vlan_range').split(',') %}
+{%-         do network_vlan_ranges.append([physnet, vlan_range]|join(":")) %}
+{%-       endfor %}
+{%-     else %}
+{%-       do network_vlan_ranges.append(physnet) %}
+{%-     endif %}
+{%-   endif %}
 {%- endfor %}
 
 {%- if not network_vlan_ranges %}
diff --git a/tests/pillar/control_single.sls b/tests/pillar/control_single.sls
index f6fb4e2..75113f5 100644
--- a/tests/pillar/control_single.sls
+++ b/tests/pillar/control_single.sls
@@ -25,7 +25,7 @@
             - flat
         sriov_net:
           mtu: 9000 # Optional, defaults to 1500
-          vlan_range: '100:200' # Optional
+          vlan_range: '100:200,300:400' # Optional
           types:
             - vlan
         ext_net2: