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
@@ -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)
@@ -1,6 +1,6 @@
1
1
  module Katello
2
2
  module Glue::Provider
3
- DISTRIBUTOR_VERSION = 'sat-6.7'.freeze
3
+ DISTRIBUTOR_VERSION = 'sat-6.10'.freeze
4
4
 
5
5
  def self.included(base)
6
6
  base.send :include, InstanceMethods
@@ -132,10 +132,12 @@ 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
 
139
+ repo_param[:mirroring_policy] = Katello::RootRepository::MIRRORING_POLICY_ADDITIVE if repo_param[:mirroring_policy].blank?
140
+
139
141
  RootRepository.new(repo_param.merge(:product_id => self.id))
140
142
  end
141
143
  end
@@ -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)
@@ -37,6 +37,16 @@ module Katello
37
37
  :stream => available_module_stream.stream}).exists?
38
38
  end
39
39
 
40
+ def install_status
41
+ return 'Not installed' if installed_profiles.blank?
42
+ case status
43
+ when 'disabled'
44
+ 'Installed'
45
+ when 'enabled'
46
+ upgradable? ? 'Upgradable' : 'Up-to-date'
47
+ end
48
+ end
49
+
40
50
  def self.upgradable(host)
41
51
  upgradable_module_name_streams = ModuleStream.installable_for_hosts([host]).select(:name, :stream)
42
52
 
@@ -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,6 +15,7 @@ module Katello
15
15
  has_many :host_installed_packages, :class_name => "Katello::HostInstalledPackage", :dependent => :destroy, :inverse_of => :installed_package
16
16
  has_many :hosts, :through => :host_installed_packages, :class_name => "::Host"
17
17
 
18
+ scoped_search :on => :id, :complete_value => true
18
19
  scoped_search :on => :name, :complete_value => true
19
20
  scoped_search :on => :nvrea
20
21
  scoped_search :on => :nvra
@@ -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
@@ -173,12 +173,12 @@ module Katello
173
173
  delegate :name, :label, :docker_upstream_name, :url, :download_concurrency, :to => :root
174
174
 
175
175
  delegate :name, :created_at, :updated_at, :major, :minor, :gpg_key_id, :gpg_key, :arch, :label, :url, :unprotected,
176
- :content_type, :product_id, :checksum_type, :docker_upstream_name, :mirror_on_sync, :"mirror_on_sync?",
176
+ :content_type, :product_id, :checksum_type, :docker_upstream_name, :mirroring_policy,
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,14 +285,19 @@ 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 using_mirrored_metadata?
289
- self.yum? && self.library_instance? && self.mirror_on_sync
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)
290
291
  end
291
292
 
292
293
  def archive?
293
294
  self.environment.nil?
294
295
  end
295
296
 
297
+ def using_mirrored_metadata?
298
+ self.yum? && self.library_instance? && self.root.mirroring_policy == Katello::RootRepository::MIRRORING_POLICY_COMPLETE
299
+ end
300
+
296
301
  def in_default_view?
297
302
  content_view_version&.default_content_view?
298
303
  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)
@@ -4,6 +4,8 @@ module Katello
4
4
  audited :except => [:content_id]
5
5
  serialize :ignorable_content
6
6
  serialize :docker_tags_whitelist
7
+ serialize :include_tags
8
+ serialize :exclude_tags
7
9
  serialize :os_versions
8
10
 
9
11
  include Ext::LabelFromName
@@ -21,7 +23,7 @@ module Katello
21
23
  SUBSCRIBABLE_TYPES = [Repository::YUM_TYPE, Repository::OSTREE_TYPE, Repository::DEB_TYPE].freeze
22
24
 
23
25
  CONTENT_ATTRIBUTE_RESTRICTIONS = {
24
- :download_policy => [Repository::YUM_TYPE, Repository::DEB_TYPE]
26
+ :download_policy => [Repository::YUM_TYPE, Repository::DEB_TYPE, Repository::DOCKER_TYPE]
25
27
  }.freeze
26
28
 
27
29
  NO_DEFAULT_HTTP_PROXY = 'none'.freeze
@@ -38,6 +40,11 @@ module Katello
38
40
  RHEL9 = 'rhel-9'.freeze
