Merge "[Trivial] Refactor libvirt inspector connection & uri"

This commit is contained in:
Jenkins 2016-09-15 22:04:41 +00:00 committed by Gerrit Code Review
commit caeb661d8a
2 changed files with 23 additions and 30 deletions

View File

@ -68,32 +68,31 @@ class LibvirtInspector(virt_inspector.Inspector):
per_type_uris = dict(uml='uml:///system', xen='xen:///', lxc='lxc:///')
def __init__(self):
self.uri = self._get_uri()
self.connection = None
self._connection = None
def _get_uri(self):
return CONF.libvirt_uri or self.per_type_uris.get(CONF.libvirt_type,
'qemu:///system')
def _get_connection(self):
if not self.connection:
@property
def connection(self):
if not self._connection:
global libvirt
if libvirt is None:
libvirt = __import__('libvirt')
LOG.debug('Connecting to libvirt: %s', self.uri)
self.connection = libvirt.openReadOnly(self.uri)
return self.connection
uri = (CONF.libvirt_uri or
self.per_type_uris.get(CONF.libvirt_type, 'qemu:///system'))
LOG.debug('Connecting to libvirt: %s', uri)
self._connection = libvirt.openReadOnly(uri)
return self._connection
def check_sanity(self):
if not self._get_connection():
if not self.connection:
raise virt_inspector.NoSanityException()
@retry_on_disconnect
def _lookup_by_uuid(self, instance):
instance_name = util.instance_name(instance)
try:
return self._get_connection().lookupByUUIDString(instance.id)
return self.connection.lookupByUUIDString(instance.id)
except Exception as ex:
if not libvirt or not isinstance(ex, libvirt.libvirtError):
raise virt_inspector.InspectorException(six.text_type(ex))

View File

@ -41,7 +41,6 @@ class TestLibvirtInspection(base.BaseTestCase):
name = 'instance-00000001'
self.instance = VMInstance
self.inspector = libvirt_inspector.LibvirtInspector()
self.inspector.connection = mock.Mock()
libvirt_inspector.libvirt = mock.Mock()
libvirt_inspector.libvirt.VIR_DOMAIN_SHUTOFF = 5
libvirt_inspector.libvirt.libvirtError = self.fakeLibvirtError
@ -416,15 +415,11 @@ class TestLibvirtInspectionWithError(base.BaseTestCase):
self.inspector = libvirt_inspector.LibvirtInspector()
self.useFixture(fixtures.MonkeyPatch(
'ceilometer.compute.virt.libvirt.inspector.'
'LibvirtInspector._get_connection',
self._dummy_get_connection))
'LibvirtInspector.connection',
mock.MagicMock(side_effect=Exception('dummy'))))
libvirt_inspector.libvirt = mock.Mock()
libvirt_inspector.libvirt.libvirtError = self.fakeLibvirtError
@staticmethod
def _dummy_get_connection(*args, **kwargs):
raise Exception('dummy')
def test_inspect_unknown_error(self):
self.assertRaises(virt_inspector.InspectorException,
self.inspector.inspect_cpus, 'foo')
@ -437,16 +432,15 @@ class TestLibvirtInitWithError(base.BaseTestCase):
self.inspector = libvirt_inspector.LibvirtInspector()
libvirt_inspector.libvirt = mock.Mock()
@mock.patch('ceilometer.compute.virt.libvirt.inspector.'
'LibvirtInspector._get_connection',
mock.Mock(return_value=None))
def test_init_error(self):
self.assertRaises(virt_inspector.NoSanityException,
self.inspector.check_sanity)
with mock.patch.object(libvirt_inspector.libvirt,
'openReadOnly',
return_value=None):
self.assertRaises(virt_inspector.NoSanityException,
self.inspector.check_sanity)
@mock.patch('ceilometer.compute.virt.libvirt.inspector.'
'LibvirtInspector._get_connection',
mock.Mock(side_effect=virt_inspector.NoDataException))
def test_init_exception(self):
self.assertRaises(virt_inspector.NoDataException,
self.inspector.check_sanity)
with mock.patch.object(libvirt_inspector.libvirt,
'openReadOnly',
side_effect=ImportError):
self.assertRaises(ImportError, self.inspector.check_sanity)