Ignore Nova config drive in devices list

The Nova config drive is no more treated as a volume.
The device containing the drive is filtered by a fixed label
'config-2' in lower and upper cases for compatibility with different
distros.

Change-Id: I345c9570010a42bb7e6cd2f31be834b7881a78ff
Closes-Bug: #1588760
This commit is contained in:
Nikita Konovalov 2016-06-03 13:50:52 +03:00
parent 18aa22e7c5
commit cf57c1f860
2 changed files with 38 additions and 5 deletions

View File

@ -143,6 +143,18 @@ def _find_instance_devices(instance):
"mount | awk '$1 ~ /^\/dev/ {print $1}'") "mount | awk '$1 ~ /^\/dev/ {print $1}'")
mounted_dev = mounted_info.split() mounted_dev = mounted_info.split()
# find and ignore Nova config drive
for label in ("config-2", "CONFIG-2"):
code, nova_config_drive = r.execute_command(
"/sbin/blkid -t LABEL=\"%s\" -odevice" % label,
raise_when_error=False,
run_as_root=True
)
drive_name = nova_config_drive.strip()
if code == 0 and drive_name in attached_dev:
attached_dev.remove(drive_name)
break
# filtering attached devices, that should not be mounted # filtering attached devices, that should not be mounted
for dev in attached_dev[:]: for dev in attached_dev[:]:
idx = re.sub("\D", "", dev) idx = re.sub("\D", "", dev)

View File

@ -93,35 +93,56 @@ class TestAttachVolume(base.SaharaWithDbTestCase):
attached_info = '/dev/vda /dev/vda1 /dev/vdb /dev/vdc' attached_info = '/dev/vda /dev/vda1 /dev/vdb /dev/vdc'
mounted_info = '/dev/vda1' mounted_info = '/dev/vda1'
ex_cmd.side_effect = [(0, attached_info), (0, mounted_info)] ex_cmd.side_effect = [(0, attached_info), (0, mounted_info), (2, ""),
(2, "")]
diff = volumes._find_instance_devices(instance) diff = volumes._find_instance_devices(instance)
self.assertEqual(['/dev/vdb', '/dev/vdc'], diff) self.assertEqual(['/dev/vdb', '/dev/vdc'], diff)
attached_info = '/dev/vda /dev/vda1 /dev/vdb /dev/vdb1 /dev/vdb2' attached_info = '/dev/vda /dev/vda1 /dev/vdb /dev/vdb1 /dev/vdb2'
mounted_info = '/dev/vda1' mounted_info = '/dev/vda1'
ex_cmd.side_effect = [(0, attached_info), (0, mounted_info)] ex_cmd.side_effect = [(0, attached_info), (0, mounted_info), (2, ""),
(2, "")]
diff = volumes._find_instance_devices(instance) diff = volumes._find_instance_devices(instance)
self.assertEqual(['/dev/vdb'], diff) self.assertEqual(['/dev/vdb'], diff)
attached_info = '/dev/vda /dev/vda1 /dev/vdb /dev/vdb1 /dev/vdb2' attached_info = '/dev/vda /dev/vda1 /dev/vdb /dev/vdb1 /dev/vdb2'
mounted_info = '/dev/vda1 /dev/vdb1' mounted_info = '/dev/vda1 /dev/vdb1'
ex_cmd.side_effect = [(0, attached_info), (0, mounted_info)] ex_cmd.side_effect = [(0, attached_info), (0, mounted_info), (2, ""),
(2, "")]
diff = volumes._find_instance_devices(instance) diff = volumes._find_instance_devices(instance)
self.assertEqual(['/dev/vdb2'], diff) self.assertEqual(['/dev/vdb2'], diff)
attached_info = '/dev/vda /dev/vda1 /dev/vdb /dev/vdb1 /dev/vdb2' attached_info = '/dev/vda /dev/vda1 /dev/vdb /dev/vdb1 /dev/vdb2'
mounted_info = '/dev/vda1 /dev/vdb2' mounted_info = '/dev/vda1 /dev/vdb2'
ex_cmd.side_effect = [(0, attached_info), (0, mounted_info)] ex_cmd.side_effect = [(0, attached_info), (0, mounted_info), (2, ""),
(2, "")]
diff = volumes._find_instance_devices(instance) diff = volumes._find_instance_devices(instance)
self.assertEqual(['/dev/vdb1'], diff) self.assertEqual(['/dev/vdb1'], diff)
attached_info = '/dev/vda /dev/vda1 /dev/vdb' attached_info = '/dev/vda /dev/vda1 /dev/vdb'
mounted_info = '/dev/vda1 /dev/vdb' mounted_info = '/dev/vda1 /dev/vdb'
ex_cmd.side_effect = [(0, attached_info), (0, mounted_info)] ex_cmd.side_effect = [(0, attached_info), (0, mounted_info), (2, ""),
(2, "")]
diff = volumes._find_instance_devices(instance)
self.assertEqual([], diff)
attached_info = '/dev/vda /dev/vda1 /dev/vdb'
mounted_info = '/dev/vda1'
ex_cmd.side_effect = [(0, attached_info), (0, mounted_info),
(0, "/dev/vdb")]
diff = volumes._find_instance_devices(instance)
self.assertEqual([], diff)
attached_info = '/dev/vda /dev/vda1 /dev/vdb'
mounted_info = '/dev/vda1'
ex_cmd.side_effect = [(0, attached_info), (0, mounted_info),
(2, ""), (0, "/dev/vdb")]
diff = volumes._find_instance_devices(instance) diff = volumes._find_instance_devices(instance)
self.assertEqual([], diff) self.assertEqual([], diff)