Merge "Allow multiple volume delete from cli like Cinder"

This commit is contained in:
Jenkins 2014-01-22 03:45:50 +00:00 committed by Gerrit Code Review
commit 00ceee190b
4 changed files with 82 additions and 44 deletions
novaclient

@ -1792,45 +1792,65 @@ class FakeHTTPClient(base_client.HTTPClient):
def get_volumes_detail(self, **kw): def get_volumes_detail(self, **kw):
return (200, {}, {"volumes": [ return (200, {}, {"volumes": [
{"display_name": "Work", {
"display_description": "volume for work", "display_name": "Work",
"status": "ATTACHED", "display_description": "volume for work",
"id": "15e59938-07d5-11e1-90e3-e3dffe0c5983", "status": "ATTACHED",
"created_at": "2011-09-09T00:00:00Z", "id": "15e59938-07d5-11e1-90e3-e3dffe0c5983",
"attached": "2011-11-11T00:00:00Z", "created_at": "2011-09-09T00:00:00Z",
"size": 1024, "attached": "2011-11-11T00:00:00Z",
"attachments": [ "size": 1024,
{"id": "3333", "attachments": [
"links": ''}], {"id": "3333",
"metadata": {}}]}) "links": ''}],
"metadata": {}},
{
"display_name": "Work2",
"display_description": "volume for work2",
"status": "ATTACHED",
"id": "15e59938-07d5-11e1-90e3-ee32ba30feaa",
"created_at": "2011-09-09T00:00:00Z",
"attached": "2011-11-11T00:00:00Z",
"size": 1024,
"attachments": [
{"id": "2222",
"links": ''}],
"metadata": {}}]})
def get_volumes(self, **kw): def get_volumes(self, **kw):
return (200, {}, {"volumes": [ return (200, {}, {"volumes": [
{"display_name": "Work", {
"display_description": "volume for work", "display_name": "Work",
"status": "ATTACHED", "display_description": "volume for work",
"id": "15e59938-07d5-11e1-90e3-e3dffe0c5983", "status": "ATTACHED",
"created_at": "2011-09-09T00:00:00Z", "id": "15e59938-07d5-11e1-90e3-e3dffe0c5983",
"attached": "2011-11-11T00:00:00Z", "created_at": "2011-09-09T00:00:00Z",
"size": 1024, "attached": "2011-11-11T00:00:00Z",
"attachments": [ "size": 1024,
{"id": "3333", "attachments": [
"links": ''}], {"id": "3333",
"metadata": {}}]}) "links": ''}],
"metadata": {}},
{
"display_name": "Work2",
"display_description": "volume for work2",
"status": "ATTACHED",
"id": "15e59938-07d5-11e1-90e3-ee32ba30feaa",
"created_at": "2011-09-09T00:00:00Z",
"attached": "2011-11-11T00:00:00Z",
"size": 1024,
"attachments": [
{"id": "2222",
"links": ''}],
"metadata": {}}]})
def get_volumes_15e59938_07d5_11e1_90e3_e3dffe0c5983(self, **kw): def get_volumes_15e59938_07d5_11e1_90e3_e3dffe0c5983(self, **kw):
return (200, {}, {"volume": return (200, {}, {
{"display_name": "Work", "volume": self.get_volumes_detail()[2]['volumes'][0]})
"display_description": "volume for work",
"status": "ATTACHED", def get_volumes_15e59938_07d5_11e1_90e3_ee32ba30feaa(self, **kw):
"id": "15e59938-07d5-11e1-90e3-e3dffe0c5983", return (200, {}, {
"created_at": "2011-09-09T00:00:00Z", "volume": self.get_volumes_detail()[2]['volumes'][1]})
"attached": "2011-11-11T00:00:00Z",
"size": 1024,
"attachments": [
{"id": "3333",
"links": ''}],
"metadata": {}}})
def post_volumes(self, **kw): def post_volumes(self, **kw):
return (200, {}, {"volume": return (200, {}, {"volume":
@ -1849,6 +1869,9 @@ class FakeHTTPClient(base_client.HTTPClient):
def delete_volumes_15e59938_07d5_11e1_90e3_e3dffe0c5983(self, **kw): def delete_volumes_15e59938_07d5_11e1_90e3_e3dffe0c5983(self, **kw):
return (200, {}, {}) return (200, {}, {})
def delete_volumes_15e59938_07d5_11e1_90e3_ee32ba30feaa(self, **kw):
return (200, {}, {})
def post_servers_1234_os_volume_attachments(self, **kw): def post_servers_1234_os_volume_attachments(self, **kw):
return (200, {}, {"volumeAttachment": return (200, {}, {"volumeAttachment":
{"device": "/dev/vdb", {"device": "/dev/vdb",

@ -1785,6 +1785,15 @@ class ShellTest(utils.TestCase):
self.assert_called('DELETE', self.assert_called('DELETE',
'/volumes/15e59938-07d5-11e1-90e3-e3dffe0c5983') '/volumes/15e59938-07d5-11e1-90e3-e3dffe0c5983')
def test_volume_delete_multiple(self):
self.run_command('volume-delete Work Work2')
self.assert_called('DELETE',
'/volumes/15e59938-07d5-11e1-90e3-e3dffe0c5983',
pos=-5)
self.assert_called('DELETE',
'/volumes/15e59938-07d5-11e1-90e3-ee32ba30feaa',
pos=-1)
def test_volume_attach(self): def test_volume_attach(self):
self.run_command('volume-attach sample-server Work /dev/vdb') self.run_command('volume-attach sample-server Work /dev/vdb')
self.assert_called('POST', '/servers/1234/os-volume_attachments', self.assert_called('POST', '/servers/1234/os-volume_attachments',

@ -1687,13 +1687,16 @@ def do_volume_create(cs, args):
@utils.arg('volume', @utils.arg('volume',
metavar='<volume>', metavar='<volume>', nargs='+',
help='Name or ID of the volume to delete.') help='Name or ID of the volume(s) to delete.')
@utils.service_type('volume') @utils.service_type('volume')
def do_volume_delete(cs, args): def do_volume_delete(cs, args):
"""Remove a volume.""" """Remove volume(s)."""
volume = _find_volume(cs, args.volume) for volume in args.volume:
volume.delete() try:
_find_volume(cs, volume).delete()
except Exception as e:
print("Delete for volume %s failed: %s" % (volume, e))
@utils.arg('server', @utils.arg('server',

@ -1513,13 +1513,16 @@ def do_volume_create(cs, args):
@utils.arg('volume', @utils.arg('volume',
metavar='<volume>', metavar='<volume>', nargs='+',
help='Name or ID of the volume to delete.') help='Name or ID of the volume(s) to delete.')
@utils.service_type('volume') @utils.service_type('volume')
def do_volume_delete(cs, args): def do_volume_delete(cs, args):
"""Remove a volume.""" """Remove volume(s)."""
volume = _find_volume(cs, args.volume) for volume in args.volume:
volume.delete() try:
_find_volume(cs, volume).delete()
except Exception as e:
print("Delete for volume %s failed: %s" % (volume, e))
@utils.arg('server', @utils.arg('server',