Fix RemoveServerVolume

The nova API we're using to delete a server volume attachment needs to
be handed a volume, not a volume attachment.

Also make sure that we create an error if the volume isn't actually
attached to the server.

Signed-off-by: Dr. Jens Harbott <harbott@osism.tech>
Co-authored-by: Stephen Finucane <sfinucan@redhat.com>
Change-Id: I12abd3787ea47acb4da282d00fdc1989405a0564
This commit is contained in:
Dr. Jens Harbott 2021-12-07 18:33:54 +01:00 committed by Stephen Finucane
parent 9eb42403d3
commit 32e18253fa
2 changed files with 9 additions and 17 deletions

View File

@ -3833,17 +3833,11 @@ class RemoveServerVolume(command.Command):
ignore_missing=False,
)
volume_attachments = compute_client.volume_attachments(server)
for volume_attachment in volume_attachments:
if volume_attachment.volume_id == volume.id:
compute_client.delete_volume_attachment(
volume_attachment,
server,
)
break
else:
msg = _('Target volume attachment not found.')
raise exceptions.CommandError(msg)
compute_client.delete_volume_attachment(
volume,
server,
ignore_missing=False,
)
class RescueServer(command.Command):

View File

@ -1016,10 +1016,6 @@ class TestServerRemoveVolume(TestServerVolume):
self.cmd = server.RemoveServerVolume(self.app, None)
def test_server_remove_volume(self):
self.sdk_client.volume_attachments.return_value = [
self.volume_attachment
]
arglist = [
self.servers[0].id,
self.volumes[0].id,
@ -1036,8 +1032,10 @@ class TestServerRemoveVolume(TestServerVolume):
self.assertIsNone(result)
self.sdk_client.delete_volume_attachment.assert_called_once_with(
self.volume_attachment,
self.servers[0])
self.volumes[0],
self.servers[0],
ignore_missing=False,
)
class TestServerAddNetwork(TestServer):