katello 4.5.0.rc2 → 4.6.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 (479) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/katello/api/rhsm/candlepin_dynflow_proxy_controller.rb +10 -0
  3. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +3 -0
  4. data/app/controllers/katello/api/v2/activation_keys_controller.rb +7 -0
  5. data/app/controllers/katello/api/v2/alternate_content_sources_controller.rb +52 -22
  6. data/app/controllers/katello/api/v2/content_exports_controller.rb +33 -3
  7. data/app/controllers/katello/api/v2/content_uploads_controller.rb +2 -0
  8. data/app/controllers/katello/api/v2/content_view_filter_rules_controller.rb +1 -1
  9. data/app/controllers/katello/api/v2/content_view_filters_controller.rb +1 -1
  10. data/app/controllers/katello/api/v2/content_views_controller.rb +1 -1
  11. data/app/controllers/katello/api/v2/debs_controller.rb +42 -10
  12. data/app/controllers/katello/api/v2/host_collections_controller.rb +5 -1
  13. data/app/controllers/katello/api/v2/host_errata_controller.rb +1 -0
  14. data/app/controllers/katello/api/v2/host_module_streams_controller.rb +9 -1
  15. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +8 -1
  16. data/app/controllers/katello/api/v2/organizations_controller.rb +3 -1
  17. data/app/controllers/katello/api/v2/simple_content_access_controller.rb +8 -0
  18. data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +34 -11
  19. data/app/controllers/katello/concerns/organizations_controller_extensions.rb +7 -16
  20. data/app/lib/actions/katello/alternate_content_source/alternate_content_source_common.rb +16 -0
  21. data/app/lib/actions/katello/alternate_content_source/create.rb +11 -5
  22. data/app/lib/actions/katello/alternate_content_source/destroy.rb +3 -4
  23. data/app/lib/actions/katello/alternate_content_source/refresh.rb +3 -5
  24. data/app/lib/actions/katello/alternate_content_source/update.rb +57 -13
  25. data/app/lib/actions/katello/applicability/hosts/bulk_generate.rb +2 -2
  26. data/app/lib/actions/katello/content_view/promote_to_environment.rb +4 -2
  27. data/app/lib/actions/katello/content_view/publish.rb +5 -2
  28. data/app/lib/actions/katello/organization/environment_contents_refresh.rb +20 -0
  29. data/app/lib/actions/katello/organization/manifest_refresh.rb +10 -4
  30. data/app/lib/actions/katello/organization/simple_content_access/toggle.rb +1 -9
  31. data/app/lib/actions/katello/repository/create.rb +9 -0
  32. data/app/lib/actions/katello/repository/destroy.rb +21 -0
  33. data/app/lib/actions/katello/repository/errata_mail.rb +3 -3
  34. data/app/lib/actions/katello/repository/refresh_repository.rb +3 -0
  35. data/app/lib/actions/katello/repository/update.rb +33 -0
  36. data/app/lib/actions/katello/repository/update_redhat_repository.rb +1 -1
  37. data/app/lib/actions/pulp3/alternate_content_source/create.rb +5 -4
  38. data/app/lib/actions/pulp3/alternate_content_source/create_remote.rb +5 -4
  39. data/app/lib/actions/pulp3/alternate_content_source/delete.rb +4 -4
  40. data/app/lib/actions/pulp3/alternate_content_source/delete_remote.rb +4 -4
  41. data/app/lib/actions/pulp3/alternate_content_source/refresh.rb +4 -4
  42. data/app/lib/actions/pulp3/alternate_content_source/update.rb +4 -4
  43. data/app/lib/actions/pulp3/alternate_content_source/update_remote.rb +5 -5
  44. data/app/lib/actions/pulp3/capsule_content/reclaim_space.rb +1 -0
  45. data/app/lib/actions/pulp3/content_view_version/create_export_history.rb +3 -1
  46. data/app/lib/actions/pulp3/content_view_version/create_exporter.rb +9 -2
  47. data/app/lib/actions/pulp3/content_view_version/create_syncable_export_history.rb +45 -0
  48. data/app/lib/actions/pulp3/content_view_version/destroy_exporter.rb +6 -1
  49. data/app/lib/actions/pulp3/content_view_version/export.rb +8 -3
  50. data/app/lib/actions/pulp3/orchestration/alternate_content_source/create.rb +3 -3
  51. data/app/lib/actions/pulp3/orchestration/alternate_content_source/delete.rb +6 -7
  52. data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh.rb +2 -2
  53. data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh_remote.rb +18 -0
  54. data/app/lib/actions/pulp3/orchestration/alternate_content_source/update.rb +3 -3
  55. data/app/lib/actions/pulp3/orchestration/content_view_version/export.rb +28 -13
  56. data/app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb +6 -4
  57. data/app/lib/actions/pulp3/orchestration/content_view_version/export_repository.rb +6 -3
  58. data/app/lib/actions/pulp3/orchestration/content_view_version/syncable_export.rb +82 -0
  59. data/app/lib/actions/pulp3/orchestration/repository/generate_metadata.rb +1 -1
  60. data/app/lib/katello/concerns/base_template_scope_extensions.rb +25 -12
  61. data/app/lib/katello/errors.rb +1 -1
  62. data/app/lib/katello/resources/candlepin/owner.rb +9 -2
  63. data/app/lib/katello/validators/alternate_content_source_products_validator.rb +17 -0
  64. data/app/models/katello/alternate_content_source.rb +39 -8
  65. data/app/models/katello/alternate_content_source_product.rb +13 -0
  66. data/app/models/katello/authorization/repository.rb +4 -2
  67. data/app/models/katello/concerns/host_managed_extensions.rb +12 -2
  68. data/app/models/katello/concerns/pulp_database_unit.rb +2 -2
  69. data/app/models/katello/concerns/smart_proxy_extensions.rb +5 -6
  70. data/app/models/katello/content_view.rb +50 -32
  71. data/app/models/katello/content_view_deb_filter.rb +51 -0
  72. data/app/models/katello/content_view_deb_filter_rule.rb +24 -0
  73. data/app/models/katello/content_view_filter.rb +10 -3
  74. data/app/models/katello/glue/candlepin/owner.rb +0 -1
  75. data/app/models/katello/installed_package.rb +1 -0
  76. data/app/models/katello/product.rb +3 -0
  77. data/app/models/katello/repository.rb +5 -3
  78. data/app/models/katello/rpm.rb +1 -0
  79. data/app/models/katello/smart_proxy_alternate_content_source.rb +6 -0
  80. data/app/services/cert/certs.rb +8 -16
  81. data/app/services/katello/organization_creator.rb +18 -7
  82. data/app/services/katello/pulp/server.rb +2 -2
  83. data/app/services/katello/pulp3/alternate_content_source.rb +22 -4
  84. data/app/services/katello/pulp3/api/apt.rb +12 -0
  85. data/app/services/katello/pulp3/api/core.rb +8 -0
  86. data/app/services/katello/pulp3/api/generic.rb +0 -4
  87. data/app/services/katello/pulp3/content_view_version/export.rb +61 -17
  88. data/app/services/katello/pulp3/content_view_version/import.rb +12 -5
  89. data/app/services/katello/pulp3/content_view_version/importable_repositories.rb +20 -5
  90. data/app/services/katello/pulp3/content_view_version/metadata_generator.rb +3 -1
  91. data/app/services/katello/pulp3/content_view_version/syncable_format_export.rb +34 -0
  92. data/app/services/katello/pulp3/deb.rb +3 -1
  93. data/app/services/katello/pulp3/pulp_content_unit.rb +2 -0
  94. data/app/services/katello/pulp3/repository/apt.rb +186 -2
  95. data/app/services/katello/pulp3/repository.rb +5 -4
  96. data/app/services/katello/pulp3/service_common.rb +1 -1
  97. data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +1 -1
  98. data/app/views/foreman/job_templates/install_errata_by_search_query.erb +4 -3
  99. data/app/views/foreman/smart_proxies/show.html.erb +3 -3
  100. data/app/views/katello/api/v2/alternate_content_sources/base.json.rabl +18 -3
  101. data/app/views/katello/api/v2/alternate_content_sources/show.json.rabl +20 -0
  102. data/app/views/katello/api/v2/ansible_collections/compare.json.rabl +10 -0
  103. data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +1 -1
  104. data/app/views/katello/api/v2/content_view_filters/base.json.rabl +5 -0
  105. data/app/views/katello/api/v2/module_streams/compare.json.rabl +10 -0
  106. data/app/views/katello/api/v2/organizations/show.json.rabl +1 -1
  107. data/app/views/katello/api/v2/repository_sets/show.json.rabl +4 -0
  108. data/app/views/katello/layouts/foreman_with_bastion.html.erb +1 -1
  109. data/app/views/katello/layouts/react.html.erb +1 -1
  110. data/app/views/overrides/organizations/_edit_override.html.erb +5 -8
  111. data/app/views/overrides/organizations/_index_row_override.html.erb +1 -1
  112. data/app/views/overrides/organizations/_step_1_override.html.erb +5 -0
  113. data/ca/redhat-uep.pem +18 -23
  114. data/config/katello.yaml.example +0 -2
  115. data/config/routes/api/v2.rb +2 -0
  116. data/config/routes/overrides.rb +1 -0
  117. data/db/migrate/20201116161820_create_content_view_deb_filter_rules.rb +17 -0
  118. data/db/migrate/20211220185935_clean_duplicate_content_units.rb +11 -9
  119. data/db/migrate/20220524132259_remove_last_refreshed_from_katello_alternate_content_sources.rb +5 -0
  120. data/db/migrate/20220601163911_add_vendor_to_katello_installed_packages.rb +5 -0
  121. data/db/migrate/20220610165621_add_repositories_and_products_to_acs.rb +23 -0
  122. data/engines/bastion/app/views/bastion/layouts/application.html.erb +1 -1
  123. data/engines/bastion/app/views/bastion/layouts/application_ie.html.erb +1 -1
  124. data/engines/bastion/app/views/bastion/layouts/assets.html.erb +1 -1
  125. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/activation-keys.routes.js +1 -1
  126. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-details.html +1 -1
  127. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-packages.controller.js +11 -3
  128. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-actions.html +1 -1
  129. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-applicable.html +1 -1
  130. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/environment-content.controller.js +2 -0
  131. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/environment.controller.js +2 -0
  132. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-content-views.html +1 -1
  133. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/environments.controller.js +1 -0
  134. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/views/environments.html +3 -3
  135. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +4 -5
  136. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +0 -3
  137. data/engines/bastion_katello/lib/bastion_katello/engine.rb +0 -1
  138. data/lib/katello/engine.rb +1 -2
  139. data/lib/katello/permission_creator.rb +2 -2
  140. data/lib/katello/permissions/host_permissions.rb +1 -0
  141. data/lib/katello/plugin.rb +6 -12
  142. data/lib/katello/tasks/refresh_alternate_content_sources.rake +9 -4
  143. data/lib/katello/tasks/refresh_repos.rake +8 -0
  144. data/lib/katello/version.rb +1 -1
  145. data/locale/action_names.rb +49 -46
  146. data/locale/bn/katello.po +361 -53
  147. data/locale/cs/katello.po +361 -53
  148. data/locale/de/katello.po +366 -58
  149. data/locale/en/katello.po +361 -53
  150. data/locale/es/katello.po +364 -56
  151. data/locale/fr/katello.po +374 -66
  152. data/locale/gu/katello.po +361 -53
  153. data/locale/hi/katello.po +361 -53
  154. data/locale/it/katello.po +361 -53
  155. data/locale/ja/katello.po +374 -66
  156. data/locale/katello.pot +1626 -1079
  157. data/locale/kn/katello.po +361 -53
  158. data/locale/ko/katello.po +361 -53
  159. data/locale/mr/katello.po +361 -53
  160. data/locale/or/katello.po +361 -53
  161. data/locale/pa/katello.po +361 -53
  162. data/locale/pt/katello.po +361 -53
  163. data/locale/pt_BR/katello.po +364 -56
  164. data/locale/ru/katello.po +361 -53
  165. data/locale/ta/katello.po +361 -53
  166. data/locale/te/katello.po +361 -53
  167. data/locale/zh_CN/katello.po +374 -66
  168. data/locale/zh_TW/katello.po +361 -53
  169. data/webpack/components/EditableTextInput/EditableTextInput.js +3 -16
  170. data/webpack/components/EditableTextInput/PencilEditButton.js +33 -0
  171. data/webpack/components/Errata/index.js +18 -3
  172. data/webpack/components/Loading.js +1 -1
  173. data/webpack/components/RoutedTabs/index.js +1 -17
  174. data/webpack/components/Search/Search.js +0 -1
  175. data/webpack/components/Search/__tests__/search.test.js +1 -2
  176. data/webpack/components/SelectAllCheckbox/index.js +7 -4
  177. data/webpack/components/SelectableDropdown/SelectableDropdown.js +1 -0
  178. data/webpack/components/Table/EmptyStateMessage.js +77 -2
  179. data/webpack/components/Table/MainTable.js +46 -4
  180. data/webpack/components/Table/TableHooks.js +8 -4
  181. data/webpack/components/Table/TableWrapper.js +14 -8
  182. data/webpack/components/TypeAhead/TypeAhead.js +26 -11
  183. data/webpack/components/TypeAhead/pf3Search/TypeAheadItems.js +1 -1
  184. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +1 -0
  185. data/webpack/components/extensions/HostDetails/ActionsBar/index.js +8 -1
  186. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.js +2 -1
  187. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsModal.js +9 -4
  188. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeActions.js +37 -0
  189. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.js +175 -0
  190. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.scss +6 -0
  191. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeConstants.js +6 -0
  192. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeEditModal.js +301 -0
  193. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeSelectors.js +25 -0
  194. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeCard.test.js +109 -0
  195. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeEditModal.test.js +161 -0
  196. data/webpack/components/extensions/HostDetails/Cards/__tests__/errataOverviewCard.test.js +12 -12
  197. data/webpack/components/extensions/HostDetails/DetailsTabCards/HwPropertiesCard.js +103 -0
  198. data/webpack/components/extensions/HostDetails/DetailsTabCards/InstalledProductsCard.js +1 -0
  199. data/webpack/components/extensions/HostDetails/DetailsTabCards/RegistrationCard.js +1 -0
  200. data/webpack/components/extensions/HostDetails/DetailsTabCards/SystemPropertiesCardExtensions.js +26 -4
  201. data/webpack/components/extensions/HostDetails/HostDetailsConstants.js +3 -1
  202. data/webpack/components/extensions/HostDetails/HostDetailsReducer.js +14 -0
  203. data/webpack/components/extensions/HostDetails/HostDetailsSelectors.js +8 -2
  204. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +9 -1
  205. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +23 -8
  206. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +11 -9
  207. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +58 -8
  208. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +2 -0
  209. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +30 -3
  210. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySets.fixtures.json +3 -0
  211. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +48 -20
  212. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +1 -10
  213. data/webpack/components/extensions/HostDetails/hostDetailsHelpers.js +1 -1
  214. data/webpack/components/extensions/RegistrationCommands/index.js +49 -17
  215. data/webpack/containers/Application/config.js +5 -10
  216. data/webpack/global_index.js +19 -7
  217. data/webpack/global_test_setup.js +14 -2
  218. data/webpack/ouia_id_check.js +95 -0
  219. data/webpack/redux/actions/RedHatRepositories/helpers.js +2 -0
  220. data/webpack/redux/reducers/index.js +2 -4
  221. data/webpack/scenes/AlternateContentSources/ACSActions.js +36 -3
  222. data/webpack/scenes/AlternateContentSources/ACSConstants.js +3 -0
  223. data/webpack/scenes/AlternateContentSources/ACSSelectors.js +15 -6
  224. data/webpack/scenes/AlternateContentSources/Create/ACSCreateWizard.js +73 -42
  225. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCreateFinish.js +26 -10
  226. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSProducts.js +44 -0
  227. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSReview.js +59 -45
  228. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSSmartProxies.js +4 -3
  229. data/webpack/scenes/AlternateContentSources/Create/Steps/AcsUrlPaths.js +0 -1
  230. data/webpack/scenes/AlternateContentSources/Create/Steps/SelectSource.js +35 -19
  231. data/webpack/scenes/AlternateContentSources/Create/__tests__/acsCreate.test.js +120 -13
  232. data/webpack/scenes/AlternateContentSources/Create/__tests__/products.fixtures.json +92 -0
  233. data/webpack/scenes/AlternateContentSources/Details/ACSExpandableDetails.js +459 -0
  234. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditCredentials.js +354 -0
  235. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditDetails.js +104 -0
  236. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditProducts.js +120 -0
  237. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditSmartProxies.js +118 -0
  238. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditURLPaths.js +118 -0
  239. data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSEdits.test.js +242 -0
  240. data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSExpandableDetails.test.js +106 -0
  241. data/webpack/scenes/AlternateContentSources/Details/__tests__/acsDetails.fixtures.json +49 -0
  242. data/webpack/scenes/AlternateContentSources/Details/__tests__/acsProducts.fixtures.json +95 -0
  243. data/webpack/scenes/AlternateContentSources/Details/__tests__/simplifiedAcsDetails.fixtures.json +39 -0
  244. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.js +215 -87
  245. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.scss +3 -0
  246. data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsTable.test.js +1 -2
  247. data/webpack/scenes/Content/__tests__/contentTable.test.js +1 -2
  248. data/webpack/scenes/ContentViews/ContentViewsConstants.js +15 -4
  249. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +1 -2
  250. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +2 -0
  251. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +1 -2
  252. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +113 -0
  253. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +89 -0
  254. data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +32 -9
  255. data/webpack/scenes/ContentViews/Details/Filters/Add/__tests__/cvFilterAdd.test.js +13 -3
  256. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +39 -27
  257. data/webpack/scenes/ContentViews/Details/Filters/CVDebFilterContent.js +236 -0
  258. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +1 -0
  259. data/webpack/scenes/ContentViews/Details/Filters/CVFilterDetailType.js +10 -0
  260. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +3 -0
  261. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +3 -1
  262. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +17 -4
  263. data/webpack/scenes/ContentViews/Details/Filters/ContentType.js +1 -0
  264. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +34 -22
  265. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/CVDebMatchContentModal.js +97 -0
  266. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +1 -2
  267. data/webpack/scenes/ContentViews/Details/Filters/Rules/DebPackage/AddEditDebPackageRuleModal.js +128 -0
  268. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +56 -3
  269. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +62 -8
  270. data/webpack/scenes/ContentViews/Details/Filters/__tests__/ContentViewPackageGroupFilter.test.js +1 -5
  271. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +1 -2
  272. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +32 -2
  273. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +1 -2
  274. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +1 -2
  275. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyCVContainerImageFilterContent.fixtures.json +13 -0
  276. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyCVPackageFilterRules.fixtures.json +13 -0
  277. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyContentViewFilters.fixtures.json +13 -0
  278. data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +1 -2
  279. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +5 -1
  280. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +1 -2
  281. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/BulkDeleteModal.test.js +3 -0
  282. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompare.js +143 -0
  283. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompare.scss +51 -0
  284. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareConfig.js +314 -0
  285. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareHeader.js +186 -0
  286. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareTable.js +74 -0
  287. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/AnsibleCollectionsCompareAllContentData.fixtures.json +63 -0
  288. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/CVVersionCompare.test.js +657 -0
  289. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/CVVersionEmptyContentCompareData.fixtures.json +14 -0
  290. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ContainerTagsCompareAllContentData.fixtures.json +95 -0
  291. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/DebPackagesCompareAllContentData.fixtures.json +87 -0
  292. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ErrataCompareAllContentData.fixtures.json +319 -0
  293. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ErrataCompareThreeContentTypesData.fixtures.json +131 -0
  294. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/FilesCompareAllContentData.fixtures.json +51 -0
  295. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/FilesCompareThreeContentTypesData.fixtures.json +48 -0
  296. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ModuleStreamsCompareAllContentData.fixtures.json +239 -0
  297. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/PackageGroupsCompareAllContentData.fixtures.json +51 -0
  298. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/PythonPackagesCompareAllContentData.fixtures.json +315 -0
  299. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/RPMPackagesCompareAllContentData.fixtures.json +470 -0
  300. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/RPMPackagesCompareThreeContentTypesData.fixtures.json +475 -0
  301. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewDetails.fixtures.json +160 -0
  302. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionOneDetials.fixtures.json +161 -0
  303. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionThreeDetails.fixtures.json +154 -0
  304. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionTwoDetails.fixtures.json +211 -0
  305. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersions.fixtures.json +1013 -0
  306. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/emptyStateCVVersionOneDetails.fixtures.json +145 -0
  307. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/emptyStateCVVersionTwoDetails.fixtures.json +145 -0
  308. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +102 -36
  309. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +1 -2
  310. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +4 -2
  311. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +1 -2
  312. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetailsEmpty.test.js +1 -2
  313. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +113 -40
  314. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +96 -81
  315. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +1 -2
  316. data/webpack/scenes/ContentViews/__tests__/mockDetails.fixtures.json +7 -2
  317. data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +1 -1
  318. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +0 -30
  319. data/webpack/test-utils/nockWrapper.js +7 -0
  320. metadata +83 -181
  321. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.controller.js +0 -34
  322. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.routes.js +0 -751
  323. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-deletion.controller.js +0 -42
  324. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-activation-keys.controller.js +0 -81
  325. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-confirm.controller.js +0 -65
  326. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-content-hosts.controller.js +0 -82
  327. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-environments.controller.js +0 -76
  328. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion.controller.js +0 -160
  329. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/content-view-deletion.html +0 -58
  330. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-activation-keys.html +0 -94
  331. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-confirm.html +0 -76
  332. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-content-hosts.html +0 -88
  333. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-environments.html +0 -73
  334. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-component.factory.js +0 -32
  335. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-composite-available-content-views.controller.js +0 -75
  336. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-composite-content-views-list.controller.js +0 -68
  337. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite-available-content-views.html +0 -81
  338. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite-content-views-list.html +0 -81
  339. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite.html +0 -24
  340. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-deb-repositories.controller.js +0 -50
  341. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-docker-repositories.controller.js +0 -42
  342. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-file-repositories.controller.js +0 -50
  343. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-ostree-repositories.controller.js +0 -42
  344. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-repositories.controller.js +0 -45
  345. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-deb-repositories-list.controller.js +0 -48
  346. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-details.controller.js +0 -100
  347. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-docker-repositories-list.controller.js +0 -49
  348. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-file-repositories-list.controller.js +0 -48
  349. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-ostree-repositories-list.controller.js +0 -49
  350. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-promotion.controller.js +0 -129
  351. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-publish.controller.js +0 -46
  352. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-repositories-list.controller.js +0 -42
  353. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-repositories.service.js +0 -91
  354. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-versions.controller.js +0 -240
  355. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-errata-filter.controller.js +0 -115
  356. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-module-stream-filter.controller.js +0 -68
  357. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-package-group-filter.controller.js +0 -66
  358. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/date-type-errata-filter.controller.js +0 -77
  359. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/docker-tag-filter.controller.js +0 -137
  360. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/edit-filter.controller.js +0 -36
  361. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/errata-filter-list.controller.js +0 -78
  362. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/errata-filter.controller.js +0 -74
  363. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-content-type.filter.js +0 -21
  364. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-details.controller.js +0 -34
  365. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-helper.service.js +0 -30
  366. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-repositories.controller.js +0 -86
  367. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-rule-matching-package-modal.controller.js +0 -37
  368. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-type.filter.js +0 -21
  369. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter.factory.js +0 -66
  370. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filters.controller.js +0 -85
  371. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/module-stream-list-filter.controller.js +0 -73
  372. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/new-filter.controller.js +0 -100
  373. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/package-filter.controller.js +0 -179
  374. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/package-group-list-filter.controller.js +0 -75
  375. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/rule.factory.js +0 -21
  376. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/date-type-errata-filter.html +0 -9
  377. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/date-type-errata.html +0 -75
  378. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/docker-filter.html +0 -28
  379. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/docker-tag-filter-details.html +0 -65
  380. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/edit-filter.html +0 -19
  381. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/errata-filter-details.html +0 -63
  382. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/errata-filter.html +0 -50
  383. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-details.html +0 -9
  384. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-repositories.html +0 -121
  385. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-rule-matching-package-modal.html +0 -43
  386. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filters.html +0 -85
  387. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter-details.html +0 -58
  388. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter.html +0 -43
  389. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/new-filter.html +0 -62
  390. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter-details.html +0 -182
  391. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter.html +0 -28
  392. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-group-filter-details.html +0 -42
  393. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-group-filter.html +0 -43
  394. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/partials/filter-repositories-count.html +0 -2
  395. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/content-view-history.controller.js +0 -47
  396. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/content-view-history.factory.js +0 -22
  397. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/views/content-view-history.html +0 -36
  398. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-copy.html +0 -20
  399. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-deb-repositories.html +0 -87
  400. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details-tasks.html +0 -4
  401. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details.html +0 -144
  402. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-docker-repositories.html +0 -114
  403. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-file-repositories.html +0 -87
  404. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-info.html +0 -63
  405. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-ostree-repositories.html +0 -87
  406. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-promotion.html +0 -59
  407. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-publish.html +0 -58
  408. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-repositories.html +0 -116
  409. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-versions.html +0 -126
  410. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/content-view-new.controller.js +0 -78
  411. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/views/content-view-new.html +0 -127
  412. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version-content.controller.js +0 -138
  413. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version.controller.js +0 -59
  414. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-apt.html +0 -25
  415. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-components.html +0 -19
  416. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-deb.html +0 -19
  417. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-details.html +0 -15
  418. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-docker.html +0 -23
  419. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-errata.html +0 -48
  420. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-file.html +0 -21
  421. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-module-streams.html +0 -8
  422. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-package-groups.html +0 -21
  423. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-packages.html +0 -27
  424. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-yum.html +0 -42
  425. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version.html +0 -83
  426. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/views/content-views.html +0 -74
  427. data/lib/katello/tasks/reset.rake.bak +0 -67
  428. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  429. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  430. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  431. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  432. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  433. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  434. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  435. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  436. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  437. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  438. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  439. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  440. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  441. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  442. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  443. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  444. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  445. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  446. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  447. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  448. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  449. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  450. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsActions.js +0 -30
  451. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsConstants.js +0 -3
  452. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsPage.js +0 -80
  453. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsReducer.js +0 -39
  454. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsTableSchema.js +0 -60
  455. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsTables.scss +0 -0
  456. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetails.js +0 -94
  457. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsActions.js +0 -23
  458. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsConstants.js +0 -3
  459. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsReducer.js +0 -30
  460. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionsSchema.js +0 -35
  461. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailInfo.test.js +0 -16
  462. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.fixtures.js +0 -25
  463. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.test.js +0 -27
  464. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailsActions.test.js +0 -41
  465. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailsReducer.test.js +0 -33
  466. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailInfo.test.js.snap +0 -83
  467. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetails.test.js.snap +0 -190
  468. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailsActions.test.js.snap +0 -58
  469. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailsReducer.test.js.snap +0 -50
  470. data/webpack/scenes/AnsibleCollections/Details/index.js +0 -17
  471. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionPage.test.js +0 -23
  472. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollections.fixtures.js +0 -52
  473. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsActions.test.js +0 -48
  474. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsReducer.test.js +0 -46
  475. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsTable.test.js +0 -25
  476. data/webpack/scenes/AnsibleCollections/__tests__/__snapshots__/AnsibleCollectionPage.test.js.snap +0 -73
  477. data/webpack/scenes/AnsibleCollections/__tests__/__snapshots__/AnsibleCollectionsTable.test.js.snap +0 -81
  478. data/webpack/scenes/AnsibleCollections/index.js +0 -17
  479. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManageManifestModal.test.js +0 -123
