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
data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/packages.controller.js
CHANGED
@@ -21,6 +21,7 @@ angular.module('Bastion.packages').controller('PackagesController',
|
|
21
21
|
var nutupane, params = {
|
22
22
|
'organization_id': CurrentOrganization,
|
23
23
|
'search': $location.search().search || "",
|
24
|
+
'repository_id': $location.search().repositoryId || null,
|
24
25
|
'paged': true
|
25
26
|
};
|
26
27
|
|
@@ -108,20 +108,27 @@ angular.module('Bastion.repositories').controller('RepositoryDetailsInfoControll
|
|
108
108
|
|
109
109
|
if ($scope.genericRemoteOptions && $scope.genericRemoteOptions !== []) {
|
110
110
|
$scope.genericRemoteOptions.forEach(function(option) {
|
111
|
-
if (option.type === "Array"
|
112
|
-
repository[option.name] = option.value.split(option.delimiter);
|
111
|
+
if (option.type === "Array") {
|
112
|
+
repository[option.name] = option.value ? option.value.split(option.delimiter) : [];
|
113
113
|
} else {
|
114
114
|
repository[option.name] = option.value;
|
115
115
|
}
|
116
116
|
});
|
117
117
|
}
|
118
118
|
|
119
|
-
if (!_.isEmpty(repository.
|
120
|
-
repository["
|
119
|
+
if (!_.isEmpty(repository.commaIncludeTags)) {
|
120
|
+
repository["include_tags"] = repository.commaIncludeTags.split(",").map(function(tag) {
|
121
121
|
return tag.trim();
|
122
122
|
});
|
123
123
|
} else {
|
124
|
-
repository["
|
124
|
+
repository["include_tags"] = [];
|
125
|
+
}
|
126
|
+
if (!_.isEmpty(repository.commaExcludeTags)) {
|
127
|
+
repository["exclude_tags"] = repository.commaExcludeTags.split(",").map(function(tag) {
|
128
|
+
return tag.trim();
|
129
|
+
});
|
130
|
+
} else {
|
131
|
+
repository["exclude_tags"] = [];
|
125
132
|
}
|
126
133
|
/* eslint-disable camelcase */
|
127
134
|
|
@@ -134,10 +141,15 @@ angular.module('Bastion.repositories').controller('RepositoryDetailsInfoControll
|
|
134
141
|
repository.$update(function (response) {
|
135
142
|
deferred.resolve(response);
|
136
143
|
$scope.repository.ignore_srpms = $scope.repository.ignorable_content && $scope.repository.ignorable_content.includes("srpm");
|
137
|
-
if (!_.isEmpty(response["
|
138
|
-
repository.
|
144
|
+
if (!_.isEmpty(response["include_tags"])) {
|
145
|
+
repository.commaIncludeTags = repository["include_tags"].join(", ");
|
146
|
+
} else {
|
147
|
+
repository.commaIncludeTags = null;
|
148
|
+
}
|
149
|
+
if (!_.isEmpty(response["exclude_tags"])) {
|
150
|
+
repository.commaExcludeTags = repository["exclude_tags"].join(", ");
|
139
151
|
} else {
|
140
|
-
repository.
|
152
|
+
repository.commaExcludeTags = null;
|
141
153
|
}
|
142
154
|
Notification.setSuccessMessage(translate('Repository Saved.'));
|
143
155
|
}, function (response) {
|
@@ -13,7 +13,6 @@
|
|
13
13
|
* @requires DockerManifest
|
14
14
|
* @requires DockerManifestList
|
15
15
|
* @requires DockerTag
|
16
|
-
* @requires OstreeBranch
|
17
16
|
* @requires File
|
18
17
|
* @requires Deb
|
19
18
|
* @requires ModuleStream
|
@@ -25,8 +24,8 @@
|
|
25
24
|
* Provides the functionality for the repository details pane.
|
26
25
|
*/
|
27
26
|
angular.module('Bastion.repositories').controller('RepositoryManageContentController',
|
28
|
-
['$scope', '$state', 'translate', 'Notification', 'Nutupane', 'Repository', 'Package', 'PackageGroup', 'DockerManifest', 'DockerManifestList', 'DockerTag', '
|
29
|
-
function ($scope, $state, translate, Notification, Nutupane, Repository, Package, PackageGroup, DockerManifest, DockerManifestList, DockerTag,
|
27
|
+
['$scope', '$state', 'translate', 'Notification', 'Nutupane', 'Repository', 'Package', 'PackageGroup', 'DockerManifest', 'DockerManifestList', 'DockerTag', 'File', 'Deb', 'ModuleStream', 'AnsibleCollection', 'GenericContent', 'RepositoryTypesService',
|
28
|
+
function ($scope, $state, translate, Notification, Nutupane, Repository, Package, PackageGroup, DockerManifest, DockerManifestList, DockerTag, File, Deb, ModuleStream, AnsibleCollection, GenericContent, RepositoryTypesService) {
|
30
29
|
var contentTypes, nutupaneParams;
|
31
30
|
|
32
31
|
function success(response, selected) {
|
@@ -53,10 +53,15 @@
|
|
53
53
|
'product_id': $scope.$stateParams.productId,
|
54
54
|
'id': $scope.$stateParams.repositoryId
|
55
55
|
}, function () {
|
56
|
-
if (!_.isEmpty($scope.repository["
|
57
|
-
$scope.repository.
|
56
|
+
if (!_.isEmpty($scope.repository["include_tags"])) {
|
57
|
+
$scope.repository.commaIncludeTags = $scope.repository["include_tags"].join(", ");
|
58
58
|
} else {
|
59
|
-
$scope.repository.
|
59
|
+
$scope.repository.commaIncludeTags = "";
|
60
|
+
}
|
61
|
+
if (!_.isEmpty($scope.repository["exclude_tags"])) {
|
62
|
+
$scope.repository.commaExcludeTags = $scope.repository["exclude_tags"].join(", ");
|
63
|
+
} else {
|
64
|
+
$scope.repository.commaExcludeTags = "";
|
60
65
|
}
|
61
66
|
$scope.page.loading = false;
|
62
67
|
$scope.repositoryWrapper.repository = $scope.repository;
|
@@ -28,31 +28,37 @@
|
|
28
28
|
</dl>
|
29
29
|
|
30
30
|
<div class="divider"></div>
|
31
|
+
|
32
|
+
<div ng-show="repository.content_type === 'yum'" >
|
33
|
+
<h4 translate>Publishing Settings</h4>
|
34
|
+
|
35
|
+
<dl class="dl-horizontal dl-horizontal-left">
|
36
|
+
<dt>
|
37
|
+
<span translate>Restrict to architecture</span>
|
38
|
+
<i class="pficon-info" title="{{ 'The repository will be enabled by default on content hosts with the selected architecture.' | translate }}"></i>
|
39
|
+
</dt>
|
40
|
+
<dd bst-edit-select="repository.arch==='noarch'?'No restriction':repository.arch"
|
41
|
+
selector="repository.arch"
|
42
|
+
options="architectures()"
|
43
|
+
on-save="save(repository)">
|
44
|
+
</dd>
|
45
|
+
|
46
|
+
<dt>
|
47
|
+
<span translate>Restrict to <br />OS version</span>
|
48
|
+
<i class="pficon-info" title="{{ 'The repository will be enabled by default on content hosts with the selected OS version.' | translate }}"></i>
|
49
|
+
</dt>
|
50
|
+
<dd bst-edit-select="repository.os_versions.length ? formatOSVersions() : 'No restriction'"
|
51
|
+
selector="selectedOSVersion"
|
52
|
+
options="osVersionsOptions()"
|
53
|
+
on-save="save(repository)">
|
54
|
+
</dd>
|
55
|
+
</dl>
|
56
|
+
<div class="divider"></div>
|
57
|
+
</div>
|
58
|
+
|
31
59
|
<h4 translate>Sync Settings</h4>
|
32
|
-
<dl class="dl-horizontal dl-horizontal-left">
|
33
|
-
<span ng-show="repository.content_type === 'yum'" >
|
34
|
-
<dt>
|
35
|
-
<span translate>Restrict to architecture</span>
|
36
|
-
<i class="pficon-info" title="{{ 'The repository will be enabled by default on content hosts with the selected architecture.' | translate }}"></i>
|
37
|
-
</dt>
|
38
|
-
<dd bst-edit-select="repository.arch==='noarch'?'No restriction':repository.arch"
|
39
|
-
selector="repository.arch"
|
40
|
-
options="architectures()"
|
41
|
-
on-save="save(repository)">
|
42
|
-
</dd>
|
43
|
-
</span>
|
44
60
|
|
45
|
-
|
46
|
-
<dt>
|
47
|
-
<span translate>Restrict to <br />OS version</span>
|
48
|
-
<i class="pficon-info" title="{{ 'The repository will be enabled by default on content hosts with the selected OS version.' | translate }}"></i>
|
49
|
-
</dt>
|
50
|
-
<dd bst-edit-select="repository.os_versions.length ? formatOSVersions() : 'No restriction'"
|
51
|
-
selector="selectedOSVersion"
|
52
|
-
options="osVersionsOptions()"
|
53
|
-
on-save="save(repository)">
|
54
|
-
</dd>
|
55
|
-
</span>
|
61
|
+
<dl class="dl-horizontal dl-horizontal-left">
|
56
62
|
|
57
63
|
<dt ng-show="repository.content_type !== 'docker'" translate>Upstream URL</dt>
|
58
64
|
<dt ng-show="repository.content_type === 'docker'" translate>Registry URL</dt>
|
@@ -304,7 +310,7 @@
|
|
304
310
|
options="certs()"
|
305
311
|
on-save="save(repository)">
|
306
312
|
</dd>
|
307
|
-
<span ng-if="repository.content_type == 'yum' || repository.content_type == 'deb'">
|
313
|
+
<span ng-if="repository.content_type == 'yum' || repository.content_type == 'deb' || repository.content_type == 'docker'">
|
308
314
|
<dt translate>Download Policy</dt>
|
309
315
|
<dd bst-edit-select="downloadPolicyDisplay(repository.download_policy)"
|
310
316
|
readonly="denied('edit_products', product)"
|
@@ -326,15 +332,13 @@
|
|
326
332
|
</dd>
|
327
333
|
</span>
|
328
334
|
<span ng-if="repository.content_type == 'docker'">
|
329
|
-
<dt translate>
|
330
|
-
<dd bst-edit-text="repository.
|
335
|
+
<dt translate>Include Tags</dt>
|
336
|
+
<dd bst-edit-text="repository.commaIncludeTags"
|
331
337
|
on-save="save(repository)"
|
332
338
|
readonly="denied('edit_products', product)">
|
333
339
|
</dd>
|
334
|
-
|
335
|
-
|
336
|
-
<dt translate>Limit Sync Tags</dt>
|
337
|
-
<dd bst-edit-text="repository.commaTagsWhitelist"
|
340
|
+
<dt translate>Exclude Tags</dt>
|
341
|
+
<dd bst-edit-text="repository.commaExcludeTags"
|
338
342
|
on-save="save(repository)"
|
339
343
|
readonly="denied('edit_products', product)">
|
340
344
|
</dd>
|
@@ -64,7 +64,7 @@ angular.module('Bastion.repositories').controller('NewRepositoryController',
|
|
64
64
|
$scope.repository = new Repository({'product_id': $scope.$stateParams.productId, unprotected: true,
|
65
65
|
'checksum_type': null, 'verify_ssl_on_sync': true,
|
66
66
|
'download_policy': BastionConfig.defaultDownloadPolicy, 'arch': null,
|
67
|
-
'mirroring_policy': MirroringPolicy.defaultMirroringPolicy});
|
67
|
+
'mirroring_policy': MirroringPolicy.defaultMirroringPolicy, 'include_tags': '', 'exclude_tags': '*-source'});
|
68
68
|
|
69
69
|
$scope.product = Product.get({id: $scope.$stateParams.productId}, function () {
|
70
70
|
$scope.page.loading = false;
|
@@ -138,7 +138,7 @@ angular.module('Bastion.repositories').controller('NewRepositoryController',
|
|
138
138
|
repository.ignorable_content = [];
|
139
139
|
}
|
140
140
|
}
|
141
|
-
if (repository.content_type !== 'yum' && repository.content_type !== 'deb' ) {
|
141
|
+
if (repository.content_type !== 'yum' && repository.content_type !== 'deb' && repository.content_type !== 'docker') {
|
142
142
|
repository['download_policy'] = '';
|
143
143
|
}
|
144
144
|
if (repository.arch === 'No restriction') {
|
@@ -160,6 +160,20 @@ angular.module('Bastion.repositories').controller('NewRepositoryController',
|
|
160
160
|
}
|
161
161
|
});
|
162
162
|
}
|
163
|
+
if (!_.isEmpty(repository.include_tags)) {
|
164
|
+
repository["include_tags"] = repository.include_tags.split(",").map(function(tag) {
|
165
|
+
return tag.trim();
|
166
|
+
});
|
167
|
+
} else {
|
168
|
+
repository["include_tags"] = [];
|
169
|
+
}
|
170
|
+
if (!_.isEmpty(repository.exclude_tags)) {
|
171
|
+
repository["exclude_tags"] = repository.exclude_tags.split(",").map(function(tag) {
|
172
|
+
return tag.trim();
|
173
|
+
});
|
174
|
+
} else {
|
175
|
+
repository["exclude_tags"] = [];
|
176
|
+
}
|
163
177
|
repository.$save(success, error);
|
164
178
|
};
|
165
179
|
|
@@ -39,29 +39,33 @@
|
|
39
39
|
</select>
|
40
40
|
</div>
|
41
41
|
|
42
|
-
|
42
|
+
</div>
|
43
|
+
|
44
|
+
<div ng-show="repository.content_type === 'yum'">
|
45
|
+
<h4 translate> Publishing Settings </h4>
|
46
|
+
<div bst-form-group label="{{ 'Restrict to Architecture' | translate }}">
|
43
47
|
<select id="architecture_restricted"
|
44
48
|
name="architecture_restricted"
|
45
49
|
ng-model="repository.arch"
|
46
50
|
ng-options="arch.id as arch.name for arch in architecture">
|
47
51
|
</select>
|
52
|
+
<p class="help-block" translate>
|
53
|
+
The repository will be enabled by default on content hosts with the selected architecture.
|
54
|
+
</p>
|
48
55
|
</div>
|
49
56
|
|
50
|
-
<div
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
<p class="help-block" translate>
|
60
|
-
The repository will be enabled by default on content hosts with the selected OS version.
|
61
|
-
</p>
|
57
|
+
<div bst-form-group label="{{ 'Restrict to OS version' | translate }}">
|
58
|
+
<select id="os_versions"
|
59
|
+
name="os_versions"
|
60
|
+
ng-model="repository.os_versions"
|
61
|
+
ng-options="tag as tag.name for tag in osVersionsOptions track by tag.id">
|
62
|
+
</select>
|
63
|
+
<p class="help-block" translate>
|
64
|
+
The repository will be enabled by default on content hosts with the selected OS version.
|
65
|
+
</p>
|
62
66
|
</div>
|
63
|
-
|
64
67
|
</div>
|
68
|
+
|
65
69
|
<div ng-show="repository.content_type !== undefined">
|
66
70
|
<h4 translate> Sync Settings </h4>
|
67
71
|
<div bst-form-group label="{{ 'Upstream URL' | translate }} ">
|
@@ -259,7 +263,7 @@
|
|
259
263
|
</div>
|
260
264
|
</div>
|
261
265
|
|
262
|
-
<div bst-form-group label="{{ 'Download Policy' | translate }}" ng-if="repository.content_type === 'yum' || repository.content_type === 'deb'">
|
266
|
+
<div bst-form-group label="{{ 'Download Policy' | translate }}" ng-if="repository.content_type === 'yum' || repository.content_type === 'deb' || repository.content_type === 'docker'">
|
263
267
|
<select id="download_policy"
|
264
268
|
name="download_policy"
|
265
269
|
ng-model="repository.download_policy"
|
@@ -288,6 +292,22 @@
|
|
288
292
|
</p>
|
289
293
|
</div>
|
290
294
|
|
295
|
+
<div bst-form-group label="{{ 'Include Tags' | translate }}" ng-if="(repository.content_type === 'docker')">
|
296
|
+
<input id="include_tags" name="include_tags" ng-model="repository.include_tags" type="text"/>
|
297
|
+
|
298
|
+
<p class="help-block">
|
299
|
+
<span translate>A comma-separated list of container image tags to include when syncing.</span><br />
|
300
|
+
</p>
|
301
|
+
</div>
|
302
|
+
|
303
|
+
<div bst-form-group label="{{ 'Exclude Tags' | translate }}" ng-if="(repository.content_type === 'docker')">
|
304
|
+
<input id="exclude_tags" name="exclude_tags" ng-model="repository.exclude_tags" type="text"/>
|
305
|
+
|
306
|
+
<p class="help-block">
|
307
|
+
<span translate>A comma-separated list of container image tags to exclude when syncing. Source images are excluded by default because they are often large and unwanted.</span><br />
|
308
|
+
</p>
|
309
|
+
</div>
|
310
|
+
|
291
311
|
<div bst-form-group label="{{ 'Retain package versions' | translate }}" ng-if="(repository.content_type === 'yum' && repository.mirroring_policy === 'additive')">
|
292
312
|
<input id="retain_package_versions_count" name="retain_package_versions_count" ng-model="repository.retain_package_versions_count" type="number"/>
|
293
313
|
|
@@ -4,8 +4,6 @@
|
|
4
4
|
*
|
5
5
|
* @requires $scope
|
6
6
|
* @requires $q
|
7
|
-
* @requires $timeout
|
8
|
-
* @requires $http
|
9
7
|
* @requires Notification
|
10
8
|
* @requires Task
|
11
9
|
* @requires Organization
|
@@ -18,8 +16,8 @@
|
|
18
16
|
* Provides the functionality for the repo discovery action pane.
|
19
17
|
*/
|
20
18
|
angular.module('Bastion.products').controller('DiscoveryController',
|
21
|
-
['$scope', '$q', '$
|
22
|
-
function ($scope, $q, $
|
19
|
+
['$scope', '$q', '$filter', 'Notification', 'Task', 'Organization', 'CurrentOrganization', 'DiscoveryRepositories', 'ContainerRegistries', 'translate',
|
20
|
+
function ($scope, $q, $filter, Notification, Task, Organization, CurrentOrganization, DiscoveryRepositories, ContainerRegistries, translate) {
|
23
21
|
var transformRows, setDiscoveryDetails;
|
24
22
|
|
25
23
|
$scope.discovery = {
|
@@ -37,6 +35,9 @@ angular.module('Bastion.products').controller('DiscoveryController',
|
|
37
35
|
{id: "docker", name: "Container Images"}
|
38
36
|
];
|
39
37
|
$scope.hideSwitcher = true;
|
38
|
+
|
39
|
+
// scope.table may have been set when clicking in from products
|
40
|
+
// otherwise set a simple table since there is no BastionResource here
|
40
41
|
if (!$scope.table) {
|
41
42
|
$scope.table = {
|
42
43
|
rows: [],
|
data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.routes.js
CHANGED
@@ -42,13 +42,14 @@ angular.module('Bastion.products').config(['$stateProvider', function ($statePro
|
|
42
42
|
});
|
43
43
|
|
44
44
|
$stateProvider.state("product-discovery", {
|
45
|
-
abstract: true,
|
46
45
|
url: '/products/discovery',
|
47
|
-
|
48
|
-
|
46
|
+
templateUrl: 'products/discovery/views/discovery-base.html',
|
47
|
+
permission: 'edit_products',
|
48
|
+
redirectTo: 'product-discovery.scan'
|
49
49
|
})
|
50
50
|
.state("product-discovery.scan", {
|
51
51
|
url: '/scan',
|
52
|
+
controller: 'DiscoveryController',
|
52
53
|
permission: 'edit_products',
|
53
54
|
templateUrl: 'products/discovery/views/discovery.html',
|
54
55
|
ncyBreadcrumb: {
|
data/lib/katello/engine.rb
CHANGED
@@ -226,6 +226,10 @@ module Katello
|
|
226
226
|
::AuditSearch::ClassMethods.prepend Katello::Concerns::AuditSearch
|
227
227
|
::Widget.singleton_class.prepend Katello::Concerns::WidgetExtensions::ClassMethods
|
228
228
|
|
229
|
+
if ::Katello.with_remote_execution?
|
230
|
+
::RemoteExecutionProxySelector.prepend Katello::Concerns::RemoteExecutionProxySelectorExtensions
|
231
|
+
end
|
232
|
+
|
229
233
|
load 'katello/repository_types.rb'
|
230
234
|
load 'katello/scheduled_jobs.rb'
|
231
235
|
|
@@ -124,7 +124,7 @@ module Katello
|
|
124
124
|
:finder_scope => :editable
|
125
125
|
@plugin.permission :destroy_content_views,
|
126
126
|
{
|
127
|
-
'katello/api/v2/content_views' => [:destroy, :remove],
|
127
|
+
'katello/api/v2/content_views' => [:destroy, :remove, :bulk_delete_versions],
|
128
128
|
'katello/api/v2/content_view_versions' => [:destroy]
|
129
129
|
},
|
130
130
|
:resource_type => 'Katello::ContentView',
|
@@ -29,6 +29,7 @@ Foreman::AccessControl.permission(:edit_hosts).actions.concat [
|
|
29
29
|
'katello/api/v2/hosts_bulk_actions/traces',
|
30
30
|
'katello/api/v2/hosts_bulk_actions/resolve_traces',
|
31
31
|
'katello/api/v2/hosts_bulk_actions/system_purpose',
|
32
|
+
'katello/api/v2/hosts_bulk_actions/change_content_source',
|
32
33
|
'katello/api/rhsm/candlepin_dynflow_proxy/upload_package_profile',
|
33
34
|
'katello/api/rhsm/candlepin_dynflow_proxy/upload_profiles',
|
34
35
|
'katello/api/rhsm/candlepin_dynflow_proxy/deb_package_profile',
|
@@ -36,7 +37,8 @@ Foreman::AccessControl.permission(:edit_hosts).actions.concat [
|
|
36
37
|
'katello/api/rhsm/candlepin_proxies/hypervisors_update',
|
37
38
|
'katello/api/rhsm/candlepin_proxies/async_hypervisors_update',
|
38
39
|
'katello/api/rhsm/candlepin_proxies/hypervisors_heartbeat',
|
39
|
-
'katello/api/rhsm/candlepin_proxies/upload_tracer_profile'
|
40
|
+
'katello/api/rhsm/candlepin_proxies/upload_tracer_profile',
|
41
|
+
'hosts/change_content_source_data'
|
40
42
|
]
|
41
43
|
|
42
44
|
Foreman::AccessControl.permission(:view_hosts).actions.concat [
|
data/lib/katello/plugin.rb
CHANGED
@@ -299,16 +299,19 @@ Foreman::Plugin.register :katello do
|
|
299
299
|
|
300
300
|
describe_host do
|
301
301
|
overview_buttons_provider :content_host_overview_button
|
302
|
+
multiple_actions_provider :hosts_change_content_source
|
302
303
|
end
|
303
304
|
|
304
305
|
if Katello.with_remote_execution?
|
305
306
|
RemoteExecutionFeature.register(:katello_package_install, N_("Katello: Install Package"), :description => N_("Install package via Katello interface"), :provided_inputs => ['package'])
|
307
|
+
RemoteExecutionFeature.register(:katello_package_install_by_search, N_("Katello: Install packages by search query"), :description => N_("Install packages via Katello interface"), :provided_inputs => ['Package search query'])
|
306
308
|
RemoteExecutionFeature.register(:katello_package_update, N_("Katello: Update Package"), :description => N_("Update package via Katello interface"), :provided_inputs => ['package'])
|
307
309
|
RemoteExecutionFeature.register(:katello_package_remove, N_("Katello: Remove Package"), :description => N_("Remove package via Katello interface"), :provided_inputs => ['package'])
|
308
310
|
RemoteExecutionFeature.register(:katello_group_install, N_("Katello: Install Package Group"), :description => N_("Install package group via Katello interface"), :provided_inputs => ['package'])
|
309
311
|
RemoteExecutionFeature.register(:katello_group_update, N_("Katello: Update Package Group"), :description => N_("Update package group via Katello interface"), :provided_inputs => ['package'])
|
310
312
|
RemoteExecutionFeature.register(:katello_group_remove, N_("Katello: Remove Package Group"), :description => N_("Remove package group via Katello interface"), :provided_inputs => ['package'])
|
311
313
|
RemoteExecutionFeature.register(:katello_errata_install, N_("Katello: Install Errata"), :description => N_("Install errata via Katello interface"), :provided_inputs => ['errata'])
|
314
|
+
RemoteExecutionFeature.register(:katello_errata_install_by_search, N_("Katello: Install errata by search query"), :description => N_("Install errata using scoped search query"), :provided_inputs => ['Errata search query'])
|
312
315
|
RemoteExecutionFeature.register(:katello_service_restart, N_("Katello: Service Restart"), :description => N_("Restart Services via Katello interface"), :provided_inputs => ['helpers'])
|
313
316
|
RemoteExecutionFeature.register(:katello_host_tracer_resolve, N_("Katello: Resolve Traces"), :description => N_("Resolve traces via Katello interface"), :provided_inputs => ['ids'])
|
314
317
|
RemoteExecutionFeature.register(:katello_module_stream_action, N_("Katello: Module Stream Actions"),
|
@@ -339,7 +342,7 @@ Foreman::Plugin.register :katello do
|
|
339
342
|
|
340
343
|
register_info_provider Katello::Host::InfoProvider
|
341
344
|
|
342
|
-
|
345
|
+
medium_providers_registry.register(Katello::ManagedContentMediumProvider)
|
343
346
|
|
344
347
|
Katello::PermissionCreator.new(self).define
|
345
348
|
add_all_permissions_to_default_roles
|
@@ -20,7 +20,6 @@ Katello::RepositoryTypeManager.register(::Katello::Repository::DEB_TYPE) do
|
|
20
20
|
|
21
21
|
default_managed_content_type Katello::Deb::CONTENT_TYPE
|
22
22
|
content_type Katello::Deb,
|
23
|
-
:pulp2_service_class => ::Katello::Pulp::Deb,
|
24
23
|
:pulp3_service_class => ::Katello::Pulp3::Deb,
|
25
24
|
:removable => true,
|
26
25
|
:uploadable => true
|
@@ -19,24 +19,24 @@ Katello::RepositoryTypeManager.register(::Katello::Repository::DOCKER_TYPE) do
|
|
19
19
|
distribution_class PulpContainerClient::ContainerContainerDistribution
|
20
20
|
repo_sync_url_class PulpContainerClient::RepositorySyncURL
|
21
21
|
|
22
|
+
index_additional_data do |repo|
|
23
|
+
Katello::DockerMetaTag.import_meta_tags([repo])
|
24
|
+
end
|
25
|
+
|
22
26
|
content_type Katello::DockerManifest,
|
23
27
|
:priority => 1,
|
24
|
-
:pulp2_service_class => ::Katello::Pulp::DockerManifest,
|
25
28
|
:pulp3_service_class => ::Katello::Pulp3::DockerManifest,
|
26
29
|
:removable => true,
|
27
30
|
:uploadable => true
|
28
31
|
content_type Katello::DockerManifestList,
|
29
32
|
:priority => 2,
|
30
|
-
:pulp2_service_class => ::Katello::Pulp::DockerManifestList,
|
31
33
|
:pulp3_service_class => ::Katello::Pulp3::DockerManifestList
|
32
34
|
content_type Katello::DockerTag,
|
33
35
|
:priority => 3,
|
34
|
-
:pulp2_service_class => ::Katello::Pulp::DockerTag,
|
35
36
|
:pulp3_service_class => ::Katello::Pulp3::DockerTag,
|
36
37
|
:primary_content => true
|
37
38
|
content_type Katello::DockerBlob,
|
38
39
|
:priority => 4,
|
39
|
-
:pulp2_service_class => ::Katello::Pulp::DockerBlob,
|
40
40
|
:pulp3_service_class => ::Katello::Pulp3::DockerBlob,
|
41
41
|
:index => false
|
42
42
|
end
|
@@ -19,7 +19,6 @@ Katello::RepositoryTypeManager.register(::Katello::Repository::FILE_TYPE) do
|
|
19
19
|
repo_sync_url_class PulpFileClient::RepositorySyncURL
|
20
20
|
|
21
21
|
content_type Katello::FileUnit,
|
22
|
-
:pulp2_service_class => ::Katello::Pulp::FileUnit,
|
23
22
|
:pulp3_service_class => ::Katello::Pulp3::FileUnit,
|
24
23
|
:removable => true,
|
25
24
|
:uploadable => true
|
@@ -21,12 +21,14 @@ Katello::RepositoryTypeManager.register('ostree') do
|
|
21
21
|
url_description N_("URL of an OSTree repository.")
|
22
22
|
|
23
23
|
generic_content_type 'ostree_ref',
|
24
|
+
pluralized_name: "OSTree Refs",
|
24
25
|
model_class: Katello::GenericContentUnit,
|
25
26
|
pulp3_api: PulpOstreeClient::ContentRefsApi,
|
26
27
|
pulp3_service_class: Katello::Pulp3::GenericContentUnit,
|
27
28
|
model_name: lambda { |pulp_unit| pulp_unit["name"] },
|
28
29
|
model_version: lambda { |pulp_unit| pulp_unit["checksum"] },
|
29
30
|
uploadable: true,
|
31
|
+
generic_browser: true,
|
30
32
|
repository_import_on_upload: true
|
31
33
|
|
32
34
|
import_attribute :ref, :content_type => 'ostree_ref',
|
@@ -48,4 +50,6 @@ Katello::RepositoryTypeManager.register('ostree') do
|
|
48
50
|
:required => true
|
49
51
|
|
50
52
|
default_managed_content_type :ostree_ref
|
53
|
+
|
54
|
+
test_url 'https://fixtures.pulpproject.org/ostree/small/'
|
51
55
|
end
|
@@ -49,6 +49,10 @@ Katello::RepositoryTypeManager.register('python') do
|
|
49
49
|
uploadable: true,
|
50
50
|
duplicates_allowed: false,
|
51
51
|
filename_key: :filename,
|
52
|
-
generic_browser: true
|
52
|
+
generic_browser: true,
|
53
|
+
test_upload_path: 'test/fixtures/files/shelf_reader-0.1-py2-none-any.whl'
|
53
54
|
default_managed_content_type :python_package
|
55
|
+
|
56
|
+
test_url 'https://fixtures.pulpproject.org/python-pypi/'
|
57
|
+
test_url_root_options generic_remote_options: {includes: ['celery']}.to_json
|
54
58
|
end
|
@@ -21,35 +21,28 @@ Katello::RepositoryTypeManager.register(::Katello::Repository::YUM_TYPE) do
|
|
21
21
|
default_managed_content_type Katello::Rpm::CONTENT_TYPE
|
22
22
|
content_type Katello::Rpm,
|
23
23
|
:priority => 1,
|
24
|
-
:pulp2_service_class => ::Katello::Pulp::Rpm,
|
25
24
|
:pulp3_service_class => ::Katello::Pulp3::Rpm,
|
26
25
|
:primary_content => true,
|
27
26
|
:removable => true,
|
28
27
|
:uploadable => true
|
29
28
|
content_type Katello::ModuleStream,
|
30
29
|
:priority => 2,
|
31
|
-
:pulp2_service_class => ::Katello::Pulp::ModuleStream,
|
32
30
|
:pulp3_service_class => ::Katello::Pulp3::ModuleStream
|
33
31
|
content_type Katello::Erratum, :priority => 3,
|
34
|
-
:pulp2_service_class => ::Katello::Pulp::Erratum,
|
35
32
|
:pulp3_service_class => ::Katello::Pulp3::Erratum,
|
36
|
-
:primary_content => true
|
33
|
+
:primary_content => true, :mutable => true
|
37
34
|
content_type Katello::PackageGroup,
|
38
|
-
:pulp2_service_class => ::Katello::Pulp::PackageGroup,
|
39
35
|
:pulp3_service_class => ::Katello::Pulp3::PackageGroup
|
40
36
|
content_type Katello::YumMetadataFile,
|
41
|
-
:pulp2_service_class => ::Katello::Pulp::YumMetadataFile,
|
42
37
|
:pulp3_service_class => ::Katello::Pulp3::YumMetadataFile,
|
43
38
|
:index_on_pulp3 => false
|
44
39
|
content_type Katello::Srpm,
|
45
|
-
:pulp2_service_class => ::Katello::Pulp::Srpm,
|
46
40
|
:pulp3_service_class => ::Katello::Pulp3::Srpm,
|
47
41
|
:removable => true, :uploadable => true
|
48
42
|
content_type Katello::Distribution, :priority => 4,
|
49
|
-
:pulp2_service_class => ::Katello::Pulp::Distribution,
|
50
43
|
:pulp3_service_class => ::Katello::Pulp3::Distribution,
|
51
44
|
:index => false
|
52
|
-
content_type Katello::PackageCategory, :priority => 4, :
|
45
|
+
content_type Katello::PackageCategory, :priority => 4, :index => false
|
53
46
|
|
54
47
|
index_additional_data { |repo, target_repo = nil| repo.import_distribution_data(target_repo) }
|
55
48
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
namespace :katello do
|
2
|
+
desc <<-DESCRIPTION
|
3
|
+
Marks a content view import only or otherwise. Only 'import_only' Content Views can import content via import/export process.
|
4
|
+
Options:
|
5
|
+
ID - ID of the content view that will be marked import
|
6
|
+
VALUE - If true the provided content view will be marked as import_only. This is the default.
|
7
|
+
If false the import_only flag of provided content view will be reset.
|
8
|
+
DESCRIPTION
|
9
|
+
|
10
|
+
task :set_content_view_import_only => ["environment"] do
|
11
|
+
def fetch_content_view
|
12
|
+
if ENV['ID'].blank?
|
13
|
+
fail 'Content view `ID` required.'
|
14
|
+
end
|
15
|
+
::Katello::ContentView.find_by(id: ENV['ID'])
|
16
|
+
end
|
17
|
+
|
18
|
+
def mark_import_only(value: true)
|
19
|
+
User.current = User.anonymous_admin
|
20
|
+
content_view = fetch_content_view
|
21
|
+
fail('Composite content views cannot be marked import_only. Check the content view id.') if content_view.composite?
|
22
|
+
fail('Default Organization View cannot be marked import_only. Check the content view id.') if content_view.default?
|
23
|
+
content_view.import_only = value
|
24
|
+
if content_view.save(validate: false)
|
25
|
+
$stdout.print("Content View '#{content_view.name}'s import_only value updated to #{content_view.import_only} ")
|
26
|
+
else
|
27
|
+
$stderr.print("Unable to set the content view import_only to #{value}. Check the content view id.")
|
28
|
+
$stderr.print(content_view.errors.inspect)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
value = ENV['VALUE'].blank? || ::Foreman::Cast.to_bool(ENV['VALUE'])
|
32
|
+
mark_import_only(value: value)
|
33
|
+
end
|
34
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
namespace :katello do
|
2
2
|
task :import_applicability => ["environment"] do
|
3
3
|
Katello::Host::ContentFacet.find_each do |facet|
|
4
|
-
facet.
|
4
|
+
facet.calculate_and_import_applicability
|
5
5
|
rescue StandardError => exception
|
6
6
|
puts _('Error importing applicability for %{name} - %{id}: %{message}') %
|
7
7
|
{:name => facet.host.name, :id => facet.host.id, :message => exception.message}
|
@@ -2,8 +2,6 @@ require File.expand_path("../engine", File.dirname(__FILE__))
|
|
2
2
|
|
3
3
|
begin
|
4
4
|
namespace :jenkins do
|
5
|
-
ENV['USE_MEAN_TIME_REPORTER'] = '1' unless ENV['USE_MEAN_TIME_REPORTER'] == '0'
|
6
|
-
|
7
5
|
task :katello do
|
8
6
|
Rake::Task['jenkins:setup:minitest'].invoke
|
9
7
|
Rake::Task['rake:test:katello'].invoke
|
@@ -119,7 +119,10 @@ namespace :katello do
|
|
119
119
|
puts "Repository #{repo.id} Missing"
|
120
120
|
if repo.content_view.default?
|
121
121
|
puts "Recreating #{repo.id}"
|
122
|
-
|
122
|
+
if commit?
|
123
|
+
ForemanTasks.sync_task(::Actions::Katello::Repository::Create, repo, force_repo_create: true)
|
124
|
+
repo.reload.index_content
|
125
|
+
end
|
123
126
|
else
|
124
127
|
puts "Deleting #{repo.id}"
|
125
128
|
ForemanTasks.sync_task(::Actions::Katello::Repository::Destroy, repo) if commit?
|