katello 4.3.0.rc4 → 4.4.0.rc2

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of katello might be problematic. Click here for more details.

Files changed (458) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/common/vendor.js +0 -1
  3. data/app/controllers/katello/api/v2/api_controller.rb +13 -4
  4. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +4 -1
  5. data/app/controllers/katello/api/v2/content_views_controller.rb +46 -0
  6. data/app/controllers/katello/api/v2/host_packages_controller.rb +21 -1
  7. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +30 -1
  8. data/app/controllers/katello/api/v2/organizations_controller.rb +10 -6
  9. data/app/controllers/katello/api/v2/packages_controller.rb +4 -0
  10. data/app/controllers/katello/api/v2/repositories_bulk_actions_controller.rb +10 -1
  11. data/app/controllers/katello/api/v2/repositories_controller.rb +42 -14
  12. data/app/controllers/katello/api/v2/repository_sets_controller.rb +7 -0
  13. data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +3 -0
  14. data/app/controllers/katello/concerns/hosts_controller_extensions.rb +32 -0
  15. data/app/controllers/katello/remote_execution_controller.rb +5 -4
  16. data/app/graphql/types/host_collection.rb +18 -0
  17. data/app/helpers/katello/content_source_helper.rb +43 -0
  18. data/app/helpers/katello/hosts_and_hostgroups_helper.rb +4 -0
  19. data/app/lib/actions/katello/cdn_configuration/update.rb +5 -7
  20. data/app/lib/actions/katello/content_view/publish.rb +5 -0
  21. data/app/lib/actions/katello/content_view_version/incremental_update.rb +17 -3
  22. data/app/lib/actions/katello/repository/discover.rb +1 -14
  23. data/app/lib/actions/katello/repository/errata_mail.rb +4 -5
  24. data/app/lib/actions/katello/repository/filtered_index_content.rb +1 -1
  25. data/app/lib/actions/katello/repository/sync.rb +2 -2
  26. data/app/lib/actions/pulp3/abstract.rb +1 -1
  27. data/app/lib/actions/pulp3/abstract_async_task.rb +1 -1
  28. data/app/lib/actions/pulp3/content_view/delete_repository_references.rb +14 -4
  29. data/app/lib/actions/pulp3/content_view_version/create_import_history.rb +1 -2
  30. data/app/lib/actions/pulp3/content_view_version/import.rb +7 -0
  31. data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +7 -5
  32. data/app/lib/actions/pulp3/repository/copy_content.rb +1 -1
  33. data/app/lib/actions/pulp3/repository/reclaim_space.rb +3 -10
  34. data/app/lib/actions/pulp3/repository/save_artifact.rb +1 -0
  35. data/app/lib/katello/concerns/base_template_scope_extensions.rb +11 -0
  36. data/app/lib/katello/errors.rb +3 -3
  37. data/app/lib/katello/logging.rb +6 -1
  38. data/app/lib/katello/repo_discovery.rb +27 -19
  39. data/app/lib/katello/resources/cdn/katello_cdn.rb +41 -3
  40. data/app/lib/katello/resources/cdn.rb +4 -2
  41. data/app/lib/katello/util/deduplication_migrator.rb +105 -0
  42. data/app/lib/katello/util/pulpcore_content_filters.rb +2 -1
  43. data/app/models/katello/candlepin/repository_mapper.rb +3 -2
  44. data/app/models/katello/cdn_configuration.rb +38 -6
  45. data/app/models/katello/concerns/audit_comment_extensions.rb +17 -0
  46. data/app/models/katello/concerns/host_managed_extensions.rb +34 -2
  47. data/app/models/katello/concerns/organization_extensions.rb +5 -1
  48. data/app/models/katello/concerns/pulp_database_unit.rb +59 -173
  49. data/app/models/katello/concerns/remote_execution_proxy_selector_extensions.rb +11 -0
  50. data/app/models/katello/concerns/smart_proxy_extensions.rb +2 -1
  51. data/app/models/katello/content_view.rb +4 -4
  52. data/app/models/katello/content_view_filter.rb +1 -1
  53. data/app/models/katello/content_view_history.rb +1 -1
  54. data/app/models/katello/content_view_version.rb +6 -2
  55. data/app/models/katello/content_view_version_export_history.rb +3 -2
  56. data/app/models/katello/content_view_version_import_history.rb +4 -4
  57. data/app/models/katello/deb.rb +1 -3
  58. data/app/models/katello/docker_meta_tag.rb +1 -1
  59. data/app/models/katello/erratum.rb +0 -15
  60. data/app/models/katello/glue/provider.rb +1 -1
  61. data/app/models/katello/glue/pulp/repos.rb +3 -1
  62. data/app/models/katello/host/content_facet.rb +2 -27
  63. data/app/models/katello/host/info_provider.rb +9 -0
  64. data/app/models/katello/host/subscription_facet.rb +2 -2
  65. data/app/models/katello/host_available_module_stream.rb +10 -0
  66. data/app/models/katello/hostgroup/content_facet.rb +2 -2
  67. data/app/models/katello/installed_package.rb +1 -0
  68. data/app/models/katello/product.rb +1 -1
  69. data/app/models/katello/product_content.rb +2 -2
  70. data/app/models/katello/repository.rb +13 -12
  71. data/app/models/katello/root_repository.rb +65 -16
  72. data/app/models/katello/rpm.rb +8 -2
  73. data/app/models/setting/content.rb +15 -5
  74. data/app/services/cert/rhsm_client.rb +1 -5
  75. data/app/services/katello/component_view_presenter.rb +1 -1
  76. data/app/services/katello/content_unit_indexer.rb +166 -0
  77. data/app/services/katello/organization_creator.rb +23 -8
  78. data/app/services/katello/pulp/repository/docker.rb +1 -1
  79. data/app/services/katello/pulp/repository/yum.rb +0 -54
  80. data/app/services/katello/pulp/repository.rb +0 -6
  81. data/app/services/katello/pulp3/ansible_collection.rb +26 -10
  82. data/app/services/katello/pulp3/api/apt.rb +7 -0
  83. data/app/services/katello/pulp3/api/yum.rb +4 -0
  84. data/app/services/katello/pulp3/content_view_version/import.rb +11 -2
  85. data/app/services/katello/pulp3/content_view_version/metadata_generator.rb +1 -1
  86. data/app/services/katello/pulp3/deb.rb +10 -9
  87. data/app/services/katello/pulp3/docker_manifest.rb +6 -5
  88. data/app/services/katello/pulp3/docker_manifest_list.rb +23 -6
  89. data/app/services/katello/pulp3/docker_tag.rb +16 -7
  90. data/app/services/katello/pulp3/erratum.rb +51 -56
  91. data/app/services/katello/pulp3/file_unit.rb +9 -6
  92. data/app/services/katello/pulp3/generic_content_unit.rb +11 -12
  93. data/app/services/katello/pulp3/module_stream.rb +76 -30
  94. data/app/services/katello/pulp3/package_group.rb +5 -5
  95. data/app/services/katello/pulp3/pulp_content_unit.rb +19 -11
  96. data/app/services/katello/pulp3/repository/apt.rb +5 -3
  97. data/app/services/katello/pulp3/repository/docker.rb +14 -7
  98. data/app/services/katello/pulp3/repository/generic.rb +1 -1
  99. data/app/services/katello/pulp3/repository/yum.rb +23 -16
  100. data/app/services/katello/pulp3/repository.rb +31 -10
  101. data/app/services/katello/pulp3/repository_mirror.rb +18 -4
  102. data/app/services/katello/pulp3/rpm.rb +13 -13
  103. data/app/services/katello/pulp3/srpm.rb +10 -9
  104. data/app/services/katello/registration_manager.rb +1 -1
  105. data/app/services/katello/repository_type.rb +15 -4
  106. data/app/services/katello/repository_type_manager.rb +1 -1
  107. data/app/services/katello/ui_notifications/subscriptions/manifest_expired_warning.rb +1 -1
  108. data/app/services/katello/upstream_connection_checker.rb +2 -2
  109. data/app/views/foreman/job_templates/change_content_source.erb +1 -31
  110. data/app/views/foreman/job_templates/install_errata.erb +6 -9
  111. data/app/views/foreman/job_templates/install_errata_by_search_query.erb +26 -0
  112. data/app/views/foreman/job_templates/install_packages_by_search_query.erb +19 -0
  113. data/app/views/foreman/job_templates/remove_packages_by_search_query.erb +19 -0
  114. data/app/views/foreman/job_templates/update_packages_by_search_query.erb +19 -0
  115. data/app/views/katello/api/v2/cdn_configurations/show.json.rabl +1 -1
  116. data/app/views/katello/api/v2/content_views/base.json.rabl +8 -4
  117. data/app/views/katello/api/v2/environments/show.json.rabl +9 -0
  118. data/app/views/katello/api/v2/host_module_streams/base.json.rabl +1 -0
  119. data/app/views/katello/api/v2/repositories/base.json.rabl +1 -0
  120. data/app/views/katello/api/v2/repositories/show.json.rabl +3 -1
  121. data/app/views/katello/layouts/react.html.erb +0 -1
  122. data/app/views/katello/sync_management/_repo.html.erb +36 -25
  123. data/config/initializers/monkeys.rb +0 -1
  124. data/config/routes/api/v2.rb +1 -0
  125. data/config/routes/overrides.rb +3 -0
  126. data/config/routes.rb +2 -0
  127. data/db/migrate/20150930183738_migrate_content_hosts.rb +1 -1
  128. data/db/migrate/20180612164926_add_content_org_id.rb +2 -2
  129. data/db/migrate/20210119162528_delete_puppet_and_ostree_repos.rb +2 -0
  130. data/db/migrate/20211019192121_create_cdn_configuration.katello.rb +11 -2
  131. data/db/migrate/20211201154845_add_unique_indexes.rb +20 -0
  132. data/db/migrate/20211202172358_add_repository_mirroring_policy.rb +26 -0
  133. data/db/migrate/20211208034230_add_content_view_and_lifecycle_environment.rb +6 -0
  134. data/db/migrate/20211220185935_clean_duplicate_content_units.rb +144 -0
  135. data/db/migrate/20220110223754_update_disconnected_settings.rb +20 -0
  136. data/db/migrate/20220120163252_fix_docker_download_policy.rb +11 -0
  137. data/db/migrate/20220124191056_add_type_to_cdn_configuration.rb +22 -0
  138. data/db/migrate/20220127120843_fix_debian_download_policy.rb +11 -0
  139. data/db/migrate/20220204171908_rename_docker_tags_whitelist_and_add_exclude_tags.rb +8 -0
  140. data/db/migrate/20220207140355_change_deb_attributes_size_limit.rb +7 -0
  141. data/db/migrate/20220209205137_expand_sync_timeout_settings.rb +23 -0
  142. data/db/seeds.d/111-upgrade_tasks.rb +2 -1
  143. data/engines/bastion/app/views/bastion/layouts/application.html.erb +0 -1
  144. data/engines/bastion/app/views/bastion/layouts/assets.html.erb +0 -1
  145. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/content-credentials.controller.js +1 -1
  146. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-products.controller.js +1 -1
  147. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-repositories.controller.js +1 -1
  148. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-traces-modal.html +1 -1
  149. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment.html +26 -1
  150. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/apply-errata.controller.js +10 -3
  151. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +212 -152
  152. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/packages.controller.js +1 -0
  153. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +29 -10
  154. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-manage-content.controller.js +2 -3
  155. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +8 -3
  156. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +49 -35
  157. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/mirroring-policy.service.js +30 -0
  158. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +29 -6
  159. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +48 -23
  160. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/discovery.controller.js +5 -4
  161. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.routes.js +4 -3
  162. data/lib/katello/engine.rb +4 -0
  163. data/lib/katello/permission_creator.rb +1 -1
  164. data/lib/katello/permissions/host_permissions.rb +3 -1
  165. data/lib/katello/plugin.rb +9 -1
  166. data/lib/katello/repository_types/deb.rb +0 -1
  167. data/lib/katello/repository_types/docker.rb +4 -4
  168. data/lib/katello/repository_types/file.rb +0 -1
  169. data/lib/katello/repository_types/ostree.rb +4 -6
  170. data/lib/katello/repository_types/python.rb +5 -1
  171. data/lib/katello/repository_types/yum.rb +2 -9
  172. data/lib/katello/tasks/content_view_import_only.rake +34 -0
  173. data/lib/katello/tasks/import_applicability.rake +1 -1
  174. data/lib/katello/tasks/jenkins.rake +0 -2
  175. data/lib/katello/tasks/repository.rake +4 -1
  176. data/lib/katello/tasks/upgrades/4.4/publish_import_cvvs.rake +17 -0
  177. data/lib/katello/version.rb +1 -1
  178. data/locale/action_names.rb +8 -7
  179. data/locale/bn/katello.po +1402 -650
  180. data/locale/cs/katello.po +1217 -96
  181. data/locale/de/katello.po +2359 -1347
  182. data/locale/en/katello.po +1216 -94
  183. data/locale/es/katello.po +2201 -1172
  184. data/locale/fr/katello.po +2601 -1615
  185. data/locale/gu/katello.po +1564 -814
  186. data/locale/hi/katello.po +1563 -810
  187. data/locale/it/katello.po +1311 -282
  188. data/locale/ja/katello.po +2534 -1518
  189. data/locale/katello.pot +3430 -1326
  190. data/locale/kn/katello.po +1564 -812
  191. data/locale/ko/katello.po +1441 -409
  192. data/locale/mr/katello.po +1564 -776
  193. data/locale/or/katello.po +1565 -813
  194. data/locale/pa/katello.po +1559 -792
  195. data/locale/pt/katello.po +1314 -277
  196. data/locale/pt_BR/katello.po +2226 -1181
  197. data/locale/ru/katello.po +1587 -563
  198. data/locale/ta/katello.po +1373 -619
  199. data/locale/te/katello.po +1564 -810
  200. data/locale/zh_CN/katello.po +2936 -1890
  201. data/locale/zh_TW/katello.po +1508 -606
  202. data/webpack/__mocks__/foremanReact/{redux/actions/toasts.js → components/ToastsList/index.js} +3 -2
  203. data/webpack/components/ActionableDetail.js +35 -21
  204. data/webpack/components/Content/Details/ContentDetails.js +1 -1
  205. data/webpack/components/Content/Details/__tests__/ContentDetailInfo.test.js +0 -2
  206. data/webpack/components/Content/Details/__tests__/ContentDetailRepositories.test.js +0 -2
  207. data/webpack/components/Content/Details/__tests__/ContentDetails.test.js +0 -2
  208. data/webpack/components/Content/Details/__tests__/__snapshots__/ContentDetails.test.js.snap +1 -1
  209. data/webpack/components/Content/__tests__/ContentPage.test.js +0 -2
  210. data/webpack/components/Content/__tests__/ContentTable.test.js +0 -2
  211. data/webpack/components/EditableSwitch.js +8 -2
  212. data/webpack/components/EditableTextInput/EditableTextInput.js +44 -86
  213. data/webpack/components/EditableTextInput/__tests__/editableTextInput.test.js +3 -3
  214. data/webpack/components/Errata/index.js +95 -29
  215. data/webpack/components/ErratumTypeLabel.js +16 -16
  216. data/webpack/components/MultiSelect/index.js +2 -2
  217. data/webpack/components/Packages/index.js +1 -1
  218. data/webpack/components/RoutedTabs/index.js +2 -1
  219. data/webpack/components/Search/Search.js +5 -2
  220. data/webpack/components/Search/__tests__/search.test.js +2 -3
  221. data/webpack/components/Select/Select.js +1 -1
  222. data/webpack/components/SelectOrg/SelectOrgReducer.js +15 -15
  223. data/webpack/components/SelectOrg/SetOrganization.js +2 -2
  224. data/webpack/components/Table/PageControls.js +3 -6
  225. data/webpack/components/Table/TableHooks.js +47 -7
  226. data/webpack/components/Table/TableWrapper.js +25 -7
  227. data/webpack/components/TypeAhead/TypeAhead.js +5 -1
  228. data/webpack/components/TypeAhead/helpers/commonPropTypes.js +1 -1
  229. data/webpack/components/TypeAhead/helpers/helpers.js +14 -14
  230. data/webpack/components/TypeAhead/pf3Search/TypeAheadSearch.js +1 -1
  231. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +4 -1
  232. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +2 -1
  233. data/webpack/components/WithOrganization/withOrganization.js +3 -3
  234. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard.js +1 -1
  235. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.js +108 -0
  236. data/webpack/components/extensions/HostDetails/Cards/__tests__/errataOverviewCard.test.js +56 -0
  237. data/webpack/components/extensions/HostDetails/HostDetailsActions.js +2 -0
  238. data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesActions.js +49 -2
  239. data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesConstants.js +14 -1
  240. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/SecondaryTabsRoutes.js +6 -4
  241. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/constants.js +1 -0
  242. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/index.js +1 -0
  243. data/webpack/components/extensions/HostDetails/Tabs/{ErrataTab.js → ErrataTab/ErrataTab.js} +86 -75
  244. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.scss +11 -0
  245. data/webpack/components/extensions/HostDetails/Tabs/{ErratumExpansionContents.js → ErrataTab/ErratumExpansionContents.js} +3 -3
  246. data/webpack/components/extensions/HostDetails/Tabs/{ErratumExpansionDetail.js → ErrataTab/ErratumExpansionDetail.js} +0 -0
  247. data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataActions.js +3 -3
  248. data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataConstants.js +11 -0
  249. data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataSelectors.js +0 -0
  250. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsActions.js +16 -0
  251. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsConstants.js +3 -0
  252. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsSelectors.js +19 -0
  253. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +241 -0
  254. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/__tests__/moduleStreamsTab.test.js +108 -0
  255. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/__tests__/modules.fixtures.json +34 -0
  256. data/webpack/components/extensions/HostDetails/Tabs/PackageInstallModal.js +279 -0
  257. data/webpack/components/extensions/HostDetails/Tabs/PackageInstallModal.scss +3 -0
  258. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab.js +357 -64
  259. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab.scss +3 -7
  260. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +103 -4
  261. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionConstants.js +6 -1
  262. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +45 -42
  263. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.scss +3 -3
  264. data/webpack/components/extensions/HostDetails/Tabs/{EnableTracerEmptyState.js → TracesTab/EnableTracerEmptyState.js} +0 -0
  265. data/webpack/components/extensions/HostDetails/Tabs/{EnableTracerModal.js → TracesTab/EnableTracerModal.js} +3 -2
  266. data/webpack/components/extensions/HostDetails/Tabs/{HostTracesActions.js → TracesTab/HostTracesActions.js} +2 -2
  267. data/webpack/components/extensions/HostDetails/Tabs/{HostTracesConstants.js → TracesTab/HostTracesConstants.js} +0 -0
  268. data/webpack/components/extensions/HostDetails/Tabs/{HostTracesSelectors.js → TracesTab/HostTracesSelectors.js} +0 -0
  269. data/webpack/components/extensions/HostDetails/Tabs/{TracesTab.js → TracesTab/TracesTab.js} +66 -61
  270. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.scss +11 -0
  271. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +17 -18
  272. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packageInstallModal.test.js +385 -0
  273. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packages.fixtures.json +1 -1
  274. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +312 -11
  275. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +2 -2
  276. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +26 -30
  277. data/webpack/components/extensions/HostDetails/Tabs/__tests__/yumInstallablePackages.fixtures.json +72 -0
  278. data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +25 -5
  279. data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesActions.js +18 -0
  280. data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesConstants.js +3 -0
  281. data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesSelectors.js +16 -0
  282. data/webpack/components/extensions/HostDetails/hostDetailsHelpers.js +19 -0
  283. data/webpack/components/extensions/RegistrationCommands/__tests__/__snapshots__/ActivationKeys.test.js.snap +4 -0
  284. data/webpack/components/extensions/RegistrationCommands/fields/ActivationKeys.js +1 -1
  285. data/webpack/components/extensions/RegistrationCommands/fields/LifecycleEnvironment.js +1 -1
  286. data/webpack/components/extensions/about/SystemStatuses.js +1 -1
  287. data/webpack/components/extensions/about/SystemStatusesReducer.js +10 -10
  288. data/webpack/components/pf3Table/components/Table.js +4 -5
  289. data/webpack/components/pf3Table/components/Table.test.js +0 -3
  290. data/webpack/components/pf3Table/components/TableBody.js +2 -2
  291. data/webpack/components/pf3Table/components/__snapshots__/Table.test.js.snap +9 -8
  292. data/webpack/containers/Application/config.js +6 -1
  293. data/webpack/containers/Application/overrides.scss +56 -7
  294. data/webpack/global_index.js +4 -1
  295. data/webpack/global_test_setup.js +1 -1
  296. data/webpack/index.js +7 -0
  297. data/webpack/redux/OrganizationProducts/OrganizationProductsReducer.js +15 -15
  298. data/webpack/redux/reducers/RedHatRepositories/enabled.js +43 -43
  299. data/webpack/redux/reducers/RedHatRepositories/repositorySetRepositories.js +43 -43
  300. data/webpack/redux/reducers/RedHatRepositories/sets.js +31 -31
  301. data/webpack/scenes/AnsibleCollections/AnsibleCollectionsReducer.js +26 -26
  302. data/webpack/scenes/AnsibleCollections/Details/AnsibleCollectionDetailsReducer.js +19 -19
  303. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.test.js +0 -2
  304. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionPage.test.js +0 -2
  305. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsTable.test.js +0 -2
  306. data/webpack/scenes/Content/ContentConfig.js +55 -5
  307. data/webpack/scenes/Content/ContentPage.js +5 -5
  308. data/webpack/scenes/Content/Details/ContentDetails.js +23 -21
  309. data/webpack/scenes/Content/Details/ContentInfo.js +2 -2
  310. data/webpack/scenes/Content/Details/ContentRepositories.js +1 -1
  311. data/webpack/scenes/Content/Details/__tests__/contentDetail.test.js +4 -4
  312. data/webpack/scenes/Content/Table/ContentTable.js +2 -2
  313. data/webpack/scenes/Content/__tests__/contentTable.test.js +3 -3
  314. data/webpack/scenes/ContentViews/ContentViewsConstants.js +5 -4
  315. data/webpack/scenes/ContentViews/ContentViewsPage.js +17 -13
  316. data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +1 -1
  317. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +3 -2
  318. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionReassignHostsForm.js +2 -2
  319. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +6 -6
  320. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +22 -11
  321. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js +31 -18
  322. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +1 -1
  323. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +2 -2
  324. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +22 -28
  325. data/webpack/scenes/ContentViews/Details/ContentViewDetailReducer.js +8 -8
  326. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +5 -5
  327. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +32 -30
  328. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +9 -4
  329. data/webpack/scenes/ContentViews/Details/DetailsContainer.js +14 -17
  330. data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +3 -0
  331. data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositoryTable.js +1 -1
  332. data/webpack/scenes/ContentViews/Details/Filters/ArtifactsWithNoErrata.js +8 -8
  333. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +4 -4
  334. data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +6 -6
  335. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +16 -9
  336. data/webpack/scenes/ContentViews/Details/Filters/CVFilterDetailType.js +46 -46
  337. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +17 -17
  338. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +17 -17
  339. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +4 -4
  340. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetails.js +2 -2
  341. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetailsHeader.js +17 -11
  342. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +1 -1
  343. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +2 -2
  344. data/webpack/scenes/ContentViews/Details/Filters/Rules/Package/AddEditPackageRuleModal.js +17 -17
  345. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +2 -3
  346. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +2 -9
  347. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +3 -5
  348. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +2 -10
  349. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +2 -3
  350. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +2 -3
  351. data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +2 -2
  352. data/webpack/scenes/ContentViews/Details/Repositories/ContentCounts.js +1 -1
  353. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +24 -3
  354. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +11 -5
  355. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionContent.js +28 -28
  356. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +1 -1
  357. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVEnvironmentSelectionForm.js +18 -18
  358. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignActivationKeysForm.js +3 -3
  359. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignHostsForm.js +3 -3
  360. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +6 -6
  361. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedActivationKeys.js +1 -1
  362. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedHosts.js +1 -1
  363. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +31 -35
  364. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.js +9 -8
  365. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.scss +5 -2
  366. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsHeader.js +39 -40
  367. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsTable.js +46 -34
  368. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionRepositoryCell.js +66 -49
  369. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +5 -5
  370. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +3 -3
  371. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +5 -3
  372. data/webpack/scenes/ContentViews/Publish/CVPublishFinish.js +2 -2
  373. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +5 -5
  374. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +3 -3
  375. data/webpack/scenes/ContentViews/components/CVBreadCrumb.js +1 -1
  376. data/webpack/scenes/ContentViews/components/ContentViewsCounter.js +1 -1
  377. data/webpack/scenes/ContentViews/components/EnvironmentLabels.js +18 -18
  378. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +10 -10
  379. data/webpack/scenes/ContentViews/expansions/DetailsExpansion.js +2 -2
  380. data/webpack/scenes/ContentViews/expansions/RelatedContentViewComponentsModal.js +8 -8
  381. data/webpack/scenes/Hosts/ChangeContentSource/actions.js +43 -0
  382. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceForm.js +87 -0
  383. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceTemplate.js +90 -0
  384. data/webpack/scenes/Hosts/ChangeContentSource/components/FormField.js +43 -0
  385. data/webpack/scenes/Hosts/ChangeContentSource/constants.js +3 -0
  386. data/webpack/scenes/Hosts/ChangeContentSource/helpers.js +27 -0
  387. data/webpack/scenes/Hosts/ChangeContentSource/index.js +126 -0
  388. data/webpack/scenes/Hosts/ChangeContentSource/selectors.js +42 -0
  389. data/webpack/scenes/Hosts/ChangeContentSource/styles.scss +11 -0
  390. data/webpack/scenes/ModuleStreams/Details/ModuleStreamDetailsReducer.js +18 -18
  391. data/webpack/scenes/ModuleStreams/Details/Profiles/__tests__/ModuleStreamDetailProfiles.test.js +0 -1
  392. data/webpack/scenes/ModuleStreams/Details/__tests__/ModuleStreamDetails.test.js +0 -2
  393. data/webpack/scenes/ModuleStreams/ModuleStreamsReducer.js +26 -26
  394. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamPage.test.js +0 -2
  395. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamsTable.test.js +0 -2
  396. data/webpack/scenes/Organizations/OrganizationActions.js +5 -1
  397. data/webpack/scenes/Organizations/OrganizationReducer.js +8 -8
  398. data/webpack/scenes/RedHatRepositories/RedHatRepositoriesPage.js +31 -1
  399. data/webpack/scenes/RedHatRepositories/__tests__/RedHatRepositoriesPage.test.js +16 -0
  400. data/webpack/scenes/RedHatRepositories/__tests__/__snapshots__/RedHatRepositoriesPage.test.js.snap +11 -2
  401. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/EnabledRepositoryContent.js +4 -4
  402. data/webpack/scenes/RedHatRepositories/components/RepositorySetRepositories.js +1 -1
  403. data/webpack/scenes/RedHatRepositories/helpers.js +5 -5
  404. data/webpack/scenes/RedHatRepositories/index.js +11 -3
  405. data/webpack/scenes/Settings/SettingsReducer.js +14 -14
  406. data/webpack/scenes/Settings/Tables/TableReducer.js +23 -23
  407. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailInfo.js +2 -2
  408. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailProductContent.js +15 -15
  409. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailProducts.js +1 -1
  410. data/webpack/scenes/Subscriptions/Details/SubscriptionDetailReducer.js +34 -34
  411. data/webpack/scenes/Subscriptions/Details/SubscriptionDetails.js +13 -13
  412. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/AirGappedTypeForm.js +81 -0
  413. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnConfigurationConstants.js +13 -0
  414. data/webpack/scenes/Subscriptions/Manifest/{CdnConfigurationForm.scss → CdnConfigurationTab/CdnConfigurationForm.scss} +0 -0
  415. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnTypeForm.js +106 -0
  416. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/UpstreamServerTypeForm.js +259 -0
  417. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/AirGappedTypeForm.test.js +44 -0
  418. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/CdnTypeForm.test.js +67 -0
  419. data/webpack/scenes/Subscriptions/Manifest/{__tests__/CdnConfigurationForm.test.js → CdnConfigurationTab/__tests__/UpstreamServerTypeForm.test.js} +46 -17
  420. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/index.js +97 -0
  421. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +11 -6
  422. data/webpack/scenes/Subscriptions/Manifest/ManifestHistoryReducer.js +16 -16
  423. data/webpack/scenes/Subscriptions/SubscriptionReducer.js +149 -149
  424. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/UpstreamSubscriptionsReducer.js +41 -41
  425. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/__tests__/UpstreamSubscriptionsPage.test.js +0 -1
  426. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsPage.test.js +0 -1
  427. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsActions.test.js.snap +3 -2
  428. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionsTable.test.js +4 -0
  429. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/__snapshots__/SubscriptionsTable.test.js.snap +9 -0
  430. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/components/Dialogs/DeleteDialog.js +6 -6
  431. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/components/Table.js +12 -12
  432. data/webpack/scenes/Tasks/TaskActions.js +1 -1
  433. data/webpack/scenes/Tasks/__tests__/__snapshots__/TaskActions.test.js.snap +3 -2
  434. data/webpack/services/api/testHelpers.js +5 -3
  435. data/webpack/services/index.js +36 -36
  436. data/webpack/utils/helpers.js +11 -8
  437. metadata +98 -60
  438. data/app/services/katello/pulp/deb.rb +0 -55
  439. data/app/services/katello/pulp/distribution.rb +0 -7
  440. data/app/services/katello/pulp/docker_blob.rb +0 -7
  441. data/app/services/katello/pulp/docker_manifest.rb +0 -13
  442. data/app/services/katello/pulp/docker_manifest_list.rb +0 -14
  443. data/app/services/katello/pulp/docker_tag.rb +0 -14
  444. data/app/services/katello/pulp/erratum.rb +0 -129
  445. data/app/services/katello/pulp/file_unit.rb +0 -21
  446. data/app/services/katello/pulp/module_stream.rb +0 -39
  447. data/app/services/katello/pulp/package_category.rb +0 -7
  448. data/app/services/katello/pulp/package_group.rb +0 -20
  449. data/app/services/katello/pulp/pulp_content_unit.rb +0 -156
  450. data/app/services/katello/pulp/rpm.rb +0 -57
  451. data/app/services/katello/pulp/srpm.rb +0 -29
  452. data/app/services/katello/pulp/yum_metadata_file.rb +0 -30
  453. data/lib/monkeys/pulp3_13_checksumfix.rb +0 -17
  454. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationHooks.js +0 -2
  455. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js +0 -2
  456. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab.scss +0 -16
  457. data/webpack/components/extensions/HostDetails/Tabs/TracesTab.scss +0 -12
  458. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationForm.js +0 -185
