katello 4.5.1 → 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 (440) 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/v2/activation_keys_controller.rb +7 -0
  4. data/app/controllers/katello/api/v2/alternate_content_sources_controller.rb +52 -22
  5. data/app/controllers/katello/api/v2/content_uploads_controller.rb +2 -0
  6. data/app/controllers/katello/api/v2/content_view_filter_rules_controller.rb +1 -1
  7. data/app/controllers/katello/api/v2/content_view_filters_controller.rb +1 -1
  8. data/app/controllers/katello/api/v2/debs_controller.rb +42 -10
  9. data/app/controllers/katello/api/v2/host_collections_controller.rb +5 -1
  10. data/app/controllers/katello/api/v2/host_errata_controller.rb +1 -0
  11. data/app/controllers/katello/api/v2/host_module_streams_controller.rb +9 -1
  12. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +8 -1
  13. data/app/controllers/katello/api/v2/organizations_controller.rb +3 -1
  14. data/app/controllers/katello/api/v2/simple_content_access_controller.rb +8 -0
  15. data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +34 -11
  16. data/app/controllers/katello/concerns/organizations_controller_extensions.rb +7 -16
  17. data/app/lib/actions/katello/alternate_content_source/alternate_content_source_common.rb +16 -0
  18. data/app/lib/actions/katello/alternate_content_source/create.rb +11 -5
  19. data/app/lib/actions/katello/alternate_content_source/destroy.rb +3 -4
  20. data/app/lib/actions/katello/alternate_content_source/refresh.rb +3 -5
  21. data/app/lib/actions/katello/alternate_content_source/update.rb +57 -13
  22. data/app/lib/actions/katello/applicability/hosts/bulk_generate.rb +2 -2
  23. data/app/lib/actions/katello/organization/manifest_refresh.rb +8 -4
  24. data/app/lib/actions/katello/organization/simple_content_access/toggle.rb +1 -9
  25. data/app/lib/actions/katello/repository/create.rb +9 -0
  26. data/app/lib/actions/katello/repository/destroy.rb +21 -0
  27. data/app/lib/actions/katello/repository/errata_mail.rb +3 -3
  28. data/app/lib/actions/katello/repository/refresh_repository.rb +3 -0
  29. data/app/lib/actions/katello/repository/update.rb +33 -0
  30. data/app/lib/actions/katello/repository/update_redhat_repository.rb +1 -1
  31. data/app/lib/actions/pulp3/alternate_content_source/create.rb +5 -4
  32. data/app/lib/actions/pulp3/alternate_content_source/create_remote.rb +5 -4
  33. data/app/lib/actions/pulp3/alternate_content_source/delete.rb +4 -4
  34. data/app/lib/actions/pulp3/alternate_content_source/delete_remote.rb +4 -4
  35. data/app/lib/actions/pulp3/alternate_content_source/refresh.rb +4 -4
  36. data/app/lib/actions/pulp3/alternate_content_source/update.rb +4 -4
  37. data/app/lib/actions/pulp3/alternate_content_source/update_remote.rb +5 -5
  38. data/app/lib/actions/pulp3/capsule_content/reclaim_space.rb +1 -0
  39. data/app/lib/actions/pulp3/orchestration/alternate_content_source/create.rb +3 -3
  40. data/app/lib/actions/pulp3/orchestration/alternate_content_source/delete.rb +6 -7
  41. data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh.rb +2 -2
  42. data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh_remote.rb +18 -0
  43. data/app/lib/actions/pulp3/orchestration/alternate_content_source/update.rb +3 -3
  44. data/app/lib/actions/pulp3/orchestration/repository/generate_metadata.rb +1 -1
  45. data/app/lib/katello/concerns/base_template_scope_extensions.rb +1 -1
  46. data/app/lib/katello/errors.rb +1 -1
  47. data/app/lib/katello/resources/candlepin/owner.rb +9 -2
  48. data/app/lib/katello/validators/alternate_content_source_products_validator.rb +17 -0
  49. data/app/models/katello/alternate_content_source.rb +39 -8
  50. data/app/models/katello/alternate_content_source_product.rb +13 -0
  51. data/app/models/katello/concerns/host_managed_extensions.rb +12 -2
  52. data/app/models/katello/concerns/pulp_database_unit.rb +2 -2
  53. data/app/models/katello/concerns/smart_proxy_extensions.rb +5 -6
  54. data/app/models/katello/content_view.rb +4 -0
  55. data/app/models/katello/content_view_deb_filter.rb +51 -0
  56. data/app/models/katello/content_view_deb_filter_rule.rb +24 -0
  57. data/app/models/katello/content_view_filter.rb +10 -3
  58. data/app/models/katello/glue/candlepin/owner.rb +0 -1
  59. data/app/models/katello/installed_package.rb +1 -0
  60. data/app/models/katello/product.rb +3 -0
  61. data/app/models/katello/repository.rb +2 -0
  62. data/app/models/katello/smart_proxy_alternate_content_source.rb +6 -0
  63. data/app/services/cert/certs.rb +8 -16
  64. data/app/services/katello/content_unit_indexer.rb +2 -1
  65. data/app/services/katello/organization_creator.rb +4 -4
  66. data/app/services/katello/pulp/server.rb +2 -2
  67. data/app/services/katello/pulp3/alternate_content_source.rb +22 -4
  68. data/app/services/katello/pulp3/api/apt.rb +12 -0
  69. data/app/services/katello/pulp3/erratum.rb +1 -4
  70. data/app/services/katello/pulp3/repository/apt.rb +186 -2
  71. data/app/services/katello/pulp3/repository.rb +4 -3
  72. data/app/services/katello/pulp3/service_common.rb +1 -1
  73. data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +1 -1
  74. data/app/views/foreman/smart_proxies/show.html.erb +3 -3
  75. data/app/views/katello/api/v2/alternate_content_sources/base.json.rabl +18 -3
  76. data/app/views/katello/api/v2/alternate_content_sources/show.json.rabl +20 -0
  77. data/app/views/katello/api/v2/ansible_collections/compare.json.rabl +10 -0
  78. data/app/views/katello/api/v2/content_view_filters/base.json.rabl +5 -0
  79. data/app/views/katello/api/v2/module_streams/compare.json.rabl +10 -0
  80. data/app/views/katello/api/v2/repository_sets/show.json.rabl +4 -0
  81. data/app/views/katello/layouts/foreman_with_bastion.html.erb +1 -1
  82. data/app/views/katello/layouts/react.html.erb +1 -1
  83. data/app/views/overrides/organizations/_edit_override.html.erb +5 -8
  84. data/app/views/overrides/organizations/_index_row_override.html.erb +1 -1
  85. data/app/views/overrides/organizations/_step_1_override.html.erb +5 -0
  86. data/ca/redhat-uep.pem +18 -23
  87. data/config/katello.yaml.example +0 -2
  88. data/config/routes/api/v2.rb +2 -0
  89. data/config/routes/overrides.rb +1 -0
  90. data/db/migrate/20201116161820_create_content_view_deb_filter_rules.rb +17 -0
  91. data/db/migrate/20220524132259_remove_last_refreshed_from_katello_alternate_content_sources.rb +5 -0
  92. data/db/migrate/20220601163911_add_vendor_to_katello_installed_packages.rb +5 -0
  93. data/db/migrate/20220610165621_add_repositories_and_products_to_acs.rb +23 -0
  94. data/db/seeds.d/102-organizations.rb +1 -1
  95. data/engines/bastion/app/views/bastion/layouts/application.html.erb +1 -1
  96. data/engines/bastion/app/views/bastion/layouts/application_ie.html.erb +1 -1
  97. data/engines/bastion/app/views/bastion/layouts/assets.html.erb +1 -1
  98. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/environment-content.controller.js +2 -0
  99. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/environment.controller.js +2 -0
  100. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-content-views.html +1 -1
  101. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/environments.controller.js +1 -0
  102. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/views/environments.html +3 -3
  103. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +4 -5
  104. data/engines/bastion_katello/lib/bastion_katello/engine.rb +0 -1
  105. data/lib/katello/engine.rb +1 -2
  106. data/lib/katello/permission_creator.rb +2 -2
  107. data/lib/katello/permissions/host_permissions.rb +1 -0
  108. data/lib/katello/plugin.rb +6 -12
  109. data/lib/katello/version.rb +1 -1
  110. data/locale/action_names.rb +49 -46
  111. data/locale/bn/katello.po +361 -53
  112. data/{webpack/scenes/AnsibleCollections/AnsibleCollectionsTables.scss → locale/bn/katello.po.time_stamp} +0 -0
  113. data/locale/cs/katello.po +361 -53
  114. data/locale/cs/katello.po.time_stamp +0 -0
  115. data/locale/de/katello.po +366 -58
  116. data/locale/de/katello.po.time_stamp +0 -0
  117. data/locale/en/katello.po +361 -53
  118. data/locale/en/katello.po.time_stamp +0 -0
  119. data/locale/es/katello.po +364 -56
  120. data/locale/es/katello.po.time_stamp +0 -0
  121. data/locale/fr/katello.po +376 -68
  122. data/locale/fr/katello.po.time_stamp +0 -0
  123. data/locale/gu/katello.po +361 -53
  124. data/locale/gu/katello.po.time_stamp +0 -0
  125. data/locale/hi/katello.po +361 -53
  126. data/locale/hi/katello.po.time_stamp +0 -0
  127. data/locale/it/katello.po +361 -53
  128. data/locale/it/katello.po.time_stamp +0 -0
  129. data/locale/ja/katello.po +374 -66
  130. data/locale/ja/katello.po.time_stamp +0 -0
  131. data/locale/katello.pot +1626 -1079
  132. data/locale/kn/katello.po +361 -53
  133. data/locale/kn/katello.po.time_stamp +0 -0
  134. data/locale/ko/katello.po +361 -53
  135. data/locale/ko/katello.po.time_stamp +0 -0
  136. data/locale/mr/katello.po +361 -53
  137. data/locale/mr/katello.po.time_stamp +0 -0
  138. data/locale/or/katello.po +361 -53
  139. data/locale/or/katello.po.time_stamp +0 -0
  140. data/locale/pa/katello.po +361 -53
  141. data/locale/pa/katello.po.time_stamp +0 -0
  142. data/locale/pt/katello.po +361 -53
  143. data/locale/pt/katello.po.time_stamp +0 -0
  144. data/locale/pt_BR/katello.po +364 -56
  145. data/locale/pt_BR/katello.po.time_stamp +0 -0
  146. data/locale/ru/katello.po +361 -53
  147. data/locale/ru/katello.po.time_stamp +0 -0
  148. data/locale/ta/katello.po +361 -53
  149. data/locale/ta/katello.po.time_stamp +0 -0
  150. data/locale/te/katello.po +361 -53
  151. data/locale/te/katello.po.time_stamp +0 -0
  152. data/locale/zh_CN/katello.po +374 -66
  153. data/locale/zh_CN/katello.po.time_stamp +0 -0
  154. data/locale/zh_TW/katello.po +361 -53
  155. data/locale/zh_TW/katello.po.time_stamp +0 -0
  156. data/package.json +0 -3
  157. data/webpack/components/EditableTextInput/EditableTextInput.js +3 -16
  158. data/webpack/components/EditableTextInput/PencilEditButton.js +33 -0
  159. data/webpack/components/Errata/index.js +18 -3
  160. data/webpack/components/Loading.js +1 -1
  161. data/webpack/components/RoutedTabs/index.js +1 -17
  162. data/webpack/components/Search/Search.js +0 -1
  163. data/webpack/components/Search/__tests__/search.test.js +1 -2
  164. data/webpack/components/SelectAllCheckbox/index.js +7 -4
  165. data/webpack/components/SelectableDropdown/SelectableDropdown.js +1 -0
  166. data/webpack/components/Table/EmptyStateMessage.js +77 -2
  167. data/webpack/components/Table/MainTable.js +46 -4
  168. data/webpack/components/Table/TableHooks.js +9 -6
  169. data/webpack/components/Table/TableWrapper.js +14 -8
  170. data/webpack/components/TypeAhead/TypeAhead.js +26 -11
  171. data/webpack/components/TypeAhead/pf3Search/TypeAheadItems.js +1 -1
  172. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +1 -0
  173. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.js +2 -1
  174. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsModal.js +9 -4
  175. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeActions.js +37 -0
  176. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.js +173 -0
  177. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.scss +6 -0
  178. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeConstants.js +6 -0
  179. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeEditModal.js +301 -0
  180. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeSelectors.js +25 -0
  181. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeCard.test.js +108 -0
  182. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeEditModal.test.js +161 -0
  183. data/webpack/components/extensions/HostDetails/Cards/__tests__/errataOverviewCard.test.js +12 -12
  184. data/webpack/components/extensions/HostDetails/DetailsTabCards/HwPropertiesCard.js +100 -0
  185. data/webpack/components/extensions/HostDetails/DetailsTabCards/SystemPropertiesCardExtensions.js +26 -4
  186. data/webpack/components/extensions/HostDetails/HostDetailsConstants.js +3 -1
  187. data/webpack/components/extensions/HostDetails/HostDetailsReducer.js +14 -0
  188. data/webpack/components/extensions/HostDetails/HostDetailsSelectors.js +8 -2
  189. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +8 -12
  190. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +23 -2
  191. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +5 -0
  192. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +57 -7
  193. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +2 -0
  194. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySets.fixtures.json +3 -0
  195. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +4 -1
  196. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +1 -10
  197. data/webpack/components/extensions/HostDetails/hostDetailsHelpers.js +1 -1
  198. data/webpack/components/extensions/RegistrationCommands/index.js +49 -17
  199. data/webpack/containers/Application/config.js +5 -10
  200. data/webpack/global_index.js +19 -7
  201. data/webpack/global_test_setup.js +14 -2
  202. data/webpack/ouia_id_check.js +95 -0
  203. data/webpack/redux/actions/RedHatRepositories/helpers.js +2 -0
  204. data/webpack/redux/reducers/index.js +2 -4
  205. data/webpack/scenes/AlternateContentSources/ACSActions.js +36 -3
  206. data/webpack/scenes/AlternateContentSources/ACSConstants.js +3 -0
  207. data/webpack/scenes/AlternateContentSources/ACSSelectors.js +15 -6
  208. data/webpack/scenes/AlternateContentSources/Create/ACSCreateWizard.js +73 -42
  209. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCreateFinish.js +26 -10
  210. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSProducts.js +44 -0
  211. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSReview.js +59 -45
  212. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSSmartProxies.js +2 -1
  213. data/webpack/scenes/AlternateContentSources/Create/Steps/AcsUrlPaths.js +0 -1
  214. data/webpack/scenes/AlternateContentSources/Create/Steps/SelectSource.js +35 -19
  215. data/webpack/scenes/AlternateContentSources/Create/__tests__/acsCreate.test.js +120 -13
  216. data/webpack/scenes/AlternateContentSources/Create/__tests__/products.fixtures.json +92 -0
  217. data/webpack/scenes/AlternateContentSources/Details/ACSExpandableDetails.js +459 -0
  218. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditCredentials.js +354 -0
  219. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditDetails.js +104 -0
  220. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditProducts.js +120 -0
  221. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditSmartProxies.js +118 -0
  222. data/webpack/scenes/AlternateContentSources/Details/EditModals/ACSEditURLPaths.js +118 -0
  223. data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSEdits.test.js +242 -0
  224. data/webpack/scenes/AlternateContentSources/Details/__tests__/ACSExpandableDetails.test.js +106 -0
  225. data/webpack/scenes/AlternateContentSources/Details/__tests__/acsDetails.fixtures.json +49 -0
  226. data/webpack/scenes/AlternateContentSources/Details/__tests__/acsProducts.fixtures.json +95 -0
  227. data/webpack/scenes/AlternateContentSources/Details/__tests__/simplifiedAcsDetails.fixtures.json +39 -0
  228. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.js +215 -87
  229. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.scss +3 -0
  230. data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsTable.test.js +1 -2
  231. data/webpack/scenes/Content/__tests__/contentTable.test.js +1 -2
  232. data/webpack/scenes/ContentViews/ContentViewsConstants.js +15 -4
  233. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +1 -2
  234. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +2 -0
  235. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +1 -2
  236. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +113 -0
  237. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +89 -0
  238. data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +32 -9
  239. data/webpack/scenes/ContentViews/Details/Filters/Add/__tests__/cvFilterAdd.test.js +13 -3
  240. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +39 -27
  241. data/webpack/scenes/ContentViews/Details/Filters/CVDebFilterContent.js +236 -0
  242. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +1 -0
  243. data/webpack/scenes/ContentViews/Details/Filters/CVFilterDetailType.js +10 -0
  244. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +3 -0
  245. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +3 -1
  246. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +17 -4
  247. data/webpack/scenes/ContentViews/Details/Filters/ContentType.js +1 -0
  248. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +34 -22
  249. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/CVDebMatchContentModal.js +97 -0
  250. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +1 -2
  251. data/webpack/scenes/ContentViews/Details/Filters/Rules/DebPackage/AddEditDebPackageRuleModal.js +128 -0
  252. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +56 -3
  253. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +62 -8
  254. data/webpack/scenes/ContentViews/Details/Filters/__tests__/ContentViewPackageGroupFilter.test.js +1 -5
  255. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +1 -2
  256. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +32 -2
  257. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +1 -2
  258. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +1 -2
  259. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyCVContainerImageFilterContent.fixtures.json +13 -0
  260. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyCVPackageFilterRules.fixtures.json +13 -0
  261. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyContentViewFilters.fixtures.json +13 -0
  262. data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +1 -2
  263. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +5 -1
  264. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +1 -2
  265. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/BulkDeleteModal.test.js +3 -0
  266. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompare.js +143 -0
  267. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompare.scss +51 -0
  268. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareConfig.js +314 -0
  269. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareHeader.js +186 -0
  270. data/webpack/scenes/ContentViews/Details/Versions/Compare/CVVersionCompareTable.js +74 -0
  271. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/AnsibleCollectionsCompareAllContentData.fixtures.json +63 -0
  272. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/CVVersionCompare.test.js +657 -0
  273. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/CVVersionEmptyContentCompareData.fixtures.json +14 -0
  274. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ContainerTagsCompareAllContentData.fixtures.json +95 -0
  275. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/DebPackagesCompareAllContentData.fixtures.json +87 -0
  276. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ErrataCompareAllContentData.fixtures.json +319 -0
  277. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ErrataCompareThreeContentTypesData.fixtures.json +131 -0
  278. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/FilesCompareAllContentData.fixtures.json +51 -0
  279. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/FilesCompareThreeContentTypesData.fixtures.json +48 -0
  280. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/ModuleStreamsCompareAllContentData.fixtures.json +239 -0
  281. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/PackageGroupsCompareAllContentData.fixtures.json +51 -0
  282. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/PythonPackagesCompareAllContentData.fixtures.json +315 -0
  283. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/RPMPackagesCompareAllContentData.fixtures.json +470 -0
  284. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/RPMPackagesCompareThreeContentTypesData.fixtures.json +475 -0
  285. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewDetails.fixtures.json +160 -0
  286. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionOneDetials.fixtures.json +161 -0
  287. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionThreeDetails.fixtures.json +154 -0
  288. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersionTwoDetails.fixtures.json +211 -0
  289. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/contentViewVersions.fixtures.json +1013 -0
  290. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/emptyStateCVVersionOneDetails.fixtures.json +145 -0
  291. data/webpack/scenes/ContentViews/Details/Versions/Compare/__tests__/emptyStateCVVersionTwoDetails.fixtures.json +145 -0
  292. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +102 -36
  293. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +1 -2
  294. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +4 -2
  295. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +1 -2
  296. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetailsEmpty.test.js +1 -2
  297. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +113 -40
  298. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +96 -81
  299. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +1 -2
  300. data/webpack/scenes/ContentViews/__tests__/mockDetails.fixtures.json +7 -2
  301. data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +1 -1
  302. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +0 -30
  303. data/webpack/test-utils/nockWrapper.js +7 -0
  304. metadata +100 -145
  305. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.controller.js +0 -34
  306. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.routes.js +0 -751
  307. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-deletion.controller.js +0 -42
  308. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-activation-keys.controller.js +0 -81
  309. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-confirm.controller.js +0 -65
  310. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-content-hosts.controller.js +0 -82
  311. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-environments.controller.js +0 -76
  312. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion.controller.js +0 -160
  313. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/content-view-deletion.html +0 -58
  314. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-activation-keys.html +0 -94
  315. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-confirm.html +0 -76
  316. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-content-hosts.html +0 -88
  317. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/views/version-deletion-environments.html +0 -73
  318. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-component.factory.js +0 -32
  319. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-composite-available-content-views.controller.js +0 -75
  320. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/content-view-composite-content-views-list.controller.js +0 -68
  321. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite-available-content-views.html +0 -81
  322. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite-content-views-list.html +0 -81
  323. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/components/views/content-view-composite.html +0 -24
  324. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-deb-repositories.controller.js +0 -50
  325. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-docker-repositories.controller.js +0 -42
  326. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-file-repositories.controller.js +0 -50
  327. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-ostree-repositories.controller.js +0 -42
  328. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-available-repositories.controller.js +0 -45
  329. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-deb-repositories-list.controller.js +0 -48
  330. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-details.controller.js +0 -100
  331. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-docker-repositories-list.controller.js +0 -49
  332. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-file-repositories-list.controller.js +0 -48
  333. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-ostree-repositories-list.controller.js +0 -49
  334. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-promotion.controller.js +0 -129
  335. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-publish.controller.js +0 -46
  336. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-repositories-list.controller.js +0 -42
  337. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-repositories.service.js +0 -91
  338. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-versions.controller.js +0 -240
  339. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-errata-filter.controller.js +0 -115
  340. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-module-stream-filter.controller.js +0 -68
  341. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/available-package-group-filter.controller.js +0 -66
  342. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/date-type-errata-filter.controller.js +0 -77
  343. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/docker-tag-filter.controller.js +0 -137
  344. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/edit-filter.controller.js +0 -36
  345. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/errata-filter-list.controller.js +0 -78
  346. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/errata-filter.controller.js +0 -74
  347. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-content-type.filter.js +0 -21
  348. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-details.controller.js +0 -34
  349. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-helper.service.js +0 -30
  350. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-repositories.controller.js +0 -86
  351. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-rule-matching-package-modal.controller.js +0 -37
  352. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-type.filter.js +0 -21
  353. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter.factory.js +0 -66
  354. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filters.controller.js +0 -85
  355. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/module-stream-list-filter.controller.js +0 -73
  356. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/new-filter.controller.js +0 -100
  357. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/package-filter.controller.js +0 -179
  358. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/package-group-list-filter.controller.js +0 -75
  359. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/rule.factory.js +0 -21
  360. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/date-type-errata-filter.html +0 -9
  361. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/date-type-errata.html +0 -75
  362. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/docker-filter.html +0 -28
  363. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/docker-tag-filter-details.html +0 -65
  364. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/edit-filter.html +0 -19
  365. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/errata-filter-details.html +0 -63
  366. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/errata-filter.html +0 -50
  367. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-details.html +0 -9
  368. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-repositories.html +0 -121
  369. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filter-rule-matching-package-modal.html +0 -43
  370. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/filters.html +0 -85
  371. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter-details.html +0 -58
  372. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter.html +0 -43
  373. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/new-filter.html +0 -62
  374. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter-details.html +0 -182
  375. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter.html +0 -28
  376. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-group-filter-details.html +0 -42
  377. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-group-filter.html +0 -43
  378. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/partials/filter-repositories-count.html +0 -2
  379. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/content-view-history.controller.js +0 -47
  380. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/content-view-history.factory.js +0 -22
  381. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/histories/views/content-view-history.html +0 -36
  382. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-copy.html +0 -20
  383. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-deb-repositories.html +0 -87
  384. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details-tasks.html +0 -4
  385. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details.html +0 -144
  386. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-docker-repositories.html +0 -114
  387. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-file-repositories.html +0 -87
  388. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-info.html +0 -63
  389. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-ostree-repositories.html +0 -87
  390. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-promotion.html +0 -59
  391. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-publish.html +0 -58
  392. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-repositories.html +0 -116
  393. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-versions.html +0 -126
  394. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/content-view-new.controller.js +0 -78
  395. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/views/content-view-new.html +0 -127
  396. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version-content.controller.js +0 -138
  397. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/content-view-version.controller.js +0 -59
  398. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-apt.html +0 -25
  399. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-components.html +0 -19
  400. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-deb.html +0 -19
  401. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-details.html +0 -15
  402. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-docker.html +0 -23
  403. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-errata.html +0 -48
  404. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-file.html +0 -21
  405. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-module-streams.html +0 -8
  406. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-package-groups.html +0 -21
  407. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-packages.html +0 -27
  408. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version-yum.html +0 -42
  409. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/versions/views/content-view-version.html +0 -83
  410. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/views/content-views.html +0 -74
  411. data/webpack/components/Table/__test__/useBulkSelect.test.js +0 -99
  412. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsActions.js +0 -30
  413. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsConstants.js +0 -3
  414. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsPage.js +0 -80
  415. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsReducer.js +0 -39
  416. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsTableSchema.js +0 -60
  417. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetails.js +0 -94
  418. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsActions.js +0 -23
  419. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsConstants.js +0 -3
  420. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsReducer.js +0 -30
  421. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionsSchema.js +0 -35
  422. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailInfo.test.js +0 -16
  423. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.fixtures.js +0 -25
  424. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.test.js +0 -27
  425. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailsActions.test.js +0 -41
  426. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetailsReducer.test.js +0 -33
  427. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailInfo.test.js.snap +0 -83
  428. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetails.test.js.snap +0 -190
  429. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailsActions.test.js.snap +0 -58
  430. data/webpack/scenes/AnsibleCollections/Details/__tests__/__snapshots__/AnsibleCollectionDetailsReducer.test.js.snap +0 -50
  431. data/webpack/scenes/AnsibleCollections/Details/index.js +0 -17
  432. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionPage.test.js +0 -23
  433. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollections.fixtures.js +0 -52
  434. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsActions.test.js +0 -48
  435. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsReducer.test.js +0 -46
  436. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsTable.test.js +0 -25
  437. data/webpack/scenes/AnsibleCollections/__tests__/__snapshots__/AnsibleCollectionPage.test.js.snap +0 -73
  438. data/webpack/scenes/AnsibleCollections/__tests__/__snapshots__/AnsibleCollectionsTable.test.js.snap +0 -81
  439. data/webpack/scenes/AnsibleCollections/index.js +0 -17
  440. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManageManifestModal.test.js +0 -123
