From 295ef945f64b6d95dce57ff5eb0e44d2e66cf9f0 Mon Sep 17 00:00:00 2001 From: Spyros Trigazis Date: Mon, 3 Apr 2017 08:39:10 +0200 Subject: [PATCH] swarm: Add docker_volume_type label * add docker_volume_type for the cinder volumes which are used for docker storage. * add default_docker_volume_type configuration option Related-Bug: #1678153 Change-Id: Ie18096acf24873ef91a904df4f1a84694a2bb644 --- devstack/lib/magnum | 5 ++++ magnum/conf/cinder.py | 23 +++++++++++++++---- .../drivers/heat/swarm_fedora_template_def.py | 6 +++++ .../templates/cluster.yaml | 8 +++++++ .../templates/swarmmaster.yaml | 7 ++++++ .../templates/swarmnode.yaml | 7 ++++++ .../handlers/test_swarm_cluster_conductor.py | 21 +++++++++++------ .../unit/drivers/test_template_definition.py | 5 +++- 8 files changed, 70 insertions(+), 12 deletions(-) diff --git a/devstack/lib/magnum b/devstack/lib/magnum index 6c0ffa74f3..2a6e49cd77 100644 --- a/devstack/lib/magnum +++ b/devstack/lib/magnum @@ -215,6 +215,11 @@ function create_magnum_conf { iniset $MAGNUM_CONF docker_registry swift_region $REGION_NAME iniset $MAGNUM_CONF docker_registry swift_registry_container $MAGNUM_SWIFT_REGISTRY_CONTAINER fi + + # Get the default volume type from cinder.conf and set the coresponding + # default in magnum.conf + default_volume_type=$(iniget /etc/cinder/cinder.conf DEFAULT default_volume_type) + iniset $MAGNUM_CONF cinder default_docker_volume_type $default_volume_type } function create_api_paste_conf { diff --git a/magnum/conf/cinder.py b/magnum/conf/cinder.py index f4116d907b..f765663e20 100644 --- a/magnum/conf/cinder.py +++ b/magnum/conf/cinder.py @@ -14,8 +14,20 @@ from oslo_config import cfg from magnum.i18n import _ -cinder_group = cfg.OptGroup(name='cinder_client', - title='Options for the Cinder client') +cinder_group = cfg.OptGroup( + name='cinder', + title='Options for the Cinder configuration') + +cinder_client_group = cfg.OptGroup( + name='cinder_client', + title='Options for the Cinder client') + +cinder_opts = [ + cfg.StrOpt('default_docker_volume_type', + help=_('The default docker volume_type to use for volumes ' + 'used for docker storage. To use the cinder volumes ' + 'for docker storage, you need to select a default ' + 'value.'))] cinder_client_opts = [ cfg.StrOpt('region_name', @@ -25,10 +37,13 @@ cinder_client_opts = [ def register_opts(conf): conf.register_group(cinder_group) - conf.register_opts(cinder_client_opts, group=cinder_group) + conf.register_group(cinder_client_group) + conf.register_opts(cinder_opts, group=cinder_group) + conf.register_opts(cinder_client_opts, group=cinder_client_group) def list_opts(): return { - cinder_group: cinder_client_opts + cinder_group: cinder_opts, + cinder_client_group: cinder_client_opts } diff --git a/magnum/drivers/heat/swarm_fedora_template_def.py b/magnum/drivers/heat/swarm_fedora_template_def.py index 148cdcd274..29ea1534be 100644 --- a/magnum/drivers/heat/swarm_fedora_template_def.py +++ b/magnum/drivers/heat/swarm_fedora_template_def.py @@ -103,6 +103,12 @@ class SwarmFedoraTemplateDefinition(template_def.BaseTemplateDefinition): extra_params['auth_url'] = context.auth_url + # set docker_volume_type + # use the configuration default if None provided + docker_volume_type = cluster_template.labels.get( + 'docker_volume_type', CONF.cinder.default_docker_volume_type) + extra_params['docker_volume_type'] = docker_volume_type + for label in label_list: extra_params[label] = cluster_template.labels.get(label) diff --git a/magnum/drivers/swarm_fedora_atomic_v1/templates/cluster.yaml b/magnum/drivers/swarm_fedora_atomic_v1/templates/cluster.yaml index 402e1130be..bc1927c178 100644 --- a/magnum/drivers/swarm_fedora_atomic_v1/templates/cluster.yaml +++ b/magnum/drivers/swarm_fedora_atomic_v1/templates/cluster.yaml @@ -130,6 +130,12 @@ parameters: storage default: 0 + docker_volume_type: + type: string + description: > + type of a cinder volume to allocate to docker for container/image + storage + docker_storage_driver: type: string description: docker storage driver name @@ -351,6 +357,7 @@ resources: server_image: {get_param: server_image} server_flavor: {get_param: master_flavor} docker_volume_size: {get_param: docker_volume_size} + docker_volume_type: {get_param: docker_volume_type} docker_storage_driver: {get_param: docker_storage_driver} fixed_network_id: {get_attr: [network, fixed_network]} fixed_subnet_id: {get_attr: [network, fixed_subnet]} @@ -395,6 +402,7 @@ resources: server_image: {get_param: server_image} server_flavor: {get_param: node_flavor} docker_volume_size: {get_param: docker_volume_size} + docker_volume_type: {get_param: docker_volume_type} docker_storage_driver: {get_param: docker_storage_driver} fixed_network_id: {get_attr: [network, fixed_network]} fixed_subnet_id: {get_attr: [network, fixed_subnet]} diff --git a/magnum/drivers/swarm_fedora_atomic_v1/templates/swarmmaster.yaml b/magnum/drivers/swarm_fedora_atomic_v1/templates/swarmmaster.yaml index 3af471a2e7..6edc0ed856 100644 --- a/magnum/drivers/swarm_fedora_atomic_v1/templates/swarmmaster.yaml +++ b/magnum/drivers/swarm_fedora_atomic_v1/templates/swarmmaster.yaml @@ -16,6 +16,12 @@ parameters: size of a cinder volume to allocate to docker for container/image storage + docker_volume_type: + type: string + description: > + type of a cinder volume to allocate to docker for container/image + storage + docker_storage_driver: type: string description: docker storage driver name @@ -452,6 +458,7 @@ resources: type: Magnum::Optional::Cinder::Volume properties: size: {get_param: docker_volume_size} + volume_type: {get_param: docker_volume_type} docker_volume_attach: type: Magnum::Optional::Cinder::VolumeAttachment diff --git a/magnum/drivers/swarm_fedora_atomic_v1/templates/swarmnode.yaml b/magnum/drivers/swarm_fedora_atomic_v1/templates/swarmnode.yaml index 9f75db9c1b..c887a151b8 100644 --- a/magnum/drivers/swarm_fedora_atomic_v1/templates/swarmnode.yaml +++ b/magnum/drivers/swarm_fedora_atomic_v1/templates/swarmnode.yaml @@ -25,6 +25,12 @@ parameters: size of a cinder volume to allocate to docker for container/image storage + docker_volume_type: + type: string + description: > + type of a cinder volume to allocate to docker for container/image + storage + docker_storage_driver: type: string description: docker storage driver name @@ -392,6 +398,7 @@ resources: type: Magnum::Optional::Cinder::Volume properties: size: {get_param: docker_volume_size} + volume_type: {get_param: docker_volume_type} docker_volume_attach: type: Magnum::Optional::Cinder::VolumeAttachment diff --git a/magnum/tests/unit/conductor/handlers/test_swarm_cluster_conductor.py b/magnum/tests/unit/conductor/handlers/test_swarm_cluster_conductor.py index e0085f1926..282ca2ebd4 100644 --- a/magnum/tests/unit/conductor/handlers/test_swarm_cluster_conductor.py +++ b/magnum/tests/unit/conductor/handlers/test_swarm_cluster_conductor.py @@ -48,7 +48,8 @@ class TestClusterConductorWithSwarm(base.TestCase): 'registry_enabled': False, 'server_type': 'vm', 'network_driver': 'network_driver', - 'labels': {'flannel_network_cidr': '10.101.0.0/16', + 'labels': {'docker_volume_type': 'lvmdriver-1', + 'flannel_network_cidr': '10.101.0.0/16', 'flannel_network_subnetlen': '26', 'flannel_backend': 'vxlan', 'rexray_preempt': 'False', @@ -150,7 +151,8 @@ class TestClusterConductorWithSwarm(base.TestCase): 'swarm_version': 'fake-version', 'swarm_strategy': u'spread', 'volume_driver': 'rexray', - 'rexray_preempt': 'False' + 'rexray_preempt': 'False', + 'docker_volume_type': 'lvmdriver-1' } self.assertEqual(expected, definition) self.assertEqual( @@ -225,7 +227,8 @@ class TestClusterConductorWithSwarm(base.TestCase): 'swarm_version': 'fake-version', 'swarm_strategy': u'spread', 'volume_driver': 'rexray', - 'rexray_preempt': 'False' + 'rexray_preempt': 'False', + 'docker_volume_type': 'lvmdriver-1' } self.assertEqual(expected, definition) self.assertEqual( @@ -247,7 +250,8 @@ class TestClusterConductorWithSwarm(base.TestCase): 'docker_volume_size', 'fixed_network', 'http_proxy', 'https_proxy', 'no_proxy', 'network_driver', 'master_flavor_id', 'docker_storage_driver', - 'volume_driver', 'rexray_preempt', 'fixed_subnet'] + 'volume_driver', 'rexray_preempt', 'fixed_subnet', + 'docker_volume_type'] for key in not_required: self.cluster_template_dict[key] = None self.cluster_dict['discovery_url'] = 'https://discovery.etcd.io/test' @@ -290,7 +294,8 @@ class TestClusterConductorWithSwarm(base.TestCase): 'auth_url': 'http://192.168.10.10:5000/v3', 'swarm_version': 'fake-version', 'swarm_strategy': u'spread', - 'rexray_preempt': 'False' + 'rexray_preempt': 'False', + 'docker_volume_type': 'lvmdriver-1' } self.assertEqual(expected, definition) self.assertEqual( @@ -359,7 +364,8 @@ class TestClusterConductorWithSwarm(base.TestCase): 'swarm_version': 'fake-version', 'swarm_strategy': u'spread', 'volume_driver': 'rexray', - 'rexray_preempt': 'False' + 'rexray_preempt': 'False', + 'docker_volume_type': 'lvmdriver-1' } self.assertEqual(expected, definition) self.assertEqual( @@ -429,7 +435,8 @@ class TestClusterConductorWithSwarm(base.TestCase): 'swarm_version': 'fake-version', 'swarm_strategy': u'spread', 'volume_driver': 'rexray', - 'rexray_preempt': 'False' + 'rexray_preempt': 'False', + 'docker_volume_type': 'lvmdriver-1' } self.assertEqual(expected, definition) self.assertEqual( diff --git a/magnum/tests/unit/drivers/test_template_definition.py b/magnum/tests/unit/drivers/test_template_definition.py index e4fc577b9b..8685939717 100644 --- a/magnum/tests/unit/drivers/test_template_definition.py +++ b/magnum/tests/unit/drivers/test_template_definition.py @@ -749,6 +749,8 @@ class AtomicSwarmTemplateDefinitionTestCase(base.TestCase): mock_context.user_name = 'fake_user' mock_context.tenant = 'fake_tenant' + docker_volume_type = mock_cluster_template.labels.get( + 'docker_volume_type') flannel_cidr = mock_cluster_template.labels.get('flannel_network_cidr') flannel_subnet = mock_cluster_template.labels.get( 'flannel_network_subnetlen') @@ -768,7 +770,8 @@ class AtomicSwarmTemplateDefinitionTestCase(base.TestCase): 'flannel_network_subnetlen': flannel_subnet, 'auth_url': 'http://192.168.10.10:5000/v3', 'rexray_preempt': rexray_preempt, - 'swarm_strategy': swarm_strategy}} + 'swarm_strategy': swarm_strategy, + 'docker_volume_type': docker_volume_type}} mock_get_params.assert_called_once_with(mock_context, mock_cluster_template, mock_cluster,