[BugFix] 'Mountpoint' is missing in attachment CLIs.
There are some issues around new attach/detach APIs/CLIs, fix them step by step. This patch also adds related testcases and fix some errors in help message. Closes-Bug: #1675973 Change-Id: I769ea6267403919220c515d471e7bbb8d2d95463
This commit is contained in:
		@@ -222,6 +222,44 @@ class FakeHTTPClient(fake_v2.FakeHTTPClient):
 | 
				
			|||||||
        return (200, {},
 | 
					        return (200, {},
 | 
				
			||||||
                {'backups': backup})
 | 
					                {'backups': backup})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # Attachments
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    def post_attachments(self, **kw):
 | 
				
			||||||
 | 
					        return (202, {}, {
 | 
				
			||||||
 | 
					            'attachment': {'instance': 1234,
 | 
				
			||||||
 | 
					                           'name': 'attachment-1',
 | 
				
			||||||
 | 
					                           'volume_id': 'fake_volume_1',
 | 
				
			||||||
 | 
					                           'status': 'reserved'}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_attachments(self, **kw):
 | 
				
			||||||
 | 
					        return (200, {}, {
 | 
				
			||||||
 | 
					            'attachments': [{'instance': 1,
 | 
				
			||||||
 | 
					                             'name': 'attachment-1',
 | 
				
			||||||
 | 
					                             'volume_id': 'fake_volume_1',
 | 
				
			||||||
 | 
					                             'status': 'reserved'},
 | 
				
			||||||
 | 
					                            {'instance': 2,
 | 
				
			||||||
 | 
					                             'name': 'attachment-2',
 | 
				
			||||||
 | 
					                             'volume_id': 'fake_volume_2',
 | 
				
			||||||
 | 
					                             'status': 'reserverd'}]})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_attachments_1234(self, **kw):
 | 
				
			||||||
 | 
					        return (200, {}, {
 | 
				
			||||||
 | 
					            'attachment': {'instance': 1234,
 | 
				
			||||||
 | 
					                           'name': 'attachment-1',
 | 
				
			||||||
 | 
					                           'volume_id': 'fake_volume_1',
 | 
				
			||||||
 | 
					                           'status': 'reserved'}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def put_attachments_1234(self, **kw):
 | 
				
			||||||
 | 
					        return (200, {}, {
 | 
				
			||||||
 | 
					            'attachment': {'instance': 1234,
 | 
				
			||||||
 | 
					                           'name': 'attachment-1',
 | 
				
			||||||
 | 
					                           'volume_id': 'fake_volume_1',
 | 
				
			||||||
 | 
					                           'status': 'reserved'}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def delete_attachments_1234(self, **kw):
 | 
				
			||||||
 | 
					        return 204, {}, None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    #
 | 
					    #
 | 
				
			||||||
    # GroupTypes
 | 
					    # GroupTypes
 | 
				
			||||||
    #
 | 
					    #
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -95,6 +95,84 @@ class ShellTest(utils.TestCase):
 | 
				
			|||||||
        self.run_command('availability-zone-list')
 | 
					        self.run_command('availability-zone-list')
 | 
				
			||||||
        self.assert_called('GET', '/os-availability-zone')
 | 
					        self.assert_called('GET', '/os-availability-zone')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @ddt.data({'cmd': '1234 --instance 1233',
 | 
				
			||||||
 | 
					               'body': {'instance_uuid': '1233',
 | 
				
			||||||
 | 
					                        'connector': {},
 | 
				
			||||||
 | 
					                        'volume_uuid': '1234'}},
 | 
				
			||||||
 | 
					              {'cmd': '1234 --instance 1233 '
 | 
				
			||||||
 | 
					                      '--connect True '
 | 
				
			||||||
 | 
					                      '--ip 10.23.12.23 --host server01 '
 | 
				
			||||||
 | 
					                      '--platform x86_xx '
 | 
				
			||||||
 | 
					                      '--ostype 123 '
 | 
				
			||||||
 | 
					                      '--multipath true '
 | 
				
			||||||
 | 
					                      '--mountpoint /123 '
 | 
				
			||||||
 | 
					                      '--initiator aabbccdd',
 | 
				
			||||||
 | 
					               'body': {'instance_uuid': '1233',
 | 
				
			||||||
 | 
					                        'connector': {'ip': '10.23.12.23',
 | 
				
			||||||
 | 
					                                      'host': 'server01',
 | 
				
			||||||
 | 
					                                      'os_type': '123',
 | 
				
			||||||
 | 
					                                      'multipath': 'true',
 | 
				
			||||||
 | 
					                                      'mountpoint': '/123',
 | 
				
			||||||
 | 
					                                      'initiator': 'aabbccdd',
 | 
				
			||||||
 | 
					                                      'platform': 'x86_xx'},
 | 
				
			||||||
 | 
					                        'volume_uuid': '1234'}})
 | 
				
			||||||
 | 
					    @ddt.unpack
 | 
				
			||||||
 | 
					    def test_attachment_create(self, cmd, body):
 | 
				
			||||||
 | 
					        command = '--os-volume-api-version 3.27 attachment-create '
 | 
				
			||||||
 | 
					        command += cmd
 | 
				
			||||||
 | 
					        self.run_command(command)
 | 
				
			||||||
 | 
					        expected = {'attachment': body}
 | 
				
			||||||
 | 
					        self.assert_called('POST', '/attachments', body=expected)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @ddt.data({'cmd': '',
 | 
				
			||||||
 | 
					               'expected': ''},
 | 
				
			||||||
 | 
					              {'cmd': '--volume-id 1234',
 | 
				
			||||||
 | 
					               'expected': '?volume_id=1234'},
 | 
				
			||||||
 | 
					              {'cmd': '--status error',
 | 
				
			||||||
 | 
					               'expected': '?status=error'},
 | 
				
			||||||
 | 
					              {'cmd': '--all-tenants 1',
 | 
				
			||||||
 | 
					               'expected': '?all_tenants=1'},
 | 
				
			||||||
 | 
					              {'cmd': '--all-tenants 1 --volume-id 12345',
 | 
				
			||||||
 | 
					               'expected': '?all_tenants=1&volume_id=12345'}
 | 
				
			||||||
 | 
					              )
 | 
				
			||||||
 | 
					    @ddt.unpack
 | 
				
			||||||
 | 
					    def test_attachment_list(self, cmd, expected):
 | 
				
			||||||
 | 
					        command = '--os-volume-api-version 3.27 attachment-list '
 | 
				
			||||||
 | 
					        command += cmd
 | 
				
			||||||
 | 
					        self.run_command(command)
 | 
				
			||||||
 | 
					        self.assert_called('GET', '/attachments%s' % expected)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_attachment_show(self):
 | 
				
			||||||
 | 
					        self.run_command('--os-volume-api-version 3.27 attachment-show 1234')
 | 
				
			||||||
 | 
					        self.assert_called('GET', '/attachments/1234')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @ddt.data({'cmd': '1234 '
 | 
				
			||||||
 | 
					                      '--ip 10.23.12.23 --host server01 '
 | 
				
			||||||
 | 
					                      '--platform x86_xx '
 | 
				
			||||||
 | 
					                      '--ostype 123 '
 | 
				
			||||||
 | 
					                      '--multipath true '
 | 
				
			||||||
 | 
					                      '--mountpoint /123 '
 | 
				
			||||||
 | 
					                      '--initiator aabbccdd',
 | 
				
			||||||
 | 
					               'body': {'connector': {'ip': '10.23.12.23',
 | 
				
			||||||
 | 
					                                      'host': 'server01',
 | 
				
			||||||
 | 
					                                      'os_type': '123',
 | 
				
			||||||
 | 
					                                      'multipath': 'true',
 | 
				
			||||||
 | 
					                                      'mountpoint': '/123',
 | 
				
			||||||
 | 
					                                      'initiator': 'aabbccdd',
 | 
				
			||||||
 | 
					                                      'platform': 'x86_xx'}}})
 | 
				
			||||||
 | 
					    @ddt.unpack
 | 
				
			||||||
 | 
					    def test_attachment_update(self, cmd, body):
 | 
				
			||||||
 | 
					        command = '--os-volume-api-version 3.27 attachment-update '
 | 
				
			||||||
 | 
					        command += cmd
 | 
				
			||||||
 | 
					        self.run_command(command)
 | 
				
			||||||
 | 
					        self.assert_called('PUT', '/attachments/1234', body={'attachment':
 | 
				
			||||||
 | 
					                                                             body})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_attachment_delete(self):
 | 
				
			||||||
 | 
					        self.run_command('--os-volume-api-version 3.27 '
 | 
				
			||||||
 | 
					                         'attachment-delete 1234')
 | 
				
			||||||
 | 
					        self.assert_called('DELETE', '/attachments/1234')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_upload_to_image(self):
 | 
					    def test_upload_to_image(self):
 | 
				
			||||||
        expected = {'os-volume_upload_image': {'force': False,
 | 
					        expected = {'os-volume_upload_image': {'force': False,
 | 
				
			||||||
                                               'container_format': 'bare',
 | 
					                                               'container_format': 'bare',
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1417,7 +1417,7 @@ def do_attachment_show(cs, args):
 | 
				
			|||||||
@utils.arg('--multipath',
 | 
					@utils.arg('--multipath',
 | 
				
			||||||
           metavar='<multipath>',
 | 
					           metavar='<multipath>',
 | 
				
			||||||
           default=False,
 | 
					           default=False,
 | 
				
			||||||
           help='OS type. Default=False.')
 | 
					           help='Use multipath. Default=False.')
 | 
				
			||||||
@utils.arg('--mountpoint',
 | 
					@utils.arg('--mountpoint',
 | 
				
			||||||
           metavar='<mountpoint>',
 | 
					           metavar='<mountpoint>',
 | 
				
			||||||
           default=None,
 | 
					           default=None,
 | 
				
			||||||
@@ -1433,7 +1433,8 @@ def do_attachment_create(cs, args):
 | 
				
			|||||||
                     'platform': args.platform,
 | 
					                     'platform': args.platform,
 | 
				
			||||||
                     'host': args.host,
 | 
					                     'host': args.host,
 | 
				
			||||||
                     'os_type': args.ostype,
 | 
					                     'os_type': args.ostype,
 | 
				
			||||||
                     'multipath': args.multipath}
 | 
					                     'multipath': args.multipath,
 | 
				
			||||||
 | 
					                     'mountpoint': args.mountpoint}
 | 
				
			||||||
    attachment = cs.attachments.create(args.volume,
 | 
					    attachment = cs.attachments.create(args.volume,
 | 
				
			||||||
                                       connector,
 | 
					                                       connector,
 | 
				
			||||||
                                       args.instance)
 | 
					                                       args.instance)
 | 
				
			||||||
@@ -1470,7 +1471,7 @@ def do_attachment_create(cs, args):
 | 
				
			|||||||
@utils.arg('--multipath',
 | 
					@utils.arg('--multipath',
 | 
				
			||||||
           metavar='<multipath>',
 | 
					           metavar='<multipath>',
 | 
				
			||||||
           default=False,
 | 
					           default=False,
 | 
				
			||||||
           help='OS type. Default=False.')
 | 
					           help='Use multipath. Default=False.')
 | 
				
			||||||
@utils.arg('--mountpoint',
 | 
					@utils.arg('--mountpoint',
 | 
				
			||||||
           metavar='<mountpoint>',
 | 
					           metavar='<mountpoint>',
 | 
				
			||||||
           default=None,
 | 
					           default=None,
 | 
				
			||||||
@@ -1486,7 +1487,8 @@ def do_attachment_update(cs, args):
 | 
				
			|||||||
                 'platform': args.platform,
 | 
					                 'platform': args.platform,
 | 
				
			||||||
                 'host': args.host,
 | 
					                 'host': args.host,
 | 
				
			||||||
                 'os_type': args.ostype,
 | 
					                 'os_type': args.ostype,
 | 
				
			||||||
                 'multipath': args.multipath}
 | 
					                 'multipath': args.multipath,
 | 
				
			||||||
 | 
					                 'mountpoint': args.mountpoint}
 | 
				
			||||||
    attachment = cs.attachments.update(args.attachment,
 | 
					    attachment = cs.attachments.update(args.attachment,
 | 
				
			||||||
                                       connector)
 | 
					                                       connector)
 | 
				
			||||||
    attachment_dict = attachment.to_dict()
 | 
					    attachment_dict = attachment.to_dict()
 | 
				
			||||||
@@ -1505,6 +1507,7 @@ def do_attachment_delete(cs, args):
 | 
				
			|||||||
    for attachment in args.attachment:
 | 
					    for attachment in args.attachment:
 | 
				
			||||||
        cs.attachments.delete(attachment)
 | 
					        cs.attachments.delete(attachment)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@api_versions.wraps('3.0')
 | 
					@api_versions.wraps('3.0')
 | 
				
			||||||
def do_version_list(cs, args):
 | 
					def do_version_list(cs, args):
 | 
				
			||||||
    """List all API versions."""
 | 
					    """List all API versions."""
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										5
									
								
								releasenotes/notes/bug-1675973-ad91a7a9f50e658a.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								releasenotes/notes/bug-1675973-ad91a7a9f50e658a.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					---
 | 
				
			||||||
 | 
					fixes:
 | 
				
			||||||
 | 
					  - The mountpoint argument was ignored when creating an attachment
 | 
				
			||||||
 | 
					    and now has been fixed.
 | 
				
			||||||
 | 
					    [Bug `1675973 <https://bugs.launchpad.net/bugs/1675973>`_]
 | 
				
			||||||
		Reference in New Issue
	
	Block a user