katello 4.5.0.rc1 → 4.6.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.

Files changed (530) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/hosts/activation_key_edit.js +9 -2
  3. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +3 -0
  4. data/app/controllers/katello/api/rhsm/candlepin_dynflow_proxy_controller.rb +10 -0
  5. data/app/controllers/katello/api/v2/activation_keys_controller.rb +7 -0
  6. data/app/controllers/katello/api/v2/alternate_content_sources_bulk_actions_controller.rb +44 -0
  7. data/app/controllers/katello/api/v2/alternate_content_sources_controller.rb +74 -21
  8. data/app/controllers/katello/api/v2/content_exports_controller.rb +33 -3
  9. data/app/controllers/katello/api/v2/content_uploads_controller.rb +2 -0
  10. data/app/controllers/katello/api/v2/content_view_components_controller.rb +1 -1
  11. data/app/controllers/katello/api/v2/content_view_filter_rules_controller.rb +1 -1
  12. data/app/controllers/katello/api/v2/content_view_filters_controller.rb +1 -1
  13. data/app/controllers/katello/api/v2/content_view_repositories_controller.rb +1 -1
  14. data/app/controllers/katello/api/v2/debs_controller.rb +42 -10
  15. data/app/controllers/katello/api/v2/host_collections_controller.rb +5 -1
  16. data/app/controllers/katello/api/v2/host_errata_controller.rb +1 -0
  17. data/app/controllers/katello/api/v2/host_module_streams_controller.rb +9 -1
  18. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +8 -1
  19. data/app/controllers/katello/api/v2/organizations_controller.rb +3 -1
  20. data/app/controllers/katello/api/v2/repositories_controller.rb +2 -8
  21. data/app/controllers/katello/api/v2/simple_content_access_controller.rb +8 -0
  22. data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +34 -11
  23. data/app/controllers/katello/concerns/organizations_controller_extensions.rb +7 -16
  24. data/app/lib/actions/katello/alternate_content_source/alternate_content_source_common.rb +16 -0
  25. data/app/lib/actions/katello/alternate_content_source/create.rb +11 -5
  26. data/app/lib/actions/katello/alternate_content_source/destroy.rb +3 -4
  27. data/app/lib/actions/katello/alternate_content_source/refresh.rb +25 -0
  28. data/app/lib/actions/katello/alternate_content_source/update.rb +57 -13
  29. data/app/lib/actions/katello/applicability/hosts/bulk_generate.rb +2 -2
  30. data/app/lib/actions/katello/cdn_configuration/update.rb +1 -1
  31. data/app/lib/actions/katello/content_view/promote_to_environment.rb +4 -2
  32. data/app/lib/actions/katello/content_view/publish.rb +6 -3
  33. data/app/lib/actions/katello/organization/environment_contents_refresh.rb +20 -0
  34. data/app/lib/actions/katello/organization/manifest_refresh.rb +11 -5
  35. data/app/lib/actions/katello/organization/simple_content_access/toggle.rb +1 -9
  36. data/app/lib/actions/katello/repository/create.rb +9 -0
  37. data/app/lib/actions/katello/repository/destroy.rb +21 -0
  38. data/app/lib/actions/katello/repository/errata_mail.rb +3 -3
  39. data/app/lib/actions/katello/repository/refresh_repository.rb +3 -0
  40. data/app/lib/actions/katello/repository/update.rb +33 -0
  41. data/app/lib/actions/katello/repository/update_redhat_repository.rb +1 -1
  42. data/app/lib/actions/pulp3/alternate_content_source/create.rb +5 -4
  43. data/app/lib/actions/pulp3/alternate_content_source/create_remote.rb +5 -4
  44. data/app/lib/actions/pulp3/alternate_content_source/delete.rb +6 -6
  45. data/app/lib/actions/pulp3/alternate_content_source/delete_remote.rb +6 -6
  46. data/app/lib/actions/pulp3/alternate_content_source/refresh.rb +23 -0
  47. data/app/lib/actions/pulp3/alternate_content_source/update.rb +6 -6
  48. data/app/lib/actions/pulp3/alternate_content_source/update_remote.rb +7 -7
  49. data/app/lib/actions/pulp3/capsule_content/reclaim_space.rb +1 -0
  50. data/app/lib/actions/pulp3/content_view_version/create_export_history.rb +3 -1
  51. data/app/lib/actions/pulp3/content_view_version/create_exporter.rb +9 -2
  52. data/app/lib/actions/pulp3/content_view_version/create_syncable_export_history.rb +45 -0
  53. data/app/lib/actions/pulp3/content_view_version/destroy_exporter.rb +6 -1
  54. data/app/lib/actions/pulp3/content_view_version/export.rb +8 -3
  55. data/app/lib/actions/pulp3/orchestration/alternate_content_source/create.rb +3 -5
  56. data/app/lib/actions/pulp3/orchestration/alternate_content_source/delete.rb +6 -7
  57. data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh.rb +15 -0
  58. data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh_remote.rb +18 -0
  59. data/app/lib/actions/pulp3/orchestration/alternate_content_source/update.rb +3 -5
  60. data/app/lib/actions/pulp3/orchestration/content_view_version/export.rb +28 -13
  61. data/app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb +4 -2
  62. data/app/lib/actions/pulp3/orchestration/content_view_version/export_repository.rb +4 -2
  63. data/app/lib/actions/pulp3/orchestration/content_view_version/syncable_export.rb +82 -0
  64. data/app/lib/actions/pulp3/orchestration/repository/generate_metadata.rb +1 -1
  65. data/app/lib/actions/pulp3/repository/refresh_distribution.rb +1 -4
  66. data/app/lib/actions/pulp3/repository/save_artifact.rb +1 -1
  67. data/app/lib/actions/pulp3/repository/save_distribution_references.rb +0 -2
  68. data/app/lib/katello/concerns/base_template_scope_extensions.rb +25 -12
  69. data/app/lib/katello/errors.rb +1 -1
  70. data/app/lib/katello/resources/candlepin/owner.rb +9 -2
  71. data/app/lib/katello/validators/alternate_content_source_products_validator.rb +17 -0
  72. data/app/models/katello/alternate_content_source.rb +44 -8
  73. data/app/models/katello/alternate_content_source_product.rb +13 -0
  74. data/app/models/katello/authorization/repository.rb +4 -2
  75. data/app/models/katello/concerns/host_managed_extensions.rb +12 -2
  76. data/app/models/katello/concerns/pulp_database_unit.rb +2 -2
  77. data/app/models/katello/concerns/smart_proxy_extensions.rb +5 -6
  78. data/app/models/katello/content_view.rb +41 -29
  79. data/app/models/katello/content_view_deb_filter.rb +51 -0
  80. data/app/models/katello/content_view_deb_filter_rule.rb +24 -0
  81. data/app/models/katello/content_view_filter.rb +10 -3
  82. data/app/models/katello/glue/candlepin/owner.rb +0 -1
  83. data/app/models/katello/installed_package.rb +1 -0
  84. data/app/models/katello/product.rb +3 -0
  85. data/app/models/katello/repository.rb +2 -0
  86. data/app/models/katello/smart_proxy_alternate_content_source.rb +6 -0
  87. data/app/services/cert/certs.rb +8 -16
  88. data/app/services/katello/organization_creator.rb +18 -7
  89. data/app/services/katello/pulp/server.rb +2 -2
  90. data/app/services/katello/pulp3/alternate_content_source.rb +28 -4
  91. data/app/services/katello/pulp3/api/apt.rb +12 -0
  92. data/app/services/katello/pulp3/api/core.rb +8 -0
  93. data/app/services/katello/pulp3/content_view_version/export.rb +38 -11
  94. data/app/services/katello/pulp3/content_view_version/import.rb +12 -5
  95. data/app/services/katello/pulp3/content_view_version/importable_repositories.rb +20 -5
  96. data/app/services/katello/pulp3/content_view_version/metadata_generator.rb +3 -1
  97. data/app/services/katello/pulp3/content_view_version/metadata_map.rb +1 -1
  98. data/app/services/katello/pulp3/content_view_version/syncable_format_export.rb +34 -0
  99. data/app/services/katello/pulp3/deb.rb +3 -1
  100. data/app/services/katello/pulp3/pulp_content_unit.rb +2 -0
  101. data/app/services/katello/pulp3/repository/apt.rb +186 -2
  102. data/app/services/katello/pulp3/repository.rb +33 -4
  103. data/app/services/katello/pulp3/service_common.rb +1 -1
  104. data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +1 -1
  105. data/app/views/foreman/job_templates/install_errata_by_search_query.erb +4 -3
  106. data/app/views/foreman/smart_proxies/show.html.erb +3 -3
  107. data/app/views/katello/api/v2/alternate_content_sources/base.json.rabl +27 -3
  108. data/app/views/katello/api/v2/alternate_content_sources/show.json.rabl +20 -0
  109. data/app/views/katello/api/v2/ansible_collections/compare.json.rabl +10 -0
  110. data/app/views/katello/api/v2/content_facet/show.json.rabl +12 -0
  111. data/app/views/katello/api/v2/content_view_filters/base.json.rabl +5 -0
  112. data/app/views/katello/api/v2/module_streams/compare.json.rabl +10 -0
  113. data/app/views/katello/api/v2/repository_sets/show.json.rabl +8 -0
  114. data/app/views/katello/layouts/foreman_with_bastion.html.erb +1 -1
  115. data/app/views/katello/layouts/react.html.erb +1 -1
  116. data/app/views/overrides/organizations/_edit_override.html.erb +5 -8
  117. data/app/views/overrides/organizations/_index_row_override.html.erb +1 -1
  118. data/app/views/overrides/organizations/_step_1_override.html.erb +5 -0
  119. data/ca/redhat-uep.pem +18 -23
  120. data/config/katello.yaml.example +0 -2
  121. data/config/routes/api/v2.rb +18 -4
  122. data/config/routes/overrides.rb +1 -0
  123. data/db/migrate/20201116161820_create_content_view_deb_filter_rules.rb +17 -0
  124. data/db/migrate/20211220185935_clean_duplicate_content_units.rb +11 -9
  125. data/db/migrate/20220303160220_remove_duplicate_errata.rb +1 -1
  126. data/db/migrate/20220428203334_add_last_refreshed_to_katello_alternate_content_sources.rb +5 -0
  127. data/db/migrate/20220524132259_remove_last_refreshed_from_katello_alternate_content_sources.rb +5 -0
  128. data/db/migrate/20220601163911_add_vendor_to_katello_installed_packages.rb +5 -0
  129. data/db/migrate/20220610165621_add_repositories_and_products_to_acs.rb +23 -0
  130. data/engines/bastion/app/views/bastion/layouts/application.html.erb +1 -1
  131. data/engines/bastion/app/views/bastion/layouts/application_ie.html.erb +1 -1
  132. data/engines/bastion/app/views/bastion/layouts/assets.html.erb +1 -1
  133. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/activation-keys.routes.js +1 -1
  134. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-details.html +1 -1
  135. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/capsule-content/capsule-content.controller.js +1 -1
  136. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-packages.controller.js +11 -3
  137. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-actions.html +1 -1
  138. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-applicable.html +1 -1
  139. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/environment-content.controller.js +2 -0
  140. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/environment.controller.js +2 -0
  141. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-content-views.html +1 -1
  142. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/environments.controller.js +1 -0
  143. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/views/environments.html +3 -3
  144. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +4 -5
  145. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +0 -3
  146. data/engines/bastion_katello/lib/bastion_katello/engine.rb +0 -1
  147. data/lib/katello/engine.rb +1 -2
  148. data/lib/katello/permission_creator.rb +6 -4
  149. data/lib/katello/permissions/host_permissions.rb +1 -0
  150. data/lib/katello/plugin.rb +6 -12
  151. data/lib/katello/tasks/refresh_alternate_content_sources.rake +15 -0
  152. data/lib/katello/version.rb +1 -1
  153. data/locale/action_names.rb +49 -46
  154. data/locale/bn/katello.po +361 -53
  155. data/locale/cs/katello.po +361 -53
  156. data/locale/de/katello.po +366 -58
  157. data/locale/en/katello.po +361 -53
  158. data/locale/es/katello.po +364 -56
  159. data/locale/fr/katello.po +374 -66
  160. data/locale/gu/katello.po +361 -53
  161. data/locale/hi/katello.po +361 -53
  162. data/locale/it/katello.po +361 -53
  163. data/locale/ja/katello.po +374 -66
  164. data/locale/katello.pot +1626 -1079
  165. data/locale/kn/katello.po +361 -53
  166. data/locale/ko/katello.po +361 -53
  167. data/locale/mr/katello.po +361 -53
  168. data/locale/or/katello.po +361 -53
  169. data/locale/pa/katello.po +361 -53
  170. data/locale/pt/katello.po +361 -53
  171. data/locale/pt_BR/katello.po +364 -56
  172. data/locale/ru/katello.po +361 -53
  173. data/locale/ta/katello.po +361 -53
  174. data/locale/te/katello.po +361 -53
  175. data/locale/zh_CN/katello.po +374 -66
  176. data/locale/zh_TW/katello.po +361 -53
  177. data/webpack/components/Bookmark/index.js +22 -14
  178. data/webpack/components/EditableTextInput/EditableTextInput.js +3 -16
  179. data/webpack/components/EditableTextInput/PencilEditButton.js +33 -0
  180. data/webpack/components/Errata/index.js +18 -3
  181. data/webpack/components/Loading.js +1 -1
  182. data/webpack/components/RoutedTabs/index.js +1 -17
  183. data/webpack/components/Search/Search.js +4 -1
  184. data/webpack/components/Search/__tests__/search.test.js +1 -2
  185. data/webpack/components/SelectAllCheckbox/index.js +7 -4
  186. data/webpack/components/SelectableDropdown/SelectableDropdown.js +1 -0
  187. data/webpack/components/Table/EmptyStateMessage.js +77 -2
  188. data/webpack/components/Table/MainTable.js +46 -4
  189. data/webpack/components/Table/MainTable.scss +5 -1
  190. data/webpack/components/Table/TableHooks.js +8 -4
  191. data/webpack/components/Table/TableWrapper.js +19 -9
  192. data/webpack/components/TypeAhead/TypeAhead.js +30 -11
  193. data/webpack/components/TypeAhead/pf3Search/TypeAheadItems.js +1 -1
  194. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +1 -0
  195. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +2 -0
  196. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.js +4 -9
  197. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ContentViewDetailsCard.js +41 -11
  198. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsActions.js +2 -2
  199. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsCard.js +32 -13
  200. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsModal.js +9 -4
  201. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/hostCollectionsCard.test.js +8 -0
  202. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeActions.js +37 -0
  203. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.js +173 -0
  204. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.scss +6 -0
  205. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeConstants.js +6 -0
  206. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeEditModal.js +301 -0
  207. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeSelectors.js +25 -0
  208. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeCard.test.js +108 -0
  209. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeEditModal.test.js +161 -0
  210. data/webpack/components/extensions/HostDetails/Cards/__tests__/errataOverviewCard.test.js +12 -12
  211. data/webpack/components/extensions/HostDetails/DetailsTabCards/HwPropertiesCard.js +100 -0
  212. data/webpack/components/extensions/HostDetails/DetailsTabCards/RecentCommunicationCardExtensions.js +37 -0
  213. data/webpack/components/extensions/HostDetails/DetailsTabCards/SystemPropertiesCardExtensions.js +26 -4
  214. data/webpack/components/extensions/HostDetails/HostDetailsActions.js +11 -0
  215. data/webpack/components/extensions/HostDetails/HostDetailsConstants.js +3 -1
  216. data/webpack/components/extensions/HostDetails/HostDetailsReducer.js +14 -0
  217. data/webpack/components/extensions/HostDetails/HostDetailsSelectors.js +8 -2
  218. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/SecondaryTabsRoutes.js +4 -0
  219. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/constants.js +2 -0
  220. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/index.js +6 -1
  221. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +129 -52
  222. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +87 -38
  223. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackageInstallModal.js +4 -3
  224. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +113 -34
  225. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +25 -3
  226. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionHooks.js +85 -0
  227. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +145 -41
  228. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/EnableTracerModal.js +14 -7
  229. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/HostTracesActions.js +2 -1
  230. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesEnabler.js +104 -0
  231. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +94 -51
  232. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +43 -26
  233. data/webpack/components/extensions/HostDetails/Tabs/{ModuleStreamsTab/__tests__/modules.fixtures.json → __tests__/moduleStreams.fixtures.json} +0 -0
  234. data/webpack/components/extensions/HostDetails/Tabs/{ModuleStreamsTab/__tests__ → __tests__}/moduleStreamsTab.test.js +13 -6
  235. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packageInstallModal.test.js +21 -15
  236. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +8 -0
  237. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySets.fixtures.json +7 -1
  238. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +72 -18
  239. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +8 -14
  240. data/webpack/components/extensions/HostDetails/hostDetailsHelpers.js +18 -0
  241. data/webpack/components/extensions/RegistrationCommands/index.js +49 -17
  242. data/webpack/containers/Application/config.js +5 -10
  243. data/webpack/global_index.js +21 -9
  244. data/webpack/global_test_setup.js +14 -2
  245. data/webpack/ouia_id_check.js +95 -0
  246. data/webpack/redux/actions/RedHatRepositories/helpers.js +7 -1
  247. data/webpack/redux/reducers/index.js +2 -4
  248. data/webpack/scenes/AlternateContentSources/ACSActions.js +48 -3
  249. data/webpack/scenes/AlternateContentSources/ACSConstants.js +17 -0
  250. data/webpack/scenes/AlternateContentSources/ACSSelectors.js +24 -6
  251. data/webpack/scenes/AlternateContentSources/Create/ACSCreateContext.js +4 -0
  252. data/webpack/scenes/AlternateContentSources/Create/ACSCreateWizard.js +191 -0
  253. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCreateFinish.js +95 -0
  254. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCredentials.js +199 -0
  255. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSProducts.js +44 -0
  256. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSReview.js +118 -0
  257. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSSmartProxies.js +42 -0
  258. data/webpack/scenes/AlternateContentSources/Create/Steps/AcsUrlPaths.js +70 -0
  259. data/webpack/scenes/AlternateContentSources/Create/Steps/NameACS.js +57 -0
  260. data/webpack/scenes/AlternateContentSources/Create/Steps/SelectSource.js +93 -0
  261. data/webpack/scenes/AlternateContentSources/Create/__tests__/acsCreate.test.js +256 -0
  262. data/webpack/scenes/AlternateContentSources/Create/__tests__/acsCreateData.fixtures.json +3 -0
  263. data/webpack/scenes/AlternateContentSources/Create/__tests__/contentCredentials.fixtures.json +69 -0
  264. data/webpack/scenes/AlternateContentSources/Create/__tests__/products.fixtures.json +92 -0
  265. data/webpack/scenes/AlternateContentSources/Create/__tests__/smartProxy.fixtures.json +65 -0
  266. data/webpack/scenes/AlternateContentSources/Details/ACSExpandableDetails.js +459 -0
  267. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditCredentials.js +354 -0
  268. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditDetails.js +104 -0
  269. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditProducts.js +120 -0
  270. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditSmartProxies.js +118 -0
  271. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditURLPaths.js +118 -0
  272. data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSEdits.test.js +242 -0
  273. data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSExpandableDetails.test.js +106 -0
  274. data/webpack/scenes/AlternateContentSources/Details/__tests__/acsDetails.fixtures.json +49 -0
  275. data/webpack/scenes/AlternateContentSources/Details/__tests__/acsProducts.fixtures.json +95 -0
  276. data/webpack/scenes/AlternateContentSources/Details/__tests__/simplifiedAcsDetails.fixtures.json +39 -0
  277. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.js +227 -89
  278. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.scss +3 -0
  279. data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsTable.test.js +1 -2
  280. data/webpack/scenes/Content/__tests__/contentTable.test.js +1 -2
  281. data/webpack/scenes/ContentCredentials/ContentCredentialSelectors.js +4 -1
  282. data/webpack/scenes/ContentViews/ContentViewsConstants.js +15 -4
  283. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +2 -2
  284. data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +1 -1
  285. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +1 -2
  286. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +1 -1
  287. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js +2 -2
  288. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +2 -0
  289. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +5 -6
  290. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +113 -0
  291. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +89 -0
  292. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +1 -1
  293. data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +32 -9
  294. data/webpack/scenes/ContentViews/Details/Filters/Add/__tests__/cvFilterAdd.test.js +13 -3
  295. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +39 -27
  296. data/webpack/scenes/ContentViews/Details/Filters/CVDebFilterContent.js +236 -0
  297. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +1 -0
  298. data/webpack/scenes/ContentViews/Details/Filters/CVFilterDetailType.js +10 -0
  299. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +3 -0
  300. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +3 -1
  301. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +17 -4
  302. data/webpack/scenes/ContentViews/Details/Filters/ContentType.js +1 -0
  303. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +34 -22
  304. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/CVDebMatchContentModal.js +97 -0
  305. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +1 -2
  306. data/webpack/scenes/ContentViews/Details/Filters/Rules/DebPackage/AddEditDebPackageRuleModal.js +128 -0
  307. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +56 -3
  308. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +62 -8
  309. data/webpack/scenes/ContentViews/Details/Filters/__tests__/ContentViewPackageGroupFilter.test.js +1 -5
  310. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +1 -2
  311. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +32 -2
  312. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +1 -2
  313. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +1 -2
  314. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyCVContainerImageFilterContent.fixtures.json +13 -0
  315. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyCVPackageFilterRules.fixtures.json +13 -0
  316. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyContentViewFilters.fixtures.json +13 -0
  317. data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +1 -2
  318. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +5 -1
  319. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +1 -2
  320. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/BulkDeleteModal.test.js +3 -0
  321. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompare.js +143 -0
  322. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompare.scss +51 -0
  323. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareConfig.js +314 -0
  324. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareHeader.js +186 -0
  325. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareTable.js +74 -0
  326. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/AnsibleCollectionsCompareAllContentData.fixtures.json +63 -0
  327. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/CVVersionCompare.test.js +657 -0
  328. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/CVVersionEmptyContentCompareData.fixtures.json +14 -0
  329. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ContainerTagsCompareAllContentData.fixtures.json +95 -0
  330. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/DebPackagesCompareAllContentData.fixtures.json +87 -0
  331. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ErrataCompareAllContentData.fixtures.json +319 -0
  332. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ErrataCompareThreeContentTypesData.fixtures.json +131 -0
  333. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/FilesCompareAllContentData.fixtures.json +51 -0
  334. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/FilesCompareThreeContentTypesData.fixtures.json +48 -0
  335. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ModuleStreamsCompareAllContentData.fixtures.json +239 -0
  336. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/PackageGroupsCompareAllContentData.fixtures.json +51 -0
  337. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/PythonPackagesCompareAllContentData.fixtures.json +315 -0
  338. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/RPMPackagesCompareAllContentData.fixtures.json +470 -0
  339. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/RPMPackagesCompareThreeContentTypesData.fixtures.json +475 -0
  340. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewDetails.fixtures.json +160 -0
  341. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionOneDetials.fixtures.json +161 -0
  342. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionThreeDetails.fixtures.json +154 -0
  343. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionTwoDetails.fixtures.json +211 -0
  344. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersions.fixtures.json +1013 -0
  345. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/emptyStateCVVersionOneDetails.fixtures.json +145 -0
  346. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/emptyStateCVVersionTwoDetails.fixtures.json +145 -0
  347. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +102 -36
  348. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +1 -2
  349. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +4 -2
  350. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +1 -2
  351. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetailsEmpty.test.js +1 -2
  352. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +113 -40
  353. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +96 -81
  354. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +5 -6
  355. data/webpack/scenes/ContentViews/__tests__/mockDetails.fixtures.json +7 -2
  356. data/webpack/scenes/ContentViews/components/ContentViewIcon.js +1 -1
  357. data/webpack/scenes/ContentViews/components/ContentViewsCounter.js +1 -1
  358. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +1 -1
  359. data/webpack/scenes/ContentViews/expansions/DetailsExpansion.js +2 -2
  360. data/webpack/scenes/ContentViews/expansions/RelatedContentViewComponentsModal.js +2 -2
  361. data/webpack/scenes/ContentViews/expansions/__tests__/contentViewComponentsModal.test.js +1 -1
  362. data/webpack/scenes/RedHatRepositories/components/Search.js +4 -4
  363. data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +9 -2
  364. data/webpack/scenes/SmartProxy/SmartProxyContentConstants.js +1 -1
  365. data/webpack/scenes/SmartProxy/SmartProxyContentSelectors.js +10 -1
  366. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +0 -30
  367. data/webpack/scenes/Tasks/helpers.js +30 -3
  368. data/webpack/test-utils/nockWrapper.js +7 -0
  369. metadata +114 -179
  370. data/db/seeds.d/107-enable_dynflow.rb +0 -8
  371. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.controller.js +0 -34
  372. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.routes.js +0 -751
  373. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-deletion.controller.js +0 -42
  374. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-activation-keys.controller.js +0 -81
  375. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-confirm.controller.js +0 -65
  376. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-content-hosts.controller.js +0 -82
  377. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-environments.controller.js +0 -76
  378. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion.controller.js +0 -160
  379. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/content-view-deletion.html +0 -58
  380. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-activation-keys.html +0 -94
  381. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-confirm.html +0 -76
  382. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-content-hosts.html +0 -88
  383. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-environments.html +0 -73
  384. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-component.factory.js +0 -32
  385. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-composite-available-content-views.controller.js +0 -75
  386. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-composite-content-views-list.controller.js +0 -68
  387. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite-available-content-views.html +0 -81
  388. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite-content-views-list.html +0 -81
  389. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite.html +0 -24
  390. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-deb-repositories.controller.js +0 -50
  391. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-docker-repositories.controller.js +0 -42
  392. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-file-repositories.controller.js +0 -50
  393. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-ostree-repositories.controller.js +0 -42
  394. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-repositories.controller.js +0 -45
  395. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-deb-repositories-list.controller.js +0 -48
  396. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-details.controller.js +0 -100
  397. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-docker-repositories-list.controller.js +0 -49
  398. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-file-repositories-list.controller.js +0 -48
  399. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-ostree-repositories-list.controller.js +0 -49
  400. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-promotion.controller.js +0 -129
  401. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-publish.controller.js +0 -46
  402. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-repositories-list.controller.js +0 -42
  403. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-repositories.service.js +0 -91
  404. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-versions.controller.js +0 -240
  405. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-errata-filter.controller.js +0 -115
  406. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-module-stream-filter.controller.js +0 -68
  407. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-package-group-filter.controller.js +0 -66
  408. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/date-type-errata-filter.controller.js +0 -77
  409. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/docker-tag-filter.controller.js +0 -137
  410. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/edit-filter.controller.js +0 -36
  411. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/errata-filter-list.controller.js +0 -78
  412. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/errata-filter.controller.js +0 -74
  413. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-content-type.filter.js +0 -21
  414. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-details.controller.js +0 -34
  415. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-helper.service.js +0 -30
  416. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-repositories.controller.js +0 -86
  417. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-rule-matching-package-modal.controller.js +0 -37
  418. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-type.filter.js +0 -21
  419. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter.factory.js +0 -66
  420. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filters.controller.js +0 -85
  421. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/module-stream-list-filter.controller.js +0 -73
  422. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/new-filter.controller.js +0 -100
  423. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/package-filter.controller.js +0 -179
  424. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/package-group-list-filter.controller.js +0 -75
  425. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/rule.factory.js +0 -21
  426. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/date-type-errata-filter.html +0 -9
  427. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/date-type-errata.html +0 -75
  428. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/docker-filter.html +0 -28
  429. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/docker-tag-filter-details.html +0 -65
  430. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/edit-filter.html +0 -19
  431. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/errata-filter-details.html +0 -63
  432. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/errata-filter.html +0 -50
  433. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-details.html +0 -9
  434. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-repositories.html +0 -121
  435. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-rule-matching-package-modal.html +0 -43
  436. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filters.html +0 -85
  437. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter-details.html +0 -58
  438. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter.html +0 -43
  439. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/new-filter.html +0 -62
  440. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter-details.html +0 -182
  441. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter.html +0 -28
  442. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-group-filter-details.html +0 -42
  443. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-group-filter.html +0 -43
  444. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/partials/filter-repositories-count.html +0 -2
  445. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/content-view-history.controller.js +0 -47
  446. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/content-view-history.factory.js +0 -22
  447. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/views/content-view-history.html +0 -36
  448. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-copy.html +0 -20
  449. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-deb-repositories.html +0 -87
  450. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details-tasks.html +0 -4
  451. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details.html +0 -144
  452. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-docker-repositories.html +0 -114
  453. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-file-repositories.html +0 -87
  454. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-info.html +0 -63
  455. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-ostree-repositories.html +0 -87
  456. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-promotion.html +0 -59
  457. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-publish.html +0 -58
  458. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-repositories.html +0 -116
  459. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-versions.html +0 -126
  460. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/content-view-new.controller.js +0 -78
  461. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/views/content-view-new.html +0 -127
  462. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version-content.controller.js +0 -138
  463. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version.controller.js +0 -59
  464. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-apt.html +0 -25
  465. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-components.html +0 -19
  466. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-deb.html +0 -19
  467. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-details.html +0 -15
  468. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-docker.html +0 -23
  469. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-errata.html +0 -48
  470. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-file.html +0 -21
  471. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-module-streams.html +0 -8
  472. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-package-groups.html +0 -21
  473. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-packages.html +0 -27
  474. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-yum.html +0 -42
  475. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version.html +0 -83
  476. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/views/content-views.html +0 -74
  477. data/lib/katello/tasks/reset.rake.bak +0 -67
  478. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  479. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  480. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  481. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  482. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  483. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  484. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  485. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  486. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  487. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  488. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  489. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  490. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  491. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  492. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  493. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  494. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  495. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  496. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  497. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  498. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  499. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  500. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/EnableTracerEmptyState.js +0 -42
  501. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsActions.js +0 -30
  502. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsConstants.js +0 -3
  503. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsPage.js +0 -80
  504. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsReducer.js +0 -39
  505. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsTableSchema.js +0 -60
  506. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsTables.scss +0 -0
  507. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetails.js +0 -94
  508. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsActions.js +0 -23
  509. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsConstants.js +0 -3
  510. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsReducer.js +0 -30
  511. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionsSchema.js +0 -35
  512. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailInfo.test.js +0 -16
  513. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.fixtures.js +0 -25
  514. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.test.js +0 -27
  515. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailsActions.test.js +0 -41
  516. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailsReducer.test.js +0 -33
  517. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailInfo.test.js.snap +0 -83
  518. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetails.test.js.snap +0 -190
  519. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailsActions.test.js.snap +0 -58
  520. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailsReducer.test.js.snap +0 -50
  521. data/webpack/scenes/AnsibleCollections/Details/index.js +0 -17
  522. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionPage.test.js +0 -23
  523. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollections.fixtures.js +0 -52
  524. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsActions.test.js +0 -48
  525. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsReducer.test.js +0 -46
  526. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsTable.test.js +0 -25
  527. data/webpack/scenes/AnsibleCollections/__tests__/__snapshots__/AnsibleCollectionPage.test.js.snap +0 -73
  528. data/webpack/scenes/AnsibleCollections/__tests__/__snapshots__/AnsibleCollectionsTable.test.js.snap +0 -81
  529. data/webpack/scenes/AnsibleCollections/index.js +0 -17
  530. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManageManifestModal.test.js +0 -123
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2fd3647b864eba8c468c3eea9e6d6d867a43192dcb29c0758f0771085fb1621
4
- data.tar.gz: 764696ceedc7d01432439f6ac00012be79383073c35f0d491cbf4a1da1af6a77
3
+ metadata.gz: ed8eb04c88654bdacc69fa01282d4122141a68430d8259cc6f0ec46dcae06367
4
+ data.tar.gz: 96bc2cd4a26684dae6a71884a3fd745469b30118e723613f2640b8017a1c6b50
5
5
  SHA512:
