curtin-dev team mailing list archive
-
curtin-dev team
-
Mailing list archive
-
Message #01995
[Merge] ~dbungert/curtin:partition-show-path into curtin:master
Dan Bungert has proposed merging ~dbungert/curtin:partition-show-path into curtin:master.
Commit message:
block: output partition device path
reconstructing this later is non-trivial for some devices
Requested reviews:
curtin developers (curtin-dev)
For more details, see:
https://code.launchpad.net/~dbungert/curtin/+git/curtin/+merge/412878
--
Your team curtin developers is requested to review the proposed merge of ~dbungert/curtin:partition-show-path into curtin:master.
diff --git a/curtin/block/schemas.py b/curtin/block/schemas.py
index 84a5279..0a6e305 100644
--- a/curtin/block/schemas.py
+++ b/curtin/block/schemas.py
@@ -284,6 +284,10 @@ PARTITION = {
'properties': {
'id': {'$ref': '#/definitions/id'},
'multipath': {'type': 'string'},
+ # Permit path to device as output.
+ # This value is ignored for input.
+ 'path': {'type': 'string',
+ 'pattern': _path_dev},
'name': {'$ref': '#/definitions/name'},
'offset': {'$ref': '#/definitions/size'}, # XXX: This is not used
'preserve': {'$ref': '#/definitions/preserve'},
diff --git a/curtin/storage_config.py b/curtin/storage_config.py
index 405a1e2..11735fa 100644
--- a/curtin/storage_config.py
+++ b/curtin/storage_config.py
@@ -753,6 +753,8 @@ class BlockdevParser(ProbertParser):
return entry
if entry['type'] == 'partition':
+ if devname:
+ entry['path'] = devname
attrs = blockdev_data['attrs']
if self.is_mpath_partition(blockdev_data):
entry['number'] = int(blockdev_data['DM_PART'])
diff --git a/tests/unittests/test_storage_config.py b/tests/unittests/test_storage_config.py
index a2308c4..b3f6473 100644
--- a/tests/unittests/test_storage_config.py
+++ b/tests/unittests/test_storage_config.py
@@ -285,7 +285,7 @@ class TestBlockdevParser(CiTestCase):
""" BlockdevParser skips invalid ID_WWN_* values. """
self.bdevp.blockdev_data['/dev/sda'] = {
'DEVTYPE': 'disk',
- 'DEVNAME': 'sda',
+ 'DEVNAME': '/dev/sda',
'ID_SERIAL': 'Corsair_Force_GS_1785234921906',
'ID_SERIAL_SHORT': '1785234921906',
'ID_WWN': '0x0000000000000000',
@@ -300,7 +300,7 @@ class TestBlockdevParser(CiTestCase):
""" BlockdevParser skips invalid ID_SERIAL_* values. """
self.bdevp.blockdev_data['/dev/sda'] = {
'DEVTYPE': 'disk',
- 'DEVNAME': 'sda',
+ 'DEVNAME': '/dev/sda',
'ID_SERIAL': ' ',
'ID_SERIAL_SHORT': 'My Serial is My PassPort',
}
@@ -345,6 +345,7 @@ class TestBlockdevParser(CiTestCase):
'id': 'partition-sda1',
'type': 'partition',
'device': 'disk-sda',
+ 'path': '/dev/sda1',
'number': 1,
'offset': 1048576,
'size': 499122176,
@@ -375,12 +376,12 @@ class TestBlockdevParser(CiTestCase):
""" BlockdevParser ignores partition with zero start value."""
self.bdevp.blockdev_data['/dev/vda'] = {
'DEVTYPE': 'disk',
- 'DEVNAME': 'vda',
+ 'DEVNAME': '/dev/vda',
}
test_value = {
'DEVTYPE': 'partition',
'MAJOR': "252",
- 'DEVNAME': 'vda1',
+ 'DEVNAME': '/dev/vda1',
"DEVPATH":
"/devices/pci0000:00/0000:00:04.0/virtio0/block/vda/vda1",
"ID_PART_ENTRY_TYPE": "0x0",
@@ -390,6 +391,7 @@ class TestBlockdevParser(CiTestCase):
'id': 'partition-vda1',
'type': 'partition',
'device': 'disk-vda',
+ 'path': '/dev/vda1',
'number': 1,
'size': 784334848,
}
@@ -403,7 +405,8 @@ class TestBlockdevParser(CiTestCase):
# XXX: Parameterize me
def test_blockdev_to_id_raises_valueerror_on_empty_devtype(self):
- test_value = {'DEVTYPE': '', 'DEVNAME': 'bar', 'DEVPATH': 'foobar'}
+ test_value = {'DEVTYPE': '', 'DEVNAME': '/dev/bar',
+ 'DEVPATH': 'foobar'}
with self.assertRaises(ValueError):
self.bdevp.blockdev_to_id(test_value)
@@ -415,7 +418,7 @@ class TestBlockdevParser(CiTestCase):
# XXX: Parameterize me
def test_blockdev_to_id_raises_valueerror_on_missing_devtype(self):
- test_value = {'DEVNAME': 'bar', 'DEVPATH': 'foobar'}
+ test_value = {'DEVNAME': '/dev/bar', 'DEVPATH': 'foobar'}
with self.assertRaises(ValueError):
self.bdevp.blockdev_to_id(test_value)
@@ -427,6 +430,7 @@ class TestBlockdevParser(CiTestCase):
expected_dict = {
'id': 'partition-vda2',
'type': 'partition',
+ 'path': '/dev/vda2',
'device': 'disk-vda',
'number': 2,
'offset': 3222274048,
@@ -446,6 +450,7 @@ class TestBlockdevParser(CiTestCase):
'id': 'partition-vda5',
'type': 'partition',
'device': 'disk-vda',
+ 'path': '/dev/vda5',
'number': 5,
'offset': 3223322624,
'size': 2147483648,
@@ -463,6 +468,7 @@ class TestBlockdevParser(CiTestCase):
'id': 'partition-vdb1',
'type': 'partition',
'device': 'disk-vdb',
+ 'path': '/dev/vdb1',
'number': 1,
'offset': 1048576,
'size': 536870912,
@@ -480,6 +486,7 @@ class TestBlockdevParser(CiTestCase):
'id': 'partition-vda5',
'type': 'partition',
'device': 'disk-vda',
+ 'path': '/dev/vda5',
'number': 5,
'offset': 3223322624,
'size': 2147483648,
@@ -536,6 +543,7 @@ class TestBlockdevParser(CiTestCase):
blockdev = self.bdevp.blockdev_data['/dev/dm-2']
expected_dict = {
'device': 'mpath-disk-mpatha',
+ 'path': '/dev/dm-2',
'flag': 'linux',
'id': 'mpath-partition-mpatha-part2',
'multipath': 'mpatha',
@@ -1011,6 +1019,7 @@ class TestExtractStorageConfig(CiTestCase):
'devices': ['partition-vdb1', 'partition-vdc1'],
'spare_devices': []}, raids[0])
self.assertEqual({'id': 'raid-md1p1', 'type': 'partition',
+ 'path': '/dev/md1p1',
'size': 4285530112, 'flag': 'linux', 'number': 1,
'device': 'raid-md1', 'offset': 1048576},
raid_partitions[0])
Follow ups