@@ -0,0 +1,17 @@
1
+ module Katello
2
+ module Validators
3
+ class AlternateContentSourceProductsValidator < ActiveModel::EachValidator
4
+ def validate_each(record, attribute, value)
5
+ if value
6
+ if attribute == :product_id
7
+ product = ::Katello::Product.find(value)
8
+ content_type = record.alternate_content_source.content_type
9
+ if product.repositories.with_type(content_type).has_url.empty?
10
+ record.errors[attribute] << N_("The product %{name} has no %{type} repositories with upstream URLs to add to the alternate content source.") % { name: product.name, type: content_type }
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -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
@@ -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
@@ -204,6 +204,10 @@ module Katello
204
204
  new_view.filters << new_filter
205
205
 
206
206
  case filter.type
207
+ when ContentViewDebFilter.name
208
+ filter.deb_rules.each do |rule|
209
+ new_filter.deb_rules << rule.dup
210
+ end
207
211
  when ContentViewPackageFilter.name
208
212
  filter.package_rules.each do |rule|
209
213
  new_filter.package_rules << rule.dup
@@ -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
@@ -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.") %
@@ -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
@@ -12,28 +12,20 @@ module Cert
12
12
  File.read(SETTINGS[:katello][:candlepin][:ca_cert_file])
13
13
  end