39
41
  ALLOWED_OS_VERSIONS = [RHEL6, RHEL7, RHEL8, RHEL9].freeze
40
42
 
43
+ MIRRORING_POLICY_ADDITIVE = 'additive'.freeze
44
+ MIRRORING_POLICY_CONTENT = 'mirror_content_only'.freeze
45
+ MIRRORING_POLICY_COMPLETE = 'mirror_complete'.freeze
46
+ MIRRORING_POLICIES = [MIRRORING_POLICY_ADDITIVE, MIRRORING_POLICY_COMPLETE, MIRRORING_POLICY_CONTENT].freeze
47
+
41
48
  belongs_to :product, :inverse_of => :root_repositories, :class_name => "Katello::Product"
42
49
  has_one :provider, :through => :product
43
50
 
@@ -49,13 +56,14 @@ module Katello
49
56
  has_many :repositories, :class_name => "Katello::Repository", :foreign_key => :root_id,
50
57
  :inverse_of => :root, :dependent => :destroy
51
58
 
52
- has_many :repository_references, :class_name => 'Katello::Pulp3::RepositoryReference', :foreign_key => :root_repository_id,
59
+ has_many :repository_references, :class_name => 'Katello::Pulp3::RepositoryReference',
53
60
  :dependent => :destroy, :inverse_of => :root_repository
54
61
 
55
62
  validates_lengths_from_database :except => [:label]
56
63
  validates_with Validators::KatelloLabelFormatValidator, :attributes => :label
57
64
  validates_with Validators::KatelloNameFormatValidator, :attributes => :name
58
- validates_with Validators::KatelloUrlFormatValidator, :attributes => :url, :nil_allowed => proc { |repo| repo.custom? },
65
+ validates_with Validators::KatelloUrlFormatValidator, :attributes => :url,
66
+ :nil_allowed => proc { |repo| repo.custom? || repo.organization.cdn_configuration.airgapped? },
59
67
  :field_name => :url
60
68
  validates_with Validators::RootRepositoryUniqueAttributeValidator, :attributes => :name
61
69
  validates_with Validators::RootRepositoryUniqueAttributeValidator, :attributes => :label
@@ -67,13 +75,16 @@ module Katello
67
75
  validate :ensure_valid_collection_attributes, :if => :ansible_collection?
68
76
  validate :ensure_valid_auth_url_token, :if => :ansible_collection?
69
77
  validate :ensure_valid_ignorable_content
70
- validate :ensure_valid_docker_tags_whitelist
78
+ validate :ensure_valid_include_tags
79
+ validate :ensure_valid_exclude_tags
71
80
  validate :ensure_valid_os_versions
72
81
  validate :ensure_content_attribute_restrictions
73
82
  validate :ensure_valid_upstream_authorization
74
83
  validate :ensure_valid_authentication_token, :if => :yum?
75
84
  validate :ensure_valid_deb_constraints, :if => :deb?
76
85
  validate :ensure_no_checksum_on_demand
86
+ validate :ensure_valid_mirroring_policy
87
+ validate :ensure_valid_retain_package_versions_count
77
88
  validates :checksum_type, :inclusion => {:in => CHECKSUM_TYPES}, :allow_blank => true
78
89
  validates :product_id, :presence => true
79
90
  validates :content_type, :inclusion => {
@@ -107,6 +118,7 @@ module Katello
107
118
  }
108
119
  scope :orphaned, -> { where.not(id: Katello::Repository.pluck(:root_id).uniq) }
109
120
  scope :redhat, -> { joins(:provider).merge(Katello::Provider.redhat) }
121
+ scope :custom, -> { where.not(:id => self.redhat) }
110
122
  delegate :redhat?, :provider, :organization, to: :product
111
123
  delegate :cdn_configuration, to: :organization
112
124
 
@@ -145,6 +157,21 @@ module Katello
145
157
  end
146
158
  end
147
159
 
160
+ def valid_mirroring_policies
161
+ if self.yum?
162
+ MIRRORING_POLICIES
163
+ else
164
+ [MIRRORING_POLICY_ADDITIVE, MIRRORING_POLICY_CONTENT]
165
+ end
166
+ end
167
+
168
+ def ensure_valid_mirroring_policy
169
+ unless valid_mirroring_policies.include?(self.mirroring_policy)
170
+ errors.add(:mirroring_policy, _("Invalid mirroring policy for repository type %{type}, only %{policies} are valid.") %
171
+ {:type => self.content_type, :policies => valid_mirroring_policies.join(', ')})
172
+ end
173
+ end
174
+
148
175
  def ensure_valid_docker_attributes
