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
@@ -0,0 +1,166 @@
1
+ module Katello
2
+ class ContentUnitIndexer
3
+ def initialize(content_type:, repository: nil, pulp_content_ids: nil, optimized: true)
4
+ @content_type = content_type
5
+ @model_class = content_type.model_class
6
+ @service_class = SmartProxy.pulp_primary!.content_service(content_type)
7
+ @repository = repository
8
+ @content_type = content_type
9
+ @pulp_content_ids = pulp_content_ids
10
+ @optimized = optimized
11
+ end
12
+
13
+ def remove_duplicates(unit)
14
+ #when we are uploading units, we need to remove any duplicates from our indexed data
15
+ if @content_type.label == 'rpm' && @repository && @pulp_content_ids
16
+ rpms_to_disassociate = ::Katello::Rpm.where(name: unit[:name], version: unit[:version], release: unit[:release],
17
+ epoch: unit[:epoch], arch: unit[:arch]).select(:id)
18
+ if rpms_to_disassociate.any?
19
+ ::Katello::RepositoryRpm.where(rpm_id: rpms_to_disassociate, repository_id: @repository.id).destroy_all
20
+ end
21
+ end
22
+ end
23
+
24
+ def import_all
25
+ association_tracker = RepoAssociationTracker.new(@content_type, @service_class, @repository)
26
+
27
+ units_from_pulp.each do |units|
28
+ units.each do |unit|
29
+ association_tracker.push(unit)
30
+ remove_duplicates(unit)
31
+ end
32
+
33
+ unless fetch_only_ids
34
+ to_insert = units.map do |unit|
35
+ if @content_type.generic?
36
+ @service_class.generate_model_row(unit, @content_type)
37
+ else
38
+ @service_class.generate_model_row(unit)
39
+ end
40
+ end
41
+
42
+ next if to_insert.empty?
43
+ insert_timestamps(to_insert)
44
+ if @content_type.mutable
45
+ @model_class.upsert_all(to_insert, unique_by: :pulp_id)
46
+ else
47
+ @model_class.insert_all(to_insert, unique_by: :pulp_id)
48
+ end
49
+ end
50
+
51
+ import_associations(units) if @repository
52
+ end
53
+
54
+ if @model_class.many_repository_associations && @repository
55
+ sync_repository_associations(association_tracker)
56
+ end
57
+ end
58
+
59
+ def import_associations(units)
60
+ pulp_id_to_id = self.class.pulp_id_to_id_map(@content_type, units.map { |unit| unit[@service_class.unit_identifier] })
61
+ @service_class.insert_child_associations(units, pulp_id_to_id) if @service_class.respond_to?(:insert_child_associations)
62
+ end
63
+
64
+ def units_from_pulp(&block)
65
+ if @pulp_content_ids
66
+ @service_class.pulp_units_batch_all(@pulp_content_ids, &block)
67
+ elsif @repository
68
+ @service_class.pulp_units_batch_for_repo(@repository, fetch_identifiers: fetch_only_ids, content_type: @content_type, &block)
69
+ end
70
+ end
71
+
72
+ def self.pulp_id_to_id_map(content_type, pulp_ids)
73
+ map = {}
74
+ content_type.model_class.with_pulp_id(pulp_ids).select(:id, :pulp_id).each do |model|
75
+ map[model.pulp_id] = model.id
76
+ end
77
+ map
78
+ end
79
+
80
+ class RepoAssociationTracker
81
+ def initialize(content_type, service_class, repository)
82
+ @values = {}
83
+ @content_type = content_type
84
+ @repository = repository
85
+ @service_class = service_class
86
+ end
87
+
88
+ def unit_ids
89
+ db_values.map { |row| row[@content_type.model_class.unit_id_field] }
90
+ end
91
+
92
+ #pulp_href is only provided if we're storing a different 'pulp_id' on the repo association
93
+ def push(unit)
94
+ if @service_class.backend_unit_identifier
95
+ pulp_href = unit.dig(@service_class.backend_unit_identifier)
96
+ else
97
+ pulp_href = nil
98
+ end
99
+ unit_id = unit[@service_class.unit_identifier]
100
+ @values[unit_id] = pulp_href
101
+ end
102
+
103
+ def db_values
104
+ return @final_values if @final_values
105
+ @final_value = []
106
+
107
+ @final_values = ::Katello::ContentUnitIndexer.pulp_id_to_id_map(@content_type, @values.keys).map do |pulp_id, katello_id|
108
+ #:repository_id => X, :erratum_id => y
109
+ row = {:repository_id => @repository.id, @content_type.model_class.unit_id_field => katello_id}
110
+ row[pulp_href_association_name] = @values[pulp_id] if pulp_href_association_name
111
+ row
112
+ end
113
+ ContentUnitIndexer.insert_timestamps(@content_type.model_class, @final_values)
114
+ @final_values
115
+ end
116
+
117
+ def pulp_href_association_name
118
+ 'erratum_pulp3_href' if @content_type.label == 'erratum'
119
+ end
120
+ end
121
+
122
+ def insert_timestamps(units)
123
+ self.class.insert_timestamps(@model_class, units)
124
+ end
125
+
126
+ def self.insert_timestamps(model_class, units)
127
+ dates = model_class.columns.map(&:name).include?("created_at")
128
+ return units unless dates
129
+ units.each do |row|
130
+ row[:created_at] = DateTime.now
131
+ row[:updated_at] = DateTime.now
132
+ end
133
+ units
134
+ end
135
+
136
+ def fetch_only_ids
137
+ @optimized && @repository &&
138
+ !@repository.content_view.default? &&
139
+ !@repository.repository_type.unique_content_per_repo &&
140
+ @service_class.supports_id_fetch?
141
+ end
142
+
143
+ def sync_repository_associations(assocication_tracker, additive: false)
144
+ unless additive
145
+ ActiveRecord::Base.connection.uncached do
146
+ @model_class.repository_association_class.where(repository_id: @repository.id).where.
147
+ not(@model_class.unit_id_field => assocication_tracker.unit_ids).delete_all
148
+ end
149
+ end
150
+ return if assocication_tracker.db_values.empty?
151
+ @model_class.repository_association_class.upsert_all(assocication_tracker.db_values, :unique_by => association_class_uniqiness_attributes)
152
+ end
153
+
154
+ def association_class_uniqiness_attributes
155
+ columns = [@model_class.unit_id_field, 'repository_id']
156
+ found = ActiveRecord::Base.connection.indexes(@model_class.repository_association_class.table_name).find do |index|
157
+ index.columns.sort == columns.sort
158
+ end
159
+ if found
160
+ found.columns
161
+ else
162
+ fail "Unable to find unique index for #{columns} on table #{self.repository_association_class.table_name}"
163
+ end
164
+ end
165
+ end
166
+ end
@@ -1,5 +1,11 @@
1
1
  module Katello