@@ -25,13 +25,13 @@ module Katello
25
25
  repo_content_list.map { |content| content.try(:pulp_href) }
26
26
  end
27
27
 
28
- # rubocop:disable Metrics/AbcSize
29
- def update_model(model)
30
- updated = false
28
+ def self.generate_model_row(unit)
31
29
  keys = %w(title id severity issued_date type description reboot_suggested solution updated_date summary)
32
- custom_json = backend_data.slice(*keys)
30
+ custom_json = unit.slice(*keys)
31
+ custom_json['pulp_id'] = custom_json['id']
33
32
  custom_json["issued"] = custom_json.delete("issued_date")
34
33
  custom_json["updated"] = custom_json.delete("updated_date")
34
+ custom_json['title'] = custom_json['title']&.truncate(255)
35
35
 
36
36
  # handle SUSE epoch dates
37
37
  custom_json["issued"] = convert_date_if_epoch(custom_json["issued"])
@@ -41,86 +41,81 @@ module Katello
41
41
  custom_json['errata_type'] = custom_json.delete('type')
42
42
  custom_json['issued'] = custom_json['issued'].to_datetime.strftime('%Y-%m-%d').to_datetime
43
43
  custom_json['updated'] = custom_json['updated'].blank? ? custom_json['issued'] : custom_json['updated'].to_datetime.strftime('%Y-%m-%d').to_datetime
