diff --git a/nova/storage/__init__.py b/nova/storage/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/nova/virt/libvirt/storage/rbd_utils.py b/nova/storage/rbd_utils.py similarity index 99% rename from nova/virt/libvirt/storage/rbd_utils.py rename to nova/storage/rbd_utils.py index 97440b81e444..bda1b5d54200 100644 --- a/nova/virt/libvirt/storage/rbd_utils.py +++ b/nova/storage/rbd_utils.py @@ -34,13 +34,14 @@ from oslo_utils import excutils import nova.conf from nova import exception from nova.i18n import _ -from nova.virt.libvirt import utils as libvirt_utils CONF = nova.conf.CONF LOG = logging.getLogger(__name__) +RESIZE_SNAPSHOT_NAME = 'nova-resize' + class RbdProxy(object): """A wrapper around rbd.RBD class instance to avoid blocking of process. @@ -342,7 +343,7 @@ class RBDDriver(object): RbdProxy().remove(ioctx, volume) raise loopingcall.LoopingCallDone(retvalue=False) except rbd.ImageHasSnapshots: - self.remove_snap(volume, libvirt_utils.RESIZE_SNAPSHOT_NAME, + self.remove_snap(volume, RESIZE_SNAPSHOT_NAME, ignore_errors=True) except (rbd.ImageBusy, rbd.ImageHasSnapshots): LOG.warning('rbd remove %(volume)s in pool %(pool)s failed', diff --git a/nova/tests/functional/libvirt/test_evacuate.py b/nova/tests/functional/libvirt/test_evacuate.py index 96fc8af3fbfb..b06820908848 100644 --- a/nova/tests/functional/libvirt/test_evacuate.py +++ b/nova/tests/functional/libvirt/test_evacuate.py @@ -220,7 +220,7 @@ class _RbdTest(object): # We never want to actually touch rbd self.mock_rbd_driver = self.useFixture(fixtures.MockPatch( - 'nova.virt.libvirt.storage.rbd_utils.RBDDriver')).mock.return_value + 'nova.storage.rbd_utils.RBDDriver')).mock.return_value self.mock_rbd_driver.get_mon_addrs.return_value = ([], []) self.mock_rbd_driver.size.return_value = 10 * units.Gi self.mock_rbd_driver.rbd_user = 'rbd' diff --git a/nova/tests/unit/virt/libvirt/storage/test_rbd.py b/nova/tests/unit/storage/test_rbd.py similarity index 99% rename from nova/tests/unit/virt/libvirt/storage/test_rbd.py rename to nova/tests/unit/storage/test_rbd.py index 5ce5c3b072de..fd9372b870a5 100644 --- a/nova/tests/unit/virt/libvirt/storage/test_rbd.py +++ b/nova/tests/unit/storage/test_rbd.py @@ -19,9 +19,8 @@ from oslo_utils.fixture import uuidsentinel as uuids from nova.compute import task_states from nova import exception from nova import objects +from nova.storage import rbd_utils from nova import test -from nova.virt.libvirt.storage import rbd_utils -from nova.virt.libvirt import utils as libvirt_utils CEPH_MON_DUMP = r"""dumped monmap epoch 1 @@ -466,7 +465,7 @@ class RbdTestCase(test.NoDBTestCase): proxy = mock_proxy.return_value proxy.__enter__.return_value = proxy proxy.list_snaps.return_value = [ - {'name': libvirt_utils.RESIZE_SNAPSHOT_NAME}] + {'name': rbd_utils.RESIZE_SNAPSHOT_NAME}] client = mock_client.return_value self.driver.cleanup_volumes(filter_fn) @@ -474,7 +473,7 @@ class RbdTestCase(test.NoDBTestCase): '%s_test' % uuids.instance) rbd.remove.assert_has_calls([remove_call, remove_call]) proxy.remove_snap.assert_called_once_with( - libvirt_utils.RESIZE_SNAPSHOT_NAME) + rbd_utils.RESIZE_SNAPSHOT_NAME) client.__enter__.assert_called_once_with() client.__exit__.assert_called_once_with(None, None, None) diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py index fa941275a721..de41339bcc96 100644 --- a/nova/tests/unit/virt/libvirt/test_driver.py +++ b/nova/tests/unit/virt/libvirt/test_driver.py @@ -84,6 +84,7 @@ from nova.pci import manager as pci_manager from nova.pci import utils as pci_utils import nova.privsep.fs import nova.privsep.libvirt +from nova.storage import rbd_utils from nova import test from nova.tests import fixtures as nova_fixtures from nova.tests.unit import fake_block_device @@ -118,7 +119,6 @@ from nova.virt.libvirt import imagecache from nova.virt.libvirt import migration as libvirt_migrate from nova.virt.libvirt.storage import dmcrypt from nova.virt.libvirt.storage import lvm -from nova.virt.libvirt.storage import rbd_utils from nova.virt.libvirt import utils as libvirt_utils from nova.virt.libvirt import vif as libvirt_vif from nova.virt.libvirt.volume import fs as fs_drivers @@ -23148,7 +23148,7 @@ class LibvirtDriverTestCase(test.NoDBTestCase, TraitsComparisonMixin): self.assertFalse(mock_inject.called) @mock.patch('nova.virt.libvirt.utils.fetch_image') - @mock.patch('nova.virt.libvirt.storage.rbd_utils.RBDDriver') + @mock.patch('nova.storage.rbd_utils.RBDDriver') @mock.patch.object(imagebackend, 'IMAGE_API') def test_create_fetch_image_ceph_workaround(self, mock_image, mock_rbd, mock_fetch): diff --git a/nova/tests/unit/virt/libvirt/test_imagebackend.py b/nova/tests/unit/virt/libvirt/test_imagebackend.py index 843eb0fdd677..031d543b2b1d 100644 --- a/nova/tests/unit/virt/libvirt/test_imagebackend.py +++ b/nova/tests/unit/virt/libvirt/test_imagebackend.py @@ -35,6 +35,7 @@ import nova.conf from nova import context from nova import exception from nova import objects +from nova.storage import rbd_utils from nova import test from nova.tests.unit import fake_processutils from nova import utils @@ -42,7 +43,6 @@ from nova.virt.image import model as imgmodel from nova.virt import images from nova.virt.libvirt import config as vconfig from nova.virt.libvirt import imagebackend -from nova.virt.libvirt.storage import rbd_utils from nova.virt.libvirt import utils as libvirt_utils CONF = nova.conf.CONF @@ -1894,7 +1894,7 @@ class RbdTestCase(_ImageTestCase, test.NoDBTestCase): mock_imgapi.copy_image_to_store.assert_called_once_with( self.CONTEXT, 'foo', 'store') - @mock.patch('nova.virt.libvirt.storage.rbd_utils.RBDDriver') + @mock.patch('nova.storage.rbd_utils.RBDDriver') @mock.patch('nova.virt.libvirt.imagebackend.IMAGE_API') def test_clone_copy_to_store(self, mock_imgapi, mock_driver_): # Call image.clone() in a way that will cause it to fall through @@ -1921,7 +1921,7 @@ class RbdTestCase(_ImageTestCase, test.NoDBTestCase): # recursed after the copy-to-store operation mock.call('fake', fake_image)]) - @mock.patch('nova.virt.libvirt.storage.rbd_utils.RBDDriver') + @mock.patch('nova.storage.rbd_utils.RBDDriver') @mock.patch('nova.virt.libvirt.imagebackend.IMAGE_API') def test_clone_copy_to_store_failed(self, mock_imgapi, mock_driver_): # Call image.clone() in a way that will cause it to fall through @@ -1950,7 +1950,7 @@ class RbdTestCase(_ImageTestCase, test.NoDBTestCase): # recursed after the copy-to-store operation mock.call('fake', fake_image)]) - @mock.patch('nova.virt.libvirt.storage.rbd_utils.RBDDriver') + @mock.patch('nova.storage.rbd_utils.RBDDriver') @mock.patch('nova.virt.libvirt.imagebackend.IMAGE_API') def test_clone_without_needed_copy(self, mock_imgapi, mock_driver_): # Call image.clone() in a way that will cause it to pass the locations @@ -1971,7 +1971,7 @@ class RbdTestCase(_ImageTestCase, test.NoDBTestCase): mock_copy.assert_not_called() mock_driver.is_cloneable.assert_called_once_with('fake', fake_image) - @mock.patch('nova.virt.libvirt.storage.rbd_utils.RBDDriver') + @mock.patch('nova.storage.rbd_utils.RBDDriver') @mock.patch('nova.virt.libvirt.imagebackend.IMAGE_API') def test_clone_copy_not_configured(self, mock_imgapi, mock_driver_): # Call image.clone() in a way that will cause it to fail the locations diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 7bc5b21a21b6..0cd24aa7d0c7 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -100,6 +100,7 @@ from nova.pci import utils as pci_utils import nova.privsep.libvirt import nova.privsep.path import nova.privsep.utils +from nova.storage import rbd_utils from nova import utils from nova import version from nova.virt import arch @@ -122,7 +123,6 @@ from nova.virt.libvirt import instancejobtracker from nova.virt.libvirt import migration as libvirt_migrate from nova.virt.libvirt.storage import dmcrypt from nova.virt.libvirt.storage import lvm -from nova.virt.libvirt.storage import rbd_utils from nova.virt.libvirt import utils as libvirt_utils from nova.virt.libvirt import vif as libvirt_vif from nova.virt.libvirt.volume import fs diff --git a/nova/virt/libvirt/imagebackend.py b/nova/virt/libvirt/imagebackend.py index bfd5c0eef4bc..1f88fa20d62a 100644 --- a/nova/virt/libvirt/imagebackend.py +++ b/nova/virt/libvirt/imagebackend.py @@ -38,6 +38,7 @@ from nova.i18n import _ from nova.image import glance import nova.privsep.libvirt import nova.privsep.path +from nova.storage import rbd_utils from nova import utils from nova.virt.disk import api as disk from nova.virt.image import model as imgmodel @@ -45,7 +46,6 @@ from nova.virt import images from nova.virt.libvirt import config as vconfig from nova.virt.libvirt.storage import dmcrypt from nova.virt.libvirt.storage import lvm -from nova.virt.libvirt.storage import rbd_utils from nova.virt.libvirt import utils as libvirt_utils CONF = nova.conf.CONF