2
2
  class OrganizationCreator
3
+ DEFAULT_CONTENT_VIEW_NAME = 'Default Organization View'.freeze
4
+ DEFAULT_CONTENT_VIEW_LABEL = 'Default_Organization_View'.freeze
5
+
6
+ DEFAULT_LIFECYCLE_ENV_NAME = 'Library'.freeze
7
+ DEFAULT_LIFECYCLE_ENV_LABEL = 'Library'.freeze
8
+
3
9
  attr_reader :library_view, :library_environment, :library_cvv, :content_view_environment, :anonymous_provider, :redhat_provider
4
10
 
5
11
  def self.seed_all_organizations!
@@ -16,7 +22,7 @@ module Katello
16
22
  User.as_anonymous_admin do
17
23
  Organization.not_created_in_katello.each do |org|
18
24
  creator = self.new(org)
19
- creator.create!
25
+ creator.create!(raise_validation_errors: false)
20
26
  end
21
27
  end
22
28
  end
@@ -28,7 +34,9 @@ module Katello
28
34
  def seed!
29
35
  ActiveRecord::Base.transaction do
30
36
  @organization.setup_label_from_name
31
- @organization.save!
37
+
38
+ # existing validation errors are not resolvable here, so don't validatate
39
+ @organization.save(validate: false)
32
40
 
