diff --git a/magnum/api/validation.py b/magnum/api/validation.py index 2facebf3b4..02c6b48e53 100644 --- a/magnum/api/validation.py +++ b/magnum/api/validation.py @@ -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 diff --git a/magnum/conductor/template_definition.py b/magnum/conductor/template_definition.py index 0f710be2d1..243c55a98c 100644 --- a/magnum/conductor/template_definition.py +++ b/magnum/conductor/template_definition.py @@ -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, diff --git a/magnum/tests/functional/common/datagen.py b/magnum/tests/functional/common/datagen.py index 5b6496df28..700bc1323f 100644 --- a/magnum/tests/functional/common/datagen.py +++ b/magnum/tests/functional/common/datagen.py @@ -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] diff --git a/magnum/tests/unit/conductor/handlers/test_swarm_bay_conductor.py b/magnum/tests/unit/conductor/handlers/test_swarm_bay_conductor.py index 4b5e9e9032..e6cfaaf226 100644 --- a/magnum/tests/unit/conductor/handlers/test_swarm_bay_conductor.py +++ b/magnum/tests/unit/conductor/handlers/test_swarm_bay_conductor.py @@ -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) diff --git a/magnum/tests/unit/conductor/test_template_definition.py b/magnum/tests/unit/conductor/test_template_definition.py index 9e72672ae1..bcbead0179 100644 --- a/magnum/tests/unit/conductor/test_template_definition.py +++ b/magnum/tests/unit/conductor/test_template_definition.py @@ -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)