katello 4.18.1 → 4.19.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (336) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/locale/bn/katello.js +56 -107
  3. data/app/assets/javascripts/katello/locale/bn_IN/katello.js +56 -107
  4. data/app/assets/javascripts/katello/locale/ca/katello.js +56 -107
  5. data/app/assets/javascripts/katello/locale/cs/katello.js +56 -107
  6. data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +57 -108
  7. data/app/assets/javascripts/katello/locale/de/katello.js +58 -109
  8. data/app/assets/javascripts/katello/locale/de_AT/katello.js +56 -107
  9. data/app/assets/javascripts/katello/locale/de_DE/katello.js +56 -107
  10. data/app/assets/javascripts/katello/locale/el/katello.js +57 -108
  11. data/app/assets/javascripts/katello/locale/en/katello.js +56 -107
  12. data/app/assets/javascripts/katello/locale/en_GB/katello.js +56 -107
  13. data/app/assets/javascripts/katello/locale/en_US/katello.js +56 -107
  14. data/app/assets/javascripts/katello/locale/es/katello.js +58 -109
  15. data/app/assets/javascripts/katello/locale/et_EE/katello.js +56 -107
  16. data/app/assets/javascripts/katello/locale/fr/katello.js +59 -110
  17. data/app/assets/javascripts/katello/locale/gl/katello.js +56 -107
  18. data/app/assets/javascripts/katello/locale/gu/katello.js +56 -107
  19. data/app/assets/javascripts/katello/locale/he_IL/katello.js +56 -107
  20. data/app/assets/javascripts/katello/locale/hi/katello.js +56 -107
  21. data/app/assets/javascripts/katello/locale/id/katello.js +56 -107
  22. data/app/assets/javascripts/katello/locale/it/katello.js +56 -107
  23. data/app/assets/javascripts/katello/locale/ja/katello.js +59 -110
  24. data/app/assets/javascripts/katello/locale/ka/katello.js +58 -109
  25. data/app/assets/javascripts/katello/locale/kn/katello.js +56 -107
  26. data/app/assets/javascripts/katello/locale/ko/katello.js +59 -110
  27. data/app/assets/javascripts/katello/locale/ml_IN/katello.js +56 -107
  28. data/app/assets/javascripts/katello/locale/mr/katello.js +56 -107
  29. data/app/assets/javascripts/katello/locale/nl_NL/katello.js +56 -107
  30. data/app/assets/javascripts/katello/locale/or/katello.js +56 -107
  31. data/app/assets/javascripts/katello/locale/pa/katello.js +56 -107
  32. data/app/assets/javascripts/katello/locale/pl/katello.js +56 -107
  33. data/app/assets/javascripts/katello/locale/pl_PL/katello.js +56 -107
  34. data/app/assets/javascripts/katello/locale/pt/katello.js +56 -107
  35. data/app/assets/javascripts/katello/locale/pt_BR/katello.js +58 -109
  36. data/app/assets/javascripts/katello/locale/ro/katello.js +56 -107
  37. data/app/assets/javascripts/katello/locale/ro_RO/katello.js +56 -107
  38. data/app/assets/javascripts/katello/locale/ru/katello.js +57 -108
  39. data/app/assets/javascripts/katello/locale/sl/katello.js +56 -107
  40. data/app/assets/javascripts/katello/locale/sv_SE/katello.js +56 -107
  41. data/app/assets/javascripts/katello/locale/ta/katello.js +56 -107
  42. data/app/assets/javascripts/katello/locale/ta_IN/katello.js +56 -107
  43. data/app/assets/javascripts/katello/locale/te/katello.js +56 -107
  44. data/app/assets/javascripts/katello/locale/tr/katello.js +56 -107
  45. data/app/assets/javascripts/katello/locale/vi/katello.js +56 -107
  46. data/app/assets/javascripts/katello/locale/vi_VN/katello.js +56 -107
  47. data/app/assets/javascripts/katello/locale/zh/katello.js +56 -107
  48. data/app/assets/javascripts/katello/locale/zh_CN/katello.js +59 -110
  49. data/app/assets/javascripts/katello/locale/zh_TW/katello.js +57 -108
  50. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +41 -12
  51. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +1 -1
  52. data/app/controllers/katello/api/v2/activation_keys_controller.rb +3 -65
  53. data/app/controllers/katello/api/v2/content_view_filter_rules_controller.rb +1 -1
  54. data/app/controllers/katello/api/v2/content_views_controller.rb +18 -3
  55. data/app/controllers/katello/api/v2/debs_controller.rb +21 -11
  56. data/app/controllers/katello/api/v2/docker_tags_controller.rb +7 -0
  57. data/app/controllers/katello/api/v2/flatpak_remote_repositories_controller.rb +21 -19
  58. data/app/controllers/katello/api/v2/host_debs_controller.rb +16 -1
  59. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +3 -60
  60. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +10 -53
  61. data/app/controllers/katello/api/v2/repositories_controller.rb +0 -1
  62. data/app/controllers/katello/concerns/organizations_controller_extensions.rb +3 -0
  63. data/app/lib/actions/candlepin/activation_key/create.rb +0 -2
  64. data/app/lib/actions/candlepin/activation_key/update.rb +0 -2
  65. data/app/lib/actions/candlepin/product/content_create.rb +3 -5
  66. data/app/lib/actions/candlepin/product/content_update.rb +2 -3
  67. data/app/lib/actions/helpers/rolling_cv_repos.rb +1 -1
  68. data/app/lib/actions/katello/activation_key/create.rb +0 -1
  69. data/app/lib/actions/katello/activation_key/update.rb +0 -2
  70. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +1 -6
  71. data/app/lib/actions/katello/content_credential/update.rb +1 -1
  72. data/app/lib/actions/katello/content_view/add_rolling_repo_clone.rb +18 -24
  73. data/app/lib/actions/katello/content_view/create.rb +9 -4
  74. data/app/lib/actions/katello/content_view/refresh_rolling_repo.rb +6 -1
  75. data/app/lib/actions/katello/content_view/remove_rolling_repo_clone.rb +16 -11
  76. data/app/lib/actions/katello/content_view/update.rb +34 -7
  77. data/app/lib/actions/katello/product/content_create.rb +2 -2
  78. data/app/lib/actions/katello/product/content_destroy.rb +1 -1
  79. data/app/lib/actions/katello/repository/check_matching_content.rb +1 -1
  80. data/app/lib/actions/katello/repository/clone_contents.rb +1 -1
  81. data/app/lib/actions/katello/repository/create.rb +1 -1
  82. data/app/lib/actions/katello/repository/destroy.rb +4 -4
  83. data/app/lib/actions/katello/repository/finish_upload.rb +1 -1
  84. data/app/lib/actions/katello/repository/sync.rb +1 -1
  85. data/app/lib/actions/pulp3/orchestration/repository/copy_all_units.rb +2 -2
  86. data/app/lib/actions/pulp3/orchestration/repository/generate_metadata.rb +1 -1
  87. data/app/lib/actions/pulp3/orchestration/repository/multi_copy_all_units.rb +1 -1
  88. data/app/lib/actions/pulp3/repository/save_publication.rb +3 -1
  89. data/app/lib/actions/pulp3/repository/save_version.rb +45 -24
  90. data/app/lib/actions/pulp3/repository/save_versions.rb +2 -1
  91. data/app/lib/katello/resources/candlepin/activation_key.rb +3 -4
  92. data/app/lib/katello/resources/candlepin/upstream_job.rb +9 -1
  93. data/app/lib/katello/resources/candlepin.rb +4 -0
  94. data/app/models/katello/authorization/repository.rb +17 -4
  95. data/app/models/katello/concerns/subscription_facet_host_extensions.rb +0 -7
  96. data/app/models/katello/content_view_deb_filter.rb +10 -0
  97. data/app/models/katello/content_view_deb_filter_rule.rb +7 -0
  98. data/app/models/katello/deb.rb +10 -10
  99. data/app/models/katello/erratum.rb +1 -1
  100. data/app/models/katello/glue/provider.rb +14 -3
  101. data/app/models/katello/host/content_facet.rb +1 -1
  102. data/app/models/katello/host/subscription_facet.rb +1 -7
  103. data/app/models/katello/product_content.rb +2 -2
  104. data/app/models/katello/repository.rb +4 -23
  105. data/app/models/katello/root_repository.rb +2 -5
  106. data/app/services/katello/candlepin/event_handler.rb +0 -33
  107. data/app/services/katello/candlepin/message_handler.rb +0 -41
  108. data/app/services/katello/content_unit_indexer.rb +59 -13
  109. data/app/services/katello/product_content_finder.rb +5 -4
  110. data/app/services/katello/pulp3/alternate_content_source.rb +2 -2
  111. data/app/services/katello/pulp3/ansible_collection.rb +1 -0
  112. data/app/services/katello/pulp3/api/content_guard.rb +5 -5
  113. data/app/services/katello/pulp3/api/core.rb +10 -0
  114. data/app/services/katello/pulp3/deb.rb +1 -0
  115. data/app/services/katello/pulp3/docker_manifest.rb +1 -0
  116. data/app/services/katello/pulp3/docker_manifest_list.rb +1 -0
  117. data/app/services/katello/pulp3/docker_tag.rb +1 -0
  118. data/app/services/katello/pulp3/file_unit.rb +1 -0
  119. data/app/services/katello/pulp3/generic_content_unit.rb +1 -0
  120. data/app/services/katello/pulp3/module_stream.rb +1 -0
  121. data/app/services/katello/pulp3/package_group.rb +1 -0
  122. data/app/services/katello/pulp3/repository/apt.rb +30 -13
  123. data/app/services/katello/pulp3/repository.rb +59 -10
  124. data/app/services/katello/pulp3/rpm.rb +3 -2
  125. data/app/services/katello/pulp3/srpm.rb +3 -2
  126. data/app/services/katello/pulp3/task_group.rb +1 -1
  127. data/app/services/katello/registration_manager.rb +19 -17
  128. data/app/services/katello/repository_type_manager.rb +7 -5
  129. data/app/services/katello/smart_proxy_helper.rb +1 -6
  130. data/app/views/foreman/job_templates/upload_profile.erb +5 -0
  131. data/app/views/katello/api/v2/activation_keys/base.json.rabl +1 -1
  132. data/app/views/katello/api/v2/content_views/base.json.rabl +1 -0
  133. data/app/views/katello/api/v2/debs/thindex.json.rabl +6 -0
  134. data/app/views/katello/api/v2/docker_tags/_base.json.rabl +32 -0
  135. data/app/views/katello/api/v2/docker_tags/show.json.rabl +0 -5
  136. data/app/views/katello/api/v2/flatpak_remotes/index.json.rabl +6 -0
  137. data/app/views/katello/api/v2/host_debs/installed_debs.json.rabl +6 -0
  138. data/app/views/katello/api/v2/hosts_bulk_actions/applicable_errata.json.rabl +1 -1
  139. data/app/views/katello/api/v2/hosts_bulk_actions/applicable_erratum.json.rabl +9 -0
  140. data/app/views/katello/api/v2/hosts_bulk_actions/installable_errata.json.rabl +1 -1
  141. data/app/views/katello/api/v2/hosts_bulk_actions/{erratum.json.rabl → installable_erratum.json.rabl} +3 -3
  142. data/app/views/katello/api/v2/subscription_facet/base.json.rabl +1 -1
  143. data/config/initializers/monkeys.rb +1 -0
  144. data/config/routes/api/v2.rb +2 -2
  145. data/config/routes/overrides.rb +2 -7
  146. data/config/routes.rb +2 -0
  147. data/db/migrate/20211019192121_create_cdn_configuration.katello.rb +1 -1
  148. data/db/migrate/20250912000000_add_pulp_prn_fields.rb +73 -0
  149. data/db/migrate/20250912000001_populate_pulp_prn_fields.rb +403 -0
  150. data/db/migrate/20251009142516_remove_auto_attach_from_activation_keys.rb +5 -0
  151. data/db/migrate/20251009142517_remove_autoheal_from_subscription_facets.rb +5 -0
  152. data/db/seeds.d/111-upgrade_tasks.rb +2 -0
  153. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/el.po +2 -2
  154. data/lib/katello/permission_creator.rb +2 -2
  155. data/lib/katello/permissions/host_permissions.rb +0 -6
  156. data/lib/katello/plugin.rb +16 -8
  157. data/lib/katello/tasks/jenkins.rake +1 -1
  158. data/lib/katello/tasks/upgrades/4.19/enable_structured_apt_for_deb.rake +87 -0
  159. data/lib/katello/tasks/upgrades/4.19/populate_repository_version_prns.rake +32 -0
  160. data/lib/katello/version.rb +1 -1
  161. data/lib/monkeys/fix_rpm_repository_gpgcheck.rb +38 -0
  162. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  163. data/locale/bn/katello.po +56 -107
  164. data/locale/bn_IN/LC_MESSAGES/katello.mo +0 -0
  165. data/locale/bn_IN/katello.po +56 -107
  166. data/locale/ca/LC_MESSAGES/katello.mo +0 -0
  167. data/locale/ca/katello.po +56 -107
  168. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  169. data/locale/cs/katello.po +56 -107
  170. data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
  171. data/locale/cs_CZ/katello.po +57 -108
  172. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  173. data/locale/de/katello.po +58 -109
  174. data/locale/de_AT/LC_MESSAGES/katello.mo +0 -0
  175. data/locale/de_AT/katello.po +56 -107
  176. data/locale/de_DE/LC_MESSAGES/katello.mo +0 -0
  177. data/locale/de_DE/katello.po +56 -107
  178. data/locale/el/LC_MESSAGES/katello.mo +0 -0
  179. data/locale/el/katello.po +58 -109
  180. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  181. data/locale/en/katello.po +56 -107
  182. data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
  183. data/locale/en_GB/katello.po +56 -107
  184. data/locale/en_US/LC_MESSAGES/katello.mo +0 -0
  185. data/locale/en_US/katello.po +56 -107
  186. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  187. data/locale/es/katello.po +58 -109
  188. data/locale/et_EE/LC_MESSAGES/katello.mo +0 -0
  189. data/locale/et_EE/katello.po +56 -107
  190. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  191. data/locale/fr/katello.po +59 -110
  192. data/locale/gl/LC_MESSAGES/katello.mo +0 -0
  193. data/locale/gl/katello.po +56 -107
  194. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  195. data/locale/gu/katello.po +56 -107
  196. data/locale/he_IL/LC_MESSAGES/katello.mo +0 -0
  197. data/locale/he_IL/katello.po +56 -107
  198. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  199. data/locale/hi/katello.po +56 -107
  200. data/locale/id/LC_MESSAGES/katello.mo +0 -0
  201. data/locale/id/katello.po +56 -107
  202. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  203. data/locale/it/katello.po +56 -107
  204. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  205. data/locale/ja/katello.po +59 -110
  206. data/locale/ka/LC_MESSAGES/katello.mo +0 -0
  207. data/locale/ka/katello.po +58 -109
  208. data/locale/katello.pot +676 -749
  209. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  210. data/locale/kn/katello.po +56 -107
  211. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  212. data/locale/ko/katello.po +59 -110
  213. data/locale/ml_IN/LC_MESSAGES/katello.mo +0 -0
  214. data/locale/ml_IN/katello.po +56 -107
  215. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  216. data/locale/mr/katello.po +56 -107
  217. data/locale/nl_NL/LC_MESSAGES/katello.mo +0 -0
  218. data/locale/nl_NL/katello.po +56 -107
  219. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  220. data/locale/or/katello.po +56 -107
  221. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  222. data/locale/pa/katello.po +56 -107
  223. data/locale/pl/LC_MESSAGES/katello.mo +0 -0
  224. data/locale/pl/katello.po +56 -107
  225. data/locale/pl_PL/LC_MESSAGES/katello.mo +0 -0
  226. data/locale/pl_PL/katello.po +56 -107
  227. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  228. data/locale/pt/katello.po +56 -107
  229. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  230. data/locale/pt_BR/katello.po +58 -109
  231. data/locale/ro/LC_MESSAGES/katello.mo +0 -0
  232. data/locale/ro/katello.po +56 -107
  233. data/locale/ro_RO/LC_MESSAGES/katello.mo +0 -0
  234. data/locale/ro_RO/katello.po +56 -107
  235. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  236. data/locale/ru/katello.po +57 -108
  237. data/locale/sl/LC_MESSAGES/katello.mo +0 -0
  238. data/locale/sl/katello.po +56 -107
  239. data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
  240. data/locale/sv_SE/katello.po +56 -107
  241. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  242. data/locale/ta/katello.po +56 -107
  243. data/locale/ta_IN/LC_MESSAGES/katello.mo +0 -0
  244. data/locale/ta_IN/katello.po +56 -107
  245. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  246. data/locale/te/katello.po +56 -107
  247. data/locale/tr/LC_MESSAGES/katello.mo +0 -0
  248. data/locale/tr/katello.po +56 -107
  249. data/locale/vi/LC_MESSAGES/katello.mo +0 -0
  250. data/locale/vi/katello.po +56 -107
  251. data/locale/vi_VN/LC_MESSAGES/katello.mo +0 -0
  252. data/locale/vi_VN/katello.po +56 -107
  253. data/locale/zh/LC_MESSAGES/katello.mo +0 -0
  254. data/locale/zh/katello.po +56 -107
  255. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  256. data/locale/zh_CN/katello.po +59 -110
  257. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  258. data/locale/zh_TW/katello.po +57 -108
  259. data/webpack/components/Content/Details/__tests__/__snapshots__/ContentDetails.test.js.snap +2 -2
  260. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeEditModal.js +0 -2
  261. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeEditModal.test.js +0 -2
  262. data/webpack/components/extensions/Hosts/ActionsBar/index.js +1 -0
  263. data/webpack/components/extensions/Hosts/BulkActions/BulkActionsConstants.js +7 -0
  264. data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/BulkChangeHostCollectionsModal.js +388 -0
  265. data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/__tests__/BulkChangeHostCollectionsModal.test.js +640 -0
  266. data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/actions.js +28 -0
  267. data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/index.js +71 -0
  268. data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/BulkErrataWizard.js +1 -1
  269. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/02_BulkPackagesTable.js +10 -3
  270. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/BulkPackagesWizard.js +51 -24
  271. data/webpack/components/extensions/Hosts/BulkActions/HostReview.js +7 -0
  272. data/webpack/containers/Application/config.js +11 -1
  273. data/webpack/global_index.js +3 -0
  274. data/webpack/scenes/{BootedContainerImages → ContainerImages/Booted}/BootedContainerImagesConstants.js +1 -1
  275. data/webpack/scenes/{BootedContainerImages → ContainerImages/Booted}/BootedContainerImagesPage.js +7 -43
  276. data/webpack/scenes/{BootedContainerImages → ContainerImages/Booted}/__tests__/bootedContainerImagesPage.test.js +1 -1
  277. data/webpack/scenes/ContainerImages/ContainerImagesPage.js +86 -0
  278. data/webpack/scenes/ContainerImages/LabelsAnnotationsModal.js +105 -0
  279. data/webpack/scenes/ContainerImages/Synced/Details/ManifestDetails.js +218 -0
  280. data/webpack/scenes/ContainerImages/Synced/Details/ManifestDetailsActions.js +15 -0
  281. data/webpack/scenes/ContainerImages/Synced/Details/ManifestDetailsSelectors.js +16 -0
  282. data/webpack/scenes/ContainerImages/Synced/Details/__tests__/ManifestDetails.test.js +395 -0
  283. data/webpack/scenes/ContainerImages/Synced/Details/__tests__/manifestDetails.fixtures.json +43 -0
  284. data/webpack/scenes/ContainerImages/Synced/Details/__tests__/manifestList.fixtures.json +58 -0
  285. data/webpack/scenes/ContainerImages/Synced/Details/index.js +4 -0
  286. data/webpack/scenes/ContainerImages/Synced/SyncedContainerImagesPage.js +359 -0
  287. data/webpack/scenes/ContainerImages/Synced/SyncedContainerImagesPage.scss +21 -0
  288. data/webpack/scenes/ContainerImages/Synced/__tests__/LabelsAnnotationsModal.test.js +69 -0
  289. data/webpack/scenes/ContainerImages/Synced/__tests__/SyncedContainerImagesPage.test.js +335 -0
  290. data/webpack/scenes/ContainerImages/Synced/__tests__/syncedContainerImages.fixtures.json +105 -0
  291. data/webpack/scenes/ContainerImages/TableEmptyState.js +67 -0
  292. data/webpack/scenes/ContainerImages/containerImagesHelpers.js +48 -0
  293. data/webpack/scenes/ContainerImages/index.js +4 -0
  294. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +29 -3
  295. data/webpack/scenes/ContentViews/Create/__tests__/contentViewCreateResult.fixtures.json +1 -0
  296. data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +45 -1
  297. data/webpack/scenes/ContentViews/Delete/__tests__/affectedHosts.fixtures.json +0 -1
  298. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +59 -1
  299. data/webpack/scenes/ContentViews/Details/Filters/CVDebFilterContent.js +1 -0
  300. data/webpack/scenes/ContentViews/Details/Filters/Rules/DebPackage/AddEditDebPackageRuleModal.js +164 -24
  301. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVDebFilterContent.test.js +268 -0
  302. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvDebFilterDetail.fixtures.json +95 -0
  303. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvDebFilterRules.fixtures.json +31 -0
  304. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyCVDebFilterRules.fixtures.json +10 -0
  305. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/hosts.fixtures.json +0 -1
  306. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvAffectedHosts.fixture.json +0 -1
  307. data/webpack/scenes/ContentViews/Details/__tests__/contentViewRollingDetail.test.js +15 -0
  308. data/webpack/scenes/ContentViews/Details/__tests__/contentViewRollingDetails.fixtures.json +1 -0
  309. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +9 -0
  310. data/webpack/scenes/FlatpakRemotes/CreateEdit/CreateFlatpakRemoteModal.js +5 -3
  311. data/webpack/scenes/FlatpakRemotes/CreateEdit/EditFlatpakRemotesModal.js +1 -1
  312. data/webpack/scenes/FlatpakRemotes/CreateEdit/FlatpakRemoteform.js +35 -3
  313. data/webpack/scenes/FlatpakRemotes/Details/FlatpakRemoteDetails.js +1 -1
  314. data/webpack/scenes/FlatpakRemotes/Details/RemoteRepositories/RemoteRepositoriesTable.css +3 -0
  315. data/webpack/scenes/FlatpakRemotes/Details/RemoteRepositories/RemoteRepositoriesTable.js +63 -132
  316. data/webpack/scenes/FlatpakRemotes/FlatpakRemotesPage.js +67 -143
  317. data/webpack/scenes/SmartProxy/ExpandableCvDetails.js +10 -2
  318. data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +13 -2
  319. data/webpack/scenes/SmartProxy/SmartProxyContentConstants.js +1 -0
  320. data/webpack/scenes/SmartProxy/SmartProxyExpandableTable.js +8 -2
  321. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.js +67 -1
  322. data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetails.test.js.snap +2 -2
  323. data/webpack/scenes/Subscriptions/SubscriptionConstants.js +0 -2
  324. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsActions.test.js.snap +2 -2
  325. metadata +83 -55
  326. data/app/lib/actions/katello/host/attach_subscriptions.rb +0 -59
  327. data/app/lib/actions/katello/host/auto_attach_subscriptions.rb +0 -22
  328. data/app/lib/actions/katello/host/remove_subscriptions.rb +0 -50
  329. data/app/lib/actions/katello/organization/simple_content_access/disable.rb +0 -25
  330. data/app/lib/actions/katello/organization/simple_content_access/enable.rb +0 -25
  331. data/app/lib/actions/katello/organization/simple_content_access/toggle.rb +0 -42
  332. data/lib/katello/tasks/migrate_structure_content_for_deb.rake +0 -105
  333. data/lib/katello/tasks/upgrades/4.2/remove_checksum_values.rake +0 -17
  334. data/locale/action_names.rb +0 -186
  335. /data/webpack/scenes/{BootedContainerImages → ContainerImages/Booted}/__tests__/bootedContainerImages.fixtures.js +0 -0
  336. /data/webpack/scenes/{BootedContainerImages → ContainerImages/Booted}/index.js +0 -0