44
+ custom_json
45
+ end
44
46
 
45
- if model.updated.blank? ||
46
- model.attributes.excluding(model.attributes.keys - custom_json.keys) != custom_json
47
- model.update!(custom_json)
48
- updated = true
49
-
50
- unless backend_data['references'].blank?
51
- update_bugzillas(model, backend_data['references'])
52
- update_cves(model, backend_data['references'])
53
- end
47
+ def self.insert_child_associations(units, pulp_id_to_id)
48
+ bugzillas = []
49
+ cves = []
50
+ packages = []
51
+ modules = []
52
+
53
+ units.each do |unit|
54
+ katello_id = pulp_id_to_id[unit['id']]
55
+ bugzillas += build_bugzillas(katello_id, unit['references'])
56
+ cves += build_cves(katello_id, unit['references'])
57
+ packages += build_packages(katello_id, unit['pkglist'])
58
+ modules += build_modules(katello_id, unit['pkglist'])
54
59
  end
55
- update_packages(model, backend_data['pkglist']) unless backend_data['pkglist'].blank?
56
- update_modules(model, backend_data['pkglist']) unless backend_data['pkglist'].blank?
57
60
 
58
- return model.id if updated
61
+ Katello::ErratumBugzilla.insert_all(bugzillas, unique_by: [:erratum_id, :bug_id, :href]) if bugzillas.any?
62
+ Katello::ErratumCve.insert_all(cves, unique_by: [:erratum_id, :cve_id, :href]) if cves.any?
63
+ Katello::ErratumPackage.insert_all(packages, unique_by: [:erratum_id, :nvrea, :name, :filename]) if packages.any?
64
+ ModuleStreamErratumPackage.insert_all(modules, unique_by: [:module_stream_id, :erratum_package_id]) if modules.any?
65
+ nil
59
66
  end