6
- metadata.gz: d67f10a68cf3f81316e77099d82266960fc5887513004f5e35daa47c591ccc44f2a8ba78f54e8ef84c6ba8bc53d5a42c0621d842c70fa5b20c3dd61cae90e648
7
- data.tar.gz: 5c798d57fbde2baf9c9d62c172e294ade51f32e2d822ed56c63983f48d8f690abd0d2f625e061c7318d4680e916d477fc64025974396ead7f17b919bf06a83c4
6
+ metadata.gz: 99b345b1016334d1f7277f2eecb3f6ad8f21a90d45582a30367b49441891216b359fb118c61e2c59ec93fa4071b49e6a9c131175b7ba365613c2fb5acece0a4b
7
+ data.tar.gz: c9523e61da53201364bef634d3960bab1ff7120e648133b168da057bdd5d32c603c44f38e7395097fd2e3960f2451407a7f9444eb4a1382a28ab139452dc0033
@@ -75,8 +75,15 @@ function ktSetParam(name, value) {
75
75
  var paramContainer = ktFindParamContainer(name);
76
76
  if(value) {
77
77
  if(! paramContainer) { // we create the param for kt_activation_keys
78
- $("div#parameters a[target~='#global_parameters_table']").click();
79
- paramContainer = $("div#parameters .fields").last();
78
+ var addParameterButton = $('#parameters').find('.btn-primary');
79
+ addParameterButton.click();
80
+ var directionOfAddedItems = addParameterButton.attr('direction');
81
+ var paramContainer = $('#parameters').find('.fields');
82
+ if(directionOfAddedItems === 'append'){
83
+ paramContainer = paramContainer.last();
84
+ } else {
85
+ paramContainer = paramContainer.first();
86
+ }
80
87
  paramContainer.find("input[name*='name']").val(name);
81
88
  }
82
89
  paramContainer.find("textarea").val(value);
@@ -177,6 +177,9 @@ module Katello
177
177
  end
178
178
  end
179
179
  response.headers['Content-Type'] = media_type
180
+ length = manifest_response.try(:body).try(:size)
181
+ length ||= 0
182
+ response.header['Content-Length'] = "#{length}"
180
183
  render json: manifest_response
181
184
  end
182
185
  end
@@ -59,6 +59,16 @@ module Katello
59
59
  @host = facet.host
60
60
  end
61
61
 
62
+ rescue_from RestClient::Exception do |e|
63
+ Rails.logger.error(pp_exception(e, with_backtrace: false))
64
+ Rails.logger.error(e.backtrace.detect { |line| line.match("katello.*controller") })
65
+ if request_from_katello_cli?
66
+ render :json => { :errors => [e.http_body] }, :status => e.http_code
67
+ else
68
+ render :plain => e.http_body, :status => e.http_code
69
+ end
70
+ end
71
+
62
72
  def authorize_client_or_user
63
73
  client_authorized? || authorize
64
74
  end
@@ -11,6 +11,7 @@ module Katello
11
11
  :content_override, :add_subscriptions, :remove_subscriptions,
12
12
  :subscriptions]
13
13
  before_action :verify_simple_content_access_disabled, :only => [:add_subscriptions]
14
+ before_action :validate_release_version, :only => [:create, :update]
14
15
 
15
16
  wrap_parameters :include => (ActivationKey.attribute_names + %w(host_collection_ids service_level auto_attach purpose_role purpose_usage purpose_addons content_view_environment))
16
17
 
@@ -337,5 +338,11 @@ module Katello
337
338
  fail HttpErrors::BadRequest, _("The specified organization is in Simple Content Access mode. Attaching subscriptions is disabled")
338
339
  end
339
340
  end
341
+
342
+ def validate_release_version
343
+ if params[:release_version].present? && !@organization.library.available_releases.include?(params[:release_version])
344
+ fail HttpErrors::BadRequest, _("Invalid release version: [%s]") % params[:release_version]
345
+ end
346
+ end
340
347
  end
341
348
  end
@@ -0,0 +1,44 @@
1
+ module Katello
2
+ class Api::V2::AlternateContentSourcesBulkActionsController < Api::V2::ApiController
3
+ before_action :find_alternate_content_sources
4
+
5
+ api :PUT, '/alternate_content_sources/bulk/destroy', N_('Destroy one or more alternate content sources')
6
+ param :ids, Array, desc: N_('List of alternate content source IDs'), required: true
7
+ def destroy_alternate_content_sources
8
+ deletable_alternate_content_sources = @alternate_content_sources.deletable
9
+
10
+ if deletable_alternate_content_sources.empty?
11
+ msg = _("Unable to delete any alternate content source. You either do not have the permission to"\
12
+ " delete, or none of the alternate content sources exist.")
13
+ fail HttpErrors::UnprocessableEntity, msg
14
+ end
15
+ task = async_task(::Actions::BulkAction,
16
+ ::Actions::Katello::AlternateContentSource::Destroy,
17
+ deletable_alternate_content_sources)
18
+ respond_for_async :resource => task
19
+ end
20
+
21
+ api :POST, '/alternate_content_sources/bulk/refresh', N_('Refresh alternate content sources')
22
+ param :ids, Array, desc: N_('List of alternate content source IDs'), required: true
23
+ def refresh_alternate_content_sources
24
+ refreshable_alternate_content_sources = @alternate_content_sources.editable
25
+ if refreshable_alternate_content_sources.empty?
26
+ msg = _("Unable to refresh any alternate content source. You either do not have the permission to"\
27
+ " refresh, or none of the alternate content sources exist.")
28
+ fail HttpErrors::UnprocessableEntity, msg
29
+ else
30
+ task = async_task(::Actions::BulkAction,
31
+ ::Actions::Katello::AlternateContentSource::Refresh,
32
+ refreshable_alternate_content_sources)
33
+ respond_for_async resource: task
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def find_alternate_content_sources
40
+ params.require(:ids)
41
+ @alternate_content_sources = AlternateContentSource.readable.where(id: params[:ids])
42
+ end
43
+ end
44
+ end
@@ -2,8 +2,12 @@ module Katello
2
2
  class Api::V2::AlternateContentSourcesController < Api::V2::ApiController
3
3
  include Katello::Concerns::FilteredAutoCompleteSearch
4
4
 
5
- before_action :find_authorized_katello_resource, :only => [:show, :update, :destroy]
6
- before_action :find_smart_proxies
5
+ acs_wrap_params = AlternateContentSource.attribute_names + [:smart_proxy_ids, :smart_proxy_names, :product_ids]
6
+ wrap_parameters :alternate_content_source, include: acs_wrap_params
7
+
8
+ before_action :find_authorized_katello_resource, only: [:show, :update, :destroy, :refresh]
9
+ before_action :find_smart_proxies, only: :create
10
+ before_action :find_products, only: :create
7
11
 
8
12
  def_param_group :acs do
9
13
  param :name, String, desc: N_("Name of the alternate content source")
@@ -11,8 +15,7 @@ module Katello
11
15
  param :base_url, String, desc: N_('Base URL for finding alternate content'), required: false
12
16
  param :subpaths, Array, desc: N_('Path suffixes for finding alternate content'), required: false
13
17
  param :smart_proxy_ids, Array, desc: N_("Ids of smart proxies to associate"), required: false
14
- param :content_type, RepositoryTypeManager.defined_repository_types.keys & AlternateContentSource::CONTENT_TYPES, desc: N_("The content type for the Alternate Content Source"), required: false
15
- param :alternate_content_source_type, AlternateContentSource::ACS_TYPES, desc: N_("The Alternate Content Source type")
18
+ param :smart_proxy_names, Array, desc: N_("Names of smart proxies to associate"), required: false
16
19
  param :upstream_username, String, desc: N_("Basic authentication username"), required: false
17
20
  param :upstream_password, String, desc: N_("Basic authentication password"), required: false
18
21
  param :ssl_ca_cert_id, :number, desc: N_("Identifier of the content credential containing the SSL CA Cert"), required: false
@@ -20,9 +23,10 @@ module Katello
20
23
  param :ssl_client_key_id, :number, desc: N_("Identifier of the content credential containing the SSL Client Key"), required: false
21
24
  param :http_proxy_id, :number, desc: N_("ID of a HTTP Proxy"), required: false
22
25
  param :verify_ssl, :bool, desc: N_("If SSL should be verified for the upstream URL"), required: false
26
+ param :product_ids, Array, desc: N_("IDs of products to copy repository information from into a Simplified Alternate Content Source. Products must include at least one repository of the chosen content type."), required: false
23
27
  end
24
28
 
25
- api :GET, "/alternate_content_sources", N_("List of alternate_content_sources")
29
+ api :GET, "/alternate_content_sources", N_("List alternate content sources.")
26
30
  param_group :search, Api::V2::ApiController
27
31
  add_scoped_search_description_for(AlternateContentSource)
28
32
  def index
@@ -30,9 +34,15 @@ module Katello
30
34
  format.csv do
31
35
  options[:csv] = true
32
36
  alternate_content_sources = scoped_search(index_relation, :name, :asc)
33
- csv_response(alternate_content_sources,
34
- [:id, :name, :description, :label, :base_url, :subpaths, :content_type, :alternate_content_source_type],
35
- ['Id', 'Name', 'Description', 'label', 'Base URL', 'Subpaths', 'Content Type', 'Alternate Content Source Type'])
37
+ if @acs.custom?
38
+ csv_response(alternate_content_sources,
39
+ [:id, :name, :description, :label, :base_url, :subpaths, :content_type, :alternate_content_source_type],
40
+ ['Id', 'Name', 'Description', 'label', 'Base URL', 'Subpaths', 'Content Type', 'Alternate Content Source Type'])
41
+ elsif @acs.simplified?
42
+ csv_response(alternate_content_sources,
43
+ [:id, :name, :description, :label, :content_type, :alternate_content_source_type, :products],
44
+ ['Id', 'Name', 'Description', 'label', 'Content Type', 'Alternate Content Source Type', 'Products'])
45
+ end
36
46
  end
37
47
  format.any do
38
48
  alternate_content_sources = scoped_search(index_relation, :name, :asc)
@@ -45,53 +55,96 @@ module Katello
45
55
  AlternateContentSource.readable.distinct
46
56
  end
47
57
 
48
- api :GET, '/alternate_content_sources/:id', N_('Show an alternate content source')
58
+ api :GET, '/alternate_content_sources/:id', N_('Show an alternate content source.')
49
59
  param :id, :number, :required => true, :desc => N_("Alternate content source ID")
50
60
  def show
51
61
  respond_for_show(:resource => @alternate_content_source)
52
62
  end
53
63
 
54
- api :POST, '/alternate_content_sources', N_('Create an ACS')
64
+ api :POST, '/alternate_content_sources', N_('Create an alternate content source to download content from during repository syncing. Note: alternate content sources are global and affect ALL sync actions on their smart proxies regardless of organization.')
65
+ param :content_type, RepositoryTypeManager.defined_repository_types.keys & AlternateContentSource::CONTENT_TYPES, desc: N_("The content type for the Alternate Content Source"), required: false
66
+ param :alternate_content_source_type, AlternateContentSource::ACS_TYPES, desc: N_("The Alternate Content Source type")
55
67
  param_group :acs
56
68
  def create
57
- @alternate_content_source = ::Katello::AlternateContentSource.new(acs_params)
58
- sync_task(::Actions::Katello::AlternateContentSource::Create, @alternate_content_source, @smart_proxies)
69
+ @alternate_content_source = ::Katello::AlternateContentSource.new(acs_params.except(:smart_proxy_ids, :smart_proxy_names, :product_ids))
70
+ @alternate_content_source.verify_ssl = nil if @alternate_content_source.simplified?
71
+ sync_task(::Actions::Katello::AlternateContentSource::Create, @alternate_content_source, @smart_proxies, @products)
59
72
  @alternate_content_source.reload
60
73
  respond_for_create(resource: @alternate_content_source)
61
74
  end
62
75
 
63
- api :PUT, '/alternate_content_sources/:id', N_('Update an alternate content source')
76
+ api :PUT, '/alternate_content_sources/:id', N_('Update an alternate content source.')
64
77
  param_group :acs
65
78
  param :id, :number, :required => true, :desc => N_("Alternate content source ID")
66
79
  def update
67
- # If a user doesn't include smart proxies in the update call, don't accidentally remove all of them.
68
- if params[:smart_proxy_ids].nil?
80
+ # If a user doesn't include smart proxies or products in the update call, don't accidentally remove all of them.
81
+ if params[:smart_proxy_ids].nil? && params[:smart_proxy_names].nil?
69
82
  @smart_proxies = @alternate_content_source.smart_proxies
83
+ elsif params[:smart_proxy_ids] == [] || params[:smart_proxy_names] == []
84
+ @smart_proxies = []
85
+ else
86
+ find_smart_proxies
87
+ end
88
+
89
+ if params[:product_ids].nil?
90
+ @products = @alternate_content_source.products
91
+ elsif params[:product_ids] == []
92
+ @products = []
93
+ else
94
+ find_products
70
95
  end
71
- sync_task(::Actions::Katello::AlternateContentSource::Update, @alternate_content_source, @smart_proxies, acs_params)
96
+ sync_task(::Actions::Katello::AlternateContentSource::Update, @alternate_content_source, @smart_proxies, @products, acs_params.except(:smart_proxy_ids, :smart_proxy_names, :product_ids))
72
97
  respond_for_show(:resource => @alternate_content_source)
73
98
  end
74
99
 
75
- api :DELETE, '/alternate_content_sources/:id', N_('Destroy an alternate content source')
100
+ api :DELETE, '/alternate_content_sources/:id', N_('Destroy an alternate content source.')
76
101
  param :id, :number, :required => true, :desc => N_("Alternate content source ID")
77
102
  def destroy
78
103
  sync_task(::Actions::Katello::AlternateContentSource::Destroy, @alternate_content_source)
79
104
  respond_for_destroy
80
105
  end
81
106
 
107
+ api :POST, '/alternate_content_sources/:id/refresh', N_('Refresh an alternate content source. Refreshing, like repository syncing, is required before using an alternate content source.')
108
+ param :id, :number, :required => true, :desc => N_("Alternate content source ID")
109
+ def refresh
110
+ task = async_task(::Actions::Katello::AlternateContentSource::Refresh, @alternate_content_source)
111
+ respond_for_async :resource => task
112
+ end
113
+
82
114
  protected
83
115
 
84
116
  def acs_params
85
- keys = [:name, :label, :base_url, {subpaths: []}, {smart_proxy_ids: []}, :content_type, :alternate_content_source_type,
86
- :upstream_username, :upstream_password, :ssl_ca_cert_id, :ssl_client_cert_id, :ssl_client_key_id,
87
- :http_proxy_id, :verify_ssl]
117
+ keys = [:name, :label, :description, {smart_proxy_ids: []}, {smart_proxy_names: []}, :content_type, :alternate_content_source_type]
118
+ keys += [:base_url, {subpaths: []}, :upstream_username, :upstream_password, :ssl_ca_cert_id, :ssl_client_cert_id, :ssl_client_key_id, :http_proxy_id, :verify_ssl] if params[:action] == 'create' || @alternate_content_source&.custom?
119
+ keys += [{product_ids: []}] if params[:action] == 'create' || @alternate_content_source&.simplified?
88
120
  params.require(:alternate_content_source).permit(*keys).to_h.with_indifferent_access
89
121
  end
90
122
 
91
123
  def find_smart_proxies
92
124
  if params[:smart_proxy_ids]
93
125
  @smart_proxies = ::SmartProxy.where(id: params[:smart_proxy_ids])
94
- fail HttpErrors::NotFound, _("Couldn't find smart proxies with id '%s'") % params[:smart_proxy_ids].to_sentence if @smart_proxies.empty?
126
+ elsif params[:smart_proxy_names]
127
+ @smart_proxies = ::SmartProxy.where(name: params[:smart_proxy_names])
128
+ end
129
+ if params[:smart_proxy_ids] && @smart_proxies.length < params[:smart_proxy_ids].length
130
+ missing_smart_proxies = params[:smart_proxy_ids] - @smart_proxies.pluck(:id)
131
+ fail HttpErrors::NotFound, _("Couldn't find smart proxies with id '%s'") % missing_smart_proxies.to_sentence
132
+ elsif params[:smart_proxy_names] && @smart_proxies.length < params[:smart_proxy_names].length
133
+ missing_smart_proxies = params[:smart_proxy_names] - @smart_proxies.pluck(:name)
134
+ fail HttpErrors::NotFound, _("Couldn't find smart proxies with name '%s'") % missing_smart_proxies.to_sentence
135
+ end
136
+ end
137
+
138
+ def find_products
139
+ if params[:product_ids]
140
+ @products = ::Katello::Product.where(id: params[:product_ids])
141
+ else
142
+ @products = nil
143
+ end
144
+
145
+ if params[:product_ids] && @products.length < params[:product_ids].length
146
+ missing_products = params[:product_ids] - @products.pluck(:id)
147
+ fail HttpErrors::NotFound, _("Couldn't find products with id '%s'") % missing_products.to_sentence
95
148
  end
96
149
  end
97
150
  end
@@ -34,12 +34,18 @@ module Katello
34
34
  "no greater than the specified size in gigabytes."), :required => false
