diff --git a/openstack/block_storage/v3/_proxy.py b/openstack/block_storage/v3/_proxy.py index f076b7b8c..0b7ff890b 100644 --- a/openstack/block_storage/v3/_proxy.py +++ b/openstack/block_storage/v3/_proxy.py @@ -948,9 +948,9 @@ class Proxy(_base_proxy.BaseBlockStorageProxy): :class:`~openstack.block_storage.v3.volume.Volume` instance. :param dict connector: The connector object. - :returns: None""" + :returns: Dictionary containing the modified connector object""" volume = self._get_resource(_volume.Volume, volume) - volume.init_attachment(self, connector) + return volume.init_attachment(self, connector) def terminate_volume_attachment(self, volume, connector): """Update volume status to 'in-use'. diff --git a/openstack/block_storage/v3/volume.py b/openstack/block_storage/v3/volume.py index eb412c40e..dd14b07d9 100644 --- a/openstack/block_storage/v3/volume.py +++ b/openstack/block_storage/v3/volume.py @@ -290,7 +290,8 @@ class Volume(resource.Resource, metadata.MetadataMixin): """Initialize volume attachment""" body = {'os-initialize_connection': {'connector': connector}} - self._action(session, body) + resp = self._action(session, body).json() + return resp['connection_info'] def terminate_attachment(self, session, connector): """Terminate volume attachment""" diff --git a/openstack/tests/unit/block_storage/v3/test_volume.py b/openstack/tests/unit/block_storage/v3/test_volume.py index 7e162252c..0a2edbd67 100644 --- a/openstack/tests/unit/block_storage/v3/test_volume.py +++ b/openstack/tests/unit/block_storage/v3/test_volume.py @@ -545,7 +545,14 @@ class TestVolumeActions(TestVolume): def test_init_attachment(self): sot = volume.Volume(**VOLUME) - self.assertIsNone(sot.init_attachment(self.sess, {'a': 'b'})) + self.resp = mock.Mock() + self.resp.body = {'connection_info': {'c': 'd'}} + self.resp.status_code = 200 + self.resp.json = mock.Mock(return_value=self.resp.body) + self.sess.post = mock.Mock(return_value=self.resp) + self.assertEqual( + {'c': 'd'}, sot.init_attachment(self.sess, {'a': 'b'}) + ) url = 'volumes/%s/action' % FAKE_ID body = {'os-initialize_connection': {'connector': {'a': 'b'}}} diff --git a/releasenotes/notes/block-storage-init-return-95b465b4755f03ca.yaml b/releasenotes/notes/block-storage-init-return-95b465b4755f03ca.yaml new file mode 100644 index 000000000..6650ac89a --- /dev/null +++ b/releasenotes/notes/block-storage-init-return-95b465b4755f03ca.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Methods ``openstack.block_storage.v3.volume.Volume.init_attachment`` and + ``block_storage.init_volume_attachment`` now return the results of the POST + request instead of None. This replicates the behaviour of cinderclient; the + returned data is used by nova and ironic for managing volume attachments. \ No newline at end of file