@@ -1,5 +1,7 @@
1
1
  module Katello
2
2
  class AlternateContentSource < Katello::Model
3
+ audited
4
+
3
5
  include Ext::LabelFromName
4
6
  include Encryptable
5
7
  include ::ScopedSearchExtensions
@@ -8,9 +10,9 @@ module Katello
8
10
 
9
11
  self.table_name = :katello_alternate_content_sources
10
12
 
11
- # TODO: simplified, rhui
12
- ACS_TYPES = %w(custom).freeze
13
+ ACS_TYPES = %w(custom simplified).freeze
13
14
  CONTENT_TYPES = [::Katello::Repository::YUM_TYPE, ::Katello::Repository::FILE_TYPE].freeze
15
+ AUDIT_REFRESH_ACTION = 'refresh'.freeze
14
16
 
15
17
  encrypts :upstream_password
16
18
 
@@ -18,18 +20,27 @@ module Katello
18
20
  belongs_to :ssl_client_cert, inverse_of: :ssl_client_alternate_content_sources, class_name: "Katello::ContentCredential"
19
21
  belongs_to :ssl_client_key, inverse_of: :ssl_key_alternate_content_sources, class_name: "Katello::ContentCredential"
20
22
  belongs_to :http_proxy, inverse_of: :alternate_content_sources
