leapp-repository/SOURCES/0036-Handle-7-to-8-IPUs-on-...

256 lines
12 KiB
Diff

From 2958dffb2807e1cae01fc22754f6da4314ebf7a8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michal=20He=C4=8Dko?= <michal.sk.com@gmail.com>
Date: Thu, 26 May 2022 11:30:23 +0200
Subject: [PATCH 36/39] Handle 7 to 8 IPUs on Google Cloud (#897)
* Handle upgrades on google cloud
* Fix "switch" typo
Co-authored-by: Irina Gulina <alexxa@users.noreply.github.com>
Co-authored-by: Michal Hecko <mhecko@redhat.com>
Co-authored-by: Michal Reznik (mreznik) <mreznik@redhat.com>
Co-authored-by: Irina Gulina <alexxa@users.noreply.github.com>
---
.../common/actors/cloud/checkrhui/actor.py | 28 +++++++++++++++++--
.../libraries/peseventsscanner_repomap.py | 15 +++++-----
.../actors/redhatsignedrpmscanner/actor.py | 19 ++++++-------
.../libraries/setuptargetrepos_repomap.py | 15 +++++-----
repos/system_upgrade/common/libraries/rhui.py | 24 ++++++++++++++++
.../common/models/repositoriesmap.py | 9 +++---
6 files changed, 78 insertions(+), 32 deletions(-)
diff --git a/repos/system_upgrade/common/actors/cloud/checkrhui/actor.py b/repos/system_upgrade/common/actors/cloud/checkrhui/actor.py
index df055f94..552cde54 100644
--- a/repos/system_upgrade/common/actors/cloud/checkrhui/actor.py
+++ b/repos/system_upgrade/common/actors/cloud/checkrhui/actor.py
@@ -1,14 +1,19 @@
+import os
+
from leapp import reporting
from leapp.actors import Actor
from leapp.libraries.common import rhsm, rhui
from leapp.libraries.common.rpms import has_package
+from leapp.libraries.stdlib import api
from leapp.models import (
+ CopyFile,
DNFPluginTask,
InstalledRPM,
KernelCmdlineArg,
RequiredTargetUserspacePackages,
RHUIInfo,
- RpmTransactionTasks
+ RpmTransactionTasks,
+ TargetUserSpacePreupgradeTasks
)
from leapp.reporting import create_report, Report
from leapp.tags import FactsPhaseTag, IPUWorkflowTag
@@ -28,6 +33,8 @@ class CheckRHUI(Actor):
RequiredTargetUserspacePackages,
Report, DNFPluginTask,
RpmTransactionTasks,
+ TargetUserSpacePreupgradeTasks,
+ CopyFile,
)
tags = (FactsPhaseTag, IPUWorkflowTag)
@@ -44,6 +51,16 @@ class CheckRHUI(Actor):
is_azure_sap = True
provider = 'azure-sap'
info = rhui.RHUI_CLOUD_MAP[upg_path]['azure-sap']
+
+ if provider.startswith('google'):
+ rhui_dir = api.get_common_folder_path('rhui')
+ repofile = os.path.join(rhui_dir, provider, 'leapp-{}.repo'.format(provider))
+ api.produce(
+ TargetUserSpacePreupgradeTasks(
+ copy_files=[CopyFile(src=repofile, dst='/etc/yum.repos.d/leapp-google-copied.repo')]
+ )
+ )
+
if not rhsm.skip_rhsm():
create_report([
reporting.Title('Upgrade initiated with RHSM on public cloud with RHUI infrastructure'),
@@ -56,7 +73,9 @@ class CheckRHUI(Actor):
reporting.Tags([reporting.Tags.PUBLIC_CLOUD]),
])
return
- # AWS RHUI package is provided and signed by RH but the Azure one not
+
+ # When upgrading with RHUI we cannot switch certs and let RHSM provide us repos for target OS content.
+ # Instead, Leapp's provider-specific package containing target OS certs and repos has to be installed.
if not has_package(InstalledRPM, info['leapp_pkg']):
create_report([
reporting.Title('Package "{}" is missing'.format(info['leapp_pkg'])),
@@ -71,12 +90,15 @@ class CheckRHUI(Actor):
reporting.Remediation(commands=[['yum', 'install', '-y', info['leapp_pkg']]])
])
return
+
# there are several "variants" related to the *AWS* provider (aws, aws-sap)
if provider.startswith('aws'):
# We have to disable Amazon-id plugin in the initramdisk phase as the network
# is down at the time
self.produce(DNFPluginTask(name='amazon-id', disable_in=['upgrade']))
- # if RHEL7 and RHEL8 packages differ, we cannot rely on simply updating them
+
+ # If source OS and target OS packages differ we must remove the source pkg, and install the target pkg.
+ # If the packages do not differ, it is sufficient to upgrade them during the upgrade
if info['src_pkg'] != info['target_pkg']:
self.produce(RpmTransactionTasks(to_install=[info['target_pkg']]))
self.produce(RpmTransactionTasks(to_remove=[info['src_pkg']]))
diff --git a/repos/system_upgrade/common/actors/peseventsscanner/libraries/peseventsscanner_repomap.py b/repos/system_upgrade/common/actors/peseventsscanner/libraries/peseventsscanner_repomap.py
index 22892e4b..567e8475 100644
--- a/repos/system_upgrade/common/actors/peseventsscanner/libraries/peseventsscanner_repomap.py
+++ b/repos/system_upgrade/common/actors/peseventsscanner/libraries/peseventsscanner_repomap.py
@@ -50,13 +50,14 @@ class RepoMapDataHandler(object):
# will be used instead
self.prio_channel = get_target_product_channel(default=None)
- # Cloud provider might have multiple variants: aws: (aws, aws-sap-es4), azure: (azure, azure-sap)
- if cloud_provider.startswith('aws'):
- self.cloud_provider = 'aws'
- elif cloud_provider.startswith('azure'):
- self.cloud_provider = 'azure'
- else:
- self.cloud_provider = cloud_provider
+ self.cloud_provider = cloud_provider
+
+ # Cloud provider might have multiple variants, e.g, aws: (aws, aws-sap-es4) - normalize it
+ cloud_providers = ('aws', 'azure', 'google')
+ for provider in cloud_providers:
+ if cloud_provider.startswith(provider):
+ self.cloud_provider = provider
+ break
def set_default_channels(self, default_channels):
"""
diff --git a/repos/system_upgrade/common/actors/redhatsignedrpmscanner/actor.py b/repos/system_upgrade/common/actors/redhatsignedrpmscanner/actor.py
index 01f6df38..ce6d9985 100644
--- a/repos/system_upgrade/common/actors/redhatsignedrpmscanner/actor.py
+++ b/repos/system_upgrade/common/actors/redhatsignedrpmscanner/actor.py
@@ -54,15 +54,14 @@ class RedHatSignedRpmScanner(Actor):
"""Whitelist the katello package."""
return pkg.name.startswith('katello-ca-consumer')
- def is_azure_pkg(pkg):
- """Whitelist Azure config package."""
- upg_path = rhui.get_upg_path()
-
- src_pkg = rhui.RHUI_CLOUD_MAP[upg_path].get('azure', {}).get('src_pkg')
- src_pkg_sap = rhui.RHUI_CLOUD_MAP[upg_path].get('azure-sap', {}).get('src_pkg')
- target_pkg = rhui.RHUI_CLOUD_MAP[upg_path].get('azure', {}).get('target_pkg')
- target_pkg_sap = rhui.RHUI_CLOUD_MAP[upg_path].get('azure-sap', {}).get('target_pkg')
- return pkg.name in [src_pkg, src_pkg_sap, target_pkg, target_pkg_sap]
+ upg_path = rhui.get_upg_path()
+ whitelisted_cloud_flavours = ('azure', 'azure-sap', 'google', 'google-sap')
+ whitelisted_cloud_pkgs = {
+ rhui.RHUI_CLOUD_MAP[upg_path].get(flavour, {}).get('src_pkg') for flavour in whitelisted_cloud_flavours
+ }
+ whitelisted_cloud_pkgs.update(
+ rhui.RHUI_CLOUD_MAP[upg_path].get(flavour, {}).get('target_pkg') for flavour in whitelisted_cloud_flavours
+ )
for rpm_pkgs in self.consume(InstalledRPM):
for pkg in rpm_pkgs.items:
@@ -71,7 +70,7 @@ class RedHatSignedRpmScanner(Actor):
has_rhsig(pkg),
is_gpg_pubkey(pkg),
has_katello_prefix(pkg),
- is_azure_pkg(pkg),
+ pkg.name in whitelisted_cloud_pkgs,
]
):
signed_pkgs.items.append(pkg)
diff --git a/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos_repomap.py b/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos_repomap.py
index 22892e4b..567e8475 100644
--- a/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos_repomap.py
+++ b/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos_repomap.py
@@ -50,13 +50,14 @@ class RepoMapDataHandler(object):
# will be used instead
self.prio_channel = get_target_product_channel(default=None)
- # Cloud provider might have multiple variants: aws: (aws, aws-sap-es4), azure: (azure, azure-sap)
- if cloud_provider.startswith('aws'):
- self.cloud_provider = 'aws'
- elif cloud_provider.startswith('azure'):
- self.cloud_provider = 'azure'
- else:
- self.cloud_provider = cloud_provider
+ self.cloud_provider = cloud_provider
+
+ # Cloud provider might have multiple variants, e.g, aws: (aws, aws-sap-es4) - normalize it
+ cloud_providers = ('aws', 'azure', 'google')
+ for provider in cloud_providers:
+ if cloud_provider.startswith(provider):
+ self.cloud_provider = provider
+ break
def set_default_channels(self, default_channels):
"""
diff --git a/repos/system_upgrade/common/libraries/rhui.py b/repos/system_upgrade/common/libraries/rhui.py
index 3d355ff6..194aad98 100644
--- a/repos/system_upgrade/common/libraries/rhui.py
+++ b/repos/system_upgrade/common/libraries/rhui.py
@@ -78,6 +78,30 @@ RHUI_CLOUD_MAP = {
('leapp-azure-sap.repo', YUM_REPOS_PATH)
],
},
+ 'google': {
+ 'src_pkg': 'google-rhui-client-rhel7',
+ 'target_pkg': 'google-rhui-client-rhel8',
+ 'leapp_pkg': 'leapp-rhui-google',
+ 'leapp_pkg_repo': 'leapp-google.repo',
+ 'files_map': [
+ ('content.crt', RHUI_PKI_PRODUCT_DIR),
+ ('ca.crt', RHUI_PKI_DIR),
+ ('key.pem', RHUI_PKI_DIR),
+ ('leapp-google.repo', YUM_REPOS_PATH)
+ ],
+ },
+ 'google-sap': {
+ 'src_pkg': 'google-rhui-client-rhel79-sap',
+ 'target_pkg': 'google-rhui-client-rhel8-sap',
+ 'leapp_pkg': 'leapp-rhui-google-sap',
+ 'leapp_pkg_repo': 'leapp-google-sap.repo',
+ 'files_map': [
+ ('content.crt', RHUI_PKI_PRODUCT_DIR),
+ ('ca.crt', RHUI_PKI_DIR),
+ ('key.pem', RHUI_PKI_DIR),
+ ('leapp-google-sap.repo', YUM_REPOS_PATH)
+ ],
+ },
},
'8to9': {
'aws': {
diff --git a/repos/system_upgrade/common/models/repositoriesmap.py b/repos/system_upgrade/common/models/repositoriesmap.py
index c1873333..824c4557 100644
--- a/repos/system_upgrade/common/models/repositoriesmap.py
+++ b/repos/system_upgrade/common/models/repositoriesmap.py
@@ -1,4 +1,4 @@
-from leapp.models import Model, fields
+from leapp.models import fields, Model
from leapp.topics import TransactionTopic
@@ -71,12 +71,11 @@ class PESIDRepositoryEntry(Model):
purposes. The other channels indicate premium repositories.
"""
- rhui = fields.StringEnum(['', 'aws', 'azure'])
+ rhui = fields.StringEnum(['', 'aws', 'azure', 'google'])
"""
- Indicate whether the repository is deliver for RHUI and which one.
+ Specifies what cloud provider (RHUI) is the repository specific to.
- For non-rhui systems: empty string
- For AWS or Azure: 'aws' / 'azure'
+ Empty string denotes that the repository is not specific to any cloud provider.
"""
--
2.35.3