@@ -2,36 +2,30 @@ module Actions
2
2
  module Katello
3
3
  module ContentView
4
4
  class AddRollingRepoClone < Actions::EntryAction
5
- include Helpers::SmartProxySyncHelper
6
-
7
- def plan(content_view, repository_ids)
8
- library = content_view.organization.library
5
+ def plan(content_view, repository_ids, environment_ids)
9
6
  clone_ids = []
7
+ environments = ::Katello::KTEnvironment.where(id: environment_ids)
8
+ repositories = ::Katello::Repository.where(id: repository_ids)
10
9
 
11
- concurrence do
12
- ::Katello::Repository.where(id: repository_ids).each do |repository|
13
- sequence do
14
- clone = content_view.get_repo_clone(library, repository).first
15
- if clone.nil?
16
- clone = repository.build_clone(content_view: content_view, environment: library)
17
- clone.save!
18
- end
19
- plan_action(RefreshRollingRepo, clone, false)
10
+ environments.each do |environment|
11
+ concurrence do
12
+ repositories.each do |repository|
13
+ sequence do
14
+ clone = content_view.get_repo_clone(environment, repository).first
15
+ if clone.nil?
16
+ clone = repository.build_clone(content_view: content_view, environment: environment)
17
+ clone.save!
18
+ end
19
+ plan_action(RefreshRollingRepo, clone, false)
20
20
 
