curtin-dev team mailing list archive
-
curtin-dev team
-
Mailing list archive
-
Message #01961
[Merge] ~mwhudson/curtin:v2-skeleton into curtin:master
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()
Follow ups