katello 4.18.0 → 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 (345) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/locale/bn/katello.js +52 -349
  3. data/app/assets/javascripts/katello/locale/bn_IN/katello.js +52 -349
  4. data/app/assets/javascripts/katello/locale/ca/katello.js +52 -349
  5. data/app/assets/javascripts/katello/locale/cs/katello.js +53 -350
  6. data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +54 -351
  7. data/app/assets/javascripts/katello/locale/de/katello.js +56 -353
  8. data/app/assets/javascripts/katello/locale/de_AT/katello.js +52 -349
  9. data/app/assets/javascripts/katello/locale/de_DE/katello.js +52 -349
  10. data/app/assets/javascripts/katello/locale/el/katello.js +54 -351
  11. data/app/assets/javascripts/katello/locale/en/katello.js +53 -350
  12. data/app/assets/javascripts/katello/locale/en_GB/katello.js +53 -350
  13. data/app/assets/javascripts/katello/locale/en_US/katello.js +52 -349
  14. data/app/assets/javascripts/katello/locale/es/katello.js +56 -353
  15. data/app/assets/javascripts/katello/locale/et_EE/katello.js +52 -349
  16. data/app/assets/javascripts/katello/locale/fr/katello.js +138 -435
  17. data/app/assets/javascripts/katello/locale/gl/katello.js +52 -349
  18. data/app/assets/javascripts/katello/locale/gu/katello.js +52 -349
  19. data/app/assets/javascripts/katello/locale/he_IL/katello.js +52 -349
  20. data/app/assets/javascripts/katello/locale/hi/katello.js +52 -349
  21. data/app/assets/javascripts/katello/locale/id/katello.js +52 -349
  22. data/app/assets/javascripts/katello/locale/it/katello.js +53 -350
  23. data/app/assets/javascripts/katello/locale/ja/katello.js +142 -439
  24. data/app/assets/javascripts/katello/locale/ka/katello.js +56 -353
  25. data/app/assets/javascripts/katello/locale/kn/katello.js +52 -349
  26. data/app/assets/javascripts/katello/locale/ko/katello.js +135 -432
  27. data/app/assets/javascripts/katello/locale/ml_IN/katello.js +52 -349
  28. data/app/assets/javascripts/katello/locale/mr/katello.js +52 -349
  29. data/app/assets/javascripts/katello/locale/nl_NL/katello.js +52 -349
  30. data/app/assets/javascripts/katello/locale/or/katello.js +52 -349
  31. data/app/assets/javascripts/katello/locale/pa/katello.js +52 -349
  32. data/app/assets/javascripts/katello/locale/pl/katello.js +52 -349
  33. data/app/assets/javascripts/katello/locale/pl_PL/katello.js +52 -349
  34. data/app/assets/javascripts/katello/locale/pt/katello.js +52 -349
  35. data/app/assets/javascripts/katello/locale/pt_BR/katello.js +56 -353
  36. data/app/assets/javascripts/katello/locale/ro/katello.js +52 -349
  37. data/app/assets/javascripts/katello/locale/ro_RO/katello.js +52 -349
  38. data/app/assets/javascripts/katello/locale/ru/katello.js +54 -351
  39. data/app/assets/javascripts/katello/locale/sl/katello.js +52 -349
  40. data/app/assets/javascripts/katello/locale/sv_SE/katello.js +52 -349
  41. data/app/assets/javascripts/katello/locale/ta/katello.js +52 -349
  42. data/app/assets/javascripts/katello/locale/ta_IN/katello.js +52 -349
  43. data/app/assets/javascripts/katello/locale/te/katello.js +52 -349
  44. data/app/assets/javascripts/katello/locale/tr/katello.js +52 -349
  45. data/app/assets/javascripts/katello/locale/vi/katello.js +52 -349
  46. data/app/assets/javascripts/katello/locale/vi_VN/katello.js +52 -349
  47. data/app/assets/javascripts/katello/locale/zh/katello.js +52 -349
  48. data/app/assets/javascripts/katello/locale/zh_CN/katello.js +135 -432
  49. data/app/assets/javascripts/katello/locale/zh_TW/katello.js +54 -351
  50. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +46 -13
  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_export_incrementals_controller.rb +56 -34
  54. data/app/controllers/katello/api/v2/content_view_filter_rules_controller.rb +1 -1
  55. data/app/controllers/katello/api/v2/content_views_controller.rb +18 -3
  56. data/app/controllers/katello/api/v2/debs_controller.rb +21 -11
  57. data/app/controllers/katello/api/v2/docker_tags_controller.rb +7 -0
  58. data/app/controllers/katello/api/v2/errata_controller.rb +4 -4
  59. data/app/controllers/katello/api/v2/flatpak_remote_repositories_controller.rb +21 -19
  60. data/app/controllers/katello/api/v2/host_debs_controller.rb +16 -1
  61. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +3 -60
  62. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +10 -53
  63. data/app/controllers/katello/api/v2/repositories_controller.rb +0 -1
  64. data/app/controllers/katello/concerns/organizations_controller_extensions.rb +3 -0
  65. data/app/lib/actions/candlepin/activation_key/create.rb +0 -2
  66. data/app/lib/actions/candlepin/activation_key/update.rb +0 -2
  67. data/app/lib/actions/candlepin/product/content_create.rb +3 -5
  68. data/app/lib/actions/candlepin/product/content_update.rb +2 -3
  69. data/app/lib/actions/helpers/rolling_cv_repos.rb +1 -1
  70. data/app/lib/actions/katello/activation_key/create.rb +0 -1
  71. data/app/lib/actions/katello/activation_key/update.rb +0 -2
  72. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +1 -6
  73. data/app/lib/actions/katello/content_credential/update.rb +1 -1
  74. data/app/lib/actions/katello/content_view/add_rolling_repo_clone.rb +18 -24
  75. data/app/lib/actions/katello/content_view/create.rb +9 -4
  76. data/app/lib/actions/katello/content_view/publish.rb +7 -7
  77. data/app/lib/actions/katello/content_view/refresh_rolling_repo.rb +6 -1
  78. data/app/lib/actions/katello/content_view/remove_rolling_repo_clone.rb +16 -11
  79. data/app/lib/actions/katello/content_view/update.rb +34 -7
  80. data/app/lib/actions/katello/product/content_create.rb +2 -2
  81. data/app/lib/actions/katello/product/content_destroy.rb +1 -1
  82. data/app/lib/actions/katello/repository/check_matching_content.rb +1 -1
  83. data/app/lib/actions/katello/repository/clone_contents.rb +1 -1
  84. data/app/lib/actions/katello/repository/create.rb +1 -1
  85. data/app/lib/actions/katello/repository/destroy.rb +4 -4
  86. data/app/lib/actions/katello/repository/finish_upload.rb +1 -1
  87. data/app/lib/actions/katello/repository/sync.rb +1 -1
  88. data/app/lib/actions/pulp3/orchestration/repository/copy_all_units.rb +2 -2
  89. data/app/lib/actions/pulp3/orchestration/repository/generate_metadata.rb +1 -1
  90. data/app/lib/actions/pulp3/orchestration/repository/multi_copy_all_units.rb +1 -1
  91. data/app/lib/actions/pulp3/repository/save_publication.rb +3 -1
  92. data/app/lib/actions/pulp3/repository/save_version.rb +45 -24
  93. data/app/lib/actions/pulp3/repository/save_versions.rb +2 -1
  94. data/app/lib/katello/resources/candlepin/activation_key.rb +3 -4
  95. data/app/lib/katello/resources/candlepin/upstream_job.rb +9 -1
  96. data/app/lib/katello/resources/candlepin.rb +4 -0
  97. data/app/models/katello/authorization/repository.rb +17 -4
  98. data/app/models/katello/concerns/subscription_facet_host_extensions.rb +0 -7
  99. data/app/models/katello/content_view_deb_filter.rb +10 -0
  100. data/app/models/katello/content_view_deb_filter_rule.rb +7 -0
  101. data/app/models/katello/deb.rb +10 -12
  102. data/app/models/katello/erratum.rb +1 -1
  103. data/app/models/katello/glue/provider.rb +14 -3
  104. data/app/models/katello/host/content_facet.rb +1 -1
  105. data/app/models/katello/host/subscription_facet.rb +1 -7
  106. data/app/models/katello/product_content.rb +2 -2
  107. data/app/models/katello/repository.rb +4 -23
  108. data/app/models/katello/root_repository.rb +2 -5
  109. data/app/services/katello/candlepin/event_handler.rb +0 -33
  110. data/app/services/katello/candlepin/message_handler.rb +0 -41
  111. data/app/services/katello/content_unit_indexer.rb +59 -13
  112. data/app/services/katello/product_content_finder.rb +16 -7
  113. data/app/services/katello/pulp3/alternate_content_source.rb +2 -2
  114. data/app/services/katello/pulp3/ansible_collection.rb +1 -0
  115. data/app/services/katello/pulp3/api/content_guard.rb +5 -5
  116. data/app/services/katello/pulp3/api/core.rb +10 -0
  117. data/app/services/katello/pulp3/content_view_version/export.rb +25 -10
  118. data/app/services/katello/pulp3/deb.rb +1 -0
  119. data/app/services/katello/pulp3/docker_manifest.rb +1 -0
  120. data/app/services/katello/pulp3/docker_manifest_list.rb +1 -0
  121. data/app/services/katello/pulp3/docker_tag.rb +1 -0
  122. data/app/services/katello/pulp3/file_unit.rb +1 -0
  123. data/app/services/katello/pulp3/generic_content_unit.rb +1 -0
  124. data/app/services/katello/pulp3/module_stream.rb +1 -0
  125. data/app/services/katello/pulp3/package_group.rb +1 -0
  126. data/app/services/katello/pulp3/repository/apt.rb +30 -13
  127. data/app/services/katello/pulp3/repository.rb +59 -10
  128. data/app/services/katello/pulp3/rpm.rb +3 -2
  129. data/app/services/katello/pulp3/srpm.rb +3 -2
  130. data/app/services/katello/pulp3/task_group.rb +1 -1
  131. data/app/services/katello/registration_manager.rb +19 -17
  132. data/app/services/katello/repository_type_manager.rb +7 -5
  133. data/app/services/katello/smart_proxy_helper.rb +1 -6
  134. data/app/views/foreman/job_templates/upload_profile.erb +5 -0
  135. data/app/views/katello/api/v2/activation_keys/base.json.rabl +1 -1
  136. data/app/views/katello/api/v2/content_views/base.json.rabl +1 -0
  137. data/app/views/katello/api/v2/debs/thindex.json.rabl +6 -0
  138. data/app/views/katello/api/v2/docker_tags/_base.json.rabl +32 -0
  139. data/app/views/katello/api/v2/docker_tags/show.json.rabl +0 -5
  140. data/app/views/katello/api/v2/flatpak_remotes/index.json.rabl +6 -0
  141. data/app/views/katello/api/v2/host_debs/installed_debs.json.rabl +6 -0
  142. data/app/views/katello/api/v2/hosts_bulk_actions/applicable_errata.json.rabl +1 -1
  143. data/app/views/katello/api/v2/hosts_bulk_actions/applicable_erratum.json.rabl +9 -0
  144. data/app/views/katello/api/v2/hosts_bulk_actions/installable_errata.json.rabl +1 -1
  145. data/app/views/katello/api/v2/hosts_bulk_actions/{erratum.json.rabl → installable_erratum.json.rabl} +3 -3
  146. data/app/views/katello/api/v2/subscription_facet/base.json.rabl +1 -1
  147. data/config/initializers/monkeys.rb +1 -0
  148. data/config/routes/api/v2.rb +2 -2
  149. data/config/routes/overrides.rb +2 -7
  150. data/config/routes.rb +2 -0
  151. data/db/migrate/20211019192121_create_cdn_configuration.katello.rb +1 -1
  152. data/db/migrate/20250912000000_add_pulp_prn_fields.rb +73 -0
  153. data/db/migrate/20250912000001_populate_pulp_prn_fields.rb +403 -0
  154. data/db/migrate/20251009142516_remove_auto_attach_from_activation_keys.rb +5 -0
  155. data/db/migrate/20251009142517_remove_autoheal_from_subscription_facets.rb +5 -0
  156. data/db/seeds.d/111-upgrade_tasks.rb +2 -0
  157. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/el.po +2 -2
  158. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +6 -1
  159. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +5 -2
  160. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +5 -2
  161. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +5 -2
  162. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +4 -4
  163. data/lib/katello/permission_creator.rb +2 -2
  164. data/lib/katello/permissions/host_permissions.rb +0 -6
  165. data/lib/katello/plugin.rb +16 -8
  166. data/lib/katello/tasks/jenkins.rake +1 -1
  167. data/lib/katello/tasks/upgrades/4.19/enable_structured_apt_for_deb.rake +87 -0
  168. data/lib/katello/tasks/upgrades/4.19/populate_repository_version_prns.rake +32 -0
  169. data/lib/katello/version.rb +1 -1
  170. data/lib/monkeys/fix_rpm_repository_gpgcheck.rb +38 -0
  171. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  172. data/locale/bn/katello.po +52 -349
  173. data/locale/bn_IN/LC_MESSAGES/katello.mo +0 -0
  174. data/locale/bn_IN/katello.po +52 -349
  175. data/locale/ca/LC_MESSAGES/katello.mo +0 -0
  176. data/locale/ca/katello.po +52 -349
  177. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  178. data/locale/cs/katello.po +54 -350
  179. data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
  180. data/locale/cs_CZ/katello.po +54 -351
  181. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  182. data/locale/de/katello.po +56 -353
  183. data/locale/de_AT/LC_MESSAGES/katello.mo +0 -0
  184. data/locale/de_AT/katello.po +52 -349
  185. data/locale/de_DE/LC_MESSAGES/katello.mo +0 -0
  186. data/locale/de_DE/katello.po +52 -349
  187. data/locale/el/LC_MESSAGES/katello.mo +0 -0
  188. data/locale/el/katello.po +55 -352
  189. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  190. data/locale/en/katello.po +54 -350
  191. data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
  192. data/locale/en_GB/katello.po +53 -350
  193. data/locale/en_US/LC_MESSAGES/katello.mo +0 -0
  194. data/locale/en_US/katello.po +52 -349
  195. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  196. data/locale/es/katello.po +56 -353
  197. data/locale/et_EE/LC_MESSAGES/katello.mo +0 -0
  198. data/locale/et_EE/katello.po +52 -349
  199. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  200. data/locale/fr/katello.po +139 -435
  201. data/locale/gl/LC_MESSAGES/katello.mo +0 -0
  202. data/locale/gl/katello.po +52 -349
  203. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  204. data/locale/gu/katello.po +52 -349
  205. data/locale/he_IL/LC_MESSAGES/katello.mo +0 -0
  206. data/locale/he_IL/katello.po +52 -349
  207. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  208. data/locale/hi/katello.po +52 -349
  209. data/locale/id/LC_MESSAGES/katello.mo +0 -0
  210. data/locale/id/katello.po +52 -349
  211. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  212. data/locale/it/katello.po +53 -350
  213. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  214. data/locale/ja/katello.po +143 -439
  215. data/locale/ka/LC_MESSAGES/katello.mo +0 -0
  216. data/locale/ka/katello.po +56 -353
  217. data/locale/katello.pot +695 -1152
  218. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  219. data/locale/kn/katello.po +52 -349
  220. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  221. data/locale/ko/katello.po +136 -432
  222. data/locale/ml_IN/LC_MESSAGES/katello.mo +0 -0
  223. data/locale/ml_IN/katello.po +52 -349
  224. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  225. data/locale/mr/katello.po +52 -349
  226. data/locale/nl_NL/LC_MESSAGES/katello.mo +0 -0
  227. data/locale/nl_NL/katello.po +52 -349
  228. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  229. data/locale/or/katello.po +52 -349
  230. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  231. data/locale/pa/katello.po +52 -349
  232. data/locale/pl/LC_MESSAGES/katello.mo +0 -0
  233. data/locale/pl/katello.po +52 -349
  234. data/locale/pl_PL/LC_MESSAGES/katello.mo +0 -0
  235. data/locale/pl_PL/katello.po +52 -349
  236. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  237. data/locale/pt/katello.po +52 -349
  238. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  239. data/locale/pt_BR/katello.po +56 -353
  240. data/locale/ro/LC_MESSAGES/katello.mo +0 -0
  241. data/locale/ro/katello.po +52 -349
  242. data/locale/ro_RO/LC_MESSAGES/katello.mo +0 -0
  243. data/locale/ro_RO/katello.po +52 -349
  244. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  245. data/locale/ru/katello.po +54 -351
  246. data/locale/sl/LC_MESSAGES/katello.mo +0 -0
  247. data/locale/sl/katello.po +52 -349
  248. data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
  249. data/locale/sv_SE/katello.po +52 -349
  250. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  251. data/locale/ta/katello.po +52 -349
  252. data/locale/ta_IN/LC_MESSAGES/katello.mo +0 -0
  253. data/locale/ta_IN/katello.po +52 -349
  254. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  255. data/locale/te/katello.po +52 -349
  256. data/locale/tr/LC_MESSAGES/katello.mo +0 -0
  257. data/locale/tr/katello.po +52 -349
  258. data/locale/vi/LC_MESSAGES/katello.mo +0 -0
  259. data/locale/vi/katello.po +52 -349
  260. data/locale/vi_VN/LC_MESSAGES/katello.mo +0 -0
  261. data/locale/vi_VN/katello.po +52 -349
  262. data/locale/zh/LC_MESSAGES/katello.mo +0 -0
  263. data/locale/zh/katello.po +52 -349
  264. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  265. data/locale/zh_CN/katello.po +136 -432
  266. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  267. data/locale/zh_TW/katello.po +54 -351
  268. data/webpack/components/Content/Details/__tests__/__snapshots__/ContentDetails.test.js.snap +2 -2
  269. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeEditModal.js +0 -2
  270. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeEditModal.test.js +0 -2
  271. data/webpack/components/extensions/Hosts/ActionsBar/index.js +1 -0
  272. data/webpack/components/extensions/Hosts/BulkActions/BulkActionsConstants.js +7 -0
  273. data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/BulkChangeHostCollectionsModal.js +388 -0
  274. data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/__tests__/BulkChangeHostCollectionsModal.test.js +640 -0
  275. data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/actions.js +28 -0
  276. data/webpack/components/extensions/Hosts/BulkActions/BulkChangeHostCollectionsModal/index.js +71 -0
  277. data/webpack/components/extensions/Hosts/BulkActions/BulkErrataWizard/BulkErrataWizard.js +1 -1
  278. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/02_BulkPackagesTable.js +10 -3
  279. data/webpack/components/extensions/Hosts/BulkActions/BulkPackagesWizard/BulkPackagesWizard.js +51 -24
  280. data/webpack/components/extensions/Hosts/BulkActions/HostReview.js +7 -0
  281. data/webpack/containers/Application/config.js +11 -1
  282. data/webpack/global_index.js +3 -0
  283. data/webpack/scenes/{BootedContainerImages → ContainerImages/Booted}/BootedContainerImagesConstants.js +1 -1
  284. data/webpack/scenes/{BootedContainerImages → ContainerImages/Booted}/BootedContainerImagesPage.js +7 -43
  285. data/webpack/scenes/{BootedContainerImages → ContainerImages/Booted}/__tests__/bootedContainerImagesPage.test.js +1 -1
  286. data/webpack/scenes/ContainerImages/ContainerImagesPage.js +86 -0
  287. data/webpack/scenes/ContainerImages/LabelsAnnotationsModal.js +105 -0
  288. data/webpack/scenes/ContainerImages/Synced/Details/ManifestDetails.js +218 -0
  289. data/webpack/scenes/ContainerImages/Synced/Details/ManifestDetailsActions.js +15 -0
  290. data/webpack/scenes/ContainerImages/Synced/Details/ManifestDetailsSelectors.js +16 -0
  291. data/webpack/scenes/ContainerImages/Synced/Details/__tests__/ManifestDetails.test.js +395 -0
  292. data/webpack/scenes/ContainerImages/Synced/Details/__tests__/manifestDetails.fixtures.json +43 -0
  293. data/webpack/scenes/ContainerImages/Synced/Details/__tests__/manifestList.fixtures.json +58 -0
  294. data/webpack/scenes/ContainerImages/Synced/Details/index.js +4 -0
  295. data/webpack/scenes/ContainerImages/Synced/SyncedContainerImagesPage.js +359 -0
  296. data/webpack/scenes/ContainerImages/Synced/SyncedContainerImagesPage.scss +21 -0
  297. data/webpack/scenes/ContainerImages/Synced/__tests__/LabelsAnnotationsModal.test.js +69 -0
  298. data/webpack/scenes/ContainerImages/Synced/__tests__/SyncedContainerImagesPage.test.js +335 -0
  299. data/webpack/scenes/ContainerImages/Synced/__tests__/syncedContainerImages.fixtures.json +105 -0
  300. data/webpack/scenes/ContainerImages/TableEmptyState.js +67 -0
  301. data/webpack/scenes/ContainerImages/containerImagesHelpers.js +48 -0
  302. data/webpack/scenes/ContainerImages/index.js +4 -0
  303. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +29 -3
  304. data/webpack/scenes/ContentViews/Create/__tests__/contentViewCreateResult.fixtures.json +1 -0
  305. data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +45 -1
  306. data/webpack/scenes/ContentViews/Delete/__tests__/affectedHosts.fixtures.json +0 -1
  307. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +59 -1
  308. data/webpack/scenes/ContentViews/Details/Filters/CVDebFilterContent.js +1 -0
  309. data/webpack/scenes/ContentViews/Details/Filters/Rules/DebPackage/AddEditDebPackageRuleModal.js +164 -24
  310. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVDebFilterContent.test.js +268 -0
  311. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvDebFilterDetail.fixtures.json +95 -0
  312. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvDebFilterRules.fixtures.json +31 -0
  313. data/webpack/scenes/ContentViews/Details/Filters/__tests__/emptyCVDebFilterRules.fixtures.json +10 -0
  314. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/hosts.fixtures.json +0 -1
  315. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvAffectedHosts.fixture.json +0 -1
  316. data/webpack/scenes/ContentViews/Details/__tests__/contentViewRollingDetail.test.js +15 -0
  317. data/webpack/scenes/ContentViews/Details/__tests__/contentViewRollingDetails.fixtures.json +1 -0
  318. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +9 -0
  319. data/webpack/scenes/FlatpakRemotes/CreateEdit/CreateFlatpakRemoteModal.js +5 -3
  320. data/webpack/scenes/FlatpakRemotes/CreateEdit/EditFlatpakRemotesModal.js +1 -1
  321. data/webpack/scenes/FlatpakRemotes/CreateEdit/FlatpakRemoteform.js +35 -3
  322. data/webpack/scenes/FlatpakRemotes/Details/FlatpakRemoteDetails.js +1 -1
  323. data/webpack/scenes/FlatpakRemotes/Details/RemoteRepositories/RemoteRepositoriesTable.css +3 -0
  324. data/webpack/scenes/FlatpakRemotes/Details/RemoteRepositories/RemoteRepositoriesTable.js +63 -132
  325. data/webpack/scenes/FlatpakRemotes/FlatpakRemotesPage.js +67 -143
  326. data/webpack/scenes/SmartProxy/ExpandableCvDetails.js +10 -2
  327. data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +13 -2
  328. data/webpack/scenes/SmartProxy/SmartProxyContentConstants.js +1 -0
  329. data/webpack/scenes/SmartProxy/SmartProxyExpandableTable.js +8 -2
  330. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.js +67 -1
  331. data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetails.test.js.snap +2 -2
  332. data/webpack/scenes/Subscriptions/SubscriptionConstants.js +0 -2
  333. data/webpack/scenes/Subscriptions/__tests__/__snapshots__/SubscriptionsActions.test.js.snap +2 -2
  334. metadata +83 -55
  335. data/app/lib/actions/katello/host/attach_subscriptions.rb +0 -59
  336. data/app/lib/actions/katello/host/auto_attach_subscriptions.rb +0 -22
  337. data/app/lib/actions/katello/host/remove_subscriptions.rb +0 -50
  338. data/app/lib/actions/katello/organization/simple_content_access/disable.rb +0 -25
  339. data/app/lib/actions/katello/organization/simple_content_access/enable.rb +0 -25
  340. data/app/lib/actions/katello/organization/simple_content_access/toggle.rb +0 -42
  341. data/lib/katello/tasks/migrate_structure_content_for_deb.rake +0 -105
  342. data/lib/katello/tasks/upgrades/4.2/remove_checksum_values.rake +0 -17
  343. data/locale/action_names.rb +0 -186
  344. /data/webpack/scenes/{BootedContainerImages → ContainerImages/Booted}/__tests__/bootedContainerImages.fixtures.js +0 -0
  345. /data/webpack/scenes/{BootedContainerImages → ContainerImages/Booted}/index.js +0 -0