21
- has_many :smart_proxy_alternate_content_sources, dependent: :destroy,
23
+
24
+ has_many :alternate_content_source_products, dependent: :delete_all, inverse_of: :alternate_content_source,
25
+ class_name: "Katello::AlternateContentSourceProduct"
26
+ has_many :products, through: :alternate_content_source_products, inverse_of: :alternate_content_sources,
27
+ class_name: "Katello::Product"
28
+
29
+ has_many :smart_proxy_alternate_content_sources, dependent: :delete_all,
22
30
  inverse_of: :alternate_content_source
23
- has_many :smart_proxies, through: :smart_proxy_alternate_content_sources
31
+ has_many :smart_proxies, -> { distinct }, through: :smart_proxy_alternate_content_sources
24
32
 
33
+ validates :base_url, :subpaths, :verify_ssl, :upstream_username,
34
+ :upstream_password, :ssl_ca_cert, :ssl_client_cert, :ssl_client_key, if: :simplified?, absence: true
25
35
  validates :base_url, if: :custom?, presence: true
36
+ validates :products, if: :custom?, absence: true
26
37
  validates :verify_ssl, if: :custom?, exclusion: [nil]
27
38
  validates :alternate_content_source_type, inclusion: {
28
39
  in: ->(_) { ACS_TYPES },
29
40
  allow_blank: false,
30
41
  message: ->(_, _) { _("is not a valid type. Must be one of the following: %s") % ACS_TYPES.join(',') }
31
42
  }
