anaconda/anaconda-40.22.3.13/pyanaconda/modules/common/structures/device_factory.py

505 lines
12 KiB
Python
Raw Normal View History

2024-11-14 21:39:56 -08:00
#
# DBus structures for the device factory data.
#
# Copyright (C) 2020 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 dasbus.structure import DBusData
from dasbus.typing import * # pylint: disable=wildcard-import
__all__ = ["DeviceFactoryRequest", "DeviceFactoryPermissions"]
class DeviceFactoryRequest(DBusData):
"""Device factory request data."""
def __init__(self):
self._device_type = 0
self._device_spec = ""
self._disks = []
self._mount_point = ""
self._reformat = False
self._format_type = ""
self._label = ""
self._luks_version = ""
self._device_name = ""
self._device_size = 0
self._device_raid_level = ""
self._device_encrypted = False
self._container_spec = ""
self._container_name = ""
self._container_size_policy = 0
self._container_raid_level = ""
self._container_encrypted = False
@property
def device_type(self) -> Int:
"""Type of the device.
Supported values:
0 LVM
1 RAID
2 Standard Partition
3 Btrfs
4 Disk
5 LVM Thin Provisioning
:return: a number of the type
"""
return self._device_type
@device_type.setter
def device_type(self, value):
self._device_type = value
@property
def device_spec(self) -> Str:
"""Device to use for adjustment.
:return: a device specification
"""
return self._device_spec
@device_spec.setter
def device_spec(self, spec: Str):
self._device_spec = spec
@property
def disks(self) -> List[Str]:
"""Disks to use for allocation.
:return: a list of disk names
"""
return self._disks
@disks.setter
def disks(self, names):
self._disks = names
@property
def mount_point(self) -> Str:
"""Mount point.
Set where the device will be mounted.
For example: '/', '/home', 'none'
:return: a path to a mount point or 'none'
"""
return self._mount_point
@mount_point.setter
def mount_point(self, mount_point: Str):
self._mount_point = mount_point
@property
def reformat(self) -> Bool:
"""Should the device be reformatted?
:return: True or False
"""
return self._reformat
@reformat.setter
def reformat(self, reformat: Bool):
self._reformat = reformat
@property
def format_type(self) -> Str:
"""Format of the device.
For example: 'xfs'
:return: a specification of the format
"""
return self._format_type
@format_type.setter
def format_type(self, format_type: Str):
self._format_type = format_type
@property
def label(self) -> Str:
"""Label of the file system.
:return: a string
"""
return self._label
@label.setter
def label(self, label: Str):
self._label = label
@property
def luks_version(self) -> Str:
"""LUKS format version.
Supported values:
luks1
luks2
:return: a name of the version
"""
return self._luks_version
@luks_version.setter
def luks_version(self, value: Str):
self._luks_version = value
@property
def device_name(self) -> Str:
"""Name of the device.
:return: a string
"""
return self._device_name
@device_name.setter
def device_name(self, value):
self._device_name = value
@property
def device_size(self) -> UInt64:
"""Size of the device
:return: a size in bytes
"""
return UInt64(self._device_size)
@device_size.setter
def device_size(self, size: UInt64):
self._device_size = size
@property
def device_raid_level(self) -> Str:
"""RAID level of the device.
For example: raid0
:return: a string
"""
return self._device_raid_level
@device_raid_level.setter
def device_raid_level(self, value):
self._device_raid_level = value
@property
def device_encrypted(self) -> Bool:
"""Encrypt the device.
:return: True or False
"""
return self._device_encrypted
@device_encrypted.setter
def device_encrypted(self, value):
self._device_encrypted = value
@property
def container_spec(self) -> Str:
"""Container to use for adjustment.
:return: a container specification
"""
return self._container_spec
@container_spec.setter
def container_spec(self, spec: Str):
self._container_spec = spec
@property
def container_name(self) -> Str:
"""Name of the container.
:return: a string
"""
return self._container_name
@container_name.setter
def container_name(self, value):
self._container_name = value
@property
def container_size_policy(self) -> Int64:
"""The container size policy.
Supported values:
-1 As large as possible
0 Automatic size
>0 Fixed size in bytes
:return: a size policy
"""
return Int64(self._container_size_policy)
@container_size_policy.setter
def container_size_policy(self, value):
self._container_size_policy = value
@property
def container_raid_level(self) -> Str:
"""RAID level of the container.
For example: raid0
:return: a string
"""
return self._container_raid_level
@container_raid_level.setter
def container_raid_level(self, value):
self._container_raid_level = value
@property
def container_encrypted(self) -> Bool:
"""Encrypt the container.
:return: True or False
"""
return self._container_encrypted
@container_encrypted.setter
def container_encrypted(self, value):
self._container_encrypted = value
def reset_container_data(self):
"""Reset all container data."""
self.container_spec = ""
self.container_name = ""
self.container_size_policy = 0
self.container_raid_level = ""
if self.container_encrypted:
self.luks_version = ""
self.container_encrypted = False
class DeviceFactoryPermissions(DBusData):
"""Device factory permissions."""
def __init__(self):
self._device_type = False
self._disks = False
self._mount_point = False
self._reformat = False
self._format_type = False
self._label = False
self._device_name = False
self._device_size = False
self._device_raid_level = False
self._device_encrypted = False
self._container_spec = False
self._container_name = False
self._container_size_policy = False
self._container_raid_level = False
self._container_encrypted = False
@property
def device_type(self) -> Bool:
"""Can the device type be changed?
:return: True or False
"""
return self._device_type
@device_type.setter
def device_type(self, permission):
self._device_type = permission
@property
def disks(self) -> Bool:
"""Can the list of disks be changed?"""
return self._disks
@disks.setter
def disks(self, permission):
self._disks = permission
@property
def mount_point(self) -> Bool:
"""Can the mount point be changed?
:return: True or False
"""
return self._mount_point
@mount_point.setter
def mount_point(self, permission):
self._mount_point = permission
@property
def reformat(self) -> Bool:
"""Can the device format be changed?
:return: True or False
"""
return self._reformat
@reformat.setter
def reformat(self, permission):
self._reformat = permission
@property
def format_type(self) -> Bool:
"""Can the device format type be changed?
:return: True or False
"""
return self._format_type
@format_type.setter
def format_type(self, permission):
self._format_type = permission
@property
def label(self) -> Bool:
"""Can the device label be changed?
:return: True or False
"""
return self._label
@label.setter
def label(self, permission):
self._label = permission
@property
def device_name(self) -> Bool:
"""Can the device name be changed?
:return: True or False
"""
return self._device_name
@device_name.setter
def device_name(self, permission):
self._device_name = permission
@property
def device_size(self) -> Bool:
"""Can the device size be changed?
:return: True or False
"""
return self._device_size
@device_size.setter
def device_size(self, permission):
self._device_size = permission
@property
def device_raid_level(self) -> Bool:
"""Can the RAID level be changed?
:return: True or False
"""
return self._device_raid_level
@device_raid_level.setter
def device_raid_level(self, permission):
self._device_raid_level = permission
@property
def device_encrypted(self) -> Bool:
"""Can the device encryption be changed?
:return: True or False
"""
return self._device_encrypted
@device_encrypted.setter
def device_encrypted(self, permission):
self._device_encrypted = permission
@property
def container_spec(self) -> Bool:
"""Can the container be replaced?
:return: True or False
"""
return self._container_spec
@container_spec.setter
def container_spec(self, permission):
self._container_spec = permission
@property
def container_name(self) -> Bool:
"""Can the container name be changed?
:return: True or False
"""
return self._container_name
@container_name.setter
def container_name(self, permission):
self._container_name = permission
@property
def container_size_policy(self) -> Bool:
"""Can the container size policy be changed?
:return: True or False
"""
return self._container_size_policy
@container_size_policy.setter
def container_size_policy(self, permission):
self._container_size_policy = permission
@property
def container_raid_level(self) -> Bool:
"""Can the container RAID level be changed?
:return: True or False
"""
return self._container_raid_level
@container_raid_level.setter
def container_raid_level(self, permission):
self._container_raid_level = permission
@property
def container_encrypted(self) -> Bool:
"""Can the container encryption be changed?
:return: True or False
"""
return self._container_encrypted
@container_encrypted.setter
def container_encrypted(self, permission):
self._container_encrypted = permission
def can_replace_container(self):
"""Can we use a different container?"""
return self._container_spec
def can_modify_container(self):
"""Can we modify the current container?"""
return self.container_name \
or self.container_size_policy \
or self.container_raid_level \
or self.container_encrypted