summaryrefslogtreecommitdiff
path: root/cinderclient
diff options
context:
space:
mode:
authorRajat Dhasmana <rajatdhasmana@gmail.com>2021-03-29 06:31:31 -0400
committerRajat Dhasmana <rajatdhasmana@gmail.com>2021-07-14 11:20:28 -0400
commitd714249ca9e95297f5e53c9dcc0af9ba58d0ab6d (patch)
tree04e2a5a4f4a50e706238c8dc0dd6457211d5a44e /cinderclient
parenta0e36218f20e95778f449edb9edccbead4a6eed9 (diff)
downloadpython-cinderclient-d714249ca9e95297f5e53c9dcc0af9ba58d0ab6d.tar.gz
Make instance_uuid optional in attachment create
Cinder and cinderclient assumes an attachment create request will always contain instance_uuid. This is not true when glance calls cinder for attachment in glance cinder configuration. This patch (along with the cinder patch) make the instance_uuid optional and allow glance to do attachments without passing instance_uuid. Change-Id: Ifbaca4aa87d890bc5130069638d42665b914b378
Diffstat (limited to 'cinderclient')
-rw-r--r--cinderclient/tests/unit/v3/fakes.py14
-rw-r--r--cinderclient/tests/unit/v3/test_attachments.py11
-rw-r--r--cinderclient/tests/unit/v3/test_shell.py40
-rw-r--r--cinderclient/v3/attachments.py5
-rw-r--r--cinderclient/v3/shell.py2
5 files changed, 69 insertions, 3 deletions
diff --git a/cinderclient/tests/unit/v3/fakes.py b/cinderclient/tests/unit/v3/fakes.py
index 7647fb3..ffdfeb7 100644
--- a/cinderclient/tests/unit/v3/fakes.py
+++ b/cinderclient/tests/unit/v3/fakes.py
@@ -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',
@@ -297,7 +307,9 @@ class FakeHTTPClient(fake_v2.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)
diff --git a/cinderclient/tests/unit/v3/test_attachments.py b/cinderclient/tests/unit/v3/test_attachments.py
index 1802334..acf0646 100644
--- a/cinderclient/tests/unit/v3/test_attachments.py
+++ b/cinderclient/tests/unit/v3/test_attachments.py
@@ -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')
diff --git a/cinderclient/tests/unit/v3/test_shell.py b/cinderclient/tests/unit/v3/test_shell.py
index 756f512..d0f1bfb 100644
--- a/cinderclient/tests/unit/v3/test_shell.py
+++ b/cinderclient/tests/unit/v3/test_shell.py
@@ -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
diff --git a/cinderclient/v3/attachments.py b/cinderclient/v3/attachments.py
index e1e9290..5067962 100644
--- a/cinderclient/v3/attachments.py
+++ b/cinderclient/v3/attachments.py
@@ -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
diff --git a/cinderclient/v3/shell.py b/cinderclient/v3/shell.py
index 6d7d1eb..9865d38 100644
--- a/cinderclient/v3/shell.py
+++ b/cinderclient/v3/shell.py
@@ -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>',