149
176
  if (!url.blank? && docker_upstream_name.blank?)
150
177
  errors.add(:docker_upstream_name, N_("cannot be blank when Repository URL is provided."))
@@ -201,10 +228,17 @@ module Katello
201
228
  end
202
229
  end
203
230
 
204
- def ensure_valid_docker_tags_whitelist
205
- return if docker_tags_whitelist.blank?
206
- unless docker_tags_whitelist.is_a?(Array)
207
- errors.add(:docker_tags_whitelist, N_("Invalid value specified for Container Image repositories."))
231
+ def ensure_valid_include_tags
232
+ return if include_tags.blank?
233
+ unless include_tags.is_a?(Array)
234
+ errors.add(:include_tags, N_("Invalid value specified for Container Image repositories."))
235
+ end
236
+ end
237
+
238
+ def ensure_valid_exclude_tags
239
+ return if exclude_tags.blank?
240
+ unless exclude_tags.is_a?(Array)
241
+ errors.add(:exclude_tags, N_("Invalid value specified for Container Image repositories."))
208
242
  end
209
243
  end
210
244
 
@@ -274,6 +308,16 @@ module Katello
274
308
  end
275
309
  end
276
310
 
311
+ def ensure_valid_retain_package_versions_count
312
+ return unless self.retain_package_versions_count
313
+ unless yum?
314
+ errors.add(:retain_package_versions_count, N_("is only allowed for Yum repositories."))
315
+ end
316
+ if self.retain_package_versions_count.to_i < 0
317
+ errors.add(:retain_package_versions_count, N_("must not be a negative value."))
318
+ end
319
+ end
320
+
277
321
  def custom_content_path
278
322
  parts = []
279
323
  # We generate repo path only for custom product content. We add this
@@ -293,6 +337,11 @@ module Katello
293
337
  Katello::Content.find_by(:cp_content_id => self.content_id, :organization_id => self.product.organization_id)
294
338
  end
295
339
 
340
+ # For API support during deprecation period.
341
+ def docker_tags_whitelist
342
+ include_tags
343
+ end
344
+
296
345
  def docker?
297
346
  self.content_type == Repository::DOCKER_TYPE
298
347
  end
@@ -325,15 +374,19 @@ module Katello
325
374
  (%w(unprotected checksum_type container_repsoitory_name) & previous_changes.keys).any?
326
375
  end
327
376
 
377
+ def using_mirrored_content?
378
+ self.mirroring_policy != Katello::RootRepository::MIRRORING_POLICY_ADDITIVE
379
+ end
380
+
328
381
  def on_demand?
329
382
  self.download_policy == DOWNLOAD_ON_DEMAND
330
383
  end
331
384
 
332
385
  def pulp_update_needed?