21
- view_env_cp_id = content_view.content_view_environment(library).cp_id
22
- content_id = repository.content_id
23
- plan_action(Actions::Candlepin::Environment::AddContentToEnvironment, :view_env_cp_id => view_env_cp_id, :content_id => content_id)
24
- clone_ids << clone.id
21
+ view_env_cp_id = content_view.content_view_environment(environment).cp_id
22
+ content_id = repository.content_id
23
+ plan_action(Actions::Candlepin::Environment::AddContentToEnvironment, :view_env_cp_id => view_env_cp_id, :content_id => content_id)
24
+ clone_ids << clone.id
25
+ end
25
26
  end
26
27
  end
27
28
  end
28
- plan_self(repository_ids: clone_ids)
29
- end
30
-
31
- def run
32
- ::Katello::Repository.where(id: input[:repository_ids]).each do |repository|
33
- schedule_async_repository_proxy_sync(repository)
34
- end
35
29
  end
36
30
  end
37
31
  end
@@ -2,20 +2,25 @@ module Actions
2
2
  module Katello
3
3
  module ContentView
4
4
  class Create < Actions::Base
5
- def plan(content_view)
5
+ def plan(content_view, environment_ids = [])
6
6
  content_view.save!
7
7
  if content_view.rolling?
8
- plan_action(AddToEnvironment, content_view.create_new_version, content_view.organization.library)
8
+ new_version = content_view.create_new_version
9
+ if environment_ids&.any?
10
+ ::Katello::KTEnvironment.where(id: environment_ids).each do |environment|
11
+ plan_action(AddToEnvironment, new_version, environment)
12
+ end
13
+ end
9
14
  repository_ids = content_view.repository_ids