35
35
  param :fail_on_missing_content, :bool, :desc => N_("Fails if any of the repositories belonging to this version"\
36
36
  " are unexportable. False by default."), :required => false
37
+ param :format, ::Katello::Pulp3::ContentViewVersion::Export::FORMATS,
38
+ :desc => N_("Export formats. Choose syncable if content is to be imported via repository sync. "\
39
+ "Choose importable if content is to be imported via hammer content-import.
40
+ Defaults to importable."),
41
+ :required => false
37
42
  def version
38
43
  tasks = async_task(::Actions::Katello::ContentViewVersion::Export,
39
44
  content_view_version: @version,
40
45
  destination_server: params[:destination_server],
41
46
  chunk_size: params[:chunk_size_gb],
42
- fail_on_missing_content: ::Foreman::Cast.to_bool(params[:fail_on_missing_content]))
47
+ fail_on_missing_content: ::Foreman::Cast.to_bool(params[:fail_on_missing_content]),
48
+ format: find_export_format)
43
49
  respond_for_async :resource => tasks
44
50
  end
45
51
 
@@ -50,12 +56,18 @@ module Katello
50
56
  "no greater than the specified size in gigabytes."), :required => false
51
57
  param :fail_on_missing_content, :bool, :desc => N_("Fails if any of the repositories belonging to this organization"\
52
58
  " are unexportable. False by default."), :required => false