@@ -2,7 +2,6 @@ module Katello
2
2
  class Api::V2::HostSubscriptionsController < Katello::Api::V2::ApiController
3
3
  include Katello::Concerns::Api::V2::ContentOverridesController
4
4
  before_action :find_host, :except => :create
5
- before_action :check_subscriptions, :only => [:add_subscriptions, :remove_subscriptions]
6
5
  before_action :find_content_view_environment, :only => :create
7
6
  before_action :check_registration_services, :only => [:destroy, :create]
8
7
  before_action :find_content_overrides, :only => [:content_override]
@@ -17,10 +16,9 @@ module Katello
17
16
 
18
17
  def_param_group :subscription_facet_attributes do
19
18
  param :release_version, String, :desc => N_("Release version for this Host to use (7Server, 7.1, etc)")
20
- param :autoheal, :bool, :desc => N_("Sets whether the Host will autoheal subscriptions upon checkin")
21
19
  param :purpose_usage, String, :desc => N_("Sets the system purpose usage")
22
20
  param :purpose_role, String, :desc => N_("Sets the system purpose usage")
23
- param :service_level, String, :desc => N_("Service level to be used for autoheal")
21
+ param :service_level, String, :desc => N_("Service level")
24
22
  param :hypervisor_guest_uuids, Array, :desc => N_("List of hypervisor guest uuids")
