katello 4.4.2.2 → 4.5.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of katello might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +5 -1
- data/app/controllers/katello/api/v2/alternate_content_sources_controller.rb +98 -0
- data/app/controllers/katello/api/v2/content_export_incrementals_controller.rb +39 -3
- data/app/controllers/katello/api/v2/content_exports_controller.rb +19 -0
- data/app/controllers/katello/api/v2/content_imports_controller.rb +13 -16
- data/app/controllers/katello/api/v2/content_view_versions_controller.rb +0 -12
- data/app/controllers/katello/api/v2/content_views_controller.rb +13 -0
- data/app/controllers/katello/api/v2/environments_controller.rb +1 -1
- data/app/controllers/katello/api/v2/host_module_streams_controller.rb +8 -2
- data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +25 -3
- data/app/controllers/katello/api/v2/organizations_controller.rb +4 -2
- data/app/controllers/katello/api/v2/repositories_bulk_actions_controller.rb +1 -1
- data/app/controllers/katello/api/v2/repositories_controller.rb +9 -3
- data/app/controllers/katello/api/v2/repository_sets_controller.rb +40 -7
- data/app/controllers/katello/api/v2/subscriptions_controller.rb +2 -2
- data/app/controllers/katello/concerns/api/v2/hosts_controller_extensions.rb +1 -1
- data/app/helpers/katello/concerns/smart_proxy_helper_extensions.rb +4 -0
- data/app/helpers/katello/hosts_and_hostgroups_helper.rb +21 -3
- data/app/lib/actions/katello/alternate_content_source/create.rb +24 -0
- data/app/lib/actions/katello/alternate_content_source/destroy.rb +27 -0
- data/app/lib/actions/katello/alternate_content_source/update.rb +41 -0
- data/app/lib/actions/katello/cdn_configuration/update.rb +2 -2
- data/app/lib/actions/katello/content_view/destroy.rb +2 -1
- data/app/lib/actions/katello/content_view/incremental_updates.rb +7 -3
- data/app/lib/actions/katello/content_view/publish.rb +7 -9
- data/app/lib/actions/katello/content_view_version/auto_create_products.rb +4 -4
- data/app/lib/actions/katello/content_view_version/auto_create_redhat_repositories.rb +6 -4
- data/app/lib/actions/katello/content_view_version/auto_create_repositories.rb +6 -4
- data/app/lib/actions/katello/content_view_version/import.rb +25 -22
- data/app/lib/actions/katello/content_view_version/import_library.rb +0 -1
- data/app/lib/actions/katello/content_view_version/import_repository.rb +21 -0
- data/app/lib/actions/katello/content_view_version/incremental_update.rb +85 -93
- data/app/lib/actions/katello/content_view_version/reset_content_view_repositories_from_metadata.rb +2 -2
- data/app/lib/actions/katello/product/content_create.rb +10 -8
- data/app/lib/actions/katello/repository/destroy.rb +36 -12
- data/app/lib/actions/katello/repository_set/disable_repository.rb +8 -3
- data/app/lib/actions/pulp3/alternate_content_source/create.rb +20 -0
- data/app/lib/actions/pulp3/alternate_content_source/create_remote.rb +20 -0
- data/app/lib/actions/pulp3/alternate_content_source/delete.rb +16 -0
- data/app/lib/actions/pulp3/alternate_content_source/delete_remote.rb +16 -0
- data/app/lib/actions/pulp3/alternate_content_source/update.rb +16 -0
- data/app/lib/actions/pulp3/alternate_content_source/update_remote.rb +17 -0
- data/app/lib/actions/pulp3/content_view_version/{import.rb → create_import.rb} +5 -5
- data/app/lib/actions/pulp3/content_view_version/create_importer.rb +4 -3
- data/app/lib/actions/pulp3/content_view_version/destroy_importer.rb +12 -1
- data/app/lib/actions/pulp3/orchestration/alternate_content_source/create.rb +18 -0
- data/app/lib/actions/pulp3/orchestration/alternate_content_source/delete.rb +23 -0
- data/app/lib/actions/pulp3/orchestration/alternate_content_source/update.rb +18 -0
- data/app/lib/actions/pulp3/orchestration/content_view_version/copy_version_units_to_library.rb +1 -1
- data/app/lib/actions/pulp3/orchestration/content_view_version/export_repository.rb +51 -0
- data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +5 -2
- data/app/lib/actions/pulp3/repository/refresh_distribution.rb +4 -1
- data/app/lib/actions/pulp3/repository/save_distribution_references.rb +2 -0
- data/app/lib/katello/api/v2/error_handling.rb +1 -0
- data/app/lib/katello/resources/cdn/katello_cdn.rb +3 -1
- data/app/lib/katello/util/errata.rb +2 -3
- data/app/lib/katello/validators/alternate_content_source_path_validator.rb +29 -0
- data/app/lib/katello/validators/content_default_http_proxy_setting_validator.rb +12 -0
- data/app/lib/katello/validators/content_view_environment_validator.rb +10 -5
- data/app/models/katello/alternate_content_source.rb +66 -0
- data/app/models/katello/authorization/alternate_content_source.rb +33 -0
- data/app/models/katello/authorization/repository.rb +3 -3
- data/app/models/katello/candlepin/repository_mapper.rb +13 -6
- data/app/models/katello/cdn_configuration.rb +15 -15
- data/app/models/katello/concerns/content_facet_host_extensions.rb +25 -0
- data/app/models/katello/concerns/host_managed_extensions.rb +7 -5
- data/app/models/katello/concerns/http_proxy_extensions.rb +14 -0
- data/app/models/katello/concerns/organization_extensions.rb +4 -2
- data/app/models/katello/concerns/setting_extensions.rb +14 -0
- data/app/models/katello/concerns/smart_proxy_extensions.rb +2 -1
- data/app/models/katello/content.rb +1 -0
- data/app/models/katello/content_credential.rb +6 -0
- data/app/models/katello/content_override.rb +7 -3
- data/app/models/katello/content_view.rb +33 -2
- data/app/models/katello/content_view_erratum_filter.rb +26 -12
- data/app/models/katello/content_view_filter.rb +4 -0
- data/app/models/katello/content_view_version.rb +12 -0
- data/app/models/katello/content_view_version_export_history.rb +3 -1
- data/app/models/katello/erratum.rb +9 -5
- data/app/models/katello/events/delete_latest_content_view_version.rb +40 -0
- data/app/models/katello/host/content_facet.rb +14 -0
- data/app/models/katello/host_available_module_stream.rb +12 -0
- data/app/models/katello/product_content.rb +1 -0
- data/app/models/katello/purpose_sla_status.rb +1 -1
- data/app/models/katello/purpose_status.rb +2 -2
- data/app/models/katello/repository.rb +7 -4
- data/app/models/katello/root_repository.rb +1 -1
- data/app/models/katello/smart_proxy_alternate_content_source.rb +8 -0
- data/app/models/katello/sync_plan.rb +1 -1
- data/app/presenters/katello/product_content_presenter.rb +15 -0
- data/app/services/katello/applicable_host_queue.rb +1 -1
- data/app/services/katello/content_unit_indexer.rb +2 -1
- data/app/services/katello/product_content_finder.rb +12 -2
- data/app/services/katello/pulp3/alternate_content_source.rb +117 -0
- data/app/services/katello/pulp3/api/file.rb +8 -0
- data/app/services/katello/pulp3/api/yum.rb +8 -0
- data/app/services/katello/pulp3/content_view_version/export.rb +27 -5
- data/app/services/katello/pulp3/content_view_version/import.rb +97 -71
- data/app/services/katello/pulp3/content_view_version/import_export_common.rb +4 -4
- data/app/services/katello/pulp3/content_view_version/import_gpg_keys.rb +13 -11
- data/app/services/katello/pulp3/content_view_version/import_validator.rb +67 -72
- data/app/services/katello/pulp3/content_view_version/importable_products.rb +40 -24
- data/app/services/katello/pulp3/content_view_version/importable_repositories.rb +88 -39
- data/app/services/katello/pulp3/content_view_version/metadata_generator.rb +2 -2
- data/app/services/katello/pulp3/content_view_version/metadata_map.rb +117 -0
- data/app/services/katello/pulp3/pulp_content_unit.rb +6 -1
- data/app/services/katello/pulp3/repository/yum.rb +70 -12
- data/app/services/katello/pulp3/repository.rb +7 -91
- data/app/services/katello/pulp3/service_common.rb +66 -0
- data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +4 -1
- data/app/services/katello/ui_notifications/content_view/delete_latest_version_failure.rb +22 -0
- data/app/views/foreman/job_templates/change_content_source.erb +1 -1
- data/app/views/foreman/job_templates/install_errata.erb +5 -5
- data/app/views/foreman/job_templates/install_errata_by_search_query.erb +7 -6
- data/app/views/foreman/job_templates/install_group.erb +4 -4
- data/app/views/foreman/job_templates/install_package.erb +4 -4
- data/app/views/foreman/job_templates/install_packages_by_search_query.erb +3 -3
- data/app/views/foreman/job_templates/remove_group.erb +4 -4
- data/app/views/foreman/job_templates/remove_package.erb +4 -4
- data/app/views/foreman/job_templates/remove_packages_by_search_query.erb +3 -3
- data/app/views/foreman/job_templates/resolve_traces.erb +2 -2
- data/app/views/foreman/job_templates/restart_services.erb +3 -3
- data/app/views/foreman/job_templates/update_group.erb +4 -4
- data/app/views/foreman/job_templates/update_package.erb +4 -4
- data/app/views/foreman/job_templates/update_packages_by_search_query.erb +3 -3
- data/app/views/katello/api/v2/alternate_content_sources/base.json.rabl +15 -0
- data/app/views/katello/api/v2/alternate_content_sources/index.json.rabl +7 -0
- data/app/views/katello/api/v2/alternate_content_sources/show.json.rabl +3 -0
- data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +1 -1
- data/app/views/katello/api/v2/content_view_version_export_histories/show.json.rabl +2 -3
- data/app/views/katello/api/v2/content_view_versions/base.json.rabl +1 -1
- data/app/views/katello/api/v2/content_views/base.json.rabl +1 -0
- data/app/views/katello/api/v2/environments/show.json.rabl +2 -0
- data/app/views/katello/api/v2/errata/_counts.json.rabl +2 -2
- data/app/views/katello/api/v2/host_module_streams/base.json.rabl +2 -2
- data/app/views/katello/api/v2/hosts/host_collections.json.rabl +1 -1
- data/app/views/katello/api/v2/organizations/show.json.rabl +7 -1
- data/app/views/katello/api/v2/repositories/show.json.rabl +2 -1
- data/app/views/katello/sync_management/_repo.html.erb +8 -29
- data/config/routes/api/v2.rb +7 -0
- data/db/migrate/20150930183738_migrate_content_hosts.rb +0 -399
- data/db/migrate/20171025163149_remove_use_pulp_oauth_setting.rb +1 -1
- data/db/migrate/20171114150937_cleanup_installed_packages.rb +1 -1
- data/db/migrate/20180402160223_clean_up_force_post_sync_action_setting.rb +1 -1
- data/db/migrate/20211129200124_remove_dependency_solving_algorithm_setting.rb +1 -1
- data/db/migrate/20211220185935_clean_duplicate_content_units.rb +10 -12
- data/db/migrate/20220110223754_update_disconnected_settings.rb +5 -5
- data/db/migrate/20220117151612_add_alternate_content_sources.rb +48 -0
- data/db/migrate/20220124191056_add_type_to_cdn_configuration.rb +9 -4
- data/db/migrate/20220209203251_add_generated_for_to_content_views.rb +13 -0
- data/db/migrate/20220209205137_expand_sync_timeout_settings.rb +7 -7
- data/db/migrate/20220228173251_remove_drpm_from_ignorable_content.rb +12 -0
- data/db/migrate/20220404190836_delete_old_setting_data.rb +9 -0
- data/db/migrate/20220405220616_update_cdn_configuration_type.rb +11 -0
- data/db/migrate/20220419193414_content_settings_to_dsl_category.rb +5 -0
- data/db/seeds.d/110-content-view-autopublish.rb +13 -0
- data/db/seeds.d/150-module_job_templates.rb +1 -1
- data/engines/bastion/README.md +1 -0
- data/engines/bastion/app/assets/javascripts/bastion/components/bst-modal.directive.js +1 -0
- data/engines/bastion/app/views/bastion/layouts/assets.html.erb +1 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-details.controller.js +4 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/capsule-content/capsule-content.controller.js +10 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-module-streams.controller.js +1 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-packages-installed.controller.js +1 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-traces.controller.js +1 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-actions.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-applicable.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.controller.js +8 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details.controller.js +4 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +2 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/content.service.js +10 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-deb-repositories.html +26 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-debs.html +27 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/environments.controller.js +1 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/environments.routes.js +22 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/views/environments.html +13 -7
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +63 -17
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +7 -8
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +10 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-details.html +21 -3
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +8 -9
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +7 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +2 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/discovery-create.controller.js +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/views/discovery-create.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.routes.js +1 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/content-access-mode-banner.html +6 -1
- data/lib/katello/engine.rb +1 -5
- data/lib/katello/permission_creator.rb +32 -4
- data/lib/katello/plugin.rb +378 -4
- data/lib/katello/tasks/reset.rake.bak +67 -0
- data/lib/katello/tasks/update_content_default_http_proxy.rake +2 -3
- data/lib/katello/version.rb +1 -1
- data/locale/action_names.rb +47 -41
- data/locale/bn/LC_MESSAGES/katello.mo +0 -0
- data/locale/bn/katello.po +820 -106
- data/locale/bn/katello.po.time_stamp +0 -0
- data/locale/cs/LC_MESSAGES/katello.mo +0 -0
- data/locale/cs/katello.po +818 -104
- data/locale/cs/katello.po.time_stamp +0 -0
- data/locale/de/LC_MESSAGES/katello.mo +0 -0
- data/locale/de/katello.po +893 -179
- data/locale/de/katello.po.time_stamp +0 -0
- data/locale/en/LC_MESSAGES/katello.mo +0 -0
- data/locale/en/katello.po +817 -103
- data/locale/en/katello.po.time_stamp +0 -0
- data/locale/es/LC_MESSAGES/katello.mo +0 -0
- data/locale/es/katello.po +882 -168
- data/locale/es/katello.po.time_stamp +0 -0
- data/locale/fr/LC_MESSAGES/katello.mo +0 -0
- data/locale/fr/katello.po +1219 -505
- data/locale/fr/katello.po.time_stamp +0 -0
- data/locale/gu/LC_MESSAGES/katello.mo +0 -0
- data/locale/gu/katello.po +826 -112
- data/locale/gu/katello.po.time_stamp +0 -0
- data/locale/hi/LC_MESSAGES/katello.mo +0 -0
- data/locale/hi/katello.po +826 -112
- data/locale/hi/katello.po.time_stamp +0 -0
- data/locale/it/LC_MESSAGES/katello.mo +0 -0
- data/locale/it/katello.po +863 -148
- data/locale/it/katello.po.time_stamp +0 -0
- data/locale/ja/LC_MESSAGES/katello.mo +0 -0
- data/locale/ja/katello.po +1216 -499
- data/locale/ja/katello.po.time_stamp +0 -0
- data/locale/katello.pot +3847 -2507
- data/locale/kn/LC_MESSAGES/katello.mo +0 -0
- data/locale/kn/katello.po +826 -112
- data/locale/kn/katello.po.time_stamp +0 -0
- data/locale/ko/LC_MESSAGES/katello.mo +0 -0
- data/locale/ko/katello.po +912 -198
- data/locale/ko/katello.po.time_stamp +0 -0
- data/locale/mr/LC_MESSAGES/katello.mo +0 -0
- data/locale/mr/katello.po +826 -112
- data/locale/mr/katello.po.time_stamp +0 -0
- data/locale/or/LC_MESSAGES/katello.mo +0 -0
- data/locale/or/katello.po +826 -112
- data/locale/or/katello.po.time_stamp +0 -0
- data/locale/pa/LC_MESSAGES/katello.mo +0 -0
- data/locale/pa/katello.po +826 -112
- data/locale/pa/katello.po.time_stamp +0 -0
- data/locale/pt/LC_MESSAGES/katello.mo +0 -0
- data/locale/pt/katello.po +817 -103
- data/locale/pt/katello.po.time_stamp +0 -0
- data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
- data/locale/pt_BR/katello.po +879 -165
- data/locale/pt_BR/katello.po.time_stamp +0 -0
- data/locale/ru/LC_MESSAGES/katello.mo +0 -0
- data/locale/ru/katello.po +927 -213
- data/locale/ru/katello.po.time_stamp +0 -0
- data/locale/ta/LC_MESSAGES/katello.mo +0 -0
- data/locale/ta/katello.po +820 -106
- data/locale/ta/katello.po.time_stamp +0 -0
- data/locale/te/LC_MESSAGES/katello.mo +0 -0
- data/locale/te/katello.po +826 -112
- data/locale/te/katello.po.time_stamp +0 -0
- data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
- data/locale/zh_CN/katello.po +1202 -486
- data/locale/zh_CN/katello.po.time_stamp +0 -0
- data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
- data/locale/zh_TW/katello.po +856 -142
- data/locale/zh_TW/katello.po.time_stamp +0 -0
- data/webpack/components/EditableTextInput/EditableTextInput.js +20 -5
- data/webpack/components/Errata/index.js +38 -8
- data/webpack/components/Packages/index.js +1 -4
- data/webpack/components/Search/Search.js +18 -3
- data/webpack/components/SelectAllCheckbox/index.js +1 -0
- data/webpack/components/SelectableDropdown/SelectableDropdown.js +4 -2
- data/webpack/components/Table/EmptyStateMessage.js +21 -7
- data/webpack/components/Table/MainTable.js +29 -4
- data/webpack/components/Table/TableHooks.js +63 -19
- data/webpack/components/Table/TableWrapper.js +4 -2
- data/webpack/components/Table/components/SortableColumnHeaders.js +19 -0
- data/webpack/components/Table/components/TranslatedPlural.js +57 -0
- data/webpack/components/TypeAhead/TypeAhead.js +8 -0
- data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +13 -11
- data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +5 -2
- data/webpack/components/extensions/HostDetails/ActionsBar/index.js +27 -0
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.js +256 -0
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ContentViewDetailsCard.js +202 -0
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/HostContentViewActions.js +19 -0
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/HostContentViewConstants.js +2 -0
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/changeHostCVModal.test.js +131 -0
- data/webpack/components/extensions/HostDetails/Cards/{__tests__ → ContentViewDetailsCard/__tests__}/contentViewDetailsCard.test.js +22 -0
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/contentViews.fixtures.json +443 -0
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/envPaths.fixtures.json +320 -0
- data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.js +57 -33
- data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.scss +3 -0
- data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsActions.js +30 -0
- data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsCard.js +187 -0
- data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsConstants.js +7 -0
- data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsModal.js +227 -0
- data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsSelectors.js +18 -0
- data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/availableHostCollections.fixtures.json +106 -0
- data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/hostCollectionsCard.test.js +110 -0
- data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/hostCollectionsModal.test.js +235 -0
- data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/removableHostCollections.fixtures.json +45 -0
- data/webpack/components/extensions/HostDetails/Cards/__tests__/errataOverviewCard.test.js +33 -8
- data/webpack/components/extensions/HostDetails/DetailsTabCards/InstalledProductsCard.js +44 -0
- data/webpack/components/extensions/HostDetails/DetailsTabCards/RegistrationCard.js +107 -0
- data/webpack/components/extensions/HostDetails/DetailsTabCards/SystemPropertiesCardExtensions.js +38 -0
- data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +62 -39
- data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/HostErrataActions.js +1 -7
- data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsActions.js +1 -3
- data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsConstants.js +28 -0
- data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +486 -116
- data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/__tests__/moduleStreamsTab.test.js +147 -1
- data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/__tests__/modules.fixtures.json +6 -3
- data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/HostPackagesActions.js +1 -7
- data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackageInstallModal.js +2 -1
- data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +48 -19
- data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +35 -47
- data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionConstants.js +1 -0
- data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsActions.js +33 -54
- data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsConstants.js +20 -0
- data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +269 -132
- data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +47 -11
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +30 -42
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +36 -1
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +94 -46
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +18 -2
- data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +6 -0
- data/webpack/containers/Application/config.js +5 -0
- data/webpack/global_index.js +30 -7
- data/webpack/global_test_setup.js +13 -0
- data/webpack/redux/actions/RedHatRepositories/enabled.js +2 -1
- data/webpack/redux/actions/RedHatRepositories/helpers.js +9 -8
- data/webpack/scenes/AlternateContentSources/ACSActions.js +53 -0
- data/webpack/scenes/AlternateContentSources/ACSConstants.js +4 -0
- data/webpack/scenes/AlternateContentSources/ACSIndexPage.js +23 -0
- data/webpack/scenes/AlternateContentSources/ACSSelectors.js +15 -0
- data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.js +152 -0
- data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsIndex.fixtures.json +91 -0
- data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsTable.test.js +67 -0
- data/webpack/scenes/AlternateContentSources/index.js +4 -0
- data/webpack/scenes/Content/Details/ContentRepositories.js +1 -0
- data/webpack/scenes/Content/Table/ContentTable.js +1 -0
- data/webpack/scenes/ContentViews/ContentViewsActions.js +6 -2
- data/webpack/scenes/ContentViews/ContentViewsConstants.js +11 -3
- data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +2 -1
- data/webpack/scenes/ContentViews/Create/ContentViewFormComponents.js +10 -1
- data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +4 -3
- data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +1 -1
- data/webpack/scenes/ContentViews/Delete/ContentViewDeleteWizard.js +7 -5
- data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionFinish.js +29 -21
- data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +15 -8
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +3 -3
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js +4 -4
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +3 -1
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +4 -4
- data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +34 -8
- data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +33 -29
- data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +130 -79
- data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +17 -3
- data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +2 -1
- data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositoryTable.js +2 -1
- data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +6 -1
- data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +41 -21
- data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +38 -20
- data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +2 -0
- data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +8 -1
- data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +9 -1
- data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +2 -1
- data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/CVRpmMatchContentModal.js +1 -0
- data/webpack/scenes/ContentViews/Details/Filters/Rules/ContainerTag/AddEditContainerTagRuleModal.js +27 -12
- data/webpack/scenes/ContentViews/Details/Filters/Rules/Package/AddEditPackageRuleModal.js +39 -17
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +27 -10
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +46 -23
- data/webpack/scenes/ContentViews/Details/Histories/ContentViewHistories.js +3 -2
- data/webpack/scenes/ContentViews/Details/Promote/ContentViewVersionPromote.js +5 -2
- data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +161 -108
- data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +7 -7
- data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewRepoAdd.fixture.json +1 -0
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/ActionSummary.js +58 -0
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/BulkDeleteContextWrapper.js +45 -0
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/BulkDeleteHelpers.js +30 -0
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/BulkDeleteModal.js +56 -0
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ConfirmBulkDelete.js +126 -0
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/FinishBulkDelete.js +61 -0
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReassignActivationKeys.js +196 -0
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReassignHosts.js +220 -0
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReviewEnvironments.js +104 -0
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/BulkDeleteModal.test.js +122 -0
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/BulkDeleteVersions.fixtures.json +600 -0
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/contentView.fixtures.json +1504 -0
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/contentViewVersion.fixtures.json +936 -0
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/environmentPaths.fixtures.json +261 -0
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/hosts.fixtures.json +163 -0
- data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/bulkDeleteSteps.js +79 -0
- data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +192 -167
- data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveCVVersionWizard.js +2 -5
- data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionDeleteFinish.js +38 -53
- data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionRemoveReview.js +1 -1
- data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +6 -12
- data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedActivationKeys.js +1 -0
- data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedHosts.js +1 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +1 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.js +8 -20
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsHeader.js +23 -13
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsTable.js +3 -0
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.fixtures.json +4 -4
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +0 -3
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetailsEmpty.test.js +4 -4
- data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +12 -14
- data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetails.fixtures.json +1 -0
- data/webpack/scenes/ContentViews/Publish/CVPublishFinish.js +96 -117
- data/webpack/scenes/ContentViews/Publish/PublishContentViewWizard.js +13 -19
- data/webpack/scenes/ContentViews/Publish/__tests__/publishContentView.test.js +9 -20
- data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +165 -148
- data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +2 -0
- data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +4 -4
- data/webpack/scenes/ContentViews/components/ContentViewIcon.js +14 -3
- data/webpack/scenes/ContentViews/components/ContentViewsCounter.js +1 -1
- data/webpack/scenes/ContentViews/components/EnvironmentLabels.js +4 -3
- data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +9 -5
- data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.scss +6 -1
- data/webpack/scenes/ContentViews/components/TaskPresenter/TaskPresenter.js +40 -35
- data/webpack/scenes/ContentViews/expansions/DetailsExpansion.js +2 -2
- data/webpack/scenes/ContentViews/expansions/RelatedCompositeContentViewsModal.js +1 -1
- data/webpack/scenes/ContentViews/expansions/RelatedContentViewComponentsModal.js +4 -4
- data/webpack/scenes/ContentViews/expansions/__tests__/contentViewComponentsModal.test.js +1 -1
- data/webpack/scenes/ContentViews/helpers.js +3 -0
- data/webpack/scenes/Hosts/ChangeContentSource/helpers.js +5 -0
- data/webpack/scenes/RedHatRepositories/RedHatRepositoriesPage.js +3 -3
- data/webpack/scenes/RedHatRepositories/components/EnabledRepository/EnabledRepository.js +2 -1
- data/webpack/scenes/RedHatRepositories/components/EnabledRepository/__tests__/EnabledRepository.test.js +2 -0
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnConfigurationConstants.js +3 -3
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnTypeForm.js +2 -0
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/{AirGappedTypeForm.js → ExportSyncForm.js} +7 -6
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/{UpstreamServerTypeForm.js → NetworkSyncForm.js} +15 -7
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/{AirGappedTypeForm.test.js → ExportSyncForm.test.js} +4 -4
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/{UpstreamServerTypeForm.test.js → NetworkSyncForm.test.js} +8 -8
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/index.js +11 -11
- data/webpack/scenes/Subscriptions/SubscriptionConstants.js +1 -0
- data/webpack/scenes/Subscriptions/SubscriptionsPage.js +8 -7
- data/webpack/scenes/Tasks/TaskActions.js +6 -0
- data/webpack/scenes/Tasks/TaskSelectors.js +11 -0
- data/webpack/scenes/Tasks/helpers.js +33 -5
- data/webpack/utils/helpers.js +2 -0
- metadata +158 -40
- data/app/models/setting/content.rb +0 -201
- data/webpack/components/Table/__test__/useBulkSelect.test.js +0 -99
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard.js +0 -96
- data/webpack/scenes/ContentViews/Details/DetailsContainer.js +0 -36
@@ -243,12 +243,16 @@ module Katello
|
|
243
243
|
api.content_distribution_trees_api.list(options)
|
244
244
|
end
|
245
245
|
|
246
|
-
def add_filter_content(source_repo_ids, filters, filter_list_map)
|
246
|
+
def add_filter_content(source_repo_ids, filters, filter_list_map, additional_included_errata)
|
247
247
|
filters.each do |filter|
|
248
248
|
if filter.inclusion
|
249
249
|
source_repo_ids.each do |repo_id|
|
250
250
|
filter_list_map[:whitelist_ids] += filter.content_unit_pulp_ids(::Katello::Repository.find(repo_id))
|
251
251
|
end
|
252
|
+
elsif filter.class == ContentViewErratumFilter
|
253
|
+
source_repo_ids.each do |repo_id|
|
254
|
+
filter_list_map[:blacklist_ids] += filter.content_unit_pulp_ids(::Katello::Repository.find(repo_id), additional_included_errata)
|
255
|
+
end
|
252
256
|
else
|
253
257
|
source_repo_ids.each do |repo_id|
|
254
258
|
filter_list_map[:blacklist_ids] += filter.content_unit_pulp_ids(::Katello::Repository.find(repo_id))
|
@@ -297,6 +301,7 @@ module Katello
|
|
297
301
|
filter_list_map
|
298
302
|
end
|
299
303
|
|
304
|
+
# rubocop:disable Metrics/MethodLength
|
300
305
|
def copy_content_from_mapping(repo_id_map, options = {})
|
301
306
|
repo_id_map.each do |source_repo_ids, dest_repo_map|
|
302
307
|
filters = [ContentViewErratumFilter, ContentViewPackageGroupFilter, ContentViewPackageFilter].collect do |filter_class|
|
@@ -305,8 +310,20 @@ module Katello
|
|
305
310
|
modular_filters = ContentViewModuleStreamFilter.where(:id => dest_repo_map[:filter_ids])
|
306
311
|
filters.flatten!.compact!
|
307
312
|
|
313
|
+
errata_filters = ContentViewErratumFilter.where(:id => dest_repo_map[:filter_ids])
|
314
|
+
|
315
|
+
# Only filter out RPMs & modules via an erratum filter if they're not included in other allowed errata.
|
316
|
+
# Begin this by calculating all the errata that should be copied.
|
317
|
+
# If there are exclude filters, send the errata to the relevant methods to ensure their contents aren't excluded.
|
318
|
+
additional_included_errata = []
|
319
|
+
all_excluded_errata = []
|
320
|
+
unless errata_filters.blacklist.empty?
|
321
|
+
all_included_errata, all_excluded_errata = filtered_errata(errata_filters, source_repo_ids)
|
322
|
+
additional_included_errata = all_included_errata - all_excluded_errata
|
323
|
+
end
|
324
|
+
|
308
325
|
filter_list_map = { whitelist_ids: [], blacklist_ids: [] }
|
309
|
-
filter_list_map = add_filter_content(source_repo_ids, filters, filter_list_map)
|
326
|
+
filter_list_map = add_filter_content(source_repo_ids, filters, filter_list_map, additional_included_errata)
|
310
327
|
filter_list_map = add_un_modular_rpms(source_repo_ids, filters, filter_list_map)
|
311
328
|
filter_list_map = add_modular_content(source_repo_ids, filters, modular_filters, filter_list_map)
|
312
329
|
|
@@ -320,7 +337,7 @@ module Katello
|
|
320
337
|
|
321
338
|
if content_unit_hrefs.any?
|
322
339
|
source_repo_ids.each do |source_repo_id|
|
323
|
-
content_unit_hrefs += additional_content_hrefs(::Katello::Repository.find(source_repo_id), content_unit_hrefs)
|
340
|
+
content_unit_hrefs += additional_content_hrefs(::Katello::Repository.find(source_repo_id), content_unit_hrefs, all_excluded_errata)
|
324
341
|
end
|
325
342
|
end
|
326
343
|
|
@@ -331,29 +348,68 @@ module Katello
|
|
331
348
|
|
332
349
|
multi_copy_units(repo_id_map, dependency_solving)
|
333
350
|
end
|
351
|
+
# rubocop:enable Metrics/MethodLength
|
352
|
+
|
353
|
+
# Calculate errata that should be included and excluded.
|
354
|
+
# https://projects.theforeman.org/issues/34437
|
355
|
+
def filtered_errata(errata_filters, source_repository_ids)
|
356
|
+
if errata_filters.whitelist.empty?
|
357
|
+
all_included_errata = ::Katello::Erratum.joins("inner join katello_repository_errata on katello_errata.id = katello_repository_errata.erratum_id").
|
358
|
+
joins("inner join katello_repositories on katello_repositories.id = katello_repository_errata.repository_id").
|
359
|
+
where("katello_repositories.id in (?)", source_repository_ids)
|
360
|
+
else
|
361
|
+
all_included_errata = errata_filters.whitelist.collect do |filter|
|
362
|
+
::Katello::Erratum.joins("inner join katello_repository_errata on katello_errata.id = katello_repository_errata.erratum_id").
|
363
|
+
where(filter.generate_clauses(nil)).where("katello_repository_errata.repository_id in (?)", source_repository_ids)
|
364
|
+
end
|
365
|
+
all_included_errata.flatten!
|
366
|
+
end
|
367
|
+
all_excluded_errata = errata_filters.blacklist.collect do |filter|
|
368
|
+
::Katello::Erratum.joins("inner join katello_repository_errata on katello_errata.id = katello_repository_errata.erratum_id").
|
369
|
+
where(filter.generate_clauses(nil)).where("katello_repository_errata.repository_id in (?)", source_repository_ids)
|
370
|
+
end
|
371
|
+
all_excluded_errata.flatten!
|
372
|
+
return all_included_errata, all_excluded_errata
|
373
|
+
end
|
334
374
|
|
335
|
-
|
336
|
-
|
375
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity
|
376
|
+
def copy_content_for_source(source_repository, options = {})
|
377
|
+
package_filters = [ContentViewPackageGroupFilter, ContentViewPackageFilter].collect do |filter_class|
|
337
378
|
filter_class.where(:id => options[:filter_ids])
|
338
379
|
end
|
380
|
+
package_filters.flatten!.compact!
|
381
|
+
|
382
|
+
errata_filters = ContentViewErratumFilter.where(:id => options[:filter_ids])
|
339
383
|
|
340
|
-
filters.flatten!.compact!
|
341
384
|
whitelist_ids = []
|
342
385
|
blacklist_ids = []
|
343
|
-
|
386
|
+
|
387
|
+
# Only filter out RPMs & modules via an erratum filter if they're not included in other allowed errata.
|
388
|
+
# Begin this by calculating all the errata that should be copied.
|
389
|
+
# If there are exclude filters, send the errata to the relevant methods to ensure their contents aren't excluded.
|
390
|
+
additional_included_errata = []
|
391
|
+
all_excluded_errata = []
|
392
|
+
unless errata_filters.blacklist.empty?
|
393
|
+
all_included_errata, all_excluded_errata = filtered_errata(errata_filters, [source_repository.id])
|
394
|
+
additional_included_errata = all_included_errata - all_excluded_errata
|
395
|
+
end
|
396
|
+
|
397
|
+
(errata_filters + package_filters).each do |filter|
|
344
398
|
if filter.inclusion
|
345
399
|
whitelist_ids += filter.content_unit_pulp_ids(source_repository)
|
400
|
+
elsif filter.class == ContentViewErratumFilter
|
401
|
+
blacklist_ids += filter.content_unit_pulp_ids(source_repository, additional_included_errata)
|
346
402
|
else
|
347
403
|
blacklist_ids += filter.content_unit_pulp_ids(source_repository)
|
348
404
|
end
|
349
405
|
end
|
350
406
|
|
351
|
-
whitelist_ids = source_repository.rpms.where(:modular => false).pluck(:pulp_id).sort if (whitelist_ids.empty? &&
|
407
|
+
whitelist_ids = source_repository.rpms.where(:modular => false).pluck(:pulp_id).sort if (whitelist_ids.empty? && (errata_filters + package_filters).select { |filter| filter.inclusion }.empty?)
|
352
408
|
|
353
409
|
modular_filters = ContentViewModuleStreamFilter.where(:id => options[:filter_ids])
|
354
410
|
inclusion_modular_filters = modular_filters.select { |filter| filter.inclusion }
|
355
411
|
exclusion_modular_filters = modular_filters - inclusion_modular_filters
|
356
|
-
if inclusion_modular_filters.empty? &&
|
412
|
+
if inclusion_modular_filters.empty? && errata_filters.whitelist.empty?
|
357
413
|
whitelist_ids += source_repository.rpms.where(:modular => true).pluck(:pulp_id).sort
|
358
414
|
whitelist_ids += source_repository.module_streams.pluck(:pulp_id).sort
|
359
415
|
end
|
@@ -362,10 +418,11 @@ module Katello
|
|
362
418
|
content_unit_hrefs = whitelist_ids - blacklist_ids
|
363
419
|
content_unit_hrefs += source_repository.srpms.pluck(:pulp_id)
|
364
420
|
if content_unit_hrefs.any?
|
365
|
-
content_unit_hrefs += additional_content_hrefs(source_repository, content_unit_hrefs)
|
421
|
+
content_unit_hrefs += additional_content_hrefs(source_repository, content_unit_hrefs, all_excluded_errata)
|
366
422
|
end
|
367
423
|
copy_units(source_repository, content_unit_hrefs.uniq, options[:remove_all])
|
368
424
|
end
|
425
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength, Metrics/CyclomaticComplexity
|
369
426
|
|
370
427
|
def modular_packages(source_repository, filters)
|
371
428
|
list_ids = []
|
@@ -375,13 +432,14 @@ module Katello
|
|
375
432
|
list_ids
|
376
433
|
end
|
377
434
|
|
378
|
-
def additional_content_hrefs(source_repository, content_unit_hrefs)
|
435
|
+
def additional_content_hrefs(source_repository, content_unit_hrefs, all_excluded_errata)
|
379
436
|
repo_service = source_repository.backend_service(SmartProxy.pulp_primary)
|
380
437
|
options = { :repository_version => source_repository.version_href }
|
381
438
|
|
382
439
|
errata_to_include = filter_errata_by_pulp_href(source_repository.errata, content_unit_hrefs,
|
383
440
|
source_repository.rpms.pluck(:filename) +
|
384
|
-
source_repository.srpms.pluck(:filename))
|
441
|
+
source_repository.srpms.pluck(:filename)) -
|
442
|
+
all_excluded_errata
|
385
443
|
content_unit_hrefs += errata_to_include.collect do |erratum|
|
386
444
|
erratum.repository_errata.where(repository_id: source_repository.id).pluck(:erratum_pulp3_href)
|
387
445
|
end
|
@@ -4,6 +4,7 @@ module Katello
|
|
4
4
|
module Pulp3
|
5
5
|
class Repository
|
6
6
|
include Katello::Util::HttpProxy
|
7
|
+
include Katello::Pulp3::ServiceCommon
|
7
8
|
attr_accessor :repo
|
8
9
|
attr_accessor :smart_proxy
|
9
10
|
delegate :root, to: :repo
|
@@ -49,13 +50,6 @@ module Katello
|
|
49
50
|
@api ||= self.class.api(smart_proxy, repo.content_type)
|
50
51
|
end
|
51
52
|
|
52
|
-
def ignore_404_exception(*)
|
53
|
-
yield
|
54
|
-
rescue api.api_exception_class => e
|
55
|
-
raise e unless e.code == 404
|
56
|
-
nil
|
57
|
-
end
|
58
|
-
|
59
53
|
def published?
|
60
54
|
!repo.publication_href.nil?
|
61
55
|
end
|
@@ -74,56 +68,8 @@ module Katello
|
|
74
68
|
end
|
75
69
|
|
76
70
|
def create_remote
|
77
|
-
|
78
|
-
|
79
|
-
else
|
80
|
-
remote_file_data = api.remote_class.new(remote_options)
|
81
|
-
end
|
82
|
-
reformat_api_exception do
|
83
|
-
if remote_options[:url]&.start_with?('uln')
|
84
|
-
response = api.remotes_uln_api.create(remote_file_data)
|
85
|
-
else
|
86
|
-
response = api.remotes_api.create(remote_file_data)
|
87
|
-
end
|
88
|
-
repo.update!(:remote_href => response.pulp_href)
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
# When updating a repository, we need to update the remote, but this is
|
93
|
-
# an async task. If some validation occurs, we won't know about it until
|
94
|
-
# the task runs. Errors during a repository update task are very difficult to
|
95
|
-
# handle once the task is in its run phase, so this creates a test remote
|
96
|
-
# with a random name in order to validate the remote's configuration
|
97
|
-
def create_test_remote
|
98
|
-
test_remote_options = remote_options
|
99
|
-
test_remote_options[:name] = test_remote_name
|
100
|
-
if remote_options[:url]&.start_with?('uln')
|
101
|
-
remote_file_data = api.class.remote_uln_class.new(test_remote_options)
|
102
|
-
else
|
103
|
-
remote_file_data = api.remote_class.new(test_remote_options)
|
104
|
-
end
|
105
|
-
|
106
|
-
reformat_api_exception do
|
107
|
-
if remote_options[:url]&.start_with?('uln')
|
108
|
-
response = api.remotes_uln_api.create(remote_file_data)
|
109
|
-
else
|
110
|
-
response = api.remotes_api.create(remote_file_data)
|
111
|
-
end
|
112
|
-
#delete is async, but if its not properly deleted, orphan cleanup will take care of it later
|
113
|
-
delete_remote(response.pulp_href)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
|
117
|
-
def test_remote_name
|
118
|
-
"test_remote_#{SecureRandom.uuid}"
|
119
|
-
end
|
120
|
-
|
121
|
-
def reformat_api_exception
|
122
|
-
yield
|
123
|
-
rescue api.client_module::ApiError => exception
|
124
|
-
body = JSON.parse(exception.response_body) rescue body
|
125
|
-
body = body.values.join(',') if body.respond_to?(:values)
|
126
|
-
raise ::Katello::Errors::Pulp3Error, body
|
71
|
+
response = super
|
72
|
+
repo.update!(:remote_href => response.pulp_href)
|
127
73
|
end
|
128
74
|
|
129
75
|
def update_remote
|
@@ -285,17 +231,11 @@ module Katello
|
|
285
231
|
return update_distribution
|
286
232
|
end
|
287
233
|
|
288
|
-
if
|
289
|
-
# If the saved distribution reference is wrong, delete it and use the existing distribution
|
290
|
-
if dist.pulp_href != dist_ref.href
|
291
|
-
dist_ref.destroy
|
292
|
-
save_distribution_references([dist.pulp_href])
|
293
|
-
end
|
234
|
+
if dist_ref
|
294
235
|
return update_distribution
|
295
236
|
end
|
296
237
|
|
297
238
|
# Since we got this far, we need to create a new distribution
|
298
|
-
# Note: the distribution reference can't be saved yet because distribution creation is async
|
299
239
|
begin
|
300
240
|
create_distribution(relative_path)
|
301
241
|
rescue api.client_module::ApiError => e
|
@@ -313,9 +253,6 @@ module Katello
|
|
313
253
|
|
314
254
|
def create_distribution(path)
|
315
255
|
distribution_data = api.distribution_class.new(secure_distribution_options(path))
|
316
|
-
unless ::Katello::RepositoryTypeManager.find(repo.content_type).pulp3_skip_publication
|
317
|
-
fail_missing_publication(distribution_data.publication)
|
318
|
-
end
|
319
256
|
api.distributions_api.create(distribution_data)
|
320
257
|
end
|
321
258
|
|
@@ -323,16 +260,9 @@ module Katello
|
|
323
260
|
api.distributions_api.list(args).results
|
324
261
|
end
|
325
262
|
|
326
|
-
def read_distribution(href = distribution_reference.href)
|
327
|
-
ignore_404_exception { api.distributions_api.read(href) }
|
328
|
-
end
|
329
|
-
|
330
263
|
def update_distribution
|
331
264
|
if distribution_reference
|
332
265
|
options = secure_distribution_options(relative_path).except(:name)
|
333
|
-
unless ::Katello::RepositoryTypeManager.find(repo.content_type).pulp3_skip_publication
|
334
|
-
fail_missing_publication(options[:publication])
|
335
|
-
end
|
336
266
|
distribution_reference.update(:content_guard_href => options[:content_guard])
|
337
267
|
api.distributions_api.partial_update(distribution_reference.href, options)
|
338
268
|
end
|
@@ -391,12 +321,6 @@ module Katello
|
|
391
321
|
hrefs.each do |href|
|
392
322
|
pulp3_distribution_data = api.get_distribution(href)
|
393
323
|
path, content_guard_href = pulp3_distribution_data&.base_path, pulp3_distribution_data&.content_guard
|
394
|
-
if distribution_reference
|
395
|
-
found_distribution = read_distribution(distribution_reference.href)
|
396
|
-
unless found_distribution
|
397
|
-
distribution_reference.destroy
|
398
|
-
end
|
399
|
-
end
|
400
324
|
unless distribution_reference
|
401
325
|
# Ensure that duplicates won't be created in the case of a race condition
|
402
326
|
DistributionReference.where(path: path, href: href, repository_id: repo.id, content_guard_href: content_guard_href).first_or_create!
|
@@ -436,10 +360,8 @@ module Katello
|
|
436
360
|
}
|
437
361
|
remote_options[:url] = root.url unless root.url.blank?
|
438
362
|
remote_options[:download_concurrency] = root.download_concurrency unless root.download_concurrency.blank?
|
439
|
-
|
440
|
-
|
441
|
-
password: root.upstream_password)
|
442
|
-
end
|
363
|
+
remote_options.merge!(username: root&.upstream_username,
|
364
|
+
password: root&.upstream_password)
|
443
365
|
remote_options.merge!(ssl_remote_options)
|
444
366
|
end
|
445
367
|
|
@@ -479,7 +401,7 @@ module Katello
|
|
479
401
|
client_key: root.product.key,
|
480
402
|
ca_cert: Katello::Repository.feed_ca_cert(root.url)
|
481
403
|
}
|
482
|
-
elsif root.redhat? && root.cdn_configuration.
|
404
|
+
elsif root.redhat? && root.cdn_configuration.network_sync?
|
483
405
|
{
|
484
406
|
client_cert: root.cdn_configuration.ssl_cert,
|
485
407
|
client_key: root.cdn_configuration.ssl_key,
|
@@ -551,12 +473,6 @@ module Katello
|
|
551
473
|
return 0 if root.retain_package_versions_count.nil? || root.using_mirrored_content?
|
552
474
|
root.retain_package_versions_count.to_i
|
553
475
|
end
|
554
|
-
|
555
|
-
def fail_missing_publication(publication_href)
|
556
|
-
unless lookup_publication(publication_href)
|
557
|
-
fail _("The repository's publication is missing. Please run a 'complete sync' on %s." % repo.name)
|
558
|
-
end
|
559
|
-
end
|
560
476
|
end
|
561
477
|
end
|
562
478
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Katello
|
2
|
+
module Pulp3
|
3
|
+
module ServiceCommon
|
4
|
+
def create_remote
|
5
|
+
response = nil
|
6
|
+
if remote_options[:url]&.start_with?('uln')
|
7
|
+
remote_file_data = api.class.remote_uln_class.new(remote_options)
|
8
|
+
else
|
9
|
+
remote_file_data = api.remote_class.new(remote_options)
|
10
|
+
end
|
11
|
+
reformat_api_exception do
|
12
|
+
if remote_options[:url]&.start_with?('uln')
|
13
|
+
response = api.remotes_uln_api.create(remote_file_data)
|
14
|
+
else
|
15
|
+
response = api.remotes_api.create(remote_file_data)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
response
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_remote_name
|
22
|
+
"test_remote_#{SecureRandom.uuid}"
|
23
|
+
end
|
24
|
+
|
25
|
+
# When updating a repository, we need to update the remote, but this is
|
26
|
+
# an async task. If some validation occurs, we won't know about it until
|
27
|
+
# the task runs. Errors during a repository update task are very difficult to
|
28
|
+
# handle once the task is in its run phase, so this creates a test remote
|
29
|
+
# with a random name in order to validate the remote's configuration
|
30
|
+
def create_test_remote
|
31
|
+
test_remote_options = remote_options
|
32
|
+
test_remote_options[:name] = test_remote_name
|
33
|
+
if remote_options[:url]&.start_with?('uln')
|
34
|
+
remote_file_data = api.class.remote_uln_class.new(test_remote_options)
|
35
|
+
else
|
36
|
+
remote_file_data = api.remote_class.new(test_remote_options)
|
37
|
+
end
|
38
|
+
|
39
|
+
reformat_api_exception do
|
40
|
+
if remote_options[:url]&.start_with?('uln')
|
41
|
+
response = api.remotes_uln_api.create(remote_file_data)
|
42
|
+
else
|
43
|
+
response = api.remotes_api.create(remote_file_data)
|
44
|
+
end
|
45
|
+
#delete is async, but if its not properly deleted, orphan cleanup will take care of it later
|
46
|
+
delete_remote(response.pulp_href)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def ignore_404_exception(*)
|
51
|
+
yield
|
52
|
+
rescue api.api_exception_class => e
|
53
|
+
raise e unless e.code == 404
|
54
|
+
nil
|
55
|
+
end
|
56
|
+
|
57
|
+
def reformat_api_exception
|
58
|
+
yield
|
59
|
+
rescue api.client_module::ApiError => exception
|
60
|
+
body = JSON.parse(exception.response_body) rescue body
|
61
|
+
body = body.values.join(',') if body.respond_to?(:values)
|
62
|
+
raise ::Katello::Errors::Pulp3Error, body
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -76,12 +76,15 @@ module Katello
|
|
76
76
|
def delete_orphan_remotes
|
77
77
|
tasks = []
|
78
78
|
repo_names = Katello::Repository.pluck(:pulp_id)
|
79
|
+
acs_remotes = Katello::SmartProxyAlternateContentSource.pluck(:remote_href)
|
79
80
|
pulp3_enabled_repo_types.each do |repo_type|
|
80
81
|
api = repo_type.pulp3_api(smart_proxy)
|
81
82
|
remotes = api.remotes_list
|
82
83
|
|
83
84
|
remotes.each do |remote|
|
84
|
-
|
85
|
+
if !repo_names.include?(remote.name) && !acs_remotes.include?(remote.pulp_href)
|
86
|
+
tasks << api.delete_remote(remote.pulp_href)
|
87
|
+
end
|
85
88
|
end
|
86
89
|
end
|
87
90
|
tasks
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Katello
|
2
|
+
module UINotifications
|
3
|
+
module ContentView
|
4
|
+
class DelelteLatestVersionFailure < ::UINotifications::Base
|
5
|
+
private
|
6
|
+
|
7
|
+
def create
|
8
|
+
Notification.create!(
|
9
|
+
subject: subject,
|
10
|
+
initiator: initiator,
|
11
|
+
audience: ::Notification::AUDIENCE_ADMIN,
|
12
|
+
notification_blueprint: blueprint
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
def blueprint
|
17
|
+
@blueprint ||= NotificationBlueprint.find_by(name: 'content_view_auto_publish_error')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,23 +1,23 @@
|
|
1
1
|
<%#
|
2
2
|
kind: job_template
|
3
|
-
name: Install Errata - Katello
|
3
|
+
name: Install Errata - Katello Script Default
|
4
4
|
job_category: Katello
|
5
5
|
description_format: 'Install errata %{errata}'
|
6
6
|
feature: katello_errata_install
|
7
|
-
provider_type:
|
7
|
+
provider_type: script
|
8
8
|
template_inputs:
|
9
9
|
- name: errata
|
10
10
|
description: A comma-separated list of errata to install
|
11
11
|
input_type: user
|
12
12
|
required: true
|
13
13
|
foreign_input_sets:
|
14
|
-
- template: Package Action -
|
14
|
+
- template: Package Action - Script Default
|
15
15
|
exclude: action,package
|
16
16
|
%>
|
17
17
|
<% if @host.operatingsystem.family == 'Suse' -%>
|
18
18
|
<% advisories = input(:errata).split(',').join(' ') %>
|
19
|
-
<%= render_template('Package Action -
|
19
|
+
<%= render_template('Package Action - Script Default', :action => 'install -n -t patch', :package => advisories) %>
|
20
20
|
<% else %>
|
21
21
|
<% advisories = input(:errata).split(',').map { |e| "--advisory=#{e}" }.join(' ') %>
|
22
|
-
<%= render_template('Package Action -
|
22
|
+
<%= render_template('Package Action - Script Default', :action => 'update-minimal', :package => advisories) %>
|
23
23
|
<% end %>
|
@@ -1,26 +1,27 @@
|
|
1
1
|
<%#
|
2
2
|
kind: job_template
|
3
|
-
name: Install errata by search query - Katello
|
3
|
+
name: Install errata by search query - Katello Script Default
|
4
4
|
job_category: Katello
|
5
5
|
description_format: 'Install errata %{Errata search query}'
|
6
6
|
feature: katello_errata_install_by_search
|
7
|
-
provider_type:
|
7
|
+
provider_type: script
|
8
8
|
template_inputs:
|
9
9
|
- name: Errata search query
|
10
10
|
description: Filter criteria for errata to be installed.
|
11
11
|
input_type: user
|
12
12
|
required: false
|
13
13
|
foreign_input_sets:
|
14
|
-
- template: Package Action -
|
14
|
+
- template: Package Action - Script Default
|
15
15
|
exclude: action,package
|
16
16
|
%>
|
17
17
|
|
18
18
|
<% if @host.operatingsystem.family == 'Suse' -%>
|
19
19
|
<% advisories = @host.advisory_ids(search: input("Errata search query")).join(' ') %>
|
20
|
-
<%= render_template('Package Action -
|
20
|
+
<%= render_template('Package Action - Script Default', :action => 'install -n -t patch', :package => advisories) %>
|
21
21
|
<% else %>
|
22
22
|
<% advisory_ids = @host.advisory_ids(search: input("Errata search query")) %>
|
23
|
+
<% raise "No errata matching given search query" if !input("Errata search query").blank? && advisory_ids.empty? %>
|
23
24
|
|
24
25
|
<% advisories = advisory_ids.map { |e| "--advisory=#{e}" }.join(' ') %>
|
25
|
-
<%= render_template('Package Action -
|
26
|
-
<% end %>
|
26
|
+
<%= render_template('Package Action - Script Default', :action => 'update-minimal', :package => advisories) %>
|
27
|
+
<% end %>
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<%#
|
2
2
|
kind: job_template
|
3
|
-
name: Install Group - Katello
|
3
|
+
name: Install Group - Katello Script Default
|
4
4
|
job_category: Katello
|
5
5
|
description_format: 'Install package group(s) %{package}'
|
6
6
|
feature: katello_group_install
|
7
|
-
provider_type:
|
7
|
+
provider_type: script
|
8
8
|
foreign_input_sets:
|
9
|
-
- template: Package Action -
|
9
|
+
- template: Package Action - Script Default
|
10
10
|
exclude: action
|
11
11
|
%>
|
12
12
|
|
13
|
-
<%= render_template('Package Action -
|
13
|
+
<%= render_template('Package Action - Script Default', :action => 'group install') %>
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<%#
|
2
2
|
kind: job_template
|
3
|
-
name: Install Package - Katello
|
3
|
+
name: Install Package - Katello Script Default
|
4
4
|
job_category: Katello
|
5
5
|
description_format: 'Install package(s) %{package}'
|
6
6
|
feature: katello_package_install
|
7
|
-
provider_type:
|
7
|
+
provider_type: script
|
8
8
|
foreign_input_sets:
|
9
|
-
- template: Package Action -
|
9
|
+
- template: Package Action - Script Default
|
10
10
|
exclude: action
|
11
11
|
%>
|
12
12
|
|
13
|
-
<%= render_template('Package Action -
|
13
|
+
<%= render_template('Package Action - Script Default', :action => 'install') %>
|
@@ -1,10 +1,10 @@
|
|
1
1
|
<%#
|
2
2
|
kind: job_template
|
3
|
-
name: Install packages by search query - Katello
|
3
|
+
name: Install packages by search query - Katello Script Default
|
4
4
|
job_category: Katello
|
5
5
|
description_format: 'Install package(s) %{Package search query}'
|
6
6
|
feature: katello_package_install_by_search
|
7
|
-
provider_type:
|
7
|
+
provider_type: script
|
8
8
|
template_inputs:
|
9
9
|
- name: Package search query
|
10
10
|
description: Filter criteria for packages to be installed. IMPORTANT- If left blank, the job will attempt to install all possible packages.
|
@@ -16,4 +16,4 @@ template_inputs:
|
|
16
16
|
search: input('Package search query')
|
17
17
|
) -%>
|
18
18
|
|
19
|
-
<%= render_template('Package Action -
|
19
|
+
<%= render_template('Package Action - Script Default', :action => 'install', :package => package_names.join(' ')) %>
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<%#
|
2
2
|
kind: job_template
|
3
|
-
name: Remove Group - Katello
|
3
|
+
name: Remove Group - Katello Script Default
|
4
4
|
job_category: Katello
|
5
5
|
description_format: 'Remove package group(s) %{package}'
|
6
6
|
feature: katello_group_remove
|
7
|
-
provider_type:
|
7
|
+
provider_type: script
|
8
8
|
foreign_input_sets:
|
9
|
-
- template: Package Action -
|
9
|
+
- template: Package Action - Script Default
|
10
10
|
exclude: action
|
11
11
|
%>
|
12
12
|
|
13
|
-
<%= render_template('Package Action -
|
13
|
+
<%= render_template('Package Action - Script Default', :action => 'group remove') %>
|
@@ -1,13 +1,13 @@
|
|
1
1
|
<%#
|
2
2
|
kind: job_template
|
3
|
-
name: Remove Package - Katello
|
3
|
+
name: Remove Package - Katello Script Default
|
4
4
|
job_category: Katello
|
5
5
|
description_format: 'Remove package(s) %{package}'
|
6
6
|
feature: katello_package_remove
|
7
|
-
provider_type:
|
7
|
+
provider_type: script
|
8
8
|
foreign_input_sets:
|
9
|
-
- template: Package Action -
|
9
|
+
- template: Package Action - Script Default
|
10
10
|
exclude: action
|
11
11
|
%>
|
12
12
|
|
13
|
-
<%= render_template('Package Action -
|
13
|
+
<%= render_template('Package Action - Script Default', :action => 'remove') %>
|
@@ -1,10 +1,10 @@
|
|
1
1
|
<%#
|
2
2
|
kind: job_template
|
3
|
-
name: Remove Packages by search query - Katello
|
3
|
+
name: Remove Packages by search query - Katello Script Default
|
4
4
|
job_category: Katello
|
5
5
|
description_format: 'Remove packages %{Packages search query}'
|
6
6
|
feature: katello_packages_remove_by_search
|
7
|
-
provider_type:
|
7
|
+
provider_type: script
|
8
8
|
template_inputs:
|
9
9
|
- name: Packages search query
|
10
10
|
description: Filter criteria for packages to be removed.
|
@@ -16,4 +16,4 @@ template_inputs:
|
|
16
16
|
search: input('Packages search query')
|
17
17
|
) -%>
|
18
18
|
|
19
|
-
<%= render_template('Package Action -
|
19
|
+
<%= render_template('Package Action - Script Default', :action => 'remove', :package => package_names.join(' ')) %>
|
@@ -1,10 +1,10 @@
|
|
1
1
|
<%#
|
2
2
|
kind: job_template
|
3
|
-
name: Resolve Traces - Katello
|
3
|
+
name: Resolve Traces - Katello Script Default
|
4
4
|
job_category: Katello
|
5
5
|
description_format: 'Resolve Traces'
|
6
6
|
feature: katello_host_tracer_resolve
|
7
|
-
provider_type:
|
7
|
+
provider_type: script
|
8
8
|
template_inputs:
|
9
9
|
- name: Traces search query
|
10
10
|
description: Search query to provide traces to resolve
|
@@ -1,10 +1,10 @@
|
|
1
1
|
<%#
|
2
2
|
kind: job_template
|
3
|
-
name: Restart Services - Katello
|
3
|
+
name: Restart Services - Katello Script Default
|
4
4
|
job_category: Katello
|
5
5
|
description_format: 'Restart Services'
|
6
6
|
feature: katello_service_restart
|
7
|
-
provider_type:
|
7
|
+
provider_type: script
|
8
8
|
template_inputs:
|
9
9
|
- name: helper
|
10
10
|
description: A comma separated list of commands to run to restart services
|
@@ -19,5 +19,5 @@ reboot = commands.delete('reboot')
|
|
19
19
|
<%= commands.join("\n") %>
|
20
20
|
katello-tracer-upload
|
21
21
|
<% if reboot -%>
|
22
|
-
<%= render_template('Power Action -
|
22
|
+
<%= render_template('Power Action - Script Default', action: 'restart') %>
|
23
23
|
<% end %>
|