check ephemeral disk format at libvirt before use
Add ephemeral disk format at libvirt. There is no check before so it will be used directly. This patch adds valid check function and validate it before eph disk was used in virt layer. Change-Id: I1934573e79f126e725cef4848b15c11a595161c9 Closes-Bug: #1293880
This commit is contained in:
parent
89cd2f9a4d
commit
b1cde33175
@ -4904,6 +4904,34 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
]
|
||||
self.assertEqual(gotFiles, wantFiles)
|
||||
|
||||
def test_create_ephemeral_specified_fs_not_valid(self):
|
||||
CONF.set_override('default_ephemeral_format', 'ext4')
|
||||
ephemerals = [{'device_type': 'disk',
|
||||
'disk_bus': 'virtio',
|
||||
'device_name': '/dev/vdb',
|
||||
'guest_format': 'dummy',
|
||||
'size': 1}]
|
||||
block_device_info = {
|
||||
'ephemerals': ephemerals}
|
||||
instance_ref = self.test_instance
|
||||
instance_ref['image_ref'] = 1
|
||||
instance = db.instance_create(self.context, instance_ref)
|
||||
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
image_meta = {'id': instance['image_ref']}
|
||||
disk_info = blockinfo.get_disk_info(CONF.libvirt.virt_type,
|
||||
instance,
|
||||
None,
|
||||
image_meta)
|
||||
disk_info['mapping'].pop('disk.local')
|
||||
|
||||
with contextlib.nested(
|
||||
mock.patch.object(utils, 'execute'),
|
||||
mock.patch.object(conn, 'get_info'),
|
||||
mock.patch.object(conn, '_create_domain_and_network')):
|
||||
self.assertRaises(exception.InvalidBDMFormat, conn._create_image,
|
||||
context, instance, disk_info['mapping'],
|
||||
block_device_info=block_device_info)
|
||||
|
||||
def test_create_ephemeral_default(self):
|
||||
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
self.mox.StubOutWithMock(utils, 'execute')
|
||||
@ -6919,6 +6947,18 @@ class LibvirtConnTestCase(test.TestCase):
|
||||
ephemerals, swap,
|
||||
block_device_mapping)
|
||||
|
||||
def test_is_supported_fs_format(self):
|
||||
supported_fs = [disk.FS_FORMAT_EXT2, disk.FS_FORMAT_EXT3,
|
||||
disk.FS_FORMAT_EXT4, disk.FS_FORMAT_XFS]
|
||||
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
for fs in supported_fs:
|
||||
self.assertTrue(conn.is_supported_fs_format(fs))
|
||||
|
||||
supported_fs = ['', 'dummy']
|
||||
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
for fs in supported_fs:
|
||||
self.assertFalse(conn.is_supported_fs_format(fs))
|
||||
|
||||
def test_hypervisor_hostname_caching(self):
|
||||
# Make sure that the first hostname is always returned
|
||||
class FakeConn(object):
|
||||
|
@ -2662,6 +2662,12 @@ class LibvirtDriver(driver.ComputeDriver):
|
||||
for idx, eph in enumerate(driver.block_device_info_get_ephemerals(
|
||||
block_device_info)):
|
||||
disk_image = image(blockinfo.get_eph_disk(idx))
|
||||
|
||||
specified_fs = eph.get('guest_format')
|
||||
if specified_fs and not self.is_supported_fs_format(specified_fs):
|
||||
msg = _("%s format is not supported") % specified_fs
|
||||
raise exception.InvalidBDMFormat(details=msg)
|
||||
|
||||
fn = functools.partial(self._create_ephemeral,
|
||||
fs_label='ephemeral%d' % idx,
|
||||
os_type=instance["os_type"],
|
||||
@ -5287,6 +5293,10 @@ class LibvirtDriver(driver.ComputeDriver):
|
||||
ephemerals, swap,
|
||||
block_device_mapping)
|
||||
|
||||
def is_supported_fs_format(self, fs_type):
|
||||
return fs_type in [disk.FS_FORMAT_EXT2, disk.FS_FORMAT_EXT3,
|
||||
disk.FS_FORMAT_EXT4, disk.FS_FORMAT_XFS]
|
||||
|
||||
|
||||
class HostState(object):
|
||||
"""Manages information about the compute node through libvirt."""
|
||||
|
Loading…
Reference in New Issue
Block a user