333
- changeable_attributes = %w(url unprotected checksum_type docker_upstream_name download_policy mirror_on_sync verify_ssl_on_sync
334
- upstream_username upstream_password ignorable_content
386
+ changeable_attributes = %w(url unprotected checksum_type docker_upstream_name download_policy mirroring_policy verify_ssl_on_sync
387
+ upstream_username upstream_password ignorable_content retain_package_versions_count
335
388
  ssl_ca_cert_id ssl_client_cert_id ssl_client_key_id http_proxy_policy http_proxy_id download_concurrency)
336
- changeable_attributes += %w(name container_repository_name docker_tags_whitelist) if docker?
389
+ changeable_attributes += %w(name container_repository_name include_tags exclude_tags) if docker?
337
390
  changeable_attributes += %w(deb_releases deb_components deb_architectures gpg_key_id) if deb?
338
391
  changeable_attributes += %w(ansible_collection_requirements ansible_collection_auth_url ansible_collection_auth_token) if ansible_collection?
339
392
  changeable_attributes.any? { |key| previous_changes.key?(key) }
@@ -370,11 +423,7 @@ module Katello
370
423
 
371
424
  def format_arches
372
425
  if content_type == ::Katello::Repository::DEB_TYPE
373
- # FIXME: This should be set to self.deb_architectures but it needs to have the
374
- # subscription-manager PR https://github.com/candlepin/subscription-manager/pull/2213
375
- # merged. Otherwise subscription-manager returns _NO_ debian repository as described in
376
- # https://community.theforeman.org/t/katello-3-16-1-1-el7-subscription-manager-doesnt-create-rhsm-repos-for-ubuntu/20928/38
377
- nil
426
+ self.deb_architectures
378
427
  else
379
428
  self.arch == "noarch" ? nil : self.arch
380
429
  end
@@ -8,6 +8,7 @@ module Katello
8
8
  has_many :content_facets, :through => :content_facet_applicable_rpms, :class_name => "Katello::Host::ContentFacet"
9
9
  has_many :module_stream_rpms, class_name: "Katello::ModuleStreamRpm", inverse_of: :rpm, dependent: :destroy
10
10
  has_many :module_streams, :through => :module_stream_rpms
11
+ scoped_search :on => :id, :complete_value => true
11
12
  scoped_search :on => :name, :complete_value => true
12
13
  scoped_search :on => :version, :complete_value => true, :ext_method => :scoped_search_version
13
14
  scoped_search :on => :release, :complete_value => true, :ext_method => :scoped_search_release
@@ -19,8 +20,6 @@ module Katello
19
20
  scoped_search :on => :modular, :complete_value => true, :only_explicit => true
20
21
  scoped_search :on => :checksum
21
22
 
22
- before_save lambda { |rpm| rpm.summary = rpm.summary.truncate(255) unless rpm.summary.blank? }
23
-
24
23
  scope :modular, -> { where(modular: true) }
25
24
  scope :non_modular, -> { where(modular: false) }
26
25
 
@@ -215,6 +214,13 @@ module Katello
215
214
  where("#{Katello::Host::ContentFacet.table_name}.host_id" => hosts).distinct
216
215
  end
217
216
 
217
+ # Return RPMs that are not installed on a host, but could be installed
218
+ # the word 'installable' has a different meaning here than elsewhere
219
+ def self.yum_installable_for_host(host)
220
+ repos = host.content_facet.bound_repositories.pluck(:id)
221
+ Katello::Rpm.in_repositories(repos).where.not(name: host.installed_packages.pluck(:name)).order(:name)
222
+ end
223
+
218
224
  def self.latest(relation)
219
225
  # There are several different ways to implement this:
220
226
 
@@ -75,8 +75,8 @@ class Setting::Content < Setting
75
75
  20, N_('Accept action timeout')),
76
76
  self.set('content_action_finish_timeout', N_("Time in seconds to wait for a Host to finish a remote action"),
77
77
  3600, N_('Finish action timeout')),
78
- self.set('content_disconnected', N_("A server operating in disconnected mode does not communicate with the Red Hat CDN."),
79
- false, N_('Disconnected mode')),
78
+ self.set('subscription_connection_enabled', N_("Can communicate with the Red Hat Portal for subscriptions."),
79
+ true, N_('Subscription connection enabled')),
80
80
  self.set('errata_status_installable', N_("Calculate errata host status based only on errata in a Host's Content View and Lifecycle Environment"),
81
81
  false, N_('Installable errata from Content View')),