33
41
  create_library_environment
34
42
  create_library_view
@@ -40,14 +48,19 @@ module Katello
40
48
  end
41
49
  end
42
50
 
43
- def create!
51
+ def create!(raise_validation_errors: true)
44
52
  ActiveRecord::Base.transaction do
45
53
  seed!
46
54
 
47
55
  create_backend_objects!
48
56
 
49
57
  @organization.created_in_katello = true
50
- @organization.save!
58
+
59
+ begin
60
+ @organization.save!
61
+ rescue => e
62
+ raise e if raise_validation_errors
63
+ end
51
64
  end
52
65
  end
53
66
 
@@ -80,8 +93,8 @@ module Katello
80
93
 
81
94
  def create_library_environment
82
95
  @library_environment = Katello::KTEnvironment.where(
83
- :name => "Library",
84
- :label => "Library",
96
+ :name => DEFAULT_LIFECYCLE_ENV_NAME,
97
+ :label => DEFAULT_LIFECYCLE_ENV_LABEL,
85
98
  :library => true,
86
99
  :organization => @organization
87
100
  ).first_or_create!
@@ -90,7 +103,8 @@ module Katello
90
103
  def create_library_view
91
104
  @library_view = Katello::ContentView.where(
92
105
  default: true,
93
- name: 'Default Organization View',
106
+ name: DEFAULT_CONTENT_VIEW_NAME,
107
+ label: DEFAULT_CONTENT_VIEW_LABEL,
94
108
  organization: @organization
95
109
  ).first_or_create!
96
110
  end
@@ -121,7 +135,8 @@ module Katello
121
135
  def create_cdn_configuration
122
136
  @cdn_configuration = Katello::CdnConfiguration.where(
123
137
  organization: @organization,
124
- url: ::Katello::Resources::CDN::CdnResource.redhat_cdn_url
138
+ url: ::Katello::Resources::CDN::CdnResource.redhat_cdn_url,
139
+ type: ::Katello::CdnConfiguration::CDN_TYPE
125
140
  ).first_or_create!
126
141
  end
127
142
  end
@@ -18,7 +18,7 @@ module Katello
18
18
  config = {
19
19
  feed: root.url,
20
20
  upstream_name: root.docker_upstream_name,
21
- tags: root.docker_tags_whitelist,
21
+ tags: root.include_tags,
22
22
  enable_v1: false
23
23
  }
24
24
  importer_class.new(config.merge(primary_importer_connection_options))
@@ -105,37 +105,6 @@ module Katello
105
105
  config
106
106
  end
107
107
 
108
- def copy_contents(destination_repo, filters: nil,
109
- solve_dependencies: false,
110
- rpm_filenames: [])
111
- rpm_copy_clauses, rpm_remove_clauses = generate_copy_clauses(filters&.yum(false), rpm_filenames)
112
- tasks = []
113
- if rpm_copy_clauses
114
- override_config = build_override_config(destination_repo,
115
- filters: filters,
116
- solve_dependencies: solve_dependencies)
117
-
118
- tasks << smart_proxy.pulp_api.extensions.rpm.copy(repo.pulp_id, destination_repo.pulp_id,
119
- rpm_copy_clauses.merge(:override_config => override_config))
120
- end
121
-
122
- if rpm_remove_clauses
123
- tasks << smart_proxy.pulp_api.extensions.repository.unassociate_units(destination_repo.pulp_id,
124
- type_ids: [::Katello::Pulp::Rpm::CONTENT_TYPE],
125
- filters: {unit: rpm_remove_clauses})
126
- end
127
-
128
- tasks.concat(copy_module_contents(destination_repo,
129
- filters: filters,
130
- solve_dependencies: solve_dependencies))
131
-
132
- [:srpm, :errata, :package_group, :package_environment,
133
- :yum_repo_metadata_file, :distribution, :module_default, :drpm].each do |type|
134
- tasks << smart_proxy.pulp_api.extensions.send(type).copy(repo.pulp_id, destination_repo.pulp_id)
135
- end
136
- tasks
137
- end
138
-
139
108
  def import_distribution_data