60
- # rubocop:enable Metrics/AbcSize
61
67
 
62
- def update_bugzillas(model, ref_list)
63
- ref_list.select { |r| r[:type] == "bugzilla" }.each do |bugzilla|
64
- Katello::Util::Support.active_record_retry do
65
- model.bugzillas.where(bug_id: bugzilla[:id]).first_or_create!(bug_id: bugzilla[:id], href: bugzilla[:href], erratum_id: model.id)
66
- end
68
+ def self.build_bugzillas(katello_id, ref_list)
69
+ ref_list.select { |r| r[:type] == "bugzilla" }.map do |bugzilla|
70
+ {
71
+ bug_id: bugzilla[:id],
72
+ href: bugzilla[:href],
73
+ erratum_id: katello_id
74
+ }
67
75
  end
68
76
  end
69
77
 
70
- def update_cves(model, ref_list)
71
- ref_list.select { |r| r[:type] == "cve" }.each do |cve|
72
- Katello::Util::Support.active_record_retry do
73
- model.cves.where(cve_id: cve[:id]).first_or_create!(cve_id: cve[:id], href: cve[:href], erratum_id: model.id)
74
- end
78
+ def self.build_cves(katello_id, ref_list)
79
+ ref_list.select { |r| r[:type] == "cve" }.map do |cve|
80
+ {
81
+ cve_id: cve[:id],
82
+ href: cve[:href],
83
+ erratum_id: katello_id
84
+ }
75
85
  end