82
82
  self.set('restrict_composite_view', N_("If this is enabled, a composite content view may not be published or "\
@@ -88,6 +88,7 @@ class Setting::Content < Setting
88
88
  100, N_('Batch size to sync repositories in.')),
89
89
  self.set('foreman_proxy_content_auto_sync', N_("Whether or not to auto sync the Smart Proxies after a Content View promotion."),
90
90
  true, N_('Sync Smart Proxies after Content View promotion')),
91
+ self.set('download_rate_limit', N_("Maximum download rate when syncing a repository (requests per second). Use 0 for no limit."), 0, N_("Download rate limit")),
91
92
  self.set('default_download_policy', N_("Default download policy for custom repositories (either 'immediate' or 'on_demand')"), "immediate",
92
93
  N_('Default Custom Repository download policy'), nil, :collection => download_policies),
93
94
  self.set('default_redhat_download_policy', N_("Default download policy for enabled Red Hat repositories (either 'immediate' or 'on_demand')"), "on_demand",
@@ -104,8 +105,15 @@ class Setting::Content < Setting
104
105
  "/etc/pki/katello/private/pulp-client.key", N_('Pulp client key')),
105
106
  self.set('pulp_client_cert', N_("Path for ssl cert used for pulp server auth"),
106
107
  "/etc/pki/katello/certs/pulp-client.crt", N_('Pulp client cert')),
107
- self.set('sync_connect_timeout', N_("Total timeout in seconds for connections when syncing"),
108
- 300, N_('Sync Connection Timeout')),
108
+ self.set('sync_total_timeout', N_("The maximum number of second that Pulp can take to do a single sync operation, e.g., download a single metadata file."),
109
+ 3600, N_('Sync Total Timeout')),
110
+ self.set('sync_connect_timeout_v2',
111
+ N_("The maximum number of seconds for Pulp to establish a new connection or for waiting for a free connection from a pool if pool connection limits are exceeded."),
112
+ 60, N_('Sync Connect Timeout')),
113
+ self.set('sync_sock_connect_timeout', N_("The maximum number of seconds for Pulp to connect to a peer for a new connection not given from a pool."),
114
+ 60, N_('Sync Sock Connect Timeout')),
115
+ self.set('sync_sock_read_timeout', N_("The maximum number of seconds that Pulp can take to download a file, not counting connection time."),
116
+ 3600, N_('Sync Sock Read Timeout')),
109
117
  self.set('remote_execution_by_default', N_("If this is enabled, remote execution is used instead of katello-agent for remote actions"),
110
118
  false, N_('Use remote execution by default')),
111
119
  self.set('unregister_delete_host', N_("When unregistering a host via subscription-manager, also delete the host record. Managed resources linked to host " \
@@ -148,7 +156,9 @@ class Setting::Content < Setting
148
156
  N_('Pulp bulk load size')),
149
157
  self.set('upload_profiles_without_dynflow', N_('Allow Katello to update host installed packages, enabled repos, and module inventory directly instead of wrapped in Dynflow tasks (try turning off if Puma processes are using too much memory)'), true,
150
158
  N_('Upload profiles without Dynflow')),
151
- self.set('orphan_protection_time', N_('Time in minutes to consider orphan content as orphaned.'), 1440, N_('Orphaned Content Protection Time'))
159
+ self.set('orphan_protection_time', N_('Time in minutes to consider orphan content as orphaned.'), 1440, N_('Orphaned Content Protection Time')),
160
+ self.set('remote_execution_prefer_registered_through_proxy', N_('Prefer using a proxy to which a host is registered when using remote execution'), false,
161
+ N_('Prefer registered through proxy for remote execution'))
152
162
  ]
153
163
  end
154
164
 
@@ -10,7 +10,7 @@ module Cert
10
10
  end
11
11
 
12
12
  def uuid
13
- drop_cn_prefix_from_subject(@cert.subject.to_s)
13
+ @uuid ||= @cert.subject.to_a.detect { |name, _, _| name == 'CN' }&.second
14
14
  end
15
15
 
16
16
  private
@@ -26,10 +26,6 @@ module Cert
26
26
  end
27
27
  end
28
28
 
29
- def drop_cn_prefix_from_subject(subject_string)
30
- subject_string.sub(/\/CN=/i, '')
31
- end
32
-
33
29
  def strip_cert(cert)
34
30
  cert = cert.to_s.gsub("-----BEGIN CERTIFICATE-----", "").gsub("-----END CERTIFICATE-----", "")
35
31
  cert.delete!(' ')
@@ -20,7 +20,7 @@ module Katello
20
20
  not_added_cvs = views.reject { |component_content_view| Katello::ContentViewComponent.where(composite_content_view_id: composite_cv.id, content_view_id: component_content_view.id).first }
21
21
  not_added_cvs.map { |component_content_view| ComponentViewPresenter.new(composite_cv, nil, Katello::ContentViewComponent.where(composite_content_view_id: composite_cv.id, content_view_id: component_content_view.id, latest: true).new) }
22
22
  else
23
- views.map { |component_content_view| ComponentViewPresenter.new(cv, component_content_view) }
23
+ views.map { |component_content_view| ComponentViewPresenter.new(composite_cv, component_content_view) }
24
24
  end
25
25
  end
26
26
  end