25
23
  param :installed_products_attributes, Array, :desc => N_("List of products installed on the host") do
26
24
  param_group :installed_products, Api::V2::HostSubscriptionsController
@@ -51,18 +49,6 @@ module Katello
51
49
  full_result_response(presenter.subscriptions)
52
50
  end
53
51
 
54
- api :PUT, "/hosts/:host_id/subscriptions/auto_attach", N_("Trigger an auto-attach of subscriptions"), deprecated: true
55
- param :host_id, Integer, :desc => N_("Id of the host"), :required => true
56
- def auto_attach
57
- deprecate_entitlement_mode_endpoint
58
- if @host.organization.simple_content_access?
59
- fail ::Katello::HttpErrors::BadRequest, _("This host's organization is in Simple Content Access mode. Auto-attach is disabled")
60
- end
61
-
62
- sync_task(::Actions::Katello::Host::AutoAttachSubscriptions, @host)
63
- respond_for_index(:collection => index_response(reload_host: true), :template => "index")
64
- end
65
-
66
52
  api :DELETE, "/hosts/:host_id/subscriptions/", N_("Unregister the host as a subscription consumer")
67
53
  param :host_id, Integer, :desc => N_("Id of the host"), :required => true
68
54
  def destroy
@@ -80,7 +66,7 @@ module Katello
80
66
  param_group :installed_products, ::Katello::Api::V2::HostSubscriptionsController
