block storage: Add update_volume proxy method
Noticed during a recent email exchange [1]. [1] http://lists.openstack.org/pipermail/openstack-discuss/2022-June/029325.html Change-Id: If67d0d2a01f691cc837a3f005711638056e735ec Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
This commit is contained in:
parent
2b7469cc85
commit
bf6563e97f
@ -17,8 +17,8 @@ Volume Operations
|
|||||||
|
|
||||||
.. autoclass:: openstack.block_storage.v3._proxy.Proxy
|
.. autoclass:: openstack.block_storage.v3._proxy.Proxy
|
||||||
:noindex:
|
:noindex:
|
||||||
:members: create_volume, delete_volume, get_volume, find_volume,
|
:members: create_volume, delete_volume, update_volume, get_volume,
|
||||||
volumes, get_volume_metadata, set_volume_metadata,
|
find_volume, volumes, get_volume_metadata, set_volume_metadata,
|
||||||
delete_volume_metadata, extend_volume, set_volume_readonly,
|
delete_volume_metadata, extend_volume, set_volume_readonly,
|
||||||
retype_volume, set_volume_bootable_status, reset_volume_status,
|
retype_volume, set_volume_bootable_status, reset_volume_status,
|
||||||
revert_volume_to_snapshot, attach_volume, detach_volume,
|
revert_volume_to_snapshot, attach_volume, detach_volume,
|
||||||
|
@ -519,6 +519,18 @@ class Proxy(_base_proxy.BaseBlockStorageProxy):
|
|||||||
volume = self._get_resource(_volume.Volume, volume)
|
volume = self._get_resource(_volume.Volume, volume)
|
||||||
volume.force_delete(self)
|
volume.force_delete(self)
|
||||||
|
|
||||||
|
def update_volume(self, volume, **attrs):
|
||||||
|
"""Update a volume
|
||||||
|
|
||||||
|
:param volume: Either the ID of a volume or a
|
||||||
|
:class:`~openstack.block_storage.v3.volume.Volume` instance.
|
||||||
|
:param dict attrs: The attributes to update on the volume.
|
||||||
|
|
||||||
|
:returns: The updated volume
|
||||||
|
:rtype: :class:`~openstack.block_storage.v3.volume.Volume`
|
||||||
|
"""
|
||||||
|
return self._update(_volume.Volume, volume, **attrs)
|
||||||
|
|
||||||
def get_volume_metadata(self, volume):
|
def get_volume_metadata(self, volume):
|
||||||
"""Return a dictionary of metadata for a volume
|
"""Return a dictionary of metadata for a volume
|
||||||
|
|
||||||
|
@ -17,34 +17,55 @@ from openstack.tests.functional.block_storage.v3 import base
|
|||||||
class TestVolume(base.BaseBlockStorageTest):
|
class TestVolume(base.BaseBlockStorageTest):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestVolume, self).setUp()
|
super().setUp()
|
||||||
|
|
||||||
if not self.user_cloud.has_service('block-storage'):
|
if not self.user_cloud.has_service('block-storage'):
|
||||||
self.skipTest('block-storage service not supported by cloud')
|
self.skipTest('block-storage service not supported by cloud')
|
||||||
|
|
||||||
self.VOLUME_NAME = self.getUniqueString()
|
volume_name = self.getUniqueString()
|
||||||
self.VOLUME_ID = None
|
|
||||||
|
|
||||||
volume = self.user_cloud.block_storage.create_volume(
|
self.volume = self.user_cloud.block_storage.create_volume(
|
||||||
name=self.VOLUME_NAME,
|
name=volume_name,
|
||||||
size=1)
|
size=1,
|
||||||
|
)
|
||||||
self.user_cloud.block_storage.wait_for_status(
|
self.user_cloud.block_storage.wait_for_status(
|
||||||
volume,
|
self.volume,
|
||||||
status='available',
|
status='available',
|
||||||
failures=['error'],
|
failures=['error'],
|
||||||
interval=2,
|
interval=2,
|
||||||
wait=self._wait_for_timeout)
|
wait=self._wait_for_timeout,
|
||||||
assert isinstance(volume, _volume.Volume)
|
)
|
||||||
self.assertEqual(self.VOLUME_NAME, volume.name)
|
self.assertIsInstance(self.volume, _volume.Volume)
|
||||||
self.VOLUME_ID = volume.id
|
self.assertEqual(volume_name, self.volume.name)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
sot = self.user_cloud.block_storage.delete_volume(
|
self.user_cloud.block_storage.delete_volume(self.volume)
|
||||||
self.VOLUME_ID,
|
super().tearDown()
|
||||||
ignore_missing=False)
|
|
||||||
self.assertIsNone(sot)
|
|
||||||
super(TestVolume, self).tearDown()
|
|
||||||
|
|
||||||
def test_get(self):
|
def test_volume(self):
|
||||||
sot = self.user_cloud.block_storage.get_volume(self.VOLUME_ID)
|
# get
|
||||||
self.assertEqual(self.VOLUME_NAME, sot.name)
|
volume = self.user_cloud.block_storage.get_volume(self.volume.id)
|
||||||
|
self.assertEqual(self.volume.name, volume.name)
|
||||||
|
|
||||||
|
# find
|
||||||
|
volume = self.user_cloud.block_storage.find_volume(self.volume.name)
|
||||||
|
self.assertEqual(self.volume.id, volume.id)
|
||||||
|
|
||||||
|
# list
|
||||||
|
volumes = self.user_cloud.block_storage.volumes()
|
||||||
|
# other tests may have created volumes so we don't assert that this is
|
||||||
|
# the *only* volume present
|
||||||
|
self.assertIn(self.volume.id, {v.id for v in volumes})
|
||||||
|
|
||||||
|
# update
|
||||||
|
volume_name = self.getUniqueString()
|
||||||
|
volume_description = self.getUniqueString()
|
||||||
|
volume = self.user_cloud.block_storage.update_volume(
|
||||||
|
self.volume,
|
||||||
|
name=volume_name,
|
||||||
|
description=volume_description,
|
||||||
|
)
|
||||||
|
self.assertIsInstance(volume, _volume.Volume)
|
||||||
|
volume = self.user_cloud.block_storage.get_volume(self.volume.id)
|
||||||
|
self.assertEqual(volume_name, volume.name)
|
||||||
|
self.assertEqual(volume_description, volume.description)
|
||||||
|
4
releasenotes/notes/volume-update-876e6540c8471440.yaml
Normal file
4
releasenotes/notes/volume-update-876e6540c8471440.yaml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Added ``update_volume`` to the block storage proxy.
|
Loading…
x
Reference in New Issue
Block a user