Michael Hudson-Doyle has proposed merging ~mwhudson/curtin:v2-skeleton into curtin:master.
Commit message: support version 2 curtin storage configs effectively identical to version 1 for now Requested reviews: curtin developers (curtin-dev) For more details, see: https://code.launchpad.net/~mwhudson/curtin/+git/curtin/+merge/412613 Does this structure look OK? Maybe it makes sense to put the v1 handlers in a separate file too? (maybe not even a file in the curtin.commands package??) -- Your team curtin developers is requested to review the proposed merge of ~mwhudson/curtin:v2-skeleton into curtin:master.
diff --git a/curtin/commands/block_meta.py b/curtin/commands/block_meta.py index 1913cb4..d470ffc 100644 --- a/curtin/commands/block_meta.py +++ b/curtin/commands/block_meta.py @@ -2004,6 +2004,17 @@ def meta_custom(args): storage_config_dict = extract_storage_ordered_dict(cfg) + version = cfg['storage']['version'] + if version > 1: + from curtin.commands.block_meta_v2 import ( + disk_handler_v2, + partition_handler_v2, + ) + command_handlers.update({ + 'disk': disk_handler_v2, + 'partition': partition_handler_v2, + }) + storage_config_dict = zfsroot_update_storage_config(storage_config_dict) # set up reportstack diff --git a/curtin/commands/block_meta_v2.py b/curtin/commands/block_meta_v2.py new file mode 100644 index 0000000..25f777b --- /dev/null +++ b/curtin/commands/block_meta_v2.py @@ -0,0 +1,17 @@ +# This file is part of curtin. See LICENSE file for copyright and license info. + +from curtin.commands.block_meta import ( + disk_handler as disk_handler_v1, + partition_handler as partition_handler_v1, + ) + + +def disk_handler_v2(info, storage_config, handlers): + disk_handler_v1(info, storage_config, handlers) + + +def partition_handler_v2(info, storage_config, handlers): + partition_handler_v1(info, storage_config, handlers) + + +# vi: ts=4 expandtab syntax=python diff --git a/curtin/storage_config.py b/curtin/storage_config.py index 405a1e2..89ab544 100644 --- a/curtin/storage_config.py +++ b/curtin/storage_config.py @@ -79,7 +79,7 @@ STORAGE_CONFIG_SCHEMA = { 'required': ['version', 'config'], 'definitions': schemas.definitions, 'properties': { - 'version': {'type': 'integer', 'enum': [1]}, + 'version': {'type': 'integer', 'enum': [1, 2]}, 'config': { 'type': 'array', 'items': { @@ -1315,7 +1315,7 @@ def extract_storage_config(probe_data, strict=False): ordered = (dasd + disk + part + format + lvols + lparts + raids + dmcrypts + mounts + bcache + zpool + zfs) - final_config = {'storage': {'version': 1, 'config': ordered}} + final_config = {'storage': {'version': 2, 'config': ordered}} try: LOG.info('Validating extracted storage config components') validate_config(final_config['storage']) @@ -1346,7 +1346,7 @@ def extract_storage_config(probe_data, strict=False): LOG.debug("Merging storage config dependencies") merged_config = { - 'version': 1, + 'version': 2, 'config': merge_config_trees_to_list(ctrees) } LOG.debug("Merged storage config:\n%s", diff --git a/tests/integration/test_block_meta.py b/tests/integration/test_block_meta.py index bd602b2..62ede6b 100644 --- a/tests/integration/test_block_meta.py +++ b/tests/integration/test_block_meta.py @@ -39,7 +39,8 @@ def summarize_partitions(dev): class StorageConfigBuilder: - def __init__(self): + def __init__(self, *, version): + self.version = version self.config = [] self.cur_image = None @@ -47,6 +48,7 @@ class StorageConfigBuilder: return { 'storage': { 'config': self.config, + 'version': self.version, }, } @@ -102,10 +104,10 @@ class TestBlockMeta(IntegrationTestCase): ] util.subp(cmd, env=cmd_env, **kwargs) - def _test_default_offsets(self, ptable): + def _test_default_offsets(self, ptable, version): psize = 40 << 20 img = self.tmp_path('image.img') - config = StorageConfigBuilder() + config = StorageConfigBuilder(version=version) config.add_image(path=img, size='100M', ptable=ptable) config.add_part(size=psize, number=1) config.add_part(size=psize, number=2) @@ -120,16 +122,22 @@ class TestBlockMeta(IntegrationTestCase): number=2, offset=(1 << 20) + psize, size=psize), ]) - def test_default_offsets_gpt(self): - self._test_default_offsets('gpt') + def test_default_offsets_gpt_v1(self): + self._test_default_offsets('gpt', 1) - def test_default_offsets_msdos(self): - self._test_default_offsets('msdos') + def test_default_offsets_msdos_v1(self): + self._test_default_offsets('msdos', 1) + + def test_default_offsets_gpt_v2(self): + self._test_default_offsets('gpt', 2) + + def test_default_offsets_msdos_v2(self): + self._test_default_offsets('msdos', 2) def _test_non_default_numbering(self, ptable): psize = 40 << 20 img = self.tmp_path('image.img') - config = StorageConfigBuilder() + config = StorageConfigBuilder(version=1) config.add_image(path=img, size='100M', ptable=ptable) config.add_part(size=psize, number=1) config.add_part(size=psize, number=4) @@ -152,7 +160,7 @@ class TestBlockMeta(IntegrationTestCase): def test_logical(self): img = self.tmp_path('image.img') - config = StorageConfigBuilder() + config = StorageConfigBuilder(version=1) config.add_image(path=img, size='100M', ptable='msdos') config.add_part(size='50M', number=1, flag='extended') config.add_part(size='10M', number=5, flag='logical') @@ -175,7 +183,7 @@ class TestBlockMeta(IntegrationTestCase): def test_raw_image(self): img = self.tmp_path('image.img') - config = StorageConfigBuilder() + config = StorageConfigBuilder(version=1) config.add_image(path=img, size='2G', ptable='gpt', create=True) curtin_cfg = config.render()
-- Mailing list: https://launchpad.net/~curtin-dev Post to : curtin-dev@lists.launchpad.net Unsubscribe : https://launchpad.net/~curtin-dev More help : https://help.launchpad.net/ListHelp