81
67
  end
82
68
  param :release_version, String, :desc => N_("Release version of the content host")
83
- param :service_level, String, :desc => N_("A service level for auto-healing process, e.g. SELF-SUPPORT")
69
+ param :service_level, String, :desc => N_("Service level, e.g. SELF-SUPPORT")
84
70
  param :lifecycle_environment_id, Integer, :desc => N_("Lifecycle Environment ID"), :required => true
85
71
  param :content_view_id, Integer, :desc => N_("Content View ID"), :required => true
86
72
  def create
@@ -115,45 +101,6 @@ module Katello
115
101
  rhsm_params
116
102
  end
117
103
 
118
- api :PUT, "/hosts/:host_id/subscriptions/remove_subscriptions", N_("Remove subscriptions from a host"), deprecated: true
119
- param :host_id, Integer, :desc => N_("Id of the host"), :required => true
120
- param :subscriptions, Array, :desc => N_("Array of subscriptions to remove") do
121
- param :id, String, :desc => N_("Subscription Pool id"), :required => true
122
- param :quantity, Integer, :desc => N_("If specified, remove the first instance of a subscription with matching id and quantity"), :required => false
123
- end
124
- def remove_subscriptions
125
- deprecate_entitlement_mode_endpoint
126
- #combine the quantities for duplicate pools into PoolWithQuantities objects
127
- pool_id_quantities = params.require(:subscriptions).inject({}) do |new_hash, subscription|
128
- new_hash[subscription['id']] ||= PoolWithQuantities.new(Pool.with_identifier(subscription['id']))
129
- new_hash[subscription['id']].quantities << subscription['quantity']
130
- new_hash
131
- end
132
-
133
- sync_task(::Actions::Katello::Host::RemoveSubscriptions, @host, pool_id_quantities.values)
134
- respond_for_index(:collection => index_response(reload_host: true), :template => "index")
135
- end
136
-
137
- api :PUT, "/hosts/:host_id/subscriptions/add_subscriptions", N_("Add a subscription to a host"), deprecated: true
138
- param :host_id, Integer, :desc => N_("Id of the host"), :required => true
139
- param :subscriptions, Array, :desc => N_("Array of subscriptions to add"), :required => true do
140
- param :id, String, :desc => N_("Subscription Pool id"), :required => true
141
- param :quantity, :number, :desc => N_("Quantity of this subscriptions to add"), :required => true
142
- end
143
- def add_subscriptions
144
- deprecate_entitlement_mode_endpoint
145
- if @host.organization.simple_content_access?
146
- fail ::Katello::HttpErrors::BadRequest, _("This host's organization is in Simple Content Access mode. Attaching subscriptions is disabled.")
147
- end
148
-
149
- pools_with_quantities = params.require(:subscriptions).map do |sub_params|
150
- PoolWithQuantities.new(Pool.with_identifier(sub_params['id']), sub_params['quantity'].to_i)
151
- end
152
-
153
- sync_task(::Actions::Katello::Host::AttachSubscriptions, @host, pools_with_quantities)
154
- respond_for_index(:collection => index_response(reload_host: true), :template => "index")
155
- end
156
-
157
104
  api :GET, "/hosts/:host_id/subscriptions/product_content", N_("Get content and overrides for the host")
