katello 4.3.0.rc4 → 4.4.0.rc2

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.

Files changed (458) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/common/vendor.js +0 -1
  3. data/app/controllers/katello/api/v2/api_controller.rb +13 -4
  4. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +4 -1
  5. data/app/controllers/katello/api/v2/content_views_controller.rb +46 -0
  6. data/app/controllers/katello/api/v2/host_packages_controller.rb +21 -1
  7. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +30 -1
  8. data/app/controllers/katello/api/v2/organizations_controller.rb +10 -6
  9. data/app/controllers/katello/api/v2/packages_controller.rb +4 -0
  10. data/app/controllers/katello/api/v2/repositories_bulk_actions_controller.rb +10 -1
  11. data/app/controllers/katello/api/v2/repositories_controller.rb +42 -14
  12. data/app/controllers/katello/api/v2/repository_sets_controller.rb +7 -0
  13. data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +3 -0
  14. data/app/controllers/katello/concerns/hosts_controller_extensions.rb +32 -0
  15. data/app/controllers/katello/remote_execution_controller.rb +5 -4
  16. data/app/graphql/types/host_collection.rb +18 -0
  17. data/app/helpers/katello/content_source_helper.rb +43 -0
  18. data/app/helpers/katello/hosts_and_hostgroups_helper.rb +4 -0
  19. data/app/lib/actions/katello/cdn_configuration/update.rb +5 -7
  20. data/app/lib/actions/katello/content_view/publish.rb +5 -0
  21. data/app/lib/actions/katello/content_view_version/incremental_update.rb +17 -3
  22. data/app/lib/actions/katello/repository/discover.rb +1 -14
  23. data/app/lib/actions/katello/repository/errata_mail.rb +4 -5
  24. data/app/lib/actions/katello/repository/filtered_index_content.rb +1 -1
  25. data/app/lib/actions/katello/repository/sync.rb +2 -2
  26. data/app/lib/actions/pulp3/abstract.rb +1 -1
  27. data/app/lib/actions/pulp3/abstract_async_task.rb +1 -1
  28. data/app/lib/actions/pulp3/content_view/delete_repository_references.rb +14 -4
  29. data/app/lib/actions/pulp3/content_view_version/create_import_history.rb +1 -2
  30. data/app/lib/actions/pulp3/content_view_version/import.rb +7 -0
  31. data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +7 -5
  32. data/app/lib/actions/pulp3/repository/copy_content.rb +1 -1
  33. data/app/lib/actions/pulp3/repository/reclaim_space.rb +3 -10
  34. data/app/lib/actions/pulp3/repository/save_artifact.rb +1 -0
  35. data/app/lib/katello/concerns/base_template_scope_extensions.rb +11 -0
  36. data/app/lib/katello/errors.rb +3 -3
  37. data/app/lib/katello/logging.rb +6 -1
  38. data/app/lib/katello/repo_discovery.rb +27 -19
  39. data/app/lib/katello/resources/cdn/katello_cdn.rb +41 -3
  40. data/app/lib/katello/resources/cdn.rb +4 -2
  41. data/app/lib/katello/util/deduplication_migrator.rb +105 -0
  42. data/app/lib/katello/util/pulpcore_content_filters.rb +2 -1
  43. data/app/models/katello/candlepin/repository_mapper.rb +3 -2
  44. data/app/models/katello/cdn_configuration.rb +38 -6
  45. data/app/models/katello/concerns/audit_comment_extensions.rb +17 -0
  46. data/app/models/katello/concerns/host_managed_extensions.rb +34 -2
  47. data/app/models/katello/concerns/organization_extensions.rb +5 -1
  48. data/app/models/katello/concerns/pulp_database_unit.rb +59 -173
  49. data/app/models/katello/concerns/remote_execution_proxy_selector_extensions.rb +11 -0
  50. data/app/models/katello/concerns/smart_proxy_extensions.rb +2 -1
  51. data/app/models/katello/content_view.rb +4 -4
  52. data/app/models/katello/content_view_filter.rb +1 -1
  53. data/app/models/katello/content_view_history.rb +1 -1
  54. data/app/models/katello/content_view_version.rb +6 -2
  55. data/app/models/katello/content_view_version_export_history.rb +3 -2
  56. data/app/models/katello/content_view_version_import_history.rb +4 -4
  57. data/app/models/katello/deb.rb +1 -3
  58. data/app/models/katello/docker_meta_tag.rb +1 -1
  59. data/app/models/katello/erratum.rb +0 -15
  60. data/app/models/katello/glue/provider.rb +1 -1
  61. data/app/models/katello/glue/pulp/repos.rb +3 -1
  62. data/app/models/katello/host/content_facet.rb +2 -27
  63. data/app/models/katello/host/info_provider.rb +9 -0
  64. data/app/models/katello/host/subscription_facet.rb +2 -2
  65. data/app/models/katello/host_available_module_stream.rb +10 -0
  66. data/app/models/katello/hostgroup/content_facet.rb +2 -2
  67. data/app/models/katello/installed_package.rb +1 -0
  68. data/app/models/katello/product.rb +1 -1
  69. data/app/models/katello/product_content.rb +2 -2
  70. data/app/models/katello/repository.rb +13 -12
  71. data/app/models/katello/root_repository.rb +65 -16
  72. data/app/models/katello/rpm.rb +8 -2
  73. data/app/models/setting/content.rb +15 -5
  74. data/app/services/cert/rhsm_client.rb +1 -5
  75. data/app/services/katello/component_view_presenter.rb +1 -1
  76. data/app/services/katello/content_unit_indexer.rb +166 -0
  77. data/app/services/katello/organization_creator.rb +23 -8
  78. data/app/services/katello/pulp/repository/docker.rb +1 -1
  79. data/app/services/katello/pulp/repository/yum.rb +0 -54
  80. data/app/services/katello/pulp/repository.rb +0 -6
  81. data/app/services/katello/pulp3/ansible_collection.rb +26 -10
  82. data/app/services/katello/pulp3/api/apt.rb +7 -0
  83. data/app/services/katello/pulp3/api/yum.rb +4 -0
  84. data/app/services/katello/pulp3/content_view_version/import.rb +11 -2
  85. data/app/services/katello/pulp3/content_view_version/metadata_generator.rb +1 -1
  86. data/app/services/katello/pulp3/deb.rb +10 -9
  87. data/app/services/katello/pulp3/docker_manifest.rb +6 -5
  88. data/app/services/katello/pulp3/docker_manifest_list.rb +23 -6
  89. data/app/services/katello/pulp3/docker_tag.rb +16 -7
  90. data/app/services/katello/pulp3/erratum.rb +51 -56
  91. data/app/services/katello/pulp3/file_unit.rb +9 -6
  92. data/app/services/katello/pulp3/generic_content_unit.rb +11 -12
  93. data/app/services/katello/pulp3/module_stream.rb +76 -30
  94. data/app/services/katello/pulp3/package_group.rb +5 -5
  95. data/app/services/katello/pulp3/pulp_content_unit.rb +19 -11
  96. data/app/services/katello/pulp3/repository/apt.rb +5 -3
  97. data/app/services/katello/pulp3/repository/docker.rb +14 -7
  98. data/app/services/katello/pulp3/repository/generic.rb +1 -1
  99. data/app/services/katello/pulp3/repository/yum.rb +23 -16
  100. data/app/services/katello/pulp3/repository.rb +31 -10
  101. data/app/services/katello/pulp3/repository_mirror.rb +18 -4
  102. data/app/services/katello/pulp3/rpm.rb +13 -13
  103. data/app/services/katello/pulp3/srpm.rb +10 -9
  104. data/app/services/katello/registration_manager.rb +1 -1
  105. data/app/services/katello/repository_type.rb +15 -4
  106. data/app/services/katello/repository_type_manager.rb +1 -1
  107. data/app/services/katello/ui_notifications/subscriptions/manifest_expired_warning.rb +1 -1
  108. data/app/services/katello/upstream_connection_checker.rb +2 -2
  109. data/app/views/foreman/job_templates/change_content_source.erb +1 -31
  110. data/app/views/foreman/job_templates/install_errata.erb +6 -9
  111. data/app/views/foreman/job_templates/install_errata_by_search_query.erb +26 -0
  112. data/app/views/foreman/job_templates/install_packages_by_search_query.erb +19 -0
  113. data/app/views/foreman/job_templates/remove_packages_by_search_query.erb +19 -0
  114. data/app/views/foreman/job_templates/update_packages_by_search_query.erb +19 -0
  115. data/app/views/katello/api/v2/cdn_configurations/show.json.rabl +1 -1
  116. data/app/views/katello/api/v2/content_views/base.json.rabl +8 -4
  117. data/app/views/katello/api/v2/environments/show.json.rabl +9 -0
  118. data/app/views/katello/api/v2/host_module_streams/base.json.rabl +1 -0
  119. data/app/views/katello/api/v2/repositories/base.json.rabl +1 -0
  120. data/app/views/katello/api/v2/repositories/show.json.rabl +3 -1
  121. data/app/views/katello/layouts/react.html.erb +0 -1
  122. data/app/views/katello/sync_management/_repo.html.erb +36 -25
  123. data/config/initializers/monkeys.rb +0 -1
  124. data/config/routes/api/v2.rb +1 -0
  125. data/config/routes/overrides.rb +3 -0
  126. data/config/routes.rb +2 -0
  127. data/db/migrate/20150930183738_migrate_content_hosts.rb +1 -1
  128. data/db/migrate/20180612164926_add_content_org_id.rb +2 -2
  129. data/db/migrate/20210119162528_delete_puppet_and_ostree_repos.rb +2 -0
  130. data/db/migrate/20211019192121_create_cdn_configuration.katello.rb +11 -2
  131. data/db/migrate/20211201154845_add_unique_indexes.rb +20 -0
  132. data/db/migrate/20211202172358_add_repository_mirroring_policy.rb +26 -0
  133. data/db/migrate/20211208034230_add_content_view_and_lifecycle_environment.rb +6 -0
  134. data/db/migrate/20211220185935_clean_duplicate_content_units.rb +144 -0
  135. data/db/migrate/20220110223754_update_disconnected_settings.rb +20 -0
  136. data/db/migrate/20220120163252_fix_docker_download_policy.rb +11 -0
  137. data/db/migrate/20220124191056_add_type_to_cdn_configuration.rb +22 -0
  138. data/db/migrate/20220127120843_fix_debian_download_policy.rb +11 -0
  139. data/db/migrate/20220204171908_rename_docker_tags_whitelist_and_add_exclude_tags.rb +8 -0
  140. data/db/migrate/20220207140355_change_deb_attributes_size_limit.rb +7 -0
  141. data/db/migrate/20220209205137_expand_sync_timeout_settings.rb +23 -0
  142. data/db/seeds.d/111-upgrade_tasks.rb +2 -1
  143. data/engines/bastion/app/views/bastion/layouts/application.html.erb +0 -1
  144. data/engines/bastion/app/views/bastion/layouts/assets.html.erb +0 -1
  145. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/content-credentials.controller.js +1 -1
  146. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-products.controller.js +1 -1
  147. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-repositories.controller.js +1 -1
  148. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-traces-modal.html +1 -1
  149. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment.html +26 -1
  150. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/apply-errata.controller.js +10 -3
  151. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +212 -152
  152. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/packages.controller.js +1 -0
  153. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +29 -10
  154. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-manage-content.controller.js +2 -3
  155. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +8 -3
  156. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +49 -35
  157. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/mirroring-policy.service.js +30 -0
  158. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +29 -6
  159. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +48 -23
  160. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/discovery.controller.js +5 -4
  161. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.routes.js +4 -3
  162. data/lib/katello/engine.rb +4 -0
  163. data/lib/katello/permission_creator.rb +1 -1
  164. data/lib/katello/permissions/host_permissions.rb +3 -1
  165. data/lib/katello/plugin.rb +9 -1
  166. data/lib/katello/repository_types/deb.rb +0 -1
  167. data/lib/katello/repository_types/docker.rb +4 -4
  168. data/lib/katello/repository_types/file.rb +0 -1
  169. data/lib/katello/repository_types/ostree.rb +4 -6
  170. data/lib/katello/repository_types/python.rb +5 -1
  171. data/lib/katello/repository_types/yum.rb +2 -9
  172. data/lib/katello/tasks/content_view_import_only.rake +34 -0
  173. data/lib/katello/tasks/import_applicability.rake +1 -1
  174. data/lib/katello/tasks/jenkins.rake +0 -2
  175. data/lib/katello/tasks/repository.rake +4 -1
  176. data/lib/katello/tasks/upgrades/4.4/publish_import_cvvs.rake +17 -0
  177. data/lib/katello/version.rb +1 -1
  178. data/locale/action_names.rb +8 -7
  179. data/locale/bn/katello.po +1402 -650
  180. data/locale/cs/katello.po +1217 -96
  181. data/locale/de/katello.po +2359 -1347
  182. data/locale/en/katello.po +1216 -94
  183. data/locale/es/katello.po +2201 -1172
  184. data/locale/fr/katello.po +2601 -1615
  185. data/locale/gu/katello.po +1564 -814
  186. data/locale/hi/katello.po +1563 -810
  187. data/locale/it/katello.po +1311 -282
  188. data/locale/ja/katello.po +2534 -1518
  189. data/locale/katello.pot +3430 -1326
  190. data/locale/kn/katello.po +1564 -812
  191. data/locale/ko/katello.po +1441 -409
  192. data/locale/mr/katello.po +1564 -776
  193. data/locale/or/katello.po +1565 -813
  194. data/locale/pa/katello.po +1559 -792
  195. data/locale/pt/katello.po +1314 -277
  196. data/locale/pt_BR/katello.po +2226 -1181
  197. data/locale/ru/katello.po +1587 -563
  198. data/locale/ta/katello.po +1373 -619
  199. data/locale/te/katello.po +1564 -810
  200. data/locale/zh_CN/katello.po +2936 -1890
  201. data/locale/zh_TW/katello.po +1508 -606
  202. data/webpack/__mocks__/foremanReact/{redux/actions/toasts.js → components/ToastsList/index.js} +3 -2
  203. data/webpack/components/ActionableDetail.js +35 -21
  204. data/webpack/components/Content/Details/ContentDetails.js +1 -1
  205. data/webpack/components/Content/Details/__tests__/ContentDetailInfo.test.js +0 -2
  206. data/webpack/components/Content/Details/__tests__/ContentDetailRepositories.test.js +0 -2
  207. data/webpack/components/Content/Details/__tests__/ContentDetails.test.js +0 -2
  208. data/webpack/components/Content/Details/__tests__/__snapshots__/ContentDetails.test.js.snap +1 -1
  209. data/webpack/components/Content/__tests__/ContentPage.test.js +0 -2
  210. data/webpack/components/Content/__tests__/ContentTable.test.js +0 -2
  211. data/webpack/components/EditableSwitch.js +8 -2
  212. data/webpack/components/EditableTextInput/EditableTextInput.js +44 -86
  213. data/webpack/components/EditableTextInput/__tests__/editableTextInput.test.js +3 -3
  214. data/webpack/components/Errata/index.js +95 -29
  215. data/webpack/components/ErratumTypeLabel.js +16 -16
  216. data/webpack/components/MultiSelect/index.js +2 -2
  217. data/webpack/components/Packages/index.js +1 -1
  218. data/webpack/components/RoutedTabs/index.js +2 -1
  219. data/webpack/components/Search/Search.js +5 -2
  220. data/webpack/components/Search/__tests__/search.test.js +2 -3
  221. data/webpack/components/Select/Select.js +1 -1
  222. data/webpack/components/SelectOrg/SelectOrgReducer.js +15 -15
  223. data/webpack/components/SelectOrg/SetOrganization.js +2 -2
  224. data/webpack/components/Table/PageControls.js +3 -6
  225. data/webpack/components/Table/TableHooks.js +47 -7
  226. data/webpack/components/Table/TableWrapper.js +25 -7
  227. data/webpack/components/TypeAhead/TypeAhead.js +5 -1
  228. data/webpack/components/TypeAhead/helpers/commonPropTypes.js +1 -1
  229. data/webpack/components/TypeAhead/helpers/helpers.js +14 -14
  230. data/webpack/components/TypeAhead/pf3Search/TypeAheadSearch.js +1 -1
  231. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +4 -1
  232. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +2 -1
  233. data/webpack/components/WithOrganization/withOrganization.js +3 -3
  234. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard.js +1 -1
  235. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.js +108 -0
  236. data/webpack/components/extensions/HostDetails/Cards/__tests__/errataOverviewCard.test.js +56 -0
  237. data/webpack/components/extensions/HostDetails/HostDetailsActions.js +2 -0
  238. data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesActions.js +49 -2
  239. data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesConstants.js +14 -1
  240. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/SecondaryTabsRoutes.js +6 -4
  241. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/constants.js +1 -0
  242. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/index.js +1 -0
  243. data/webpack/components/extensions/HostDetails/Tabs/{ErrataTab.js → ErrataTab/ErrataTab.js} +86 -75
  244. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.scss +11 -0
  245. data/webpack/components/extensions/HostDetails/Tabs/{ErratumExpansionContents.js → ErrataTab/ErratumExpansionContents.js} +3 -3
  246. data/webpack/components/extensions/HostDetails/Tabs/{ErratumExpansionDetail.js → ErrataTab/ErratumExpansionDetail.js} +0 -0
  247. data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataActions.js +3 -3
  248. data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataConstants.js +11 -0
  249. data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataSelectors.js +0 -0
  250. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsActions.js +16 -0
  251. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsConstants.js +3 -0
  252. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsSelectors.js +19 -0
  253. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +241 -0
  254. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/__tests__/moduleStreamsTab.test.js +108 -0
  255. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/__tests__/modules.fixtures.json +34 -0
  256. data/webpack/components/extensions/HostDetails/Tabs/PackageInstallModal.js +279 -0
  257. data/webpack/components/extensions/HostDetails/Tabs/PackageInstallModal.scss +3 -0
  258. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab.js +357 -64
  259. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab.scss +3 -7
  260. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +103 -4
  261. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionConstants.js +6 -1
  262. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +45 -42
  263. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.scss +3 -3
  264. data/webpack/components/extensions/HostDetails/Tabs/{EnableTracerEmptyState.js → TracesTab/EnableTracerEmptyState.js} +0 -0
  265. data/webpack/components/extensions/HostDetails/Tabs/{EnableTracerModal.js → TracesTab/EnableTracerModal.js} +3 -2
  266. data/webpack/components/extensions/HostDetails/Tabs/{HostTracesActions.js → TracesTab/HostTracesActions.js} +2 -2
  267. data/webpack/components/extensions/HostDetails/Tabs/{HostTracesConstants.js → TracesTab/HostTracesConstants.js} +0 -0
  268. data/webpack/components/extensions/HostDetails/Tabs/{HostTracesSelectors.js → TracesTab/HostTracesSelectors.js} +0 -0
  269. data/webpack/components/extensions/HostDetails/Tabs/{TracesTab.js → TracesTab/TracesTab.js} +66 -61
  270. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.scss +11 -0
  271. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +17 -18
  272. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packageInstallModal.test.js +385 -0
  273. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packages.fixtures.json +1 -1
  274. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +312 -11
  275. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +2 -2
  276. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +26 -30
  277. data/webpack/components/extensions/HostDetails/Tabs/__tests__/yumInstallablePackages.fixtures.json +72 -0
  278. data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +25 -5
  279. data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesActions.js +18 -0
  280. data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesConstants.js +3 -0
  281. data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesSelectors.js +16 -0
  282. data/webpack/components/extensions/HostDetails/hostDetailsHelpers.js +19 -0
  283. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/ActivationKeys.test.js.snap +4 -0
  284. data/webpack/components/extensions/RegistrationCommands/fields/ActivationKeys.js +1 -1
  285. data/webpack/components/extensions/RegistrationCommands/fields/LifecycleEnvironment.js +1 -1
  286. data/webpack/components/extensions/about/SystemStatuses.js +1 -1
  287. data/webpack/components/extensions/about/SystemStatusesReducer.js +10 -10
  288. data/webpack/components/pf3Table/components/Table.js +4 -5
  289. data/webpack/components/pf3Table/components/Table.test.js +0 -3
  290. data/webpack/components/pf3Table/components/TableBody.js +2 -2
  291. data/webpack/components/pf3Table/components/__snapshots__/Table.test.js.snap +9 -8
  292. data/webpack/containers/Application/config.js +6 -1
  293. data/webpack/containers/Application/overrides.scss +56 -7
  294. data/webpack/global_index.js +4 -1
  295. data/webpack/global_test_setup.js +1 -1
  296. data/webpack/index.js +7 -0
  297. data/webpack/redux/OrganizationProducts/OrganizationProductsReducer.js +15 -15
  298. data/webpack/redux/reducers/RedHatRepositories/enabled.js +43 -43
  299. data/webpack/redux/reducers/RedHatRepositories/repositorySetRepositories.js +43 -43
  300. data/webpack/redux/reducers/RedHatRepositories/sets.js +31 -31
  301. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsReducer.js +26 -26
  302. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsReducer.js +19 -19
  303. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.test.js +0 -2
  304. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionPage.test.js +0 -2
  305. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsTable.test.js +0 -2
  306. data/webpack/scenes/Content/ContentConfig.js +55 -5
  307. data/webpack/scenes/Content/ContentPage.js +5 -5
  308. data/webpack/scenes/Content/Details/ContentDetails.js +23 -21
  309. data/webpack/scenes/Content/Details/ContentInfo.js +2 -2
  310. data/webpack/scenes/Content/Details/ContentRepositories.js +1 -1
  311. data/webpack/scenes/Content/Details/__tests__/contentDetail.test.js +4 -4
  312. data/webpack/scenes/Content/Table/ContentTable.js +2 -2
  313. data/webpack/scenes/Content/__tests__/contentTable.test.js +3 -3
  314. data/webpack/scenes/ContentViews/ContentViewsConstants.js +5 -4
  315. data/webpack/scenes/ContentViews/ContentViewsPage.js +17 -13
  316. data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +1 -1
  317. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +3 -2
  318. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignHostsForm.js +2 -2
  319. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +6 -6
  320. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +22 -11
  321. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js +31 -18
  322. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +1 -1
  323. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +2 -2
  324. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +22 -28
  325. data/webpack/scenes/ContentViews/Details/ContentViewDetailReducer.js +8 -8
  326. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +5 -5
  327. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +32 -30
  328. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +9 -4
  329. data/webpack/scenes/ContentViews/Details/DetailsContainer.js +14 -17
  330. data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +3 -0
  331. data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositoryTable.js +1 -1
  332. data/webpack/scenes/ContentViews/Details/Filters/ArtifactsWithNoErrata.js +8 -8
  333. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +4 -4
  334. data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +6 -6
  335. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +16 -9
  336. data/webpack/scenes/ContentViews/Details/Filters/CVFilterDetailType.js +46 -46
  337. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +17 -17
  338. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +17 -17
  339. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +4 -4
  340. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetails.js +2 -2
  341. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetailsHeader.js +17 -11
  342. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +1 -1
  343. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +2 -2
  344. data/webpack/scenes/ContentViews/Details/Filters/Rules/Package/AddEditPackageRuleModal.js +17 -17
  345. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +2 -3
  346. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +2 -9
  347. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +3 -5
  348. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +2 -10
  349. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +2 -3
  350. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +2 -3
  351. data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +2 -2
  352. data/webpack/scenes/ContentViews/Details/Repositories/ContentCounts.js +1 -1
  353. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +24 -3
  354. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +11 -5
  355. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionContent.js +28 -28
  356. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +1 -1
  357. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVEnvironmentSelectionForm.js +18 -18
  358. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignActivationKeysForm.js +3 -3
  359. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignHostsForm.js +3 -3
  360. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +6 -6
  361. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedActivationKeys.js +1 -1
  362. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedHosts.js +1 -1
  363. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +31 -35
  364. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.js +9 -8
  365. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.scss +5 -2
  366. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsHeader.js +39 -40
  367. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsTable.js +46 -34
  368. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionRepositoryCell.js +66 -49
  369. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +5 -5
  370. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +3 -3
  371. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +5 -3
  372. data/webpack/scenes/ContentViews/Publish/CVPublishFinish.js +2 -2
  373. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +5 -5
  374. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +3 -3
  375. data/webpack/scenes/ContentViews/components/CVBreadCrumb.js +1 -1
  376. data/webpack/scenes/ContentViews/components/ContentViewsCounter.js +1 -1
  377. data/webpack/scenes/ContentViews/components/EnvironmentLabels.js +18 -18
  378. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +10 -10
  379. data/webpack/scenes/ContentViews/expansions/DetailsExpansion.js +2 -2
  380. data/webpack/scenes/ContentViews/expansions/RelatedContentViewComponentsModal.js +8 -8
  381. data/webpack/scenes/Hosts/ChangeContentSource/actions.js +43 -0
  382. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceForm.js +87 -0
  383. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceTemplate.js +90 -0
  384. data/webpack/scenes/Hosts/ChangeContentSource/components/FormField.js +43 -0
  385. data/webpack/scenes/Hosts/ChangeContentSource/constants.js +3 -0
  386. data/webpack/scenes/Hosts/ChangeContentSource/helpers.js +27 -0
  387. data/webpack/scenes/Hosts/ChangeContentSource/index.js +126 -0
  388. data/webpack/scenes/Hosts/ChangeContentSource/selectors.js +42 -0
  389. data/webpack/scenes/Hosts/ChangeContentSource/styles.scss +11 -0
  390. data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetailsReducer.js +18 -18
  391. data/webpack/scenes/ModuleStreams/Details/Profiles/__tests__/ModuleStreamDetailProfiles.test.js +0 -1
  392. data/webpack/scenes/ModuleStreams/Details/__tests__/ModuleStreamDetails.test.js +0 -2
  393. data/webpack/scenes/ModuleStreams/ModuleStreamsReducer.js +26 -26
  394. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamPage.test.js +0 -2
  395. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamsTable.test.js +0 -2
  396. data/webpack/scenes/Organizations/OrganizationActions.js +5 -1
  397. data/webpack/scenes/Organizations/OrganizationReducer.js +8 -8
  398. data/webpack/scenes/RedHatRepositories/RedHatRepositoriesPage.js +31 -1
  399. data/webpack/scenes/RedHatRepositories/__tests__/RedHatRepositoriesPage.test.js +16 -0
  400. data/webpack/scenes/RedHatRepositories/__tests__/__snapshots__/RedHatRepositoriesPage.test.js.snap +11 -2
  401. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/EnabledRepositoryContent.js +4 -4
  402. data/webpack/scenes/RedHatRepositories/components/RepositorySetRepositories.js +1 -1
  403. data/webpack/scenes/RedHatRepositories/helpers.js +5 -5
  404. data/webpack/scenes/RedHatRepositories/index.js +11 -3
  405. data/webpack/scenes/Settings/SettingsReducer.js +14 -14
  406. data/webpack/scenes/Settings/Tables/TableReducer.js +23 -23
  407. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailInfo.js +2 -2
  408. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailProductContent.js +15 -15
  409. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailProducts.js +1 -1
  410. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailReducer.js +34 -34
  411. data/webpack/scenes/Subscriptions/Details/SubscriptionDetails.js +13 -13
  412. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/AirGappedTypeForm.js +81 -0
  413. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnConfigurationConstants.js +13 -0
  414. data/webpack/scenes/Subscriptions/Manifest/{CdnConfigurationForm.scss → CdnConfigurationTab/CdnConfigurationForm.scss} +0 -0
  415. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnTypeForm.js +106 -0
  416. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/UpstreamServerTypeForm.js +259 -0
  417. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/AirGappedTypeForm.test.js +44 -0
  418. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/CdnTypeForm.test.js +67 -0
  419. data/webpack/scenes/Subscriptions/Manifest/{__tests__/CdnConfigurationForm.test.js → CdnConfigurationTab/__tests__/UpstreamServerTypeForm.test.js} +46 -17
  420. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/index.js +97 -0
  421. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +11 -6
  422. data/webpack/scenes/Subscriptions/Manifest/ManifestHistoryReducer.js +16 -16
  423. data/webpack/scenes/Subscriptions/SubscriptionReducer.js +149 -149
  424. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsReducer.js +41 -41
  425. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/__tests__/UpstreamSubscriptionsPage.test.js +0 -1
  426. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsPage.test.js +0 -1
  427. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsActions.test.js.snap +3 -2
  428. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionsTable.test.js +4 -0
  429. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/__snapshots__/SubscriptionsTable.test.js.snap +9 -0
  430. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/components/Dialogs/DeleteDialog.js +6 -6
  431. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/components/Table.js +12 -12
  432. data/webpack/scenes/Tasks/TaskActions.js +1 -1
  433. data/webpack/scenes/Tasks/__tests__/__snapshots__/TaskActions.test.js.snap +3 -2
  434. data/webpack/services/api/testHelpers.js +5 -3
  435. data/webpack/services/index.js +36 -36
  436. data/webpack/utils/helpers.js +11 -8
  437. metadata +98 -60
  438. data/app/services/katello/pulp/deb.rb +0 -55
  439. data/app/services/katello/pulp/distribution.rb +0 -7
  440. data/app/services/katello/pulp/docker_blob.rb +0 -7
  441. data/app/services/katello/pulp/docker_manifest.rb +0 -13
  442. data/app/services/katello/pulp/docker_manifest_list.rb +0 -14
  443. data/app/services/katello/pulp/docker_tag.rb +0 -14
  444. data/app/services/katello/pulp/erratum.rb +0 -129
  445. data/app/services/katello/pulp/file_unit.rb +0 -21
  446. data/app/services/katello/pulp/module_stream.rb +0 -39
  447. data/app/services/katello/pulp/package_category.rb +0 -7
  448. data/app/services/katello/pulp/package_group.rb +0 -20
  449. data/app/services/katello/pulp/pulp_content_unit.rb +0 -156
  450. data/app/services/katello/pulp/rpm.rb +0 -57
  451. data/app/services/katello/pulp/srpm.rb +0 -29
  452. data/app/services/katello/pulp/yum_metadata_file.rb +0 -30
  453. data/lib/monkeys/pulp3_13_checksumfix.rb +0 -17
  454. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationHooks.js +0 -2
  455. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js +0 -2
  456. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab.scss +0 -16
  457. data/webpack/components/extensions/HostDetails/Tabs/TracesTab.scss +0 -12
  458. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationForm.js +0 -185
