Adds Magnum Container Network Model to Swarm

1. Updates network-driver API validation.
2. Updates AtomicSwarm template definition for swarm, flannel and
   labels.
3. Adds initial unit test.

Partially-Implements: blueprint extend-baymodel-net-attributes
Partially-Implements: blueprint conductor-template-net-update

Change-Id: Ia80f239bcbd29ae14de25ae3e915a49d9b9bafd1
This commit is contained in:
Daneyon Hansen 2015-11-13 00:10:41 +00:00
parent de1edaec40
commit 00b6cd9953
5 changed files with 34 additions and 9 deletions

View File

@ -36,7 +36,7 @@ baymodel_opts = [
help="Allowed network drivers for docker swarm baymodels. "
"Use 'all' keyword to allow all drivers supported "
"for swarm baymodels. Supported network drivers "
"include docker."),
"include docker and flannel."),
cfg.StrOpt('swarm_default_network_driver',
default='docker',
help="Default network driver for docker swarm baymodels."),
@ -156,7 +156,7 @@ class K8sValidator(Validator):
class SwarmValidator(Validator):
supported_drivers = ['docker']
supported_drivers = ['docker', 'flannel']
allowed_drivers = cfg.CONF.baymodel.swarm_allowed_network_drivers
default_driver = cfg.CONF.baymodel.swarm_default_network_driver

View File

@ -565,6 +565,8 @@ class AtomicSwarmTemplateDefinition(BaseTemplateDefinition):
self.add_parameter('external_network',
baymodel_attr='external_network_id',
required=True)
self.add_parameter('network_driver',
baymodel_attr='network_driver')
self.add_parameter('tls_disabled',
baymodel_attr='tls_disabled',
required=True)
@ -608,6 +610,12 @@ class AtomicSwarmTemplateDefinition(BaseTemplateDefinition):
extra_params['user_token'] = self._get_user_token(context, osc, bay)
extra_params['magnum_url'] = osc.magnum_url()
label_list = ['flannel_network_cidr', 'flannel_use_vxlan',
'flannel_network_subnetlen']
for label in label_list:
extra_params[label] = baymodel.labels.get(label)
return super(AtomicSwarmTemplateDefinition,
self).get_params(context, baymodel, bay,
extra_params=extra_params,

View File

@ -49,7 +49,7 @@ def generate_random_coe():
def generate_random_coe_dep_network_driver(coe):
allowed_driver_types = {
'kubernetes': ['flannel', None],
'swarm': ['docker', None],
'swarm': ['docker', 'flannel', None],
'mesos': ['docker', None],
}
driver_types = allowed_driver_types[coe]

View File

@ -39,7 +39,11 @@ class TestBayConductorWithSwarm(base.TestCase):
'https_proxy': 'https_proxy',
'no_proxy': 'no_proxy',
'tls_disabled': False,
'server_type': 'vm'
'server_type': 'vm',
'network_driver': 'network_driver',
'labels': {'flannel_network_cidr': '10.101.0.0/16',
'flannel_network_subnetlen': '26',
'flannel_use_vxlan': 'yes'}
}
self.bay_dict = {
'id': 1,
@ -89,8 +93,11 @@ class TestBayConductorWithSwarm(base.TestCase):
'user_token': 'fake_token',
'bay_uuid': 'some_uuid',
'magnum_url': self.mock_osc.magnum_url.return_value,
'tls_disabled': False
'tls_disabled': False,
'network_driver': 'network_driver',
'flannel_network_cidr': '10.101.0.0/16',
'flannel_network_subnetlen': '26',
'flannel_use_vxlan': 'yes'
}
self.assertEqual(expected, definition)
@ -101,7 +108,7 @@ class TestBayConductorWithSwarm(base.TestCase):
not_required = ['image_id', 'flavor_id', 'dns_nameserver',
'docker_volume_size', 'fixed_network', 'http_proxy',
'https_proxy', 'no_proxy']
'https_proxy', 'no_proxy', 'network_driver']
for key in not_required:
self.baymodel_dict[key] = None
self.bay_dict['discovery_url'] = 'https://discovery.etcd.io/test'
@ -122,7 +129,10 @@ class TestBayConductorWithSwarm(base.TestCase):
'user_token': 'fake_token',
'bay_uuid': 'some_uuid',
'magnum_url': self.mock_osc.magnum_url.return_value,
'tls_disabled': False
'tls_disabled': False,
'flannel_network_cidr': u'10.101.0.0/16',
'flannel_network_subnetlen': u'26',
'flannel_use_vxlan': u'yes'
}
self.assertEqual(expected, definition)

View File

@ -397,6 +397,10 @@ class AtomicSwarmTemplateDefinitionTestCase(base.TestCase):
mock_context.user_name = 'fake_user'
mock_context.tenant = 'fake_tenant'
flannel_cidr = mock_baymodel.labels.get('flannel_network_cidr')
flannel_subnet = mock_baymodel.labels.get('flannel_network_subnetlen')
flannel_vxlan = mock_baymodel.labels.get('flannel_use_vxlan')
swarm_def = tdef.AtomicSwarmTemplateDefinition()
swarm_def.get_params(mock_context, mock_baymodel, mock_bay)
@ -404,7 +408,10 @@ class AtomicSwarmTemplateDefinitionTestCase(base.TestCase):
expected_kwargs = {'extra_params': {
'discovery_url': 'fake_discovery_url',
'user_token': mock_context.auth_token,
'magnum_url': mock_osc.magnum_url.return_value}}
'magnum_url': mock_osc.magnum_url.return_value,
'flannel_network_cidr': flannel_cidr,
'flannel_use_vxlan': flannel_subnet,
'flannel_network_subnetlen': flannel_vxlan}}
mock_get_params.assert_called_once_with(mock_context, mock_baymodel,
mock_bay, **expected_kwargs)