10
15
  if repository_ids.any?
11
16
  content_view.reload
12
- plan_action(AddRollingRepoClone, content_view, repository_ids)
17
+ plan_action(AddRollingRepoClone, content_view, repository_ids, environment_ids)
13
18
  end
14
19
  end
15
20
  end
16
21
 
17
22
  def humanized_name
18
- _("Create")
23
+ _("Create content view")
19
24
  end
20
25
  end
21
26
  end
@@ -2,6 +2,8 @@ module Actions
2
2
  module Katello
3
3
  module ContentView
4
4
  class RefreshRollingRepo < Actions::EntryAction
5
+ include Helpers::SmartProxySyncHelper
6
+
5
7
  def plan(repository, contents_changed)
6
8
  action_subject repository
7
9
  sequence do
@@ -23,8 +25,10 @@ module Actions
23
25
  repository.last_contents_changed = DateTime.now if repository.version_href != library_instance.version_href
24
26
 
25
27
  repository.version_href = library_instance.version_href
28
+ repository.version_prn = library_instance.version_prn
26
29
  repository.publication_href = library_instance.publication_href
27
- if repository.deb_using_structured_apt?
30
+ repository.publication_prn = library_instance.publication_prn
31
+ if repository.deb?
28
32
  repository.content_id = library_instance.content_id