59
+ param :format, ::Katello::Pulp3::ContentViewVersion::Export::FORMATS,
60
+ :desc => N_("Export formats. Choose syncable if content is to be imported via repository sync. "\
61
+ "Choose importable if content is to be imported via hammer content-import.
62
+ Defaults to importable."),
63
+ :required => false
53
64
  def library
54
65
  tasks = async_task(::Actions::Pulp3::Orchestration::ContentViewVersion::ExportLibrary,
55
66
  @organization,
56
67
  destination_server: params[:destination_server],
57
68
  chunk_size: params[:chunk_size_gb],
58
- fail_on_missing_content: ::Foreman::Cast.to_bool(params[:fail_on_missing_content]))
69
+ fail_on_missing_content: ::Foreman::Cast.to_bool(params[:fail_on_missing_content]),
70
+ format: find_export_format)
59
71
  respond_for_async :resource => tasks
60
72
  end
61
73
 
@@ -63,10 +75,16 @@ module Katello
63
75
  param :id, :number, :desc => N_("Repository identifier"), :required => true
64
76
  param :chunk_size_gb, :number, :desc => N_("Split the exported content into archives "\
65
77
  "no greater than the specified size in gigabytes."), :required => false
78
+ param :format, ::Katello::Pulp3::ContentViewVersion::Export::FORMATS,
79
+ :desc => N_("Export formats. Choose syncable if content is to be imported via repository sync. "\
80
+ "Choose importable if content is to be imported via hammer content-import.
81
+ Defaults to importable."),
82
+ :required => false
66
83
  def repository
67
84
  tasks = async_task(::Actions::Pulp3::Orchestration::ContentViewVersion::ExportRepository,
68
85
  @repository,
69
- chunk_size: params[:chunk_size_gb])
86
+ chunk_size: params[:chunk_size_gb],
87
+ format: find_export_format)
70
88
  respond_for_async :resource => tasks