158
105
  param :host_id, String, :desc => N_("Id of the host"), :required => true
159
106
  param :content_access_mode_all, :bool, :desc => N_("Get all content available, not just that provided by subscriptions")
@@ -215,10 +162,6 @@ module Katello
215
162
  fail HttpErrors::NotFound, _("Couldn't find specified content view and lifecycle environment.") if @content_view_environment.nil?
216
163
  end
217
164
 
218
- def check_subscriptions
219
- fail HttpErrors::BadRequest, _("subscriptions not specified") if params[:subscriptions].blank?
220
- end
221
-
222
165
  def check_registration_services
223
166
  fail "Unable to register system, not all services available" unless Katello::RegistrationManager.check_registration_services
224
167
  end
@@ -228,7 +171,7 @@ module Katello
228
171
  end
229
172
 
230
173
  def action_permission
231
- if ['add_subscriptions', 'destroy', 'remove_subscriptions', 'auto_attach', 'content_override'].include?(params[:action])
174
+ if ['destroy', 'content_override'].include?(params[:action])
232
175
  :edit
233
176
  elsif ['index', 'events', 'product_content', 'available_release_versions', 'enabled_repositories'].include?(params[:action])
234
177
  :view
@@ -1,5 +1,6 @@
1
1
  module Katello