29
33
  end
30
34
  repository.save!
@@ -33,6 +37,7 @@ module Actions
33
37
  def finalize
34
38
  repository = ::Katello::Repository.find(input[:repository_id])
35
39
  repository.clear_smart_proxy_sync_histories if input[:contents_changed]
40
+ schedule_async_repository_proxy_sync(repository)
36
41
  end
37
42
  end
38
43
  end
@@ -2,21 +2,26 @@ module Actions
2
2
  module Katello
3
3
  module ContentView
4
4
  class RemoveRollingRepoClone < Actions::EntryAction
5
- def plan(content_view, repository_ids)
6
- library = content_view.organization.library
5
+ def plan(content_view, repository_ids, environment_ids)
6
+ clone_ids = []
7
+ environments = ::Katello::KTEnvironment.where(id: environment_ids)
8
+ repositories = ::Katello::Repository.where(id: repository_ids)
7
9
 
8
- clone_repo_ids = []
9
- concurrence do
10
- ::Katello::Repository.where(id: repository_ids).each do |repository|
11
- clone_repo = content_view.get_repo_clone(library, repository).first
12
- next if clone_repo.nil?
10
+ sequence do
11
+ environments.each do |environment|
12
+ concurrence do
13
+ repositories.each do |repository|
14
+ clone_repo = content_view.get_repo_clone(environment, repository).first
15
+ next if clone_repo.nil?
13
16
 
14
- clone_repo_ids << clone_repo.id
15
- plan_action(Actions::Pulp3::Repository::DeleteDistributions, clone_repo.id, SmartProxy.pulp_primary)
17
+ clone_ids << clone_repo.id
18
+ plan_action(Actions::Pulp3::Repository::DeleteDistributions, clone_repo.id, SmartProxy.pulp_primary)
19
+ end
20
+ plan_action(Candlepin::Environment::SetContent, content_view, environment, content_view.content_view_environment(environment))
21
+ end
16
22
  end
17
- plan_action(Candlepin::Environment::SetContent, content_view, library, content_view.content_view_environment(library))
23
+ plan_self(repository_ids: clone_ids)
18
24
  end
19
- plan_self(repository_ids: clone_repo_ids)
20
25
  end
21
26
 
22
27
  def run
@@ -2,7 +2,7 @@ module Actions
2
2
  module Katello
3
3
  module ContentView
4
4
  class Update < Actions::EntryAction
5
- def plan(content_view, content_view_params)
5
+ def plan(content_view, content_view_params, environment_ids)
6
6
  action_subject content_view
7
7
  content_view_params = content_view_params.with_indifferent_access
8
8
 
@@ -28,15 +28,42 @@ module Actions
28
28
  end
29
29
  end
30
30
 
31
- if content_view.rolling? && content_view_params.key?(:repository_ids)
32
- repo_ids_to_add = content_view_params[:repository_ids] - content_view.repository_ids
33
- repo_ids_to_remove = content_view.repository_ids - content_view_params[:repository_ids]
31
+ handle_rolling_content_view(content_view, content_view_params[:repository_ids], environment_ids)
32
+ content_view.update!(content_view_params)
33
+ end
34
34
 
35
- plan_action(AddRollingRepoClone, content_view, repo_ids_to_add) if repo_ids_to_add.any?
36
- plan_action(RemoveRollingRepoClone, content_view, repo_ids_to_remove) if repo_ids_to_remove.any?
35
+ def handle_rolling_content_view(content_view, target_repo_ids, target_env_ids)
36
+ return unless content_view.rolling?
37
+
38
+ add_repo_ids, remove_repo_ids, retain_repo_ids = translate_id_lists(content_view.repository_ids, target_repo_ids)
39
+
40
+ if target_env_ids.nil?
41
+ target_env_ids = retain_env_ids = content_view.environment_ids
42
+ else
43
+ add_env_ids, remove_env_ids, retain_env_ids = translate_id_lists(content_view.environment_ids, target_env_ids)
44
+ ::Katello::KTEnvironment.where(id: add_env_ids).each do |environment|
45
+ plan_action(AddToEnvironment, content_view.versions[0], environment)
46
+ end
47
+ plan_action(AddRollingRepoClone, content_view, retain_repo_ids, add_env_ids) if retain_repo_ids.any? && add_env_ids.any?
48
+ ::Katello::KTEnvironment.where(id: remove_env_ids).each do |environment|
49
+ plan_action(RemoveFromEnvironment, content_view, environment)
50
+ end
37
51
  end
38
52
 
39
- content_view.update!(content_view_params)
53
+ plan_action(AddRollingRepoClone, content_view, add_repo_ids, target_env_ids) if add_repo_ids.any?
54
+ plan_action(RemoveRollingRepoClone, content_view, remove_repo_ids, retain_env_ids) if remove_repo_ids.any?
55
+ end
56
+
57
+ def translate_id_lists(current_ids, target_ids)
58
+ if target_ids.nil?
59
+ add_ids = remove_ids = []
60
+ retain_ids = current_ids
61
+ else
62
+ add_ids = target_ids - current_ids
63
+ remove_ids = current_ids - target_ids
64
+ retain_ids = current_ids - remove_ids
65
+ end
66
+ return add_ids, remove_ids, retain_ids
40
67
  end