76
86
  end
77
87
 
78
- def update_packages(model, package_list)
79
- package_list.each do |json|
88
+ def self.build_packages(katello_id, pkg_list)
89
+ list = pkg_list.map do |json|
80
90
  package_hashes = json[:packages]
81
- package_attributes = package_hashes.map do |hash|
91
+ package_hashes.map do |hash|
82
92
  nvrea = Util::Package.build_nvra(hash)
83
- {'name' => hash[:name], 'nvrea' => nvrea, 'filename' => hash[:filename]}
84
- end
85
- existing_nvreas = model.packages.pluck(:nvrea)
86
- package_attributes.delete_if { |pkg| existing_nvreas.include?(pkg['nvrea']) }
87
- package_attributes.uniq.each do |package|
88
- Katello::Util::Support.active_record_retry do
89
- model.packages.where(filename: package["filename"]).first_or_create!(package)
90
- end
93
+ {'name' => hash[:name], 'nvrea' => nvrea, 'filename' => hash[:filename], :erratum_id => katello_id}
91
94
  end
92
95
  end
96
+ list.flatten
93
97
  end
94
98
 
95
- def update_modules(model, module_stream_list)
99
+ def self.build_modules(katello_id, module_stream_list)
96
100
  module_stream_attributes = []
97
101
  module_stream_list.each do |package_item|