32
- validates :content_type, if: :custom?, inclusion: {
43
+ validates :content_type, inclusion: {
33
44
  in: ->(_) { RepositoryTypeManager.defined_repository_types.keys & CONTENT_TYPES },
34
45
  allow_blank: false,
35
46
  message: ->(_, _) { _("is not allowed for ACS. Must be one of the following: %s") % (RepositoryTypeManager.defined_repository_types.keys & CONTENT_TYPES).join(',') }
@@ -44,16 +55,28 @@ module Katello
44
55
  scoped_search on: :content_type, complete_value: true
45
56
  scoped_search on: :alternate_content_source_type, complete_value: true
46
57
  scoped_search on: :upstream_username, complete_value: true
47
- scoped_search on: :smart_proxy_id, relation: :smart_proxy_alternate_content_sources, validator: ScopedSearch::Validators::INTEGER, only_explicit: true
58
+ scoped_search on: :id, relation: :smart_proxies, rename: :smart_proxy_id, validator: ScopedSearch::Validators::INTEGER, only_explicit: true
59
+ scoped_search on: :name, relation: :smart_proxies, rename: :smart_proxy_name, complete_value: true
60
+ scoped_search on: :id, relation: :products, rename: :product_id, validator: ScopedSearch::Validators::INTEGER, only_explicit: true
61
+ scoped_search on: :name, relation: :products, rename: :product_name, complete_value: true
48
62
 
49
- def backend_service(smart_proxy)
50
- @service ||= ::Katello::Pulp3::AlternateContentSource.new(self, smart_proxy)
63
+ def backend_service(smart_proxy, repository = nil)
64
+ @service ||= ::Katello::Pulp3::AlternateContentSource.new(self, smart_proxy, repository)
51
65
  end
52
66
 
53
67
  def custom?
54
68
  alternate_content_source_type == 'custom'
55
69
  end
56
70
 
71
+ def simplified?
72
+ alternate_content_source_type == 'simplified'
73
+ end
74
+
75
+ def self.with_products(products)
76
+ products = [products] unless products.is_a?(Array)
77
+ joins(:alternate_content_source_products).where('katello_alternate_content_source_products.product_id in (:product_ids)', product_ids: products.pluck(:id))
78
+ end
79
+
57
80
  def self.with_type(content_type)
58
81
  where(content_type: content_type)
59
82
  end
@@ -67,5 +90,13 @@ module Katello
67
90
  @latest_dynflow_refresh_task ||= ForemanTasks::Task::DynflowTask.where(:label => Actions::Katello::AlternateContentSource::Refresh.name).
68
91
  for_resource(self).order(:started_at).last
69
92
  end
93
+
94
+ def audit_refresh
95
+ write_audit(action: AUDIT_REFRESH_ACTION, comment: _('Successfully refreshed.'), audited_changes: {})
96
+ end
97
+
98
+ def audit_updated_products(old_product_ids)
99
+ write_audit(action: 'update', comment: _('Products updated.'), audited_changes: { 'product_ids' => [old_product_ids, product_ids] })
100
+ end
70
101
  end
71
102
  end
@@ -0,0 +1,13 @@
1
+ module Katello
2
+ class AlternateContentSourceProduct < Katello::Model
3
+ audited
4
+ # Do not use active record callbacks in this join model. Direct INSERTs and DELETEs are done
5
+ self.table_name = :katello_alternate_content_source_products
6
+ belongs_to :alternate_content_source, inverse_of: :alternate_content_source_products, class_name: 'Katello::AlternateContentSource'
7
+ belongs_to :product, inverse_of: :alternate_content_source_products, class_name: 'Katello::Product'
8
+ delegate :custom?, to: :alternate_content_source
9
+ delegate :simplified?, to: :alternate_content_source
10
+
11
+ validates_with Validators::AlternateContentSourceProductsValidator, :attributes => [:product_id], if: :simplified?
12
+ end
13
+ end
@@ -5,11 +5,13 @@ module Katello
5
5
  delegate :editable?, to: :product
6
6
 
7
7
  def deletable?(remove_from_content_view_versions = true)
8
- product.editable? && (remove_from_content_view_versions || !promoted? || !self.content_views.generated_for_none.exists?)
8
+ return false unless product.editable?
9
+ remove_from_content_view_versions || !promoted? || (self.content_views.exists? && !self.content_views.generated_for_none.exists?)
9
10
  end
10
11
 
11
12
  def redhat_deletable?(remove_from_content_view_versions = false)
12
- (remove_from_content_view_versions || !self.promoted? || !self.content_views.generated_for_none.exists?) && self.product.editable?
13
+ return false unless product.editable?
14
+ remove_from_content_view_versions || !self.promoted? || (self.content_views.exists? && !self.content_views.generated_for_none.exists?)
13
15
  end
14
16
 
15
17
  def readable?
@@ -204,7 +204,16 @@ module Katello
204
204
 
205
205
  def import_package_profile_in_bulk(simple_packages)
206
206
  nvreas = simple_packages.map { |sp| sp.nvrea }
207
- found = InstalledPackage.where(:nvrea => nvreas).select(:id, :nvrea).to_a
207
+ found_nvrea = InstalledPackage.where(:nvrea => nvreas)
208
+ nil_vendor_installed_packages = found_nvrea.where(vendor: nil)
209
+ unless nil_vendor_installed_packages.blank?
210
+ packages_to_update = simple_packages.select { |sp| !sp.vendor.blank? && nil_vendor_installed_packages&.map(&:nvrea)&.include?(sp.nvrea) }
211
+ packages_to_update.each do |simple_package|
212
+ nil_vendor_installed_packages.where(nvrea: simple_package.nvrea).update(vendor: simple_package.vendor)
213
+ end
214
+ end
215
+
216
+ found = found_nvrea.select(:id, :nvrea).to_a
208
217
  found_nvreas = found.map(&:nvrea)
209
218
 
210
219
  new_packages = simple_packages.select { |sp| !found_nvreas.include?(sp.nvrea) }
@@ -217,7 +226,8 @@ module Katello
217
226
  :epoch => simple_package.epoch,
218
227
  :version => simple_package.version,
219
228
  :release => simple_package.release,
220
- :arch => simple_package.arch)
229
+ :arch => simple_package.arch,
230
+ :vendor => simple_package.vendor)
221
231
  end