14
14
 
15
- def self.ssl_client_cert(use_admin_as_cn_cert: false)
16
- @ssl_client_cert ||= OpenSSL::X509::Certificate.new(File.read(ssl_client_cert_filename(use_admin_as_cn_cert: use_admin_as_cn_cert)))
15
+ def self.ssl_client_cert
16
+ @ssl_client_cert ||= OpenSSL::X509::Certificate.new(File.read(ssl_client_cert_filename))
17
17
  end
18
18
 
19
- def self.ssl_client_cert_filename(use_admin_as_cn_cert: false)
20
- if use_admin_as_cn_cert
21
- Setting[:pulp_client_cert]
22
- else
23
- Setting[:ssl_certificate]
24
- end
19
+ def self.ssl_client_cert_filename
20
+ Setting[:ssl_certificate]
25
21
  end
26
22
 
27
- def self.ssl_client_key(use_admin_as_cn_cert: false)
28
- @ssl_client_key ||= OpenSSL::PKey::RSA.new(File.read(ssl_client_key_filename(use_admin_as_cn_cert: use_admin_as_cn_cert)))
23
+ def self.ssl_client_key
24
+ @ssl_client_key ||= OpenSSL::PKey::RSA.new(File.read(ssl_client_key_filename))
29
25
  end
