87 lines
3.3 KiB
Python
87 lines
3.3 KiB
Python
|
#
|
||
|
# Copyright (C) 2019 Red Hat, Inc.
|
||
|
#
|
||
|
# This copyrighted material is made available to anyone wishing to use,
|
||
|
# modify, copy, or redistribute it subject to the terms and conditions of
|
||
|
# the GNU General Public License v.2, or (at your option) any later version.
|
||
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
||
|
# ANY WARRANTY expressed or implied, including the implied warranties of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||
|
# Public License for more details. You should have received a copy of the
|
||
|
# GNU General Public License along with this program; if not, write to the
|
||
|
# Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||
|
# 02110-1301, USA. Any Red Hat trademarks that are incorporated in the
|
||
|
# source code or documentation are not subject to the GNU General Public
|
||
|
# License and may only be used or replicated with the express permission of
|
||
|
# Red Hat, Inc.
|
||
|
#
|
||
|
from blivet.devicefactory import SIZE_POLICY_AUTO
|
||
|
from blivet.errors import StorageError
|
||
|
|
||
|
from pyanaconda.anaconda_loggers import get_module_logger
|
||
|
from pyanaconda.modules.storage.bootloader.execution import setup_bootloader
|
||
|
from pyanaconda.modules.storage.partitioning.automatic.automatic_partitioning import \
|
||
|
AutomaticPartitioningTask
|
||
|
from pyanaconda.modules.storage.partitioning.base_partitioning import PartitioningTask
|
||
|
from pyanaconda.modules.storage.checker.utils import storage_checker, verify_luks_devices_have_key
|
||
|
|
||
|
log = get_module_logger(__name__)
|
||
|
|
||
|
__all__ = ["InteractivePartitioningTask", "InteractiveAutoPartitioningTask"]
|
||
|
|
||
|
|
||
|
class InteractivePartitioningTask(PartitioningTask):
|
||
|
"""A task for the interactive partitioning configuration."""
|
||
|
|
||
|
def _run(self, storage):
|
||
|
"""Only set up the bootloader."""
|
||
|
self._prepare_bootloader(storage)
|
||
|
self._set_fstab_swaps(storage)
|
||
|
|
||
|
def _prepare_bootloader(self, storage):
|
||
|
"""Prepare the bootloader."""
|
||
|
setup_bootloader(storage)
|
||
|
|
||
|
def _set_fstab_swaps(self, storage):
|
||
|
"""Set swap devices that should appear in the fstab."""
|
||
|
storage.set_fstab_swaps([
|
||
|
d for d in storage.devices
|
||
|
if d.direct and not d.format.exists and not d.partitioned and d.format.type == "swap"
|
||
|
])
|
||
|
|
||
|
|
||
|
class InteractiveAutoPartitioningTask(AutomaticPartitioningTask):
|
||
|
"""A task for the interactive auto partitioning configuration."""
|
||
|
|
||
|
def _run(self, storage):
|
||
|
"""Do the partitioning."""
|
||
|
super()._run(storage)
|
||
|
self._update_size_policy(storage)
|
||
|
self._verify_partitioning(storage)
|
||
|
|
||
|
def _clear_partitions(self, storage):
|
||
|
"""Nothing to clear.
|
||
|
|
||
|
The partitions should be already cleared by the user.
|
||
|
"""
|
||
|
pass
|
||
|
|
||
|
def _update_size_policy(self, storage):
|
||
|
"""Update the size policy of new devices.
|
||
|
|
||
|
Mark all new containers for automatic size management.
|
||
|
"""
|
||
|
for device in storage.devices:
|
||
|
if not device.exists and hasattr(device, "size_policy"):
|
||
|
device.size_policy = SIZE_POLICY_AUTO
|
||
|
|
||
|
def _verify_partitioning(self, storage):
|
||
|
"""Verify the created partitioning."""
|
||
|
report = storage_checker.check(storage, skip=(verify_luks_devices_have_key,))
|
||
|
report.log(log)
|
||
|
|
||
|
if not report.errors:
|
||
|
return
|
||
|
|
||
|
raise StorageError(" ".join(report.errors))
|