2
2
  # this is Katello's host bulk actions controller, not to be confused with Foreman's
3
+ # rubocop:disable Metrics/ClassLength
3
4
  class Api::V2::HostsBulkActionsController < Api::V2::ApiController
4
5
  include ::Api::V2::BulkHostsExtension
5
6
  include Katello::Concerns::Api::V2::ContentOverridesController
@@ -13,11 +14,8 @@ module Katello
13
14
  before_action :find_deletable_hosts, only: [:destroy_hosts]
14
15
  before_action :find_readable_hosts, only: [:applicable_errata, :installable_errata, :available_incremental_updates]
15
16
  before_action :find_errata, only: [:available_incremental_updates]
16
- before_action :find_organization, only: [:add_subscriptions]
17
17
  before_action :find_traces, only: [:resolve_traces]
18
18
 
19
- before_action :validate_organization, only: [:add_subscriptions]
20
-
21
19
  # disable *_count fields on erratum rabl, since they perform N+1 queries
22
20
  before_action :disable_erratum_hosts_count
23
21
 
@@ -51,8 +49,14 @@ module Katello
51
49
  host_collection.save!
52
50
 
53
51
  final_count = host_collection.host_ids.count - pre_host_collection_count
54
- display_messages << _("Successfully added %{count} content host(s) to host collection %{host_collection}.") %
55
- {:count => final_count, :host_collection => host_collection.name }
52
+ msg = if final_count == 0
53
+ _("All selected hosts were already members of host collection %{host_collection}.") %
54
+ {:host_collection => host_collection.name }
55
+ else
56
+ _("Added %{count} host(s) to host collection %{host_collection}.") %
57
+ {:count => final_count, :host_collection => host_collection.name }
58
+ end
59
+ display_messages << msg
56
60
  end
57
61
  end
58
62
 
@@ -74,7 +78,7 @@ module Katello
74
78
  host_collection.save!
75
79
 
76
80
  final_count = pre_host_collection_count - host_collection.host_ids.count
77
- display_messages << _("Successfully removed %{count} content host(s) from host collection %{host_collection}.") %
81
+ display_messages << _("Removed %{count} host(s) from host collection %{host_collection}.") %
78
82
  {:count => final_count, :host_collection => host_collection.name }
79
83
  end
80
84
  end
@@ -106,49 +110,6 @@ module Katello
106
110
  respond_for_async :resource => task
107
111
  end
108
112
 
