You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

156 lines
4.3 KiB

10 months ago
from leapp.models import fields, Model
from leapp.topics import SystemInfoTopic
class SystemdBrokenSymlinksSource(Model):
"""
Information about broken systemd symlinks on the source system
"""
topic = SystemInfoTopic
broken_symlinks = fields.List(fields.String(), default=[])
"""
List of broken systemd symlinks on the source system
The values are absolute paths of the broken symlinks.
"""
class SystemdBrokenSymlinksTarget(SystemdBrokenSymlinksSource):
"""
Analogy to :class:`SystemdBrokenSymlinksSource`, but for the target system
"""
class SystemdServicesTasks(Model):
"""
Influence the systemd services of the target system
E.g. it could be specified explicitly whether some services should
be enabled or disabled after the in-place upgrade - follow descriptions
of particular tasks for details.
In case of conflicting tasks (e.g. the A service should be enabled and
disabled in the same time):
a) If conflicting tasks are detected during check phases,
the upgrade is inhibited with the proper report.
b) If conflicting tasks are detected during the final evaluation,
error logs are created and such services will be disabled.
"""
topic = SystemInfoTopic
to_enable = fields.List(fields.String(), default=[])
"""
List of systemd services to enable on the target system
Masked services will not be enabled. Attempting to enable a masked service
will be evaluated by systemctl as usually. The error will be logged and the
upgrade process will continue.
"""
to_disable = fields.List(fields.String(), default=[])
"""
List of systemd services to disable on the target system
"""
# NOTE: possible extension in case of requirement (currently not implemented):
# to_unmask = fields.List(fields.String(), default=[])
class SystemdServiceFile(Model):
"""
Information about single systemd service unit file
This model is not expected to be produced nor consumed by actors directly.
See the :class:`SystemdServicesInfoSource` and :class:`SystemdServicesPresetInfoTarget`
for more info.
"""
topic = SystemInfoTopic
name = fields.String()
"""
Name of the service unit file
"""
state = fields.StringEnum([
'alias',
'bad',
'disabled',
'enabled',
'enabled-runtime',
'generated',
'indirect',
'linked',
'linked-runtime',
'masked',
'masked-runtime',
'static',
'transient',
])
"""
The state of the service unit file
"""
class SystemdServicesInfoSource(Model):
"""
Information about systemd services on the source system
"""
topic = SystemInfoTopic
service_files = fields.List(fields.Model(SystemdServiceFile), default=[])
"""
List of all installed systemd service unit files
Instances of service template unit files don't have a unit file
and therefore aren't included, but their template files are.
Generated service unit files are also included.
"""
class SystemdServicesInfoTarget(SystemdServicesInfoSource):
"""
Analogy to :class:`SystemdServicesInfoSource`, but for the target system
This information is taken after the RPM Upgrade and might become
invalid if there are actors calling systemctl enable/disable directly later
in the upgrade process. Therefore it is recommended to use
:class:`SystemdServicesTasks` to alter the state of units in the
FinalizationPhase.
"""
class SystemdServicePreset(Model):
"""
Information about a preset for systemd service
"""
topic = SystemInfoTopic
service = fields.String()
"""
Name of the service, with the .service suffix
"""
state = fields.StringEnum(['disable', 'enable'])
"""
The state set by a preset file
"""
class SystemdServicesPresetInfoSource(Model):
"""
Information about presets for systemd services
"""
topic = SystemInfoTopic
presets = fields.List(fields.Model(SystemdServicePreset), default=[])
"""
List of all service presets
"""
class SystemdServicesPresetInfoTarget(SystemdServicesPresetInfoSource):
"""
Analogy to :class:`SystemdServicesPresetInfoSource` but for the target system
"""