Merge "Make instance_uuid optional in attachment create"

This commit is contained in:
Zuul 2021-07-20 17:06:47 +00:00 committed by Gerrit Code Review
commit e03111dea3
6 changed files with 79 additions and 3 deletions

View File

@ -29,6 +29,16 @@ fake_attachment = {'attachment': {
'instance': 'e84fda45-4de4-4ce4-8f39-fc9d3b0aa05e',
'volume_id': '557ad76c-ce54-40a3-9e91-c40d21665cc3', }}
fake_attachment_without_instance_id = {'attachment': {
'status': 'reserved',
'detached_at': '',
'connection_info': {},
'attached_at': '',
'attach_mode': None,
'id': 'a232e9ae',
'instance': None,
'volume_id': '557ad76c-ce54-40a3-9e91-c40d21665cc3', }}
fake_attachment_list = {'attachments': [
{'instance': 'instance_1',
'name': 'attachment-1',
@ -310,7 +320,9 @@ class FakeHTTPClient(fakes_base.FakeHTTPClient):
#
def post_attachments(self, **kw):
return (200, {}, fake_attachment)
if kw['body']['attachment'].get('instance_uuid'):
return (200, {}, fake_attachment)
return (200, {}, fake_attachment_without_instance_id)
def get_attachments(self, **kw):
return (200, {}, fake_attachment_list)

View File

@ -31,6 +31,17 @@ class AttachmentsTest(utils.TestCase):
cs.assert_called('POST', '/attachments')
self.assertEqual(fakes.fake_attachment['attachment'], att)
def test_create_attachment_without_instance_uuid(self):
cs = fakes.FakeClient(api_versions.APIVersion('3.27'))
att = cs.attachments.create(
'e84fda45-4de4-4ce4-8f39-fc9d3b0aa05e',
{},
None,
'null')
cs.assert_called('POST', '/attachments')
self.assertEqual(
fakes.fake_attachment_without_instance_id['attachment'], att)
def test_complete_attachment(self):
cs = fakes.FakeClient(api_versions.APIVersion('3.44'))
att = cs.attachments.complete('a232e9ae')

View File

@ -388,6 +388,25 @@ class ShellTest(utils.TestCase):
{'cmd': 'abc 1233',
'body': {'instance_uuid': '1233',
'connector': {},
'volume_uuid': '1234'}},
{'cmd': '1234',
'body': {'connector': {},
'volume_uuid': '1234'}},
{'cmd': '1234 '
'--connect True '
'--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'},
'volume_uuid': '1234'}})
@mock.patch('cinderclient.utils.find_resource')
@ddt.unpack
@ -429,6 +448,27 @@ class ShellTest(utils.TestCase):
'body': {'instance_uuid': '1233',
'connector': {},
'volume_uuid': '1234',
'mode': 'ro'}},
{'cmd': '1234',
'body': {'connector': {},
'volume_uuid': '1234',
'mode': 'ro'}},
{'cmd': '1234 '
'--connect True '
'--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'},
'volume_uuid': '1234',
'mode': 'ro'}})
@mock.patch('cinderclient.utils.find_resource')
@ddt.unpack

View File

@ -27,11 +27,12 @@ class VolumeAttachmentManager(base.ManagerWithFind):
resource_class = VolumeAttachment
@api_versions.wraps('3.27')
def create(self, volume_id, connector, instance_id, mode='null'):
def create(self, volume_id, connector, instance_id=None, mode='null'):
"""Create a attachment for specified volume."""
body = {'attachment': {'volume_uuid': volume_id,
'instance_uuid': instance_id,
'connector': connector}}
if instance_id:
body['attachment']['instance_uuid'] = instance_id
if self.api_version >= api_versions.APIVersion("3.54"):
if mode and mode != 'null':
body['attachment']['mode'] = mode

View File

@ -2297,6 +2297,8 @@ def do_attachment_show(cs, args):
help='Name or ID of volume or volumes to attach.')
@utils.arg('server_id',
metavar='<server_id>',
nargs='?',
default=None,
help='ID of server attaching to.')
@utils.arg('--connect',
metavar='<connect>',

View File

@ -0,0 +1,10 @@
---
fixes:
- |
When attaching to a host, we don't need a server id
so it shouldn't be mandatory to be supplied with
attachment-create operation.
The server_id parameter is made optional so we can
create attachments without passing it.
The backward compatibility is maintained so we can pass
it like how we currently do if required.