222
232
  InstalledPackage.import(installed_packages, validate: false, on_duplicate_key_ignore: true)
223
233
  #re-lookup all imported to pickup any duplicates/conflicts
@@ -156,8 +156,8 @@ module Katello
156
156
  end
157
157
 
158
158
  self.joins(repository_association_units).
159
- where(repository_association_class.table_name => {:repository_id => facet_repos,
160
- content_unit_association_id => facet_content_units}).distinct
159
+ where(repository_association_class.table_name => { :repository_id => facet_repos,
160
+ content_unit_association_id => facet_content_units }).distinct
161
161
  end
162
162
 
163
163
  def with_identifiers(ids)
@@ -57,6 +57,7 @@ module Katello
57
57
  has_many :hostgroup_content_facets, :class_name => "::Katello::Hostgroup::ContentFacet", :foreign_key => :content_source_id,
58
58
  :inverse_of => :content_source, :dependent => :nullify
59
59
  has_many :hostgroups, :class_name => "::Hostgroup", :through => :hostgroup_content_facets
60
+ has_many :smart_proxy_alternate_content_sources, :class_name => "::Katello::SmartProxyAlternateContentSource", :inverse_of => :smart_proxy, :dependent => :delete_all
60
61
 
61
62
  validates :download_policy, inclusion: {
62
63
  :in => DOWNLOAD_POLICIES,
@@ -188,14 +189,12 @@ module Katello
188
189
  end
189
190
 
190
191
  def pulp3_ssl_configuration(config, connection_adapter = Faraday.default_adapter)
191
- legacy_pulp_cert = !self.setting(PULP3_FEATURE, 'client_authentication')&.include?('client_certificate')
192
-
193
192
  if connection_adapter == :excon
194
- config.ssl_client_cert = ::Cert::Certs.ssl_client_cert_filename(use_admin_as_cn_cert: legacy_pulp_cert)
195
- config.ssl_client_key = ::Cert::Certs.ssl_client_key_filename(use_admin_as_cn_cert: legacy_pulp_cert)
193
+ config.ssl_client_cert = ::Cert::Certs.ssl_client_cert_filename
194
+ config.ssl_client_key = ::Cert::Certs.ssl_client_key_filename
196
195
  elsif connection_adapter == :net_http
197
- config.ssl_client_cert = ::Cert::Certs.ssl_client_cert(use_admin_as_cn_cert: legacy_pulp_cert)
198
- config.ssl_client_key = ::Cert::Certs.ssl_client_key(use_admin_as_cn_cert: legacy_pulp_cert)
196
+ config.ssl_client_cert = ::Cert::Certs.ssl_client_cert
197
+ config.ssl_client_key = ::Cert::Certs.ssl_client_key
199
198
  else
200
199
  fail "Unexpected connection_adapter #{Faraday.default_adapter}! Cannot continue, this is likely a bug."
201
200
  end
@@ -33,49 +33,50 @@ module Katello
33
33
  has_many :content_view_repositories, :class_name => 'Katello::ContentViewRepository',
34
34
  :dependent => :destroy, :inverse_of => :content_view
35
35
  has_many :repositories, :through => :content_view_repositories, :class_name => "Katello::Repository",
36
- :after_remove => :remove_repository
36
+ :after_remove => :remove_repository
37
37
 
38
38
  has_many :filters, :dependent => :destroy, :class_name => "Katello::ContentViewFilter"
39
39
 
40
40
  has_many :activation_keys, :class_name => "Katello::ActivationKey", :dependent => :restrict_with_exception
41
41
 
42
42
  has_many :content_facets, :class_name => "Katello::Host::ContentFacet",
43
- :inverse_of => :content_view, :dependent => :restrict_with_exception
44
- has_many :hosts, :class_name => "::Host::Managed", :through => :content_facets,
45
- :inverse_of => :content_view
43
+ :inverse_of => :content_view, :dependent => :restrict_with_exception
44
+ has_many :hosts, :class_name => "::Host::Managed", :through => :content_facets,
45
+ :inverse_of => :content_view
46
46
  has_many :hostgroup_content_facets, :class_name => "Katello::Hostgroup::ContentFacet",
47
- :inverse_of => :content_view, :dependent => :nullify
47
+ :inverse_of => :content_view, :dependent => :nullify
48
48
  has_many :hostgroups, :class_name => "::Hostgroup", :through => :hostgroup_content_facets,
49
- :inverse_of => :content_view
49
+ :inverse_of => :content_view
50
50
 
51
51
  has_many :repository_references, :class_name => 'Katello::Pulp3::RepositoryReference',
52
52
  :dependent => :destroy, :inverse_of => :content_view
53
53
 
54
54
  validates_lengths_from_database :except => [:label]
55
- validates :label, :uniqueness => {:scope => :organization_id},
56
- :presence => true
57
- validates :name, :presence => true, :uniqueness => {:scope => :organization_id}
55
+ validates :label, :uniqueness => { :scope => :organization_id },
56
+ :presence => true
57
+ validates :name, :presence => true, :uniqueness => { :scope => :organization_id }
58
58
  validates :organization_id, :presence => true
59
59
  validate :check_non_composite_components
60
60
  validate :check_docker_conflicts
61
61
  validate :check_non_composite_auto_publish
62
+ validate :check_default_label_name, if: :default?
62
63
  validates :composite, :inclusion => [true, false]
63
64
  validates :composite,
64
- inclusion: { in: [false], message: "Composite Content Views can not solve dependencies"},
65
+ inclusion: { in: [false], message: "Composite Content Views can not solve dependencies" },
65
66
  if: :solve_dependencies
66
67
  validates :import_only, :inclusion => [true, false]
67
68
  validates :import_only,
68
- inclusion: { in: [false], message: "Import-only Content Views can not be Composite"},
69
+ inclusion: { in: [false], message: "Import-only Content Views can not be Composite" },
69
70
  if: :composite
70
71
  validates :import_only,
71
- inclusion: { in: [false], message: "Import-only Content Views can not solve dependencies"},
72
+ inclusion: { in: [false], message: "Import-only Content Views can not solve dependencies" },
72
73
  if: :solve_dependencies
73
74
  validate :import_only_immutable
74
75
  validates :generated_for,
75
- exclusion: { in: [:none], message: "Generated Content Views can not be Composite"},
76
+ exclusion: { in: [:none], message: "Generated Content Views can not be Composite" },
76
77
  if: :composite
77
78
  validates :generated_for,
78
- exclusion: { in: [:none], message: "Generated Content Views can not solve dependencies"},
79
+ exclusion: { in: [:none], message: "Generated Content Views can not solve dependencies" },
79
80
  if: :solve_dependencies
80
81
 
81
82
  validates_with Validators::KatelloNameFormatValidator, :attributes => :name
@@ -87,8 +88,12 @@ module Katello
87
88
  scope :non_composite, -> { where(:composite => [nil, false]) }
88
89
  scope :generated, -> { where.not(:generated_for => :none) }
89
90
  scope :generated_for_repository, -> { where(:generated_for => [:repository_export, :repository_import]) }
90
- scope :not_generated_for_repository, -> { where.not(id: generated_for_repository) }
91
-
91
+ scope :ignore_generated, -> {
92
+ where.not(:generated_for => [:repository_export,
93
+ :repository_import,
94
+ :library_export_syncable,
95
+ :repository_export_syncable])
96
+ }
92
97
  scope :generated_for_library, -> { where(:generated_for => [:library_export, :library_import]) }
93
98
 
94
99
  scoped_search :on => :name, :complete_value => true
@@ -103,7 +108,9 @@ module Katello
103
108
  library_export: 1,
104
109
  repository_export: 2,
105
110
  library_import: 3,
106
- repository_import: 4
111
+ repository_import: 4,
112
+ library_export_syncable: 5,
113
+ repository_export_syncable: 6
107
114
  }, _prefix: true
