curtin-dev team mailing list archive
-
curtin-dev team
-
Mailing list archive
-
Message #02658
[Merge] ~dbungert/curtin:lp-2004609-swap-size-dropped into curtin:master
Dan Bungert has proposed merging ~dbungert/curtin:lp-2004609-swap-size-dropped into curtin:master.
Commit message:
block/v1: handle msdos+swap
Requested reviews:
curtin developers (curtin-dev)
For more details, see:
https://code.launchpad.net/~dbungert/curtin/+git/curtin/+merge/436862
--
Your team curtin developers is requested to review the proposed merge of ~dbungert/curtin:lp-2004609-swap-size-dropped into curtin:master.
diff --git a/curtin/commands/block_meta.py b/curtin/commands/block_meta.py
index 74c491c..9ea543a 100644
--- a/curtin/commands/block_meta.py
+++ b/curtin/commands/block_meta.py
@@ -1097,9 +1097,13 @@ def partition_handler(info, storage_config, context):
partition_type = flag
else:
partition_type = "primary"
- cmd = ["parted", disk, "--script", "mkpart", partition_type,
- "%ss" % offset_sectors, "%ss" % str(offset_sectors +
- length_sectors)]
+ cmd = ["parted", disk, "--script", "mkpart", partition_type]
+ if flag == 'swap':
+ cmd.append("linux-swap")
+ cmd.extend((
+ "%ss" % offset_sectors,
+ "%ss" % str(offset_sectors + length_sectors),
+ ))
if flag == 'boot':
cmd.extend(['set', str(partnumber), 'boot', 'on'])
diff --git a/tests/integration/test_block_meta.py b/tests/integration/test_block_meta.py
index 38b188a..ead1698 100644
--- a/tests/integration/test_block_meta.py
+++ b/tests/integration/test_block_meta.py
@@ -1230,3 +1230,16 @@ table-length: 256'''.encode()
self.run_bm(config.render())
self.assertPartitions(
PartData(number=1, offset=1 << 20, size=1 << 20))
+
+ @parameterized.expand(((1,), (2,)))
+ def test_swap(self, sv):
+ self.img = self.tmp_path('image.img')
+ config = StorageConfigBuilder(version=sv)
+ config.add_image(path=self.img, create=True, size='20M',
+ ptable='msdos')
+ config.add_part(number=1, offset=1 << 20, size=1 << 20, flag='swap')
+ self.run_bm(config.render())
+
+ self.assertPartitions(
+ PartData(number=1, offset=1 << 20, size=1 << 20, boot=False,
+ partition_type='82'))
diff --git a/tests/unittests/test_commands_block_meta.py b/tests/unittests/test_commands_block_meta.py
index 7067bc0..0c198e6 100644
--- a/tests/unittests/test_commands_block_meta.py
+++ b/tests/unittests/test_commands_block_meta.py
@@ -654,6 +654,62 @@ class TestBlockMeta(CiTestCase):
'mkpart', 'primary', '2048s', '1001471s',
'set', '1', 'boot', 'on'], capture=True)])
+ def test_partition_handler_creates_swap(self):
+ """ Create a swap partition if the flag has requested as much """
+ self.config = {
+ 'storage': {
+ 'version': 1,
+ 'config': [
+ {'grub_device': True,
+ 'id': 'sda',
+ 'name': 'sda',
+ 'path': '/wark/xxx',
+ 'ptable': 'msdos',
+ 'type': 'disk',
+ 'wipe': 'superblock'},
+ {'device': 'sda',
+ 'flag': 'swap',
+ 'id': 'sda-part1',
+ 'name': 'sda-part1',
+ 'number': 1,
+ 'offset': '4194304B',
+ 'size': '511705088B',
+ 'type': 'partition',
+ 'wipe': 'superblock'},
+ {'id': 'sda1-root',
+ 'type': 'format',
+ 'fstype': 'swap',
+ 'volume': 'sda-part1'},
+ ],
+ }
+ }
+ self.storage_config = (
+ block_meta.extract_storage_ordered_dict(self.config))
+
+ disk_info = self.storage_config.get('sda')
+ part_info = self.storage_config.get('sda-part1')
+ disk_kname = disk_info.get('path')
+ part_kname = disk_kname + '1'
+ self.mock_getpath.side_effect = iter([
+ disk_kname,
+ part_kname,
+ ])
+ self.mock_block_get_part_table_type.return_value = 'dos'
+ kname = 'xxx'
+ self.mock_block_path_to_kname.return_value = kname
+ self.mock_block_sys_block_path.return_value = '/sys/class/block/xxx'
+ self.mock_block_sector_size.return_value = (512, 512)
+
+ block_meta.partition_handler(
+ part_info, self.storage_config, empty_context)
+ part_offset = 2048 * 512
+ self.mock_block_zero_file.assert_called_with(disk_kname, [part_offset],
+ exclusive=False)
+ self.mock_subp.assert_has_calls(
+ [call(['parted', disk_kname, '--script',
+ 'mkpart', 'primary', 'linux-swap', '2048s', '1001471s',
+ ], capture=True)])
+
@patch('curtin.util.write_file')
def test_mount_handler_defaults(self, mock_write_file):
"""Test mount_handler has defaults to 'defaults' for mount options"""
Follow ups