140
109
  distribution = smart_proxy.pulp_api.extensions.repository.distributions(repo.pulp_id).first
141
110
  if distribution
@@ -230,29 +199,6 @@ module Katello
230
199
  end
231
200
  [copy_clauses, remove_clauses]
232
201
  end
233
-
234
- def generate_copy_clauses(filters, rpm_filenames)
235
- if rpm_filenames&.any?
236
- copy_clauses = {filters: {unit: { 'filename' => { '$in' => rpm_filenames } }}}
237
- remove_clauses = nil
238
- elsif filters&.any?
239
- clause_gen = ::Katello::Util::PackageClauseGenerator.new(repo, filters.yum(false))
240
- clause_gen.generate
241
-
242
- copy = clause_gen.copy_clause
243
- copy_clauses = {filters: {unit: copy }} if copy
244
-
245
- remove = clause_gen.remove_clause
246
- remove_clauses = {filters: {unit: remove}} if remove
247
- else
248
- non_modular_rpms = ::Katello::Rpm.in_repositories(repo).non_modular.pluck(:filename)
249
- copy_clauses = non_modular_rpms.blank? ? nil : {filters: {unit: ContentViewPackageFilter.generate_rpm_clauses(non_modular_rpms)}}
250
- remove_clauses = nil
251
- end
252
-
253
- copy_clauses&.merge!(fields: ::Katello::Pulp::Rpm::PULP_SELECT_FIELDS)
254
- [copy_clauses, remove_clauses]
255
- end
256
202
  end
257
203
  end
258
204
  end
@@ -278,12 +278,6 @@ module Katello
278
278
  Katello::RepositoryTypeManager.find(repo.content_type)
279
279
  end
280
280
 
281
- def index_content_units
282
- content_unit_types.each do |content_type|
283
- content_type.pulp2_service_class
284
- end
285
- end
286
-
287
281
  def proxy_options
288
282
  if repo.root.http_proxy_policy == RootRepository::NO_DEFAULT_HTTP_PROXY
289
283
  return { proxy_host: '' }
@@ -18,17 +18,33 @@ module Katello
18
18
  fail NotImplementedError
19
19
  end
20
20
 
21
- def update_model(model)
22
- custom_json = {}
23
- custom_json['checksum'] = backend_data['sha256']
24
- custom_json['namespace'] = backend_data['namespace']
25
- custom_json['version'] = backend_data['version']
26
- custom_json['name'] = backend_data['name']
27
- custom_json['description'] = backend_data['description']
28
- model.update!(custom_json)
21
+ def self.generate_model_row(unit)
22
+ {
23
+ pulp_id: unit['pulp_href'],
24
+ checksum: unit['sha256'],
25
+ namespace: unit['namespace'],
26
+ version: unit['version'],
27
+ name: unit['name'],
28
+ description: unit['description']
29
+ }
30
+ end
31
+
32
+ def self.insert_child_associations(units, pulp_id_to_id)
33
+ tag_names = units.map { |unit| unit['tags'].map { |tag| tag[:name] } }.flatten
34
+ tag_rows = tag_names.map { |name| {name: name } }
35
+ Katello::AnsibleTag.insert_all(tag_rows, unique_by: [:name]) if tag_rows.any?
36
+
37
+ collection_tag_rows = []
38
+ units.each do |unit|
39
+ katello_id = pulp_id_to_id[unit['pulp_href']]
40
+ #delete old tags
41
+ unit_tags = unit['tags'].map { |tag| tag[:name] }
42
+ Katello::AnsibleCollectionTag.where(:ansible_collection_id => katello_id).where.not(:ansible_tag_id => Katello::AnsibleTag.where(:name => unit_tags)).delete_all
43
+ collection_tag_rows += Katello::AnsibleTag.where(:name => unit_tags).pluck(:id).map { |tag_id| {ansible_collection_id: katello_id, ansible_tag_id: tag_id} }
44
+ end
29
45
 