30
26
 
31
- def self.ssl_client_key_filename(use_admin_as_cn_cert: false)
32
- if use_admin_as_cn_cert
33
- Setting[:pulp_client_key]
34
- else
35
- Setting[:ssl_priv_key]
36
- end
27
+ def self.ssl_client_key_filename
28
+ Setting[:ssl_priv_key]
37
29
  end
38
30
 
39
31
  def self.verify_ueber_cert(organization)
@@ -22,6 +22,7 @@ module Katello
22
22
  end
23
23
 
24
24
  def import_all(filtered_indexing = false)
25
+ additive = filtered_indexing || (@repository&.mirroring_policy == 'additive')
25
26
  association_tracker = RepoAssociationTracker.new(@content_type, @service_class, @repository)
26
27
  units_from_pulp.each do |units|
27
28
  units.each do |unit|
@@ -51,7 +52,7 @@ module Katello
51
52
  end
52
53
 
53
54
  if @model_class.many_repository_associations && @repository
54
- sync_repository_associations(association_tracker, additive: filtered_indexing)
55
+ sync_repository_associations(association_tracker, additive: additive)
55
56
  end
56
57
  end
57
58
 
@@ -27,15 +27,16 @@ module Katello
27
27
  end
28
28
  end
29
29
 
30
- def initialize(organization)
30
+ def initialize(organization, sca: true)
31
31
  @organization = organization
