curtin-dev team mailing list archive
-
curtin-dev team
-
Mailing list archive
-
Message #01695
[Merge] ~slyon/curtin:slyon/lp1895192-2 into curtin:master
Lukas Märdian has proposed merging ~slyon/curtin:slyon/lp1895192-2 into curtin:master.
Commit message:
block:lvm: search encrypted volumes for LVM
Allow booting off fully encrypted multipath devices by whitelisting encrypted
volumes in addition to the multipath devices themselves for LVM discovery.
Fixes LP: #1895192
Requested reviews:
Michael Hudson-Doyle (mwhudson)
Related bugs:
Bug #1895192 in curtin: "Optimistic approach of using zkey for encrypted installations on s390x not working"
https://bugs.launchpad.net/curtin/+bug/1895192
For more details, see:
https://code.launchpad.net/~slyon/curtin/+git/curtin/+merge/406530
block:lvm: search encrypted volumes for LVM
Allow booting off fully encrypted multipath devices by whitelisting encrypted
volumes in addition to the multipath devices themselves for LVM discovery.
Fixes LP: #1895192
--
Your team curtin developers is subscribed to branch curtin:master.
diff --git a/curtin/block/lvm.py b/curtin/block/lvm.py
index bd0f1aa..333b46f 100644
--- a/curtin/block/lvm.py
+++ b/curtin/block/lvm.py
@@ -81,7 +81,7 @@ def activate_volgroups(multipath=False):
"""
cmd = ['vgchange', '--activate=y']
if multipath:
- # only operate on mp devices
+ # only operate on mp devices or encrypted volumes
mp_filter = generate_multipath_dev_mapper_filter()
cmd.extend(['--config', 'devices{ %s }' % mp_filter])
@@ -100,12 +100,14 @@ def _generate_multipath_filter(accept=None):
def generate_multipath_dev_mapper_filter():
- return _generate_multipath_filter(accept=['/dev/mapper/mpath.*'])
+ return _generate_multipath_filter(
+ accept=['/dev/mapper/mpath.*', '/dev/mapper/dm_crypt-.*'])
def generate_multipath_dm_uuid_filter():
- return _generate_multipath_filter(
- accept=['/dev/disk/by-id/dm-uuid-.*mpath-.*'])
+ return _generate_multipath_filter(accept=[
+ '/dev/disk/by-id/dm-uuid-.*mpath-.*',
+ '/dev/disk/by-id/.*dm_crypt-.*'])
def lvm_scan(activate=True, multipath=False):
@@ -126,8 +128,9 @@ def lvm_scan(activate=True, multipath=False):
release = 'xenial'
if multipath:
- # only operate on mp devices
- mponly = 'devices{ filter = [ "a|/dev/mapper/mpath.*|", "r|.*|" ] }'
+ # only operate on mp devices or encrypted volumes
+ mponly = 'devices{ filter = [ "a|%s|", "a|%s|", "r|.*|" ] }' % (
+ '/dev/mapper/mpath.*', '/dev/mapper/dm_crypt-.*')
for cmd in [['pvscan'], ['vgscan']]:
if release != 'precise' and lvmetad_running():
diff --git a/tests/unittests/test_block_lvm.py b/tests/unittests/test_block_lvm.py
index ff58b30..fc6130a 100644
--- a/tests/unittests/test_block_lvm.py
+++ b/tests/unittests/test_block_lvm.py
@@ -106,7 +106,8 @@ class TestBlockLvm(CiTestCase):
lvm.lvm_scan(multipath=True)
cmd_filter = [
'--config',
- 'devices{ filter = [ "a|/dev/mapper/mpath.*|", "r|.*|" ] }'
+ 'devices{ filter = [ "a|%s|", "a|%s|", "r|.*|" ] }' % (
+ '/dev/mapper/mpath.*', '/dev/mapper/dm_crypt-.*')
]
expected = [cmd + cmd_filter for cmd in cmds]
calls = [mock.call(cmd, capture=True) for cmd in expected]
@@ -117,12 +118,15 @@ class TestBlockLvm(CiTestCase):
class TestBlockLvmMultipathFilter(CiTestCase):
def test_generate_multipath_dev_mapper_filter(self):
- expected = 'filter = [ "a|/dev/mapper/mpath.*|", "r|.*|" ]'
+ expected = 'filter = [ "a|%s|", "a|%s|", "r|.*|" ]' % (
+ '/dev/mapper/mpath.*', '/dev/mapper/dm_crypt-.*')
self.assertEqual(expected, lvm.generate_multipath_dev_mapper_filter())
def test_generate_multipath_dm_uuid_filter(self):
expected = (
- 'filter = [ "a|/dev/disk/by-id/dm-uuid-.*mpath-.*|", "r|.*|" ]')
+ 'filter = [ "a|%s|", "a|%s|", "r|.*|" ]' % (
+ '/dev/disk/by-id/dm-uuid-.*mpath-.*',
+ '/dev/disk/by-id/.*dm_crypt-.*'))
self.assertEqual(expected, lvm.generate_multipath_dm_uuid_filter())
Follow ups