98
102
  if package_item[:module]
99
103
  module_stream = ::Katello::ModuleStream.where(package_item[:module]).first
100
104
  next if module_stream.blank?
101
105
  nvreas = package_item[:packages].map { |hash| Util::Package.build_nvra(hash) }
102
- module_stream_id_column = "#{ModuleStreamErratumPackage.table_name}.module_stream_id"
103
- existing = ErratumPackage.joins(:module_streams).
104
- where(module_stream_id_column => module_stream.id,
105
- :nvrea => nvreas).pluck(:nvrea)
106
-
107
- (nvreas - existing).each do |nvrea|
108
- package = model.packages.find_by(:nvrea => nvrea)
109
- module_stream_attributes << { :module_stream_id => module_stream.id,
110
- :erratum_package_id => package.id }
111
- end
112
- end
113
- end
114
- module_stream_attributes.uniq.each do |module_stream|
115
- Katello::Util::Support.active_record_retry do
116
- if model.module_streams.empty? || !model.module_streams.pluck(:module_stream_id).include?(module_stream[:module_stream_id])
117
- ModuleStreamErratumPackage.create!(module_stream)
106
+ package_ids = Katello::ErratumPackage.where(:erratum_id => katello_id, :nvrea => nvreas).pluck(:id)
107
+
108
+ module_stream_attributes += package_ids.map do |pkg_id|
109
+ { :module_stream_id => module_stream.id,
110
+ :erratum_package_id => pkg_id }
118
111
  end
112
+
119
113
  end
120
114
  end
115
+ module_stream_attributes.uniq
121
116
  end
122
117
 
123
- def convert_date_if_epoch(date)
118
+ def self.convert_date_if_epoch(date)
124
119
  date.to_i.to_s == date ? epoch_to_date(date) : date
125
120
  end
126
121
 
@@ -19,12 +19,15 @@ module Katello
19
19
  repo_content_list.map { |content| content.try(:pulp_href) }
20
20
  end
21
21
 
22
- def update_model(model)
23
- custom_json = {}
24
- custom_json['checksum'] = backend_data['sha256']
25
- custom_json['path'] = backend_data['relative_path']
26
- custom_json['name'] = File.basename(backend_data['relative_path'].try(:split, '/').try(:[], -1))
27
- model.update!(custom_json)
22
+ def self.generate_model_row(unit)
23
+ filename = File.basename(unit['relative_path'].try(:split, '/').try(:[], -1))
24
+
25
+ {
26
+ pulp_id: unit[unit_identifier],
27
+ name: filename,
28
+ path: unit['relative_path'],
29
+ checksum: unit['sha256']
30
+ }
28
31
  end
29
32
  end
30
33
  end
@@ -13,20 +13,19 @@ module Katello
13
13
  end
14
14
 
15
15
  def self.content_api(repository_type, content_type)
16
- repository_type.content_types.find { |type| type.content_type == content_type }.pulp3_api.new(repository_type.pulp3_api_class.new(SmartProxy.pulp_primary!, repository_type).api_client)
16
+ label = content_type.is_a?(String) ? content_type : content_type.label
17
+ repository_type.content_types.find { |type| type.content_type == label }.pulp3_api.new(repository_type.pulp3_api_class.new(SmartProxy.pulp_primary!, repository_type).api_client)
17
18
  end
18
19
 
19
- def update_model(model, content_type)
20
- content_type = ::Katello::RepositoryTypeManager.find_content_type(content_type)
21
-
22
- custom_json = {}
23
- custom_json['pulp_id'] = backend_data['pulp_href']
24
- custom_json['name'] = content_type&.model_name&.call(backend_data)
25
- custom_json['version'] = content_type&.model_version&.call(backend_data)
26
- custom_json['filename'] = content_type&.model_filename&.call(backend_data)
27
- custom_json['additional_metadata'] = content_type&.model_additional_metadata&.call(backend_data)
28
- custom_json['content_type'] = content_type&.label
29
- model.update!(custom_json)
20
+ def self.generate_model_row(unit, content_type)
21
+ {
22
+ pulp_id: unit['pulp_href'],
23
+ name: content_type&.model_name&.call(unit),
24
+ version: content_type&.model_version&.call(unit),
25
+ filename: content_type&.model_filename&.call(unit),
26
+ additional_metadata: content_type&.model_additional_metadata&.call(unit),
27
+ content_type: content_type&.label
28
+ }
30
29
  end
31
30
  end
32
31
  end
@@ -13,44 +13,90 @@ module Katello
13
13
  repo_content_list.map { |content| content.try(:pulp_href) }
14
14
  end
15
15
 
16
- def create_stream_rpms(model, packages)
17
- packages_found = Katello::Rpm.where(:pulp_id => packages)
18
- existing_rpms = model.rpms
19
- new_packages = packages_found - existing_rpms
20
- packages_to_delete = existing_rpms - packages_found
21
- model.rpms.delete(packages_to_delete)
22
- model.rpms << new_packages
23
- end
24
-
25
- def create_stream_artifacts(model, artifacts_json)
26
- artifacts_json.each do |name|
27
- Katello::Util::Support.active_record_retry do
28
- model.artifacts.where(name: name).first_or_create!
29
- end
16
+ def self.build_stream_rpms(katello_id, package_hrefs)
17
+ package_ids = Katello::Rpm.where(:pulp_id => package_hrefs).pluck(:id)
18
+ rpms = package_ids.map do |package_id|
19
+ {
20
+ module_stream_id: katello_id,
21
+ rpm_id: package_id
22
+ }
30
23
  end
24
+ add_timestamps(rpms)
31
25
  end
32
26
 