71
89
  end
72
90
 
@@ -90,5 +108,17 @@ module Katello
90
108
  throw_resource_not_found(name: 'organization', id: params[:organization_id])
91
109
  end
92
110
  end
111
+
112
+ def find_export_format
113
+ if params[:format]
114
+ unless ::Katello::Pulp3::ContentViewVersion::Export::FORMATS.include?(params[:format])
115
+ fail HttpErrors::UnprocessableEntity, _('Invalid export format provided. Format must be one of %s ') %
116
+ ::Katello::Pulp3::ContentViewVersion::Export::FORMATS.join(',')
117
+ end
118
+ params[:format]
119
+ else
120
+ ::Katello::Pulp3::ContentViewVersion::Export::IMPORTABLE
121
+ end
122
+ end
93
123
  end
94
124
  end
@@ -2,6 +2,8 @@ module Katello
2
2
  class Api::V2::ContentUploadsController < Api::V2::ApiController
3
3
  before_action :find_repository
4
4
  skip_before_action :check_media_type, :only => [:update]
5
+ # https://github.com/rails/rails/issues/42278#issuecomment-918079123
6
+ skip_parameter_encoding :update
5
7
 
6
8
  include ::Foreman::Controller::FilterParameters
7
9
  filter_parameters :content
@@ -57,7 +57,7 @@ module Katello
57
57
  else
