Merge "Add set_readonly_volume to BlockStorageCloudMixin"

This commit is contained in:
Zuul
2021-03-18 17:24:17 +00:00
committed by Gerrit Code Review
4 changed files with 65 additions and 0 deletions

View File

@@ -384,6 +384,34 @@ class Proxy(_base_proxy.BaseBlockStorageProxy):
volume = self._get_resource(_volume.Volume, volume) volume = self._get_resource(_volume.Volume, volume)
volume.extend(self, size) volume.extend(self, size)
def set_volume_readonly(self, volume, readonly=True):
"""Set a volume's read-only flag.
:param name_or_id: Name, unique ID of the volume or a volume dict.
:param bool readonly: Whether the volume should be a read-only volume
or not
:raises: OpenStackCloudTimeout if wait time exceeded.
:raises: OpenStackCloudException on operation error.
"""
volume = self._get_resource(_volume.Volume, volume)
volume.set_readonly(self, readonly)
def retype_volume(self, volume, new_type, migration_policy="never"):
"""Retype the volume.
:param name_or_id: Name, unique ID of the volume or a volume dict.
:param new_type: The new volume type that volume is changed with.
:param migration_policy: Specify if the volume should be migrated when
it is re-typed. Possible values are on-demand
or never. Default: never.
:raises: OpenStackCloudTimeout if wait time exceeded.
:raises: OpenStackCloudException on operation error.
"""
volume = self._get_resource(_volume.Volume, volume)
volume.retype(self, new_type, migration_policy)
def backend_pools(self): def backend_pools(self):
"""Returns a generator of cinder Back-end storage pools """Returns a generator of cinder Back-end storage pools

View File

@@ -114,5 +114,10 @@ class Volume(resource.Resource):
body = {'os-extend': {'new_size': size}} body = {'os-extend': {'new_size': size}}
self._action(session, body) self._action(session, body)
def set_readonly(self, session, readonly):
"""Set volume readonly flag"""
body = {'os-update_readonly_flag': {'readonly': readonly}}
self._action(session, body)
VolumeDetail = Volume VolumeDetail = Volume

View File

@@ -156,6 +156,18 @@ class TestVolumeProxy(test_proxy_base.TestProxyBase):
method_args=["value", "new-size"], method_args=["value", "new-size"],
expected_args=["new-size"]) expected_args=["new-size"])
def test_volume_set_readonly_no_argument(self):
self._verify("openstack.block_storage.v3.volume.Volume.set_readonly",
self.proxy.set_volume_readonly,
method_args=["value"],
expected_args=[True])
def test_volume_set_readonly_false(self):
self._verify("openstack.block_storage.v3.volume.Volume.set_readonly",
self.proxy.set_volume_readonly,
method_args=["value", False],
expected_args=[False])
def test_backend_pools(self): def test_backend_pools(self):
self.verify_list(self.proxy.backend_pools, stats.Pools) self.verify_list(self.proxy.backend_pools, stats.Pools)

View File

@@ -127,3 +127,23 @@ class TestVolume(base.TestCase):
body = {"os-extend": {"new_size": "20"}} body = {"os-extend": {"new_size": "20"}}
headers = {'Accept': ''} headers = {'Accept': ''}
self.sess.post.assert_called_with(url, json=body, headers=headers) self.sess.post.assert_called_with(url, json=body, headers=headers)
def test_set_volume_readonly(self):
sot = volume.Volume(**VOLUME)
self.assertIsNone(sot.set_readonly(self.sess, True))
url = 'volumes/%s/action' % FAKE_ID
body = {'os-update_readonly_flag': {'readonly': True}}
headers = {'Accept': ''}
self.sess.post.assert_called_with(url, json=body, headers=headers)
def test_set_volume_readonly_false(self):
sot = volume.Volume(**VOLUME)
self.assertIsNone(sot.set_readonly(self.sess, False))
url = 'volumes/%s/action' % FAKE_ID
body = {'os-update_readonly_flag': {'readonly': False}}
headers = {'Accept': ''}
self.sess.post.assert_called_with(url, json=body, headers=headers)