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

@ -1785,6 +1785,15 @@ class ShellTest(utils.TestCase):
self.assert_called('DELETE',
'/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):
self.run_command('volume-attach sample-server Work /dev/vdb')
self.assert_called('POST', '/servers/1234/os-volume_attachments',

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

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