108
115
 
109
116
  set_crud_hooks :content_view
@@ -203,6 +210,10 @@ module Katello
203
210
  new_view.filters << new_filter
204
211
 
205
212
  case filter.type
213
+ when ContentViewDebFilter.name
214
+ filter.deb_rules.each do |rule|
215
+ new_filter.deb_rules << rule.dup
216
+ end
206
217
  when ContentViewPackageFilter.name
207
218
  filter.package_rules.each do |rule|
208
219
  new_filter.package_rules << rule.dup
@@ -279,6 +290,7 @@ module Katello
279
290
  required :env, 'Katello::KTEnvironment', desc: 'a __Katello::KTEnvironment__ object for which we load the __Katello::ContentViewVersion__ object'
280
291
  returns 'Katello::ContentViewVersion'
281
292
  end
293
+
282
294
  def version(env)
283
295
  self.versions.in_environment(env).order("#{Katello::ContentViewVersion.table_name}.id ASC").readonly(false).last
284
296
  end
@@ -306,7 +318,7 @@ module Katello
306
318
 
307
319
  def history
308
320
  Katello::ContentViewHistory.joins(:content_view_version).where(
309
- "#{Katello::ContentViewVersion.table_name}.content_view_id" => self.id)
321
+ "#{Katello::ContentViewVersion.table_name}.content_view_id" => self.id)
310
322
  end
311
323
 
312
324
  def version_environment(env)
@@ -387,7 +399,7 @@ module Katello
387
399
  end
388
400
 
389
401
  def auto_publish_components
390
- component_composites.where(latest: true).joins(:composite_content_view).where(self.class.table_name => {auto_publish: true})
402
+ component_composites.where(latest: true).joins(:composite_content_view).where(self.class.table_name => { auto_publish: true })
391
403
  end
