Retrieval of RBD device information issue
Libvirt still doesnt support retrieval of RBD device information. Fix skip "network" type devices and send message to LogWarning. Change-Id: I1b8adb97d6f86c8fbe09a89760c5e1a776639b08 Partial-Bug: #1457440
This commit is contained in:
parent
123fa26585
commit
3b14d40a27
@ -22,7 +22,7 @@ import six
|
||||
|
||||
from ceilometer.compute.pollsters import util
|
||||
from ceilometer.compute.virt import inspector as virt_inspector
|
||||
from ceilometer.i18n import _
|
||||
from ceilometer.i18n import _LW, _
|
||||
|
||||
libvirt = None
|
||||
|
||||
@ -205,19 +205,25 @@ class LibvirtInspector(virt_inspector.Inspector):
|
||||
|
||||
def inspect_disk_info(self, instance):
|
||||
domain = self._get_domain_not_shut_off_or_raise(instance)
|
||||
|
||||
tree = etree.fromstring(domain.XMLDesc(0))
|
||||
for device in filter(
|
||||
bool,
|
||||
[target.get("dev")
|
||||
for target in tree.findall('devices/disk/target')]):
|
||||
disk = virt_inspector.Disk(device=device)
|
||||
block_info = domain.blockInfo(device)
|
||||
info = virt_inspector.DiskInfo(capacity=block_info[0],
|
||||
allocation=block_info[1],
|
||||
physical=block_info[2])
|
||||
|
||||
yield (disk, info)
|
||||
for disk in tree.findall('devices/disk'):
|
||||
disk_type = disk.get('type')
|
||||
if disk_type:
|
||||
if disk_type == 'network':
|
||||
LOG.warning(
|
||||
_LW('Inspection disk usage of network disk '
|
||||
'%(instance_uuid)s unsupported by libvirt') % {
|
||||
'instance_uuid': instance.id})
|
||||
continue
|
||||
target = disk.find('target')
|
||||
device = target.get('dev')
|
||||
if device:
|
||||
dsk = virt_inspector.Disk(device=device)
|
||||
block_info = domain.blockInfo(device)
|
||||
info = virt_inspector.DiskInfo(capacity=block_info[0],
|
||||
allocation=block_info[1],
|
||||
physical=block_info[2])
|
||||
yield (dsk, info)
|
||||
|
||||
def inspect_memory_resident(self, instance, duration=None):
|
||||
domain = self._get_domain_not_shut_off_or_raise(instance)
|
||||
|
@ -303,6 +303,38 @@ class TestLibvirtInspection(base.BaseTestCase):
|
||||
self.assertEqual(2, info0.allocation)
|
||||
self.assertEqual(3, info0.physical)
|
||||
|
||||
def test_inspect_disk_info_network_type(self):
|
||||
dom_xml = """
|
||||
<domain type='kvm'>
|
||||
<devices>
|
||||
<disk type='network' device='disk'>
|
||||
<driver name='qemu' type='qcow2' cache='none'/>
|
||||
<source file='/path/instance-00000001/disk'/>
|
||||
<target dev='vda' bus='virtio'/>
|
||||
<alias name='virtio-disk0'/>
|
||||
<address type='pci' domain='0x0000' bus='0x00'
|
||||
slot='0x04' function='0x0'/>
|
||||
</disk>
|
||||
</devices>
|
||||
</domain>
|
||||
"""
|
||||
|
||||
with contextlib.ExitStack() as stack:
|
||||
stack.enter_context(mock.patch.object(self.inspector.connection,
|
||||
'lookupByUUIDString',
|
||||
return_value=self.domain))
|
||||
stack.enter_context(mock.patch.object(self.domain, 'XMLDesc',
|
||||
return_value=dom_xml))
|
||||
stack.enter_context(mock.patch.object(self.domain, 'blockInfo',
|
||||
return_value=(1, 2, 3,
|
||||
-1)))
|
||||
stack.enter_context(mock.patch.object(self.domain, 'info',
|
||||
return_value=(0, 0, 0,
|
||||
2, 999999)))
|
||||
disks = list(self.inspector.inspect_disk_info(self.instance))
|
||||
|
||||
self.assertEqual(0, len(disks))
|
||||
|
||||
def test_inspect_memory_usage_with_domain_shutoff(self):
|
||||
connection = self.inspector.connection
|
||||
with mock.patch.object(connection, 'lookupByUUIDString',
|
||||
|
Loading…
Reference in New Issue
Block a user