32
+ @content_access_mode = sca ? 'org_environment' : 'entitlement'
32
33
  end
33
34
 
34
35
  def seed!
35
36
  ActiveRecord::Base.transaction do
36
37
  @organization.setup_label_from_name
37
38
 
38
- # existing validation errors are not resolvable here, so don't validatate
39
+ # existing validation errors are not resolvable here, so don't validate
39
40
  @organization.save(validate: false)
40
41
 
41
42
  create_library_environment
@@ -66,9 +67,8 @@ module Katello
66
67
 
67
68
  def create_backend_objects!
68
69
  Katello::Ping.ping!(services: [:candlepin])
69
-
70
70
  if needs_candlepin_organization?
71
- ::Katello::Resources::Candlepin::Owner.create(@organization.label, @organization.name)
71
+ ::Katello::Resources::Candlepin::Owner.create(@organization.label, @organization.name, content_access_mode: @content_access_mode)
72
72
  end
73
73
 
74
74
  ::Katello::ContentViewManager.create_candlepin_environment(
@@ -17,8 +17,8 @@ module Katello
17
17
  :debug => true
18
18
  },
19
19
  :cert_auth => {
20
- :ssl_client_cert => ::Cert::Certs.ssl_client_cert(use_admin_as_cn_pulp_cert: true),
21
- :ssl_client_key => ::Cert::Certs.ssl_client_key(use_admin_as_cn_pulp_cert: true)
20
+ :ssl_client_cert => '/etc/pki/katello/certs/pulp-client.crt',
21
+ :ssl_client_key => '/etc/pki/katello/private/pulp-client.key'
22
22
  }