109
- api :PUT, "/hosts/bulk/remove_subscriptions", N_("Remove subscriptions from one or more hosts"), deprecated: true
110
- param_group :bulk_params
111
- param :subscriptions, Array, :desc => N_("Array of subscriptions to remove") do
112
- param :id, String, :desc => N_("Subscription Pool id"), :required => true
113
- param :quantity, Integer, :desc => N_("Quantity of specified subscription to remove"), :required => false
114
- end
115
- def remove_subscriptions
116
- #combine the quantities for duplicate pools into PoolWithQuantities objects
117
- pool_id_quantities = params.require(:subscriptions).inject({}) do |new_hash, subscription|
118
- new_hash[subscription['id']] ||= PoolWithQuantities.new(Pool.find(subscription['id']))
119
- new_hash[subscription['id']].quantities << subscription['quantity']
120
- new_hash
121
- end
122
- task = async_task(::Actions::BulkAction, ::Actions::Katello::Host::RemoveSubscriptions, @hosts, pool_id_quantities.values)
123
- respond_for_async :resource => task
124
- end
125
-
126
- api :PUT, "/hosts/bulk/add_subscriptions", N_("Add subscriptions to one or more hosts"), deprecated: true
127
- param_group :bulk_params
128
- param :subscriptions, Array, :desc => N_("Array of subscriptions to add"), :required => true do
129
- param :id, String, :desc => N_("Subscription Pool id"), :required => true
130
- param :quantity, :number, :desc => N_("Quantity of this subscriptions to add"), :required => true
131
- end
132
- def add_subscriptions
133
- if @organization.simple_content_access?
134
- fail HttpErrors::BadRequest, _("The specified organization is in Simple Content Access mode. Attaching subscriptions is disabled")
135
- end
136
-
137
- pools_with_quantities = params.require(:subscriptions).map do |sub_params|
138
- PoolWithQuantities.new(Pool.find(sub_params['id']), sub_params['quantity'])
139
- end
140
-
141
- task = async_task(::Actions::BulkAction, ::Actions::Katello::Host::AttachSubscriptions, @hosts, pools_with_quantities)
142
- respond_for_async :resource => task
143
- end
144
-
145
- api :PUT, "/hosts/bulk/auto_attach", N_("Trigger an auto-attach of subscriptions on one or more hosts"), deprecated: true
146
- param_group :bulk_params
147
- def auto_attach
148
- task = async_task(::Actions::BulkAction, ::Actions::Katello::Host::AutoAttachSubscriptions, @hosts)
149
- respond_for_async :resource => task
150
- end
151
-
152
113
  api :PUT, "/hosts/bulk/content_overrides", N_("Set content overrides to one or more hosts")
153
114
  param_group :bulk_params
154
115
  param :content_overrides, Array, :desc => N_("Array of Content override parameters") do
@@ -310,10 +271,6 @@ module Katello
310
271
  find_bulk_hosts(:destroy_hosts, params)
311
272
  end
312
273
 
313
- def validate_organization
314
- fail HttpErrors::BadRequest, _("Organization ID is required") if @organization.blank?
315
- end
316
-
317
274
  def validate_host_collection_membership_limit
318
275
  max_hosts_exceeded = []
319
276
  host_ids = @hosts.map(&:id)
@@ -676,7 +676,6 @@ Alternatively, use the 'force' parameter to regenerate metadata locally. On the
676
676
  root.deb_releases = repo_params[:deb_releases] if repo_params[:deb_releases]
677
677
  root.deb_components = repo_params[:deb_components] if repo_params[:deb_components]
678
678
  root.deb_architectures = repo_params[:deb_architectures] if repo_params[:deb_architectures]
679
- root.content_id = 'INITIAL_DUMMY_VALUE' unless Setting['deb_enable_structured_apt']
680
679
  end
681
680
 
682
681
  if root.ansible_collection?
@@ -24,6 +24,9 @@ module Katello
24
24
  if taxonomy_class == Organization
25
25
  begin
26
26
  @taxonomy = Organization.new(resource_params)
27
+ # Raise validation error early if invalid
28
+ @taxonomy.validate!
29
+
27
30
  ::Katello::OrganizationCreator.new(@taxonomy).create!
28
31
  @taxonomy.reload
29
32
  switch_taxonomy
@@ -3,7 +3,6 @@ module Actions
3
3
  class ActivationKey::Create < Candlepin::Abstract
4
4
  input_format do
5
5
  param :organization_label
6
- param :auto_attach
7
6
  param :service_level
8
7
  param :release_version
9
8
  param :purpose_role
@@ -13,7 +12,6 @@ module Actions
13
12
  def run
14
13
  output[:response] = ::Katello::Resources::Candlepin::ActivationKey.create(::Katello::Util::Model.uuid,
15
14
  input[:organization_label],
16
- input[:auto_attach],
17
15
  input[:service_level],
18
16
  input[:release_version],
19
17
  input[:purpose_role],
@@ -6,7 +6,6 @@ module Actions
6
6
  param :cp_id
7
7
  param :release_version
8
8
  param :service_level
9
- param :auto_attach
10
9
  param :purpose_role
11
10
  param :purpose_usage
12
11
  end
@@ -16,7 +15,6 @@ module Actions
16
15
  input[:cp_id],
17
16
  input[:release_version],
18
17
  input[:service_level],
19
- input[:auto_attach],
20
18
  input[:purpose_role],
21
19
  input[:purpose_usage])
22
20
  end
@@ -16,12 +16,10 @@ module Actions
16
16
  def run
17
17
  content_url = input[:content_url]
18
18
  if input[:type] == ::Katello::Repository::DEB_TYPE
19
- # We must retrieve the repository in the run phase, so the latest Pulp version_href is
20
- # already set. This is needed to retrieve the latest repository.deb_content_url_options!
19
+ # We must retrieve the deb? repository in the run phase, so the latest Pulp version_href
20
+ # is set. This is needed to retrieve the latest repository.deb_content_url_options!
21
21
  repository = ::Katello::Repository.find(input[:repository_id])
