diff options
author | whoami-rajat <rajatdhasmana@gmail.com> | 2021-04-15 09:17:59 -0400 |
---|---|---|
committer | Rajat Dhasmana <rajatdhasmana@gmail.com> | 2021-08-12 09:20:20 -0400 |
commit | ecda7f640fe4e807ba07981abfc1a637ddb496cd (patch) | |
tree | 3cbb1f16a6a36cbcbfa2e6975490d39f7dc8f564 /glance_store/_drivers | |
parent | 85c7a06687291eba30510d63d3ee8b9e9cb33c5f (diff) | |
download | glance_store-ecda7f640fe4e807ba07981abfc1a637ddb496cd.tar.gz |
Add volume multiattach handling
We implemented cinder's new attachment API support with patch[1].
It was needed to add multiattach volume handling added with this
patch.
There is no special configuration change or user interference needed.
If a volume is of a multiattach type, then it will be handled as
a multiattach volume.
[1] https://review.opendev.org/c/openstack/glance_store/+/782200
Implements: blueprint attachment-api-and-multiattach-support
Closes-Bug: #1904546
Change-Id: Iffb825492a20fd877476acad05f817b399072f01
Diffstat (limited to 'glance_store/_drivers')
-rw-r--r-- | glance_store/_drivers/cinder.py | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/glance_store/_drivers/cinder.py b/glance_store/_drivers/cinder.py index d62feb3..3ccfe29 100644 --- a/glance_store/_drivers/cinder.py +++ b/glance_store/_drivers/cinder.py @@ -33,6 +33,7 @@ from oslo_config import cfg from oslo_utils import units from glance_store import capabilities +from glance_store.common import attachment_state_manager from glance_store.common import cinder_utils from glance_store.common import utils import glance_store.driver @@ -699,8 +700,13 @@ class Store(glance_store.driver.Store): connector_prop = connector.get_connector_properties( root_helper, host, use_multipath, enforce_multipath) - attachment = self.volume_api.attachment_create(client, volume_id, - mode=attach_mode) + if volume.multiattach: + attachment = attachment_state_manager.attach(client, volume_id, + host, + mode=attach_mode) + else: + attachment = self.volume_api.attachment_create(client, volume_id, + mode=attach_mode) attachment = self.volume_api.attachment_update( client, attachment['id'], connector_prop, mountpoint='glance_store') @@ -767,13 +773,19 @@ class Store(glance_store.driver.Store): root_helper) disconnect_volume_nfs() else: - conn.disconnect_volume(connection_info, device) + if volume.multiattach: + attachment_state_manager.detach( + client, attachment.id, volume_id, host, conn, + connection_info, device) + else: + conn.disconnect_volume(connection_info, device) except Exception: LOG.exception(_LE('Failed to disconnect volume ' '%(volume_id)s.'), {'volume_id': volume.id}) - self.volume_api.attachment_delete(client, attachment.id) + if not volume.multiattach: + self.volume_api.attachment_delete(client, attachment.id) def _cinder_volume_data_iterator(self, client, volume, max_size, offset=0, chunk_size=None, partial_length=None): |