33
- def create_profiles(model, profiles_json)
34
- profiles_json.each do |profile, rpms|
35
- Katello::Util::Support.active_record_retry do
36
- profile = model.profiles.where(name: profile).first_or_create!
37
- end
38
- rpms.each do |rpm|
39
- Katello::Util::Support.active_record_retry do
40
- profile.rpms.where(name: rpm).first_or_create!
41
- end
27
+ def self.build_artifacts(katello_id, artifacts_json)
28
+ return [] if artifacts_json.nil?
29
+ artifacts = artifacts_json.map do |name|
30
+ {name: name,
31
+ module_stream_id: katello_id}
32
+ end
33
+ add_timestamps(artifacts)
34
+ end
35
+
36
+ def self.build_profiles(katello_id, profiles_json)
37
+ return [] if profiles_json.nil?
38
+ profiles = profiles_json.map do |profile, _rpms|
39
+ {
40
+ module_stream_id: katello_id,
41
+ name: profile
42
+ }
43
+ end
44
+ add_timestamps(profiles)
45
+ end
46
+
47
+ def self.build_profile_rpms(katello_id, profiles_json)
48
+ return [] if profiles_json.nil?
49
+ profile_rpms = profiles_json.map do |profile, rpms|
50
+ profile_id = Katello::ModuleProfile.find_by(module_stream_id: katello_id, name: profile).id
51
+ rpms.map do |rpm|
52
+ {
53
+ module_profile_id: profile_id,
54
+ name: rpm
55
+ }
42
56
  end
43
57
  end
58
+ add_timestamps(profile_rpms.flatten)
44
59
  end
45
60
 
46
- def update_model(model)
47
- shared_attributes = backend_data.keys & model.class.column_names
48
- shared_json = backend_data.select { |key, _v| shared_attributes.include?(key) }
49
- model.update!(shared_json)
61
+ def self.generate_model_row(unit)
62
+ shared_attributes = unit.keys & Katello::ModuleStream.column_names
63
+ to_return = unit.select { |key, _v| shared_attributes.include?(key) }
64
+ to_return['pulp_id'] = unit['pulp_href']
65
+ to_return[:created_at] = DateTime.now
66
+ to_return[:updated_at] = DateTime.now
67
+ to_return
68
+ end
69
+
70
+ def self.add_timestamps(rows)
71
+ rows.each do |row|
72
+ row[:created_at] = DateTime.now
73
+ row[:updated_at] = DateTime.now
74
+ end
75
+ rows
76
+ end
50
77
 
51
- create_stream_artifacts(model, backend_data['artifacts']) if backend_data.key?('artifacts')
52
- create_profiles(model, backend_data['profiles']) if backend_data.key?('profiles')
53
- create_stream_rpms(model, backend_data['packages']) if backend_data.key?('packages')
78
+ def self.insert_child_associations(units, pulp_id_to_id)
79
+ artifacts = []
80
+ profiles = []
81
+ stream_rpms = []
82
+ units.each do |unit|
83
+ katello_id = pulp_id_to_id[unit[unit_identifier]]
84
+ artifacts += build_artifacts(katello_id, unit['artifacts'])
85
+ profiles += build_profiles(katello_id, unit['profiles'])
86
+ stream_rpms += build_stream_rpms(katello_id, unit['packages'])
87
+ end
88
+
89
+ Katello::ModuleStreamArtifact.insert_all(artifacts, unique_by: [:module_stream_id, :name]) if artifacts.any?
90
+ Katello::ModuleProfile.insert_all(profiles, unique_by: [:module_stream_id, :name]) if profiles.any?
91
+ Katello::ModuleStreamRpm.insert_all(stream_rpms, unique_by: [:module_stream_id, :rpm_id]) if stream_rpms.any?
92
+
93
+ #have to import profile_rpms after profiles
94
+ profile_rpms = []
95
+ units.each do |unit|
96
+ katello_id = pulp_id_to_id[unit[unit_identifier]]
97
+ profile_rpms += build_profile_rpms(katello_id, unit['profiles'])
98
+ end
99
+ Katello::ModuleProfileRpm.insert_all(profile_rpms, unique_by: [:module_profile_id, :name]) if profile_rpms.any?
54
100
  end
55
101
  end
56
102
  end
@@ -54,12 +54,12 @@ module Katello
54
54
  repo_content_list.map { |content| content.try(:pulp_href) }
55
55
  end
56
56
 
57
- def update_model(model)
57
+ def self.generate_model_row(unit)
58
58
  custom_json = {}
59
- custom_json['pulp_id'] = backend_data['pulp_href']
60
- custom_json['name'] = backend_data['name']
61
- custom_json['description'] = backend_data['description']
62
- model.update!(custom_json)
59
+ custom_json['pulp_id'] = unit['pulp_href']
60
+ custom_json['name'] = unit['name']
61
+ custom_json['description'] = unit['description']
62
+ custom_json
63
63
  end
64
64
  end
65
65
  end
@@ -34,10 +34,6 @@ module Katello
34
34
  true
35
35
  end
36
36
 
37
- def update_model
38
- fail NotImplementedError
39
- end
40
-
41
37
  attr_accessor :uuid
42
38
  attr_writer :backend_data
43
39
 
@@ -57,6 +53,20 @@ module Katello
57
53
  self::CONTENT_TYPE
58
54
  end
59
55
 
56
+ def self.pulp_units_for_ids(content_unit_hrefs)
57
+ Enumerator.new do |yielder|
58
+ yielder.yield content_unit_hrefs.collect { |href| pulp_data(href).with_indifferent_access }
59
+ end
60
+ end
61
+
62
+ def self.add_timestamps(rows)
63
+ rows.each do |row|
64
+ row[:created_at] = DateTime.now
65
+ row[:updated_at] = DateTime.now
66
+ end
67
+ rows
68
+ end
69
+
60
70
  def self.pulp_units_batch_all(content_unit_hrefs)
61
71
  Enumerator.new do |yielder|
62
72
  yielder.yield content_unit_hrefs.collect { |href| pulp_data(href) }
@@ -116,30 +126,28 @@ module Katello
116
126
  content_unit_list page_opts
117
127
  end
118
128
 
119
- # rubocop:disable Lint/UselessAssignment
120
129
  def self.find_duplicate_unit(repository, unit_type_id, file, checksum)
121
- filter_label = 'sha256'
130
+ filter_label = :sha256
122
131
  if unit_type_id == 'ostree_ref'
123
- filter_label = 'checksum'
132
+ filter_label = :checksum
124
133
  end
125
134
  content_backend_service = SmartProxy.pulp_primary.content_service(unit_type_id)
126
135
  duplicates_allowed = ::Katello::RepositoryTypeManager.find_content_type(unit_type_id).try(:duplicates_allowed)
127
136
  if repository.generic? && duplicates_allowed
128
137
  filename_key = ::Katello::RepositoryTypeManager.find_content_type(unit_type_id).filename_key
129
138
  duplicate_sha_path_content_list = content_backend_service.content_api(repository.repository_type, unit_type_id).list(
130
- filter_label: checksum,
139
+ filter_label => checksum,
131
140
  filename_key => file[:filename])
132
141
  elsif repository.generic?
133
142
  duplicate_sha_path_content_list = content_backend_service.content_api(repository.repository_type, unit_type_id).list(
134
- filter_label: checksum)
143
+ filter_label => checksum)
135
144
  else
136
145
  duplicate_sha_path_content_list = content_backend_service.content_api.list(
137
- filter_label: checksum,
146
+ filter_label => checksum,
138
147
  "relative_path": file[:filename])
139
148
  end
140
149
  duplicate_sha_path_content_list
141
150
  end
142
- # rubocop:enable Lint/UselessAssignment
143
151
  end
144
152
  end
145
153
  end
@@ -24,9 +24,11 @@ module Katello
24
24
  end
25
25
 
26
26
  def mirror_remote_options