30
- tags = backend_data['tags'].map { |tag| Katello::AnsibleTag.find_or_create_by(name: tag['name']) }
31
- model.tags = tags
46
+ collection_tag_rows.flatten!
47
+ Katello::AnsibleCollectionTag.insert_all(collection_tag_rows, unique_by: [:ansible_collection_id, :ansible_tag_id])
32
48
  end
33
49
  end
34
50
  end
@@ -4,6 +4,13 @@ module Katello
4
4
  module Pulp3
5
5
  module Api
6
6
  class Apt < Core
7
+ def publication_verbatim_class
8
+ PulpDebClient::DebVerbatimPublication
9
+ end
10
+
11
+ def publications_verbatim_api
12
+ PulpDebClient::PublicationsVerbatimApi.new(api_client)
13
+ end
7
14
  end
8
15
  end
9
16
  end
@@ -36,6 +36,10 @@ module Katello
36
36
  PulpRpmClient::ContentPackageenvironmentsApi.new(api_client)
37
37
  end
38
38
 
39
+ def content_modulemd_defaults_api
40
+ PulpRpmClient::ContentModulemdDefaultsApi.new(api_client)
41
+ end
42
+
39
43
  def content_repo_metadata_files_api
40
44
  PulpRpmClient::ContentRepoMetadataFilesApi.new(api_client)
41
45
  end
@@ -121,11 +121,20 @@ module Katello
121
121
  }
122
122
  end
123
123
 
124
+ fail _("Content View label not provided.") if metadata[:label].blank?
125
+
124
126
  cv = ::Katello::ContentView.find_by(label: metadata[:label],
125
- organization: organization,
126
- import_only: true)
127
+ organization: organization)
127
128
  if cv.blank?
128
129
  ::Katello::ContentView.create!(metadata.merge(organization: organization, import_only: true))
130
+ elsif !cv.import_only?
131
+ msg = _("Unable to import in to Content View specified in the metadata - '%{name}'. "\
132
+ "The 'import_only' attribute for the content view is set to false. "\
133
+ "To mark this Content View as importable, have your system administrator"\
134
+ " run the following command on the server. "\
135
+ % { name: cv.name })
136
+ command = "foreman-rake katello:set_content_view_import_only ID=#{cv.id}"
137
+ fail msg + "\n" + command
129
138
  else
130
139
  cv.update!(description: cv_metadata[:description]) if cv.description != metadata[:description]
131
140
  cv
@@ -43,7 +43,7 @@ module Katello
43
43
 
44
44
  def generate_repository_metadata(repo)