22
- if repository.deb_using_structured_apt?
23
- content_url += repository.deb_content_url_options
24
- end
22
+ content_url += repository.deb_content_url_options
25
23
  end
26
24
 
27
25
  output[:response] = ::Katello::Resources::Candlepin::Content.
@@ -16,11 +16,10 @@ module Actions
16
16
  end
17
17
 
18
18
  def finalize
19
+ # finalize, because Katello::Product::ContentCreate updates repository.content_id during finalize!
19
20
  content_url = input[:content_url]
20
- # We must retrieve the repository in the finalize phase, because Katello::Product::ContentCreate
21
- # only updates the repository.content_id in the finalize phase!
22
21
  repository = ::Katello::Repository.find(input[:repository_id])
23
- if repository.deb_using_structured_apt?
22
+ if repository.deb?
24
23
  content_url += repository.deb_content_url_options
25
24
  end
26
25
 
@@ -2,7 +2,7 @@ module Actions
2
2
  module Helpers
3
3
  module RollingCVRepos
4
4
  def find_related_rolling_repos(repo)
5
- repo.root.repositories.in_environment(repo.environment).where(
5
+ repo.root.repositories.where(
6
6
  content_view_version: ::Katello::ContentViewVersion.where(content_view: ::Katello::ContentView.rolling)
7
7
  )
8
8
  end
@@ -6,7 +6,6 @@ module Actions
6
6
  activation_key.save!
7
7
  cp_create = plan_action(Candlepin::ActivationKey::Create,
8
8
  organization_label: activation_key.organization.label,
9
- auto_attach: activation_key.auto_attach,
10
9
  service_level: params[:service_level],
11
10
  release_version: activation_key.release_version,
12
11
  purpose_role: activation_key.purpose_role,
@@ -12,14 +12,12 @@ module Actions
12
12
  cp_id: activation_key.cp_id,
13
13
  release_version: activation_key.release_version,
14
14
  service_level: activation_key.service_level,
15
- auto_attach: activation_key.auto_attach,
16
15
  purpose_role: activation_key.purpose_role,
17
16
  purpose_usage: activation_key.purpose_usage)
18
17
  end
19
18
  end
20
19
 
21
20
  def update_candlepin?(activation_key, activation_key_params)
22
- cp_changed?(activation_key.auto_attach, activation_key_params[:auto_attach]) ||
23
21
  cp_changed?(activation_key.service_level, activation_key_params[:service_level]) ||
24
22
  cp_changed?(activation_key.release_version, activation_key_params[:release_version]) ||
25
23
  cp_changed?(activation_key.purpose_role, activation_key_params[:purpose_role]) ||
@@ -2,7 +2,6 @@ module Actions
2
2
  module Katello
3
3
  module CapsuleContent
4
4
  class SyncCapsule < ::Actions::EntryAction
5
- include Helpers::RollingCVRepos
6
5
  # rubocop:disable Metrics/MethodLength
7
6
  execution_plan_hooks.use :update_content_counts, :on => :success
8
7
  def plan(smart_proxy, options = {})
@@ -59,11 +58,7 @@ module Actions
59
58
  smart_proxy_helper.lifecycle_environment_check(environment, repository)
60
59
  if repository
61
60
  if skip_metatadata_check || !repository.smart_proxy_sync_histories.where(:smart_proxy_id => smart_proxy).any? { |sph| !sph.finished_at.nil? }
62
- if repository.library_instance?
63
- [repository] + find_related_rolling_repos(repository)
64
- else
65
- [repository]
66
- end
61
+ [repository]
67
62
  end
68
63
  else
69
64
  repositories = smart_proxy_helper.repositories_available_to_capsule(environment, content_view).by_rpm_count
@@ -6,7 +6,7 @@ module Actions
6
6
  action_subject gpg_key
7
7
  gpg_key.update!(gpg_key_params)
8
8
  gpg_key.repositories.each do |repository|
9
- if repository.content_type == ::Katello::Repository::DEB_TYPE
9
+ if repository.deb?
10
10
  plan_action(::Actions::Katello::Repository::RefreshRepository, repository)
11
11
  end
12
12
  end
@@ -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
@@ -59,13 +59,6 @@ module Actions
59
59
  if options[:importing]
60
60
  handle_importing_content(version, options[:path], options[:metadata])
61
61
  elsif options[:syncable]
62
- if separated_repo_map[:pulp3_deb_multicopy].keys.flatten.present?
63
- plan_action(::Actions::Katello::Repository::MultiCloneToVersion, separated_repo_map[:pulp3_deb_multicopy], version)
64
- end
65
- if separated_repo_map[:pulp3_yum_multicopy].keys.flatten.present?
66
- plan_action(::Actions::Katello::Repository::MultiCloneToVersion, separated_repo_map[:pulp3_yum_multicopy], version)
67
- end
68
-
69
62
  # Create import history for syncable imports so they display under hammer's content-import list command.
70
63
  if options[:path] && options[:metadata]
71
64
  plan_action(
@@ -76,6 +69,13 @@ module Actions
76
69
  content_view_name: version.content_view.name
77
70
  )
78
71
  end
72
+ else
73
+ if separated_repo_map[:pulp3_deb_multicopy].keys.flatten.present?
74
+ plan_action(::Actions::Katello::Repository::MultiCloneToVersion, separated_repo_map[:pulp3_deb_multicopy], version)
75
+ end
76
+ if separated_repo_map[:pulp3_yum_multicopy].keys.flatten.present?
77
+ plan_action(::Actions::Katello::Repository::MultiCloneToVersion, separated_repo_map[:pulp3_yum_multicopy], version)
78
+ end
79
79
  end
80
80
 
81
81
  concurrence do
@@ -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)