Merge "Allow multiple volume delete from cli like Cinder"
This commit is contained in:
commit
00ceee190b
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',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user