diff --git a/SOURCES/leapp-repository-0.16.0-elevate.patch b/SOURCES/leapp-repository-0.16.0-elevate.patch index 03f482a..07dc469 100644 --- a/SOURCES/leapp-repository-0.16.0-elevate.patch +++ b/SOURCES/leapp-repository-0.16.0-elevate.patch @@ -1446,6 +1446,97 @@ index 0000000..21b2164 + line = 'versionOverride=' + with open(up2date_config, 'w') as f: + f.writelines(config_data) +diff --git a/repos/system_upgrade/cloudlinux/actors/scanrolloutrepositories/actor.py b/repos/system_upgrade/cloudlinux/actors/scanrolloutrepositories/actor.py +new file mode 100644 +index 0000000..202e5f7 +--- /dev/null ++++ b/repos/system_upgrade/cloudlinux/actors/scanrolloutrepositories/actor.py +@@ -0,0 +1,30 @@ ++from leapp.actors import Actor ++from leapp.libraries.actor import scanrolloutrepositories ++from leapp.models import ( ++ CustomTargetRepositoryFile, ++ CustomTargetRepository, ++ UsedRepositories ++) ++from leapp.tags import FactsPhaseTag, IPUWorkflowTag ++from leapp.libraries.common.cllaunch import run_on_cloudlinux ++ ++ ++class ScanRolloutRepositories(Actor): ++ """ ++ Scan for repository files associated with the Gradual Rollout System. ++ ++ Normally these repositories aren't included into the upgrade, but if one of ++ the packages on the system was installed from them, we can potentially run ++ into problems if ignoring these. ++ ++ Only those repositories that had packages installed from them are included. ++ """ ++ ++ name = 'scan_rollout_repositories' ++ consumes = (UsedRepositories) ++ produces = (CustomTargetRepositoryFile, CustomTargetRepository) ++ tags = (FactsPhaseTag, IPUWorkflowTag) ++ ++ @run_on_cloudlinux ++ def process(self): ++ scanrolloutrepositories.process() +diff --git a/repos/system_upgrade/cloudlinux/actors/scanrolloutrepositories/libraries/scanrolloutrepositories.py b/repos/system_upgrade/cloudlinux/actors/scanrolloutrepositories/libraries/scanrolloutrepositories.py +new file mode 100644 +index 0000000..0a059f1 +--- /dev/null ++++ b/repos/system_upgrade/cloudlinux/actors/scanrolloutrepositories/libraries/scanrolloutrepositories.py +@@ -0,0 +1,49 @@ ++import os ++ ++from leapp.models import ( ++ CustomTargetRepositoryFile, ++ CustomTargetRepository, ++ UsedRepositories ++) ++from leapp.libraries.stdlib import api ++from leapp.libraries.common import repofileutils ++ ++REPO_DIR = '/etc/yum.repos.d' ++ROLLOUT_MARKER = 'rollout' ++CL_MARKERS = ['cloudlinux', 'imunify'] ++ ++ ++def process(): ++ used_list = [] ++ for used_repos in api.consume(UsedRepositories): ++ for used_repo in used_repos.repositories: ++ used_list.append(used_repo.repository) ++ ++ for reponame in os.listdir(REPO_DIR): ++ if ROLLOUT_MARKER not in reponame or not any(mark in reponame for mark in CL_MARKERS): ++ continue ++ ++ api.current_logger().debug("Detected a rollout repository file: {}".format(reponame)) ++ ++ full_repo_path = os.path.join(REPO_DIR, reponame) ++ repofile = repofileutils.parse_repofile(full_repo_path) ++ ++ # Ignore the repositories that are enabled, but have no packages installed from them. ++ if not any(repo.repoid in used_list for repo in repofile.data): ++ api.current_logger().debug("No used repositories found in {}, skipping".format(reponame)) ++ continue ++ else: ++ api.current_logger().debug("Rollout file {} has used repositories, adding".format(reponame)) ++ ++ for repo in repofile.data: ++ # Don't enable all the rollout repositories wholesale, some might ++ # be disabled and we want to keep that configuration. ++ if repo.enabled: ++ api.produce(CustomTargetRepository( ++ repoid=repo.repoid, ++ name=repo.name, ++ baseurl=repo.baseurl, ++ enabled=repo.enabled, ++ )) ++ ++ api.produce(CustomTargetRepositoryFile(file=full_repo_path)) diff --git a/repos/system_upgrade/cloudlinux/actors/switchclnchannel/actor.py b/repos/system_upgrade/cloudlinux/actors/switchclnchannel/actor.py new file mode 100644 index 0000000..ae01af1 @@ -1909,10 +2000,10 @@ index f4b02e9..c22165e 100644 def test_pes_data_not_found(monkeypatch): def read_or_fetch_mocked(filename, directory="/etc/leapp/files", service=None, allow_empty=False): diff --git a/repos/system_upgrade/common/actors/redhatsignedrpmscanner/actor.py b/repos/system_upgrade/common/actors/redhatsignedrpmscanner/actor.py -index 01f6df3..0bb0726 100644 +index 01f6df3..badb888 100644 --- a/repos/system_upgrade/common/actors/redhatsignedrpmscanner/actor.py +++ b/repos/system_upgrade/common/actors/redhatsignedrpmscanner/actor.py -@@ -1,27 +1,65 @@ +@@ -1,27 +1,67 @@ from leapp.actors import Actor from leapp.libraries.common import rhui -from leapp.models import InstalledRedHatSignedRPM, InstalledRPM, InstalledUnsignedRPM @@ -1940,7 +2031,8 @@ index 01f6df3..0bb0726 100644 + 'bc4d06a08d8b756f'], + 'eurolinux': ['75c333f418cd4a9e', + 'b413acad6275f250', -+ 'f7ad3e5a1c9fd080'] ++ 'f7ad3e5a1c9fd080'], ++ 'scientific': ['b0b4183f192a7d7d'] +} + +VENDOR_PACKAGERS = { @@ -1950,6 +2042,7 @@ index 01f6df3..0bb0726 100644 + "almalinux": "AlmaLinux Packaging Team", + "rocky": "infrastructure@rockylinux.org", + "eurolinux": "EuroLinux", ++ "scientific": "Scientific Linux", +} + + @@ -1988,7 +2081,7 @@ index 01f6df3..0bb0726 100644 signed_pkgs = InstalledRedHatSignedRPM() unsigned_pkgs = InstalledUnsignedRPM() -@@ -32,11 +70,11 @@ class RedHatSignedRpmScanner(Actor): +@@ -32,11 +72,11 @@ class RedHatSignedRpmScanner(Actor): all_signed = [ env for env in env_vars @@ -2003,7 +2096,7 @@ index 01f6df3..0bb0726 100644 def is_gpg_pubkey(pkg): """Check if gpg-pubkey pkg exists or LEAPP_DEVEL_RPMS_ALL_SIGNED=1 -@@ -44,15 +82,15 @@ class RedHatSignedRpmScanner(Actor): +@@ -44,15 +84,15 @@ class RedHatSignedRpmScanner(Actor): gpg-pubkey is not signed as it would require another package to verify its signature """ @@ -2024,7 +2117,7 @@ index 01f6df3..0bb0726 100644 def is_azure_pkg(pkg): """Whitelist Azure config package.""" -@@ -68,16 +106,24 @@ class RedHatSignedRpmScanner(Actor): +@@ -68,16 +108,24 @@ class RedHatSignedRpmScanner(Actor): for pkg in rpm_pkgs.items: if any( [ @@ -2345,13 +2438,17 @@ index 4ea33a2..aaec273 100644 assert not api.produce.called diff --git a/repos/system_upgrade/common/actors/scanvendorrepofiles/actor.py b/repos/system_upgrade/common/actors/scanvendorrepofiles/actor.py new file mode 100644 -index 0000000..6c7f3a3 +index 0000000..dd27b28 --- /dev/null +++ b/repos/system_upgrade/common/actors/scanvendorrepofiles/actor.py -@@ -0,0 +1,20 @@ +@@ -0,0 +1,27 @@ +from leapp.actors import Actor +from leapp.libraries.actor import scanvendorrepofiles -+from leapp.models import CustomTargetRepository, CustomTargetRepositoryFile, ActiveVendorList ++from leapp.models import ( ++ CustomTargetRepositoryFile, ++ ActiveVendorList, ++ VendorCustomTargetRepositoryList, ++) +from leapp.tags import FactsPhaseTag, IPUWorkflowTag +from leapp.libraries.stdlib import api + @@ -2363,23 +2460,31 @@ index 0000000..6c7f3a3 + """ + + name = "scan_vendor_repofiles" -+ consumes = (ActiveVendorList) -+ produces = (CustomTargetRepository, CustomTargetRepositoryFile) ++ consumes = ActiveVendorList ++ produces = ( ++ CustomTargetRepositoryFile, ++ VendorCustomTargetRepositoryList, ++ ) + tags = (FactsPhaseTag, IPUWorkflowTag) + + def process(self): + scanvendorrepofiles.process() diff --git a/repos/system_upgrade/common/actors/scanvendorrepofiles/libraries/scanvendorrepofiles.py b/repos/system_upgrade/common/actors/scanvendorrepofiles/libraries/scanvendorrepofiles.py new file mode 100644 -index 0000000..5a65f5a +index 0000000..ba74be1 --- /dev/null +++ b/repos/system_upgrade/common/actors/scanvendorrepofiles/libraries/scanvendorrepofiles.py -@@ -0,0 +1,68 @@ +@@ -0,0 +1,72 @@ +import os + +from leapp.libraries.common import repofileutils +from leapp.libraries.stdlib import api -+from leapp.models import CustomTargetRepository, CustomTargetRepositoryFile, ActiveVendorList ++from leapp.models import ( ++ CustomTargetRepository, ++ CustomTargetRepositoryFile, ++ ActiveVendorList, ++ VendorCustomTargetRepositoryList, ++) + + +VENDORS_DIR = "/etc/leapp/files/vendors.d/" @@ -2410,9 +2515,7 @@ index 0000000..5a65f5a + for vendor_list in api.consume(ActiveVendorList): + active_vendors.extend(vendor_list.data) + -+ api.current_logger().debug( -+ "Active vendor list: {}".format(active_vendors) -+ ) ++ api.current_logger().debug("Active vendor list: {}".format(active_vendors)) + + if vendor_name not in active_vendors: + api.current_logger().debug( @@ -2427,18 +2530,19 @@ index 0000000..5a65f5a + repofile = repofileutils.parse_repofile(full_repo_path) + + api.produce(CustomTargetRepositoryFile(file=full_repo_path)) -+ for repo in repofile.data: -+ api.current_logger().debug( -+ "Loaded repository {} from file {}".format(repo.repoid, reponame) -+ ) -+ api.produce( -+ CustomTargetRepository( -+ repoid=repo.repoid, -+ name=repo.name, -+ baseurl=repo.baseurl, -+ enabled=repo.enabled, -+ ) -+ ) ++ ++ custom_vendor_repos = [ ++ CustomTargetRepository( ++ repoid=repo.repoid, ++ name=repo.name, ++ baseurl=repo.baseurl, ++ enabled=repo.enabled, ++ ) for repo in repofile.data ++ ] ++ ++ api.produce( ++ VendorCustomTargetRepositoryList(vendor=vendor_name, repos=custom_vendor_repos) ++ ) + + api.current_logger().info( + "The {} directory exists, vendor repositories loaded.".format(VENDORS_DIR) @@ -2581,30 +2685,57 @@ index 0000000..cb5c7ab + assert api.current_logger.infomsg == msg + assert not api.produce.called diff --git a/repos/system_upgrade/common/actors/setuptargetrepos/actor.py b/repos/system_upgrade/common/actors/setuptargetrepos/actor.py -index 00de073..fb86639 100644 +index 00de073..95cedcd 100644 --- a/repos/system_upgrade/common/actors/setuptargetrepos/actor.py +++ b/repos/system_upgrade/common/actors/setuptargetrepos/actor.py -@@ -12,6 +12,7 @@ from leapp.models import ( - UsedRepositories +@@ -9,9 +9,11 @@ from leapp.models import ( + RHUIInfo, + SkippedRepositories, + TargetRepositories, +- UsedRepositories ++ UsedRepositories, ++ VendorCustomTargetRepositoryList ) from leapp.tags import FactsPhaseTag, IPUWorkflowTag +from leapp.libraries.stdlib import api class SetupTargetRepos(Actor): +@@ -30,7 +32,8 @@ class SetupTargetRepos(Actor): + RepositoriesFacts, + RepositoriesBlacklisted, + RHUIInfo, +- UsedRepositories) ++ UsedRepositories, ++ VendorCustomTargetRepositoryList) + produces = (TargetRepositories, SkippedRepositories) + tags = (IPUWorkflowTag, FactsPhaseTag) + diff --git a/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos.py b/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos.py -index 3f34aed..2992037 100644 +index 3f34aed..9428ef6 100644 --- a/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos.py +++ b/repos/system_upgrade/common/actors/setuptargetrepos/libraries/setuptargetrepos.py -@@ -59,9 +59,20 @@ def _get_used_repo_dict(): +@@ -12,7 +12,8 @@ from leapp.models import ( + RHUIInfo, + SkippedRepositories, + TargetRepositories, +- UsedRepositories ++ UsedRepositories, ++ VendorCustomTargetRepositoryList + ) - def _setup_repomap_handler(src_repoids): +@@ -58,10 +59,21 @@ def _get_used_repo_dict(): + return used + + +-def _setup_repomap_handler(src_repoids): - repo_mappig_msg = next(api.consume(RepositoriesMapping), RepositoriesMapping()) ++def _setup_repomap_handler(src_repoids, mapping_list): + combined_mapping = [] + combined_repositories = [] + # Depending on whether there are any vendors present, we might get more than one message. -+ for msg in api.consume(RepositoriesMapping): ++ for msg in mapping_list: + combined_mapping.extend(msg.mapping) + combined_repositories.extend(msg.repositories) + @@ -2619,6 +2750,82 @@ index 3f34aed..2992037 100644 # TODO(pstodulk): what about skip this completely and keep the default 'ga'..? default_channels = setuptargetrepos_repomap.get_default_repository_channels(repomap, src_repoids) repomap.set_default_channels(default_channels) +@@ -77,22 +89,74 @@ def _get_mapped_repoids(repomap, src_repoids): + return mapped_repoids + + ++def _get_vendor_custom_repos(enabled_repos, mapping_list): ++ # Look at what source repos from the vendor mapping were enabled. ++ # If any of them are in beta, include vendor's custom repos in the list. ++ # Otherwise skip them. ++ ++ result = [] ++ ++ # Build a dict of vendor mappings for easy lookup. ++ map_dict = {mapping.vendor: mapping for mapping in mapping_list if mapping.vendor} ++ ++ for vendor_repolist in api.consume(VendorCustomTargetRepositoryList): ++ vendor_repomap = map_dict[vendor_repolist.vendor] ++ ++ # Find the beta channel repositories for the vendor. ++ beta_repos = [ ++ x.repoid for x in vendor_repomap.repositories if x.channel == "beta" ++ ] ++ api.current_logger().debug( ++ "Vendor {} beta repos: {}".format(vendor_repolist.vendor, beta_repos) ++ ) ++ ++ # Are any of the beta repos present and enabled on the system? ++ if any(rep in beta_repos for rep in enabled_repos): ++ # If so, use all repos including beta in the upgrade. ++ vendor_repos = vendor_repolist.repos ++ else: ++ # Otherwise filter beta repos out. ++ vendor_repos = [repo for repo in vendor_repolist.repos if repo.repoid not in beta_repos] ++ ++ result.extend([CustomTargetRepository( ++ repoid=repo.repoid, ++ name=repo.name, ++ baseurl=repo.baseurl, ++ enabled=repo.enabled, ++ ) for repo in vendor_repos]) ++ ++ return result ++ ++ + def process(): + # load all data / messages + used_repoids_dict = _get_used_repo_dict() + enabled_repoids = _get_enabled_repoids() + excluded_repoids = _get_blacklisted_repoids() ++ ++ mapping_list = list(api.consume(RepositoriesMapping)) ++ + custom_repos = _get_custom_target_repos() ++ vendor_repos = _get_vendor_custom_repos(enabled_repoids, mapping_list) ++ ++ api.current_logger().debug('Custom repos: {}'.format([f.repoid for f in custom_repos])) ++ api.current_logger().debug('Vendor repos: {}'.format([f.repoid for f in vendor_repos])) ++ ++ custom_repos.extend(vendor_repos) ++ ++ api.current_logger().debug('Used repos: {}'.format(used_repoids_dict.keys())) ++ api.current_logger().debug('Enabled repos: {}'.format(list(enabled_repoids))) + + # TODO(pstodulk): isn't that a potential issue that we map just enabled repos + # instead of enabled + used repos?? + # initialise basic data +- repomap = _setup_repomap_handler(enabled_repoids) ++ repomap = _setup_repomap_handler(enabled_repoids, mapping_list) + mapped_repoids = _get_mapped_repoids(repomap, enabled_repoids) + skipped_repoids = enabled_repoids & set(used_repoids_dict.keys()) - mapped_repoids + + # Now get the info what should be the target RHEL repositories + expected_repos = repomap.get_expected_target_pesid_repos(enabled_repoids) ++ api.current_logger().debug('Expected repos: {}'.format(expected_repos)) + target_rhel_repoids = set() + for target_pesid, target_pesidrepo in expected_repos.items(): + if not target_pesidrepo: diff --git a/repos/system_upgrade/common/actors/systemfacts/actor.py b/repos/system_upgrade/common/actors/systemfacts/actor.py index 59b12c8..85d4a09 100644 --- a/repos/system_upgrade/common/actors/systemfacts/actor.py @@ -2633,10 +2840,23 @@ index 59b12c8..85d4a09 100644 def process(self): self.produce(systemfacts.get_sysctls_status()) diff --git a/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py b/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py -index 7a8bd99..f59c909 100644 +index 7a8bd99..a1f8db8 100644 --- a/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py +++ b/repos/system_upgrade/common/actors/targetuserspacecreator/libraries/userspacegen.py -@@ -592,6 +592,7 @@ def _install_custom_repofiles(context, custom_repofiles): +@@ -225,6 +225,12 @@ def _prep_repository_access(context, target_userspace): + target_etc = os.path.join(target_userspace, 'etc') + target_yum_repos_d = os.path.join(target_etc, 'yum.repos.d') + backup_yum_repos_d = os.path.join(target_etc, 'yum.repos.d.backup') ++ ++ # Copy RHN data independent from RHSM config ++ if os.path.isdir('/etc/sysconfig/rhn'): ++ run(['rm', '-rf', os.path.join(target_etc, 'sysconfig/rhn')]) ++ context.copytree_from('/etc/sysconfig/rhn', os.path.join(target_etc, 'sysconfig/rhn')) ++ + if not rhsm.skip_rhsm(): + run(['rm', '-rf', os.path.join(target_etc, 'pki')]) + run(['rm', '-rf', os.path.join(target_etc, 'rhsm')]) +@@ -592,6 +598,7 @@ def _install_custom_repofiles(context, custom_repofiles): """ for rfile in custom_repofiles: _dst_path = os.path.join('/etc/yum.repos.d', os.path.basename(rfile.file)) @@ -2646,10 +2866,10 @@ index 7a8bd99..f59c909 100644 diff --git a/repos/system_upgrade/common/actors/vendorreposignaturescanner/actor.py b/repos/system_upgrade/common/actors/vendorreposignaturescanner/actor.py new file mode 100644 -index 0000000..f74de27 +index 0000000..e28b880 --- /dev/null +++ b/repos/system_upgrade/common/actors/vendorreposignaturescanner/actor.py -@@ -0,0 +1,70 @@ +@@ -0,0 +1,72 @@ +import os + +from leapp.actors import Actor @@ -2663,8 +2883,10 @@ index 0000000..f74de27 + +class VendorRepoSignatureScanner(Actor): + """ -+ Produce VendorSignatures msgs for the vendor signature files inside the ++ Produce VendorSignatures messages for the vendor signature files inside the + . ++ These messages are used to extend the list of pakcages Leapp will consider ++ signed and will attempt to upgrade. + + The messages are produced only if a "from" vendor repository + listed indide its map matched one of the repositories active on the system. @@ -2747,10 +2969,10 @@ index 0000000..1325647 + scan_vendor_repomaps() diff --git a/repos/system_upgrade/common/actors/vendorrepositoriesmapping/libraries/vendorrepositoriesmapping.py b/repos/system_upgrade/common/actors/vendorrepositoriesmapping/libraries/vendorrepositoriesmapping.py new file mode 100644 -index 0000000..204d0dc +index 0000000..ba27cbb --- /dev/null +++ b/repos/system_upgrade/common/actors/vendorrepositoriesmapping/libraries/vendorrepositoriesmapping.py -@@ -0,0 +1,66 @@ +@@ -0,0 +1,76 @@ +import os + +from leapp.libraries.common.config.version import get_target_major_version, get_source_major_version @@ -2769,6 +2991,10 @@ index 0000000..204d0dc + try: + repomap_data = RepoMapData.load_from_dict(json_data) + ++ # What repositories associated with the vendor are expected to be present ++ # on a system with the current major version? ++ # We need to know that to know what to look for in currently enabled ++ # system repositories. + api.produce(VendorSourceRepos( + vendor=vendor_name, + source_repoids=repomap_data.get_version_repoids(get_source_major_version()) @@ -2776,9 +3002,15 @@ index 0000000..204d0dc + + mapping = repomap_data.get_mappings(get_source_major_version(), get_target_major_version()) + valid_major_versions = [get_source_major_version(), get_target_major_version()] ++ ++ # This RepositoriesMapping message is different from the one produced by the ++ # builtin actor because of the vendor field. ++ # It can be used later to distinguish the messages provided from vendors and the one ++ # from the OS upgrade data. + api.produce(RepositoriesMapping( + mapping=mapping, -+ repositories=repomap_data.get_repositories(valid_major_versions) ++ repositories=repomap_data.get_repositories(valid_major_versions), ++ vendor=vendor_name + )) + except ModelViolationError as err: + err_message = ( @@ -2818,7 +3050,7 @@ index 0000000..204d0dc + # for repomap in vendor_repomap_collection.maps: + # self.produce(repomap) diff --git a/repos/system_upgrade/common/libraries/config/version.py b/repos/system_upgrade/common/libraries/config/version.py -index 03f3cd4..ae78fac 100644 +index 03f3cd4..2ab78ea 100644 --- a/repos/system_upgrade/common/libraries/config/version.py +++ b/repos/system_upgrade/common/libraries/config/version.py @@ -13,8 +13,8 @@ OP_MAP = { @@ -2827,7 +3059,7 @@ index 03f3cd4..ae78fac 100644 # Note: 'rhel-alt' is detected when on 'rhel' with kernel 4.x - '7': {'rhel': ['7.9'], 'rhel-alt': ['7.6'], 'rhel-saphana': ['7.9']}, - '8': {'rhel': ['8.5', '8.6']}, -+ '7': {'rhel': ['7.9'], 'rhel-alt': ['7.6'], 'rhel-saphana': ['7.9'], 'centos': ['7.9'], 'eurolinux': ['7.9'], 'ol': ['7.9'], 'cloudlinux': ['7.9']}, ++ '7': {'rhel': ['7.9'], 'rhel-alt': ['7.6'], 'rhel-saphana': ['7.9'], 'centos': ['7.9'], 'eurolinux': ['7.9'], 'ol': ['7.9'], 'cloudlinux': ['7.9'], 'scientific': ['7.9']}, + '8': {'rhel': ['8.5', '8.6', '8.7'], 'centos': ['8.5'], 'almalinux': ['8.6', '8.7'], 'eurolinux': ['8.6', '8.7'], 'ol': ['8.6', '8.7'], 'rocky': ['8.6', '8.7']}, } @@ -3057,14 +3289,31 @@ index 0000000..de4056f + topic = VendorTopic + data = fields.List(fields.String()) diff --git a/repos/system_upgrade/common/models/repositoriesmap.py b/repos/system_upgrade/common/models/repositoriesmap.py -index c187333..a068a70 100644 +index c187333..ea6a75d 100644 --- a/repos/system_upgrade/common/models/repositoriesmap.py +++ b/repos/system_upgrade/common/models/repositoriesmap.py @@ -92,3 +92,4 @@ class RepositoriesMapping(Model): mapping = fields.List(fields.Model(RepoMapEntry), default=[]) repositories = fields.List(fields.Model(PESIDRepositoryEntry), default=[]) ++ vendor = fields.Nullable(fields.String()) +diff --git a/repos/system_upgrade/common/models/targetrepositories.py b/repos/system_upgrade/common/models/targetrepositories.py +index 3604772..33f5dc8 100644 +--- a/repos/system_upgrade/common/models/targetrepositories.py ++++ b/repos/system_upgrade/common/models/targetrepositories.py +@@ -21,6 +21,12 @@ class CustomTargetRepository(TargetRepositoryBase): + enabled = fields.Boolean(default=True) + + ++class VendorCustomTargetRepositoryList(Model): ++ topic = TransactionTopic ++ vendor = fields.String() ++ repos = fields.List(fields.Model(CustomTargetRepository)) + ++ + class TargetRepositories(Model): + topic = TransactionTopic + rhel_repos = fields.List(fields.Model(RHELTargetRepository)) diff --git a/repos/system_upgrade/common/models/vendorsignatures.py b/repos/system_upgrade/common/models/vendorsignatures.py new file mode 100644 index 0000000..f456aec diff --git a/SPECS/leapp-repository.spec b/SPECS/leapp-repository.spec index cfe7906..9bda910 100644 --- a/SPECS/leapp-repository.spec +++ b/SPECS/leapp-repository.spec @@ -43,7 +43,7 @@ py2_byte_compile "%1" "%2"} Epoch: 1 Name: leapp-repository Version: 0.16.0 -Release: 6%{?dist}.elevate.4 +Release: 6%{?dist}.elevate.5 Summary: Repositories for leapp License: ASL 2.0