From dcb9f4a94de763cf2f0f7b37a38ce8bffa049129 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Ribaud?= Date: Mon, 3 Oct 2022 17:53:49 +0200 Subject: [PATCH] Add share_info parameter to resume method for each driver (driver part) This patch allow to pass share_info parameter to the resume method. So it will allow to resume an instance and keep the shares attached. Manila is the OpenStack Shared Filesystems service. These series of patches implement changes required in Nova to allow the shares provided by Manila to be associated with and attached to instances using virtiofs. Implements: blueprint libvirt-virtiofs-attach-manila-shares Change-Id: I66da2b010caa7e7bed15e69c1e14fd22ca1c8a31 --- nova/tests/unit/virt/libvirt/test_driver.py | 14 +++++++++++--- nova/virt/driver.py | 11 ++++++++++- nova/virt/fake.py | 9 ++++++++- nova/virt/libvirt/driver.py | 19 +++++++++++++++---- nova/virt/vmwareapi/driver.py | 9 ++++++++- 5 files changed, 52 insertions(+), 10 deletions(-) diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py index 9b4ca65537..f7463e2a33 100644 --- a/nova/tests/unit/virt/libvirt/test_driver.py +++ b/nova/tests/unit/virt/libvirt/test_driver.py @@ -18298,10 +18298,18 @@ class LibvirtConnTestCase(test.NoDBTestCase, _attach_mediated_devices): get_image_metadata.return_value = {'bar': 234} + share_info = objects.share_mapping.ShareMappingList() + drvr.resume(self.context, instance, network_info, - block_device_info) - _get_existing_domain_xml.assert_has_calls([mock.call(instance, - network_info, block_device_info)]) + block_device_info, share_info=share_info) + _get_existing_domain_xml.assert_has_calls( + [mock.call( + instance, + network_info, + block_device_info, + share_info + )] + ) _create_guest_with_network.assert_has_calls([ mock.call( self.context, dummyxml, instance, network_info, diff --git a/nova/virt/driver.py b/nova/virt/driver.py index ef91594241..f90c1b58b3 100644 --- a/nova/virt/driver.py +++ b/nova/virt/driver.py @@ -972,7 +972,14 @@ class ComputeDriver(object): """ raise NotImplementedError() - def resume(self, context, instance, network_info, block_device_info=None): + def resume( + self, + context, + instance, + network_info, + block_device_info=None, + share_info=None + ): """resume the specified suspended instance. The suspended instance gets resumed and will use CPU cycles and memory @@ -988,6 +995,8 @@ class ComputeDriver(object): Necessary network information for the resume. :param dict block_device_info: Instance volume block device info. + :param nova.objects.share_mapping.ShareMapingList share_info + optional list of share_mapping :return: None """ diff --git a/nova/virt/fake.py b/nova/virt/fake.py index 7e4f21e4d5..aadf2b97d3 100644 --- a/nova/virt/fake.py +++ b/nova/virt/fake.py @@ -321,7 +321,14 @@ class FakeDriver(driver.ComputeDriver): def suspend(self, context, instance): pass - def resume(self, context, instance, network_info, block_device_info=None): + def resume( + self, + context, + instance, + network_info, + block_device_info=None, + share_info=None + ): pass def destroy(self, context, instance, network_info, block_device_info=None, diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index c434c29cc2..5b64404ff9 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -2441,7 +2441,7 @@ class LibvirtDriver(driver.ComputeDriver): self._disconnect_volume(context, old_connection_info, instance) def _get_existing_domain_xml(self, instance, network_info, - block_device_info=None): + block_device_info=None, share_info=None): try: guest = self._host.get_guest(instance) xml = guest.get_xml_desc() @@ -2453,7 +2453,8 @@ class LibvirtDriver(driver.ComputeDriver): xml = self._get_guest_xml(nova_context.get_admin_context(), instance, network_info, disk_info, instance.image_meta, - block_device_info=block_device_info) + block_device_info=block_device_info, + share_info=share_info) return xml def emit_event(self, event: virtevent.InstanceEvent) -> None: @@ -4400,10 +4401,20 @@ class LibvirtDriver(driver.ComputeDriver): self._detach_mediated_devices(guest) guest.save_memory_state() - def resume(self, context, instance, network_info, block_device_info=None): + def resume( + self, + context, + instance, + network_info, + block_device_info=None, + share_info=None + ): """resume the specified instance.""" + if share_info is None: + share_info = objects.ShareMappingList() + xml = self._get_existing_domain_xml(instance, network_info, - block_device_info) + block_device_info, share_info) # NOTE(gsantos): The mediated devices that were removed on suspension # are still present in the xml. Let's take their references from it # and re-attach them. diff --git a/nova/virt/vmwareapi/driver.py b/nova/virt/vmwareapi/driver.py index 0365f1def4..5988ce469f 100644 --- a/nova/virt/vmwareapi/driver.py +++ b/nova/virt/vmwareapi/driver.py @@ -644,7 +644,14 @@ class VMwareVCDriver(driver.ComputeDriver): """Suspend the specified instance.""" self._vmops.suspend(instance) - def resume(self, context, instance, network_info, block_device_info=None): + def resume( + self, + context, + instance, + network_info, + block_device_info=None, + share_info=None + ): """Resume the suspended VM instance.""" self._vmops.resume(instance)