392
404
 
393
405
  def publish_repositories(override_components = nil)
@@ -446,8 +458,8 @@ module Katello
446
458
  def get_repo_clone(env, repo)
447
459
  lib_id = repo.library_instance_id || repo.id
448
460
  Repository.in_environment(env).where(:library_instance_id => lib_id).
449
- joins(:content_view_version).
450
- where("#{Katello::ContentViewVersion.table_name}.content_view_id" => self.id)
461
+ joins(:content_view_version).
462
+ where("#{Katello::ContentViewVersion.table_name}.content_view_id" => self.id)
451
463
  end
452
464
 
453
465
  def delete(from_env)
@@ -497,9 +509,15 @@ module Katello
497
509
  end
498
510
  end
499
511
 
512
+ def check_default_label_name
513
+ if default? && !(name == 'Default Organization View' && label == 'Default_Organization_View')
514
+ errors.add(:base, _("Name and label of default content view should not be changed"))
515
+ end
516
+ end
517
+
500
518
  def check_docker_conflicts
501
519
  duplicate_docker_repos.each do |repo|
502
- msg = _("Container Image repo '%{repo}' is present in multiple component content views.") % {repo: repo.name}
520
+ msg = _("Container Image repo '%{repo}' is present in multiple component content views.") % { repo: repo.name }
503
521
  errors.add(:base, msg)
504
522
  end
505
523
  end
@@ -526,7 +544,7 @@ module Katello
526
544
  :environment_id => env.id,
527
545
  :content_view => self,
528
546
  :content_view_version => version
529
- )
547
+ )
530
548
  end
531
549
  end
532
550
 
@@ -555,7 +573,7 @@ module Katello
555
573
  :minor => minor,
556
574
  :content_view => self,
557
575
  :components => components
558
- )
576
+ )
559
577
 
560
578
  update(:next_version => major.to_i + 1) unless major.to_i < next_version
561
579
  version
@@ -626,14 +644,14 @@ module Katello
626
644
  def check_remove_from_environment!(env)
627
645
  errors = []
628
646
 
