reset_partition accepts fixed size
This commit is contained in:
parent
5a301bcdd6
commit
58bfe12d21
|
@ -531,6 +531,7 @@ class GuidedChoiceV2:
|
||||||
|
|
||||||
sizing_policy: Optional[SizingPolicy] = SizingPolicy.SCALED
|
sizing_policy: Optional[SizingPolicy] = SizingPolicy.SCALED
|
||||||
reset_partition: bool = False
|
reset_partition: bool = False
|
||||||
|
reset_partition_size: Optional[int] = None
|
||||||
|
|
||||||
|
|
||||||
@attr.s(auto_attribs=True)
|
@attr.s(auto_attribs=True)
|
||||||
|
|
|
@ -29,6 +29,7 @@ import pyudev
|
||||||
from curtin import swap
|
from curtin import swap
|
||||||
from curtin.commands.extract import AbstractSourceHandler
|
from curtin.commands.extract import AbstractSourceHandler
|
||||||
from curtin.storage_config import ptable_part_type_to_flag
|
from curtin.storage_config import ptable_part_type_to_flag
|
||||||
|
from curtin.util import human2bytes
|
||||||
|
|
||||||
from subiquity.common.apidef import API
|
from subiquity.common.apidef import API
|
||||||
from subiquity.common.errorreport import ErrorReportKind
|
from subiquity.common.errorreport import ErrorReportKind
|
||||||
|
@ -707,7 +708,10 @@ class FilesystemController(SubiquityController, FilesystemManipulator):
|
||||||
raise Exception("failed to locate gap after adding boot")
|
raise Exception("failed to locate gap after adding boot")
|
||||||
|
|
||||||
if choice.reset_partition:
|
if choice.reset_partition:
|
||||||
if self.app.opts.dry_run:
|
if choice.reset_partition_size is not None:
|
||||||
|
part_align = disk.alignment_data().part_align
|
||||||
|
reset_size = align_up(choice.reset_partition_size, part_align)
|
||||||
|
elif self.app.opts.dry_run:
|
||||||
reset_size = DRY_RUN_RESET_SIZE
|
reset_size = DRY_RUN_RESET_SIZE
|
||||||
else:
|
else:
|
||||||
cp = await arun_command(["du", "-sb", "/cdrom"])
|
cp = await arun_command(["du", "-sb", "/cdrom"])
|
||||||
|
@ -1410,6 +1414,20 @@ class FilesystemController(SubiquityController, FilesystemManipulator):
|
||||||
disk_id=gap.device.id, gap=gap, allowed=[]
|
disk_id=gap.device.id, gap=gap, allowed=[]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
reset_partition = False
|
||||||
|
reset_partition_size = None
|
||||||
|
rp_input = layout.get("reset-partition", None)
|
||||||
|
if rp_input:
|
||||||
|
reset_partition = True
|
||||||
|
if isinstance(rp_input, (str, int)):
|
||||||
|
reset_partition_size = int(human2bytes(rp_input))
|
||||||
|
log.info(
|
||||||
|
"autoinstall: will install reset partition "
|
||||||
|
f"of size {reset_partition_size}"
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
log.info("autoinstall: will install reset partition")
|
||||||
|
|
||||||
log.info(
|
log.info(
|
||||||
f"autoinstall: running guided {capability} install in "
|
f"autoinstall: running guided {capability} install in "
|
||||||
f"mode {mode} using {target}"
|
f"mode {mode} using {target}"
|
||||||
|
@ -1421,7 +1439,8 @@ class FilesystemController(SubiquityController, FilesystemManipulator):
|
||||||
password=password,
|
password=password,
|
||||||
recovery_key=guided_recovery_key,
|
recovery_key=guided_recovery_key,
|
||||||
sizing_policy=sizing_policy,
|
sizing_policy=sizing_policy,
|
||||||
reset_partition=layout.get("reset-partition", False),
|
reset_partition=reset_partition,
|
||||||
|
reset_partition_size=reset_partition_size,
|
||||||
),
|
),
|
||||||
reset_partition_only=layout.get("reset-partition-only", False),
|
reset_partition_only=layout.get("reset-partition-only", False),
|
||||||
)
|
)
|
||||||
|
|
|
@ -459,6 +459,26 @@ class TestGuided(IsolatedAsyncioTestCase):
|
||||||
self.assertEqual(DRY_RUN_RESET_SIZE, d1p2.size)
|
self.assertEqual(DRY_RUN_RESET_SIZE, d1p2.size)
|
||||||
self.assertEqual("/", d1p3.mount)
|
self.assertEqual("/", d1p3.mount)
|
||||||
|
|
||||||
|
async def test_fixed_reset_partition(self):
|
||||||
|
await self._guided_setup(Bootloader.UEFI, "gpt")
|
||||||
|
target = GuidedStorageTargetReformat(
|
||||||
|
disk_id=self.d1.id, allowed=default_capabilities
|
||||||
|
)
|
||||||
|
fixed_reset_size = 12 << 30
|
||||||
|
await self.controller.guided(
|
||||||
|
GuidedChoiceV2(
|
||||||
|
target=target,
|
||||||
|
capability=GuidedCapability.DIRECT,
|
||||||
|
reset_partition=True,
|
||||||
|
reset_partition_size=fixed_reset_size,
|
||||||
|
)
|
||||||
|
)
|
||||||
|
[d1p1, d1p2, d1p3] = self.d1.partitions()
|
||||||
|
self.assertEqual("/boot/efi", d1p1.mount)
|
||||||
|
self.assertIsNone(d1p2.mount)
|
||||||
|
self.assertEqual(fixed_reset_size, d1p2.size)
|
||||||
|
self.assertEqual("/", d1p3.mount)
|
||||||
|
|
||||||
async def test_guided_reset_partition_only(self):
|
async def test_guided_reset_partition_only(self):
|
||||||
await self._guided_setup(Bootloader.UEFI, "gpt")
|
await self._guided_setup(Bootloader.UEFI, "gpt")
|
||||||
target = GuidedStorageTargetReformat(
|
target = GuidedStorageTargetReformat(
|
||||||
|
|
Loading…
Reference in New Issue