41
68
  end
42
69
  end
@@ -7,7 +7,7 @@ module Actions
7
7
  def plan(repository)
8
8
  root = repository.root
9
9
  sequence do
10
- if repository.content_id.nil? || repository.content_id == 'INITIAL_DUMMY_VALUE'
10
+ if repository.content_id.nil?
11
11
  content_create = plan_action(Candlepin::Product::ContentCreate,
12
12
  repository_id: repository.id,
13
13
  owner: root.organization.label,
@@ -45,7 +45,7 @@ module Actions
45
45
  def finalize
46
46
  root = ::Katello::RootRepository.find(input[:root_repository_id])
47
47
  content_url = root.custom_content_path
48
- if root.deb_using_structured_apt?
48
+ if root.deb?
49
49
  repository = ::Katello::Repository.find(input[:repository_id])
50
50
  content_url += repository.deb_content_url_options
51
51
  repository.update(:content_id => input[:content_id])
@@ -15,7 +15,7 @@ module Actions
15
15
  ::Katello::ProductContent.where(product_id: root_repository.product_id,
16
16
  content_id: katello_content_id).destroy_all
17
17
 
18
- if root_repository.repositories.count <= 1 || repository.deb_using_structured_apt?
18
+ if root_repository.repositories.count <= 1 || repository.deb?
19
19
  plan_action(Candlepin::Product::ContentDestroy,
20
20
  owner: root_repository.product.organization.label,
21
21
  content_id: repository.content_id)
@@ -27,7 +27,7 @@ module Actions
27
27
  output[:matching_content] = srpms_match && rpms && errata && package_groups && distributions && target_repo_published && checksum_match
28
28
  end
29
29
 
30
- if source_repo.content_type == ::Katello::Repository::DEB_TYPE
30
+ if source_repo.deb?
31
31
  debs = debs_match?(source_repo, target_repo)
32
32
 
33
33
  output[:matching_content] = debs && target_repo_published
@@ -26,7 +26,7 @@ module Actions
26
26
  index_options = {id: new_repository.id, force_index: true}
27
27
  index_options[:source_repository_id] = source_repositories.first.id if source_repositories.count == 1 && filters.empty? && rpm_filenames.nil?
28
28
 
29
- if new_repository.deb_using_structured_apt? && generate_metadata
29
+ if new_repository.deb? && generate_metadata
30
30
  plan_action(Candlepin::Product::ContentUpdate,
31
31
  owner: new_repository.organization.label,
32
32
  repository_id: new_repository.id,
@@ -64,7 +64,7 @@ module Actions
64
64
  end
65
65
 
66
66
  def create_content?(repository, clone)
67
- if repository.deb_using_structured_apt?
67
+ if repository.deb?
68
68
  return true
69
69
  elsif clone || repository.content
70
70
  return false
@@ -86,10 +86,10 @@ module Actions
86
86
  end
87
87
 
88
88
  def handle_custom_content(repository, remove_from_content_view_versions)
89
- #if this is the last instance of a custom repo or a deb repo using structured APT, destroy the content
90
- if remove_from_content_view_versions || repository.root.repositories.where.not(id: repository.id).empty? || repository.deb_using_structured_apt?
91
- # Never destroy content for structured apt rolling repo clones, because it belongs to the library instance
92
- return if repository.deb_using_structured_apt? && repository.content_view.rolling?
89
+ # If this is the last instance of a custom repo or a deb repo, then destroy the content
90
+ if remove_from_content_view_versions || repository.root.repositories.where.not(id: repository.id).empty? || repository.deb?
91
+ # Never destroy content for deb rolling repo clones, it belongs to the library instance!
92
+ return if repository.deb? && repository.content_view.rolling?
93
93
 
94
94
  plan_action(::Actions::Katello::Product::ContentDestroy, repository)
95
95
  end
@@ -15,7 +15,7 @@ module Actions
15
15
  generate_metadata = options.fetch(:generate_metadata, true)
16
16
  plan_action(Katello::Repository::MetadataGenerate, repository, :dependency => import_upload_task, :force_publication => true) if generate_metadata
17
17
 
18
- if repository.deb_using_structured_apt? && generate_metadata
18
+ if repository.deb? && generate_metadata
19
19
  plan_action(::Actions::Candlepin::Product::ContentUpdate,
20
20
  owner: repository.organization.label,
21
21
  repository_id: repository.id,
@@ -101,7 +101,7 @@ module Actions
101
101
  end
102
102
 
103
103
  def update_deb_content(repo)
104
- return unless repo.deb_using_structured_apt?
104
+ return unless repo.deb?
105
105
 
106
106
  plan_action(::Actions::Candlepin::Product::ContentUpdate,
107
107
  owner: repo.organization.label,
@@ -39,7 +39,7 @@ module Actions
39
39
  else
40
40
  plan_self(source_version_repo_id: source_repositories.first.id,
41
41
  target_repo_id: target_repo.id)
42
- target_repo.update!(version_href: source_repositories.first.version_href)
42
+ target_repo.update!(version_href: source_repositories.first.version_href, version_prn: source_repositories.first.version_prn)
43
43
  end
44
44
  end
45
45
 
@@ -47,7 +47,7 @@ module Actions
47
47
  #this is a 'simple' copy, so just reference version_href
48
48
  target_repo = ::Katello::Repository.find(input[:target_repo_id])
49
49
  source_repo = ::Katello::Repository.find(input[:source_version_repo_id])
50
- target_repo.update!(version_href: source_repo.version_href)
50
+ target_repo.update!(version_href: source_repo.version_href, version_prn: source_repo.version_prn)
51
51
  end
52
52
  end
53
53
  end
@@ -33,7 +33,7 @@ module Actions
33
33
  if (target_repo.publication_href != source_repo.publication_href && smart_proxy.pulp_primary?)
34
34
  target_repo.clear_smart_proxy_sync_histories
35
35
  end
36
- target_repo.update!(publication_href: source_repo.publication_href)
36
+ target_repo.update!(publication_href: source_repo.publication_href, publication_prn: source_repo.publication_prn)
37
37
  end
38
38
  end
39
39
  end
@@ -31,7 +31,7 @@ module Actions
31
31
  input[:repo_id_map].each do |source_repo_id, dest_repo_id|
32
32
  dest_repo = ::Katello::Repository.find(dest_repo_id)
33
33
  source_repo = ::Katello::Repository.find(source_repo_id)
34
- dest_repo.update!(version_href: source_repo.version_href)
34
+ dest_repo.update!(version_href: source_repo.version_href, version_prn: source_repo.version_prn)
35
35
  end
36
36
  end
37
37
  end
@@ -12,7 +12,9 @@ module Actions
12
12
  publication_href = input[:tasks][:pulp_tasks].first[:created_resources].first
13
13
  if publication_href
14
14
  repo = ::Katello::Repository.find(input[:repository_id])
15
- repo.update(:publication_href => publication_href)
15
+ repo_backend_service = repo.backend_service(SmartProxy.pulp_primary)
16
+ publication = repo_backend_service.api.publications_api.read(publication_href, {fields: 'prn'})
17
+ repo.update(:publication_href => publication_href, :publication_prn => publication.prn)
16
18
  end
17
19
  end
18
20
  end
@@ -9,35 +9,56 @@ module Actions
9
9
 
10
10
  def run
11
11
  repo = ::Katello::Repository.find(input[:repository_id])
12
- if input[:force_fetch_version]
13
- version_href = fetch_version_href(repo)
14
- elsif input[:repository_details].present?
15
- version_href = input[:repository_details][:latest_version_href]
16
- elsif input[:tasks].present?
17
- version_href = ::Katello::Pulp3::Task.version_href(input[:tasks])
18
- else
19
- version_href = fetch_version_href(repo)
20
- end
12
+ version_href = determine_version_href(repo)
13
+
14
+ save_publication_if_present(repo)
15
+ save_version_if_changed(repo, version_href)
16
+ end
17
+
18
+ def determine_version_href(repo)
19
+ return fetch_version_href(repo) if input[:force_fetch_version]
20
+ return input[:repository_details][:latest_version_href] if input[:repository_details].present?
21
+ return ::Katello::Pulp3::Task.version_href(input[:tasks]) if input[:tasks].present?
22
+ fetch_version_href(repo)
23
+ end
21
24
 
25
+ def save_publication_if_present(repo)
22
26
  output[:publication_provided] = false
23
- if input[:tasks].present? && (publication_href = ::Katello::Pulp3::Task.publication_href(input[:tasks]))
24
- repo.update(:publication_href => publication_href)
25
- output[:publication_provided] = true
26
- end
27
+ return if input[:tasks].blank?
28
+
29
+ publication_href = ::Katello::Pulp3::Task.publication_href(input[:tasks])
30
+ return unless publication_href
27
31
 
32
+ repo_backend_service = repo.backend_service(SmartProxy.pulp_primary)
33
+ publication = repo_backend_service.api.publications_api.read(publication_href, {fields: 'prn'})
34
+ repo.update(:publication_href => publication_href, :publication_prn => publication.prn)
35
+ output[:publication_provided] = true
36
+ end
37
+
38
+ def save_version_if_changed(repo, version_href)
28
39
  if version_href
29
- if repo.version_href != version_href || input[:force_fetch_version]
30
- output[:contents_changed] = true
31
- repo.update(:last_contents_changed => DateTime.now)
32
- repo.update(:version_href => version_href)
33
- end
40
+ update_version_if_changed(repo, version_href)
41
+ else
42
+ check_publication_version_match(repo)
43
+ end
44
+ end
45
+
46
+ def update_version_if_changed(repo, version_href)
47
+ return unless repo.version_href != version_href || input[:force_fetch_version]
48
+
49
+ output[:contents_changed] = true
50
+ repo.update(:last_contents_changed => DateTime.now)
51
+ repo_backend_service = repo.backend_service(SmartProxy.pulp_primary)
52
+ version = repo_backend_service.api.repository_versions_api.read(version_href, {fields: 'prn'})
53
+ repo.update(:version_href => version_href, :version_prn => version.prn)
54
+ end
55
+
56
+ def check_publication_version_match(repo)
57
+ # get publication and check if repo-version and publication match. Otherwise, contents_changed: false
58
+ if !repo.repository_type.pulp3_skip_publication && fetch_current_published_version_href(repo) != repo.version_href
59
+ output[:contents_changed] = true
34
60
  else
35
- # get publication and check if repo-version and publication match. Otherwise, contents_changed: false
36
- if !repo.repository_type.pulp3_skip_publication && fetch_current_published_version_href(repo) != repo.version_href
37
- output[:contents_changed] = true
38
- else
39
- output[:contents_changed] = false
40
- end
61
+ output[:contents_changed] = false
41
62
  end
42
63
  end
43
64
 
@@ -37,7 +37,8 @@ module Actions
37
37
  end
38
38
 
39
39
  unless new_version_href == repo.version_href
40
- repo.update(version_href: new_version_href)
40
+ version = repo_backend_service.api.repository_versions_api.read(new_version_href, {fields: 'prn'})
41
+ repo.update(version_href: new_version_href, version_prn: version.prn)
41
42
  repo.index_content
42
43
  output[:contents_changed] = true
43
44
  output[:updated_repositories] << repo.id
@@ -10,11 +10,10 @@ module Katello
10
10
  ::Katello::Util::Data.array_with_indifferent_access akeys
11
11
  end
12
12
 
13
- def create(name, owner_key, auto_attach, service_level, release_version, purpose_role, purpose_usage)
13
+ def create(name, owner_key, service_level, release_version, purpose_role, purpose_usage)
14
14
  url = "/candlepin/owners/#{owner_key}/activation_keys"
15
15
  params = {
16
16
  name: name,
17
- autoAttach: auto_attach,
18
17
  serviceLevel: service_level,
19
18
  releaseVer: release_version,
20
19
  role: purpose_role,
@@ -24,8 +23,8 @@ module Katello
24
23
  JSON.parse(response.body).with_indifferent_access
25
24
  end
26
25
 
27
- def update(id, release_version, service_level, auto_attach, purpose_role, purpose_usage)
28
- attrs = { :releaseVer => release_version, :serviceLevel => service_level, :autoAttach => auto_attach, :role => purpose_role, :usage => purpose_usage }.delete_if { |_k, v| v.nil? }
26
+ def update(id, release_version, service_level, purpose_role, purpose_usage)
27
+ attrs = { :releaseVer => release_version, :serviceLevel => service_level, :role => purpose_role, :usage => purpose_usage }.delete_if { |_k, v| v.nil? }
29
28
  JSON.parse(self.put(path(id), attrs.to_json, self.default_headers).body).with_indifferent_access
30
29
  end
31
30
 
@@ -5,13 +5,14 @@ module Katello
5
5
  class << self
6
6
  NOT_FINISHED_STATES = %w(CREATED WAITING PENDING RUNNING).freeze unless defined? NOT_FINISHED_STATES
7
7
  API_URL = 'https://subscription.rhsm.redhat.com/subscription'.freeze
8
+ SUBSCRIPTION_PATH = '/subscription'.freeze
8
9
 
9
10
  def not_finished?(job)
10
11
  NOT_FINISHED_STATES.include?(job[:state])
11
12
  end
12
13
 
13
14
  def get(id, upstream)
14
- url = ENV['REDHAT_RHSM_API_URL'] || API_URL
15
+ url = subscription_path(ENV['REDHAT_RHSM_API_URL']) || subscription_path(upstream['apiUrl']) || API_URL
15
16
  response = Resources::Candlepin::UpstreamConsumer.start_upstream_export("#{url}#{path(id)}", upstream['idCert']['cert'],
16
17
  upstream['idCert']['key'], nil)
17
18
  job = JSON.parse(response)
@@ -21,6 +22,13 @@ module Katello
21
22
  def path(id = nil)
22
23
  "/jobs/#{id}"
23
24
  end
25
+
26
+ def subscription_path(upstream_api_url)
27
+ return if upstream_api_url.blank?
28
+ uri = URI.parse(upstream_api_url) # https://subscription.rhsm.redhat.com/subscription/consumers/
29
+ uri.path = SUBSCRIPTION_PATH # https://subscription.rhsm.redhat.com/subscription
30
+ uri.to_s
31
+ end
24
32
  end
25
33
  end
26
34
  end
@@ -88,6 +88,10 @@ module Katello
88
88
  class << self
89
89
  delegate :[], to: :json_resource
90
90
 
91
+ def default_headers(uuid = nil)
92
+ super(uuid).except('cp-user', 'cp-consumer')
93
+ end
94
+
91
95
  def resource(options = {}, url: self.site + self.path, client_cert: self.client_cert, client_key: self.client_key, ca_file: nil)
92
96
  cert_store = OpenSSL::X509::Store.new
93
97
  cert_store.add_file(ca_file) if ca_file
@@ -39,14 +39,27 @@ module Katello
39
39
 
40
40
  def readable_docker_catalog(host = nil)
41
41
  if host
42
- repo_ids = nil
42
+ repo_ids = []
43
43
  if host&.content_view_environments&.any?
44
44
  repo_ids = host.content_view_environments.flat_map do |cve|
45
- cve&.content_view_version&.repositories&.where(environment_id: cve.environment)&.non_archived&.docker_type&.pluck(:id)
45
+ cve&.content_view_version&.repositories&.where(environment_id: cve.environment)&.pluck(:id)
46
46
  end
47
+ repo_ids = repo_ids.compact.uniq
48
+ end
49
+
50
+ base_scope = Katello::Repository.non_archived.docker_type
51
+ host_repos = base_scope.where(id: repo_ids)
52
+
53
+ table_name = Repository.table_name
54
+ in_unauth_environments = Repository.joins(:environment)
55
+ .where("#{Katello::KTEnvironment.table_name}.registry_unauthenticated_pull" => true)
56
+ .select(:id)
57
+
58
+ if in_unauth_environments.exists?
59
+ return host_repos.or(base_scope.joins(:root).where("#{table_name}.id in (?)", in_unauth_environments))
60
+ else
61
+ return host_repos
47
62
  end
48
- repos = Katello::Repository.where(id: repo_ids)
49
- return repos
50
63
  end
51
64
  readable_docker_catalog_as(User.current)
52
65
  end
@@ -21,7 +21,6 @@ module Katello
21
21
  scoped_search on: :status, relation: :rhel_lifecycle_status_object, rename: :rhel_lifecycle_status, complete_value: rhel_lifecycle_status_map
22
22
 
23
23
  scoped_search :on => :release_version, :relation => :subscription_facet, :complete_value => true, :only_explicit => true
24
- scoped_search :on => :autoheal, :relation => :subscription_facet, :complete_value => true, :only_explicit => true
25
24
  scoped_search :on => :service_level, :relation => :subscription_facet, :complete_value => true, :only_explicit => true
26
25
  scoped_search :on => :last_checkin, :relation => :subscription_facet, :complete_value => true, :only_explicit => true
27
26
  scoped_search :on => :registered_through, :relation => :subscription_facet, :complete_value => true, :only_explicit => true
@@ -45,8 +44,6 @@ module Katello
45
44
  content_facet.cves_changed = false if content_facet
46
45
  content_facet&.save!
47
46
 
48
- auto_attach_enabled_via_checkin = consumer_params.try(:[], 'autoheal')
49
-
50
47
  if subscription_facet
51
48
  consumer_params ||= subscription_facet.consumer_attributes
52
49
 
@@ -59,10 +56,6 @@ module Katello
59
56
  end
60
57
  ::Katello::Resources::Candlepin::Consumer.update(subscription_facet.uuid, consumer_params)
61
58
 
62
- if auto_attach_enabled_via_checkin
63
- ::Katello::Resources::Candlepin::Consumer.refresh_entitlements(subscription_facet.uuid)
64
- end
65
-
66
59
  if consumer_params.try(:[], :facts)
67
60
  ::Katello::Host::SubscriptionFacet.update_facts(self, consumer_params[:facts])
68
61
  end
@@ -13,6 +13,8 @@ module Katello
13
13
  package_filenames.concat(query_debs(repo, rule))
14
14
  end
15
15
 
16
+ package_filenames = package_filenames.uniq.sort
17
+
16
18
  ContentViewDebFilter.generate_deb_clauses(package_filenames)
17
19
  end
18
20
 
@@ -21,6 +23,9 @@ module Katello
21
23
  self.deb_rules.each do |rule|
22
24
  deb_filenames.concat(query_debs(repo, rule))
23
25
  end
26
+
27
+ deb_filenames = deb_filenames.uniq
28
+
24
29
  debs = Deb.in_repositories(repo)
25
30
  debs.where(filename: deb_filenames).pluck(:pulp_id).flatten.uniq
26
31
  end
@@ -45,6 +50,11 @@ module Katello
45
50
  query_arch = rule.architecture.tr("*", "%")
46
51
  query = query.where("#{Deb.table_name}.architecture ilike ?", query_arch)
47
52
  end
53
+ if rule.version.present?
54
+ query = query.search_version_equal(rule.version)
55
+ elsif rule.min_version.present? || rule.max_version.present?
56
+ query = query.search_version_range(rule.min_version, rule.max_version)
57
+ end
48
58
  query.default_sort
49
59
  end
50
60
  end
@@ -10,10 +10,17 @@ module Katello
10
10
  validates :name, :presence => true
11
11
  validate :ensure_unique_attributes
12
12
  validates_with Validators::ContentViewFilterVersionValidator
13
+ scoped_search :on => :version, :complete_value => true
14
+ scoped_search :on => :min_version, :complete_value => true
15
+ scoped_search :on => :max_version, :complete_value => true
16
+ scoped_search :on => :architecture, :complete_value => true
13
17
 
14
18
  def ensure_unique_attributes
15
19
  other = self.class.where(:name => self.name,
20
+ :version => self.version,
16
21
  :content_view_filter_id => self.content_view_filter_id,
22
+ :min_version => self.min_version,
23
+ :max_version => self.max_version,
17
24
  :architecture => self.architecture)
18
25
  other = other.where.not(:id => self.id) if self.id
19
26
  if other.exists?