45
45
  repo.slice(:name, :label, :description, :arch, :content_type, :unprotected,
46
- :checksum_type, :os_versions, :major, :minor).
46
+ :checksum_type, :os_versions, :major, :minor, :download_policy, :mirroring_policy).
47
47
  merge(product: generate_product_metadata(repo.product),
48
48
  gpg_key: generate_gpg_metadata(repo.gpg_key),
49
49
  content: generate_content_metadata(repo.content),
@@ -23,15 +23,16 @@ module Katello
23
23
  repo_content_list.map { |content| content.try(:pulp_href) }
24
24
  end
25
25
 
26
- def update_model(model)
27
- custom_json = {}
28
- custom_json['checksum'] = backend_data['sha256']
29
- custom_json['filename'] = backend_data['relative_path']
30
- custom_json['name'] = backend_data['package']
31
- custom_json['version'] = backend_data['version']
32
- custom_json['description'] = backend_data['description']
33
- custom_json['architecture'] = backend_data['architecture']
34
- model.update!(custom_json)
26
+ def self.generate_model_row(unit)
27
+ {
28
+ pulp_id: unit[unit_identifier],
29
+ checksum: unit[:sha256],
30
+ filename: unit[:relative_path],
31
+ name: unit[:package],
32
+ version: unit[:version],
33
+ description: unit[:description]&.truncate(255),
34
+ architecture: unit[:architecture]
35
+ }
35
36
  end
36
37
  end
37
38
  end
@@ -20,11 +20,12 @@ module Katello
20
20
  self.content_api.list(page_opts)
21
21
  end
22
22
 
23
- def update_model(model)
24
- custom_json = {}
25
- custom_json['schema_version'], = backend_data['schema_version']
26
- custom_json['digest'], = backend_data['digest']
27
- model.update!(custom_json)
23
+ def self.generate_model_row(unit)
24
+ {
25
+ schema_version: unit['schema_version'],
26
+ digest: unit['digest'],
27
+ pulp_id: unit[unit_identifier]
28
+ }
28
29
  end
29
30
  end
30
31
  end
@@ -18,12 +18,29 @@ module Katello
18
18
  self.content_api.list(page_opts)
19
19
  end
20
20
 
21
- def update_model(model)
22
- custom_json = {}
23
- custom_json['schema_version'], = backend_data['schema_version']
24
- custom_json['digest'], = backend_data['digest']
25
- custom_json['docker_manifests'] = ::Katello::DockerManifest.where(:pulp_id => backend_data[:listed_manifests])
26
- model.update!(custom_json)
21
+ def self.generate_model_row(unit)
22
+ {
23
+ schema_version: unit['schema_version'],
24
+ digest: unit['digest'],
25
+ pulp_id: unit[unit_identifier]
26
+ }
27
+ end
28
+
29
+ def self.insert_child_associations(units, pulp_id_to_id)
30
+ manifest_list_manifests = []
31
+ units.each do |unit|
32
+ katello_id = pulp_id_to_id[unit[unit_identifier]]
33
+ manifest_ids = ::Katello::DockerManifest.where(:pulp_id => unit[:listed_manifests]).pluck(:id)
34
+ manifest_list_manifests += manifest_ids.map do |manifest_id|
35
+ {
36
+ docker_manifest_list_id: katello_id,
37
+ docker_manifest_id: manifest_id
38
+ }
39
+ end
40
+ end
41
+
42
+ manifest_list_manifests.flatten!
43
+ Katello::DockerManifestListManifest.insert_all(manifest_list_manifests, unique_by: [:docker_manifest_list_id, :docker_manifest_id]) if manifest_list_manifests.any?
27
44
  end
28
45
  end
29
46
  end
@@ -14,15 +14,24 @@ module Katello
14
14
  repo_content_list.map { |content| content.try(:pulp_href) }
15
15
  end
16
16
 
17
- def update_model(model)
18
- custom_json = {}
19
- taggable = ::Katello::DockerManifest.find_by(:pulp_id => backend_data['tagged_manifest'])
17
+ def self.generate_model_row(unit)
18
+ row = {
19
+ pulp_id: unit[unit_identifier],
20
+ name: unit['name']
21
+ }
22
+
23
+ taggable = ::Katello::DockerManifest.find_by(:pulp_id => unit['tagged_manifest'])
24
+ taggable_type = ::Katello::DockerManifest.name
20
25
  if taggable.nil?
21
- taggable = ::Katello::DockerManifestList.find_by(:pulp_id => backend_data['tagged_manifest'])
26
+ taggable = ::Katello::DockerManifestList.find_by(:pulp_id => unit['tagged_manifest'])
27
+ taggable_type = ::Katello::DockerManifestList.name
28
+ end
29
+
30
+ if taggable
31
+ row[:docker_taggable_id] = taggable.id
32
+ row[:docker_taggable_type] = taggable_type
22
33
  end
23
- custom_json['docker_taggable'] = taggable
24
- custom_json['name'] = backend_data['name']
25
- model.update!(custom_json)
34
+ row
26
35
  end
27
36
  end
28
37
  end