27
- {
28
- distributions: repo.deb_releases + "#{' default' unless repo.deb_releases.include? 'default'}"
29
- }
27
+ super.merge(
28
+ {
29
+ distributions: repo.deb_releases + "#{' default' unless repo.deb_releases.include? 'default'}"
30
+ }
31
+ )
30
32
  end
31
33
 
32
34
  def publication_options(repository_version)
@@ -13,12 +13,17 @@ module Katello
13
13
  end
14
14
 
15
15
  def remote_options
16
- options = {url: root.url, upstream_name: root.docker_upstream_name}
17
- if root.docker_tags_whitelist&.any?
18
- options[:include_tags] = root.docker_tags_whitelist
16
+ options = {url: root.url, upstream_name: root.docker_upstream_name, policy: root.download_policy}
17
+ if root.include_tags&.any?
18
+ options[:include_tags] = root.include_tags
19
19
  else
20
20
  options[:include_tags] = nil
21
21
  end
22
+ if root.exclude_tags&.any?
23
+ options[:exclude_tags] = root.exclude_tags
24
+ else
25
+ options[:exclude_tags] = nil
26
+ end
22
27
  common_remote_options.merge(options)
23
28
  end
24
29
 
@@ -31,10 +36,12 @@ module Katello
31
36
  end
32
37
 
33
38
  def mirror_remote_options
34
- {
35
- url: "https://#{SmartProxy.pulp_primary.pulp3_host!.downcase}",
36
- upstream_name: repo.container_repository_name
37
- }
39
+ super.merge(
40
+ {
41
+ url: "https://#{SmartProxy.pulp_primary.pulp3_host!.downcase}",
42
+ upstream_name: repo.container_repository_name
43
+ }
44
+ )
38
45
  end
39
46
 
40
47
  def distribution_options(path)
@@ -24,7 +24,7 @@ module Katello
24
24
  def remote_options
25
25
  generic_remote_options = JSON.parse(root.generic_remote_options)
26
26
  if generic_remote_options.any?
27
- common_remote_options.merge(generic_remote_options.select { |_, v| !v.nil? }).symbolize_keys
27
+ common_remote_options.merge(generic_remote_options).symbolize_keys
28
28
  else
29
29
  common_remote_options
30
30
  end
@@ -49,16 +49,6 @@ module Katello
49
49
  }
50
50
  end
51
51
 
52
- def mirror_remote_options
53
- policy = smart_proxy.download_policy
54
-
55
- if smart_proxy.download_policy == SmartProxy::DOWNLOAD_INHERIT
56
- policy = repo.root.download_policy
57
- end
58
-
59
- { policy: policy }
60
- end
61
-
62
52
  def import_distribution_data
63
53
  distribution = ::Katello::Pulp3::Distribution.fetch_content_list(repository_version: repo.version_href)
64
54
  if distribution.results.present?
@@ -78,6 +68,8 @@ module Katello
78
68
 
79
69
  def sync_url_params(sync_options)
80
70
  params = super
71
+ params.delete(:mirror)
72
+ params[:sync_policy] = repo.mirroring_policy
81
73
  params[:optimize] = sync_options[:optimize] if sync_options.key?(:optimize)
82
74
  params
83
75
  end
@@ -93,6 +85,7 @@ module Katello
93
85
  "/pulp/content/#{repo.relative_path}/".sub('//', '/')
94
86
  end
95
87
 
88
+ # rubocop:disable Metrics/MethodLength
96
89
  def multi_copy_units(repo_id_map, dependency_solving)
97
90
  tasks = []
98
91
 
@@ -105,14 +98,22 @@ module Katello
105
98
  dest_repo_href = ::Katello::Pulp3::Repository::Yum.new(dest_repo, SmartProxy.pulp_primary).repository_reference.repository_href
106
99
  content_unit_hrefs = dest_repo_id_map[:content_unit_hrefs]
107
100
  # Not needed during incremental update due to dest_base_version
101
+ # -> Unless incrementally updating a CV repo that is a soft copy of its library instance.
102
+ # -> I.e. no filters and not an incremental version.
108
103
  unless dest_repo_id_map[:base_version]
109
- source_repo_for_package_envs = ::Katello::Repository.find(source_repo_ids.first)
110
- unless source_repo_for_package_envs.library_instance?
111
- source_repo_for_package_envs = source_repo_for_package_envs.library_instance
104
+ source_repo_for_content = ::Katello::Repository.find(source_repo_ids.first)
105
+ unless source_repo_for_content.library_instance?
106
+ source_repo_for_content = source_repo_for_content.library_instance
107
+ end
108
+ modulemd_defaults_hrefs = modulemd_defaults({ :repository_version => source_repo_for_content.version_href }).map(&:pulp_href).sort
109
+ package_env_hrefs = packageenvironments({ :repository_version => source_repo_for_content.version_href }).map(&:pulp_href).sort
110
+ # Don't perform extra content actions if the repo is a soft copy of its library instance.
111
+ # Taken care of by the IncrementalUpdate action.
112
+ unless dest_repo.soft_copy_of_library?
113
+ tasks << remove_all_content_from_repo(dest_repo_href)
114
+ tasks << add_content_for_repo(dest_repo_href, package_env_hrefs) unless package_env_hrefs.empty?
115
+ tasks << add_content_for_repo(dest_repo_href, modulemd_defaults_hrefs) unless modulemd_defaults_hrefs.empty?
112
116
  end
113
- package_env_hrefs = packageenvironments({ :repository_version => source_repo_for_package_envs.version_href }).map(&:pulp_href).sort
114
- tasks << remove_all_content_from_repo(dest_repo_href)
115
- tasks << add_content_for_repo(dest_repo_href, package_env_hrefs) unless package_env_hrefs.empty?
116
117
  end
117
118
  source_repo_ids.each do |source_repo_id|
118
119
  source_repo_version = ::Katello::Repository.find(source_repo_id).version_href
@@ -127,6 +128,7 @@ module Katello
127
128
  end
128
129
  tasks.flatten
129
130
  end
131
+ # rubocop:enable Metrics/MethodLength
130
132
 
131
133
  def copy_api_data_dup(data)
132
134
  data_dup = PulpRpmClient::Copy.new
@@ -201,6 +203,7 @@ module Katello
201
203
 
202
204
  if content_unit_hrefs.sort!.any?
203
205
  content_unit_hrefs += packageenvironments({ :repository_version => source_repository.version_href }).map(&:pulp_href).sort
206
+ content_unit_hrefs += modulemd_defaults({ :repository_version => source_repository.version_href }).map(&:pulp_href).sort
204
207
  first_slice = remove_all
205
208
  content_unit_hrefs.each_slice(UNIT_LIMIT) do |slice|
206
209
  tasks << add_content(slice, first_slice)
@@ -228,6 +231,10 @@ module Katello
228
231
  Katello::Pulp3::Api::Core.fetch_from_list { |page_opts| api.content_package_environments_api.list(page_opts.merge(options)) }
229
232
  end
230
233
 
234
+ def modulemd_defaults(options = {})
235
+ Katello::Pulp3::Api::Core.fetch_from_list { |page_opts| api.content_modulemd_defaults_api.list(page_opts.merge(options)) }
236
+ end
237
+
231
238
  def metadatafiles(options = {})
232
239
  api.content_repo_metadata_files_api.list(options)
233
240
  end