katello 4.3.0 → 4.4.0.rc1

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

Potentially problematic release.


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

Files changed (337) 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 +3 -0
  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_controller.rb +17 -7
  11. data/app/controllers/katello/api/v2/repository_sets_controller.rb +7 -0
  12. data/app/controllers/katello/concerns/api/v2/repository_content_controller.rb +3 -0
  13. data/app/controllers/katello/concerns/hosts_controller_extensions.rb +32 -0
  14. data/app/controllers/katello/remote_execution_controller.rb +5 -4
  15. data/app/helpers/katello/content_source_helper.rb +43 -0
  16. data/app/helpers/katello/hosts_and_hostgroups_helper.rb +4 -0
  17. data/app/lib/actions/katello/cdn_configuration/update.rb +5 -7
  18. data/app/lib/actions/katello/content_view/publish.rb +5 -0
  19. data/app/lib/actions/katello/content_view_version/incremental_update.rb +17 -3
  20. data/app/lib/actions/katello/repository/discover.rb +1 -14
  21. data/app/lib/actions/katello/repository/filtered_index_content.rb +1 -1
  22. data/app/lib/actions/pulp3/content_view_version/import.rb +7 -0
  23. data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +7 -5
  24. data/app/lib/actions/pulp3/repository/copy_content.rb +1 -1
  25. data/app/lib/actions/pulp3/repository/save_artifact.rb +1 -0
  26. data/app/lib/katello/concerns/base_template_scope_extensions.rb +11 -0
  27. data/app/lib/katello/errors.rb +3 -3
  28. data/app/lib/katello/logging.rb +6 -1
  29. data/app/lib/katello/repo_discovery.rb +27 -19
  30. data/app/lib/katello/resources/cdn/katello_cdn.rb +41 -3
  31. data/app/lib/katello/resources/cdn.rb +4 -2
  32. data/app/lib/katello/util/deduplication_migrator.rb +105 -0
  33. data/app/models/katello/candlepin/repository_mapper.rb +1 -1
  34. data/app/models/katello/cdn_configuration.rb +38 -6
  35. data/app/models/katello/concerns/host_managed_extensions.rb +23 -1
  36. data/app/models/katello/concerns/organization_extensions.rb +5 -1
  37. data/app/models/katello/concerns/pulp_database_unit.rb +59 -173
  38. data/app/models/katello/concerns/remote_execution_proxy_selector_extensions.rb +11 -0
  39. data/app/models/katello/concerns/smart_proxy_extensions.rb +1 -1
  40. data/app/models/katello/content_view.rb +4 -4
  41. data/app/models/katello/content_view_filter.rb +1 -1
  42. data/app/models/katello/content_view_history.rb +1 -1
  43. data/app/models/katello/content_view_version.rb +6 -2
  44. data/app/models/katello/content_view_version_export_history.rb +1 -1
  45. data/app/models/katello/deb.rb +1 -3
  46. data/app/models/katello/docker_meta_tag.rb +1 -1
  47. data/app/models/katello/erratum.rb +0 -15
  48. data/app/models/katello/glue/pulp/repos.rb +1 -1
  49. data/app/models/katello/host/content_facet.rb +2 -27
  50. data/app/models/katello/host/info_provider.rb +9 -0
  51. data/app/models/katello/host/subscription_facet.rb +2 -2
  52. data/app/models/katello/hostgroup/content_facet.rb +2 -2
  53. data/app/models/katello/product.rb +1 -1
  54. data/app/models/katello/product_content.rb +2 -2
  55. data/app/models/katello/repository.rb +10 -9
  56. data/app/models/katello/root_repository.rb +24 -13
  57. data/app/models/katello/rpm.rb +8 -2
  58. data/app/models/setting/content.rb +6 -3
  59. data/app/services/cert/rhsm_client.rb +1 -5
  60. data/app/services/katello/content_unit_indexer.rb +166 -0
  61. data/app/services/katello/organization_creator.rb +12 -4
  62. data/app/services/katello/pulp/repository/docker.rb +1 -1
  63. data/app/services/katello/pulp/repository/yum.rb +0 -54
  64. data/app/services/katello/pulp/repository.rb +0 -6
  65. data/app/services/katello/pulp3/ansible_collection.rb +26 -10
  66. data/app/services/katello/pulp3/api/apt.rb +7 -0
  67. data/app/services/katello/pulp3/content_view_version/import.rb +11 -2
  68. data/app/services/katello/pulp3/deb.rb +10 -9
  69. data/app/services/katello/pulp3/docker_manifest.rb +6 -5
  70. data/app/services/katello/pulp3/docker_manifest_list.rb +23 -6
  71. data/app/services/katello/pulp3/docker_tag.rb +16 -7
  72. data/app/services/katello/pulp3/erratum.rb +51 -56
  73. data/app/services/katello/pulp3/file_unit.rb +9 -6
  74. data/app/services/katello/pulp3/generic_content_unit.rb +11 -12
  75. data/app/services/katello/pulp3/module_stream.rb +76 -30
  76. data/app/services/katello/pulp3/package_group.rb +5 -5
  77. data/app/services/katello/pulp3/pulp_content_unit.rb +19 -11
  78. data/app/services/katello/pulp3/repository/apt.rb +5 -3
  79. data/app/services/katello/pulp3/repository/docker.rb +14 -7
  80. data/app/services/katello/pulp3/repository/generic.rb +1 -1
  81. data/app/services/katello/pulp3/repository/yum.rb +10 -12
  82. data/app/services/katello/pulp3/repository.rb +26 -7
  83. data/app/services/katello/pulp3/repository_mirror.rb +18 -5
  84. data/app/services/katello/pulp3/rpm.rb +13 -13
  85. data/app/services/katello/pulp3/srpm.rb +10 -9
  86. data/app/services/katello/repository_type.rb +15 -4
  87. data/app/services/katello/repository_type_manager.rb +1 -1
  88. data/app/services/katello/ui_notifications/subscriptions/manifest_expired_warning.rb +1 -1
  89. data/app/services/katello/upstream_connection_checker.rb +2 -2
  90. data/app/views/foreman/job_templates/change_content_source.erb +1 -31
  91. data/app/views/foreman/job_templates/install_errata.erb +6 -9
  92. data/app/views/foreman/job_templates/install_errata_by_search_query.erb +26 -0
  93. data/app/views/foreman/job_templates/install_packages_by_search_query.erb +19 -0
  94. data/app/views/katello/api/v2/cdn_configurations/show.json.rabl +1 -1
  95. data/app/views/katello/api/v2/environments/show.json.rabl +9 -0
  96. data/app/views/katello/api/v2/repositories/show.json.rabl +2 -0
  97. data/app/views/katello/layouts/react.html.erb +0 -1
  98. data/app/views/katello/sync_management/_repo.html.erb +36 -25
  99. data/config/initializers/monkeys.rb +0 -1
  100. data/config/routes/api/v2.rb +1 -0
  101. data/config/routes/overrides.rb +3 -0
  102. data/config/routes.rb +2 -0
  103. data/db/migrate/20150930183738_migrate_content_hosts.rb +1 -1
  104. data/db/migrate/20180612164926_add_content_org_id.rb +2 -2
  105. data/db/migrate/20211201154845_add_unique_indexes.rb +20 -0
  106. data/db/migrate/20211208034230_add_content_view_and_lifecycle_environment.rb +6 -0
  107. data/db/migrate/20211220185935_clean_duplicate_content_units.rb +144 -0
  108. data/db/migrate/20220110223754_update_disconnected_settings.rb +20 -0
  109. data/db/migrate/20220120163252_fix_docker_download_policy.rb +11 -0
  110. data/db/migrate/20220124191056_add_type_to_cdn_configuration.rb +22 -0
  111. data/db/migrate/20220127120843_fix_debian_download_policy.rb +11 -0
  112. data/db/migrate/20220204171908_rename_docker_tags_whitelist_and_add_exclude_tags.rb +8 -0
  113. data/db/migrate/20220207140355_change_deb_attributes_size_limit.rb +7 -0
  114. data/db/seeds.d/111-upgrade_tasks.rb +2 -1
  115. data/engines/bastion/app/views/bastion/layouts/application.html.erb +0 -1
  116. data/engines/bastion/app/views/bastion/layouts/assets.html.erb +0 -1
  117. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/content-credentials.controller.js +1 -1
  118. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-products.controller.js +1 -1
  119. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-credentials/details/content-credential-repositories.controller.js +1 -1
  120. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-traces-modal.html +1 -1
  121. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment.html +26 -1
  122. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +212 -152
  123. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/packages.controller.js +1 -0
  124. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +20 -8
  125. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-manage-content.controller.js +2 -3
  126. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +8 -3
  127. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +34 -30
  128. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +16 -2
  129. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +35 -15
  130. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/discovery.controller.js +5 -4
  131. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.routes.js +4 -3
  132. data/lib/katello/engine.rb +4 -0
  133. data/lib/katello/permission_creator.rb +1 -1
  134. data/lib/katello/permissions/host_permissions.rb +3 -1
  135. data/lib/katello/plugin.rb +4 -1
  136. data/lib/katello/repository_types/deb.rb +0 -1
  137. data/lib/katello/repository_types/docker.rb +4 -4
  138. data/lib/katello/repository_types/file.rb +0 -1
  139. data/lib/katello/repository_types/ostree.rb +4 -0
  140. data/lib/katello/repository_types/python.rb +5 -1
  141. data/lib/katello/repository_types/yum.rb +2 -9
  142. data/lib/katello/tasks/content_view_import_only.rake +34 -0
  143. data/lib/katello/tasks/import_applicability.rake +1 -1
  144. data/lib/katello/tasks/jenkins.rake +0 -2
  145. data/lib/katello/tasks/repository.rake +4 -1
  146. data/lib/katello/tasks/upgrades/4.4/publish_import_cvvs.rake +17 -0
  147. data/lib/katello/version.rb +1 -1
  148. data/locale/action_names.rb +8 -7
  149. data/locale/bn/katello.po +1402 -650
  150. data/locale/cs/katello.po +1217 -96
  151. data/locale/de/katello.po +2359 -1347
  152. data/locale/en/katello.po +1216 -94
  153. data/locale/es/katello.po +2201 -1172
  154. data/locale/fr/katello.po +2601 -1615
  155. data/locale/gu/katello.po +1564 -814
  156. data/locale/hi/katello.po +1563 -810
  157. data/locale/it/katello.po +1311 -282
  158. data/locale/ja/katello.po +2534 -1518
  159. data/locale/katello.pot +3430 -1326
  160. data/locale/kn/katello.po +1564 -812
  161. data/locale/ko/katello.po +1441 -409
  162. data/locale/mr/katello.po +1564 -776
  163. data/locale/or/katello.po +1565 -813
  164. data/locale/pa/katello.po +1559 -792
  165. data/locale/pt/katello.po +1314 -277
  166. data/locale/pt_BR/katello.po +2226 -1181
  167. data/locale/ru/katello.po +1587 -563
  168. data/locale/ta/katello.po +1373 -619
  169. data/locale/te/katello.po +1564 -810
  170. data/locale/zh_CN/katello.po +2936 -1890
  171. data/locale/zh_TW/katello.po +1508 -606
  172. data/webpack/__mocks__/foremanReact/{redux/actions/toasts.js → components/ToastsList/index.js} +3 -2
  173. data/webpack/components/ActionableDetail.js +35 -21
  174. data/webpack/components/Content/Details/__tests__/ContentDetailInfo.test.js +0 -2
  175. data/webpack/components/Content/Details/__tests__/ContentDetailRepositories.test.js +0 -2
  176. data/webpack/components/Content/Details/__tests__/ContentDetails.test.js +0 -2
  177. data/webpack/components/Content/__tests__/ContentPage.test.js +0 -2
  178. data/webpack/components/Content/__tests__/ContentTable.test.js +0 -2
  179. data/webpack/components/EditableSwitch.js +8 -2
  180. data/webpack/components/EditableTextInput/EditableTextInput.js +44 -86
  181. data/webpack/components/EditableTextInput/__tests__/editableTextInput.test.js +3 -3
  182. data/webpack/components/Errata/index.js +19 -11
  183. data/webpack/components/Packages/index.js +1 -1
  184. data/webpack/components/Search/Search.js +5 -2
  185. data/webpack/components/Search/__tests__/search.test.js +2 -3
  186. data/webpack/components/SelectOrg/SetOrganization.js +1 -1
  187. data/webpack/components/Table/PageControls.js +3 -6
  188. data/webpack/components/Table/TableHooks.js +46 -7
  189. data/webpack/components/Table/TableWrapper.js +14 -3
  190. data/webpack/components/TypeAhead/TypeAhead.js +5 -1
  191. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +4 -1
  192. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +2 -1
  193. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard.js +1 -1
  194. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.js +3 -4
  195. data/webpack/components/extensions/HostDetails/HostDetailsActions.js +2 -0
  196. data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesActions.js +18 -2
  197. data/webpack/components/extensions/HostDetails/HostPackages/HostPackagesConstants.js +12 -0
  198. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/SecondaryTabsRoutes.js +1 -1
  199. data/webpack/components/extensions/HostDetails/Tabs/{ErrataTab.js → ErrataTab/ErrataTab.js} +30 -21
  200. data/webpack/components/extensions/HostDetails/Tabs/{ErrataTab.scss → ErrataTab/ErrataTab.scss} +0 -0
  201. data/webpack/components/extensions/HostDetails/Tabs/{ErratumExpansionContents.js → ErrataTab/ErratumExpansionContents.js} +0 -0
  202. data/webpack/components/extensions/HostDetails/Tabs/{ErratumExpansionDetail.js → ErrataTab/ErratumExpansionDetail.js} +0 -0
  203. data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataActions.js +3 -3
  204. data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataConstants.js +11 -0
  205. data/webpack/components/extensions/HostDetails/{HostErrata → Tabs/ErrataTab}/HostErrataSelectors.js +0 -0
  206. data/webpack/components/extensions/HostDetails/Tabs/PackageInstallModal.js +279 -0
  207. data/webpack/components/extensions/HostDetails/Tabs/PackageInstallModal.scss +3 -0
  208. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab.js +125 -8
  209. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +27 -4
  210. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionConstants.js +2 -1
  211. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +6 -3
  212. data/webpack/components/extensions/HostDetails/Tabs/{EnableTracerEmptyState.js → TracesTab/EnableTracerEmptyState.js} +0 -0
  213. data/webpack/components/extensions/HostDetails/Tabs/{EnableTracerModal.js → TracesTab/EnableTracerModal.js} +3 -2
  214. data/webpack/components/extensions/HostDetails/Tabs/{HostTracesActions.js → TracesTab/HostTracesActions.js} +2 -2
  215. data/webpack/components/extensions/HostDetails/Tabs/{HostTracesConstants.js → TracesTab/HostTracesConstants.js} +0 -0
  216. data/webpack/components/extensions/HostDetails/Tabs/{HostTracesSelectors.js → TracesTab/HostTracesSelectors.js} +0 -0
  217. data/webpack/components/extensions/HostDetails/Tabs/{TracesTab.js → TracesTab/TracesTab.js} +8 -5
  218. data/webpack/components/extensions/HostDetails/Tabs/{TracesTab.scss → TracesTab/TracesTab.scss} +0 -0
  219. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +17 -18
  220. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packageInstallModal.test.js +385 -0
  221. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packages.fixtures.json +1 -1
  222. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +58 -7
  223. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +2 -2
  224. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +4 -4
  225. data/webpack/components/extensions/HostDetails/Tabs/__tests__/yumInstallablePackages.fixtures.json +72 -0
  226. data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +12 -5
  227. data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesActions.js +18 -0
  228. data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesConstants.js +3 -0
  229. data/webpack/components/extensions/HostDetails/YumInstallablePackages/YumInstallablePackagesSelectors.js +16 -0
  230. data/webpack/components/extensions/HostDetails/hostDetailsHelpers.js +19 -0
  231. data/webpack/components/pf3Table/components/Table.js +2 -3
  232. data/webpack/components/pf3Table/components/Table.test.js +0 -3
  233. data/webpack/components/pf3Table/components/__snapshots__/Table.test.js.snap +9 -8
  234. data/webpack/containers/Application/config.js +5 -0
  235. data/webpack/global_index.js +1 -1
  236. data/webpack/global_test_setup.js +1 -1
  237. data/webpack/index.js +7 -0
  238. data/webpack/scenes/AnsibleCollections/Details/__tests__/AnsibleCollectionDetails.test.js +0 -2
  239. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionPage.test.js +0 -2
  240. data/webpack/scenes/AnsibleCollections/__tests__/AnsibleCollectionsTable.test.js +0 -2
  241. data/webpack/scenes/Content/ContentConfig.js +55 -5
  242. data/webpack/scenes/Content/ContentPage.js +1 -1
  243. data/webpack/scenes/Content/Details/ContentDetails.js +1 -1
  244. data/webpack/scenes/Content/Details/ContentInfo.js +1 -1
  245. data/webpack/scenes/Content/Details/ContentRepositories.js +1 -1
  246. data/webpack/scenes/Content/Details/__tests__/contentDetail.test.js +4 -4
  247. data/webpack/scenes/Content/Table/ContentTable.js +1 -1
  248. data/webpack/scenes/Content/__tests__/contentTable.test.js +3 -3
  249. data/webpack/scenes/ContentViews/ContentViewsConstants.js +2 -1
  250. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +6 -6
  251. data/webpack/scenes/ContentViews/Details/ComponentContentViews/__tests__/contentViewComponents.test.js +2 -2
  252. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +21 -27
  253. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +5 -5
  254. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +8 -3
  255. data/webpack/scenes/ContentViews/Details/DetailsContainer.js +11 -16
  256. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetails.js +2 -2
  257. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilterDetailsHeader.js +14 -8
  258. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/__tests__/CVRpmMatchContentModal.test.js +2 -2
  259. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +2 -3
  260. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +2 -9
  261. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilterDetails.test.js +3 -5
  262. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +2 -10
  263. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataIDFilter.test.js +2 -3
  264. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvModuleStreamFilter.test.js +2 -3
  265. data/webpack/scenes/ContentViews/Details/Histories/__tests__/contentViewHistory.test.js +2 -2
  266. data/webpack/scenes/ContentViews/Details/Repositories/ContentCounts.js +1 -1
  267. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +23 -2
  268. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +11 -5
  269. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersionContent.js +16 -17
  270. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +1 -1
  271. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +6 -6
  272. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +30 -34
  273. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.js +9 -8
  274. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsHeader.js +13 -15
  275. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionRepositoryCell.js +1 -1
  276. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +4 -4
  277. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +3 -3
  278. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +5 -3
  279. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +2 -2
  280. data/webpack/scenes/Hosts/ChangeContentSource/actions.js +43 -0
  281. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceForm.js +87 -0
  282. data/webpack/scenes/Hosts/ChangeContentSource/components/ContentSourceTemplate.js +90 -0
  283. data/webpack/scenes/Hosts/ChangeContentSource/components/FormField.js +43 -0
  284. data/webpack/scenes/Hosts/ChangeContentSource/constants.js +3 -0
  285. data/webpack/scenes/Hosts/ChangeContentSource/helpers.js +27 -0
  286. data/webpack/scenes/Hosts/ChangeContentSource/index.js +126 -0
  287. data/webpack/scenes/Hosts/ChangeContentSource/selectors.js +42 -0
  288. data/webpack/scenes/Hosts/ChangeContentSource/styles.scss +11 -0
  289. data/webpack/scenes/ModuleStreams/Details/Profiles/__tests__/ModuleStreamDetailProfiles.test.js +0 -1
  290. data/webpack/scenes/ModuleStreams/Details/__tests__/ModuleStreamDetails.test.js +0 -2
  291. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamPage.test.js +0 -2
  292. data/webpack/scenes/ModuleStreams/__tests__/ModuleStreamsTable.test.js +0 -2
  293. data/webpack/scenes/Organizations/OrganizationActions.js +5 -1
  294. data/webpack/scenes/RedHatRepositories/RedHatRepositoriesPage.js +31 -1
  295. data/webpack/scenes/RedHatRepositories/__tests__/RedHatRepositoriesPage.test.js +16 -0
  296. data/webpack/scenes/RedHatRepositories/__tests__/__snapshots__/RedHatRepositoriesPage.test.js.snap +11 -2
  297. data/webpack/scenes/RedHatRepositories/helpers.js +5 -5
  298. data/webpack/scenes/RedHatRepositories/index.js +11 -3
  299. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/AirGappedTypeForm.js +81 -0
  300. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnConfigurationConstants.js +13 -0
  301. data/webpack/scenes/Subscriptions/Manifest/{CdnConfigurationForm.scss → CdnConfigurationTab/CdnConfigurationForm.scss} +0 -0
  302. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnTypeForm.js +106 -0
  303. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/UpstreamServerTypeForm.js +259 -0
  304. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/AirGappedTypeForm.test.js +44 -0
  305. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/CdnTypeForm.test.js +67 -0
  306. data/webpack/scenes/Subscriptions/Manifest/{__tests__/CdnConfigurationForm.test.js → CdnConfigurationTab/__tests__/UpstreamServerTypeForm.test.js} +46 -17
  307. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/index.js +97 -0
  308. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +6 -1
  309. data/webpack/scenes/Subscriptions/UpstreamSubscriptions/__tests__/UpstreamSubscriptionsPage.test.js +0 -1
  310. data/webpack/scenes/Subscriptions/__tests__/SubscriptionsPage.test.js +0 -1
  311. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsActions.test.js.snap +3 -2
  312. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/SubscriptionsTable.test.js +4 -0
  313. data/webpack/scenes/Subscriptions/components/SubscriptionsTable/__tests__/__snapshots__/SubscriptionsTable.test.js.snap +9 -0
  314. data/webpack/scenes/Tasks/TaskActions.js +1 -1
  315. data/webpack/scenes/Tasks/__tests__/__snapshots__/TaskActions.test.js.snap +3 -2
  316. data/webpack/services/api/testHelpers.js +5 -3
  317. data/webpack/utils/helpers.js +6 -3
  318. metadata +81 -58
  319. data/app/services/katello/pulp/deb.rb +0 -55
  320. data/app/services/katello/pulp/distribution.rb +0 -7
  321. data/app/services/katello/pulp/docker_blob.rb +0 -7
  322. data/app/services/katello/pulp/docker_manifest.rb +0 -13
  323. data/app/services/katello/pulp/docker_manifest_list.rb +0 -14
  324. data/app/services/katello/pulp/docker_tag.rb +0 -14
  325. data/app/services/katello/pulp/erratum.rb +0 -129
  326. data/app/services/katello/pulp/file_unit.rb +0 -21
  327. data/app/services/katello/pulp/module_stream.rb +0 -39
  328. data/app/services/katello/pulp/package_category.rb +0 -7
  329. data/app/services/katello/pulp/package_group.rb +0 -20
  330. data/app/services/katello/pulp/pulp_content_unit.rb +0 -156
  331. data/app/services/katello/pulp/rpm.rb +0 -57
  332. data/app/services/katello/pulp/srpm.rb +0 -29
  333. data/app/services/katello/pulp/yum_metadata_file.rb +0 -30
  334. data/lib/monkeys/pulp3_13_checksumfix.rb +0 -17
  335. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationHooks.js +0 -2
  336. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationWrapper.js +0 -2
  337. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationForm.js +0 -185
