katello 3.18.0.rc1 → 4.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of katello might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/app/controllers/katello/api/rhsm/candlepin_dynflow_proxy_controller.rb +0 -19
- data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +1 -3
- data/app/controllers/katello/api/v2/api_controller.rb +1 -2
- data/app/controllers/katello/api/v2/capsule_content_controller.rb +2 -2
- data/app/controllers/katello/api/v2/content_credentials_controller.rb +24 -24
- data/app/controllers/katello/api/v2/content_export_incrementals_controller.rb +98 -0
- data/app/controllers/katello/api/v2/content_exports_controller.rb +88 -0
- data/app/controllers/katello/api/v2/content_imports_controller.rb +59 -0
- data/app/controllers/katello/api/v2/content_view_filters_controller.rb +16 -7
- data/app/controllers/katello/api/v2/content_view_versions_controller.rb +57 -92
- data/app/controllers/katello/api/v2/content_views_controller.rb +12 -3
- data/app/controllers/katello/api/v2/host_debs_controller.rb +1 -0
- data/app/controllers/katello/api/v2/host_errata_controller.rb +2 -2
- data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +2 -3
- data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +20 -7
- data/app/controllers/katello/api/v2/products_bulk_actions_controller.rb +1 -1
- data/app/controllers/katello/api/v2/products_controller.rb +9 -9
- data/app/controllers/katello/api/v2/repositories_controller.rb +5 -19
- data/app/controllers/katello/api/v2/repository_sets_controller.rb +24 -14
- data/app/controllers/katello/api/v2/simple_content_access_controller.rb +34 -0
- data/app/controllers/katello/api/v2/subscriptions_controller.rb +1 -1
- data/app/controllers/katello/api/v2/upstream_subscriptions_controller.rb +8 -4
- data/app/controllers/katello/concerns/api/v2/authorization.rb +10 -0
- data/app/controllers/katello/concerns/api/v2/bulk_hosts_extensions.rb +22 -18
- data/app/controllers/katello/concerns/authorization/api/v2/content_views_controller.rb +1 -1
- data/app/controllers/katello/concerns/registration_controller_extensions.rb +16 -0
- data/app/helpers/katello/sync_management_helper.rb +0 -2
- data/app/lib/actions/candlepin/environment/create.rb +1 -1
- data/app/lib/actions/candlepin/environment/set_content.rb +1 -1
- data/app/lib/actions/helpers/smart_proxy_sync_history_helper.rb +24 -0
- data/app/lib/actions/katello/activation_key/create.rb +9 -11
- data/app/lib/actions/katello/applicability/hosts/bulk_generate.rb +6 -2
- data/app/lib/actions/katello/capsule_content/sync.rb +8 -8
- data/app/lib/actions/katello/capsule_content/sync_capsule.rb +31 -8
- data/app/lib/actions/katello/check_matching_content.rb +17 -0
- data/app/lib/actions/katello/content_view/environment_create.rb +6 -8
- data/app/lib/actions/katello/content_view/promote_to_environment.rb +1 -1
- data/app/lib/actions/katello/content_view/publish.rb +6 -5
- data/app/lib/actions/katello/content_view_version/import.rb +5 -11
- data/app/lib/actions/katello/content_view_version/import_library.rb +17 -0
- data/app/lib/actions/katello/content_view_version/incremental_update.rb +30 -10
- data/app/lib/actions/katello/host/hypervisors_update.rb +4 -4
- data/app/lib/actions/katello/host/update_system_purpose.rb +1 -1
- data/app/lib/actions/katello/host/upload_package_profile.rb +3 -1
- data/app/lib/actions/katello/host/upload_profiles.rb +8 -6
- data/app/lib/actions/katello/organization/create.rb +3 -5
- data/app/lib/actions/katello/organization/destroy.rb +1 -1
- data/app/lib/actions/katello/organization/manifest_delete.rb +3 -5
- data/app/lib/actions/katello/organization/manifest_import.rb +1 -1
- data/app/lib/actions/katello/organization/manifest_refresh.rb +1 -1
- data/app/lib/actions/katello/repository/check_matching_content.rb +3 -1
- data/app/lib/actions/katello/repository/clone_contents.rb +8 -11
- data/app/lib/actions/katello/repository/create.rb +0 -8
- data/app/lib/actions/katello/repository/filtered_index_content.rb +3 -0
- data/app/lib/actions/katello/repository/import_upload.rb +2 -0
- data/app/lib/actions/katello/repository/index_content.rb +1 -0
- data/app/lib/actions/katello/repository/multi_clone_contents.rb +9 -12
- data/app/lib/actions/katello/repository/remove_content.rb +1 -1
- data/app/lib/actions/katello/repository/sync.rb +3 -1
- data/app/lib/actions/katello/repository/update.rb +1 -8
- data/app/lib/actions/katello/repository/upload_files.rb +1 -0
- data/app/lib/actions/middleware/execute_if_contents_changed.rb +4 -1
- data/app/lib/actions/middleware/record_smart_proxy_sync_history.rb +35 -0
- data/app/lib/actions/pulp/consumer/sync_capsule.rb +4 -2
- data/app/lib/actions/pulp/orchestration/repository/refresh_repos.rb +0 -6
- data/app/lib/actions/pulp/repository/distributor_publish.rb +1 -1
- data/app/lib/actions/pulp3/abstract_async_task.rb +1 -0
- data/app/lib/actions/pulp3/capsule_content/refresh_distribution.rb +3 -3
- data/app/lib/actions/pulp3/capsule_content/sync.rb +1 -0
- data/app/lib/actions/pulp3/content_migration.rb +10 -0
- data/app/lib/actions/pulp3/content_migration_presenter.rb +59 -0
- data/app/lib/actions/pulp3/content_view/delete_repository_references.rb +1 -1
- data/app/lib/actions/pulp3/content_view_version/export.rb +6 -1
- data/app/lib/actions/pulp3/import_migration.rb +6 -1
- data/app/lib/actions/pulp3/orchestration/content_view_version/copy_version_units_to_library.rb +2 -1
- data/app/lib/actions/pulp3/orchestration/content_view_version/export.rb +30 -9
- data/app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb +60 -0
- data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +0 -4
- data/app/lib/actions/pulp3/orchestration/repository/generate_metadata.rb +4 -1
- data/app/lib/actions/pulp3/orchestration/repository/import_upload.rb +16 -3
- data/app/lib/actions/pulp3/orchestration/repository/refresh_repos.rb +1 -6
- data/app/lib/actions/pulp3/repository/copy_content.rb +1 -1
- data/app/lib/actions/pulp3/repository/delete.rb +1 -1
- data/app/lib/actions/pulp3/repository/save_version.rb +1 -1
- data/app/lib/actions/pulp3/repository/upload_tag.rb +18 -0
- data/app/lib/katello/concerns/base_template_scope_extensions.rb +8 -0
- data/app/lib/katello/event_daemon/monitor.rb +53 -0
- data/app/lib/katello/event_daemon/runner.rb +99 -0
- data/app/lib/katello/logging.rb +32 -0
- data/app/lib/katello/messaging/connection.rb +1 -7
- data/app/lib/katello/validators/content_view_puppet_module_validator.rb +1 -1
- data/app/models/katello/activation_key.rb +2 -2
- data/app/models/katello/authorization/content_view_filter.rb +15 -0
- data/app/models/katello/authorization/content_view_version.rb +25 -2
- data/app/models/katello/authorization/content_view_version_export_history.rb +1 -1
- data/app/models/katello/authorization/organization.rb +8 -0
- data/app/models/katello/candlepin/repository_mapper.rb +1 -1
- data/app/models/katello/concerns/operatingsystem_extensions.rb +2 -0
- data/app/models/katello/concerns/organization_extensions.rb +2 -2
- data/app/models/katello/concerns/pulp_database_unit.rb +7 -0
- data/app/models/katello/concerns/redhat_extensions.rb +2 -2
- data/app/models/katello/concerns/smart_proxy_extensions.rb +33 -5
- data/app/models/katello/content_migration_progress.rb +4 -0
- data/app/models/katello/content_view.rb +35 -5
- data/app/models/katello/content_view_environment.rb +2 -2
- data/app/models/katello/content_view_filter.rb +5 -0
- data/app/models/katello/content_view_history.rb +2 -1
- data/app/models/katello/content_view_package_filter.rb +1 -1
- data/app/models/katello/content_view_puppet_environment.rb +2 -2
- data/app/models/katello/content_view_puppet_module.rb +8 -0
- data/app/models/katello/content_view_repository.rb +13 -1
- data/app/models/katello/content_view_version.rb +2 -1
- data/app/models/katello/content_view_version_export_history.rb +26 -1
- data/app/models/katello/erratum.rb +3 -1
- data/app/models/katello/glue/candlepin/pool.rb +2 -0
- data/app/models/katello/glue/pulp/repo.rb +0 -6
- data/app/models/katello/glue/pulp/repos.rb +1 -22
- data/app/models/katello/host/subscription_facet.rb +4 -0
- data/app/models/katello/ping.rb +11 -6
- data/app/models/katello/pool.rb +5 -0
- data/app/models/katello/product.rb +3 -3
- data/app/models/katello/repository.rb +36 -3
- data/app/models/katello/smart_proxy_sync_history.rb +8 -0
- data/app/models/katello/subscription_status.rb +3 -2
- data/app/presenters/katello/host_subscription_presenter.rb +3 -4
- data/app/presenters/katello/host_subscriptions_presenter.rb +24 -0
- data/app/services/katello/applicability/applicable_content_helper.rb +44 -15
- data/app/services/katello/candlepin_event_listener.rb +11 -19
- data/app/services/katello/event_monitor/poller_thread.rb +2 -11
- data/app/services/katello/pulp/smart_proxy_repository.rb +0 -15
- data/app/services/katello/pulp3/api/docker.rb +4 -0
- data/app/services/katello/pulp3/content_view_version/export.rb +122 -6
- data/app/services/katello/pulp3/content_view_version/import.rb +37 -22
- data/app/services/katello/pulp3/content_view_version/import_export_common.rb +6 -16
- data/app/services/katello/pulp3/content_view_version/import_validator.rb +84 -0
- data/app/services/katello/pulp3/docker_manifest.rb +1 -0
- data/app/services/katello/pulp3/docker_tag.rb +1 -0
- data/app/services/katello/pulp3/migration.rb +51 -10
- data/app/services/katello/pulp3/repository.rb +13 -4
- data/app/services/katello/pulp3/repository/docker.rb +5 -0
- data/app/services/katello/pulp3/repository/yum.rb +15 -10
- data/app/services/katello/pulp3/task.rb +7 -3
- data/app/services/katello/pulp3/task_group.rb +10 -0
- data/app/services/katello/repository_type.rb +3 -2
- data/app/services/katello/smart_proxy_helper.rb +9 -0
- data/app/views/foreman/hosts/_registration.html.erb +12 -0
- data/app/views/foreman/smart_proxies/_content_tab.html.erb +4 -47
- data/app/views/foreman/smart_proxies/show.html.erb +1 -1
- data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +22 -25
- data/app/views/katello/api/v2/content_view_version_export_histories/show.json.rabl +1 -0
- data/app/views/katello/api/v2/content_views/base.json.rabl +1 -0
- data/app/views/katello/api/v2/content_views/show.json.rabl +6 -0
- data/app/views/katello/api/v2/organizations/show.json.rabl +7 -9
- data/app/views/katello/layouts/react.html.erb +3 -2
- data/app/views/overrides/activation_keys/_host_tab_pane.html.erb +1 -5
- data/app/views/overrides/organizations/_edit_override.html.erb +1 -4
- data/app/views/overrides/smart_proxies/_environment_tab.html.erb +1 -1
- data/app/views/overrides/smart_proxies/_environment_tab_pane.html.erb +1 -1
- data/config/katello.yaml.example +0 -3
- data/config/routes/api/v2.rb +31 -13
- data/db/migrate/20150930183738_migrate_content_hosts.rb +1 -1
- data/db/migrate/20191204214919_add_content_view_version_counts.rb +0 -1
- data/db/migrate/20200514092553_move_katello_fields_from_hostgroups.katello.rb +5 -2
- data/db/migrate/20200929200357_create_katello_smart_proxy_sync_history.rb +13 -0
- data/db/migrate/20201021150008_add_import_only_to_katello_content_view.rb +5 -0
- data/db/migrate/20201119211133_pulp3_migration_progress.rb +9 -0
- data/db/migrate/20210119162528_delete_puppet_and_ostree_repos.rb +56 -0
- data/db/migrate/20210128231228_add_type_and_from_cvv_to_cvv_export_history.rb +14 -0
- data/db/migrate/20210201163238_migrate_background_download_policy_to_migrate.rb +7 -0
- data/db/seeds.d/104-proxy.rb +1 -1
- data/db/seeds.d/111-upgrade_tasks.rb +2 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/capsule-content/capsule-content.controller.js +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/common/views/katello-agent-notice.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-system-purpose-modal.html +35 -40
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-register-os-client.directive.js +17 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +2 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +2 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-client.html +12 -5
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-deb-client.html +38 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-oracle-client.html +5 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-sles-client.html +28 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register.html +14 -11
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.controller.js +6 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-activation-keys.controller.js +8 -3
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-content-hosts.controller.js +9 -3
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-details.controller.js +12 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter-details.html +2 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details.html +7 -7
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-info.html +7 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-publish.html +4 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/content-view-new.controller.js +17 -3
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/views/content-view-new.html +16 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/views/content-views.html +5 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +78 -7
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +17 -20
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +17 -24
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +1292 -1170
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +17 -20
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +858 -807
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +18 -19
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +17 -24
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +17 -18
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +986 -971
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +19 -20
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +9 -9
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +2 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/download-policy.service.js +0 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repository-types.service.js +8 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.controller.js +2 -2
- data/lib/katello/engine.rb +6 -6
- data/lib/katello/middleware/event_daemon.rb +1 -1
- data/lib/katello/permission_creator.rb +35 -14
- data/lib/katello/plugin.rb +8 -3
- data/lib/katello/tasks/delete_orphaned_content.rake +1 -3
- data/lib/katello/tasks/jenkins.rake +1 -1
- data/lib/katello/tasks/pulp3_content_switchover.rake +1 -1
- data/lib/katello/tasks/pulp3_migration.rake +18 -6
- data/lib/katello/tasks/pulp3_migration_abort.rake +22 -0
- data/lib/katello/tasks/pulp3_migration_stats.rake +28 -8
- data/lib/katello/tasks/pulp3_post_migration_check.rake +1 -3
- data/lib/katello/tasks/receptor/extract_orgs.rake +1 -1
- data/lib/katello/tasks/reimport.rake +1 -1
- data/lib/katello/tasks/repository.rake +3 -5
- data/lib/katello/tasks/upgrades/4.0/remove_ostree_puppet_content.rake +16 -0
- data/lib/katello/version.rb +1 -1
- data/lib/proxy_api/container_gateway.rb +21 -0
- data/locale/action_names.rb +51 -51
- data/locale/bn/katello.edit.po +0 -0
- data/locale/bn/katello.po +136 -51
- data/locale/cs/katello.edit.po +0 -0
- data/locale/cs/katello.po +136 -49
- data/locale/de/katello.edit.po +0 -0
- data/locale/de/katello.po +136 -48
- data/locale/en/katello.edit.po +0 -0
- data/locale/en/katello.po +136 -48
- data/locale/es/katello.edit.po +0 -0
- data/locale/es/katello.po +136 -48
- data/locale/fr/katello.edit.po +0 -0
- data/locale/fr/katello.po +136 -48
- data/locale/gu/katello.edit.po +0 -0
- data/locale/gu/katello.po +136 -51
- data/locale/hi/katello.edit.po +0 -0
- data/locale/hi/katello.po +136 -51
- data/locale/it/katello.edit.po +0 -0
- data/locale/it/katello.po +136 -48
- data/locale/ja/katello.edit.po +0 -0
- data/locale/ja/katello.po +136 -48
- data/locale/katello.pot +941 -767
- data/locale/kn/katello.edit.po +0 -0
- data/locale/kn/katello.po +136 -51
- data/locale/ko/katello.edit.po +0 -0
- data/locale/ko/katello.po +136 -48
- data/locale/mr/katello.edit.po +0 -0
- data/locale/mr/katello.po +136 -51
- data/locale/or/katello.edit.po +0 -0
- data/locale/or/katello.po +136 -51
- data/locale/pa/katello.edit.po +0 -0
- data/locale/pa/katello.po +136 -51
- data/locale/pt/katello.edit.po +0 -0
- data/locale/pt/katello.po +136 -51
- data/locale/pt_BR/katello.edit.po +0 -0
- data/locale/pt_BR/katello.po +136 -48
- data/locale/ru/katello.edit.po +0 -0
- data/locale/ru/katello.po +136 -48
- data/locale/ta/katello.edit.po +0 -0
- data/locale/ta/katello.po +136 -51
- data/locale/te/katello.edit.po +0 -0
- data/locale/te/katello.po +136 -51
- data/locale/zh_CN/katello.edit.po +0 -0
- data/locale/zh_CN/katello.po +136 -48
- data/locale/zh_TW/katello.edit.po +0 -0
- data/locale/zh_TW/katello.po +136 -48
- data/package.json +1 -1
- data/webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js +0 -1
- data/webpack/__mocks__/foremanReact/components/Pagination/PaginationHooks.js +2 -0
- data/webpack/__mocks__/foremanReact/components/common/dates/LongDateTime.js +5 -0
- data/webpack/{scenes/ContentViews/Details/Repositories → components/SelectableDropdown}/SelectableDropdown.js +20 -3
- data/webpack/components/SelectableDropdown/__tests__/SelectableDropdown.test.js +45 -0
- data/webpack/components/SelectableDropdown/index.js +3 -0
- data/webpack/components/Table/TableWrapper.js +2 -1
- data/webpack/components/Table/helpers.js +14 -0
- data/webpack/components/TypeAhead/TypeAhead.js +2 -1
- data/webpack/components/TypeAhead/pf3Search/TypeAheadSearch.js +2 -1
- data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +0 -1
- data/webpack/containers/Application/overrides.scss +6 -0
- data/webpack/index.js +6 -0
- data/webpack/redux/actions/RedHatRepositories/helpers.js +5 -5
- data/webpack/scenes/ContentViews/ContentViewsActions.js +31 -2
- data/webpack/scenes/ContentViews/ContentViewsConstants.js +5 -1
- data/webpack/scenes/ContentViews/Copy/ContentViewCopySelectors.js +16 -0
- data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +77 -0
- data/webpack/scenes/ContentViews/Copy/CopyContentViewModal.js +44 -0
- data/webpack/scenes/ContentViews/Copy/__tests__/contentViewCopyResult.fixtures.json +42 -0
- data/webpack/scenes/ContentViews/Copy/__tests__/copyContentView.test.js +39 -0
- data/webpack/scenes/ContentViews/Copy/index.js +4 -0
- data/webpack/scenes/ContentViews/Create/ContentViewCreateSelectors.js +16 -0
- data/webpack/scenes/ContentViews/Create/ContentViewFormComponents.js +58 -0
- data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +175 -0
- data/webpack/scenes/ContentViews/Create/CreateContentViewModal.js +27 -0
- data/webpack/scenes/ContentViews/Create/__tests__/contentViewCreateResult.fixtures.json +42 -0
- data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +92 -0
- data/webpack/scenes/ContentViews/Create/index.js +4 -0
- data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +16 -0
- data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +20 -1
- data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +17 -7
- data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +19 -13
- data/webpack/scenes/ContentViews/Details/Filters/ContentType.js +40 -0
- data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +124 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.fixtures.json +134 -0
- data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +92 -0
- data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +44 -25
- data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.test.js +17 -7
- data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +24 -0
- data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +53 -3
- data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +4 -3
- data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +41 -0
- data/webpack/scenes/ContentViews/helpers.js +13 -0
- data/webpack/scenes/SmartProxy/Content.js +17 -0
- data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +11 -0
- data/webpack/scenes/SmartProxy/SmartProxyContentConstants.js +3 -0
- data/webpack/scenes/SmartProxy/SmartProxyContentSelectors.js +16 -0
- data/webpack/scenes/SmartProxy/SmartProxyContentTable.js +152 -0
- data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentResult.fixtures.json +140 -0
- data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.js +38 -0
- data/webpack/scenes/SmartProxy/index.js +4 -0
- data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +13 -11
- data/webpack/scenes/Subscriptions/Manifest/ManifestActions.js +3 -3
- data/webpack/scenes/Subscriptions/Manifest/__tests__/ManifestActions.test.js +2 -2
- data/webpack/scenes/Subscriptions/Manifest/__tests__/SimpleContentAccess.test.js +2 -2
- data/webpack/test-utils/react-testing-lib-wrapper.js +8 -2
- data/webpack/utils/helpers.js +3 -0
- metadata +110 -31
- data/app/controllers/katello/api/v2/gpg_keys_controller.rb +0 -114
- data/app/overrides/disable_turbolinks_on_proxies_index.rb +0 -5
- data/app/services/katello/event_daemon.rb +0 -135
- data/app/services/katello/pulp/content_counts_calculator.rb +0 -60
- data/lib/katello/tasks/common.rake +0 -7
- data/lib/katello/tasks/reports.rake +0 -4
- data/lib/katello/tasks/upgrades/3.10/update_gpg_key_urls.rake +0 -32
- data/webpack/__mocks__/foremanReact/components/common/Fill/GlobalFill.js +0 -3
- data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.scss +0 -5
- data/webpack/scenes/ContentViews/Table/actionResolver.js +0 -28
@@ -246,4 +246,45 @@ test('No results message is shown for empty search', async (done) => {
|
|
246
246
|
assertNockRequest(withSearchScope);
|
247
247
|
assertNockRequest(searchResultScope, done);
|
248
248
|
});
|
249
|
+
|
250
|
+
test('Displays Create Content View and opens modal with Form', async () => {
|
251
|
+
mockAutocomplete(nockInstance, autocompleteUrl);
|
252
|
+
|
253
|
+
const noResults = {
|
254
|
+
total: 0,
|
255
|
+
subtotal: 0,
|
256
|
+
page: 1,
|
257
|
+
per_page: 20,
|
258
|
+
results: [],
|
259
|
+
};
|
260
|
+
nockInstance
|
261
|
+
.get(cvIndexPath)
|
262
|
+
.query(true)
|
263
|
+
.reply(200, noResults);
|
264
|
+
const {
|
265
|
+
getByText, queryByText, getByLabelText,
|
266
|
+
} = renderWithRedux(<ContentViewsPage />, renderOptions);
|
267
|
+
await patientlyWaitFor(() => expect(queryByText('Create content view')).toBeTruthy());
|
268
|
+
|
269
|
+
expect(queryByText('Description')).not.toBeInTheDocument();
|
270
|
+
expect(queryByText('Name')).not.toBeInTheDocument();
|
271
|
+
expect(queryByText('Label')).not.toBeInTheDocument();
|
272
|
+
expect(queryByText('Composite content view')).not.toBeInTheDocument();
|
273
|
+
expect(queryByText('Component content view')).not.toBeInTheDocument();
|
274
|
+
expect(queryByText('Solve Dependencies')).not.toBeInTheDocument();
|
275
|
+
expect(queryByText('Auto Publish')).not.toBeInTheDocument();
|
276
|
+
expect(queryByText('Import Only')).not.toBeInTheDocument();
|
277
|
+
|
278
|
+
getByLabelText('create_content_view').click();
|
279
|
+
|
280
|
+
expect(getByText('Description')).toBeInTheDocument();
|
281
|
+
expect(getByText('Name')).toBeInTheDocument();
|
282
|
+
expect(getByText('Label')).toBeInTheDocument();
|
283
|
+
expect(getByText('Composite content view')).toBeInTheDocument();
|
284
|
+
expect(getByText('Component content view')).toBeInTheDocument();
|
285
|
+
expect(getByText('Solve Dependencies')).toBeInTheDocument();
|
286
|
+
expect(queryByText('Auto Publish')).not.toBeInTheDocument();
|
287
|
+
expect(getByText('Import Only')).toBeInTheDocument();
|
288
|
+
});
|
289
|
+
|
249
290
|
/* eslint-enable no-useless-escape */
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
2
|
+
|
3
|
+
export const dependenciesHelpText = __('This will solve RPM and module stream dependencies on every publish of this content view. ' +
|
4
|
+
'Dependency solving significantly increases publish time (publishes can take over three times as long) ' +
|
5
|
+
'and filters will be ignored when adding packages to solve dependencies. ' +
|
6
|
+
'Also, certain scenarios involving errata may still cause dependency errors.');
|
7
|
+
|
8
|
+
export const autoPublishHelpText = __('Automatically publish a new version of the composite content view whenever one of its content views is published. ' +
|
9
|
+
'Autopublish will only happen for component views that use the \'Always use latest version\' option.');
|
10
|
+
|
11
|
+
export const importOnlyHelpText = __('Designate whether this content view is for importing from an upstream server. ' +
|
12
|
+
'Import-only content views cannot be published directly.');
|
13
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import PropTypes from 'prop-types';
|
3
|
+
import SmartProxyContentTable from './SmartProxyContentTable';
|
4
|
+
|
5
|
+
const Content = ({ smartProxyId }) => (
|
6
|
+
<SmartProxyContentTable smartProxyId={smartProxyId} />
|
7
|
+
);
|
8
|
+
|
9
|
+
Content.propTypes = {
|
10
|
+
smartProxyId: PropTypes.number,
|
11
|
+
};
|
12
|
+
|
13
|
+
Content.defaultProps = {
|
14
|
+
smartProxyId: null,
|
15
|
+
};
|
16
|
+
|
17
|
+
export default Content;
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { API_OPERATIONS, get } from 'foremanReact/redux/API';
|
2
|
+
import api, { orgId } from '../../services/api';
|
3
|
+
import SMART_PROXY_CONTENT_KEY from './SmartProxyContentConstants';
|
4
|
+
|
5
|
+
const getSmartProxyContent = ({ smartProxyId }) => get({
|
6
|
+
type: API_OPERATIONS.GET,
|
7
|
+
key: SMART_PROXY_CONTENT_KEY,
|
8
|
+
url: api.getApiUrl(`/capsules/${smartProxyId}/content/sync?${orgId()}`),
|
9
|
+
});
|
10
|
+
|
11
|
+
export default getSmartProxyContent;
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import {
|
2
|
+
selectAPIStatus,
|
3
|
+
selectAPIError,
|
4
|
+
selectAPIResponse,
|
5
|
+
} from 'foremanReact/redux/API/APISelectors';
|
6
|
+
import { STATUS } from 'foremanReact/constants';
|
7
|
+
import SMART_PROXY_CONTENT_KEY from './SmartProxyContentConstants';
|
8
|
+
|
9
|
+
export const selectSmartProxyContent = state =>
|
10
|
+
selectAPIResponse(state, SMART_PROXY_CONTENT_KEY) || {};
|
11
|
+
|
12
|
+
export const selectSmartProxyContentStatus = state =>
|
13
|
+
selectAPIStatus(state, SMART_PROXY_CONTENT_KEY) || STATUS.PENDING;
|
14
|
+
|
15
|
+
export const selectSmartProxyContentError = state =>
|
16
|
+
selectAPIError(state, SMART_PROXY_CONTENT_KEY);
|
@@ -0,0 +1,152 @@
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
2
|
+
import PropTypes from 'prop-types';
|
3
|
+
import { useSelector, useDispatch } from 'react-redux';
|
4
|
+
import { wrappable } from '@patternfly/react-table';
|
5
|
+
import { CheckCircleIcon, TimesCircleIcon } from '@patternfly/react-icons';
|
6
|
+
import { STATUS } from 'foremanReact/constants';
|
7
|
+
import { translate as __ } from 'foremanReact/common/I18n';
|
8
|
+
import { urlBuilder } from 'foremanReact/common/urlHelpers';
|
9
|
+
import LongDateTime from 'foremanReact/components/common/dates/LongDateTime';
|
10
|
+
import MainTable from '../../components/Table/MainTable';
|
11
|
+
import getSmartProxyContent from './SmartProxyContentActions';
|
12
|
+
import ContentViewIcon from '../../scenes/ContentViews/components/ContentViewIcon';
|
13
|
+
import {
|
14
|
+
selectSmartProxyContent,
|
15
|
+
selectSmartProxyContentStatus,
|
16
|
+
selectSmartProxyContentError,
|
17
|
+
} from './SmartProxyContentSelectors';
|
18
|
+
|
19
|
+
const SmartProxyContentTable = ({ smartProxyId }) => {
|
20
|
+
const dispatch = useDispatch();
|
21
|
+
const [rows, setRows] = useState([]);
|
22
|
+
const response = useSelector(state => selectSmartProxyContent(state));
|
23
|
+
const status = useSelector(state => selectSmartProxyContentStatus(state));
|
24
|
+
const error = useSelector(state => selectSmartProxyContentError(state));
|
25
|
+
const columnHeaders = [
|
26
|
+
{
|
27
|
+
title: __('Environment'),
|
28
|
+
transforms: [wrappable],
|
29
|
+
},
|
30
|
+
{
|
31
|
+
title: __('Content view'),
|
32
|
+
transforms: [wrappable],
|
33
|
+
},
|
34
|
+
{
|
35
|
+
title: __('Type'),
|
36
|
+
transforms: [wrappable],
|
37
|
+
},
|
38
|
+
{
|
39
|
+
title: __('Last published'),
|
40
|
+
transforms: [wrappable],
|
41
|
+
},
|
42
|
+
{
|
43
|
+
title: __('Repositories'),
|
44
|
+
transforms: [wrappable],
|
45
|
+
},
|
46
|
+
{
|
47
|
+
title: __('Synced to smart proxy'),
|
48
|
+
transforms: [wrappable],
|
49
|
+
},
|
50
|
+
];
|
51
|
+
|
52
|
+
const fetchWithParams = () => {
|
53
|
+
dispatch(getSmartProxyContent({ smartProxyId }));
|
54
|
+
};
|
55
|
+
|
56
|
+
const buildrows = (results) => {
|
57
|
+
const newRows = [];
|
58
|
+
let envCount = 0;
|
59
|
+
results.forEach((env) => {
|
60
|
+
const { name, content_views: contentViews } = env;
|
61
|
+
const cellEnv = {
|
62
|
+
isOpen: false,
|
63
|
+
cells: [name, null, null, null, null, null],
|
64
|
+
};
|
65
|
+
newRows.push(cellEnv);
|
66
|
+
contentViews.forEach((cv) => {
|
67
|
+
const {
|
68
|
+
id, name: cvName, composite, last_published: lastPublished, up_to_date: upToDate, counts,
|
69
|
+
} = cv;
|
70
|
+
const { repositories } = counts;
|
71
|
+
const cvType = <ContentViewIcon composite={composite} />;
|
72
|
+
const upToDateVal = upToDate ? <CheckCircleIcon /> : <TimesCircleIcon />;
|
73
|
+
const cellCv =
|
74
|
+
{
|
75
|
+
parent: envCount,
|
76
|
+
cells: [
|
77
|
+
{
|
78
|
+
title: null,
|
79
|
+
props: {
|
80
|
+
colSpan: 1,
|
81
|
+
},
|
82
|
+
},
|
83
|
+
{
|
84
|
+
title: <a href={urlBuilder('content_views', '', id)}>{cvName}</a>,
|
85
|
+
props: {
|
86
|
+
colSpan: 1,
|
87
|
+
},
|
88
|
+
},
|
89
|
+
{
|
90
|
+
title: cvType,
|
91
|
+
props: {
|
92
|
+
colSpan: 1,
|
93
|
+
},
|
94
|
+
},
|
95
|
+
{
|
96
|
+
title: <LongDateTime date={lastPublished} showRelativeTimeTooltip />,
|
97
|
+
props: {
|
98
|
+
colSpan: 1,
|
99
|
+
},
|
100
|
+
},
|
101
|
+
{
|
102
|
+
title: repositories,
|
103
|
+
props: {
|
104
|
+
colSpan: 1,
|
105
|
+
},
|
106
|
+
},
|
107
|
+
{
|
108
|
+
title: upToDateVal,
|
109
|
+
props: {
|
110
|
+
colSpan: 1,
|
111
|
+
},
|
112
|
+
},
|
113
|
+
],
|
114
|
+
};
|
115
|
+
newRows.push(cellCv);
|
116
|
+
});
|
117
|
+
envCount = newRows.length;
|
118
|
+
});
|
119
|
+
return newRows;
|
120
|
+
};
|
121
|
+
|
122
|
+
const onCollapse = (row, setRow) => (event, rowKey, isOpen) => {
|
123
|
+
const newRows = [...row];
|
124
|
+
newRows[rowKey].isOpen = isOpen;
|
125
|
+
setRow(newRows);
|
126
|
+
};
|
127
|
+
|
128
|
+
|
129
|
+
useEffect(() => fetchWithParams(), []);
|
130
|
+
|
131
|
+
useEffect(() => {
|
132
|
+
if (status !== STATUS.PENDING && response) {
|
133
|
+
const { lifecycle_environments: env } = response;
|
134
|
+
setRows(buildrows(env));
|
135
|
+
}
|
136
|
+
}, [JSON.stringify(response), status, error]);
|
137
|
+
|
138
|
+
|
139
|
+
return (
|
140
|
+
<MainTable onCollapse={onCollapse(rows, setRows)} status={status} cells={columnHeaders} rows={rows} error={error} emptyContentTitle="No content synced" emptyContentBody="No content synced to smart proxy" emptySearchTitle="Empty" emptySearchBody="Empty" />
|
141
|
+
);
|
142
|
+
};
|
143
|
+
|
144
|
+
SmartProxyContentTable.propTypes = {
|
145
|
+
smartProxyId: PropTypes.number,
|
146
|
+
};
|
147
|
+
|
148
|
+
SmartProxyContentTable.defaultProps = {
|
149
|
+
smartProxyId: null,
|
150
|
+
};
|
151
|
+
|
152
|
+
export default SmartProxyContentTable;
|
@@ -0,0 +1,140 @@
|
|
1
|
+
{
|
2
|
+
"last_sync_time": "2021-01-12 14:39:01 -0500",
|
3
|
+
"active_sync_tasks": [],
|
4
|
+
"last_failed_sync_tasks": [],
|
5
|
+
"lifecycle_environments": [
|
6
|
+
{
|
7
|
+
"library": true,
|
8
|
+
"id": 1,
|
9
|
+
"name": "Library",
|
10
|
+
"label": "Library",
|
11
|
+
"description": null,
|
12
|
+
"organization_id": 1,
|
13
|
+
"organization": {
|
14
|
+
"name": "Default Organization",
|
15
|
+
"label": "Default_Organization",
|
16
|
+
"id": 1
|
17
|
+
},
|
18
|
+
"syncable": false,
|
19
|
+
"counts": {
|
20
|
+
"content_hosts": 0,
|
21
|
+
"content_views": 2,
|
22
|
+
"products": 1
|
23
|
+
},
|
24
|
+
"content_views": [
|
25
|
+
{
|
26
|
+
"id": 1,
|
27
|
+
"label": "Default_Organization_View",
|
28
|
+
"name": "Default Organization View",
|
29
|
+
"composite": false,
|
30
|
+
"last_published": "2021-01-05 09:55:20 -0500",
|
31
|
+
"default": true,
|
32
|
+
"up_to_date": true,
|
33
|
+
"counts": {
|
34
|
+
"content_hosts": 0,
|
35
|
+
"products": 1,
|
36
|
+
"repositories": 2
|
37
|
+
}
|
38
|
+
},
|
39
|
+
{
|
40
|
+
"id": 2,
|
41
|
+
"label": "cv1",
|
42
|
+
"name": "cv1",
|
43
|
+
"composite": false,
|
44
|
+
"last_published": "2021-01-12 14:36:31 -0500",
|
45
|
+
"default": false,
|
46
|
+
"up_to_date": true,
|
47
|
+
"counts": {
|
48
|
+
"content_hosts": 0,
|
49
|
+
"products": 1,
|
50
|
+
"repositories": 1
|
51
|
+
}
|
52
|
+
},
|
53
|
+
{
|
54
|
+
"id": 3,
|
55
|
+
"label": "cv2",
|
56
|
+
"name": "cv2",
|
57
|
+
"composite": false,
|
58
|
+
"last_published": "2021-01-12 14:37:05 -0500",
|
59
|
+
"default": false,
|
60
|
+
"up_to_date": true,
|
61
|
+
"counts": {
|
62
|
+
"content_hosts": 0,
|
63
|
+
"products": 1,
|
64
|
+
"repositories": 1
|
65
|
+
}
|
66
|
+
}
|
67
|
+
]
|
68
|
+
},
|
69
|
+
{
|
70
|
+
"library": false,
|
71
|
+
"id": 2,
|
72
|
+
"name": "dev",
|
73
|
+
"label": "dev",
|
74
|
+
"description": null,
|
75
|
+
"organization_id": 1,
|
76
|
+
"organization": {
|
77
|
+
"name": "Default Organization",
|
78
|
+
"label": "Default_Organization",
|
79
|
+
"id": 1
|
80
|
+
},
|
81
|
+
"syncable": false,
|
82
|
+
"counts": {
|
83
|
+
"content_hosts": 0,
|
84
|
+
"content_views": 1,
|
85
|
+
"products": 1
|
86
|
+
},
|
87
|
+
"content_views": [
|
88
|
+
{
|
89
|
+
"id": 2,
|
90
|
+
"label": "cv1",
|
91
|
+
"name": "cv1",
|
92
|
+
"composite": false,
|
93
|
+
"last_published": "2021-01-12 14:36:31 -0500",
|
94
|
+
"default": false,
|
95
|
+
"up_to_date": true,
|
96
|
+
"counts": {
|
97
|
+
"content_hosts": 0,
|
98
|
+
"products": 1,
|
99
|
+
"repositories": 1
|
100
|
+
}
|
101
|
+
}
|
102
|
+
]
|
103
|
+
},
|
104
|
+
{
|
105
|
+
"library": false,
|
106
|
+
"id": 3,
|
107
|
+
"name": "test",
|
108
|
+
"label": "test",
|
109
|
+
"description": null,
|
110
|
+
"organization_id": 1,
|
111
|
+
"organization": {
|
112
|
+
"name": "Default Organization",
|
113
|
+
"label": "Default_Organization",
|
114
|
+
"id": 1
|
115
|
+
},
|
116
|
+
"syncable": true,
|
117
|
+
"counts": {
|
118
|
+
"content_hosts": 0,
|
119
|
+
"content_views": 1,
|
120
|
+
"products": 1
|
121
|
+
},
|
122
|
+
"content_views": [
|
123
|
+
{
|
124
|
+
"id": 2,
|
125
|
+
"label": "cv1",
|
126
|
+
"name": "cv1",
|
127
|
+
"composite": false,
|
128
|
+
"last_published": "2021-01-12 14:36:31 -0500",
|
129
|
+
"default": false,
|
130
|
+
"up_to_date": false,
|
131
|
+
"counts": {
|
132
|
+
"content_hosts": 0,
|
133
|
+
"products": 1,
|
134
|
+
"repositories": 0
|
135
|
+
}
|
136
|
+
}
|
137
|
+
]
|
138
|
+
}
|
139
|
+
]
|
140
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
import { renderWithRedux, patientlyWaitFor } from 'react-testing-lib-wrapper';
|
3
|
+
|
4
|
+
import { nockInstance, assertNockRequest } from '../../../test-utils/nockWrapper';
|
5
|
+
import api from '../../../services/api';
|
6
|
+
import SmartProxyContentTable from '../SmartProxyContentTable';
|
7
|
+
|
8
|
+
const smartProxyContentData = require('./SmartProxyContentResult.fixtures.json');
|
9
|
+
|
10
|
+
const smartProxyContentPath = api.getApiUrl('/capsules/1/content/sync');
|
11
|
+
|
12
|
+
const smartProxyContent = { ...smartProxyContentData };
|
13
|
+
|
14
|
+
const contentTable = <SmartProxyContentTable smartProxyId={1} />;
|
15
|
+
|
16
|
+
test('Can display Smart proxy content table', async (done) => {
|
17
|
+
const detailsScope = nockInstance
|
18
|
+
.get(smartProxyContentPath)
|
19
|
+
.query(true)
|
20
|
+
.reply(200, smartProxyContent);
|
21
|
+
|
22
|
+
const { getByText, getAllByLabelText } = renderWithRedux(contentTable);
|
23
|
+
await patientlyWaitFor(() => expect(getByText('Environment')).toBeInTheDocument());
|
24
|
+
expect(getByText('Content view')).toBeInTheDocument();
|
25
|
+
expect(getByText('Type')).toBeInTheDocument();
|
26
|
+
expect(getByText('Last published')).toBeInTheDocument();
|
27
|
+
expect(getByText('Repositories')).toBeInTheDocument();
|
28
|
+
expect(getByText('Synced to smart proxy')).toBeInTheDocument();
|
29
|
+
expect(getAllByLabelText('Details')[0]).toHaveAttribute('aria-expanded', 'false');
|
30
|
+
getAllByLabelText('Details')[0].click();
|
31
|
+
expect(getAllByLabelText('Details')[0]).toHaveAttribute('aria-expanded', 'true');
|
32
|
+
expect(getByText('Library')).toBeInTheDocument();
|
33
|
+
expect(getByText('Default Organization View')).toBeInTheDocument();
|
34
|
+
expect(getByText('dev')).toBeInTheDocument();
|
35
|
+
|
36
|
+
|
37
|
+
assertNockRequest(detailsScope, done);
|
38
|
+
});
|