629
- dependencies = {hosts: _("hosts"),
630
- activation_keys: _("activation keys")
647
+ dependencies = { hosts: _("hosts"),
648
+ activation_keys: _("activation keys")
631
649
  }
632
650
 
633
651
  dependencies.each do |key, name|
634
652
  if (models = self.association(key).scope.in_environment(env)).any?
635
653
  errors << _("Cannot remove '%{view}' from environment '%{env}' due to associated %{dependent}: %{names}.") %
636
- {view: self.name, env: env.name, dependent: name, names: models.map(&:name).join(", ")}
654
+ { view: self.name, env: env.name, dependent: name, names: models.map(&:name).join(", ") }
637
655
  end
638
656
  end
639
657
 
@@ -644,15 +662,15 @@ module Katello
644
662
  def check_ready_to_destroy!
645
663
  errors = []
646
664
 
647
- dependencies = {environments: _("environments"),
648
- hosts: _("hosts"),
649
- activation_keys: _("activation keys")
665
+ dependencies = { environments: _("environments"),
666
+ hosts: _("hosts"),
667
+ activation_keys: _("activation keys")
650
668
  }
651
669
 
652
670
  dependencies.each do |key, name|
653
671
  if (models = self.association(key).scope).any?
654
672
  errors << _("Cannot delete '%{view}' due to associated %{dependent}: %{names}.") %
655
- {view: self.name, dependent: name, names: models.map(&:name).join(", ")}
673
+ { view: self.name, dependent: name, names: models.map(&:name).join(", ") }
656
674
  end
657
675
  end
658
676
 
@@ -700,7 +718,7 @@ module Katello
700
718
  def remove_repository(repository)
701
719
  filters.each do |filter_item|
702
720
  repo_exists = Repository.unscoped.joins(:filters).where(
703
- ContentViewFilter.table_name => {:id => filter_item.id}, :id => repository.id).count
721
+ ContentViewFilter.table_name => { :id => filter_item.id }, :id => repository.id).count
704
722
  if repo_exists
705
723
  filter_item.repositories.delete(repository)
706
724
  filter_item.save!
@@ -0,0 +1,51 @@
1
+ module Katello
2
+ class ContentViewDebFilter < ContentViewFilter
3
+ CONTENT_TYPE = Deb::CONTENT_TYPE
4
+
5
+ has_many :deb_rules, :dependent => :destroy, :foreign_key => :content_view_filter_id,
6
+ :class_name => "Katello::ContentViewDebFilterRule"
7
+ validates_lengths_from_database
8
+
9
+ def generate_clauses(repo)
10
+ package_filenames = []
11
+
12
+ self.deb_rules.each do |rule|
13
+ package_filenames.concat(query_debs(repo, rule))
14
+ end
15
+
16
+ ContentViewDebFilter.generate_deb_clauses(package_filenames)
17
+ end
18
+
19
+ def content_unit_pulp_ids(repo)
20
+ deb_filenames = []
21
+ self.deb_rules.each do |rule|
22
+ deb_filenames.concat(query_debs(repo, rule))
23
+ end
24
+ debs = Deb.in_repositories(repo)
25
+ debs.where(filename: deb_filenames).pluck(:pulp_id).flatten.uniq
26
+ end
27
+
28
+ def self.generate_deb_clauses(package_filenames = [])
29
+ { 'filename' => { "$in" => package_filenames } } unless package_filenames.empty?
30
+ end
31
+
32
+ def applicable_debs
33
+ Deb.in_repositories(self.applicable_repos)
34
+ end
35
+
36
+ def query_debs(repo, rule)
37
+ debs = Deb.in_repositories(repo)
38
+ query_debs_from_collection(debs, rule).pluck("#{Deb.table_name}.filename")
39
+ end
40
+
41
+ def query_debs_from_collection(collection, rule)
42
+ query_name = rule.name.tr("*", "%")
43
+ query = collection.where("#{Deb.table_name}.name ilike ?", query_name)
44
+ if rule.architecture.present?
45
+ query_arch = rule.architecture.tr("*", "%")
46
+ query = query.where("#{Deb.table_name}.architecture ilike ?", query_arch)
47
+ end
48
+ query.default_sort
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,24 @@
1
+ module Katello
2
+ class ContentViewDebFilterRule < Katello::Model
3
+ include ::Katello::Concerns::ContentViewFilterRuleCommon
4
+
5
+ belongs_to :filter,
6
+ :class_name => "Katello::ContentViewDebFilter",
7
+ :inverse_of => :deb_rules,
8
+ :foreign_key => :content_view_filter_id
9
+
10
+ validates :name, :presence => true
11
+ validate :ensure_unique_attributes
12
+ validates_with Validators::ContentViewFilterVersionValidator
13
+
14
+ def ensure_unique_attributes
15
+ other = self.class.where(:name => self.name,
16
+ :content_view_filter_id => self.content_view_filter_id,
17
+ :architecture => self.architecture)
18
+ other = other.where.not(:id => self.id) if self.id
19
+ if other.exists?
20
+ errors.add(:base, "This deb package filter rule already exists.")
21
+ end
22
+ end
23
+ end
24
+ end
@@ -9,7 +9,7 @@ module Katello
9
9
  MODULE_STREAM = ModuleStream::CONTENT_TYPE
10
10
  DEB = Deb::CONTENT_TYPE
11
11
  CONTENT_TYPES = [RPM, PACKAGE_GROUP, ERRATA, DOCKER, DEB, MODULE_STREAM].freeze
12
- CONTENT_OPTIONS = { _('Packages') => RPM, _('Module Streams') => ModuleStream, _('Package Groups') => PACKAGE_GROUP, _('Errata') => ERRATA, _('Container Images') => DOCKER, _('deb Packages') => DEB }.freeze
12
+ CONTENT_OPTIONS = { _('Packages') => RPM, _('Module Streams') => ModuleStream, _('Package Groups') => PACKAGE_GROUP, _('Errata') => ERRATA, _('Container Images') => DOCKER, _('Deb Packages') => DEB }.freeze
13
13
 
14
14
  belongs_to :content_view,
15
15
  :class_name => "Katello::ContentView",
@@ -31,6 +31,7 @@ module Katello
31
31
  scoped_search :on => :name, :complete_value => true
32
32
  scoped_search :on => :type, :rename => :content_type,
33
33
  :complete_value => {Rpm::CONTENT_TYPE.to_sym => "Katello::ContentViewPackageFilter",
34
+ Deb::CONTENT_TYPE.to_sym => "Katello::ContentViewDebFilter",
34
35
  PackageGroup::CONTENT_TYPE.to_sym => "Katello::ContentViewPackageGroupFilter",
35
36
  Erratum::CONTENT_TYPE.to_sym => "Katello::ContentViewErratumFilter",
36
37
  DOCKER.to_sym => "Katello::ContentViewDockerFilter",
@@ -47,8 +48,7 @@ module Katello
47
48
  end
48
49
 
49
50
  def self.deb
50
- # TODO
51
- []
51
+ where(:type => ::Katello::ContentViewDebFilter.name)
52
52
  end
53
53
 
54
54
  def self.docker
@@ -69,6 +69,7 @@ module Katello
69
69
 
70
70
  def content_type
71
71
  {
72
+ ContentViewDebFilter => DEB,
72
73
  ContentViewPackageFilter => RPM,
73
74
  ContentViewErratumFilter => ERRATA,
74
75
  ContentViewPackageGroupFilter => PACKAGE_GROUP,
@@ -79,6 +80,8 @@ module Katello
79
80
 
80
81
  def self.class_for(content_type)
81
82
  case content_type
83
+ when DEB
84
+ ContentViewDebFilter
82
85
  when RPM
83
86
  ContentViewPackageFilter
84
87
  when PACKAGE_GROUP
@@ -97,6 +100,8 @@ module Katello
97
100
 
98
101
  def self.rule_class_for(filter)
99
102
  case filter.type
103
+ when ContentViewDebFilter.name
104
+ ContentViewDebFilterRule
100
105
  when ContentViewPackageFilter.name
101
106
  ContentViewPackageFilterRule
102
107
  when ContentViewPackageGroupFilter.name
@@ -115,6 +120,8 @@ module Katello
115
120
 
116
121
  def self.rule_ids_for(filter)
117
122
  case filter.type
123
+ when ContentViewDebFilter.name
124
+ filter.deb_rule_ids
118
125
  when ContentViewPackageFilter.name
119
126
  filter.package_rule_ids
120
127
  when ContentViewPackageGroupFilter.name
@@ -30,7 +30,6 @@ module Katello
30
30
  def owner_details
31
31
  @owner_details ||= find_owner
32
32
  @owner_details['virt_who'] ||= self.subscriptions.using_virt_who.any?
33
-
34
33
  @owner_details
35
34
  end
36
35
 
@@ -23,5 +23,6 @@ module Katello
23
23
  scoped_search :on => :version
24
24
  scoped_search :on => :release
25
25
  scoped_search :on => :arch
26
+ scoped_search :on => :vendor, :complete_value => true
26
27
  end
27
28
  end
@@ -28,6 +28,9 @@ module Katello
28
28
  has_many :pools, :through => :pool_products
29
29
  has_many :subscriptions, :through => :pools, :dependent => :destroy
30
30
 
31
+ has_many :alternate_content_source_products, dependent: :delete_all, inverse_of: :product, :class_name => "Katello::AlternateContentSourceProduct"
32
+ has_many :alternate_content_sources, :through => :alternate_content_source_products, :inverse_of => :products, :class_name => "Katello::AlternateContentSource"
33
+
31
34
  validates_lengths_from_database :except => [:label]
32
35
  validates :provider_id, :presence => true
33
36
  validates_with Validators::KatelloNameFormatValidator, :attributes => :name
@@ -31,7 +31,7 @@ module Katello
31
31
  ANSIBLE_COLLECTION_TYPE = 'ansible_collection'.freeze
32
32
  GENERIC_TYPE = 'generic'.freeze
33
33
 
34
- EXPORTABLE_TYPES = [YUM_TYPE, FILE_TYPE, ANSIBLE_COLLECTION_TYPE].freeze
34
+ EXPORTABLE_TYPES = [YUM_TYPE, FILE_TYPE, ANSIBLE_COLLECTION_TYPE, DOCKER_TYPE].freeze
35
35
 
36
36
  define_model_callbacks :sync, :only => :after
37
37
 
@@ -110,6 +110,8 @@ module Katello
110
110
 
111
111
  has_many :smart_proxy_sync_histories, :class_name => "::Katello::SmartProxySyncHistory", :inverse_of => :repository, :dependent => :delete_all
112
112
 
113
+ has_many :smart_proxy_alternate_content_sources, :class_name => 'Katello::SmartProxyAlternateContentSource', :inverse_of => :repository, :dependent => :nullify
114
+
113
115
  validates_with Validators::ContainerImageNameValidator, :attributes => :container_repository_name, :allow_blank => false, :if => :docker?
114
116
  validates :container_repository_name, :if => :docker?, :uniqueness => {message: ->(object, _data) do
115
117
  _("for repository '%{name}' is not unique and cannot be created in '%{env}'. Its Container Repository Name (%{container_name}) conflicts with an existing repository. Consider changing the Lifecycle Environment's Registry Name Pattern to something more specific.") %
@@ -339,7 +341,7 @@ module Katello
339
341
 
340
342
  def published_in_versions
341
343
  Katello::ContentViewVersion.with_repositories(self.library_instances_inverse)
342
- .where(content_view_id: Katello::ContentView.not_generated_for_repository).distinct
344
+ .where(content_view_id: Katello::ContentView.ignore_generated).distinct
343
345
  end
344
346
 
345
347
  def self.errata_with_package_counts(repo)
@@ -666,7 +668,7 @@ module Katello
666
668
 
667
669
  def self.smart_proxy_syncable
668
670
  joins(:content_view_version => :content_view).
669
- merge(ContentView.not_generated_for_repository).
671
+ merge(ContentView.ignore_generated).
670
672
  where.not(environment_id: nil)
671
673
  end
672
674
 
@@ -17,6 +17,7 @@ module Katello
17
17
  scoped_search :on => :evr, :ext_method => :scoped_search_evr, :only_explicit => true
18
18
  scoped_search :on => :filename, :complete_value => true
19
19
  scoped_search :on => :sourcerpm, :complete_value => true
20
+ scoped_search :on => :nvra, :complete_value => true
20
21
  scoped_search :on => :modular, :complete_value => true, :only_explicit => true
21
22
  scoped_search :on => :checksum
22
23
 
@@ -1,8 +1,14 @@
1
1
  module Katello
2
2
  class SmartProxyAlternateContentSource < Katello::Model
3
+ audited
3
4
  # Do not use active record callbacks in this join model. Direct INSERTs and DELETEs are done
4
5
  self.table_name = :katello_smart_proxy_alternate_content_sources
5
6
  belongs_to :smart_proxy, :inverse_of => :smart_proxy_alternate_content_sources, :class_name => 'SmartProxy'
6
7
  belongs_to :alternate_content_source, :inverse_of => :smart_proxy_alternate_content_sources, :class_name => 'Katello::AlternateContentSource'
8
+ belongs_to :repository, :inverse_of => :smart_proxy_alternate_content_sources, :class_name => 'Katello::Repository'
9
+
10
+ def backend_service
11
+ @service ||= ::Katello::Pulp3::AlternateContentSource.new(alternate_content_source, smart_proxy, repository)
12
+ end
7
13
  end
8
14
  end