From f3d38325fb525bca427a2b00e2bfb73b9297c36a Mon Sep 17 00:00:00 2001 From: Michal Hecko Date: Sun, 10 Nov 2024 14:35:26 +0100 Subject: [PATCH 35/40] configs(common): introduce RHUI configuration Introduce a common configuration definition for RHUI related decisions. The configuration has an atomic nature - if the user wants to overwrite leapp's decisions, he/she must overwrite all of them. Essentially, all fields of the RHUI_SETUPS cloud map entry can be configured. Almost no non-empty defaults are provided, as no reasonable defaults can be given. This is due to all setup parameters are different from provider to provider. Therefore, default values are empty values, so that it can later be detected by an actor whether all fields of the RHUI config has been filled. Jira ref: RHEL-56251 --- repos/system_upgrade/common/configs/rhui.py | 127 ++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 repos/system_upgrade/common/configs/rhui.py diff --git a/repos/system_upgrade/common/configs/rhui.py b/repos/system_upgrade/common/configs/rhui.py new file mode 100644 index 00000000..ade9bab9 --- /dev/null +++ b/repos/system_upgrade/common/configs/rhui.py @@ -0,0 +1,127 @@ +""" +Configuration keys for RHUI. + +In case of RHUI in private regions it usual that publicly known RHUI data +is not valid. In such cases it's possible to provide the correct expected +RHUI data to correct the in-place upgrade process. +""" + +from leapp.actors.config import Config +from leapp.models import fields + +RHUI_CONFIG_SECTION = 'rhui' + + +# @Note(mhecko): We use to distinguish config instantiated from default values that we should ignore +# # Maybe we could make all config values None and detect it that way, but then we cannot +# # give the user an example how the config should look like. +class RhuiUseConfig(Config): + section = RHUI_CONFIG_SECTION + name = "use_config" + type_ = fields.Boolean() + default = False + description = """ + Use values provided in the configuration file to override leapp's decisions. + """ + + +class RhuiSourcePkgs(Config): + section = RHUI_CONFIG_SECTION + name = "source_clients" + type_ = fields.List(fields.String()) + default = [] + description = """ + The name of the source RHUI client RPMs (to be removed from the system). + """ + + +class RhuiTargetPkgs(Config): + section = RHUI_CONFIG_SECTION + name = "target_clients" + type_ = fields.List(fields.String()) + default = [] + description = """ + The name of the target RHUI client RPM (to be installed on the system). + """ + + +class RhuiCloudProvider(Config): + section = RHUI_CONFIG_SECTION + name = "cloud_provider" + type_ = fields.String() + default = "" + description = """ + Cloud provider name that should be used internally by leapp. + + Leapp recognizes the following cloud providers: + - azure + - aws + - google + + Cloud provider information is used for triggering some provider-specific modifications. The value also + influences how leapp determines target repositories to enable. + """ + + +# @Note(mhecko): We likely don't need this. We need the variant primarily to grab files from a correct directory +# in leapp-rhui- folders. +class RhuiCloudVariant(Config): + section = RHUI_CONFIG_SECTION + name = "image_variant" + type_ = fields.String() + default = "ordinary" + description = """ + RHEL variant of the source system - is the source system SAP-specific image? + + Leapp recognizes the following cloud providers: + - ordinary # The source system has not been deployed from a RHEL with SAP image + - sap # RHEL SAP images + - sap-apps # RHEL SAP Apps images (Azure only) + - sap-ha # RHEL HA Apps images (HA only) + + Cloud provider information is used for triggering some provider-specific modifications. The value also + influences how leapp determines target repositories to enable. + + Default: + "ordinary" + """ + + +class RhuiUpgradeFiles(Config): + section = RHUI_CONFIG_SECTION + name = "upgrade_files" + type_ = fields.StringMap(fields.String()) + default = dict() + description = """ + A mapping from source file paths to the destination where should they be + placed in the upgrade container. + + Typically, these files should be provided by leapp-rhui- packages. + + These files are needed to facilitate access to target repositories. Typical examples are: repofile(s), + certificates and keys. + """ + + +class RhuiTargetRepositoriesToUse(Config): + section = RHUI_CONFIG_SECTION + name = "rhui_target_repositories_to_use" + type_ = fields.List(fields.String()) + description = """ + List of target repositories enabled during the upgrade. Similar to executing leapp with --enablerepo. + + The repositories to be enabled need to be either in the repofiles listed in the `upgrade_files` field, + or in repofiles present on the source system. + """ + default = list() + + +all_rhui_cfg = ( + RhuiTargetPkgs, + RhuiUpgradeFiles, + RhuiTargetRepositoriesToUse, + RhuiCloudProvider, + RhuiCloudVariant, + RhuiSourcePkgs, + RhuiUseConfig +) -- 2.47.0