rbd: Move rbd_utils out of libvirt driver under nova.storage

This module will be used within nova.image.glance as part of the
nova-image-download-via-rbd blueprint. As this can technically be used
by multiple virt drivers it's time to break rbd_utils out from the
libvirt driver into a more generic place in the codebase.

Change-Id: I25baf5edd25d9e551686b7ed317a63fd778be533
This commit is contained in:
Lee Yarwood 2020-08-19 11:51:59 +01:00
parent d09fade87e
commit 9285428a16
8 changed files with 16 additions and 16 deletions

0
nova/storage/__init__.py Normal file
View File

View File

@ -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',

View File

@ -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'

View File

@ -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)

View File

@ -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
@ -22810,7 +22810,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):

View File

@ -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

View File

@ -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

View File

@ -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