katello 4.3.0 → 4.4.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/common/vendor.js +0 -1
- data/app/controllers/katello/api/v2/api_controller.rb +13 -4
- data/app/controllers/katello/api/v2/content_view_versions_controller.rb +3 -0
- data/app/controllers/katello/api/v2/content_views_controller.rb +46 -0
- data/app/controllers/katello/api/v2/host_packages_controller.rb +21 -1
- data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +30 -1
- data/app/controllers/katello/api/v2/organizations_controller.rb +10 -6
- data/app/controllers/katello/api/v2/packages_controller.rb +4 -0
- data/app/controllers/katello/api/v2/repositories_controller.rb +17 -7
- data/app/controllers/katello/api/v2/repository_sets_controller.rb +7 -0
- data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +3 -0
- data/app/controllers/katello/concerns/hosts_controller_extensions.rb +32 -0
- data/app/controllers/katello/remote_execution_controller.rb +5 -4
- data/app/helpers/katello/content_source_helper.rb +43 -0
- data/app/helpers/katello/hosts_and_hostgroups_helper.rb +4 -0
- data/app/lib/actions/katello/cdn_configuration/update.rb +5 -7
- data/app/lib/actions/katello/content_view/publish.rb +5 -0
- data/app/lib/actions/katello/content_view_version/incremental_update.rb +17 -3
- data/app/lib/actions/katello/repository/discover.rb +1 -14
- data/app/lib/actions/katello/repository/filtered_index_content.rb +1 -1
- data/app/lib/actions/pulp3/content_view_version/import.rb +7 -0
- data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +7 -5
- data/app/lib/actions/pulp3/repository/copy_content.rb +1 -1
- data/app/lib/actions/pulp3/repository/save_artifact.rb +1 -0
- data/app/lib/katello/concerns/base_template_scope_extensions.rb +11 -0
- data/app/lib/katello/errors.rb +3 -3
- data/app/lib/katello/logging.rb +6 -1
- data/app/lib/katello/repo_discovery.rb +27 -19
- data/app/lib/katello/resources/cdn/katello_cdn.rb +41 -3
- data/app/lib/katello/resources/cdn.rb +4 -2
- data/app/lib/katello/util/deduplication_migrator.rb +105 -0
- data/app/models/katello/candlepin/repository_mapper.rb +1 -1
- data/app/models/katello/cdn_configuration.rb +38 -6
- data/app/models/katello/concerns/host_managed_extensions.rb +23 -1
- data/app/models/katello/concerns/organization_extensions.rb +5 -1
- data/app/models/katello/concerns/pulp_database_unit.rb +59 -173
- data/app/models/katello/concerns/remote_execution_proxy_selector_extensions.rb +11 -0
- data/app/models/katello/concerns/smart_proxy_extensions.rb +1 -1
- data/app/models/katello/content_view.rb +4 -4
- data/app/models/katello/content_view_filter.rb +1 -1
- data/app/models/katello/content_view_history.rb +1 -1
- data/app/models/katello/content_view_version.rb +6 -2
- data/app/models/katello/content_view_version_export_history.rb +1 -1
- data/app/models/katello/deb.rb +1 -3
- data/app/models/katello/docker_meta_tag.rb +1 -1
- data/app/models/katello/erratum.rb +0 -15
- data/app/models/katello/glue/pulp/repos.rb +1 -1
- data/app/models/katello/host/content_facet.rb +2 -27
- data/app/models/katello/host/info_provider.rb +9 -0
- data/app/models/katello/host/subscription_facet.rb +2 -2
- data/app/models/katello/hostgroup/content_facet.rb +2 -2
- data/app/models/katello/product.rb +1 -1
- data/app/models/katello/product_content.rb +2 -2
- data/app/models/katello/repository.rb +10 -9
- data/app/models/katello/root_repository.rb +24 -13
- data/app/models/katello/rpm.rb +8 -2
- data/app/models/setting/content.rb +6 -3
- data/app/services/cert/rhsm_client.rb +1 -5
- data/app/services/katello/content_unit_indexer.rb +166 -0
- data/app/services/katello/organization_creator.rb +12 -4
- data/app/services/katello/pulp/repository/docker.rb +1 -1
- data/app/services/katello/pulp/repository/yum.rb +0 -54
- data/app/services/katello/pulp/repository.rb +0 -6
- data/app/services/katello/pulp3/ansible_collection.rb +26 -10
- data/app/services/katello/pulp3/api/apt.rb +7 -0
- data/app/services/katello/pulp3/content_view_version/import.rb +11 -2
- data/app/services/katello/pulp3/deb.rb +10 -9
- data/app/services/katello/pulp3/docker_manifest.rb +6 -5
- data/app/services/katello/pulp3/docker_manifest_list.rb +23 -6
- data/app/services/katello/pulp3/docker_tag.rb +16 -7
- data/app/services/katello/pulp3/erratum.rb +51 -56
- data/app/services/katello/pulp3/file_unit.rb +9 -6
- data/app/services/katello/pulp3/generic_content_unit.rb +11 -12
- data/app/services/katello/pulp3/module_stream.rb +76 -30
- data/app/services/katello/pulp3/package_group.rb +5 -5
- data/app/services/katello/pulp3/pulp_content_unit.rb +19 -11
- data/app/services/katello/pulp3/repository/apt.rb +5 -3
- data/app/services/katello/pulp3/repository/docker.rb +14 -7
- data/app/services/katello/pulp3/repository/generic.rb +1 -1
- data/app/services/katello/pulp3/repository/yum.rb +10 -12
- data/app/services/katello/pulp3/repository.rb +26 -7
- data/app/services/katello/pulp3/repository_mirror.rb +18 -5
- data/app/services/katello/pulp3/rpm.rb +13 -13
- data/app/services/katello/pulp3/srpm.rb +10 -9
- data/app/services/katello/repository_type.rb +15 -4
- data/app/services/katello/repository_type_manager.rb +1 -1
- data/app/services/katello/ui_notifications/subscriptions/manifest_expired_warning.rb +1 -1
- data/app/services/katello/upstream_connection_checker.rb +2 -2
- data/app/views/foreman/job_templates/change_content_source.erb +1 -31
- data/app/views/foreman/job_templates/install_errata.erb +6 -9
- data/app/views/foreman/job_templates/install_errata_by_search_query.erb +26 -0
- data/app/views/foreman/job_templates/install_packages_by_search_query.erb +19 -0
- data/app/views/katello/api/v2/cdn_configurations/show.json.rabl +1 -1
- data/app/views/katello/api/v2/environments/show.json.rabl +9 -0
- data/app/views/katello/api/v2/repositories/show.json.rabl +2 -0
- data/app/views/katello/layouts/react.html.erb +0 -1
- data/app/views/katello/sync_management/_repo.html.erb +36 -25
- data/config/initializers/monkeys.rb +0 -1
- data/config/routes/api/v2.rb +1 -0
- data/config/routes/overrides.rb +3 -0
- data/config/routes.rb +2 -0
- data/db/migrate/20150930183738_migrate_content_hosts.rb +1 -1
- data/db/migrate/20180612164926_add_content_org_id.rb +2 -2
- data/db/migrate/20211201154845_add_unique_indexes.rb +20 -0
- data/db/migrate/20211208034230_add_content_view_and_lifecycle_environment.rb +6 -0
- data/db/migrate/20211220185935_clean_duplicate_content_units.rb +144 -0
- data/db/migrate/20220110223754_update_disconnected_settings.rb +20 -0
- data/db/migrate/20220120163252_fix_docker_download_policy.rb +11 -0
- data/db/migrate/20220124191056_add_type_to_cdn_configuration.rb +22 -0
- data/db/migrate/20220127120843_fix_debian_download_policy.rb +11 -0
- data/db/migrate/20220204171908_rename_docker_tags_whitelist_and_add_exclude_tags.rb +8 -0
- data/db/migrate/20220207140355_change_deb_attributes_size_limit.rb +7 -0
- data/db/seeds.d/111-upgrade_tasks.rb +2 -1
- data/engines/bastion/app/views/bastion/layouts/application.html.erb +0 -1
- data/engines/bastion/app/views/bastion/layouts/assets.html.erb +0 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/content-credentials.controller.js +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-products.controller.js +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-repositories.controller.js +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-traces-modal.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment.html +26 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +212 -152
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/packages.controller.js +1 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +20 -8
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-manage-content.controller.js +2 -3
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +8 -3
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +34 -30
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +16 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +35 -15
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/discovery.controller.js +5 -4
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.routes.js +4 -3
- data/lib/katello/engine.rb +4 -0
- data/lib/katello/permission_creator.rb +1 -1
- data/lib/katello/permissions/host_permissions.rb +3 -1
- data/lib/katello/plugin.rb +4 -1
- data/lib/katello/repository_types/deb.rb +0 -1
- data/lib/katello/repository_types/docker.rb +4 -4
- data/lib/katello/repository_types/file.rb +0 -1
- data/lib/katello/repository_types/ostree.rb +4 -0
- data/lib/katello/repository_types/python.rb +5 -1
- data/lib/katello/repository_types/yum.rb +2 -9
- data/lib/katello/tasks/content_view_import_only.rake +34 -0
- data/lib/katello/tasks/import_applicability.rake +1 -1
- data/lib/katello/tasks/jenkins.rake +0 -2
- data/lib/katello/tasks/repository.rake +4 -1
- data/lib/katello/tasks/upgrades/4.4/publish_import_cvvs.rake +17 -0
- data/lib/katello/version.rb +1 -1
- data/locale/action_names.rb +8 -7
- data/locale/bn/katello.po +1402 -650
- data/locale/cs/katello.po +1217 -96
- data/locale/de/katello.po +2359 -1347
- data/locale/en/katello.po +1216 -94
- data/locale/es/katello.po +2201 -1172
- data/locale/fr/katello.po +2601 -1615
- data/locale/gu/katello.po +1564 -814
- data/locale/hi/katello.po +1563 -810
- data/locale/it/katello.po +1311 -282
- data/locale/ja/katello.po +2534 -1518
- data/locale/katello.pot +3430 -1326
- data/locale/kn/katello.po +1564 -812
- data/locale/ko/katello.po +1441 -409
- data/locale/mr/katello.po +1564 -776
- data/locale/or/katello.po +1565 -813
- data/locale/pa/katello.po +1559 -792
- data/locale/pt/katello.po +1314 -277
- data/locale/pt_BR/katello.po +2226 -1181
- data/locale/ru/katello.po +1587 -563
- data/locale/ta/katello.po +1373 -619
- data/locale/te/katello.po +1564 -810
- data/locale/zh_CN/katello.po +2936 -1890
- data/locale/zh_TW/katello.po +1508 -606
- data/webpack/__mocks__/foremanReact/{redux/actions/toasts.js → components/ToastsList/index.js} +3 -2
- data/webpack/components/ActionableDetail.js +35 -21
- data/webpack/components/Content/Details/__tests__/ContentDetailInfo.test.js +0 -2
- data/webpack/components/Content/Details/__tests__/ContentDetailRepositories.test.js +0 -2
- data/webpack/components/Content/Details/__tests__/ContentDetails.test.js +0 -2
- data/webpack/components/Content/__tests__/ContentPage.test.js +0 -2
- data/webpack/components/Content/__tests__/ContentTable.test.js +0 -2
- data/webpack/components/EditableSwitch.js +8 -2
- data/webpack/components/EditableTextInput/EditableTextInput.js +44 -86
- data/webpack/components/EditableTextInput/__tests__/editableTextInput.test.js +3 -3
- data/webpack/components/Errata/index.js +19 -11
- data/webpack/components/Packages/index.js +1 -1
- data/webpack/components/Search/Search.js +5 -2
- data/webpack/components/Search/__tests__/search.test.js +2 -3
- data/webpack/components/SelectOrg/SetOrganization.js +1 -1
- data/webpack/components/Table/PageControls.js +3 -6
- data/webpack/components/Table/TableHooks.js +46 -7
- data/webpack/components/Table/TableWrapper.js +14 -3
- data/webpack/components/TypeAhead/TypeAhead.js +5 -1
- data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +4 -1
- data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +2 -1
- data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard.js +1 -1
- data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.js +3 -4
- data/webpack/components/extensions/HostDetails/HostDetailsActions.js +2 -0
- data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesActions.js +18 -2
- data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesConstants.js +12 -0
- data/webpack/components/extensions/HostDetails/Tabs/ContentTab/SecondaryTabsRoutes.js +1 -1
- data/webpack/components/extensions/HostDetails/Tabs/{ErrataTab.js → ErrataTab/ErrataTab.js} +30 -21
- data/webpack/components/extensions/HostDetails/Tabs/{ErrataTab.scss → ErrataTab/ErrataTab.scss} +0 -0
- data/webpack/components/extensions/HostDetails/Tabs/{ErratumExpansionContents.js → ErrataTab/ErratumExpansionContents.js} +0 -0
- data/webpack/components/extensions/HostDetails/Tabs/{ErratumExpansionDetail.js → ErrataTab/ErratumExpansionDetail.js} +0 -0
- data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataActions.js +3 -3
- data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataConstants.js +11 -0
- data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataSelectors.js +0 -0
- data/webpack/components/extensions/HostDetails/Tabs/PackageInstallModal.js +279 -0
- data/webpack/components/extensions/HostDetails/Tabs/PackageInstallModal.scss +3 -0
- data/webpack/components/extensions/HostDetails/Tabs/PackagesTab.js +125 -8
- data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +27 -4
- data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionConstants.js +2 -1
- data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +6 -3
- data/webpack/components/extensions/HostDetails/Tabs/{EnableTracerEmptyState.js → TracesTab/EnableTracerEmptyState.js} +0 -0
- data/webpack/components/extensions/HostDetails/Tabs/{EnableTracerModal.js → TracesTab/EnableTracerModal.js} +3 -2
- data/webpack/components/extensions/HostDetails/Tabs/{HostTracesActions.js → TracesTab/HostTracesActions.js} +2 -2
- data/webpack/components/extensions/HostDetails/Tabs/{HostTracesConstants.js → TracesTab/HostTracesConstants.js} +0 -0
- data/webpack/components/extensions/HostDetails/Tabs/{HostTracesSelectors.js → TracesTab/HostTracesSelectors.js} +0 -0
- data/webpack/components/extensions/HostDetails/Tabs/{TracesTab.js → TracesTab/TracesTab.js} +8 -5
- data/webpack/components/extensions/HostDetails/Tabs/{TracesTab.scss → TracesTab/TracesTab.scss} +0 -0
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +17 -18
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/packageInstallModal.test.js +385 -0
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/packages.fixtures.json +1 -1
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +58 -7
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +2 -2
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +4 -4
- data/webpack/components/extensions/HostDetails/Tabs/__tests__/yumInstallablePackages.fixtures.json +72 -0
- data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +12 -5
- data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesActions.js +18 -0
- data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesConstants.js +3 -0
- data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesSelectors.js +16 -0
- data/webpack/components/extensions/HostDetails/hostDetailsHelpers.js +19 -0
- data/webpack/components/pf3Table/components/Table.js +2 -3
- data/webpack/components/pf3Table/components/Table.test.js +0 -3
- data/webpack/components/pf3Table/components/__snapshots__/Table.test.js.snap +9 -8
- data/webpack/containers/Application/config.js +5 -0
- data/webpack/global_index.js +1 -1
- data/webpack/global_test_setup.js +1 -1
- data/webpack/index.js +7 -0
- data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.test.js +0 -2
- data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionPage.test.js +0 -2
- data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsTable.test.js +0 -2
- data/webpack/scenes/Content/ContentConfig.js +55 -5
- data/webpack/scenes/Content/ContentPage.js +1 -1
- data/webpack/scenes/Content/Details/ContentDetails.js +1 -1
- data/webpack/scenes/Content/Details/ContentInfo.js +1 -1
- data/webpack/scenes/Content/Details/ContentRepositories.js +1 -1
- data/webpack/scenes/Content/Details/__tests__/contentDetail.test.js +4 -4
- data/webpack/scenes/Content/Table/ContentTable.js +1 -1
- data/webpack/scenes/Content/__tests__/contentTable.test.js +3 -3
- data/webpack/scenes/ContentViews/ContentViewsConstants.js +2 -1
- data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +6 -6
- data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +2 -2
- data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +21 -27
- data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +5 -5
- data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +8 -3
- data/webpack/scenes/ContentViews/Details/DetailsContainer.js +11 -16
- data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetails.js +2 -2
- data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetailsHeader.js +14 -8
- data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +2 -2
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +2 -3
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +2 -9
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +3 -5
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +2 -10
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +2 -3
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +2 -3
- data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +2 -2
- data/webpack/scenes/ContentViews/Details/Repositories/ContentCounts.js +1 -1
- data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +23 -2
- data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +11 -5
- data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionContent.js +16 -17
- data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +1 -1
- data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +6 -6
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +30 -34
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.js +9 -8
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsHeader.js +13 -15
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionRepositoryCell.js +1 -1
- data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +4 -4
- data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +3 -3
- data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +5 -3
- data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +2 -2
- data/webpack/scenes/Hosts/ChangeContentSource/actions.js +43 -0
- data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceForm.js +87 -0
- data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceTemplate.js +90 -0
- data/webpack/scenes/Hosts/ChangeContentSource/components/FormField.js +43 -0
- data/webpack/scenes/Hosts/ChangeContentSource/constants.js +3 -0
- data/webpack/scenes/Hosts/ChangeContentSource/helpers.js +27 -0
- data/webpack/scenes/Hosts/ChangeContentSource/index.js +126 -0
- data/webpack/scenes/Hosts/ChangeContentSource/selectors.js +42 -0
- data/webpack/scenes/Hosts/ChangeContentSource/styles.scss +11 -0
- data/webpack/scenes/ModuleStreams/Details/Profiles/__tests__/ModuleStreamDetailProfiles.test.js +0 -1
- data/webpack/scenes/ModuleStreams/Details/__tests__/ModuleStreamDetails.test.js +0 -2
- data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamPage.test.js +0 -2
- data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamsTable.test.js +0 -2
- data/webpack/scenes/Organizations/OrganizationActions.js +5 -1
- data/webpack/scenes/RedHatRepositories/RedHatRepositoriesPage.js +31 -1
- data/webpack/scenes/RedHatRepositories/__tests__/RedHatRepositoriesPage.test.js +16 -0
- data/webpack/scenes/RedHatRepositories/__tests__/__snapshots__/RedHatRepositoriesPage.test.js.snap +11 -2
- data/webpack/scenes/RedHatRepositories/helpers.js +5 -5
- data/webpack/scenes/RedHatRepositories/index.js +11 -3
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/AirGappedTypeForm.js +81 -0
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnConfigurationConstants.js +13 -0
- data/webpack/scenes/Subscriptions/Manifest/{CdnConfigurationForm.scss → CdnConfigurationTab/CdnConfigurationForm.scss} +0 -0
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnTypeForm.js +106 -0
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/UpstreamServerTypeForm.js +259 -0
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/AirGappedTypeForm.test.js +44 -0
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/CdnTypeForm.test.js +67 -0
- data/webpack/scenes/Subscriptions/Manifest/{__tests__/CdnConfigurationForm.test.js → CdnConfigurationTab/__tests__/UpstreamServerTypeForm.test.js} +46 -17
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/index.js +97 -0
- data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +6 -1
- data/webpack/scenes/Subscriptions/UpstreamSubscriptions/__tests__/UpstreamSubscriptionsPage.test.js +0 -1
- data/webpack/scenes/Subscriptions/__tests__/SubscriptionsPage.test.js +0 -1
- data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsActions.test.js.snap +3 -2
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionsTable.test.js +4 -0
- data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/__snapshots__/SubscriptionsTable.test.js.snap +9 -0
- data/webpack/scenes/Tasks/TaskActions.js +1 -1
- data/webpack/scenes/Tasks/__tests__/__snapshots__/TaskActions.test.js.snap +3 -2
- data/webpack/services/api/testHelpers.js +5 -3
- data/webpack/utils/helpers.js +6 -3
- metadata +81 -58
- data/app/services/katello/pulp/deb.rb +0 -55
- data/app/services/katello/pulp/distribution.rb +0 -7
- data/app/services/katello/pulp/docker_blob.rb +0 -7
- data/app/services/katello/pulp/docker_manifest.rb +0 -13
- data/app/services/katello/pulp/docker_manifest_list.rb +0 -14
- data/app/services/katello/pulp/docker_tag.rb +0 -14
- data/app/services/katello/pulp/erratum.rb +0 -129
- data/app/services/katello/pulp/file_unit.rb +0 -21
- data/app/services/katello/pulp/module_stream.rb +0 -39
- data/app/services/katello/pulp/package_category.rb +0 -7
- data/app/services/katello/pulp/package_group.rb +0 -20
- data/app/services/katello/pulp/pulp_content_unit.rb +0 -156
- data/app/services/katello/pulp/rpm.rb +0 -57
- data/app/services/katello/pulp/srpm.rb +0 -29
- data/app/services/katello/pulp/yum_metadata_file.rb +0 -30
- data/lib/monkeys/pulp3_13_checksumfix.rb +0 -17
- data/webpack/__mocks__/foremanReact/components/Pagination/PaginationHooks.js +0 -2
- data/webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js +0 -2
- data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationForm.js +0 -185
@@ -1,5 +1,7 @@
|
|
1
1
|
import { useState, useRef, useEffect, useCallback } from 'react';
|
2
2
|
import { isEmpty } from 'lodash';
|
3
|
+
import { useLocation } from 'react-router-dom';
|
4
|
+
import { friendlySearchParam } from '../../utils/helpers';
|
3
5
|
|
4
6
|
class ReactConnectedSet extends Set {
|
5
7
|
constructor(initialValue, forceRender) {
|
@@ -68,6 +70,7 @@ export const useSelectionSet = ({
|
|
68
70
|
const pageIds = results?.map(result => result[idColumn]) ?? [];
|
69
71
|
const selectableResults = results?.filter(result => isSelectable(result)) ?? [];
|
70
72
|
const selectableIds = new Set(selectableResults.map(result => result[idColumn]));
|
73
|
+
const selectedResults = useRef({}); // { id: result }
|
71
74
|
const canSelect = id => selectableIds.has(id);
|
72
75
|
const areAllRowsOnPageSelected = () =>
|
73
76
|
Number(pageIds?.length) > 0 &&
|
@@ -76,13 +79,28 @@ export const useSelectionSet = ({
|
|
76
79
|
const areAllRowsSelected = () =>
|
77
80
|
Number(selectionSet.size) > 0 && selectionSet.size === Number(metadata.selectable);
|
78
81
|
|
79
|
-
const selectPage = () =>
|
80
|
-
|
81
|
-
|
82
|
+
const selectPage = () => {
|
83
|
+
const selectablePageIds = pageIds.filter(canSelect);
|
84
|
+
selectionSet.addAll(selectablePageIds);
|
85
|
+
// eslint-disable-next-line no-restricted-syntax
|
86
|
+
for (const result of selectableResults) {
|
87
|
+
selectedResults.current[result[idColumn]] = result;
|
88
|
+
}
|
89
|
+
};
|
90
|
+
const clearSelectedResults = () => {
|
91
|
+
selectedResults.current = {};
|
92
|
+
};
|
93
|
+
const selectNone = () => {
|
94
|
+
selectionSet.clear();
|
95
|
+
clearSelectedResults();
|
96
|
+
};
|
97
|
+
const selectOne = (isSelected, id, data) => {
|
82
98
|
if (canSelect(id)) {
|
83
99
|
if (isSelected) {
|
100
|
+
if (data) selectedResults.current[id] = data;
|
84
101
|
selectionSet.add(id);
|
85
102
|
} else {
|
103
|
+
delete selectedResults.current[id];
|
86
104
|
selectionSet.delete(id);
|
87
105
|
}
|
88
106
|
}
|
@@ -102,6 +120,8 @@ export const useSelectionSet = ({
|
|
102
120
|
isSelected,
|
103
121
|
isSelectable: canSelect,
|
104
122
|
selectionSet,
|
123
|
+
selectedResults: Object.values(selectedResults.current),
|
124
|
+
clearSelectedResults,
|
105
125
|
};
|
106
126
|
};
|
107
127
|
|
@@ -117,6 +137,7 @@ export const useBulkSelect = ({
|
|
117
137
|
results,
|
118
138
|
metadata,
|
119
139
|
initialArry = [],
|
140
|
+
initialSearchQuery = '',
|
120
141
|
idColumn = 'id',
|
121
142
|
isSelectable,
|
122
143
|
}) => {
|
@@ -125,7 +146,7 @@ export const useBulkSelect = ({
|
|
125
146
|
results, metadata, initialArry, idColumn, isSelectable,
|
126
147
|
});
|
127
148
|
const exclusionSet = useSet([]);
|
128
|
-
const [searchQuery, updateSearchQuery] = useState(
|
149
|
+
const [searchQuery, updateSearchQuery] = useState(initialSearchQuery);
|
129
150
|
const [selectAllMode, setSelectAllMode] = useState(false);
|
130
151
|
const selectedCount = selectAllMode ?
|
131
152
|
Number(metadata.selectable) - exclusionSet.size : selectOptions.selectedCount;
|
@@ -155,9 +176,10 @@ export const useBulkSelect = ({
|
|
155
176
|
setSelectAllMode(false);
|
156
177
|
exclusionSet.clear();
|
157
178
|
inclusionSet.clear();
|
158
|
-
|
179
|
+
selectOptions.clearSelectedResults();
|
180
|
+
}, [exclusionSet, inclusionSet, selectOptions]);
|
159
181
|
|
160
|
-
const selectOne = (isRowSelected, id) => {
|
182
|
+
const selectOne = (isRowSelected, id, data) => {
|
161
183
|
if (selectAllMode) {
|
162
184
|
if (isRowSelected) {
|
163
185
|
exclusionSet.delete(id);
|
@@ -165,7 +187,7 @@ export const useBulkSelect = ({
|
|
165
187
|
exclusionSet.add(id);
|
166
188
|
}
|
167
189
|
} else {
|
168
|
-
selectOptions.selectOne(isRowSelected, id);
|
190
|
+
selectOptions.selectOne(isRowSelected, id, data);
|
169
191
|
}
|
170
192
|
};
|
171
193
|
|
@@ -219,3 +241,20 @@ export const useBulkSelect = ({
|
|
219
241
|
areAllRowsSelected,
|
220
242
|
};
|
221
243
|
};
|
244
|
+
|
245
|
+
// takes a url query like ?type=security&search=name+~+foo
|
246
|
+
// and returns an object
|
247
|
+
// {
|
248
|
+
// type: 'security',
|
249
|
+
// searchParam: 'name ~ foo'
|
250
|
+
// }
|
251
|
+
export const useUrlParams = () => {
|
252
|
+
const location = useLocation();
|
253
|
+
const { search: urlSearchParam, ...urlParams }
|
254
|
+
= Object.fromEntries(new URLSearchParams(location.search).entries());
|
255
|
+
const searchParam = urlSearchParam ? friendlySearchParam(urlSearchParam) : '';
|
256
|
+
return {
|
257
|
+
searchParam,
|
258
|
+
...urlParams,
|
259
|
+
};
|
260
|
+
};
|
@@ -26,6 +26,7 @@ const TableWrapper = ({
|
|
26
26
|
foremanApiAutoComplete,
|
27
27
|
searchQuery,
|
28
28
|
updateSearchQuery,
|
29
|
+
searchPlaceholderText,
|
29
30
|
additionalListeners,
|
30
31
|
activeFilters,
|
31
32
|
displaySelectAllCheckbox,
|
@@ -35,6 +36,8 @@ const TableWrapper = ({
|
|
35
36
|
areAllRowsOnPageSelected,
|
36
37
|
areAllRowsSelected,
|
37
38
|
selectedCount,
|
39
|
+
selectedResults,
|
40
|
+
clearSelectedResults,
|
38
41
|
emptySearchBody,
|
39
42
|
disableSearch,
|
40
43
|
nodesBelowSearch,
|
@@ -182,10 +185,12 @@ const TableWrapper = ({
|
|
182
185
|
<Search
|
183
186
|
isDisabled={unresolvedStatusOrNoRows && !searchQuery}
|
184
187
|
patternfly4
|
188
|
+
initialInputValue={searchQuery && searchQuery}
|
185
189
|
onSearch={search => updateSearchQuery(search)}
|
186
190
|
getAutoCompleteParams={getAutoCompleteParams}
|
187
191
|
foremanApiAutoComplete={foremanApiAutoComplete}
|
188
192
|
bookmarkController={bookmarkController}
|
193
|
+
placeholder={searchPlaceholderText}
|
189
194
|
/>
|
190
195
|
</FlexItem>
|
191
196
|
}
|
@@ -260,6 +265,7 @@ TableWrapper.propTypes = {
|
|
260
265
|
}),
|
261
266
|
autocompleteEndpoint: PropTypes.string.isRequired,
|
262
267
|
foremanApiAutoComplete: PropTypes.bool,
|
268
|
+
searchPlaceholderText: PropTypes.string,
|
263
269
|
actionButtons: PropTypes.node,
|
264
270
|
toggleGroup: PropTypes.node,
|
265
271
|
children: PropTypes.node,
|
@@ -279,6 +285,8 @@ TableWrapper.propTypes = {
|
|
279
285
|
])),
|
280
286
|
displaySelectAllCheckbox: PropTypes.bool,
|
281
287
|
selectedCount: PropTypes.number,
|
288
|
+
selectedResults: PropTypes.arrayOf(PropTypes.object),
|
289
|
+
clearSelectedResults: PropTypes.func,
|
282
290
|
selectAll: PropTypes.func,
|
283
291
|
selectNone: PropTypes.func,
|
284
292
|
selectPage: PropTypes.func,
|
@@ -297,13 +305,16 @@ TableWrapper.defaultProps = {
|
|
297
305
|
activeFilters: [],
|
298
306
|
defaultFilters: [],
|
299
307
|
foremanApiAutoComplete: false,
|
308
|
+
searchPlaceholderText: undefined,
|
300
309
|
actionButtons: null,
|
301
310
|
toggleGroup: null,
|
302
311
|
displaySelectAllCheckbox: false,
|
303
312
|
selectedCount: 0,
|
304
|
-
|
305
|
-
|
306
|
-
|
313
|
+
selectedResults: [],
|
314
|
+
clearSelectedResults: noop,
|
315
|
+
selectAll: undefined,
|
316
|
+
selectNone: undefined,
|
317
|
+
selectPage: undefined,
|
307
318
|
areAllRowsOnPageSelected: noop,
|
308
319
|
areAllRowsSelected: noop,
|
309
320
|
emptySearchBody: __('Try changing your search settings.'),
|
@@ -22,6 +22,7 @@ const TypeAhead = ({
|
|
22
22
|
autoSearchEnabled,
|
23
23
|
autoSearchDelay,
|
24
24
|
bookmarkController,
|
25
|
+
placeholder,
|
25
26
|
}) => {
|
26
27
|
const [inputValue, setInputValue] = useState(initialInputValue);
|
27
28
|
|
@@ -79,6 +80,7 @@ const TypeAhead = ({
|
|
79
80
|
onSearch,
|
80
81
|
items,
|
81
82
|
activeItems,
|
83
|
+
placeholder,
|
82
84
|
shouldShowItems: isOpen && items.length > 0,
|
83
85
|
};
|
84
86
|
|
@@ -86,7 +88,7 @@ const TypeAhead = ({
|
|
86
88
|
<div>
|
87
89
|
{patternfly4 ?
|
88
90
|
<TypeAheadSearchPf4 autoSearchEnabled={autoSearchEnabled} {...typeAheadProps} /> :
|
89
|
-
<TypeAheadSearch actionText={actionText} {...typeAheadProps} />}
|
91
|
+
<TypeAheadSearch actionText={actionText} {...typeAheadProps} placeholder={null} />}
|
90
92
|
</div>
|
91
93
|
);
|
92
94
|
}}
|
@@ -112,6 +114,7 @@ TypeAhead.propTypes = {
|
|
112
114
|
autoSearchEnabled: PropTypes.bool.isRequired,
|
113
115
|
autoSearchDelay: PropTypes.number,
|
114
116
|
bookmarkController: PropTypes.string,
|
117
|
+
placeholder: PropTypes.string,
|
115
118
|
};
|
116
119
|
|
117
120
|
TypeAhead.defaultProps = {
|
@@ -121,6 +124,7 @@ TypeAhead.defaultProps = {
|
|
121
124
|
isDisabled: undefined,
|
122
125
|
autoSearchDelay: 500,
|
123
126
|
bookmarkController: undefined,
|
127
|
+
placeholder: undefined,
|
124
128
|
};
|
125
129
|
|
126
130
|
export default TypeAhead;
|
@@ -8,7 +8,7 @@ import { commonInputPropTypes } from '../helpers/commonPropTypes';
|
|
8
8
|
import './TypeAheadInput.scss';
|
9
9
|
|
10
10
|
const TypeAheadInput = ({
|
11
|
-
onKeyPress, onInputFocus, passedProps, isDisabled, autoSearchEnabled,
|
11
|
+
onKeyPress, onInputFocus, passedProps, isDisabled, autoSearchEnabled, placeholder,
|
12
12
|
}) => {
|
13
13
|
const inputRef = useRef(null);
|
14
14
|
const {
|
@@ -33,6 +33,7 @@ const TypeAheadInput = ({
|
|
33
33
|
onChange={onChangeWrapper}
|
34
34
|
type="search"
|
35
35
|
iconVariant={autoSearchEnabled && 'search'}
|
36
|
+
placeholder={placeholder}
|
36
37
|
/>
|
37
38
|
{
|
38
39
|
value && (
|
@@ -50,10 +51,12 @@ TypeAheadInput.propTypes = {
|
|
50
51
|
isDisabled: PropTypes.bool,
|
51
52
|
autoSearchEnabled: PropTypes.bool.isRequired,
|
52
53
|
...commonInputPropTypes,
|
54
|
+
placeholder: PropTypes.string,
|
53
55
|
};
|
54
56
|
|
55
57
|
TypeAheadInput.defaultProps = {
|
56
58
|
isDisabled: undefined,
|
59
|
+
placeholder: '',
|
57
60
|
};
|
58
61
|
|
59
62
|
export default TypeAheadInput;
|
@@ -12,7 +12,7 @@ import Bookmark from './../../../components/Bookmark';
|
|
12
12
|
const TypeAheadSearch = ({
|
13
13
|
userInputValue, clearSearch, getInputProps, getItemProps, isOpen, highlightedIndex,
|
14
14
|
selectedItem, selectItem, openMenu, onSearch, items, activeItems, shouldShowItems,
|
15
|
-
autoSearchEnabled, isDisabled, bookmarkController, inputValue,
|
15
|
+
autoSearchEnabled, isDisabled, bookmarkController, inputValue, placeholder,
|
16
16
|
}) => (
|
17
17
|
<>
|
18
18
|
<InputGroup>
|
@@ -34,6 +34,7 @@ const TypeAheadSearch = ({
|
|
34
34
|
onInputFocus={openMenu}
|
35
35
|
passedProps={{ ...getInputProps(), clearSearch }}
|
36
36
|
autoSearchEnabled={autoSearchEnabled}
|
37
|
+
placeholder={placeholder}
|
37
38
|
/>
|
38
39
|
<>
|
39
40
|
{bookmarkController &&
|
@@ -8,7 +8,6 @@ import {
|
|
8
8
|
FlexItem,
|
9
9
|
GridItem,
|
10
10
|
} from '@patternfly/react-core';
|
11
|
-
import { urlBuilder } from 'foremanReact/common/urlHelpers';
|
12
11
|
import { translate as __ } from 'foremanReact/common/I18n';
|
13
12
|
import { propsToCamelCase } from 'foremanReact/common/helpers';
|
14
13
|
import PropTypes from 'prop-types';
|
@@ -30,7 +29,7 @@ function HostInstallableErrata({
|
|
30
29
|
w: 'enhancements', x: 'enhancement', y: errataEnhance, z: errataTotal,
|
31
30
|
}];
|
32
31
|
return (
|
33
|
-
<GridItem rowSpan={
|
32
|
+
<GridItem rowSpan={1} md={6} lg={4} xl2={3} >
|
34
33
|
<Card isHoverable>
|
35
34
|
<CardHeader>
|
36
35
|
<CardTitle>{__('Installable Errata')}</CardTitle>
|
@@ -38,7 +37,7 @@ function HostInstallableErrata({
|
|
38
37
|
<CardBody>
|
39
38
|
<Flex direction="column">
|
40
39
|
<FlexItem>
|
41
|
-
<a href=
|
40
|
+
<a href="#/Content/errata">
|
42
41
|
{errataTotal} errata
|
43
42
|
</a>
|
44
43
|
</FlexItem>
|
@@ -61,7 +60,7 @@ function HostInstallableErrata({
|
|
61
60
|
/>
|
62
61
|
</div>
|
63
62
|
</div>
|
64
|
-
<div className="erratalegend">
|
63
|
+
<div className="erratalegend" style={{ minWidth: '140px' }}>
|
65
64
|
<FlexItem>
|
66
65
|
<ErrataMapper data={chartData} id={id} />
|
67
66
|
</FlexItem>
|
@@ -1,6 +1,13 @@
|
|
1
|
-
import { API_OPERATIONS, get } from 'foremanReact/redux/API';
|
1
|
+
import { API_OPERATIONS, get, put } from 'foremanReact/redux/API';
|
2
|
+
import { renderTaskStartedToast } from '../../../../scenes/Tasks/helpers';
|
2
3
|
import { foremanApi } from '../../../../services/api';
|
3
|
-
import {
|
4
|
+
import { getResponseErrorMsgs } from '../../../../utils/helpers';
|
5
|
+
import { HOST_PACKAGES_INSTALL_KEY, HOST_PACKAGES_KEY } from './HostPackagesConstants';
|
6
|
+
|
7
|
+
const errorToast = (error) => {
|
8
|
+
const message = getResponseErrorMsgs(error.response);
|
9
|
+
return message;
|
10
|
+
};
|
4
11
|
|
5
12
|
export const getInstalledPackagesWithLatest = (hostId, params) => get({
|
6
13
|
type: API_OPERATIONS.GET,
|
@@ -9,3 +16,12 @@ export const getInstalledPackagesWithLatest = (hostId, params) => get({
|
|
9
16
|
params,
|
10
17
|
});
|
11
18
|
export default getInstalledPackagesWithLatest;
|
19
|
+
|
20
|
+
export const installPackageViaKatelloAgent = (hostId, params) => put({
|
21
|
+
type: API_OPERATIONS.PUT,
|
22
|
+
key: HOST_PACKAGES_INSTALL_KEY,
|
23
|
+
url: foremanApi.getApiUrl(`/hosts/${hostId}/packages/install`),
|
24
|
+
handleSuccess: ({ data }) => renderTaskStartedToast(data),
|
25
|
+
errorToast: error => errorToast(error),
|
26
|
+
params,
|
27
|
+
});
|
@@ -1,2 +1,14 @@
|
|
1
1
|
export const HOST_PACKAGES_KEY = 'HOST_PACKAGES';
|
2
|
+
export const HOST_PACKAGES_INSTALL_KEY = 'HOST_PACKAGES_KATELLO_AGENT_INSTALL';
|
3
|
+
|
4
|
+
export const PACKAGES_VERSION_STATUSES = {
|
5
|
+
UPGRADABLE: 'Upgradable',
|
6
|
+
UP_TO_DATE: 'Up-to date',
|
7
|
+
};
|
8
|
+
|
9
|
+
export const VERSION_STATUSES_TO_PARAM = {
|
10
|
+
[PACKAGES_VERSION_STATUSES.UPGRADABLE]: 'upgradable',
|
11
|
+
[PACKAGES_VERSION_STATUSES.UP_TO_DATE]: 'up-to-date',
|
12
|
+
};
|
13
|
+
|
2
14
|
export default HOST_PACKAGES_KEY;
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import React from 'react';
|
2
2
|
import { Route, Switch, Redirect } from 'react-router-dom';
|
3
3
|
import { PackagesTab } from '../PackagesTab';
|
4
|
-
import { ErrataTab } from '../ErrataTab';
|
4
|
+
import { ErrataTab } from '../ErrataTab/ErrataTab.js';
|
5
5
|
import { route } from './helpers';
|
6
6
|
|
7
7
|
const SecondaryTabRoutes = () => (
|
@@ -20,18 +20,20 @@ import { selectAPIResponse } from 'foremanReact/redux/API/APISelectors';
|
|
20
20
|
import IsoDate from 'foremanReact/components/common/dates/IsoDate';
|
21
21
|
import { urlBuilder } from 'foremanReact/common/urlHelpers';
|
22
22
|
import { propsToCamelCase } from 'foremanReact/common/helpers';
|
23
|
-
import SelectableDropdown from '
|
24
|
-
import { useSet, useBulkSelect } from '
|
25
|
-
import TableWrapper from '
|
26
|
-
import { ErrataType, ErrataSeverity } from '
|
27
|
-
import { getInstallableErrata, regenerateApplicability, applyViaKatelloAgent } from '
|
23
|
+
import SelectableDropdown from '../../../../SelectableDropdown';
|
24
|
+
import { useSet, useBulkSelect, useUrlParams } from '../../../../../components/Table/TableHooks';
|
25
|
+
import TableWrapper from '../../../../../components/Table/TableWrapper';
|
26
|
+
import { ErrataType, ErrataSeverity } from '../../../../../components/Errata';
|
27
|
+
import { getInstallableErrata, regenerateApplicability, applyViaKatelloAgent } from './HostErrataActions';
|
28
28
|
import ErratumExpansionDetail from './ErratumExpansionDetail';
|
29
29
|
import ErratumExpansionContents from './ErratumExpansionContents';
|
30
|
-
import { selectHostErrataStatus } from '
|
31
|
-
import { HOST_ERRATA_KEY, ERRATA_TYPES, ERRATA_SEVERITIES, TYPES_TO_PARAM, SEVERITIES_TO_PARAM } from '
|
32
|
-
import { installErrata } from '
|
33
|
-
import { errataInstallUrl } from '
|
30
|
+
import { selectHostErrataStatus } from './HostErrataSelectors';
|
31
|
+
import { HOST_ERRATA_KEY, ERRATA_TYPES, ERRATA_SEVERITIES, TYPES_TO_PARAM, SEVERITIES_TO_PARAM, PARAM_TO_FRIENDLY_NAME } from './HostErrataConstants';
|
32
|
+
import { installErrata } from '../RemoteExecutionActions';
|
33
|
+
import { errataInstallUrl } from '../customizedRexUrlHelpers';
|
34
34
|
import './ErrataTab.scss';
|
35
|
+
import hostIdNotReady from '../../HostDetailsActions';
|
36
|
+
import defaultRemoteActionMethod, { KATELLO_AGENT } from '../../hostDetailsHelpers';
|
35
37
|
|
36
38
|
export const ErrataTab = () => {
|
37
39
|
const hostDetails = useSelector(state => selectAPIResponse(state, 'HOST_DETAILS'));
|
@@ -46,14 +48,21 @@ export const ErrataTab = () => {
|
|
46
48
|
const [ALL, INSTALLABLE] = toggleGroupStates;
|
47
49
|
const ERRATA_TYPE = __('Type');
|
48
50
|
const ERRATA_SEVERITY = __('Severity');
|
49
|
-
const [toggleGroupState, setToggleGroupState] = useState(INSTALLABLE);
|
50
|
-
|
51
51
|
const [isBulkActionOpen, setIsBulkActionOpen] = useState(false);
|
52
52
|
const toggleBulkAction = () => setIsBulkActionOpen(prev => !prev);
|
53
53
|
const expandedErrata = useSet([]);
|
54
54
|
const erratumIsExpanded = id => expandedErrata.has(id);
|
55
|
-
const
|
56
|
-
|
55
|
+
const {
|
56
|
+
type: initialType,
|
57
|
+
severity: initialSeverity,
|
58
|
+
show,
|
59
|
+
searchParam,
|
60
|
+
} = useUrlParams();
|
61
|
+
const [toggleGroupState, setToggleGroupState] = useState(show ?? INSTALLABLE);
|
62
|
+
const [errataTypeSelected, setErrataTypeSelected]
|
63
|
+
= useState(PARAM_TO_FRIENDLY_NAME[initialType] ?? ERRATA_TYPE);
|
64
|
+
const [errataSeveritySelected, setErrataSeveritySelected]
|
65
|
+
= useState(PARAM_TO_FRIENDLY_NAME[initialSeverity] ?? ERRATA_SEVERITY);
|
57
66
|
const activeFilters = [errataTypeSelected, errataSeveritySelected];
|
58
67
|
const defaultFilters = [ERRATA_TYPE, ERRATA_SEVERITY];
|
59
68
|
|
@@ -72,7 +81,7 @@ export const ErrataTab = () => {
|
|
72
81
|
|
73
82
|
const fetchItems = useCallback(
|
74
83
|
(params) => {
|
75
|
-
if (!hostId) return
|
84
|
+
if (!hostId) return hostIdNotReady;
|
76
85
|
const modifiedParams = { ...params };
|
77
86
|
if (errataTypeSelected !== ERRATA_TYPE) {
|
78
87
|
modifiedParams.type = TYPES_TO_PARAM[errataTypeSelected];
|
@@ -104,6 +113,7 @@ export const ErrataTab = () => {
|
|
104
113
|
metadata,
|
105
114
|
idColumn: 'errata_id',
|
106
115
|
isSelectable: result => result.installable,
|
116
|
+
initialSearchQuery: searchParam || '',
|
107
117
|
});
|
108
118
|
|
109
119
|
if (!hostId) return <Skeleton />;
|
@@ -146,13 +156,12 @@ export const ErrataTab = () => {
|
|
146
156
|
{ errata_ids: [id] },
|
147
157
|
));
|
148
158
|
|
149
|
-
const
|
150
|
-
contentFacet.katelloAgentEnabled);
|
159
|
+
const defaultRemoteAction = defaultRemoteActionMethod({ hostDetails });
|
151
160
|
const apply = () => {
|
152
|
-
if (
|
153
|
-
applyViaRemoteExecution();
|
154
|
-
} else {
|
161
|
+
if (defaultRemoteAction === KATELLO_AGENT) {
|
155
162
|
applyByKatelloAgent();
|
163
|
+
} else {
|
164
|
+
applyViaRemoteExecution();
|
156
165
|
}
|
157
166
|
};
|
158
167
|
|
@@ -167,7 +176,7 @@ export const ErrataTab = () => {
|
|
167
176
|
</DropdownItem>,
|
168
177
|
];
|
169
178
|
|
170
|
-
if (
|
179
|
+
if (defaultRemoteAction === KATELLO_AGENT) {
|
171
180
|
dropdownItems.push((
|
172
181
|
<DropdownItem
|
173
182
|
aria-label="apply_via_katello_agent"
|
@@ -239,7 +248,7 @@ export const ErrataTab = () => {
|
|
239
248
|
);
|
240
249
|
|
241
250
|
const hostIsNonLibrary = (
|
242
|
-
|
251
|
+
contentFacet?.contentViewDefault === false && contentFacet.lifecycleEnvironmentLibrary === false
|
243
252
|
);
|
244
253
|
const toggleGroup = (
|
245
254
|
<Split hasGutter>
|
data/webpack/components/extensions/HostDetails/Tabs/{ErrataTab.scss → ErrataTab/ErrataTab.scss}
RENAMED
File without changes
|
File without changes
|
File without changes
|
data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataActions.js
RENAMED
@@ -1,8 +1,8 @@
|
|
1
1
|
import { API_OPERATIONS, get, put } from 'foremanReact/redux/API';
|
2
|
-
import { foremanApi } from '
|
2
|
+
import { foremanApi } from '../../../../../services/api';
|
3
3
|
import { HOST_ERRATA_KEY, HOST_ERRATA_APPLICABILITY_KEY, HOST_ERRATA_APPLY_KEY } from './HostErrataConstants';
|
4
|
-
import { getResponseErrorMsgs } from '
|
5
|
-
import { renderTaskStartedToast } from '
|
4
|
+
import { getResponseErrorMsgs } from '../../../../../utils/helpers';
|
5
|
+
import { renderTaskStartedToast } from '../../../../../scenes/Tasks/helpers';
|
6
6
|
|
7
7
|
const errorToast = (error) => {
|
8
8
|
const message = getResponseErrorMsgs(error.response);
|
data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataConstants.js
RENAMED
@@ -29,6 +29,17 @@ export const SEVERITIES_TO_PARAM = {
|
|
29
29
|
[ERRATA_SEVERITIES.CRITICAL]: 'Critical',
|
30
30
|
};
|
31
31
|
|
32
|
+
export const PARAM_TO_FRIENDLY_NAME = {
|
33
|
+
security: 'Security',
|
34
|
+
bugfix: 'Bugfix',
|
35
|
+
enhancement: 'Enhancement',
|
36
|
+
none: 'N/A',
|
37
|
+
low: 'Low',
|
38
|
+
moderate: 'Moderate',
|
39
|
+
important: 'Important',
|
40
|
+
critical: 'Critical',
|
41
|
+
};
|
42
|
+
|
32
43
|
export default HOST_ERRATA_KEY;
|
33
44
|
|
34
45
|
export const ERRATA_SEARCH_QUERY = 'Errata search query';
|
data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataSelectors.js
RENAMED
File without changes
|