@@ -74,6 +74,61 @@ module Katello
74
74
  self.name.demodulize.pluralize.underscore.to_sym
75
75
  end
76
76
 
77
+ def import_for_repository(repo, options = {})
78
+ content_type = options[:content_type] || self.content_type
79
+ Katello::ContentUnitIndexer.new(content_type: Katello::RepositoryTypeManager.find_content_type(content_type), repository: repo).import_all
80
+ end
81
+
82
+ def import_all(unit_ids, repository = nil, options = {})
83
+ content_type = options[:content_type] || self.content_type
84
+ Katello::ContentUnitIndexer.new(content_type: Katello::RepositoryTypeManager.find_content_type(content_type), repository: repository, pulp_content_ids: unit_ids).import_all
85
+ end
86
+
87
+ def copy_repository_associations(source_repo, dest_repo)
88
+ if many_repository_associations
89
+ delete_query = "delete from #{repository_association_class.table_name} where repository_id = #{dest_repo.id} and
90
+ #{unit_id_field} not in (select #{unit_id_field} from #{repository_association_class.table_name} where repository_id = #{source_repo.id})"
91
+ ActiveRecord::Base.transaction do
92
+ ActiveRecord::Base.connection.execute(delete_query)
93
+ self.repository_association_class.import(db_columns_copy, db_values_copy(source_repo, dest_repo), validate: false)
94
+ end
95
+ else
96
+ columns = column_names - ["id", "pulp_id", "created_at", "updated_at", "repository_id"]
97
+ queries = []
98
+ queries << "delete from #{self.table_name} where repository_id = #{dest_repo.id} and
99
+ pulp_id not in (select pulp_id from #{self.table_name} where repository_id = #{source_repo.id})"
100
+ queries << "insert into #{self.table_name} (repository_id, pulp_id, #{columns.join(',')})
101
+ select #{dest_repo.id} as repository_id, pulp_id, #{columns.join(',')} from #{self.table_name}
102
+ where repository_id = #{source_repo.id} and pulp_id not in (select pulp_id
103
+ from #{self.table_name} where repository_id = #{dest_repo.id})"
104
+ ActiveRecord::Base.transaction do
105
+ queries.each do |query|
106
+ ActiveRecord::Base.connection.execute(query)
107
+ end
108
+ end
109
+ end
110
+ end
111
+
112
+ def db_columns_copy
113
+ [unit_id_field, backend_identifier_field, :repository_id].compact
114
+ end
115
+
116
+ def db_values_copy(source_repo, dest_repo)
117
+ db_values = []
118
+ existing_unit_ids = self.repository_association_class.where(repository: dest_repo).pluck(unit_id_field)
119
+ if existing_unit_ids.empty?
120
+ new_units = self.repository_association_class.where(repository: source_repo)
121
+ else
122
+ new_units = self.repository_association_class.where(repository: source_repo).where.not("#{unit_id_field} in (?) ", existing_unit_ids)
123
+ end
124
+ unit_backend_identifier_field = backend_identifier_field
125
+ unit_identifier_filed = unit_id_field
126
+ new_units.each do |unit|
127
+ db_values << [unit[unit_identifier_filed], unit[unit_backend_identifier_field], dest_repo.id].compact
128
+ end
129
+ db_values
130
+ end
131
+
77
132
  def installable_for_content_facet(facet, env = nil, content_view = nil)
78
133
  repos = if env && content_view
79
134
  Katello::Repository.in_environment(env).in_content_views([content_view])
@@ -95,8 +150,8 @@ module Katello
95
150
 
96
151
  if hosts
97
152
  hosts = ::Host.where(id: hosts) if hosts.is_a?(Array)
98
- facet_repos = facet_repos.merge(hosts).reorder(nil)
99
- facet_content_units = facet_content_units.merge(hosts).reorder(nil)
153
+ facet_repos = facet_repos.where(hosts: { id: hosts }).reorder(nil)
154
+ facet_content_units = facet_content_units.where(hosts: { id: hosts }).reorder(nil)
100
155
  end
101
156
 
102
157
  self.joins(repository_association_units).
@@ -123,181 +178,12 @@ module Katello
123
178
  content_unit_class.new(pulp_id)
124
179
  end
125
180
 
126
- def unit_id_field
127
- "#{self.name.demodulize.underscore}_id"
128
- end
129
-
130
- def import_all(pulp_ids = nil, repository = nil, generic_content_type = nil)
131
- ids_to_associate = []
132
- if generic_content_type
133
- service_class = SmartProxy.pulp_primary!.content_service(generic_content_type)
134
- else
135
- service_class = SmartProxy.pulp_primary!.content_service(content_type)
136
- end
137
- service_class.pulp_units_batch_all(pulp_ids).each do |units|
138
- units.each do |unit|
139
- unit = unit.with_indifferent_access
140
- if content_type == 'rpm' && repository
141
- rpms_to_disassociate = ::Katello::Rpm.where(name: unit[:name], version: unit[:version], release: unit[:release],
142
- epoch: unit[:epoch], arch: unit[:arch]).select(:id)
143
- if rpms_to_disassociate.any?
144
- ::Katello::RepositoryRpm.where(rpm_id: rpms_to_disassociate, repository_id: repository.id).destroy_all
145
- end
146
- end
147
- model = Katello::Util::Support.active_record_retry do
148
- self.where(:pulp_id => unit[service_class.unit_identifier]).first_or_create
149
- end
150
- service = service_class.new(model.pulp_id)
151
- service.backend_data = unit
152
- if repository&.generic?
153
- service.update_model(model, generic_content_type)
154
- end
155
- service.update_model(model)
156
- ids_to_associate << model.pulp_id
157
- end
158
- end
159
- sync_repository_associations(repository, :pulp_ids => ids_to_associate, :additive => true) if self.many_repository_associations && repository && ids_to_associate.present?
160
- end
161
-
162
- # rubocop:disable Metrics/MethodLength
163
- def import_for_repository(repository, generic_content_type: nil, full_index: false)
164
- pulp_id_href_map = {}
165
- if generic_content_type
166
- service_class = SmartProxy.pulp_primary!.content_service(generic_content_type)
167
- else
168
- service_class = SmartProxy.pulp_primary!.content_service(content_type)
169
- end
170
- fetch_only_ids = !full_index &&
171
- !repository.content_view.default? &&
172
- !repository.repository_type.unique_content_per_repo &&
173
- service_class.supports_id_fetch?
174
-
175
- erratum_updated_ids = []
176
- service_class.pulp_units_batch_for_repo(repository, fetch_identifiers: fetch_only_ids, content_type: generic_content_type).each do |units|
177
- units.each do |unit|
178
- unit = unit.with_indifferent_access
179
- pulp_id = unit[service_class.unit_identifier]
180
- backend_identifier = unit.dig(service_class.backend_unit_identifier)
181
- unless fetch_only_ids
182
- model = Katello::Util::Support.active_record_retry do
183
- self.where(:pulp_id => pulp_id).first_or_create
184
- end
185
- service = service_class.new(model.pulp_id)
186
- service.backend_data = unit
187
- model.repository_id = repository.id unless many_repository_associations
188
-
189
- if repository.generic?
190
- service.update_model(model, generic_content_type)
191
- elsif self == ::Katello::Erratum
192
- # Errata will change pulp_hrefs if the upstream repo updates them
193
- erratum_updated_ids << service.update_model(model)
194
- else
195
- service.update_model(model)
196
- end
197
- end
198
- pulp_id_href_map[pulp_id] = backend_identifier
199
- end
200
- end
201
- sync_repository_associations(repository, :pulp_id_href_map => pulp_id_href_map, generic_content_type: generic_content_type, erratum_updated_ids: erratum_updated_ids.uniq) if self.many_repository_associations
202
- end
203
-
204
- def sync_repository_associations(repository, options = {})
205
- additive = options.fetch(:additive, false)
206
- generic_content_type = options.fetch(:generic_content_type, nil)
207
- pulp_id_href_map = options.dig(:pulp_id_href_map) || {}
208
- pulp_ids = options.dig(:pulp_ids) || pulp_id_href_map.try(:keys)
209
- ids_for_repository = with_pulp_id(pulp_ids).pluck(:id, :pulp_id)
210
- associated_ids = ids_for_repository.map(&:first)
211
- id_href_map_for_repository = {}
212
- ids_for_repository.each { |id_href| id_href_map_for_repository[id_href[0]] = id_href[1] }
213
- id_href_map_for_repository.each_pair { |k, v| id_href_map_for_repository[k] = pulp_id_href_map[v] }
214
- erratum_updated_ids = options.fetch(:erratum_updated_ids, []).flatten.compact
215
-
216
- existing_ids = self.repository_association_class.uncached do
217
- repo_assoc_units = self.repository_association_class.where(:repository_id => repository)
218
-
219
- if generic_content_type
220
- generic_unit_ids = Katello::GenericContentUnit
221
- .where(id: repo_assoc_units.pluck(unit_id_field))
222
- .where(content_type: generic_content_type).pluck(:id)
223
- repo_assoc_units = repo_assoc_units.where(generic_content_unit_id: generic_unit_ids)
224
- end
225
-
226
- repo_assoc_units.pluck(unit_id_field)
227
- end
228
-
229
- new_ids = associated_ids - existing_ids
230
- ActiveRecord::Base.transaction do
231
- if !additive && (delete_ids = existing_ids - associated_ids).any?
232
- query = "DELETE FROM #{self.repository_association_class.table_name} WHERE repository_id=#{repository.id} AND #{unit_id_field} IN (#{delete_ids.join(', ')})"
233
- ActiveRecord::Base.connection.execute(query)
234
- end
235
- if self == ::Katello::Erratum
236
- self.update_repo_association_records(new_ids, erratum_updated_ids, id_href_map_for_repository, repository)
237
- else
238
- unless new_ids.empty?
239
- self.repository_association_class.import(db_columns_sync, db_values(new_ids, id_href_map_for_repository, repository), validate: false)
240
- end
241
- end
242
- end
243
- end
244
- # rubocop:enable Metrics/MethodLength
245
-
246
- def copy_repository_associations(source_repo, dest_repo)
247
- if many_repository_associations
248
- delete_query = "delete from #{repository_association_class.table_name} where repository_id = #{dest_repo.id} and
249
- #{unit_id_field} not in (select #{unit_id_field} from #{repository_association_class.table_name} where repository_id = #{source_repo.id})"
250
- ActiveRecord::Base.transaction do
251
- ActiveRecord::Base.connection.execute(delete_query)
252
- self.repository_association_class.import(db_columns_copy, db_values_copy(source_repo, dest_repo), validate: false)
253
- end
254
- else
255
- columns = column_names - ["id", "pulp_id", "created_at", "updated_at", "repository_id"]
256
- queries = []
257
- queries << "delete from #{self.table_name} where repository_id = #{dest_repo.id} and
258
- pulp_id not in (select pulp_id from #{self.table_name} where repository_id = #{source_repo.id})"
259
- queries << "insert into #{self.table_name} (repository_id, pulp_id, #{columns.join(',')})
260
- select #{dest_repo.id} as repository_id, pulp_id, #{columns.join(',')} from #{self.table_name}
261
- where repository_id = #{source_repo.id} and pulp_id not in (select pulp_id
262
- from #{self.table_name} where repository_id = #{dest_repo.id})"
263
- ActiveRecord::Base.transaction do
264
- queries.each do |query|
265
- ActiveRecord::Base.connection.execute(query)
266
- end
267
- end
268
- end
269
- end
270
-
271
181
  def with_pulp_id(unit_pulp_ids)
272
182
  where('pulp_id in (?)', unit_pulp_ids)
273
183
  end
274
184
 
275
- def db_columns_sync
276
- [unit_id_field, backend_identifier_field, :repository_id, :created_at, :updated_at].compact
277
- end
278
-
279
- def db_columns_copy
280
- [unit_id_field, backend_identifier_field, :repository_id].compact
281
- end
282
-
283
- def db_values_copy(source_repo, dest_repo)
284
- db_values = []
285
- existing_unit_ids = self.repository_association_class.where(repository: dest_repo).pluck(unit_id_field)
286
- if existing_unit_ids.empty?
287
- new_units = self.repository_association_class.where(repository: source_repo)
288
- else
289
- new_units = self.repository_association_class.where(repository: source_repo).where.not("#{unit_id_field} in (?) ", existing_unit_ids)
290
- end
291
- unit_backend_identifier_field = backend_identifier_field
292
- unit_identifier_filed = unit_id_field
293
- new_units.each do |unit|
294
- db_values << [unit[unit_identifier_filed], unit[unit_backend_identifier_field], dest_repo.id].compact
295
- end
296
- db_values
297
- end
298
-
299
- def db_values(new_ids, pulp_id_href_map, repository)
300
- new_ids.map { |unit_id| [unit_id.to_i, pulp_id_href_map.dig(unit_id), repository.id.to_i, Time.now.utc.to_s(:db), Time.now.utc.to_s(:db)].compact }
185
+ def unit_id_field
186
+ "#{self.name.demodulize.underscore}_id"
301
187
  end
302
188
  end
303
189
  end
@@ -0,0 +1,11 @@
1
+ module Katello
2
+ module Concerns
3
+ module RemoteExecutionProxySelectorExtensions
4
+ def strategies
5
+ order = [super, [:registered_through]]
6
+ order = order.reverse if Setting[:remote_execution_prefer_registered_through_proxy]
7
+ order.reduce(:+)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -345,7 +345,7 @@ module Katello
345
345
  fail _("Content type %{content_type_string} does not belong to an enabled repo type.") %
346
346
  { content_type_string: content_type_string }
347
347
  end
348
- pulp3_content_support?(content_type_obj) ? content_type_obj.pulp3_service_class : content_type_obj.pulp2_service_class
348
+ content_type_obj.pulp3_service_class
349
349
  end
350
350
 
351
351
  def set_default_download_policy
@@ -30,7 +30,7 @@ module Katello
30
30
  :inverse_of => :composite_content_view, :foreign_key => :composite_content_view_id, autosave: true
31
31
 
32
32
  has_many :component_composites, :class_name => "Katello::ContentViewComponent",
33
- :dependent => :destroy, :inverse_of => :content_view, :foreign_key => :content_view_id
33
+ :dependent => :destroy, :inverse_of => :content_view
34
34
 
35
35
  has_many :content_view_repositories, :class_name => 'Katello::ContentViewRepository',
36
36
  :dependent => :destroy, :inverse_of => :content_view
@@ -41,16 +41,16 @@ module Katello
41
41
 
42
42
  has_many :activation_keys, :class_name => "Katello::ActivationKey", :dependent => :restrict_with_exception
43
43
 
44
- has_many :content_facets, :class_name => "Katello::Host::ContentFacet", :foreign_key => :content_view_id,
44
+ has_many :content_facets, :class_name => "Katello::Host::ContentFacet",
45
45
  :inverse_of => :content_view, :dependent => :restrict_with_exception
46
46
  has_many :hosts, :class_name => "::Host::Managed", :through => :content_facets,
47
47
  :inverse_of => :content_view
48
- has_many :hostgroup_content_facets, :class_name => "Katello::Hostgroup::ContentFacet", :foreign_key => :content_view_id,
48
+ has_many :hostgroup_content_facets, :class_name => "Katello::Hostgroup::ContentFacet",
49
49
  :inverse_of => :content_view, :dependent => :nullify
50
50
  has_many :hostgroups, :class_name => "::Hostgroup", :through => :hostgroup_content_facets,
51
51
  :inverse_of => :content_view
52
52
 
53
- has_many :repository_references, :class_name => 'Katello::Pulp3::RepositoryReference', :foreign_key => :content_view_id,
53
+ has_many :repository_references, :class_name => 'Katello::Pulp3::RepositoryReference',
54
54
  :dependent => :destroy, :inverse_of => :content_view
55
55
 
56
56
  validates_lengths_from_database :except => [:label]
@@ -15,7 +15,7 @@ module Katello
15
15
  :class_name => "Katello::ContentView",
16
16
  :inverse_of => :filters
17
17
 
18
- has_many :repository_content_view_filters, :class_name => "Katello::RepositoryContentViewFilter", :dependent => :delete_all, :inverse_of => :filter, :foreign_key => :content_view_filter_id
18
+ has_many :repository_content_view_filters, :class_name => "Katello::RepositoryContentViewFilter", :dependent => :delete_all, :inverse_of => :filter
19
19
  has_many :repositories, :through => :repository_content_view_filters, :class_name => "Katello::Repository"
20
20
 
21
21
  validates_lengths_from_database
@@ -8,7 +8,7 @@ module Katello
8
8
 
9
9
  belongs_to :triggered_by, :class_name => "Katello::ContentViewVersion", :inverse_of => :triggered_histories
10
10
 
11
- belongs_to :task, :class_name => "ForemanTasks::Task::DynflowTask", :foreign_key => :task_id
11
+ belongs_to :task, :class_name => "ForemanTasks::Task::DynflowTask"
12
12
 
13
13
  IN_PROGRESS = 'in progress'.freeze
14
14
  FAILED = 'failed'.freeze
@@ -24,9 +24,9 @@ module Katello
24
24
  :inverse_of => :triggered_by, :foreign_key => :triggered_by_id
25
25
 
26
26
  has_many :export_histories, :class_name => "::Katello::ContentViewVersionExportHistory", :dependent => :destroy,
27
- :inverse_of => :content_view_version, :foreign_key => :content_view_version_id
27
+ :inverse_of => :content_view_version
28
28
  has_many :import_histories, :class_name => "::Katello::ContentViewVersionImportHistory", :dependent => :destroy,
29
- :inverse_of => :content_view_version, :foreign_key => :content_view_version_id
29
+ :inverse_of => :content_view_version
30
30
  has_many :repositories, :class_name => "::Katello::Repository", :dependent => :destroy
31
31
  has_one :task_status, :class_name => "Katello::TaskStatus", :as => :task_owner, :dependent => :destroy
32
32
 
@@ -239,6 +239,10 @@ module Katello
239
239
  Rpm.in_repositories(archived_repos)
240
240
  end
241
241
 
242
+ def generic_content_units(content_type)
243
+ GenericContentUnit.in_repositories(archived_repos).where(content_type: content_type)
244
+ end
245
+
242
246
  def library_packages
243
247
  Rpm.in_repositories(library_repos)
244
248
  end
@@ -9,7 +9,7 @@ module Katello
9
9
  INCREMENTAL = "incremental".freeze
10
10
  EXPORT_TYPES = [COMPLETE, INCREMENTAL].freeze
11
11
 
12
- belongs_to :content_view_version, :class_name => "::Katello::ContentViewVersion", :inverse_of => :export_histories, foreign_key: 'content_view_version_id'
12
+ belongs_to :content_view_version, :class_name => "::Katello::ContentViewVersion", :inverse_of => :export_histories
13
13
  validates_lengths_from_database
14
14
 
15
15
  validates :content_view_version_id, :presence => true
@@ -2,7 +2,7 @@ module Katello
2
2
  class Deb < Katello::Model
3
3
  include Concerns::PulpDatabaseUnit
4
4
 
5
- CONTENT_TYPE = Pulp::Deb::CONTENT_TYPE
5
+ CONTENT_TYPE = 'deb'.freeze
6
6
 
7
7
  has_many :repository_debs, :class_name => "Katello::RepositoryDeb", :dependent => :destroy, :inverse_of => :deb
8
8
  has_many :repositories, :through => :repository_debs, :class_name => "Katello::Repository"
@@ -16,8 +16,6 @@ module Katello
16
16
  scoped_search :on => :filename, :complete_value => true
17
17
  scoped_search :on => :checksum
18
18
 
19
- before_save lambda { |deb| deb.description = deb.description.truncate(255) unless deb.description.blank? }
20
-
21
19
  def self.default_sort
22
20
  order(:name).order(:version).order(:architecture)
23
21
  end
@@ -153,7 +153,7 @@ module Katello
153
153
  end
154
154
 
155
155
  unless params_to_query_for_delete.empty?
156
- RepositoryDockerMetaTag.where(:docker_meta_tag => DockerMetaTag.where(params_to_query_for_delete.join(" OR "))).delete_all
156
+ RepositoryDockerMetaTag.where(:repository_id => repo.id).where(:docker_meta_tag => DockerMetaTag.where(params_to_query_for_delete.join(" OR "))).delete_all
157
157
  end
158
158
 
159
159
  metatags = []
@@ -47,8 +47,6 @@ module Katello
47
47
  :validator => ->(value) { ['true', 'false'].include?(value.downcase) },
48
48
  :operators => ["="]
49
49
 
50
- before_save lambda { |erratum| erratum.title = erratum.title.truncate(255) unless erratum.title.blank? }
51
-
52
50
  def self.of_type(type)
53
51
  where(:errata_type => type)
54
52
  end
@@ -92,19 +90,6 @@ module Katello
92
90
  where("#{self.table_name}.id in (?) or #{self.table_name}.pulp_id in (?) or #{self.table_name}.errata_id in (?)", id_integers, ids, ids)
93
91
  end
94
92
 
95
- def self.update_repo_association_records(new_ids, erratum_updated_ids, id_href_map_for_repository, repository)
96
- if new_ids.any?
97
- self.repository_association_class.import(db_columns_sync, db_values(new_ids, id_href_map_for_repository, repository), validate: false)
98
- end
99
- if erratum_updated_ids.present?
100
- upserts = db_values(erratum_updated_ids, id_href_map_for_repository, repository).map do |upsert|
101
- { erratum_id: upsert[0], erratum_pulp3_href: upsert[1], repository_id: upsert[2], created_at: upsert[3], updated_at: upsert[4] }
102
- end
103
- # PostgreSQL refuses to insert and update in the same command: https://github.com/rails/rails/issues/35519
104
- self.repository_association_class.upsert_all(upserts, unique_by: [:erratum_id, :repository_id])
105
- end
106
- end
107
-
108
93
  def hosts_applicable(org_id = nil)
109
94
  if org_id.present?
110
95
  self.content_facets_applicable.joins(:host).where("#{::Host.table_name}.organization_id" => org_id)
@@ -132,7 +132,7 @@ module Katello
132
132
  def add_repo(repo_param)
133
133
  repo_param[:unprotected] = repo_param[:unprotected].nil? ? false : repo_param[:unprotected]
134
134
 
135
- if repo_param[:download_policy].blank? && repo_param[:content_type] == Repository::YUM_TYPE
135
+ if repo_param[:download_policy].blank? && Katello::RootRepository::CONTENT_ATTRIBUTE_RESTRICTIONS[:download_policy].include?(repo_param[:content_type])
136
136
  repo_param[:download_policy] = Setting[:default_download_policy]
137
137
  end
138
138
 
@@ -9,10 +9,10 @@ module Katello
9
9
  HOST_TOOLS_TRACER_PACKAGE_NAME = 'katello-host-tools-tracer'.freeze
10
10
  SUBSCRIPTION_MANAGER_PACKAGE_NAME = 'subscription-manager'.freeze
11
11
 
12
- belongs_to :kickstart_repository, :class_name => "::Katello::Repository", :foreign_key => :kickstart_repository_id, :inverse_of => :kickstart_content_facets
12
+ belongs_to :kickstart_repository, :class_name => "::Katello::Repository", :inverse_of => :kickstart_content_facets
13
13
  belongs_to :content_view, :inverse_of => :content_facets, :class_name => "Katello::ContentView"
14
14
  belongs_to :lifecycle_environment, :inverse_of => :content_facets, :class_name => "Katello::KTEnvironment"
15
- belongs_to :content_source, :class_name => "::SmartProxy", :foreign_key => :content_source_id, :inverse_of => :content_facets
15
+ belongs_to :content_source, :class_name => "::SmartProxy", :inverse_of => :content_facets
16
16
 
17
17
  has_many :content_facet_errata, :class_name => "Katello::ContentFacetErratum", :dependent => :delete_all, :inverse_of => :content_facet
18
18
  has_many :applicable_errata, :through => :content_facet_errata, :class_name => "Katello::Erratum", :source => :erratum
@@ -110,14 +110,6 @@ module Katello
110
110
  self.update_errata_status
111
111
  end
112
112
 
113
- def import_applicability(partial = false)
114
- import_module_stream_applicability(partial)
115
- import_errata_applicability(partial)
116
- import_deb_applicability(partial)
117
- import_rpm_applicability(partial)
118
- update_applicability_counts
119
- end
120
-
121
113
  def update_applicability_counts
122
114
  self.assign_attributes(
123
115
  :installable_security_errata_count => self.installable_errata.security.count,
@@ -133,23 +125,6 @@ module Katello
133
125
  self.save!(:validate => false)
134
126
  end
135
127
 
136
- def import_deb_applicability(partial)
137
- ApplicableContentHelper.new(Deb, self).import(partial)
138
- end
139
-
140
- def import_rpm_applicability(partial)
141
- ApplicableContentHelper.new(Rpm, self).import(partial)
142
- end
143
-
144
- def import_errata_applicability(partial)
145
- ApplicableContentHelper.new(Erratum, self).import(partial)
146
- self.update_errata_status
147
- end
148
-
149
- def import_module_stream_applicability(partial)
150
- ApplicableContentHelper.new(ModuleStream, self).import(partial)
151
- end
152
-
153
128
  def self.in_content_view_version_environments(version_environments)
154
129
  #takes a structure of [{:content_view_version => ContentViewVersion, :environments => [KTEnvironment]}]
155
130
  queries = version_environments.map do |version_environment|
@@ -16,6 +16,15 @@ module Katello
16
16
  if host.content_facet.present?
17
17
  info['parameters']['kickstart_repository'] = host.content_facet.kickstart_repository.try(:label)
18
18
  end
19
+
20
+ if (rhsm_url = host.content_source&.rhsm_url)
21
+ info['parameters']['rhsm_url'] = rhsm_url.to_s
22
+ end
23
+
24
+ if (content_url = host.content_source&.pulp_content_url)
25
+ info['parameters']['content_url'] = content_url.to_s
26
+ end
27
+
19
28
  info
20
29
  end
21
30
 
@@ -7,7 +7,7 @@ module Katello
7
7
  include DirtyAssociations
8
8
 
9
9
  belongs_to :user, :inverse_of => :subscription_facets, :class_name => "::User"
10
- belongs_to :hypervisor_host, :class_name => "::Host::Managed", :foreign_key => "hypervisor_host_id"
10
+ belongs_to :hypervisor_host, :class_name => "::Host::Managed"
11
11
 
12
12
  has_many :subscription_facet_activation_keys, :class_name => "Katello::SubscriptionFacetActivationKey", :dependent => :destroy, :inverse_of => :subscription_facet
13
13
  has_many :activation_keys, :through => :subscription_facet_activation_keys, :class_name => "Katello::ActivationKey"
@@ -217,7 +217,7 @@ module Katello
217
217
  if ignore_os?(host.operatingsystem, rhsm_facts)
218
218
  rhsm_facts[:ignore_os] = true
219
219
  end
220
- host.import_facts(rhsm_facts)
220
+ ::HostFactImporter.new(host).import_facts(rhsm_facts)
221
221
  end
222
222
 
223
223
  def self.ignore_os?(host_os, rhsm_facts)
@@ -5,10 +5,10 @@ module Katello
5
5
  self.table_name = 'katello_hostgroup_content_facets'
6
6
  include Facets::HostgroupFacet
7
7
 
8
- belongs_to :kickstart_repository, :class_name => "::Katello::Repository", :foreign_key => :kickstart_repository_id, :inverse_of => :kickstart_hostgroup_content_facets
8
+ belongs_to :kickstart_repository, :class_name => "::Katello::Repository", :inverse_of => :kickstart_hostgroup_content_facets
9
9
  belongs_to :content_view, :inverse_of => :hostgroup_content_facets, :class_name => "Katello::ContentView"
10
10
  belongs_to :lifecycle_environment, :inverse_of => :hostgroup_content_facets, :class_name => "Katello::KTEnvironment"
11
- belongs_to :content_source, :class_name => "::SmartProxy", :foreign_key => :content_source_id, :inverse_of => :hostgroup_content_facets
11
+ belongs_to :content_source, :class_name => "::SmartProxy", :inverse_of => :hostgroup_content_facets
12
12
 
13
13
  validates_with Katello::Validators::ContentViewEnvironmentValidator
14
14
  validates_with Katello::Validators::HostgroupKickstartRepositoryValidator
@@ -15,7 +15,7 @@ module Katello
15
15
  belongs_to :provider, :inverse_of => :products, :class_name => 'Katello::Provider'
16
16
  belongs_to :sync_plan, :inverse_of => :products, :class_name => 'Katello::SyncPlan'
17
17
  belongs_to :gpg_key, :inverse_of => :products, :class_name => "Katello::ContentCredential"
18
- has_many :product_contents, :foreign_key => 'product_id', :class_name => "Katello::ProductContent", :dependent => :destroy
18
+ has_many :product_contents, :class_name => "Katello::ProductContent", :dependent => :destroy
19
19
  has_many :contents, :through => :product_contents
20
20
  has_many :displayable_product_contents, -> { displayable }, :foreign_key => 'product_id', :class_name => "Katello::ProductContent", :dependent => :destroy
21
21
  belongs_to :ssl_ca_cert, :class_name => "Katello::ContentCredential", :inverse_of => :ssl_ca_products
@@ -1,7 +1,7 @@
1
1
  module Katello
2
2
  class ProductContent < Katello::Model
3
- belongs_to :product, :class_name => 'Katello::Product', :foreign_key => 'product_id', :inverse_of => :product_contents
4
- belongs_to :content, :class_name => 'Katello::Content', :foreign_key => 'content_id', :inverse_of => :product_contents
3
+ belongs_to :product, :class_name => 'Katello::Product', :inverse_of => :product_contents
4
+ belongs_to :content, :class_name => 'Katello::Content', :inverse_of => :product_contents
5
5
 
6
6
  default_scope { includes(:content) }
7
7
 
@@ -37,7 +37,7 @@ module Katello
37
37
 
38
38
  belongs_to :root, :inverse_of => :repositories, :class_name => "Katello::RootRepository"
39
39
  belongs_to :environment, :inverse_of => :repositories, :class_name => "Katello::KTEnvironment"
40
- belongs_to :library_instance, :class_name => "Katello::Repository", :inverse_of => :library_instances_inverse, :foreign_key => :library_instance_id
40
+ belongs_to :library_instance, :class_name => "Katello::Repository", :inverse_of => :library_instances_inverse
41
41
  has_many :library_instances_inverse,
42
42
  :class_name => 'Katello::Repository',
43
43
  :dependent => :restrict_with_exception,
@@ -105,7 +105,7 @@ module Katello
105
105
  has_many :filters, :through => :repository_content_view_filters
106
106
 
107
107
  belongs_to :content_view_version, :inverse_of => :repositories, :class_name => "Katello::ContentViewVersion"
108
- has_many :distribution_references, :class_name => 'Katello::Pulp3::DistributionReference', :foreign_key => :repository_id,
108
+ has_many :distribution_references, :class_name => 'Katello::Pulp3::DistributionReference',
109
109
  :dependent => :destroy, :inverse_of => :repository
110
110
 
111
111
  has_many :smart_proxy_sync_histories, :class_name => "::Katello::SmartProxySyncHistory", :inverse_of => :repository, :dependent => :delete_all
@@ -177,8 +177,8 @@ module Katello
177
177
  :download_policy, :verify_ssl_on_sync, :"verify_ssl_on_sync?", :upstream_username, :upstream_password,
178
178
  :upstream_authentication_token, :deb_releases,
179
179
  :deb_components, :deb_architectures, :ssl_ca_cert_id, :ssl_ca_cert, :ssl_client_cert, :ssl_client_cert_id,
180
- :ssl_client_key_id, :os_versions, :ssl_client_key, :ignorable_content, :description, :docker_tags_whitelist,
181
- :ansible_collection_requirements, :ansible_collection_auth_url, :ansible_collection_auth_token,
180
+ :ssl_client_key_id, :os_versions, :ssl_client_key, :ignorable_content, :description, :include_tags, :exclude_tags,
181
+ :docker_tags_whitelist, :ansible_collection_requirements, :ansible_collection_auth_url, :ansible_collection_auth_token,
182
182
  :http_proxy_policy, :http_proxy_id, :to => :root
183
183
 
184
184
  delegate :content_id, to: :root, allow_nil: true
@@ -285,6 +285,11 @@ module Katello
285
285
  ::Katello::Resources::CDN::CdnResource.ca_file if ::Katello::Resources::CDN::CdnResource.redhat_cdn?(url)
286
286
  end
287
287
 
288
+ def soft_copy_of_library?
289
+ return false if self.version_href.nil?
290
+ self.version_href.starts_with?(self.library_instance.backend_service(SmartProxy.pulp_primary).repository_reference.repository_href)
291
+ end
292
+
288
293
  def archive?
289
294
  self.environment.nil?
290
295
  end
@@ -910,11 +915,7 @@ module Katello
910
915
  else
911
916
  repository_type.content_types_to_index.each do |type|
912
917
  Katello::Logging.time("CONTENT_INDEX", data: {type: type.model_class}) do
913
- if self.generic?
914
- type.model_class.import_for_repository(self, generic_content_type: type.content_type, full_index: full_index)
915
- else
916
- type.model_class.import_for_repository(self, full_index: full_index)
917
- end
918
+ Katello::ContentUnitIndexer.new(content_type: type, repository: self, optimized: !full_index).import_all
918
919
  end
919
920
  end
920
921
  repository_type.index_additional_data_proc&.call(self)