Add encryption-type-delete to cinderclient
This modification adds support for deleting volume encryption types. The encryption-type-delete command accepts a single argument, the name or ID of the volume type whose associated encryption type should be deleted. The encryption type may only be deleted if the associated volume type is unused. blueprint encrypt-cinder-volumes Change-Id: Ie189e7ec91f5a8adc9d3496911de2811ad40f282
This commit is contained in:
@@ -468,6 +468,9 @@ class FakeHTTPClient(base_client.HTTPClient):
|
|||||||
def put_types_1_encryption_1(self, body, **kw):
|
def put_types_1_encryption_1(self, body, **kw):
|
||||||
return (200, {}, {})
|
return (200, {}, {})
|
||||||
|
|
||||||
|
def delete_types_1_encryption_provider(self, **kw):
|
||||||
|
return (202, {}, None)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Set/Unset metadata
|
# Set/Unset metadata
|
||||||
#
|
#
|
||||||
|
@@ -275,8 +275,14 @@ class ShellTest(utils.TestCase):
|
|||||||
def test_encryption_type_delete(self):
|
def test_encryption_type_delete(self):
|
||||||
"""
|
"""
|
||||||
Test encryption-type-delete shell command.
|
Test encryption-type-delete shell command.
|
||||||
|
|
||||||
|
Verify one GET/one DELETE requests are made per command invocation:
|
||||||
|
- one GET request to retrieve the relevant volume type information
|
||||||
|
- one DELETE request to delete the encryption type information
|
||||||
"""
|
"""
|
||||||
self.skipTest("Not implemented")
|
self.run_command('encryption-type-delete 1')
|
||||||
|
self.assert_called('DELETE', '/types/1/encryption/provider')
|
||||||
|
self.assert_called_anytime('GET', '/types/1')
|
||||||
|
|
||||||
def test_migrate_volume(self):
|
def test_migrate_volume(self):
|
||||||
self.run_command('migrate 1234 fakehost --force-host-copy=True')
|
self.run_command('migrate 1234 fakehost --force-host-copy=True')
|
||||||
|
@@ -91,5 +91,10 @@ class VolumeEncryptionTypesTest(utils.TestCase):
|
|||||||
def test_delete(self):
|
def test_delete(self):
|
||||||
"""
|
"""
|
||||||
Unit test for VolumeEncryptionTypesManager.delete
|
Unit test for VolumeEncryptionTypesManager.delete
|
||||||
|
|
||||||
|
Verify that one DELETE request is made for encryption type deletion
|
||||||
|
Verify that encryption type deletion returns None
|
||||||
"""
|
"""
|
||||||
self.skipTest("Not implemented")
|
result = cs.volume_encryption_types.delete(1)
|
||||||
|
cs.assert_called('DELETE', '/types/1/encryption/provider')
|
||||||
|
self.assertIsNone(result, "delete result must be None")
|
||||||
|
@@ -475,6 +475,9 @@ class FakeHTTPClient(base_client.HTTPClient):
|
|||||||
def put_types_1_encryption_1(self, body, **kw):
|
def put_types_1_encryption_1(self, body, **kw):
|
||||||
return (200, {}, {})
|
return (200, {}, {})
|
||||||
|
|
||||||
|
def delete_types_1_encryption_provider(self, **kw):
|
||||||
|
return (202, {}, None)
|
||||||
|
|
||||||
#
|
#
|
||||||
# Set/Unset metadata
|
# Set/Unset metadata
|
||||||
#
|
#
|
||||||
|
@@ -253,8 +253,14 @@ class ShellTest(utils.TestCase):
|
|||||||
def test_encryption_type_delete(self):
|
def test_encryption_type_delete(self):
|
||||||
"""
|
"""
|
||||||
Test encryption-type-delete shell command.
|
Test encryption-type-delete shell command.
|
||||||
|
|
||||||
|
Verify one GET/one DELETE requests are made per command invocation:
|
||||||
|
- one GET request to retrieve the relevant volume type information
|
||||||
|
- one DELETE request to delete the encryption type information
|
||||||
"""
|
"""
|
||||||
self.skipTest("Not implemented")
|
self.run_command('encryption-type-delete 1')
|
||||||
|
self.assert_called('DELETE', '/types/1/encryption/provider')
|
||||||
|
self.assert_called_anytime('GET', '/types/1')
|
||||||
|
|
||||||
def test_migrate_volume(self):
|
def test_migrate_volume(self):
|
||||||
self.run_command('migrate 1234 fakehost --force-host-copy=True')
|
self.run_command('migrate 1234 fakehost --force-host-copy=True')
|
||||||
|
@@ -91,5 +91,10 @@ class VolumeEncryptionTypesTest(utils.TestCase):
|
|||||||
def test_delete(self):
|
def test_delete(self):
|
||||||
"""
|
"""
|
||||||
Unit test for VolumeEncryptionTypesManager.delete
|
Unit test for VolumeEncryptionTypesManager.delete
|
||||||
|
|
||||||
|
Verify that one DELETE request is made for encryption type deletion
|
||||||
|
Verify that encryption type deletion returns None
|
||||||
"""
|
"""
|
||||||
self.skipTest("Not implemented")
|
result = cs.volume_encryption_types.delete(1)
|
||||||
|
cs.assert_called('DELETE', '/types/1/encryption/provider')
|
||||||
|
self.assertIsNone(result, "delete result must be None")
|
||||||
|
@@ -1116,6 +1116,17 @@ def do_encryption_type_create(cs, args):
|
|||||||
_print_volume_encryption_type_list([result])
|
_print_volume_encryption_type_list([result])
|
||||||
|
|
||||||
|
|
||||||
|
@utils.arg('volume_type',
|
||||||
|
metavar='<volume_type>',
|
||||||
|
type=str,
|
||||||
|
help="Name or ID of the volume type")
|
||||||
|
@utils.service_type('volume')
|
||||||
|
def do_encryption_type_delete(cs, args):
|
||||||
|
"""Delete the encryption type for a volume type (Admin Only)."""
|
||||||
|
volume_type = _find_volume_type(cs, args.volume_type)
|
||||||
|
cs.volume_encryption_types.delete(volume_type)
|
||||||
|
|
||||||
|
|
||||||
@utils.arg('volume', metavar='<volume>', help='ID of the volume to migrate')
|
@utils.arg('volume', metavar='<volume>', help='ID of the volume to migrate')
|
||||||
@utils.arg('host', metavar='<host>', help='Destination host')
|
@utils.arg('host', metavar='<host>', help='Destination host')
|
||||||
@utils.arg('--force-host-copy', metavar='<True|False>',
|
@utils.arg('--force-host-copy', metavar='<True|False>',
|
||||||
|
@@ -93,4 +93,5 @@ class VolumeEncryptionTypeManager(base.ManagerWithFind):
|
|||||||
:param volume_type: the volume type whose encryption type information
|
:param volume_type: the volume type whose encryption type information
|
||||||
must be deleted
|
must be deleted
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError()
|
return self._delete("/types/%s/encryption/provider" %
|
||||||
|
base.getid(volume_type))
|
||||||
|
@@ -1211,6 +1211,17 @@ def do_encryption_type_create(cs, args):
|
|||||||
_print_volume_encryption_type_list([result])
|
_print_volume_encryption_type_list([result])
|
||||||
|
|
||||||
|
|
||||||
|
@utils.arg('volume_type',
|
||||||
|
metavar='<volume_type>',
|
||||||
|
type=str,
|
||||||
|
help="Name or ID of the volume type")
|
||||||
|
@utils.service_type('volumev2')
|
||||||
|
def do_encryption_type_delete(cs, args):
|
||||||
|
"""Delete the encryption type for a volume type (Admin Only)."""
|
||||||
|
volume_type = _find_volume_type(cs, args.volume_type)
|
||||||
|
cs.volume_encryption_types.delete(volume_type)
|
||||||
|
|
||||||
|
|
||||||
def _print_qos_specs(qos_specs):
|
def _print_qos_specs(qos_specs):
|
||||||
utils.print_dict(qos_specs._info)
|
utils.print_dict(qos_specs._info)
|
||||||
|
|
||||||
|
@@ -93,4 +93,5 @@ class VolumeEncryptionTypeManager(base.ManagerWithFind):
|
|||||||
:param volume_type: the volume type whose encryption type information
|
:param volume_type: the volume type whose encryption type information
|
||||||
must be deleted
|
must be deleted
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError()
|
return self._delete("/types/%s/encryption/provider" %
|
||||||
|
base.getid(volume_type))
|
||||||
|
Reference in New Issue
Block a user