Add default-tenant-network-type config option
- Add default-tenant-network-type config option to allow the default network type for a tenant network to be set - Fix rendering of overlay-network-type so that an empty string is valid Change-Id: Ib2325d273a0dd5e637f36113b951130387902777 Closes-Bug: 1533651
This commit is contained in:
parent
a50bc93a9b
commit
446de085a0
@ -140,7 +140,8 @@ options:
|
|||||||
gre
|
gre
|
||||||
vxlan
|
vxlan
|
||||||
.
|
.
|
||||||
Multiple types can be provided - field is space delimited.
|
Multiple types can be provided - field is space delimited. To disable
|
||||||
|
overlay networks set to the empty string ''
|
||||||
flat-network-providers:
|
flat-network-providers:
|
||||||
type: string
|
type: string
|
||||||
default:
|
default:
|
||||||
@ -617,3 +618,8 @@ options:
|
|||||||
http://bugs.launchpad.net/charms providing an explanation of why the
|
http://bugs.launchpad.net/charms providing an explanation of why the
|
||||||
config was needed so that we may consider it for inclusion as a
|
config was needed so that we may consider it for inclusion as a
|
||||||
natively supported config in the the charm.
|
natively supported config in the the charm.
|
||||||
|
default-tenant-network-type:
|
||||||
|
type: string
|
||||||
|
default:
|
||||||
|
description: |
|
||||||
|
The default type for a tenant network e.g. vxlan, vlan, gre etc
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
# See the License for the specific language governing permissions and
|
# See the License for the specific language governing permissions and
|
||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
from charmhelpers.core.hookenv import (
|
from charmhelpers.core.hookenv import (
|
||||||
config,
|
config,
|
||||||
relation_ids,
|
relation_ids,
|
||||||
@ -31,7 +33,11 @@ from charmhelpers.contrib.openstack.utils import (
|
|||||||
VLAN = 'vlan'
|
VLAN = 'vlan'
|
||||||
VXLAN = 'vxlan'
|
VXLAN = 'vxlan'
|
||||||
GRE = 'gre'
|
GRE = 'gre'
|
||||||
|
FLAT = 'flat'
|
||||||
|
LOCAL = 'local'
|
||||||
OVERLAY_NET_TYPES = [VXLAN, GRE]
|
OVERLAY_NET_TYPES = [VXLAN, GRE]
|
||||||
|
NON_OVERLAY_NET_TYPES = [VLAN, FLAT, LOCAL]
|
||||||
|
TENANT_NET_TYPES = [VXLAN, GRE, VLAN, FLAT, LOCAL]
|
||||||
|
|
||||||
|
|
||||||
def get_l2population():
|
def get_l2population():
|
||||||
@ -39,13 +45,42 @@ def get_l2population():
|
|||||||
return config('l2-population') if plugin == "ovs" else False
|
return config('l2-population') if plugin == "ovs" else False
|
||||||
|
|
||||||
|
|
||||||
def get_overlay_network_type():
|
def _get_overlay_network_type():
|
||||||
overlay_networks = config('overlay-network-type').split()
|
overlay_networks = config('overlay-network-type').split()
|
||||||
for overlay_net in overlay_networks:
|
for overlay_net in overlay_networks:
|
||||||
if overlay_net not in OVERLAY_NET_TYPES:
|
if overlay_net not in OVERLAY_NET_TYPES:
|
||||||
raise ValueError('Unsupported overlay-network-type %s'
|
raise ValueError('Unsupported overlay-network-type %s'
|
||||||
% overlay_net)
|
% overlay_net)
|
||||||
return ','.join(overlay_networks)
|
return overlay_networks
|
||||||
|
|
||||||
|
|
||||||
|
def get_overlay_network_type():
|
||||||
|
return ','.join(_get_overlay_network_type())
|
||||||
|
|
||||||
|
|
||||||
|
def _get_tenant_network_types():
|
||||||
|
default_tenant_network_type = config('default-tenant-network-type')
|
||||||
|
tenant_network_types = _get_overlay_network_type()
|
||||||
|
tenant_network_types.extend(NON_OVERLAY_NET_TYPES)
|
||||||
|
if default_tenant_network_type:
|
||||||
|
if (default_tenant_network_type in TENANT_NET_TYPES and
|
||||||
|
default_tenant_network_type in tenant_network_types):
|
||||||
|
tenant_network_types[:0] = [default_tenant_network_type]
|
||||||
|
else:
|
||||||
|
raise ValueError('Unsupported or unconfigured '
|
||||||
|
'default-tenant-network-type'
|
||||||
|
' {}'.format(default_tenant_network_type))
|
||||||
|
# Dedupe list but preserve order
|
||||||
|
return list(OrderedDict.fromkeys(tenant_network_types))
|
||||||
|
|
||||||
|
|
||||||
|
def get_tenant_network_types():
|
||||||
|
'''Get the configured tenant network types
|
||||||
|
|
||||||
|
@return: comma delimited string of configured tenant
|
||||||
|
network types.
|
||||||
|
'''
|
||||||
|
return ','.join(_get_tenant_network_types())
|
||||||
|
|
||||||
|
|
||||||
def get_l3ha():
|
def get_l3ha():
|
||||||
@ -124,6 +159,10 @@ class NeutronCCContext(context.NeutronContext):
|
|||||||
def neutron_l2_population(self):
|
def neutron_l2_population(self):
|
||||||
return get_l2population()
|
return get_l2population()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def neutron_tenant_network_types(self):
|
||||||
|
return get_tenant_network_types()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def neutron_overlay_network_type(self):
|
def neutron_overlay_network_type(self):
|
||||||
return get_overlay_network_type()
|
return get_overlay_network_type()
|
||||||
@ -195,6 +234,7 @@ class NeutronCCContext(context.NeutronContext):
|
|||||||
ctxt['min_l3_agents_per_router'] = \
|
ctxt['min_l3_agents_per_router'] = \
|
||||||
config('min-l3-agents-per-router')
|
config('min-l3-agents-per-router')
|
||||||
ctxt['dhcp_agents_per_network'] = config('dhcp-agents-per-network')
|
ctxt['dhcp_agents_per_network'] = config('dhcp-agents-per-network')
|
||||||
|
ctxt['tenant_network_types'] = self.neutron_tenant_network_types
|
||||||
ctxt['overlay_network_type'] = self.neutron_overlay_network_type
|
ctxt['overlay_network_type'] = self.neutron_overlay_network_type
|
||||||
ctxt['external_network'] = config('neutron-external-network')
|
ctxt['external_network'] = config('neutron-external-network')
|
||||||
release = os_release('neutron-server')
|
release = os_release('neutron-server')
|
||||||
|
@ -8,8 +8,8 @@
|
|||||||
type_drivers = local,flat
|
type_drivers = local,flat
|
||||||
mechanism_drivers = calico
|
mechanism_drivers = calico
|
||||||
{% else -%}
|
{% else -%}
|
||||||
type_drivers = {{ overlay_network_type }},vlan,flat,local
|
type_drivers = {{ tenant_network_types }}
|
||||||
tenant_network_types = {{ overlay_network_type }},vlan,flat,local
|
tenant_network_types = {{ tenant_network_types }}
|
||||||
mechanism_drivers = openvswitch,hyperv,l2population
|
mechanism_drivers = openvswitch,hyperv,l2population
|
||||||
|
|
||||||
[ml2_type_gre]
|
[ml2_type_gre]
|
||||||
|
@ -12,8 +12,8 @@ extension_drivers=port_security
|
|||||||
type_drivers = local,flat
|
type_drivers = local,flat
|
||||||
mechanism_drivers = calico
|
mechanism_drivers = calico
|
||||||
{% else -%}
|
{% else -%}
|
||||||
type_drivers = {{ overlay_network_type }},vlan,flat,local
|
type_drivers = {{ tenant_network_types }}
|
||||||
tenant_network_types = {{ overlay_network_type }},vlan,flat,local
|
tenant_network_types = {{ tenant_network_types }}
|
||||||
{% if enable_sriov %}
|
{% if enable_sriov %}
|
||||||
mechanism_drivers = openvswitch,l2population,sriovnicswitch
|
mechanism_drivers = openvswitch,l2population,sriovnicswitch
|
||||||
{% elif enable_hyperv %}
|
{% elif enable_hyperv %}
|
||||||
|
@ -49,21 +49,64 @@ class GeneralTests(CharmTestCase):
|
|||||||
self.test_config.set('neutron-plugin', 'nsx')
|
self.test_config.set('neutron-plugin', 'nsx')
|
||||||
self.assertEquals(context.get_l2population(), False)
|
self.assertEquals(context.get_l2population(), False)
|
||||||
|
|
||||||
def test_get_overlay_network_type(self):
|
def test_get_tenant_network_types(self):
|
||||||
self.test_config.set('overlay-network-type', 'gre')
|
self.test_config.set('overlay-network-type', 'gre')
|
||||||
self.assertEquals(context.get_overlay_network_type(), 'gre')
|
self.assertEquals(
|
||||||
|
context._get_tenant_network_types(),
|
||||||
|
['gre', 'vlan', 'flat', 'local'])
|
||||||
|
|
||||||
def test_get_overlay_network_type_multi(self):
|
def test_get_tenant_network_types_multi(self):
|
||||||
self.test_config.set('overlay-network-type', 'gre vxlan')
|
self.test_config.set('overlay-network-type', 'gre vxlan')
|
||||||
self.assertEquals(context.get_overlay_network_type(), 'gre,vxlan')
|
self.assertEquals(
|
||||||
|
context._get_tenant_network_types(),
|
||||||
|
['gre', 'vxlan', 'vlan', 'flat', 'local'])
|
||||||
|
|
||||||
def test_get_overlay_network_type_unsupported(self):
|
def test_get_tenant_network_types_unsupported(self):
|
||||||
self.test_config.set('overlay-network-type', 'tokenring')
|
self.test_config.set('overlay-network-type', 'tokenring')
|
||||||
with self.assertRaises(ValueError) as _exceptctxt:
|
with self.assertRaises(ValueError) as _exceptctxt:
|
||||||
context.get_overlay_network_type()
|
context._get_tenant_network_types()
|
||||||
self.assertEqual(_exceptctxt.exception.message,
|
self.assertEqual(_exceptctxt.exception.message,
|
||||||
'Unsupported overlay-network-type tokenring')
|
'Unsupported overlay-network-type tokenring')
|
||||||
|
|
||||||
|
def test_get_tenant_network_types_default(self):
|
||||||
|
self.test_config.set('overlay-network-type', 'gre vxlan')
|
||||||
|
self.test_config.set('default-tenant-network-type', 'vxlan')
|
||||||
|
self.assertEquals(
|
||||||
|
context._get_tenant_network_types(),
|
||||||
|
['vxlan', 'gre', 'vlan', 'flat', 'local'])
|
||||||
|
|
||||||
|
def test_get_tenant_network_types_default_dup(self):
|
||||||
|
self.test_config.set('overlay-network-type', 'gre')
|
||||||
|
self.test_config.set('default-tenant-network-type', 'vlan')
|
||||||
|
self.assertEquals(
|
||||||
|
context._get_tenant_network_types(),
|
||||||
|
['vlan', 'gre', 'flat', 'local'])
|
||||||
|
|
||||||
|
def test_get_tenant_network_types_empty(self):
|
||||||
|
self.test_config.set('overlay-network-type', '')
|
||||||
|
self.test_config.set('default-tenant-network-type', 'vlan')
|
||||||
|
self.assertEquals(
|
||||||
|
context._get_tenant_network_types(),
|
||||||
|
['vlan', 'flat', 'local'])
|
||||||
|
|
||||||
|
def test_get_tenant_network_types_unsupported_default(self):
|
||||||
|
self.test_config.set('overlay-network-type', '')
|
||||||
|
self.test_config.set('default-tenant-network-type', 'whizzy')
|
||||||
|
with self.assertRaises(ValueError) as _exceptctxt:
|
||||||
|
context._get_tenant_network_types()
|
||||||
|
self.assertEqual(_exceptctxt.exception.message,
|
||||||
|
'Unsupported or unconfigured '
|
||||||
|
'default-tenant-network-type whizzy')
|
||||||
|
|
||||||
|
def test_get_tenant_network_types_unconfigured_default(self):
|
||||||
|
self.test_config.set('overlay-network-type', 'gre')
|
||||||
|
self.test_config.set('default-tenant-network-type', 'vxlan')
|
||||||
|
with self.assertRaises(ValueError) as _exceptctxt:
|
||||||
|
context._get_tenant_network_types()
|
||||||
|
self.assertEqual(_exceptctxt.exception.message,
|
||||||
|
'Unsupported or unconfigured '
|
||||||
|
'default-tenant-network-type vxlan')
|
||||||
|
|
||||||
def test_get_l3ha(self):
|
def test_get_l3ha(self):
|
||||||
self.test_config.set('enable-l3ha', True)
|
self.test_config.set('enable-l3ha', True)
|
||||||
self.test_config.set('overlay-network-type', 'gre')
|
self.test_config.set('overlay-network-type', 'gre')
|
||||||
@ -252,7 +295,6 @@ class HAProxyContextTest(CharmTestCase):
|
|||||||
_get_netmask_for_address.return_value = '255.255.255.0'
|
_get_netmask_for_address.return_value = '255.255.255.0'
|
||||||
_kv().get.return_value = 'abcdefghijklmnopqrstuvwxyz123456'
|
_kv().get.return_value = 'abcdefghijklmnopqrstuvwxyz123456'
|
||||||
service_ports = {'neutron-server': [9696, 9686]}
|
service_ports = {'neutron-server': [9696, 9686]}
|
||||||
self.maxDiff = None
|
|
||||||
ctxt_data = {
|
ctxt_data = {
|
||||||
'local_host': '127.0.0.1',
|
'local_host': '127.0.0.1',
|
||||||
'haproxy_host': '0.0.0.0',
|
'haproxy_host': '0.0.0.0',
|
||||||
@ -326,6 +368,7 @@ class NeutronCCContextTest(CharmTestCase):
|
|||||||
'verbose': True,
|
'verbose': True,
|
||||||
'l2_population': True,
|
'l2_population': True,
|
||||||
'overlay_network_type': 'gre',
|
'overlay_network_type': 'gre',
|
||||||
|
'tenant_network_types': 'gre,vlan,flat,local',
|
||||||
'quota_floatingip': 50,
|
'quota_floatingip': 50,
|
||||||
'quota_health_monitors': -1,
|
'quota_health_monitors': -1,
|
||||||
'quota_member': -1,
|
'quota_member': -1,
|
||||||
@ -365,6 +408,7 @@ class NeutronCCContextTest(CharmTestCase):
|
|||||||
'verbose': True,
|
'verbose': True,
|
||||||
'l2_population': True,
|
'l2_population': True,
|
||||||
'overlay_network_type': 'vxlan',
|
'overlay_network_type': 'vxlan',
|
||||||
|
'tenant_network_types': 'vxlan,vlan,flat,local',
|
||||||
'quota_floatingip': 50,
|
'quota_floatingip': 50,
|
||||||
'quota_health_monitors': -1,
|
'quota_health_monitors': -1,
|
||||||
'quota_member': -1,
|
'quota_member': -1,
|
||||||
@ -406,6 +450,7 @@ class NeutronCCContextTest(CharmTestCase):
|
|||||||
'verbose': True,
|
'verbose': True,
|
||||||
'l2_population': False,
|
'l2_population': False,
|
||||||
'overlay_network_type': 'gre',
|
'overlay_network_type': 'gre',
|
||||||
|
'tenant_network_types': 'gre,vlan,flat,local',
|
||||||
'max_l3_agents_per_router': 2,
|
'max_l3_agents_per_router': 2,
|
||||||
'min_l3_agents_per_router': 2,
|
'min_l3_agents_per_router': 2,
|
||||||
'dhcp_agents_per_network': 3,
|
'dhcp_agents_per_network': 3,
|
||||||
@ -446,6 +491,7 @@ class NeutronCCContextTest(CharmTestCase):
|
|||||||
'verbose': True,
|
'verbose': True,
|
||||||
'l2_population': True,
|
'l2_population': True,
|
||||||
'overlay_network_type': 'gre',
|
'overlay_network_type': 'gre',
|
||||||
|
'tenant_network_types': 'gre,vlan,flat,local',
|
||||||
'quota_floatingip': 50,
|
'quota_floatingip': 50,
|
||||||
'quota_health_monitors': -1,
|
'quota_health_monitors': -1,
|
||||||
'quota_member': -1,
|
'quota_member': -1,
|
||||||
|
Loading…
Reference in New Issue
Block a user