summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Pavlov <andrey-mp@yandex.ru>2016-08-19 15:32:35 +0300
committerAndrey Pavlov <andrey.mp@gmail.com>2016-10-12 10:11:58 +0300
commit5f9c53613a2e405f0893b6e707350805478b0c4a (patch)
tree4506dc00ecbc581610f1297a7a53caef3c372c00
parent40786d508e7605c0bb950e07d8698e79546a9f11 (diff)
downloadglance_store-5f9c53613a2e405f0893b6e707350805478b0c4a.tar.gz
Add cinder_volume_type to cinder store configuration
Some cinder backend can have several volume types to optimize storage usage. Adding this option allows to choose specific volume type in cinder that can be optimized for images. Now default_volume_type from cinder configuration is used for volume creation but this solution is not so suitable for storing images in cinder. Closes-Bug: #1616556 Change-Id: I23a8cff7f7aa77acb418f5ad7dd785a893de8608
-rw-r--r--glance_store/_drivers/cinder.py27
-rw-r--r--glance_store/tests/unit/test_cinder_store.py4
-rw-r--r--glance_store/tests/unit/test_opts.py1
3 files changed, 28 insertions, 4 deletions
diff --git a/glance_store/_drivers/cinder.py b/glance_store/_drivers/cinder.py
index 4e3ca1f..9d3b9ad 100644
--- a/glance_store/_drivers/cinder.py
+++ b/glance_store/_drivers/cinder.py
@@ -283,6 +283,25 @@ Related options:
* None
""")),
+ cfg.StrOpt('cinder_volume_type',
+ default=None,
+ help=_("""
+Volume type that will be used for volume creation in cinder.
+
+Some cinder backends can have several volume types to optimize storage usage.
+Adding this option allows an operator to choose a specific volume type
+in cinder that can be optimized for images.
+
+If this is not set, then the default volume type specified in the cinder
+configuration will be used for volume creation.
+
+Possible values:
+ * A valid volume type from cinder
+
+Related options:
+ * None
+
+""")),
]
@@ -631,13 +650,15 @@ class Store(glance_store.driver.Store):
metadata = {'glance_image_id': image_id,
'image_size': str(image_size),
'image_owner': owner}
- LOG.debug('Creating a new volume: image_size=%d size_gb=%d',
- image_size, size_gb)
+ volume_type = self.conf.glance_store.cinder_volume_type
+ LOG.debug('Creating a new volume: image_size=%d size_gb=%d type=%s',
+ image_size, size_gb, volume_type or 'None')
if image_size == 0:
LOG.info(_LI("Since image size is zero, we will be doing "
"resize-before-write for each GB which "
"will be considerably slower than normal."))
- volume = client.volumes.create(size_gb, name=name, metadata=metadata)
+ volume = client.volumes.create(size_gb, name=name, metadata=metadata,
+ volume_type=volume_type)
volume = self._wait_volume_status(volume, 'creating', 'available')
failed = True
diff --git a/glance_store/tests/unit/test_cinder_store.py b/glance_store/tests/unit/test_cinder_store.py
index e1d1a58..d18a101 100644
--- a/glance_store/tests/unit/test_cinder_store.py
+++ b/glance_store/tests/unit/test_cinder_store.py
@@ -279,6 +279,7 @@ class TestCinderStore(base.StoreBaseTest,
fake_client = FakeObject(auth_token=None, management_url=None)
fake_volume.manager.get.return_value = fake_volume
fake_volumes = FakeObject(create=mock.Mock(return_value=fake_volume))
+ self.config(cinder_volume_type='some_type')
@contextlib.contextmanager
def fake_open(client, volume, mode):
@@ -303,7 +304,8 @@ class TestCinderStore(base.StoreBaseTest,
name='image-%s' % expected_image_id,
metadata={'image_owner': self.context.tenant,
'glance_image_id': expected_image_id,
- 'image_size': str(expected_size)})
+ 'image_size': str(expected_size)},
+ volume_type='some_type')
def test_cinder_add(self):
fake_volume = mock.MagicMock(id=str(uuid.uuid4()), status='available')
diff --git a/glance_store/tests/unit/test_opts.py b/glance_store/tests/unit/test_opts.py
index ef73c4b..b00c9d5 100644
--- a/glance_store/tests/unit/test_opts.py
+++ b/glance_store/tests/unit/test_opts.py
@@ -82,6 +82,7 @@ class OptsTestCase(base.StoreBaseTest):
'cinder_store_user_name',
'cinder_store_password',
'cinder_store_project_name',
+ 'cinder_volume_type',
'default_swift_reference',
'https_insecure',
'filesystem_store_datadir',