23
23
  }
24
24
 
@@ -5,10 +5,12 @@ module Katello
5
5
  include Katello::Pulp3::ServiceCommon
6
6
  attr_accessor :acs
7
7
  attr_accessor :smart_proxy
8
+ attr_accessor :repository
8
9
 
9
- def initialize(acs, smart_proxy)
10
+ def initialize(acs, smart_proxy, repository = nil)
10
11
  @acs = acs
11
12
  @smart_proxy = smart_proxy
13
+ @repository = repository
12
14
  end
13
15
 
14
16
  def api
@@ -20,10 +22,23 @@ module Katello
20
22
  end
21
23
 
22
24
  def smart_proxy_acs
23
- ::Katello::SmartProxyAlternateContentSource.find_by(alternate_content_source_id: acs.id, smart_proxy_id: smart_proxy.id)
25
+ if acs.alternate_content_source_type == 'custom'
26
+ ::Katello::SmartProxyAlternateContentSource.find_by(alternate_content_source_id: acs.id, smart_proxy_id: smart_proxy.id)
27
+ else
28
+ ::Katello::SmartProxyAlternateContentSource.find_by(alternate_content_source_id: acs.id, smart_proxy_id: smart_proxy.id, repository_id: repository.id)
29
+ end
24
30
  end