58
58
  query
59
59
  end
60
- custom_sort = ->(sort_query) { sort_query.joins(join_query).order(order_query) }
60
+ custom_sort = ->(sort_query) { sort_query.joins(join_query).order(Arel.sql(order_query)) }
61
61
  options = { resource_class: Katello::ContentView, custom_sort: custom_sort }
62
62
  collection = scoped_search(query, nil, nil, options)
63
63
  collection[:results] = ComponentViewPresenter.component_presenter(@view, params[:status], views: collection[:results])
@@ -27,7 +27,7 @@ module Katello
27
27
  api :POST, "/content_view_filters/:content_view_filter_id/rules",
28
28
  N_("Create a filter rule. The parameters included should be based upon the filter type.")
29
29
  param :content_view_filter_id, :number, :desc => N_("filter identifier"), :required => true
30
- param :name, Array, of: [String], :desc => N_("package, package group, or docker tag names")
30
+ param :name, Array, of: [String], :desc => N_("deb, package, package group, or docker tag names")
31
31
  param :uuid, String, :desc => N_("package group: uuid")
32
32
  param :version, String, :desc => N_("package: version")
33
33
  param :architecture, String, :desc => N_("package: architecture")
@@ -34,7 +34,7 @@ module Katello
34
34
  api :post, "/content_view_filters", N_("create a filter for a content view")
