katello 4.13.0 → 4.14.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/assets/javascripts/katello/hosts/host_and_hostgroup_edit.js +12 -8
- data/app/assets/javascripts/katello/locale/bn/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/bn_IN/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/ca/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/cs/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +275 -23
- data/app/assets/javascripts/katello/locale/de/katello.js +280 -28
- data/app/assets/javascripts/katello/locale/de_AT/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/de_DE/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/el/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/en/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/en_GB/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/en_US/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/es/katello.js +276 -24
- data/app/assets/javascripts/katello/locale/et_EE/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/fr/katello.js +283 -31
- data/app/assets/javascripts/katello/locale/gl/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/gu/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/he_IL/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/hi/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/id/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/it/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/ja/katello.js +283 -31
- data/app/assets/javascripts/katello/locale/ka/katello.js +280 -28
- data/app/assets/javascripts/katello/locale/kn/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/ko/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/ml_IN/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/mr/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/nl_NL/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/or/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/pa/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/pl/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/pl_PL/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/pt/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/pt_BR/katello.js +276 -24
- data/app/assets/javascripts/katello/locale/ro/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/ro_RO/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/ru/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/sl/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/sv_SE/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/ta/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/ta_IN/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/te/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/tr/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/vi/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/vi_VN/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/zh/katello.js +274 -22
- data/app/assets/javascripts/katello/locale/zh_CN/katello.js +283 -31
- data/app/assets/javascripts/katello/locale/zh_TW/katello.js +274 -22
- data/app/controllers/katello/api/registry/registry_proxies_controller.rb +118 -74
- data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +15 -2
- data/app/controllers/katello/api/v2/activation_keys_controller.rb +1 -1
- data/app/controllers/katello/api/v2/api_controller.rb +7 -0
- data/app/controllers/katello/api/v2/content_view_versions_controller.rb +4 -4
- data/app/controllers/katello/api/v2/debs_controller.rb +3 -2
- data/app/controllers/katello/api/v2/environments_controller.rb +2 -4
- data/app/controllers/katello/api/v2/host_contents_controller.rb +8 -3
- data/app/controllers/katello/api/v2/host_errata_controller.rb +4 -4
- data/app/controllers/katello/api/v2/host_packages_controller.rb +2 -2
- data/app/controllers/katello/api/v2/organizations_controller.rb +1 -1
- data/app/controllers/katello/api/v2/packages_controller.rb +13 -3
- data/app/controllers/katello/api/v2/repositories_bulk_actions_controller.rb +6 -2
- data/app/controllers/katello/api/v2/repositories_controller.rb +3 -4
- data/app/controllers/katello/api/v2/repository_sets_controller.rb +13 -14
- data/app/controllers/katello/api/v2/subscriptions_controller.rb +15 -9
- data/app/controllers/katello/api/v2/sync_controller.rb +2 -2
- data/app/controllers/katello/application_controller.rb +1 -1
- data/app/controllers/katello/concerns/api/v2/authorization.rb +3 -2
- data/app/controllers/katello/concerns/api/v2/hosts_controller_extensions.rb +28 -0
- data/app/controllers/katello/concerns/api/v2/registration_commands_controller_extensions.rb +1 -1
- data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +4 -3
- data/app/controllers/katello/concerns/hosts_controller_extensions.rb +2 -4
- data/app/controllers/katello/remote_execution_controller.rb +53 -58
- data/app/helpers/katello/hosts_and_hostgroups_helper.rb +19 -2
- data/app/helpers/katello/katello_urls_helper.rb +1 -1
- data/app/lib/actions/katello/alternate_content_source/alternate_content_source_common.rb +1 -1
- data/app/lib/actions/katello/alternate_content_source/update.rb +2 -1
- data/app/lib/actions/katello/capsule_content/verify_checksum.rb +1 -2
- data/app/lib/actions/katello/content_view/publish.rb +1 -0
- data/app/lib/actions/katello/content_view_version/create_repos.rb +1 -0
- data/app/lib/actions/katello/content_view_version/incremental_update.rb +3 -2
- data/app/lib/actions/katello/environment/{publish_repositories.rb → publish_container_repositories.rb} +10 -8
- data/app/lib/actions/katello/foreman/content_update.rb +4 -6
- data/app/lib/actions/katello/host/hypervisors_update.rb +6 -4
- data/app/lib/actions/katello/repository/create.rb +4 -4
- data/app/lib/actions/katello/repository/discover.rb +11 -4
- data/app/lib/actions/katello/repository/import_upload.rb +4 -6
- data/app/lib/actions/katello/repository/metadata_generate.rb +1 -0
- data/app/lib/actions/katello/repository/update.rb +3 -3
- data/app/lib/actions/katello/repository_set/enable_repository.rb +5 -6
- data/app/lib/actions/middleware/backend_services_check.rb +3 -2
- data/app/lib/actions/pulp3/abstract_async_task.rb +2 -4
- data/app/lib/actions/pulp3/capsule_content/verify_checksum.rb +1 -2
- data/app/lib/actions/pulp3/orchestration/repository/copy_all_units.rb +5 -1
- data/app/lib/actions/pulp3/orchestration/repository/delete.rb +5 -2
- data/app/lib/actions/pulp3/repository/create_publication.rb +4 -0
- data/app/lib/actions/pulp3/repository/save_version.rb +3 -5
- data/app/lib/katello/concerns/base_template_scope_extensions.rb +5 -9
- data/app/lib/katello/errors.rb +1 -0
- data/app/lib/katello/http_resource.rb +1 -0
- data/app/lib/katello/lazy_accessor.rb +1 -1
- data/app/lib/katello/repo_discovery.rb +4 -190
- data/app/lib/katello/resources/candlepin/candlepin_ping.rb +0 -5
- data/app/lib/katello/resources/candlepin/owner.rb +1 -1
- data/app/lib/katello/resources/candlepin/pool.rb +1 -2
- data/app/lib/katello/resources/candlepin/upstream_job.rb +1 -1
- data/app/lib/katello/resources/cdn.rb +3 -2
- data/app/lib/katello/resources/discovery/container.rb +127 -0
- data/app/lib/katello/resources/discovery/yum.rb +95 -0
- data/app/lib/katello/util/cdn_var_substitutor.rb +5 -3
- data/app/lib/katello/util/data.rb +3 -2
- data/app/lib/katello/util/errata.rb +4 -3
- data/app/lib/katello/util/package.rb +3 -3
- data/app/lib/katello/util/path_with_substitutions.rb +1 -1
- data/app/lib/katello/util/report_table.rb +3 -2
- data/app/lib/katello/util/url_matcher.rb +1 -1
- data/app/lib/katello/validators/alternate_content_source_path_validator.rb +4 -3
- data/app/lib/katello/validators/alternate_content_source_products_validator.rb +5 -7
- data/app/lib/katello/validators/container_image_name_validator.rb +1 -1
- data/app/lib/katello/validators/katello_name_format_validator.rb +2 -2
- data/app/lib/katello/validators/no_trailing_space_validator.rb +2 -2
- data/app/lib/katello/validators/prior_validator.rb +2 -2
- data/app/lib/katello/validators/product_unique_attribute_validator.rb +2 -4
- data/app/models/katello/activation_key.rb +4 -6
- data/app/models/katello/alternate_content_source.rb +1 -1
- data/app/models/katello/authorization/host_tracer.rb +1 -2
- data/app/models/katello/candlepin/repository_mapper.rb +2 -2
- data/app/models/katello/concerns/host_managed_extensions.rb +41 -10
- data/app/models/katello/concerns/hostgroup_extensions.rb +2 -4
- data/app/models/katello/concerns/location_extensions.rb +2 -4
- data/app/models/katello/concerns/operatingsystem_extensions.rb +84 -16
- data/app/models/katello/concerns/smart_proxy_extensions.rb +4 -4
- data/app/models/katello/concerns/subscription_facet_host_extensions.rb +2 -0
- data/app/models/katello/content_view.rb +5 -1
- data/app/models/katello/content_view_environment.rb +19 -4
- data/app/models/katello/content_view_environment_content_facet.rb +11 -0
- data/app/models/katello/erratum.rb +1 -1
- data/app/models/katello/event.rb +1 -1
- data/app/models/katello/glue/provider.rb +1 -2
- data/app/models/katello/hash_util.rb +1 -1
- data/app/models/katello/host/content_facet.rb +16 -3
- data/app/models/katello/host/subscription_facet.rb +27 -4
- data/app/models/katello/host_collection.rb +12 -8
- data/app/models/katello/pool.rb +5 -1
- data/app/models/katello/product.rb +7 -4
- data/app/models/katello/provider.rb +1 -2
- data/app/models/katello/repository.rb +18 -4
- data/app/models/katello/root_repository.rb +29 -0
- data/app/models/katello/rpm.rb +2 -2
- data/app/models/katello/subscription_facet_pool.rb +1 -1
- data/app/models/katello/sync_plan.rb +5 -4
- data/app/models/katello/task_status.rb +18 -18
- data/app/presenters/katello/product_host_count_presenter.rb +10 -0
- data/app/services/katello/candlepin/consumer.rb +11 -11
- data/app/services/katello/candlepin/message_handler.rb +3 -2
- data/app/services/katello/content_unit_indexer.rb +6 -0
- data/app/services/katello/pulp3/alternate_content_source.rb +1 -3
- data/app/services/katello/pulp3/api/core.rb +1 -1
- data/app/services/katello/pulp3/api/docker.rb +10 -0
- data/app/services/katello/pulp3/content_view_version/export.rb +1 -0
- data/app/services/katello/pulp3/content_view_version/import.rb +6 -4
- data/app/services/katello/pulp3/content_view_version/importable_products.rb +1 -3
- data/app/services/katello/pulp3/repository/apt.rb +4 -16
- data/app/services/katello/pulp3/repository/yum.rb +9 -5
- data/app/services/katello/pulp3/repository.rb +2 -2
- data/app/services/katello/pulp3/repository_mirror.rb +2 -9
- data/app/services/katello/pulp3/task.rb +4 -2
- data/app/services/katello/registration_manager.rb +13 -3
- data/app/services/katello/repository_type.rb +1 -1
- data/app/services/katello/smart_proxy_helper.rb +1 -0
- data/app/views/dashboard/_host_collection_widget.html.erb +5 -4
- data/app/views/foreman/job_templates/install_errata.erb +2 -0
- data/app/views/foreman/job_templates/install_errata_-_katello_ansible_default.erb +2 -0
- data/app/views/foreman/job_templates/install_errata_by_search_query.erb +2 -0
- data/app/views/foreman/job_templates/install_errata_by_search_query_-_katello_ansible_default.erb +3 -1
- data/app/views/foreman/job_templates/install_packages_by_search_query_-_katello_ansible_default.erb +1 -1
- data/app/views/foreman/job_templates/remove_packages_by_search_query_-_katello_ansible_default.erb +2 -2
- data/app/views/foreman/job_templates/resolve_traces.erb +5 -1
- data/app/views/foreman/job_templates/update_packages_by_search_query_-_katello_ansible_default.erb +1 -1
- data/app/views/foreman/job_templates/upload_profile.erb +2 -0
- data/app/views/foreman/smart_proxies/_reclaim_space.html.erb +7 -5
- data/app/views/katello/api/v2/content_facet/base.json.rabl +18 -2
- data/app/views/katello/api/v2/packages/thindex.json.rabl +6 -0
- data/app/views/katello/api/v2/repositories/show.json.rabl +8 -8
- data/app/views/katello/api/v2/repository_sets/show.json.rabl +1 -1
- data/app/views/katello/api/v2/subscription_facet/base.json.rabl +1 -1
- data/app/views/katello/api/v2/subscriptions/index.json.rabl +1 -0
- data/app/views/katello/api/v2/subscriptions/show.json.rabl +1 -0
- data/app/views/overrides/activation_keys/_host_environment_select.html.erb +14 -11
- data/app/views/overrides/activation_keys/_host_synced_content_select.html.erb +4 -4
- data/config/initializers/monkeys.rb +0 -1
- data/config/routes/api/v2.rb +3 -1
- data/config/routes.rb +1 -3
- data/db/migrate/20160114200145_add_mirror_on_sync_to_repositories.rb +1 -0
- data/db/migrate/20160131182301_add_download_policy_to_katello_repositories.rb +1 -0
- data/db/migrate/20210119162528_delete_puppet_and_ostree_repos.rb +3 -0
- data/db/migrate/20240522165308_add_priority_to_content_view_environment_content_facet.rb +5 -0
- data/db/migrate/20240621121212_katello_repository_debs_id_bigint.rb +6 -0
- data/db/migrate/20240729192228_add_convert2rhel_to_host_facets.rb +9 -0
- data/db/seeds.d/102-organizations.rb +5 -7
- data/db/seeds.d/150-module_job_templates.rb +7 -9
- data/db/seeds.d/75-job_templates.rb +9 -16
- data/engines/bastion_katello/README.md +3 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-errata.controller.js +3 -3
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/views/deb-info.html +6 -6
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/details/views/erratum-content-hosts.html +2 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +4 -4
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/views/package-info.html +6 -6
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +31 -27
- data/engines/bastion_katello/lib/bastion_katello/engine.rb +2 -2
- data/lib/katello/engine.rb +1 -8
- data/lib/katello/permission_creator.rb +3 -2
- data/lib/katello/plugin.rb +31 -27
- data/lib/katello/repository_types/docker.rb +1 -0
- data/lib/katello/repository_types/yum.rb +1 -0
- data/lib/katello/tasks/clean_old_file_repos.rake +2 -4
- data/lib/katello/tasks/reset.rake +3 -4
- data/lib/katello/version.rb +1 -1
- data/lib/katello.rb +0 -4
- data/lib/monkeys/ar_postgres_evr_t.rb +2 -0
- data/locale/action_names.rb +1 -1
- data/locale/bn/LC_MESSAGES/katello.mo +0 -0
- data/locale/bn/katello.po +274 -22
- data/locale/bn_IN/katello.po +274 -22
- data/locale/ca/katello.po +274 -22
- data/locale/cs/katello.po +274 -22
- data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
- data/locale/cs_CZ/katello.po +275 -23
- data/locale/de/LC_MESSAGES/katello.mo +0 -0
- data/locale/de/katello.po +280 -28
- data/locale/de_AT/katello.po +274 -22
- data/locale/de_DE/katello.po +274 -22
- data/locale/el/katello.po +274 -22
- data/locale/en/katello.po +274 -22
- data/locale/en_GB/katello.po +274 -22
- data/locale/en_US/katello.po +274 -22
- data/locale/es/LC_MESSAGES/katello.mo +0 -0
- data/locale/es/katello.po +276 -24
- data/locale/et_EE/katello.po +274 -22
- data/locale/fr/LC_MESSAGES/katello.mo +0 -0
- data/locale/fr/katello.po +283 -31
- data/locale/gl/katello.po +274 -22
- data/locale/gu/katello.po +274 -22
- data/locale/he_IL/katello.po +274 -22
- data/locale/hi/katello.po +274 -22
- data/locale/id/katello.po +274 -22
- data/locale/it/LC_MESSAGES/katello.mo +0 -0
- data/locale/it/katello.po +274 -22
- data/locale/ja/LC_MESSAGES/katello.mo +0 -0
- data/locale/ja/katello.po +283 -31
- data/locale/ka/LC_MESSAGES/katello.mo +0 -0
- data/locale/ka/katello.po +280 -28
- data/locale/katello.pot +1001 -527
- data/locale/kn/katello.po +274 -22
- data/locale/ko/LC_MESSAGES/katello.mo +0 -0
- data/locale/ko/katello.po +274 -22
- data/locale/ml_IN/katello.po +274 -22
- data/locale/mr/katello.po +274 -22
- data/locale/nl_NL/katello.po +274 -22
- data/locale/or/katello.po +274 -22
- data/locale/pa/katello.po +274 -22
- data/locale/pl/katello.po +274 -22
- data/locale/pl_PL/katello.po +274 -22
- data/locale/pt/katello.po +274 -22
- data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
- data/locale/pt_BR/katello.po +276 -24
- data/locale/ro/katello.po +274 -22
- data/locale/ro_RO/katello.po +274 -22
- data/locale/ru/LC_MESSAGES/katello.mo +0 -0
- data/locale/ru/katello.po +274 -22
- data/locale/sl/katello.po +274 -22
- data/locale/sv_SE/katello.po +274 -22
- data/locale/ta/LC_MESSAGES/katello.mo +0 -0
- data/locale/ta/katello.po +274 -22
- data/locale/ta_IN/katello.po +274 -22
- data/locale/te/katello.po +274 -22
- data/locale/tr/katello.po +274 -22
- data/locale/vi/katello.po +274 -22
- data/locale/vi_VN/katello.po +274 -22
- data/locale/zh/katello.po +274 -22
- data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
- data/locale/zh_CN/katello.po +283 -31
- data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
- data/locale/zh_TW/katello.po +274 -22
- data/webpack/ForemanColumnExtensions/index.js +44 -1
- data/webpack/components/Table/TableWrapper.js +6 -0
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.js +24 -3
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ContentViewDetailsCard.js +124 -56
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/HostContentViewActions.js +2 -3
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/contentViewDetailsCard.test.js +44 -10
- data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +75 -31
- data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionConstants.js +1 -0
- data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionHooks.js +1 -1
- data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +22 -7
- data/webpack/components/extensions/Hosts/ActionsBar/ActionsBar.scss +14 -0
- data/webpack/components/extensions/Hosts/ActionsBar/index.js +82 -23
- data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCVModal/index.js +5 -2
- data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/02_BulkErrataTable.js +171 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/04_Review.js +160 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/04_ReviewFooter.js +99 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/BulkErrataWizard.js +157 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/index.js +24 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/02_BulkPackagesTable.js +157 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/04_Review.js +168 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/04_ReviewFooter.js +141 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/BulkPackagesWizard.js +252 -0
- data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/index.js +24 -0
- data/webpack/components/extensions/Hosts/BulkActions/HostReview.js +176 -0
- data/webpack/components/extensions/Hosts/TableRowActions/index.js +17 -0
- data/webpack/global_index.js +11 -3
- data/webpack/redux/actions/RedHatRepositories/repositorySetRepositories.js +5 -6
- data/webpack/redux/reducers/RedHatRepositories/__tests__/repositorySetRepositories.test.js +1 -1
- data/webpack/redux/reducers/RedHatRepositories/repositorySetRepositories.js +1 -1
- data/webpack/scenes/ContentViews/Copy/CopyContentViewModal.js +2 -1
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +2 -1
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js +2 -1
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +2 -1
- data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +2 -1
- data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +2 -2
- data/webpack/scenes/ContentViews/Publish/CVPublishForm.js +2 -1
- data/webpack/scenes/ContentViews/Publish/CVPublishReview.js +3 -2
- data/webpack/scenes/ContentViews/Publish/PublishContentViewWizard.js +2 -1
- data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +2 -1
- data/webpack/scenes/ContentViews/components/CVBreadCrumb.js +2 -1
- data/webpack/scenes/ContentViews/components/ContentViewSelect/ContentViewSelectOption.js +2 -2
- data/webpack/scenes/Subscriptions/Details/SubscriptionAttributes.js +1 -0
- data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetailInfo.test.js.snap +10 -0
- data/webpack/scenes/Subscriptions/SubscriptionConstants.js +6 -0
- data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsPage.test.js.snap +2 -0
- data/webpack/scenes/Subscriptions/__tests__/subscriptions.fixtures.js +14 -0
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTableHelpers.js +1 -0
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/SubscriptionsTableSchema.js +10 -0
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionsTable.fixtures.js +1 -0
- data/webpack/scenes/Subscriptions/components/SubscriptionsToolbar/__snapshots__/SubscriptionsToolbar.test.js.snap +10 -0
- data/webpack/scenes/Tasks/helpers.js +1 -1
- metadata +49 -29
- data/app/assets/javascripts/katello/containers/container.js +0 -304
- data/db/migrate/20240531193030_remove_sha1_repository_checksum_type.rb +0 -10
- data/lib/monkeys/anemone.rb +0 -33
- data/webpack/utils/useKatelloDocUrl.js +0 -18
@@ -11,8 +11,7 @@ module Katello
|
|
11
11
|
|
12
12
|
module Overrides
|
13
13
|
def refresh
|
14
|
-
|
15
|
-
errors
|
14
|
+
super
|
16
15
|
end
|
17
16
|
end
|
18
17
|
|
@@ -254,10 +253,11 @@ module Katello
|
|
254
253
|
end
|
255
254
|
|
256
255
|
def pulp3_ssl_configuration(config, connection_adapter = Faraday.default_adapter)
|
257
|
-
|
256
|
+
case connection_adapter
|
257
|
+
when :excon
|
258
258
|
config.ssl_client_cert = ::Cert::Certs.ssl_client_cert_filename
|
259
259
|
config.ssl_client_key = ::Cert::Certs.ssl_client_key_filename
|
260
|
-
|
260
|
+
when :net_http
|
261
261
|
config.ssl_client_cert = ::Cert::Certs.ssl_client_cert
|
262
262
|
config.ssl_client_key = ::Cert::Certs.ssl_client_key
|
263
263
|
else
|
@@ -28,6 +28,7 @@ module Katello
|
|
28
28
|
scoped_search :on => :registered_through, :relation => :subscription_facet, :complete_value => true, :only_explicit => true
|
29
29
|
scoped_search :on => :registered_at, :relation => :subscription_facet, :rename => :registered_at, :only_explicit => true
|
30
30
|
scoped_search :on => :uuid, :relation => :subscription_facet, :rename => :subscription_uuid, :only_explicit => true
|
31
|
+
scoped_search :on => :convert2rhel_through_foreman, :relation => :subscription_facet, :only_explicit => true
|
31
32
|
scoped_search :relation => :activation_keys, :on => :name, :rename => :activation_key, :complete_value => true, :ext_method => :find_by_activation_key
|
32
33
|
scoped_search :relation => :activation_keys, :on => :id, :rename => :activation_key_id, :complete_value => true, :ext_method => :find_by_activation_key_id,
|
33
34
|
:only_explicit => true, :validator => ScopedSearch::Validators::INTEGER
|
@@ -42,6 +43,7 @@ module Katello
|
|
42
43
|
end
|
43
44
|
|
44
45
|
def update_candlepin_associations(consumer_params = nil)
|
46
|
+
Rails.logger.debug "Updating Candlepin associations for host #{name}"
|
45
47
|
content_facet.cves_changed = false if content_facet
|
46
48
|
content_facet&.save!
|
47
49
|
|
@@ -712,6 +712,7 @@ module Katello
|
|
712
712
|
end
|
713
713
|
|
714
714
|
def check_remove_from_environment!(env)
|
715
|
+
check_orphaned_content_facets!(environments: [env])
|
715
716
|
errors = []
|
716
717
|
|
717
718
|
dependencies = { hosts: _("hosts"),
|
@@ -730,6 +731,7 @@ module Katello
|
|
730
731
|
end
|
731
732
|
|
732
733
|
def check_ready_to_destroy!
|
734
|
+
check_orphaned_content_facets!(environments: self.environments)
|
733
735
|
errors = []
|
734
736
|
|
735
737
|
dependencies = { environments: _("environments"),
|
@@ -862,7 +864,9 @@ module Katello
|
|
862
864
|
}
|
863
865
|
|
864
866
|
table = Audit.arel_table
|
865
|
-
repository_condition = table[:auditable_id].eq(id)
|
867
|
+
repository_condition = table[:auditable_id].eq(id)
|
868
|
+
.and(table[:auditable_type].eq('Katello::ContentView'))
|
869
|
+
.and(audited_changes_like.call("repository_ids"))
|
866
870
|
|
867
871
|
cv_repository_condition = table[:auditable_id].in(cv_repository_ids)
|
868
872
|
.and(table[:auditable_type].eq('Katello::Repository'))
|
@@ -24,12 +24,23 @@ module Katello
|
|
24
24
|
before_save :generate_info
|
25
25
|
|
26
26
|
scope :non_default, -> { joins(:content_view).where("katello_content_views.default" => false) }
|
27
|
+
scope :default, -> { joins(:content_view).where("katello_content_views.default" => true) }
|
27
28
|
alias :lifecycle_environment :environment
|
28
29
|
|
29
30
|
def self.for_content_facets(content_facets)
|
30
31
|
joins(:content_view_environment_content_facets, :content_facets).where("#{Katello::ContentViewEnvironmentContentFacet.table_name}.content_facet_id" => content_facets).uniq
|
31
32
|
end
|
32
33
|
|
34
|
+
def self.with_candlepin_name(cp_name, organization: Organization.current)
|
35
|
+
lce_name, cv_name = cp_name.split('/')
|
36
|
+
if cv_name.blank? && lce_name == 'Library'
|
37
|
+
return default.find_by(
|
38
|
+
environment: ::Katello::KTEnvironment.library.where(organization: organization)&.first
|
39
|
+
)
|
40
|
+
end
|
41
|
+
joins(:environment, :content_view).where("#{Katello::KTEnvironment.table_name}.label" => lce_name, "#{Katello::ContentView.table_name}.label" => cv_name).first
|
42
|
+
end
|
43
|
+
|
33
44
|
# retrieve the owning environment for this content view environment.
|
34
45
|
def owner
|
35
46
|
self.environment
|
@@ -47,10 +58,14 @@ module Katello
|
|
47
58
|
content_view.default? && environment.library?
|
48
59
|
end
|
49
60
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
61
|
+
def candlepin_name
|
62
|
+
return environment.label if default_environment?
|
63
|
+
"#{environment.label}/#{content_view.label}"
|
64
|
+
end
|
65
|
+
|
66
|
+
def priority(content_facet)
|
67
|
+
content_view_environment_content_facets.find_by(:content_facet_id => content_facet.id).try(:priority)
|
68
|
+
end
|
54
69
|
|
55
70
|
private
|
56
71
|
|
@@ -3,6 +3,8 @@ module Katello
|
|
3
3
|
belongs_to :content_view_environment, :class_name => "::Katello::ContentViewEnvironment", :inverse_of => :content_view_environment_content_facets
|
4
4
|
belongs_to :content_facet, :class_name => "::Katello::Host::ContentFacet", :inverse_of => :content_view_environment_content_facets
|
5
5
|
|
6
|
+
default_scope { order(:priority => :asc) }
|
7
|
+
|
6
8
|
validates :content_view_environment_id, presence: true
|
7
9
|
validates :content_facet_id, presence: true, unless: :new_record?
|
8
10
|
validate :ensure_valid_content_source, if: proc { Setting['validate_host_lce_content_source_coherence'] }
|
@@ -19,5 +21,14 @@ module Katello
|
|
19
21
|
errors.add(:base, error_msg)
|
20
22
|
end
|
21
23
|
end
|
24
|
+
|
25
|
+
def self.reprioritize_for_content_facet(content_facet, new_cves)
|
26
|
+
new_order = new_cves.map do |cve|
|
27
|
+
content_facet.content_view_environment_content_facets.find_by(:content_view_environment_id => cve.id)
|
28
|
+
end
|
29
|
+
new_order.compact.each_with_index do |cvecf, index|
|
30
|
+
cvecf.update_column(:priority, index)
|
31
|
+
end
|
32
|
+
end
|
22
33
|
end
|
23
34
|
end
|
@@ -67,7 +67,7 @@ module Katello
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def self.applicable_to_hosts(hosts)
|
70
|
-
#
|
70
|
+
# NOTE: ContentFacetErrata actually holds the "Applicable Errata" to that host
|
71
71
|
# It is not the errata "belonging" to the host. Its rather the errata that is "applicable"
|
72
72
|
# which is calculated elsewhere.
|
73
73
|
|
data/app/models/katello/event.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Katello
|
2
2
|
class Event < Katello::Model
|
3
3
|
validate :validate_event_type
|
4
|
-
#
|
4
|
+
# NOTE: Do not use active record call backs or dependent references on this class
|
5
5
|
# Direct deletes are made in EventQueue#clear_events (instead of destroys).
|
6
6
|
|
7
7
|
serialize :metadata, Hash
|
@@ -34,7 +34,7 @@ module Katello
|
|
34
34
|
API_URL = 'https://subscription.rhsm.redhat.com/subscription/consumers/'.freeze
|
35
35
|
def api_url(upstream = {})
|
36
36
|
# Default to Red Hat
|
37
|
-
upstream['apiUrl'] || API_URL
|
37
|
+
ENV['REDHAT_RHSM_API_URL'] || upstream['apiUrl'] || API_URL
|
38
38
|
end
|
39
39
|
|
40
40
|
def sync
|
@@ -65,7 +65,6 @@ module Katello
|
|
65
65
|
Rails.logger.error "Upstream identity certificate not available"
|
66
66
|
fail _("Upstream identity certificate not available")
|
67
67
|
end
|
68
|
-
|
69
68
|
params = {}
|
70
69
|
params[:capabilities] = Resources::Candlepin::CandlepinPing.ping['managerCapabilities'].inject([]) do |result, element|
|
71
70
|
result << {'name' => element}
|
@@ -16,7 +16,7 @@ module Katello
|
|
16
16
|
subhash = hash[params.first]
|
17
17
|
# If we don't have a subhash don't try and recurse down
|
18
18
|
if !subhash.nil? && !subhash.empty?
|
19
|
-
self.null_safe_get(subhash, default, params[1
|
19
|
+
self.null_safe_get(subhash, default, params[1..])
|
20
20
|
else
|
21
21
|
default
|
22
22
|
end
|
@@ -64,6 +64,7 @@ module Katello
|
|
64
64
|
end
|
65
65
|
|
66
66
|
def mark_cves_changed(_cve)
|
67
|
+
Rails.logger.debug("ContentFacet: Marking CVEs changed for host #{host&.to_label}")
|
67
68
|
self.cves_changed = true
|
68
69
|
end
|
69
70
|
|
@@ -99,6 +100,17 @@ module Katello
|
|
99
100
|
content_view_environments&.first&.lifecycle_environment
|
100
101
|
end
|
101
102
|
|
103
|
+
def content_view_environments=(new_cves)
|
104
|
+
if new_cves.length > 1 && !Setting['allow_multiple_content_views']
|
105
|
+
fail ::Katello::Errors::MultiEnvironmentNotSupportedError,
|
106
|
+
_("Assigning a host to multiple content view environments is not enabled.")
|
107
|
+
end
|
108
|
+
super(new_cves)
|
109
|
+
Katello::ContentViewEnvironmentContentFacet.reprioritize_for_content_facet(self, new_cves)
|
110
|
+
self.content_view_environments.reload unless self.new_record?
|
111
|
+
self.host&.update_candlepin_associations unless self.host&.new_record?
|
112
|
+
end
|
113
|
+
|
102
114
|
# rubocop:disable Metrics/CyclomaticComplexity
|
103
115
|
def assign_single_environment(
|
104
116
|
content_view_id: nil, lifecycle_environment_id: nil, environment_id: nil,
|
@@ -126,9 +138,10 @@ module Katello
|
|
126
138
|
end
|
127
139
|
|
128
140
|
def default_environment?
|
129
|
-
content_view_environments.
|
130
|
-
|
131
|
-
|
141
|
+
return if content_view_environments.blank?
|
142
|
+
# if default cve is first, this is equivalent to default being the only one.
|
143
|
+
# if default cve is not first, candlepin will prioritize CV repos over library repos in case of conflicts.
|
144
|
+
content_view_environments.first.default_environment?
|
132
145
|
end
|
133
146
|
|
134
147
|
def update_repositories_by_paths(paths)
|
@@ -162,10 +162,22 @@ module Katello
|
|
162
162
|
end
|
163
163
|
end
|
164
164
|
|
165
|
+
def candlepin_environments_cp_ids
|
166
|
+
candlepin_environments.map { |e| e[:id] }
|
167
|
+
end
|
168
|
+
|
165
169
|
def content_view_environments
|
166
170
|
self.host.content_facet.try(:content_view_environments)
|
167
171
|
end
|
168
172
|
|
173
|
+
def consumer_cve_order_from_candlepin
|
174
|
+
Katello::Resources::Candlepin::Consumer.get(uuid)['environments'].map { |e| e['id'] }
|
175
|
+
end
|
176
|
+
|
177
|
+
def cves_ordered_correctly?
|
178
|
+
consumer_cve_order_from_candlepin == candlepin_environments_cp_ids
|
179
|
+
end
|
180
|
+
|
169
181
|
def organization
|
170
182
|
self.host.organization
|
171
183
|
end
|
@@ -229,10 +241,8 @@ module Katello
|
|
229
241
|
setting_fact = Setting[:register_hostname_fact]
|
230
242
|
only_use_custom_fact = Setting[:register_hostname_fact_strict_match]
|
231
243
|
|
232
|
-
if !setting_fact.blank? && !facts[setting_fact].blank?
|
233
|
-
|
234
|
-
facts[setting_fact]
|
235
|
-
end
|
244
|
+
if !setting_fact.blank? && !facts[setting_fact].blank? && (only_use_custom_fact || ::Host.where(:name => setting_fact.downcase).any?)
|
245
|
+
facts[setting_fact]
|
236
246
|
end
|
237
247
|
end
|
238
248
|
|
@@ -287,6 +297,19 @@ module Katello
|
|
287
297
|
false
|
288
298
|
end
|
289
299
|
|
300
|
+
def self.populate_fields_from_facts(host, parser, _type, _source_proxy)
|
301
|
+
has_convert2rhel = parser.facts.key?('conversions.env.CONVERT2RHEL_THROUGH_FOREMAN')
|
302
|
+
return unless host.subscription_facet || has_convert2rhel
|
303
|
+
# Add in custom convert2rhel fact if system was converted using convert2rhel through Katello
|
304
|
+
# We want the value nil unless the custom fact is present otherwise we get a 0 in the database which if debugging
|
305
|
+
# might make you think it was converted2rhel but not with satellite, that is why I have the tenary below.
|
306
|
+
facet = host.subscription_facet || host.build_subscription_facet
|
307
|
+
facet.attributes = {
|
308
|
+
convert2rhel_through_foreman: has_convert2rhel ? ::Foreman::Cast.to_bool(parser.facts['conversions.env.CONVERT2RHEL_THROUGH_FOREMAN']) : nil
|
309
|
+
}.compact
|
310
|
+
facet.save unless facet.new_record?
|
311
|
+
end
|
312
|
+
|
290
313
|
private
|
291
314
|
|
292
315
|
def update_status(status_class, **args)
|
@@ -58,8 +58,12 @@ module Katello
|
|
58
58
|
consumer_ids
|
59
59
|
end
|
60
60
|
|
61
|
-
def errata(type = nil)
|
62
|
-
query =
|
61
|
+
def errata(type = nil, installable_only: false)
|
62
|
+
query = if installable_only
|
63
|
+
Katello::Erratum.installable_for_hosts(self.hosts)
|
64
|
+
else
|
65
|
+
Katello::Erratum.applicable_to_hosts(self.hosts)
|
66
|
+
end
|
63
67
|
type ? query.of_type(type) : query
|
64
68
|
end
|
65
69
|
|
@@ -95,16 +99,16 @@ module Katello
|
|
95
99
|
return host_collections_hash[:critical].to_a, host_collections_hash[:warning].to_a, host_collections_hash[:ok].to_a
|
96
100
|
end
|
97
101
|
|
98
|
-
def security_updates?
|
99
|
-
errata(Erratum::SECURITY).any?
|
102
|
+
def security_updates?(installable_only: false)
|
103
|
+
errata(Erratum::SECURITY, installable_only: installable_only).any?
|
100
104
|
end
|
101
105
|
|
102
|
-
def bugzilla_updates?
|
103
|
-
errata(Erratum::BUGZILLA).any?
|
106
|
+
def bugzilla_updates?(installable_only: false)
|
107
|
+
errata(Erratum::BUGZILLA, installable_only: installable_only).any?
|
104
108
|
end
|
105
109
|
|
106
|
-
def enhancement_updates?
|
107
|
-
errata(Erratum::ENHANCEMENT).any?
|
110
|
+
def enhancement_updates?(installable_only: false)
|
111
|
+
errata(Erratum::ENHANCEMENT, installable_only: installable_only).any?
|
108
112
|
end
|
109
113
|
|
110
114
|
def self.humanize_class_name(_name = nil)
|
data/app/models/katello/pool.rb
CHANGED
@@ -55,6 +55,10 @@ module Katello
|
|
55
55
|
|
56
56
|
validate :subscription_matches_organization
|
57
57
|
|
58
|
+
def product_host_count
|
59
|
+
Katello::Host::ContentFacet.joins(bound_repositories: { product: :pools }).where(pools: { id: id }).distinct.count
|
60
|
+
end
|
61
|
+
|
58
62
|
def subscription_matches_organization
|
59
63
|
return if errors[:subscription].any? || errors[:organization].any? # let other validations catch this
|
60
64
|
unless subscription&.organization_id == self.organization_id
|
@@ -147,7 +151,7 @@ module Katello
|
|
147
151
|
property :days_until_expiration, Integer, desc: 'Returns number of days until expiration'
|
148
152
|
end
|
149
153
|
class Jail < ::Safemode::Jail
|
150
|
-
allow :id, :name, :available, :quantity, :product_id, :contract_number, :type, :account_number, :start_date, :end_date, :organization, :consumed, :days_until_expiration
|
154
|
+
allow :id, :name, :available, :quantity, :product_id, :contract_number, :type, :account_number, :start_date, :end_date, :organization, :consumed, :days_until_expiration, :product_host_count
|
151
155
|
end
|
152
156
|
end
|
153
157
|
end
|
@@ -84,6 +84,10 @@ module Katello
|
|
84
84
|
|
85
85
|
before_create :assign_unique_label
|
86
86
|
|
87
|
+
def acs_compatible_repositories
|
88
|
+
repositories.has_url.not_uln.library
|
89
|
+
end
|
90
|
+
|
87
91
|
def orphaned?
|
88
92
|
self.pool_products.empty?
|
89
93
|
end
|
@@ -122,13 +126,12 @@ module Katello
|
|
122
126
|
options = {} if options.nil?
|
123
127
|
|
124
128
|
hash = super(options.merge(:except => [:cp_id, :id]))
|
125
|
-
hash
|
129
|
+
hash.merge(:multiplier => self.multiplier,
|
126
130
|
:attributes => self.attrs,
|
127
131
|
:id => self.cp_id,
|
128
132
|
:sync_plan_name => self.sync_plan ? self.sync_plan.name : nil,
|
129
133
|
:sync_state => self.sync_state,
|
130
134
|
:last_sync => self.last_sync)
|
131
|
-
hash
|
132
135
|
end
|
133
136
|
|
134
137
|
def redhat?
|
@@ -168,8 +171,8 @@ module Katello
|
|
168
171
|
self.label = Util::Model.labelize(self.name) if self.label.blank?
|
169
172
|
|
170
173
|
# if the object label is already being used in this org, append the id to make it unique
|
171
|
-
if Product.all_in_org(self.organization).where("#{Katello::Product.table_name}.label = ?", self.label).count > 0
|
172
|
-
self.label = self.label + "_" + self.cp_id
|
174
|
+
if Product.all_in_org(self.organization).where("#{Katello::Product.table_name}.label = ?", self.label).count > 0 && !self.cp_id.blank?
|
175
|
+
self.label = self.label + "_" + self.cp_id
|
173
176
|
end
|
174
177
|
end
|
175
178
|
|
@@ -84,9 +84,8 @@ module Katello
|
|
84
84
|
def serializable_hash(options = {})
|
85
85
|
options = {} if options.nil?
|
86
86
|
hash = super(options)
|
87
|
-
hash
|
87
|
+
hash.merge(:sync_state => self.sync_state,
|
88
88
|
:last_sync => self.last_sync)
|
89
|
-
hash
|
90
89
|
end
|
91
90
|
|
92
91
|
def manifest_task
|
@@ -32,6 +32,8 @@ module Katello
|
|
32
32
|
|
33
33
|
EXPORTABLE_TYPES = [YUM_TYPE, FILE_TYPE, ANSIBLE_COLLECTION_TYPE, DOCKER_TYPE, DEB_TYPE].freeze
|
34
34
|
|
35
|
+
ALLOWED_UPDATE_FIELDS = ['version_href', 'last_indexed'].freeze
|
36
|
+
|
35
37
|
define_model_callbacks :sync, :only => :after
|
36
38
|
|
37
39
|
belongs_to :root, :inverse_of => :repositories, :class_name => "Katello::RootRepository"
|
@@ -119,8 +121,10 @@ module Katello
|
|
119
121
|
|
120
122
|
before_validation :set_pulp_id
|
121
123
|
before_validation :set_container_repository_name, :unless => :skip_container_name?
|
124
|
+
before_update :prevent_updates, :unless => :allow_updates?
|
122
125
|
|
123
126
|
scope :has_url, -> { joins(:root).where.not("#{RootRepository.table_name}.url" => nil) }
|
127
|
+
scope :not_uln, -> { joins(:root).where("#{RootRepository.table_name}.url NOT LIKE 'uln%'") }
|
124
128
|
scope :on_demand, -> { joins(:root).where("#{RootRepository.table_name}.download_policy" => ::Katello::RootRepository::DOWNLOAD_ON_DEMAND) }
|
125
129
|
scope :immediate, -> { joins(:root).where("#{RootRepository.table_name}.download_policy" => ::Katello::RootRepository::DOWNLOAD_IMMEDIATE) }
|
126
130
|
scope :non_immediate, -> { joins(:root).where.not("#{RootRepository.table_name}.download_policy" => ::Katello::RootRepository::DOWNLOAD_IMMEDIATE) }
|
@@ -166,7 +170,7 @@ module Katello
|
|
166
170
|
scoped_search :on => :name, :relation => :product, :rename => :product_name
|
167
171
|
scoped_search :on => :id, :relation => :product, :rename => :product_id, :only_explicit => true
|
168
172
|
scoped_search :on => :label, :relation => :root, :complete_value => true, :only_explicit => true
|
169
|
-
scoped_search :on => :content_label, :ext_method => :search_by_content_label
|
173
|
+
scoped_search :on => :content_label, :ext_method => :search_by_content_label, :default_operator => :like
|
170
174
|
|
171
175
|
delegate :product, :redhat?, :custom?, :to => :root
|
172
176
|
delegate :yum?, :docker?, :deb?, :file?, :ostree?, :ansible_collection?, :generic?, :to => :root
|
@@ -179,7 +183,7 @@ module Katello
|
|
179
183
|
:deb_components, :deb_architectures, :ssl_ca_cert_id, :ssl_ca_cert, :ssl_client_cert, :ssl_client_cert_id,
|
180
184
|
:ssl_client_key_id, :os_versions, :ssl_client_key, :ignorable_content, :description, :include_tags, :exclude_tags,
|
181
185
|
:ansible_collection_requirements, :ansible_collection_auth_url, :ansible_collection_auth_token,
|
182
|
-
:http_proxy_policy, :http_proxy_id, :to => :root
|
186
|
+
:http_proxy_policy, :http_proxy_id, :prevent_updates, :to => :root
|
183
187
|
|
184
188
|
delegate :content_id, to: :root, allow_nil: true
|
185
189
|
delegate :repository_type, to: :root
|
@@ -345,9 +349,10 @@ module Katello
|
|
345
349
|
def content_counts
|
346
350
|
content_counts = {}
|
347
351
|
RepositoryTypeManager.defined_repository_types[content_type].content_types_to_index.each do |content_type|
|
348
|
-
|
352
|
+
case content_type&.model_class::CONTENT_TYPE
|
353
|
+
when DockerTag::CONTENT_TYPE
|
349
354
|
content_counts[DockerTag::CONTENT_TYPE] = docker_tags.count
|
350
|
-
|
355
|
+
when GenericContentUnit::CONTENT_TYPE
|
351
356
|
content_counts[content_type.content_type] = content_type&.model_class&.in_repositories(self)&.where(:content_type => content_type.content_type)&.count
|
352
357
|
else
|
353
358
|
content_counts[content_type.label] = content_type&.model_class&.in_repositories(self)&.count
|
@@ -791,6 +796,8 @@ module Katello
|
|
791
796
|
return true
|
792
797
|
elsif !self.custom? && self.redhat_deletable?(remove_from_content_view_versions)
|
793
798
|
return true
|
799
|
+
elsif Setting.find_by(name: 'delete_repo_across_cv')&.value
|
800
|
+
return true
|
794
801
|
else
|
795
802
|
errors.add(:base, _("Repository cannot be deleted since it has already been included in a published Content View. " \
|
796
803
|
"Please delete all Content View versions containing this repository before attempting to delete it "\
|
@@ -1007,6 +1014,7 @@ module Katello
|
|
1007
1014
|
repository_type.index_additional_data_proc&.call(self)
|
1008
1015
|
end
|
1009
1016
|
self.update!(last_indexed: DateTime.now)
|
1017
|
+
|
1010
1018
|
true
|
1011
1019
|
end
|
1012
1020
|
|
@@ -1048,6 +1056,12 @@ module Katello
|
|
1048
1056
|
DockerMetaTag.cleanup_tags
|
1049
1057
|
end
|
1050
1058
|
|
1059
|
+
def allow_updates?
|
1060
|
+
# allow the update if this repo is not in the default view
|
1061
|
+
return true unless in_default_view?
|
1062
|
+
root.allow_updates?(::Katello::Repository::ALLOWED_UPDATE_FIELDS)
|
1063
|
+
end
|
1064
|
+
|
1051
1065
|
apipie :class, desc: "A class representing #{model_name.human} object" do
|
1052
1066
|
name 'Repository'
|
1053
1067
|
refs 'Repository'
|
@@ -46,6 +46,8 @@ module Katello
|
|
46
46
|
MIRRORING_POLICY_COMPLETE = 'mirror_complete'.freeze
|
47
47
|
MIRRORING_POLICIES = [MIRRORING_POLICY_ADDITIVE, MIRRORING_POLICY_COMPLETE, MIRRORING_POLICY_CONTENT].freeze
|
48
48
|
|
49
|
+
ALLOWED_UPDATE_FIELDS = ['updated_at', 'content_id'].freeze
|
50
|
+
|
49
51
|
belongs_to :product, :inverse_of => :root_repositories, :class_name => "Katello::Product"
|
50
52
|
has_one :provider, :through => :product
|
51
53
|
|
@@ -60,6 +62,8 @@ module Katello
|
|
60
62
|
has_many :repository_references, :class_name => 'Katello::Pulp3::RepositoryReference',
|
61
63
|
:dependent => :destroy, :inverse_of => :root_repository
|
62
64
|
|
65
|
+
before_validation :remove_sha1_checksum_type, if: :sha1_checksum?
|
66
|
+
|
63
67
|
validates_lengths_from_database :except => [:label]
|
64
68
|
validates_with Validators::KatelloLabelFormatValidator, :attributes => :label
|
65
69
|
validates_with Validators::KatelloNameFormatValidator, :attributes => :name
|
@@ -113,6 +117,7 @@ module Katello
|
|
113
117
|
}
|
114
118
|
|
115
119
|
validates :container_push_name_format, inclusion: { in: ['label', 'id'].freeze, allow_nil: true}
|
120
|
+
before_update :prevent_updates, :unless => :allow_updates?
|
116
121
|
|
117
122
|
scope :subscribable, -> { where(content_type: RootRepository::SUBSCRIBABLE_TYPES) }
|
118
123
|
scope :skipable_metadata_check, -> { where(content_type: RootRepository::SKIPABLE_METADATA_TYPES) }
|
@@ -157,6 +162,14 @@ module Katello
|
|
157
162
|
joins(:product).where("#{Katello::Product.table_name}.organization_id" => org)
|
158
163
|
end
|
159
164
|
|
165
|
+
def sha1_checksum?
|
166
|
+
checksum_type == 'sha1'
|
167
|
+
end
|
168
|
+
|
169
|
+
def remove_sha1_checksum_type
|
170
|
+
self.checksum_type = nil
|
171
|
+
end
|
172
|
+
|
160
173
|
def ensure_content_attribute_restrictions
|
161
174
|
CONTENT_ATTRIBUTE_RESTRICTIONS.each do |attribute, value|
|
162
175
|
if self.send(attribute).present? && !value.include?(self.content_type)
|
@@ -445,6 +458,22 @@ module Katello
|
|
445
458
|
end
|
446
459
|
end
|
447
460
|
|
461
|
+
def allow_updates?(additional_allowed_fields = [])
|
462
|
+
# allow updates for non-container-push repos, repos not in default view, and
|
463
|
+
# repos with a library instance
|
464
|
+
return true unless is_container_push && library_instance.present?
|
465
|
+
|
466
|
+
# let updates that contain ONLY allowed strings through
|
467
|
+
allowed_fields = ::Katello::RootRepository::ALLOWED_UPDATE_FIELDS + additional_allowed_fields
|
468
|
+
return true if (changed - allowed_fields).empty?
|
469
|
+
|
470
|
+
false
|
471
|
+
end
|
472
|
+
|
473
|
+
def prevent_updates
|
474
|
+
fail _("Cannot update properties of a container push repository")
|
475
|
+
end
|
476
|
+
|
448
477
|
apipie :class, desc: 'A class representing Repository object' do
|
449
478
|
name 'Repository'
|
450
479
|
refs 'Repository'
|
data/app/models/katello/rpm.rb
CHANGED
@@ -53,7 +53,7 @@ module Katello
|
|
53
53
|
# https://github.com/wvanbergen/scoped_search/blob/master/lib/scoped_search/query_builder.rb
|
54
54
|
if ['LIKE', 'NOT LIKE'].include?(operator)
|
55
55
|
conditions = "#{self.table_name}.#{column} #{operator} ?"
|
56
|
-
parameter = (value !~
|
56
|
+
parameter = (value !~ /^%|\*/ && value !~ /%|\*$/) ? "%#{value}%" : value.tr_s('%*', '%')
|
57
57
|
return { :conditions => conditions, :parameter => [parameter] }
|
58
58
|
elsif ['IN', 'NOT IN'].include?(operator)
|
59
59
|
conditions = "#{self.table_name}.#{column} #{operator} (#{value.split(',').collect { '?' }.join(',')})"
|
@@ -124,7 +124,7 @@ module Katello
|
|
124
124
|
end
|
125
125
|
|
126
126
|
def self.scoped_search_evr_like(operator, value)
|
127
|
-
val = (value !~
|
127
|
+
val = (value !~ /^%|\*/ && value !~ /%|\*$/) ? "%#{value}%" : value.tr_s('%*', '%')
|
128
128
|
evr = Util::Package.parse_evr(val)
|
129
129
|
(e, v, r) = [evr[:epoch], evr[:version], evr[:release]]
|
130
130
|
conditions = []
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Katello
|
2
2
|
class SubscriptionFacetPool < Katello::Model
|
3
|
-
#
|
3
|
+
# NOTE: Do not use active record call backs or dependent references on this class
|
4
4
|
# Direct deletes are made in Pool#import_hosts (instead of destroys).
|
5
5
|
belongs_to :subscription_facet, :inverse_of => :subscription_facet_pools, :class_name => 'Katello::Host::SubscriptionFacet'
|
6
6
|
belongs_to :pool, :inverse_of => :subscription_facet_pools, :class_name => 'Katello::Pool'
|
@@ -148,13 +148,14 @@ module Katello
|
|
148
148
|
if interval.nil?
|
149
149
|
fail _("Interval cannot be nil")
|
150
150
|
end
|
151
|
-
|
151
|
+
case interval.downcase
|
152
|
+
when "hourly"
|
152
153
|
cron = min.to_s + " * * * *"
|
153
|
-
|
154
|
+
when "daily"
|
154
155
|
cron = min.to_s + " " + hour.to_s + " * * *"
|
155
|
-
|
156
|
+
when "weekly"
|
156
157
|
cron = min.to_s + " " + hour.to_s + " * * " + day.to_s
|
157
|
-
|
158
|
+
when CUSTOM_CRON
|
158
159
|
cron = cron_expression
|
159
160
|
else
|
160
161
|
fail _("Interval not set correctly")
|
@@ -154,18 +154,16 @@ module Katello
|
|
154
154
|
when :package
|
155
155
|
p = self.parameters[:packages]
|
156
156
|
first_package = p.first.is_a?(Hash) ? p.first[:name] : p.first
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
return _("all packages update")
|
168
|
-
end
|
157
|
+
if !p && p.length > 0 && (self.task_type == "package_update")
|
158
|
+
case self.overall_status
|
159
|
+
when "running"
|
160
|
+
return "updating"
|
161
|
+
when "waiting"
|
162
|
+
return "updating"
|
163
|
+
when "error"
|
164
|
+
return _("all packages update failed")
|
165
|
+
else
|
166
|
+
return _("all packages update")
|
169
167
|
end
|
170
168
|
end
|
171
169
|
|
@@ -229,14 +227,15 @@ module Katello
|
|
229
227
|
ret = []
|
230
228
|
task_type = self.task_type.to_s
|
231
229
|
|
232
|
-
|
230
|
+
case task_type
|
231
|
+
when /^package_group/
|
233
232
|
action = task_type.include?("remove") ? :removed : :installed
|
234
233
|
ret = packages_change_description(result[:details][:package_group], action)
|
235
|
-
|
234
|
+
when "package_install", "errata_install"
|
236
235
|
ret = packages_change_description(result[:details][:rpm], :installed)
|
237
|
-
|
236
|
+
when "package_update"
|
238
237
|
ret = packages_change_description(result[:details][:rpm], :updated)
|
239
|
-
|
238
|
+
when "package_remove"
|
240
239
|
ret = packages_change_description(result[:details][:rpm], :removed)
|
241
240
|
end
|
242
241
|
ret
|
@@ -246,13 +245,14 @@ module Katello
|
|
246
245
|
errors, stacktrace = self.result[:errors]
|
247
246
|
return "" unless errors
|
248
247
|
# Handle not very friendly Pulp message
|
249
|
-
|
248
|
+
case errors
|
249
|
+
when /^\(.*\)$/
|
250
250
|
if stacktrace.class == Array
|
251
251
|
stacktrace.last.split(":").first
|
252
252
|
else
|
253
253
|
stacktrace.split("(").first
|
254
254
|
end
|
255
|
-
|
255
|
+
when /^\[.*,.*\]$/m
|
256
256
|
result = errors.split(",").map do |error|
|
257
257
|
error.gsub(/^\W+|\W+$/, "")
|
258
258
|
end
|