@@ -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
 
@@ -19,8 +19,8 @@
19
19
  * Provides the functionality for the repository details info page.
20
20
  */
21
21
  angular.module('Bastion.repositories').controller('RepositoryDetailsInfoController',
22
- ['$scope', '$q', 'translate', 'Notification', 'ContentCredential', 'CurrentOrganization', 'Checksum', 'DownloadPolicy', 'Architecture', 'HttpProxy', 'HttpProxyPolicy', 'OSVersions', 'RepositoryTypesService',
23
- function ($scope, $q, translate, Notification, ContentCredential, CurrentOrganization, Checksum, DownloadPolicy, Architecture, HttpProxy, HttpProxyPolicy, OSVersions, RepositoryTypesService) {
22
+ ['$scope', '$q', 'translate', 'Notification', 'ContentCredential', 'CurrentOrganization', 'Checksum', 'DownloadPolicy', 'Architecture', 'HttpProxy', 'HttpProxyPolicy', 'OSVersions', 'RepositoryTypesService', 'MirroringPolicy',
23
+ function ($scope, $q, translate, Notification, ContentCredential, CurrentOrganization, Checksum, DownloadPolicy, Architecture, HttpProxy, HttpProxyPolicy, OSVersions, RepositoryTypesService, MirroringPolicy) {
24
24
  $scope.organization = CurrentOrganization;
25
25
 
26
26
  $scope.progress = {uploading: false};
@@ -108,20 +108,31 @@ 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" && option.value) {
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.commaTagsWhitelist)) {
120
- repository["docker_tags_whitelist"] = repository.commaTagsWhitelist.split(",").map(function(tag) {
119
+ if (!_.isEmpty(repository.commaIncludeTags)) {
120
+ repository["include_tags"] = repository.commaIncludeTags.split(",").map(function(tag) {
121
121
  return tag.trim();
122
+ }).filter(function(el) {
123
+ return el;
122
124
  });
123
125
  } else {
124
- repository["docker_tags_whitelist"] = [];
126
+ repository["include_tags"] = [];
127
+ }
128
+ if (!_.isEmpty(repository.commaExcludeTags)) {
129
+ repository["exclude_tags"] = repository.commaExcludeTags.split(",").map(function(tag) {
130
+ return tag.trim();
131
+ }).filter(function(el) {
132
+ return el;
133
+ });
134
+ } else {
135
+ repository["exclude_tags"] = [];
125
136
  }
126
137
  /* eslint-disable camelcase */
127
138
 
@@ -134,10 +145,15 @@ angular.module('Bastion.repositories').controller('RepositoryDetailsInfoControll
134
145
  repository.$update(function (response) {
135
146
  deferred.resolve(response);
136
147
  $scope.repository.ignore_srpms = $scope.repository.ignorable_content && $scope.repository.ignorable_content.includes("srpm");
137
- if (!_.isEmpty(response["docker_tags_whitelist"])) {
138
- repository.commaTagsWhitelist = repository["docker_tags_whitelist"].join(", ");
148
+ if (!_.isEmpty(response["include_tags"])) {
149
+ repository.commaIncludeTags = repository["include_tags"].join(", ");
139
150
  } else {
140
- repository.commaTagsWhitelist = null;
151
+ repository.commaIncludeTags = null;
152
+ }
153
+ if (!_.isEmpty(response["exclude_tags"])) {
154
+ repository.commaExcludeTags = repository["exclude_tags"].join(", ");
155
+ } else {
156
+ repository.commaExcludeTags = null;
141
157
  }
142
158
  Notification.setSuccessMessage(translate('Repository Saved.'));
143
159
  }, function (response) {
@@ -198,6 +214,7 @@ angular.module('Bastion.repositories').controller('RepositoryDetailsInfoControll
198
214
 
199
215
  $scope.checksums = Checksum.checksums;
200
216
  $scope.downloadPolicies = DownloadPolicy.downloadPolicies;
217
+ $scope.mirroringPolicies = MirroringPolicy.mirroringPolicies;
201
218
 
202
219
  $scope.checksumTypeDisplay = function (checksum) {
203
220
  return Checksum.checksumType(checksum);
@@ -207,6 +224,8 @@ angular.module('Bastion.repositories').controller('RepositoryDetailsInfoControll
207
224
  return DownloadPolicy.downloadPolicyName(downloadPolicy);
208
225
  };
209
226
 
227
+ $scope.mirroringPolicyDisplay = MirroringPolicy.mirroringPolicyName;
228
+
210
229
  $scope.clearUpstreamAuth = function () {
211
230
  $scope.repository['upstream_password'] = null;
212
231
  $scope.repository['upstream_auth_exists'] = false;
@@ -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', 'OstreeBranch', 'File', 'Deb', 'ModuleStream', 'AnsibleCollection', 'GenericContent', 'RepositoryTypesService',
29
- function ($scope, $state, translate, Notification, Nutupane, Repository, Package, PackageGroup, DockerManifest, DockerManifestList, DockerTag, OstreeBranch, File, Deb, ModuleStream, AnsibleCollection, GenericContent, RepositoryTypesService) {
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["docker_tags_whitelist"])) {
57
- $scope.repository.commaTagsWhitelist = $scope.repository["docker_tags_whitelist"].join(", ");
56
+ if (!_.isEmpty($scope.repository["include_tags"])) {
57
+ $scope.repository.commaIncludeTags = $scope.repository["include_tags"].join(", ");
58
58
  } else {
59
- $scope.repository.commaTagsWhitelist = "";
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
- <span ng-show="repository.content_type === 'yum'" >
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>
@@ -194,16 +200,8 @@
194
200
  on-save="save(repository)">
195
201
  </dd>
196
202
  </span>
197
- <span ng-hide="repository.content_type === 'ostree'">
198
- <dt translate>Mirror on Sync</dt>
199
- <dd bst-edit-checkbox="repository.mirror_on_sync"
200
- formatter="booleanToYesNo"
201
- on-save="save(repository)"
202
- readonly="denied('edit_products', product)">
203
- </dd>
204
- </span>
205
203
 
206
- <span ng-show="repository.content_type === 'yum' && repository.mirror_on_sync === false">
204
+ <span ng-show="repository.content_type === 'yum' && repository.mirroring_policy === 'additive'">
207
205
  <dt translate>Retain package versions</dt>
208
206
  <dd bst-edit-number="repository.retain_package_versions_count"
209
207
  on-save="save(repository)"
@@ -312,7 +310,7 @@
312
310
  options="certs()"
313
311
  on-save="save(repository)">
314
312
  </dd>
315
- <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'">
316
314
  <dt translate>Download Policy</dt>
317
315
  <dd bst-edit-select="downloadPolicyDisplay(repository.download_policy)"
318
316
  readonly="denied('edit_products', product)"
@@ -322,9 +320,25 @@
322
320
  on-save="save(repository)">
323
321
  </dd>
324
322
  </span>
323
+ <span>
324
+ <dt translate>Mirroring Policy</dt>
325
+
326
+ <dd bst-edit-select="mirroringPolicyDisplay(repository.mirroring_policy, repository.content_type)"
327
+ readonly="denied('edit_products', product)"
328
+ selector="repository.mirroring_policy"
329
+ options="mirroringPolicies(repository.content_type)"
330
+ options-format="id as name for (id, name) in options"
331
+ on-save="save(repository)">
332
+ </dd>
333
+ </span>
325
334
  <span ng-if="repository.content_type == 'docker'">
326
- <dt translate>Limit Sync Tags</dt>
327
- <dd bst-edit-text="repository.commaTagsWhitelist"
335
+ <dt translate>Include Tags</dt>
336
+ <dd bst-edit-text="repository.commaIncludeTags"
337
+ on-save="save(repository)"
338
+ readonly="denied('edit_products', product)">
339
+ </dd>
340
+ <dt translate>Exclude Tags</dt>
341
+ <dd bst-edit-text="repository.commaExcludeTags"
328
342
  on-save="save(repository)"
329
343
  readonly="denied('edit_products', product)">
330
344
  </dd>
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @ngdoc service
3
+ * @name Bastion.repository.service:mirroringPolicy
4
+ *
5
+ * @requires translate
6
+ *
7
+ * @description
8
+ * Provides a mirroringPolicy for repositories
9
+ */
10
+ angular.module('Bastion.repositories').service('MirroringPolicy',
11
+ ['translate', function (translate) {
12
+
13
+ this.defaultMirroringPolicy = 'additive';
14
+
15
+ this.mirroringPolicies = function(repoType) {
16
+ var policies = {
17
+ 'additive': translate('Additive'),
18
+ 'mirror_content_only': translate('Content Only')
19
+ };
20
+ if (repoType === 'yum') {
21
+ policies['mirror_complete'] = translate('Complete Mirroring');
22
+ }
23
+ return policies;
24
+ };
25
+
26
+ this.mirroringPolicyName = function (policy, repoType) {
27
+ return this.mirroringPolicies(repoType)[policy];
28
+ };
29
+ }]
30
+ );
@@ -17,14 +17,15 @@
17
17
  * @requires Architecture
18
18
  * @requires RepositoryTypesService
19
19
  * @requires OSVersions
20
- * #requires HttpProxyPolicy
20
+ * @requires HttpProxyPolicy
21
+ * @requires MirroringPolicy
21
22
  *
22
23
  * @description
23
24
  * Controls the creation of an empty Repository object for use by sub-controllers.
24
25
  */
25
26
  angular.module('Bastion.repositories').controller('NewRepositoryController',
26
- ['$scope', '$sce', 'Repository', 'Product', 'ContentCredential', 'FormUtils', 'translate', 'Notification', 'ApiErrorHandler', 'BastionConfig', 'Checksum', 'DownloadPolicy', 'Architecture', 'RepositoryTypesService', 'HttpProxy', 'HttpProxyPolicy', 'OSVersions',
27
- function ($scope, $sce, Repository, Product, ContentCredential, FormUtils, translate, Notification, ApiErrorHandler, BastionConfig, Checksum, DownloadPolicy, Architecture, RepositoryTypesService, HttpProxy, HttpProxyPolicy, OSVersions) {
27
+ ['$scope', '$sce', 'Repository', 'Product', 'ContentCredential', 'FormUtils', 'translate', 'Notification', 'ApiErrorHandler', 'BastionConfig', 'Checksum', 'DownloadPolicy', 'Architecture', 'RepositoryTypesService', 'HttpProxy', 'HttpProxyPolicy', 'OSVersions', 'MirroringPolicy',
28
+ function ($scope, $sce, Repository, Product, ContentCredential, FormUtils, translate, Notification, ApiErrorHandler, BastionConfig, Checksum, DownloadPolicy, Architecture, RepositoryTypesService, HttpProxy, HttpProxyPolicy, OSVersions, MirroringPolicy) {
28
29
 
29
30
  function success() {
30
31
  Notification.setSuccessMessage(translate('Repository %s successfully created.').replace('%s', $scope.repository.name));
@@ -61,8 +62,9 @@ angular.module('Bastion.repositories').controller('NewRepositoryController',
61
62
  };
62
63
 
63
64
  $scope.repository = new Repository({'product_id': $scope.$stateParams.productId, unprotected: true,
64
- 'checksum_type': null, 'mirror_on_sync': true, 'verify_ssl_on_sync': true,
65
- 'download_policy': BastionConfig.defaultDownloadPolicy, 'arch': null});
65
+ 'checksum_type': null, 'verify_ssl_on_sync': true,
66
+ 'download_policy': BastionConfig.defaultDownloadPolicy, 'arch': null,
67
+ 'mirroring_policy': MirroringPolicy.defaultMirroringPolicy, 'include_tags': '', 'exclude_tags': '*-source'});
66
68
 
67
69
  $scope.product = Product.get({id: $scope.$stateParams.productId}, function () {
68
70
  $scope.page.loading = false;
@@ -77,6 +79,8 @@ angular.module('Bastion.repositories').controller('NewRepositoryController',
77
79
  $scope.checksums = Checksum.checksums;
78
80
  $scope.downloadPolicies = DownloadPolicy.downloadPolicies;
79
81
 
82
+ $scope.mirroringPolicies = MirroringPolicy.mirroringPolicies;
83
+
80
84
  $scope.$watch('repository.name', function () {
81
85
  if ($scope.repositoryForm && $scope.repositoryForm.name) {
82
86
  $scope.repositoryForm.name.$setValidity('server', true);
@@ -134,7 +138,7 @@ angular.module('Bastion.repositories').controller('NewRepositoryController',
134
138
  repository.ignorable_content = [];
135
139
  }
136
140
  }
137
- if (repository.content_type !== 'yum' && repository.content_type !== 'deb' ) {
141
+ if (repository.content_type !== 'yum' && repository.content_type !== 'deb' && repository.content_type !== 'docker') {
138
142
  repository['download_policy'] = '';
139
143
  }
140
144
  if (repository.arch === 'No restriction') {
@@ -156,6 +160,25 @@ angular.module('Bastion.repositories').controller('NewRepositoryController',
156
160
  }
157
161
  });
158
162
  }
163
+ if (!Array.isArray(repository.include_tags)) {
164
+ if (!_.isEmpty(repository.include_tags)) {
165
+ repository["include_tags"] = repository.include_tags.split(",").map(function(tag) {
166
+ return tag.trim();
167
+ });
168
+ } else {
169
+ repository["include_tags"] = [];
170
+ }
171
+ }
172
+
173
+ if (!Array.isArray(repository.exclude_tags)) {
174
+ if (!_.isEmpty(repository.exclude_tags)) {
175
+ repository["exclude_tags"] = repository.exclude_tags.split(",").map(function(tag) {
176
+ return tag.trim();
177
+ });
178
+ } else {
179
+ repository["exclude_tags"] = [];
180
+ }
181
+ }
159
182
  repository.$save(success, error);
160
183
  };
161
184
 
@@ -39,29 +39,33 @@
39
39
  </select>
40
40
  </div>
41
41
 
42
- <div bst-form-group label="{{ 'Restrict to Architecture' | translate }}" ng-show="repository.content_type === 'yum'">
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
- bst-form-group label="{{ 'Restrict to OS version' | translate }}"
52
- ng-if="repository.content_type === 'yum'"
53
- >
54
- <select id="os_versions"
55
- name="os_versions"
56
- ng-model="repository.os_versions"
57
- ng-options="tag as tag.name for tag in osVersionsOptions track by tag.id">
58
- </select>
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"
@@ -272,18 +276,39 @@
272
276
  </p>
273
277
  </div>
274
278
 
275
- <div class="checkbox" ng-hide="repository.content_type === 'ostree'">
276
- <label>
277
- <input id="mirror_on_sync" name="mirror_on_sync" ng-model="repository.mirror_on_sync" type="checkbox"/>
278
- <span translate>Mirror on Sync</span>
279
- </label>
279
+ <div bst-form-group label="{{ 'Mirroring Policy' | translate }}">
280
+ <select id="mirroring_policy"
281
+ name="mirroring_policy"
282
+ ng-model="repository.mirroring_policy"
283
+ ng-options="id as name for (id, name) in mirroringPolicies(repository.content_type)">
284
+ </select>
280
285
 
281
- <p class="help-block" translate>
282
- Selecting this option will result in contents that are no longer part of the upstream repository being removed during synchronization.
286
+ <p class="help-block">
287
+ <ul>
288
+ <li translate><b>Additive:</b> new content available during sync will be added to the repository, and no content will be removed. </li>
289
+ <li translate><b>Mirror Content Only</b>: any new content available during sync will be added to the repository and any content removed from the upstream repository will be removed from the local repository.</li>
290
+ <li translate ng-show="repository.content_type == 'yum'"><b>Mirror Complete</b>: a sync behaves exactly like "Mirror Content Only", but also mirrors metadata as well. This is the fastest method, and preserves repository signatures, but is only supported by yum and not by all upstream repositories.</li>
291
+ </ul>
292
+ </p>
293
+ </div>
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 />
283
308
  </p>
284
309
  </div>
285
310
 
286
- <div bst-form-group label="{{ 'Retain package versions' | translate }}" ng-if="(repository.content_type === 'yum' && repository.mirror_on_sync === false)">
311
+ <div bst-form-group label="{{ 'Retain package versions' | translate }}" ng-if="(repository.content_type === 'yum' && repository.mirroring_policy === 'additive')">
287
312
  <input id="retain_package_versions_count" name="retain_package_versions_count" ng-model="repository.retain_package_versions_count" type="number"/>
288
313
 
289
314
  <p class="help-block">
@@ -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', '$timeout', '$http', '$filter', 'Notification', 'Task', 'Organization', 'CurrentOrganization', 'DiscoveryRepositories', 'ContainerRegistries', 'translate',
22
- function ($scope, $q, $timeout, $http, $filter, Notification, Task, Organization, CurrentOrganization, DiscoveryRepositories, ContainerRegistries, translate) {
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: [],
@@ -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
- controller: 'DiscoveryController',
48
- templateUrl: 'products/discovery/views/discovery-base.html'
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: {
@@ -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 [
@@ -199,6 +199,9 @@ Foreman::Plugin.register :katello do
199
199
 
200
200
  register_global_js_file 'global'
201
201
 
202
+ register_graphql_query_field :host_collection, '::Types::HostCollection', :record_field
203
+ register_graphql_query_field :host_collections, '::Types::HostCollection', :collection_field
204
+
202
205
  search_path_override("Katello") do |resource|
203
206
  "/#{Katello::Util::Model.model_to_controller_path(resource)}/auto_complete_search"
204
207
  end
@@ -296,16 +299,21 @@ Foreman::Plugin.register :katello do
296
299
 
297
300
  describe_host do
298
301
  overview_buttons_provider :content_host_overview_button
302
+ multiple_actions_provider :hosts_change_content_source
299
303
  end
300
304
 
301
305
  if Katello.with_remote_execution?
302
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'])
303
308
  RemoteExecutionFeature.register(:katello_package_update, N_("Katello: Update Package"), :description => N_("Update package via Katello interface"), :provided_inputs => ['package'])
309
+ RemoteExecutionFeature.register(:katello_packages_update_by_search, N_("Katello: Update Packages by search query"), :description => N_("Update packages via Katello interface"), :provided_inputs => ['Package search query'])
304
310
  RemoteExecutionFeature.register(:katello_package_remove, N_("Katello: Remove Package"), :description => N_("Remove package via Katello interface"), :provided_inputs => ['package'])
311
+ RemoteExecutionFeature.register(:katello_packages_remove_by_search, N_("Katello: Remove Packages by search query"), :description => N_("Remove packages via Katello interface"), :provided_inputs => ['Package search query'])
305
312
  RemoteExecutionFeature.register(:katello_group_install, N_("Katello: Install Package Group"), :description => N_("Install package group via Katello interface"), :provided_inputs => ['package'])
306
313
  RemoteExecutionFeature.register(:katello_group_update, N_("Katello: Update Package Group"), :description => N_("Update package group via Katello interface"), :provided_inputs => ['package'])
307
314
  RemoteExecutionFeature.register(:katello_group_remove, N_("Katello: Remove Package Group"), :description => N_("Remove package group via Katello interface"), :provided_inputs => ['package'])
308
315
  RemoteExecutionFeature.register(:katello_errata_install, N_("Katello: Install Errata"), :description => N_("Install errata via Katello interface"), :provided_inputs => ['errata'])
316
+ 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'])
309
317
  RemoteExecutionFeature.register(:katello_service_restart, N_("Katello: Service Restart"), :description => N_("Restart Services via Katello interface"), :provided_inputs => ['helpers'])
310
318
  RemoteExecutionFeature.register(:katello_host_tracer_resolve, N_("Katello: Resolve Traces"), :description => N_("Resolve traces via Katello interface"), :provided_inputs => ['ids'])
311
319
  RemoteExecutionFeature.register(:katello_module_stream_action, N_("Katello: Module Stream Actions"),
@@ -336,7 +344,7 @@ Foreman::Plugin.register :katello do
336
344
 
337
345
  register_info_provider Katello::Host::InfoProvider
338
346
 
339
- medium_providers.register(Katello::ManagedContentMediumProvider)
347
+ medium_providers_registry.register(Katello::ManagedContentMediumProvider)
340
348
 
341
349
  Katello::PermissionCreator.new(self).define
342
350
  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