Reworking select_encrypted_partitions() to use the new Menu system, (#1201)
* Reworking select_encrypted_partitions() to use the new Menu system, and allow granularity. * Listing partitions and enabling a index selection. Also when selecting 'delete all partitions' wipe=True will get set on the blockdevice now. Otherwise the new partitions won't be able to be created without deleting them first. * flake8 fix * Removed old select_encrypted_partitions()
This commit is contained in:
parent
4e39bfb563
commit
3d102854a7
|
|
@ -193,8 +193,15 @@ class GlobalMenu(GeneralMenu):
|
|||
# If no partitions was marked as encrypted, but a password was supplied and we have some disks to format..
|
||||
# Then we need to identify which partitions to encrypt. This will default to / (root).
|
||||
if len(list(encrypted_partitions(storage['arguments'].get('disk_layouts', [])))) == 0:
|
||||
storage['arguments']['disk_layouts'] = select_encrypted_partitions(
|
||||
storage['arguments']['disk_layouts'], storage['arguments']['!encryption-password'])
|
||||
for blockdevice in storage['arguments']['disk_layouts']:
|
||||
for partition_index in select_encrypted_partitions(
|
||||
title="Select which partitions to encrypt:",
|
||||
partitions=storage['arguments']['disk_layouts'][blockdevice]['partitions']
|
||||
):
|
||||
|
||||
partition = storage['arguments']['disk_layouts'][blockdevice]['partitions'][partition_index]
|
||||
partition['encrypted'] = True
|
||||
partition['!password'] = storage['arguments']['!encryption-password']
|
||||
|
||||
def _install_text(self):
|
||||
missing = len(self._missing_configs())
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ from ..menu.menu import MenuSelectionType
|
|||
from ..output import log
|
||||
|
||||
from ..disk.validators import fs_types
|
||||
from ..disk.helpers import has_mountpoint
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from ..disk import BlockDevice
|
||||
|
|
@ -271,6 +270,7 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str,
|
|||
block_device_struct["partitions"][partition]["filesystem"]["mount_options"].append("compress=zstd")
|
||||
elif task == delete_all_partitions:
|
||||
block_device_struct["partitions"] = []
|
||||
block_device_struct["wipe"] = True
|
||||
elif task == assign_mount_point:
|
||||
title = _('{}\n\nSelect by index which partition to mount where').format(current_layout)
|
||||
partition = select_partition(title, block_device_struct["partitions"])
|
||||
|
|
@ -360,19 +360,30 @@ def manage_new_and_existing_partitions(block_device: 'BlockDevice') -> Dict[str,
|
|||
|
||||
return block_device_struct
|
||||
|
||||
def select_encrypted_partitions(
|
||||
title :str,
|
||||
partitions :List[Partition],
|
||||
multiple :bool = True,
|
||||
filter_ :Callable = None
|
||||
) -> Optional[int, List[int]]:
|
||||
partition_indexes = _get_partitions(partitions, filter_)
|
||||
|
||||
def select_encrypted_partitions(block_devices: dict, password: str) -> dict:
|
||||
for device in block_devices:
|
||||
for partition in block_devices[device]['partitions']:
|
||||
if partition.get('mountpoint', None) != '/boot':
|
||||
partition['encrypted'] = True
|
||||
partition['!password'] = password
|
||||
if len(partition_indexes) == 0:
|
||||
return None
|
||||
|
||||
if not has_mountpoint(partition,'/'):
|
||||
# Tell the upcoming steps to generate a key-file for non root mounts.
|
||||
partition['generate-encryption-key-file'] = True
|
||||
title = _('Select which partitions to mark for formatting:')
|
||||
|
||||
return block_devices
|
||||
# show current partition layout:
|
||||
if len(partitions):
|
||||
title += _current_partition_layout(partitions) + '\n'
|
||||
|
||||
# TODO: Next version perhaps we can support mixed multiple encrypted partitions
|
||||
# Users might want to single out a partition for non-encryption to share between dualboot etc.
|
||||
choice = Menu(title, partition_indexes, multi=multiple).run()
|
||||
|
||||
if choice.type_ == MenuSelectionType.Esc:
|
||||
return None
|
||||
|
||||
if isinstance(choice.value, list):
|
||||
for partition_index in choice.value:
|
||||
yield int(partition_index)
|
||||
else:
|
||||
yield (partition_index)
|
||||
Loading…
Reference in New Issue