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
@@ -0,0 +1,176 @@
|
|
1
|
+
import React, { useEffect } from 'react'; // Don't useContext here so this component is reusable
|
2
|
+
import PropTypes from 'prop-types';
|
3
|
+
import {
|
4
|
+
Alert,
|
5
|
+
ToolbarItem,
|
6
|
+
Text,
|
7
|
+
TextContent,
|
8
|
+
TextVariants,
|
9
|
+
} from '@patternfly/react-core';
|
10
|
+
import TableIndexPage from 'foremanReact/components/PF4/TableIndexPage/TableIndexPage';
|
11
|
+
import { HOSTS_API_PATH } from 'foremanReact/routes/Hosts/constants';
|
12
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
13
|
+
import SelectAllCheckbox from 'foremanReact/components/PF4/TableIndexPage/Table/SelectAllCheckbox';
|
14
|
+
import { RowSelectTd } from 'foremanReact/components/HostsIndex/RowSelectTd';
|
15
|
+
import { getPageStats } from 'foremanReact/components/PF4/TableIndexPage/Table/helpers';
|
16
|
+
|
17
|
+
const HostReview = ({
|
18
|
+
initialSelectedHosts,
|
19
|
+
hostsBulkSelect,
|
20
|
+
setShouldValidateStep,
|
21
|
+
}) => {
|
22
|
+
const apiOptions = { key: 'HOST_REVIEW' };
|
23
|
+
|
24
|
+
const {
|
25
|
+
hostsBulkSelect: {
|
26
|
+
selectPage,
|
27
|
+
selectAll,
|
28
|
+
selectNone,
|
29
|
+
selectOne,
|
30
|
+
isSelected,
|
31
|
+
selectedCount,
|
32
|
+
areAllRowsSelected,
|
33
|
+
areAllRowsOnPageSelected,
|
34
|
+
updateSearchQuery,
|
35
|
+
hasInteracted,
|
36
|
+
},
|
37
|
+
hostsMetadata: {
|
38
|
+
subtotal,
|
39
|
+
total,
|
40
|
+
page,
|
41
|
+
per_page: perPage,
|
42
|
+
},
|
43
|
+
hostsResponse: response,
|
44
|
+
} = hostsBulkSelect;
|
45
|
+
|
46
|
+
const { response: { results } = {} } = response;
|
47
|
+
|
48
|
+
useEffect(() => {
|
49
|
+
if (results?.length && hasInteracted) {
|
50
|
+
setShouldValidateStep(true);
|
51
|
+
}
|
52
|
+
}, [setShouldValidateStep, results?.length, hasInteracted]);
|
53
|
+
|
54
|
+
const pageStats = getPageStats({ total: subtotal, page, perPage });
|
55
|
+
const selectionToolbar = (
|
56
|
+
<ToolbarItem key="selectAll">
|
57
|
+
<SelectAllCheckbox
|
58
|
+
{...{
|
59
|
+
selectedCount,
|
60
|
+
pageRowCount: pageStats.pageRowCount,
|
61
|
+
areAllRowsSelected,
|
62
|
+
areAllRowsOnPageSelected,
|
63
|
+
selectAll,
|
64
|
+
selectNone,
|
65
|
+
selectPage,
|
66
|
+
}}
|
67
|
+
totalCount={total}
|
68
|
+
areAllRowsOnPageSelected={areAllRowsOnPageSelected()}
|
69
|
+
areAllRowsSelected={areAllRowsSelected()}
|
70
|
+
/>
|
71
|
+
</ToolbarItem>
|
72
|
+
);
|
73
|
+
|
74
|
+
const columns = {
|
75
|
+
name: {
|
76
|
+
title: __('Name'),
|
77
|
+
wrapper: ({ name, display_name: displayName }) => (
|
78
|
+
<a target="_blank" href={`hosts/${name}`} rel="noreferrer">{displayName}</a>
|
79
|
+
),
|
80
|
+
isSorted: true,
|
81
|
+
weight: 50,
|
82
|
+
},
|
83
|
+
os_title: {
|
84
|
+
title: __('OS'),
|
85
|
+
wrapper: hostDetails => hostDetails?.operatingsystem_name,
|
86
|
+
isSorted: true,
|
87
|
+
weight: 100,
|
88
|
+
},
|
89
|
+
};
|
90
|
+
|
91
|
+
// restrict search query to only selected hosts
|
92
|
+
const restrictedSearchQuery = (newSearch) => {
|
93
|
+
let newSearchQuery = initialSelectedHosts;
|
94
|
+
const trimmedSearch = newSearch?.trim() ?? '';
|
95
|
+
if (!!trimmedSearch && !trimmedSearch.includes(initialSelectedHosts)) {
|
96
|
+
newSearchQuery = `${initialSelectedHosts} and ${trimmedSearch}`;
|
97
|
+
}
|
98
|
+
return newSearchQuery;
|
99
|
+
};
|
100
|
+
|
101
|
+
return (
|
102
|
+
<>
|
103
|
+
<TextContent>
|
104
|
+
<Text ouiaId="mpw-step-3-header" component={TextVariants.h3}>
|
105
|
+
{__('Review hosts')}
|
106
|
+
</Text>
|
107
|
+
<Text ouiaId="mpw-step-3-content" component={TextVariants.p}>
|
108
|
+
{__('Review and optionally exclude hosts from your selection.')}
|
109
|
+
</Text>
|
110
|
+
</TextContent>
|
111
|
+
{selectedCount === 0 && hasInteracted && (
|
112
|
+
<Alert
|
113
|
+
ouiaId="no-hosts-alert"
|
114
|
+
variant="danger"
|
115
|
+
isInline
|
116
|
+
title={__('You must select at least one host.')}
|
117
|
+
style={{ marginBottom: '1rem' }}
|
118
|
+
/>
|
119
|
+
)}
|
120
|
+
<TableIndexPage
|
121
|
+
columns={columns}
|
122
|
+
showCheckboxes
|
123
|
+
apiUrl={HOSTS_API_PATH}
|
124
|
+
apiOptions={apiOptions}
|
125
|
+
headerText={__('Hosts')}
|
126
|
+
header={null}
|
127
|
+
controller="hosts"
|
128
|
+
creatable={false}
|
129
|
+
replacementResponse={response}
|
130
|
+
selectionToolbar={selectionToolbar}
|
131
|
+
updateSearchQuery={updateSearchQuery}
|
132
|
+
restrictedSearchQuery={restrictedSearchQuery}
|
133
|
+
rowSelectTd={RowSelectTd}
|
134
|
+
selectOne={selectOne}
|
135
|
+
isSelected={isSelected}
|
136
|
+
updateParamsByUrl={false}
|
137
|
+
bookmarksPosition="right"
|
138
|
+
/>
|
139
|
+
</>
|
140
|
+
);
|
141
|
+
};
|
142
|
+
|
143
|
+
HostReview.propTypes = {
|
144
|
+
initialSelectedHosts: PropTypes.string,
|
145
|
+
hostsBulkSelect: PropTypes.shape({
|
146
|
+
hostsBulkSelect: PropTypes.shape({
|
147
|
+
selectPage: PropTypes.func,
|
148
|
+
selectAll: PropTypes.func,
|
149
|
+
selectNone: PropTypes.func,
|
150
|
+
selectOne: PropTypes.func,
|
151
|
+
exclusionSet: PropTypes.object, // eslint-disable-line react/forbid-prop-types
|
152
|
+
isSelected: PropTypes.func,
|
153
|
+
selectedCount: PropTypes.number,
|
154
|
+
areAllRowsSelected: PropTypes.func,
|
155
|
+
areAllRowsOnPageSelected: PropTypes.func,
|
156
|
+
updateSearchQuery: PropTypes.func,
|
157
|
+
inclusionSet: PropTypes.object, // eslint-disable-line react/forbid-prop-types
|
158
|
+
hasInteracted: PropTypes.bool,
|
159
|
+
}),
|
160
|
+
hostsMetadata: PropTypes.shape({
|
161
|
+
total: PropTypes.number,
|
162
|
+
page: PropTypes.number,
|
163
|
+
per_page: PropTypes.number,
|
164
|
+
subtotal: PropTypes.number,
|
165
|
+
}),
|
166
|
+
hostsResponse: PropTypes.shape([]),
|
167
|
+
}),
|
168
|
+
setShouldValidateStep: PropTypes.func.isRequired,
|
169
|
+
};
|
170
|
+
|
171
|
+
HostReview.defaultProps = {
|
172
|
+
hostsBulkSelect: {},
|
173
|
+
initialSelectedHosts: '',
|
174
|
+
};
|
175
|
+
|
176
|
+
export default HostReview;
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
2
|
+
import { foremanUrl } from 'foremanReact/common/helpers';
|
3
|
+
|
4
|
+
const hostTableRowActions = (hostDetails) => {
|
5
|
+
const hostIsRegistered = hostDetails?.subscription_facet_attributes?.uuid;
|
6
|
+
return [
|
7
|
+
{
|
8
|
+
title: __('Change content view environments'),
|
9
|
+
onClick: () => {
|
10
|
+
window.location.href = foremanUrl(`hosts/${hostDetails.display_name}#/Overview?content_view_assignment=true`);
|
11
|
+
},
|
12
|
+
isDisabled: !hostIsRegistered,
|
13
|
+
},
|
14
|
+
];
|
15
|
+
};
|
16
|
+
|
17
|
+
export default hostTableRowActions;
|
data/webpack/global_index.js
CHANGED
@@ -4,8 +4,10 @@ import { registerReducer } from 'foremanReact/common/MountingService';
|
|
4
4
|
import { translate as __ } from 'foremanReact/common/I18n';
|
5
5
|
import { registerColumns } from 'foremanReact/components/HostsIndex/Columns/core';
|
6
6
|
import componentRegistry from 'foremanReact/components/componentRegistry';
|
7
|
+
import { registerGetActions } from 'foremanReact/components/HostsIndex/TableRowActions/core';
|
7
8
|
|
8
9
|
import hostsIndexColumnExtensions from './ForemanColumnExtensions/index';
|
10
|
+
import hostTableRowActions from './components/extensions/Hosts/TableRowActions';
|
9
11
|
import SystemStatuses from './components/extensions/about';
|
10
12
|
import {
|
11
13
|
RegistrationCommands,
|
@@ -33,8 +35,8 @@ import HostsIndexActionsBar from './components/extensions/Hosts/ActionsBar';
|
|
33
35
|
import RecentCommunicationCardExtensions from './components/extensions/HostDetails/DetailsTabCards/RecentCommunicationCardExtensions';
|
34
36
|
import SystemPurposeCard from './components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard';
|
35
37
|
import BulkChangeHostCVModal from './components/extensions/Hosts/BulkActions/BulkChangeHostCVModal/index.js';
|
36
|
-
|
37
|
-
|
38
|
+
import BulkPackagesWizardModal from './components/extensions/Hosts/BulkActions/BulkPackagesWizard/index.js';
|
39
|
+
import BulkErrataWizardModal from './components/extensions/Hosts/BulkActions/BulkErrataWizard/index.js';
|
38
40
|
import ActivationKeysSearch from './components/ActivationKeysSearch';
|
39
41
|
|
40
42
|
registerReducer('katelloExtends', extendReducer);
|
@@ -90,9 +92,15 @@ addGlobalFill('host-tab-details-cards', 'HW properties', <HwPropertiesCard key="
|
|
90
92
|
|
91
93
|
// Hosts Index page extensions
|
92
94
|
addGlobalFill('_all-hosts-modals', 'BulkChangeHostCVModal', <BulkChangeHostCVModal key="bulk-change-host-cv-modal" />, 100);
|
95
|
+
addGlobalFill('_all-hosts-modals', 'BulkPackagesWizardModal', <BulkPackagesWizardModal key="bulk-packages-wizard-modal" />, 200);
|
96
|
+
addGlobalFill('_all-hosts-modals', 'BulkErrataWizardModal', <BulkErrataWizardModal key="bulk-errata-wizard-modal" />, 200);
|
93
97
|
|
94
98
|
registerColumns(hostsIndexColumnExtensions);
|
95
|
-
|
99
|
+
registerGetActions({
|
100
|
+
pluginName: 'katello',
|
101
|
+
getActionsFunc: hostTableRowActions,
|
102
|
+
tableName: 'hosts',
|
103
|
+
});
|
96
104
|
|
97
105
|
componentRegistry.register({
|
98
106
|
name: 'ActivationKeysSearch',
|
@@ -68,13 +68,12 @@ const loadRepositorySetRepos = (contentId, productId) => async (dispatch) => {
|
|
68
68
|
productId,
|
69
69
|
results: data.results,
|
70
70
|
});
|
71
|
-
} catch (
|
72
|
-
|
73
|
-
|
74
|
-
type: REPOSITORY_SET_REPOSITORIES_FAILURE,
|
75
|
-
contentId,
|
71
|
+
} catch (error) {
|
72
|
+
return dispatch(apiError(
|
73
|
+
REPOSITORY_SET_REPOSITORIES_FAILURE,
|
76
74
|
error,
|
77
|
-
|
75
|
+
{ contentId },
|
76
|
+
));
|
78
77
|
}
|
79
78
|
};
|
80
79
|
|
@@ -39,7 +39,7 @@ describe('repositorySetRepositories reducer', () => {
|
|
39
39
|
it('should have error on REPOSITORY_SET_REPOSITORIES_FAILURE', () => {
|
40
40
|
expect(reducer(initialState, {
|
41
41
|
type: types.REPOSITORY_SET_REPOSITORIES_FAILURE,
|
42
|
-
contentId,
|
42
|
+
payload: { contentId },
|
43
43
|
error: 'Unable to process request.',
|
44
44
|
})).toEqual(errorState);
|
45
45
|
});
|
@@ -4,6 +4,7 @@ import { Modal, ModalVariant } from '@patternfly/react-core';
|
|
4
4
|
import { FormattedMessage } from 'react-intl';
|
5
5
|
import { translate as __ } from 'foremanReact/common/I18n';
|
6
6
|
import CopyContentViewForm from './CopyContentViewForm';
|
7
|
+
import { truncate } from '../../../utils/helpers';
|
7
8
|
|
8
9
|
const CopyContentViewModal = ({
|
9
10
|
cvId, cvName, show, setIsOpen,
|
@@ -11,7 +12,7 @@ const CopyContentViewModal = ({
|
|
11
12
|
const description = (
|
12
13
|
<FormattedMessage
|
13
14
|
id="copy-cv-description"
|
14
|
-
values={{ cv: <b>{cvName}</b> }}
|
15
|
+
values={{ cv: <b>{truncate(cvName)}</b> }}
|
15
16
|
defaultMessage={__('This will create a copy of {cv}, including details, repositories, and filters. Generated data such as history, tasks and versions will not be copied.')}
|
16
17
|
/>
|
17
18
|
);
|
data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js
CHANGED
@@ -14,6 +14,7 @@ import {
|
|
14
14
|
selectCVDetailStatus,
|
15
15
|
} from '../../Details/ContentViewDetailSelectors';
|
16
16
|
import getContentViewDetails, { addComponent } from '../ContentViewDetailActions';
|
17
|
+
import { truncate } from '../../../../utils/helpers';
|
17
18
|
|
18
19
|
const ComponentContentViewAddModal = ({
|
19
20
|
cvId, componentCvId, componentId, latest, componentVersionId, show, setIsOpen,
|
@@ -84,7 +85,7 @@ const ComponentContentViewAddModal = ({
|
|
84
85
|
variant={ModalVariant.small}
|
85
86
|
isOpen={show}
|
86
87
|
ouiaId="add-update-cv-modal"
|
87
|
-
description={__(`Select available version of ${cvName} to use`)}
|
88
|
+
description={__(`Select available version of ${truncate(cvName)} to use`)}
|
88
89
|
onClose={() => {
|
89
90
|
setIsOpen(false);
|
90
91
|
}}
|
data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js
CHANGED
@@ -9,6 +9,7 @@ import { OutlinedQuestionCircleIcon } from '@patternfly/react-icons';
|
|
9
9
|
import { useDispatch } from 'react-redux';
|
10
10
|
import { translate as __ } from 'foremanReact/common/I18n';
|
11
11
|
import getContentViewDetails, { addComponent } from '../ContentViewDetailActions';
|
12
|
+
import { truncate } from '../../../../utils/helpers';
|
12
13
|
|
13
14
|
const ComponentContentViewBulkAddModal = ({ cvId, rowsToAdd, onClose }) => {
|
14
15
|
const dispatch = useDispatch();
|
@@ -62,7 +63,7 @@ const ComponentContentViewBulkAddModal = ({ cvId, rowsToAdd, onClose }) => {
|
|
62
63
|
aria-label="componentCvName"
|
63
64
|
key={componentCvName}
|
64
65
|
>
|
65
|
-
<CardTitle aria-label={componentCvName}>{componentCvName}</CardTitle>
|
66
|
+
<CardTitle aria-label={componentCvName}>{truncate(componentCvName)}</CardTitle>
|
66
67
|
<CardBody>
|
67
68
|
<FormGroup label={__('Version')} isRequired fieldId="version">
|
68
69
|
<Select
|
@@ -36,6 +36,7 @@ import ComponentContentViewAddModal from './ComponentContentViewAddModal';
|
|
36
36
|
import ComponentContentViewBulkAddModal from './ComponentContentViewBulkAddModal';
|
37
37
|
import { hasPermission } from '../../helpers';
|
38
38
|
import InactiveText from '../../components/InactiveText';
|
39
|
+
import { truncate } from '../../../../utils/helpers';
|
39
40
|
|
40
41
|
|
41
42
|
const ContentViewComponents = ({ cvId, details }) => {
|
@@ -144,7 +145,7 @@ const ContentViewComponents = ({ cvId, details }) => {
|
|
144
145
|
|
145
146
|
const cells = [
|
146
147
|
{ title: <Bullseye><ContentViewIcon composite={false} /></Bullseye> },
|
147
|
-
{ title: <a href={urlBuilder('content_views', '') + id}>{name}</a> },
|
148
|
+
{ title: <a href={urlBuilder('content_views', '') + id}>{truncate(name)}</a> },
|
148
149
|
{
|
149
150
|
title: (
|
150
151
|
<Split>
|
@@ -39,6 +39,7 @@ import ContentViewDeleteWizard from '../Delete/ContentViewDeleteWizard';
|
|
39
39
|
import EmptyStateMessage from '../../../components/Table/EmptyStateMessage';
|
40
40
|
import { CONTENT_VIEW_NEEDS_PUBLISH_RESET, cvVersionTaskPollingKey } from '../ContentViewsConstants';
|
41
41
|
import { clearPollTaskData, stopPollingTask } from '../../Tasks/TaskActions';
|
42
|
+
import { truncate } from '../../../utils/helpers';
|
42
43
|
|
43
44
|
export default () => {
|
44
45
|
const { id } = useParams();
|
@@ -161,7 +162,7 @@ export default () => {
|
|
161
162
|
<FlexItem>
|
162
163
|
<TextContent>
|
163
164
|
<Text ouiaId="cv-details-header-name" component={TextVariants.h1}>
|
164
|
-
<ContentViewIcon count={name} composite={composite} />
|
165
|
+
<ContentViewIcon count={truncate(name)} composite={composite} />
|
165
166
|
</Text>
|
166
167
|
</TextContent>
|
167
168
|
</FlexItem>
|
@@ -4,6 +4,7 @@ import React, {
|
|
4
4
|
useState,
|
5
5
|
} from 'react';
|
6
6
|
import { FormattedMessage } from 'react-intl';
|
7
|
+
import { getDocsURL } from 'foremanReact/common/helpers';
|
7
8
|
import { translate as __ } from 'foremanReact/common/I18n';
|
8
9
|
import { urlBuilder } from 'foremanReact/common/urlHelpers';
|
9
10
|
import { STATUS } from 'foremanReact/constants';
|
@@ -40,7 +41,6 @@ import {
|
|
40
41
|
Td,
|
41
42
|
} from '@patternfly/react-table';
|
42
43
|
import { useSelectionSet } from 'foremanReact/components/PF4/TableIndexPage/Table/TableHooks';
|
43
|
-
import { useKatelloDocUrl } from '../../../../utils/useKatelloDocUrl';
|
44
44
|
import AddedStatusLabel from '../../../../components/AddedStatusLabel';
|
45
45
|
import SelectableDropdown from '../../../../components/SelectableDropdown';
|
46
46
|
import TableWrapper from '../../../../components/Table/TableWrapper';
|
@@ -139,7 +139,7 @@ const ContentViewRepositories = ({ cvId, details }) => {
|
|
139
139
|
__('Status'),
|
140
140
|
];
|
141
141
|
|
142
|
-
const documentationUrl =
|
142
|
+
const documentationUrl = getDocsURL('Managing_Content', 'Products_and_Repositories_content-management');
|
143
143
|
|
144
144
|
useEffect(() => {
|
145
145
|
dispatch(getRepositoryTypes());
|
@@ -12,6 +12,7 @@ import ComponentEnvironments from '../Details/ComponentContentViews/ComponentEnv
|
|
12
12
|
import './cvPublishForm.scss';
|
13
13
|
import WizardHeader from '../components/WizardHeader';
|
14
14
|
import { selectCVNeedsPublish } from '../Details/ContentViewDetailSelectors';
|
15
|
+
import { truncate } from '../../../utils/helpers';
|
15
16
|
|
16
17
|
const CVPublishForm = ({
|
17
18
|
description,
|
@@ -83,7 +84,7 @@ const CVPublishForm = ({
|
|
83
84
|
<TextContent>{__('Repositories common to the selected content view versions will merge, resulting in a composite content view that is a union of all content from each of the content view versions.')}</TextContent>
|
84
85
|
</Alert>)
|
85
86
|
}
|
86
|
-
{__('A new version of ')}<b>{composite ? <RegistryIcon /> : <EnterpriseIcon />} {name}</b>
|
87
|
+
{__('A new version of ')}<b>{composite ? <RegistryIcon /> : <EnterpriseIcon />} {truncate(name)}</b>
|
87
88
|
{__(' will be created and automatically promoted to the ' +
|
88
89
|
'Library environment. You can promote to other environments as well. ')
|
89
90
|
}
|
@@ -16,6 +16,7 @@ import ComponentEnvironments from '../Details/ComponentContentViews/ComponentEnv
|
|
16
16
|
import { selectEnvironmentPaths, selectEnvironmentPathsStatus } from '../components/EnvironmentPaths/EnvironmentPathSelectors';
|
17
17
|
import WizardHeader from '../components/WizardHeader';
|
18
18
|
import { selectCVFilters, selectCVFiltersStatus } from '../Details/ContentViewDetailSelectors';
|
19
|
+
import { truncate } from '../../../utils/helpers';
|
19
20
|
|
20
21
|
const CVPublishReview = ({
|
21
22
|
details: {
|
@@ -53,7 +54,7 @@ const CVPublishReview = ({
|
|
53
54
|
title={__('Review details')}
|
54
55
|
description={
|
55
56
|
<>
|
56
|
-
{__('Review your currently selected changes for ')}<b>{composite ? <RegistryIcon /> : <EnterpriseIcon />} {name}.</b>
|
57
|
+
{__('Review your currently selected changes for ')}<b>{composite ? <RegistryIcon /> : <EnterpriseIcon />} {truncate(name)}.</b>
|
57
58
|
{filtered && (
|
58
59
|
<Alert
|
59
60
|
ouiaId="filters-applied-alert"
|
@@ -78,7 +79,7 @@ const CVPublishReview = ({
|
|
78
79
|
<Tbody>
|
79
80
|
<Tr ouiaId="cv-publish-review-table-row">
|
80
81
|
<Td>
|
81
|
-
<><ContentViewIcon composite={composite} description={name} /><InactiveText text={__('Newly published')} /></>
|
82
|
+
<><ContentViewIcon composite={composite} description={truncate(name)} /><InactiveText text={__('Newly published')} /></>
|
82
83
|
</Td>
|
83
84
|
<Td>
|
84
85
|
{__('Version')} {nextVersion}
|
@@ -15,6 +15,7 @@ import {
|
|
15
15
|
import { stopPollingTask } from '../../Tasks/TaskActions';
|
16
16
|
import { cvVersionTaskPollingKey } from '../ContentViewsConstants';
|
17
17
|
import { getContentViewFilters } from '../Details/ContentViewDetailActions';
|
18
|
+
import { truncate } from '../../../utils/helpers';
|
18
19
|
|
19
20
|
const PublishContentViewWizard = ({
|
20
21
|
details, show, onClose,
|
@@ -108,7 +109,7 @@ const PublishContentViewWizard = ({
|
|
108
109
|
return (
|
109
110
|
<Wizard
|
110
111
|
title={__('Publish')}
|
111
|
-
description={currentStep === 3 ? __(`Publishing ${name}`) : __(`Determining settings for ${name}`)}
|
112
|
+
description={currentStep === 3 ? __(`Publishing ${truncate(name)}`) : __(`Determining settings for ${truncate(name)}`)}
|
112
113
|
steps={steps}
|
113
114
|
startAtStep={currentStep}
|
114
115
|
// Let the wizard handle step change
|
@@ -24,6 +24,7 @@ import InactiveText from '../components/InactiveText';
|
|
24
24
|
import ContentViewVersionCell from './ContentViewVersionCell';
|
25
25
|
import DetailsExpansion from '../expansions/DetailsExpansion';
|
26
26
|
import ContentViewDeleteWizard from '../Delete/ContentViewDeleteWizard';
|
27
|
+
import { truncate } from '../../../utils/helpers';
|
27
28
|
|
28
29
|
const ContentViewTable = () => {
|
29
30
|
const response = useSelector(selectContentViews);
|
@@ -265,7 +266,7 @@ const ContentViewTable = () => {
|
|
265
266
|
}}
|
266
267
|
/>
|
267
268
|
<Td><ContentViewIcon position="right" composite={composite} /></Td>
|
268
|
-
<Td><Link to={`${urlBuilder('content_views', '')}${cvId}`}>{name}</Link></Td>
|
269
|
+
<Td><Link to={`${urlBuilder('content_views', '')}${cvId}`}>{truncate(name)}</Link></Td>
|
269
270
|
<Td>{lastPublished ? <LongDateTime date={lastPublished} showRelativeTimeTooltip /> : <InactiveText text={__('Not yet published')} />}</Td>
|
270
271
|
<Td><LastSync startedAt={startedAt} lastSync={lastTask} lastSyncWords={lastSyncWords} emptyMessage="N/A" /></Td>
|
271
272
|
<Td>{latestVersion ?
|
@@ -10,6 +10,7 @@ import {
|
|
10
10
|
selectCVDetails, selectCVDetailStatus, selectCVFilterDetails, selectCVFilterDetailStatus,
|
11
11
|
selectCVVersionDetails, selectCVVersionDetailsStatus,
|
12
12
|
} from '../Details/ContentViewDetailSelectors';
|
13
|
+
import { truncate } from '../../../utils/helpers';
|
13
14
|
|
14
15
|
const CVBreadcrumb = () => {
|
15
16
|
const { id } = useParams();
|
@@ -47,7 +48,7 @@ const CVBreadcrumb = () => {
|
|
47
48
|
Object.keys(breadcrumbItems).length === 1) {
|
48
49
|
const cvRecordCrumb = {
|
49
50
|
[`b_${cvDetails?.name}`]: {
|
50
|
-
render: () => (<Link to={`/content_views/${cvId}`}>{cvDetails?.name}</Link>),
|
51
|
+
render: () => (<Link to={`/content_views/${cvId}`}>{truncate(cvDetails?.name)}</Link>),
|
51
52
|
},
|
52
53
|
};
|
53
54
|
const tabName = splitHash[1];
|
@@ -7,7 +7,7 @@ import {
|
|
7
7
|
global_palette_black_600 as pfDescriptionColor,
|
8
8
|
} from '@patternfly/react-tokens';
|
9
9
|
import ContentViewIcon from '../../../../scenes/ContentViews/components/ContentViewIcon';
|
10
|
-
import { uniq } from '../../../../utils/helpers';
|
10
|
+
import { truncate, uniq } from '../../../../utils/helpers';
|
11
11
|
|
12
12
|
export const ContentViewDescription = ({ cv, versionNumber }) => {
|
13
13
|
const descriptionStyle = {
|
@@ -63,7 +63,7 @@ const ContentViewSelectOption = ({ cv, env, value }) => (
|
|
63
63
|
flexWrap={{ default: 'nowrap' }}
|
64
64
|
alignItems={{ default: 'alignItemsFlexStart', sm: 'alignItemsFlexStart' }}
|
65
65
|
>
|
66
|
-
{cv.name}
|
66
|
+
{truncate(cv.name)}
|
67
67
|
<ContentViewDescription
|
68
68
|
cv={cv}
|
69
69
|
versionNumber={relevantVersionFromCv(cv, env)}
|
@@ -102,6 +102,11 @@ export const SUBSCRIPTION_TABLE_COLUMNS = [
|
|
102
102
|
label: __('Entitlements'),
|
103
103
|
value: false,
|
104
104
|
},
|
105
|
+
{
|
106
|
+
key: 'product_host_count',
|
107
|
+
label: __('Product Host Count'),
|
108
|
+
value: false,
|
109
|
+
},
|
105
110
|
];
|
106
111
|
|
107
112
|
export const SUBSCRIPTION_TABLE_DEFAULT_COLUMNS = [
|
@@ -114,4 +119,5 @@ export const SUBSCRIPTION_TABLE_DEFAULT_COLUMNS = [
|
|
114
119
|
'consumed',
|
115
120
|
'quantity',
|
116
121
|
'type',
|
122
|
+
'product_host_count',
|
117
123
|
];
|
@@ -117,6 +117,7 @@ exports[`subscriptions page should render 1`] = `
|
|
117
117
|
"instance_multiplier": 1,
|
118
118
|
"multi_entitlement": null,
|
119
119
|
"name": "zoo",
|
120
|
+
"product_host_count": 1,
|
120
121
|
"product_id": "853987721546",
|
121
122
|
"product_name": "zoo",
|
122
123
|
"quantity": -1,
|
@@ -143,6 +144,7 @@ exports[`subscriptions page should render 1`] = `
|
|
143
144
|
"instance_multiplier": 1,
|
144
145
|
"multi_entitlement": null,
|
145
146
|
"name": "hsdfhsdh",
|
147
|
+
"product_host_count": 0,
|
146
148
|
"product_id": "947637693017",
|
147
149
|
"product_name": "hsdfhsdh",
|
148
150
|
"quantity": -1,
|
@@ -63,6 +63,7 @@ export const requestSuccessResponse = Immutable({
|
|
63
63
|
unmapped_guest: false,
|
64
64
|
virt_only: false,
|
65
65
|
virt_who: false,
|
66
|
+
product_host_count: 1,
|
66
67
|
},
|
67
68
|
{
|
68
69
|
id: 4,
|
@@ -89,6 +90,7 @@ export const requestSuccessResponse = Immutable({
|
|
89
90
|
unmapped_guest: false,
|
90
91
|
virt_only: false,
|
91
92
|
virt_who: false,
|
93
|
+
product_host_count: 0,
|
92
94
|
},
|
93
95
|
],
|
94
96
|
});
|
@@ -110,6 +112,7 @@ export const quantitiesRequestSuccessResponse = Immutable({
|
|
110
112
|
4,
|
111
113
|
5,
|
112
114
|
],
|
115
|
+
product_host_count: 9469,
|
113
116
|
},
|
114
117
|
{
|
115
118
|
id: '6b123381519abf020151ab082c5e4678',
|
@@ -125,6 +128,7 @@ export const quantitiesRequestSuccessResponse = Immutable({
|
|
125
128
|
local_pool_ids: [
|
126
129
|
6,
|
127
130
|
],
|
131
|
+
product_host_count: 9469,
|
128
132
|
},
|
129
133
|
],
|
130
134
|
page: 1,
|
@@ -167,6 +171,7 @@ export const groupedSubscriptions = Immutable({
|
|
167
171
|
unmapped_guest: false,
|
168
172
|
virt_only: false,
|
169
173
|
virt_who: false,
|
174
|
+
product_host_count: 1,
|
170
175
|
},
|
171
176
|
{
|
172
177
|
id: 4,
|
@@ -193,6 +198,7 @@ export const groupedSubscriptions = Immutable({
|
|
193
198
|
unmapped_guest: false,
|
194
199
|
virt_only: false,
|
195
200
|
virt_who: false,
|
201
|
+
product_host_count: 0,
|
196
202
|
},
|
197
203
|
],
|
198
204
|
searchIsActive: false,
|
@@ -236,6 +242,7 @@ export const successState = Immutable({
|
|
236
242
|
unmapped_guest: false,
|
237
243
|
virt_only: false,
|
238
244
|
virt_who: false,
|
245
|
+
product_host_count: 1,
|
239
246
|
},
|
240
247
|
{
|
241
248
|
id: 4,
|
@@ -262,6 +269,7 @@ export const successState = Immutable({
|
|
262
269
|
unmapped_guest: false,
|
263
270
|
virt_only: false,
|
264
271
|
virt_who: false,
|
272
|
+
product_host_count: 0,
|
265
273
|
},
|
266
274
|
],
|
267
275
|
searchIsActive: false,
|
@@ -454,6 +462,11 @@ export const tableColumns = [
|
|
454
462
|
label: 'Entitlements',
|
455
463
|
value: true,
|
456
464
|
},
|
465
|
+
{
|
466
|
+
key: 'product_host_count',
|
467
|
+
label: 'Product Host Count',
|
468
|
+
value: true,
|
469
|
+
},
|
457
470
|
];
|
458
471
|
|
459
472
|
export const loadTableColumnsSuccessAction = [
|
@@ -470,6 +483,7 @@ export const loadTableColumnsSuccessAction = [
|
|
470
483
|
'consumed',
|
471
484
|
'quantity',
|
472
485
|
'type',
|
486
|
+
'product_host_count',
|
473
487
|
],
|
474
488
|
},
|
475
489
|
},
|