25
31
 
26
32
  def remote_options
33
+ if repository.present?
34
+ options = repository.backend_service(smart_proxy).remote_options
35
+ options[:policy] = 'on_demand'
36
+ options[:proxy_url] = acs.http_proxy&.url
37
+ options[:proxy_username] = acs.http_proxy&.username
38
+ options[:proxy_password] = acs.http_proxy&.password
39
+ return options
40
+ end
41
+
27
42
  remote_options = {
28
43
  tls_validation: acs.verify_ssl,
29
44
  name: generate_backend_object_name,
@@ -66,8 +81,11 @@ module Katello
66
81
  api.remotes_api.partial_update(smart_proxy_acs.remote_href, remote_options)
67
82
  end
68
83
 
69
- def delete_remote(href = smart_proxy_acs.remote_href)
70
- ignore_404_exception { remote_options[:url]&.start_with?('uln') ? api.remotes_uln_api.delete(href) : api.remotes_api.delete(href) } if href
84
+ # The old repo URL is needed to determine which remote API to use.
85
+ def delete_remote(options = {})
86
+ options[:href] ||= smart_proxy_acs.remote_href
87
+ options[:old_url] ||= remote_options[:url]
88
+ ignore_404_exception { options[:old_url]&.start_with?('uln') ? api.remotes_uln_api.delete(options[:href]) : api.remotes_api.delete(options[:href]) } if options[:href]
71
89
  end
72
90
 
73
91
  def create
@@ -11,6 +11,18 @@ module Katello
11
11
  def publications_verbatim_api
12
12
  PulpDebClient::PublicationsVerbatimApi.new(api_client)
13
13
  end
14
+
15
+ def self.copy_class
16
+ PulpDebClient::Copy
17
+ end
18
+
19
+ def self.add_remove_content_class
20
+ PulpDebClient::RepositoryAddRemoveContent
21
+ end
22
+
23
+ def copy_api
24
+ PulpDebClient::CopyApi.new(api_client)
25
+ end
14
26
  end
15
27
  end
16
28
  end
@@ -55,15 +55,12 @@ module Katello
55
55
  bugzillas += build_bugzillas(katello_id, unit['references'])
56
56
  cves += build_cves(katello_id, unit['references'])
57
57
  packages += build_packages(katello_id, unit['pkglist'])
58
+ modules += build_modules(katello_id, unit['pkglist'])
58
59
  end
59
60
 
60
61
  Katello::ErratumBugzilla.insert_all(bugzillas, unique_by: [:erratum_id, :bug_id, :href]) if bugzillas.any?
61
62
  Katello::ErratumCve.insert_all(cves, unique_by: [:erratum_id, :cve_id, :href]) if cves.any?
62
63
  Katello::ErratumPackage.insert_all(packages, unique_by: [:erratum_id, :nvrea, :name, :filename]) if packages.any?
63
- units.each do |unit|
64
- katello_id = pulp_id_to_id[unit['id']]
65
- modules += build_modules(katello_id, unit['pkglist'])
66
- end
67
64
  ModuleStreamErratumPackage.insert_all(modules, unique_by: [:module_stream_id, :erratum_package_id]) if modules.any?
68
65
  nil
69
66
  end