35
35
  param :content_view_id, :number, :desc => N_("content view identifier"), :required => true
36
36
  param :name, String, :desc => N_("name of the filter"), :required => true
37
- param :type, String, :desc => N_("type of filter (e.g. rpm, package_group, erratum, erratum_id, erratum_date, docker, modulemd)"), :required => true
37
+ param :type, String, :desc => N_("type of filter (e.g. deb, rpm, package_group, erratum, erratum_id, erratum_date, docker, modulemd)"), :required => true
38
38
  param :original_packages, :bool, :desc => N_("add all packages without errata to the included/excluded list. " \
39
39
  "(package filter only)")
40
40
  param :original_module_streams, :bool, :desc => N_("add all module streams without errata to the included/excluded list. " \
@@ -28,7 +28,7 @@ module Katello
28
28
  query = query.with_type(params[:content_type]) if params[:content_type]
29
29
  # Use custom sort to perform the join and order since we need to order by specific content_view
30
30
  # and the ORDER BY query needs access to the katello_content_view_repositories table
31
- custom_sort = ->(sort_query) { sort_query.joins(:root).joins(join_query).order(order_query) }
31
+ custom_sort = ->(sort_query) { sort_query.joins(:root).joins(join_query).order(Arel.sql(order_query)) }
32
32
  options = { resource_class: Katello::Repository, custom_sort: custom_sort }
33
33
  repos = scoped_search(query, nil, nil, options)
34
34
 
@@ -7,23 +7,28 @@ module Katello
7
7
  apipie_concern_subst(:a_resource => N_("a deb package"), :resource => "deb packages")
8
8
  include Katello::Concerns::Api::V2::RepositoryContentController
9
9
 
10
- before_action :find_repositories, :only => [:auto_complete_name, :auto_complete_arch]
11
10
  before_action :find_hosts, :only => :index
11
+ before_action :find_repositories, :only => [:auto_complete_name, :auto_complete_arch]
12
12
 
13
- def auto_complete_name
13
+ def auto_complete(search)
14
14
  page_size = Katello::Concerns::FilteredAutoCompleteSearch::PAGE_SIZE
15
15
  debs = Deb.in_repositories(@repositories)
16
- col = "#{Deb.table_name}.name"
17
- debs = debs.where("#{Deb.table_name}.name ILIKE ?", "#{params[:term]}%").select(col).group(col).order(col).limit(page_size)
16
+ col = ''
17
+ if search == 'name'
18
+ col = "#{Deb.table_name}.name"
19
+ elsif search == 'arch'
20
+ col = "#{Deb.table_name}.architecture"
21
+ end
22
+ debs = debs.where("#{col} ILIKE ?", "#{params[:term]}%").select(col).group(col).order(col).limit(page_size)
18
23
  render :json => debs.pluck(col)
19
24
  end
20
25
 
26
+ def auto_complete_name
27
+ auto_complete('name')
28
+ end
29
+
21
30
  def auto_complete_arch
22
- page_size = Katello::Concerns::FilteredAutoCompleteSearch::PAGE_SIZE
23
- debs = Deb.in_repositories(@repositories)
24
- col = "#{Deb.table_name}.architecture"
25
- debs = debs.where("#{col} ILIKE ?", "%#{params[:term]}%").select(col).group(col).order(col).limit(page_size)
26
- render :json => debs.pluck(col)
31
+ auto_complete('architecture')
27
32
  end
28
33
 
29
34
  api :GET, "/debs", N_("List deb packages")
@@ -39,14 +44,41 @@ module Katello
39
44
  param :host_id, :number, :desc => N_("Host id to list applicable deb packages for")
40
45
  param :packages_restrict_applicable, :boolean, :desc => N_("Return deb packages that are applicable to one or more hosts (defaults to true if host_id is specified)")
41
46
  param :packages_restrict_upgradable, :boolean, :desc => N_("Return deb packages that are upgradable on one or more hosts")
47
+ param :packages_restrict_latest, :boolean, :desc => N_("Return only the latest version of each package")
42
48
  param :available_for, String, :desc => N_("Return deb packages that can be added to the specified object. Only the value 'content_view_version' is supported.")
43
49
  param_group :search, ::Katello::Api::V2::ApiController
44
50
  def index
45
51
  super
46
52
  end
47
53
 
54
+ def final_custom_index_relation(collection)
55
+ # :packages_restrict_latest is intended to filter the result set after all
56
+ # other constraints have been applied, including the scoped_search
57
+ # constraints. If any constraints are applied after this, then a package
58
+ # will not be returned if its latest version does not match those
59
+ # constraints, even if an older version does match those constraints.
60
+ collection = Katello::Deb.latest(collection) if ::Foreman::Cast.to_bool(params[:packages_restrict_latest])
61
+ collection
62
+ end
63
+
64
+ def filter_by_content_view_filter(filter, collection)
65
+ filtered_debs = []
66
+ filter.deb_rules.each do |rule|
67
+ filtered_debs += filter.query_debs_from_collection(collection, rule).pluck(:id)
68
+ end
69
+
70
+ collection.where(id: filter.applicable_debs.pluck(:id) & filtered_debs)
71
+ end
72
+
73
+ def filter_by_content_view_filter_rule(rule, collection)
74
+ filter = rule.filter
75
+ filtered_debs = filter.query_debs_from_collection(collection, rule).pluck(:id)
76
+ collection.where(id: filter.applicable_debs.pluck(:id) & filtered_debs)
77
+ end
78
+
48
79
  def default_sort
49
- %w(name asc)
80
+ lambda { |query| query.default_sort }
81
+ # %w(name asc)
50
82
  end
51
83
 
52
84
  def available_for_content_view_version(version)
@@ -194,7 +194,11 @@ module Katello
194
194
 
195
195
  def host_collection_params_with_host_ids
196
196
  result = host_collection_params
197
- result[:max_hosts] = nil if params[:unlimited_hosts]
197
+ if params[:unlimited_hosts]
198
+ result[:max_hosts] = nil
199
+ elsif params[:max_hosts]
200
+ result[:unlimited_hosts] = false
201
+ end
198
202
  result
199
203
  end
200
204
 
@@ -104,6 +104,7 @@ module Katello
104
104
  relation = relation.where(:errata_type => TYPES_FROM_PARAMS[params[:type].to_sym])
105
105
  end
106
106
  if params[:severity].present?
107
+ params[:severity] = ['None', ''] if params[:severity] == 'None'
107
108
  relation = relation.where(:severity => params[:severity])
108
109
  end
109
110
  relation
@@ -22,7 +22,7 @@ module Katello
22
22
  def index_relation
23
23
  return HostAvailableModuleStream.upgradable([@host]) if params[:status] == HostAvailableModuleStream::UPGRADABLE
24
24
 
25
- rel = @host.host_available_module_streams
25
+ rel = @host.host_available_module_streams.where(available_module_stream_id: find_available_module_stream_ids)
26
26
  if params[:sort_by] == 'installed_profiles'
27
27
  rel = rel.order([:installed_profiles, :status])
28
28
  end
@@ -38,6 +38,14 @@ module Katello
38
38
 
39
39
  private
40
40
 
41
+ def find_available_module_stream_ids
42
+ items = @host.host_available_module_streams.includes(:available_module_stream).map(&:available_module_stream)
43
+ grouped = items.group_by { |item| [item.name, item.stream] }
44
+ grouped.values.map do |item|
45
+ item.first.id
46
+ end
47
+ end
48
+
41
49
  def find_host
42
50
  @host = resource_finder(::Host::Managed.authorized(:view_hosts, ::Host::Managed), params[:host_id])
43
51
  end
@@ -187,6 +187,13 @@ module Katello
187
187
  respond_for_index :collection => full_result_response(releases)
188
188
  end
189
189
 
190
+ api :GET, "/hosts/:host_id/subscriptions/enabled_repositories", N_("Show repositories enabled on the host that are known to Katello")
191
+ param :host_id, String, :desc => N_("id of host"), :required => true
192
+ def enabled_repositories
193
+ repositories = @host.content_facet.try(:bound_repositories) || []
194
+ respond_with_template_collection "index", 'repositories', :collection => full_result_response(repositories)
195
+ end
196
+
190
197
  private
191
198
 
192
199
  def fetch_product_content
@@ -216,7 +223,7 @@ module Katello
216
223
  def action_permission
217
224
  if ['add_subscriptions', 'destroy', 'remove_subscriptions', 'auto_attach', 'content_override'].include?(params[:action])
218
225
  :edit
219
- elsif ['index', 'events', 'product_content', 'available_release_versions'].include?(params[:action])
226
+ elsif ['index', 'events', 'product_content', 'available_release_versions', 'enabled_repositories'].include?(params[:action])
220
227
  :view
221
228
  else
222
229
  fail ::Foreman::Exception.new(N_("unknown permission for %s"), "#{params[:controller]}##{params[:action]}")
@@ -68,9 +68,11 @@ module Katello
68
68
  param :organization, Hash do
69
69
  param :label, String, :required => false
70
70
  end
71
+ param :simple_content_access, :bool, :desc => N_('Whether to turn on Simple Content Access for the organization.'), :required => false, :default => true
71
72
  def create
72
73
  @organization = Organization.new(resource_params)
73
- creator = ::Katello::OrganizationCreator.new(@organization)
74
+ sca = params.key?(:simple_content_access) ? ::Foreman::Cast.to_bool(params[:simple_content_access]) : true
75
+ creator = ::Katello::OrganizationCreator.new(@organization, sca: sca)
74
76
  creator.create!
75
77
  @organization.reload
76
78
  # @taxonomy instance variable is necessary for foreman side
@@ -420,8 +420,8 @@ module Katello
420
420
  param 'id', String, :required => true
421
421
  param 'content_unit_id', String
422
422
  param 'size', String
423
- param 'checksum', String, :required => true
424
- param 'name', String, :required => true, :desc => N_("Needs to only be set for file repositories or docker tags")
423
+ param 'checksum', String
424
+ param 'name', String, :desc => N_("Needs to only be set for file repositories or docker tags")
425
425
  param 'digest', String, :desc => N_("Needs to only be set for docker tags")
426
426
  end
427
427
  Katello::RepositoryTypeManager.generic_repository_types.each_pair do |_, repo_type|
@@ -439,12 +439,6 @@ module Katello
439
439
  end
440
440
 
441
441
  uploads = (params[:uploads] || []).map do |upload|
442
- if upload[:checksum].nil?
443
- fail HttpErrors::BadRequest, _('Checksum is a required parameter.')
444
- end
445
- if upload[:name].nil?
446
- fail HttpErrors::BadRequest, _('Name is a required parameter.')
447
- end
448
442
  upload.permit(:id, :content_unit_id, :size, :checksum, :name, :digest).to_h
449
443
  end
450
444
 
@@ -15,6 +15,14 @@ module Katello
15
15
  render json: { simple_content_access_eligible: eligible }
16
16
  end
17
17
 
18
+ api :GET, "/organizations/:organization_id/simple_content_access/status",
19
+ N_("Check if the specified organization has Simple Content Access enabled")
20
+ param :organization_id, :number, :desc => N_("Organization ID"), :required => true
21
+ def status
22
+ status = @organization.simple_content_access?
23
+ render json: { simple_content_access: status }
24
+ end
25
+
18
26
  api :PUT, "/organizations/:organization_id/simple_content_access/enable",
19
27
  N_("Enable simple content access for a manifest")
20
28
  param :organization_id, :number, :desc => N_("Organization ID"), :required => true