katello 4.15.0 → 4.16.0.rc2

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 (513) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/common/katello_object.js +2 -2
  3. data/app/assets/javascripts/katello/hosts/host_and_hostgroup_edit.js +9 -8
  4. data/app/assets/javascripts/katello/locale/bn/katello.js +248 -263
  5. data/app/assets/javascripts/katello/locale/bn_IN/katello.js +247 -262
  6. data/app/assets/javascripts/katello/locale/ca/katello.js +247 -262
  7. data/app/assets/javascripts/katello/locale/cs/katello.js +521 -536
  8. data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +253 -268
  9. data/app/assets/javascripts/katello/locale/de/katello.js +248 -263
  10. data/app/assets/javascripts/katello/locale/de_AT/katello.js +247 -262
  11. data/app/assets/javascripts/katello/locale/de_DE/katello.js +249 -264
  12. data/app/assets/javascripts/katello/locale/el/katello.js +251 -266
  13. data/app/assets/javascripts/katello/locale/en/katello.js +253 -268
  14. data/app/assets/javascripts/katello/locale/en_GB/katello.js +263 -278
  15. data/app/assets/javascripts/katello/locale/en_US/katello.js +247 -262
  16. data/app/assets/javascripts/katello/locale/es/katello.js +248 -263
  17. data/app/assets/javascripts/katello/locale/et_EE/katello.js +247 -262
  18. data/app/assets/javascripts/katello/locale/fr/katello.js +250 -265
  19. data/app/assets/javascripts/katello/locale/gl/katello.js +247 -262
  20. data/app/assets/javascripts/katello/locale/gu/katello.js +249 -264
  21. data/app/assets/javascripts/katello/locale/he_IL/katello.js +249 -264
  22. data/app/assets/javascripts/katello/locale/hi/katello.js +248 -263
  23. data/app/assets/javascripts/katello/locale/id/katello.js +261 -275
  24. data/app/assets/javascripts/katello/locale/it/katello.js +252 -267
  25. data/app/assets/javascripts/katello/locale/ja/katello.js +250 -265
  26. data/app/assets/javascripts/katello/locale/ka/katello.js +247 -262
  27. data/app/assets/javascripts/katello/locale/kn/katello.js +248 -263
  28. data/app/assets/javascripts/katello/locale/ko/katello.js +248 -263
  29. data/app/assets/javascripts/katello/locale/ml_IN/katello.js +247 -262
  30. data/app/assets/javascripts/katello/locale/mr/katello.js +248 -263
  31. data/app/assets/javascripts/katello/locale/nl_NL/katello.js +252 -267
  32. data/app/assets/javascripts/katello/locale/or/katello.js +248 -263
  33. data/app/assets/javascripts/katello/locale/pa/katello.js +248 -263
  34. data/app/assets/javascripts/katello/locale/pl/katello.js +248 -263
  35. data/app/assets/javascripts/katello/locale/pl_PL/katello.js +247 -262
  36. data/app/assets/javascripts/katello/locale/pt/katello.js +248 -263
  37. data/app/assets/javascripts/katello/locale/pt_BR/katello.js +248 -263
  38. data/app/assets/javascripts/katello/locale/ro/katello.js +247 -262
  39. data/app/assets/javascripts/katello/locale/ro_RO/katello.js +247 -262
  40. data/app/assets/javascripts/katello/locale/ru/katello.js +253 -268
  41. data/app/assets/javascripts/katello/locale/sl/katello.js +247 -262
  42. data/app/assets/javascripts/katello/locale/sv_SE/katello.js +248 -263
  43. data/app/assets/javascripts/katello/locale/ta/katello.js +248 -263
  44. data/app/assets/javascripts/katello/locale/ta_IN/katello.js +247 -262
  45. data/app/assets/javascripts/katello/locale/te/katello.js +248 -263
  46. data/app/assets/javascripts/katello/locale/tr/katello.js +247 -262
  47. data/app/assets/javascripts/katello/locale/vi/katello.js +247 -262
  48. data/app/assets/javascripts/katello/locale/vi_VN/katello.js +247 -262
  49. data/app/assets/javascripts/katello/locale/zh/katello.js +247 -262
  50. data/app/assets/javascripts/katello/locale/zh_CN/katello.js +250 -265
  51. data/app/assets/javascripts/katello/locale/zh_TW/katello.js +255 -270
  52. data/app/assets/javascripts/katello/sync_management/sync_management.js +16 -2
  53. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +46 -10
  54. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +1 -1
  55. data/app/controllers/katello/api/v2/activation_keys_controller.rb +4 -9
  56. data/app/controllers/katello/api/v2/content_uploads_controller.rb +2 -1
  57. data/app/controllers/katello/api/v2/content_view_filter_rules_controller.rb +3 -1
  58. data/app/controllers/katello/api/v2/content_views_controller.rb +4 -1
  59. data/app/controllers/katello/api/v2/environments_controller.rb +4 -0
  60. data/app/controllers/katello/api/v2/errata_controller.rb +12 -1
  61. data/app/controllers/katello/api/v2/flatpak_remote_repositories_controller.rb +81 -0
  62. data/app/controllers/katello/api/v2/flatpak_remotes_controller.rb +86 -0
  63. data/app/controllers/katello/api/v2/host_bootc_images_controller.rb +71 -0
  64. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +4 -6
  65. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +3 -5
  66. data/app/controllers/katello/api/v2/repositories_controller.rb +18 -3
  67. data/app/controllers/katello/concerns/api/v2/hosts_controller_extensions.rb +0 -8
  68. data/app/controllers/katello/concerns/api/v2/http_proxies_controller_extensions.rb +17 -0
  69. data/app/controllers/katello/concerns/http_proxies_controller_extensions.rb +20 -0
  70. data/app/controllers/katello/sync_management_controller.rb +6 -2
  71. data/app/helpers/katello/content_source_helper.rb +8 -1
  72. data/app/helpers/katello/content_view_helper.rb +3 -1
  73. data/app/lib/actions/candlepin/activation_key/create.rb +1 -3
  74. data/app/lib/actions/candlepin/activation_key/update.rb +1 -3
  75. data/app/lib/actions/candlepin/environment/set_content.rb +17 -4
  76. data/app/lib/actions/katello/activation_key/create.rb +1 -2
  77. data/app/lib/actions/katello/activation_key/update.rb +2 -4
  78. data/app/lib/actions/katello/capsule_content/refresh_repos.rb +7 -1
  79. data/app/lib/actions/katello/content_view/presenters/incremental_updates_presenter.rb +3 -2
  80. data/app/lib/actions/katello/content_view/publish.rb +7 -2
  81. data/app/lib/actions/katello/content_view_environment/reassign_objects.rb +11 -2
  82. data/app/lib/actions/katello/content_view_version/incremental_update.rb +31 -22
  83. data/app/lib/actions/katello/flatpak/mirror_remote_repository.rb +30 -0
  84. data/app/lib/actions/katello/flatpak/scan_remote.rb +17 -12
  85. data/app/lib/actions/katello/host/update_system_purpose.rb +1 -6
  86. data/app/lib/actions/pulp3/orchestration/repository/import_upload.rb +18 -2
  87. data/app/lib/actions/pulp3/orchestration/repository/multi_copy_all_units.rb +5 -0
  88. data/app/lib/actions/pulp3/repository/multi_copy_units.rb +4 -0
  89. data/app/lib/katello/api/v2/rendering.rb +2 -1
  90. data/app/lib/katello/concerns/base_template_scope_extensions.rb +3 -4
  91. data/app/lib/katello/concerns/bookmark_controller_validator_extensions.rb +13 -0
  92. data/app/lib/katello/resources/candlepin/activation_key.rb +3 -5
  93. data/app/lib/katello/resources/candlepin/product.rb +2 -1
  94. data/app/lib/katello/util/cveak_migrator.rb +3 -2
  95. data/app/lib/katello/validators/alternate_content_source_path_validator.rb +2 -2
  96. data/app/lib/katello/validators/container_image_name_validator.rb +1 -1
  97. data/app/lib/katello/validators/content_validator.rb +1 -1
  98. data/app/lib/katello/validators/content_view_environment_coherent_default_validator.rb +2 -2
  99. data/app/lib/katello/validators/content_view_environment_org_validator.rb +2 -2
  100. data/app/lib/katello/validators/content_view_environment_validator.rb +3 -3
  101. data/app/lib/katello/validators/content_view_erratum_filter_rule_validator.rb +12 -12
  102. data/app/lib/katello/validators/content_view_filter_version_validator.rb +1 -1
  103. data/app/lib/katello/validators/generated_content_view_validator.rb +1 -1
  104. data/app/lib/katello/validators/gpg_key_content_type_validator.rb +2 -2
  105. data/app/lib/katello/validators/gpg_key_content_validator.rb +5 -5
  106. data/app/lib/katello/validators/katello_label_format_validator.rb +4 -4
  107. data/app/lib/katello/validators/katello_name_format_validator.rb +2 -2
  108. data/app/lib/katello/validators/katello_url_format_validator.rb +1 -1
  109. data/app/lib/katello/validators/library_presence_validator.rb +1 -1
  110. data/app/lib/katello/validators/no_trailing_space_validator.rb +1 -1
  111. data/app/lib/katello/validators/non_library_environment_validator.rb +1 -1
  112. data/app/lib/katello/validators/not_in_library_validator.rb +1 -1
  113. data/app/lib/katello/validators/path_descendents_validator.rb +1 -1
  114. data/app/lib/katello/validators/prior_validator.rb +1 -1
  115. data/app/lib/katello/validators/product_unique_attribute_validator.rb +1 -1
  116. data/app/lib/katello/validators/repo_disablement_validator.rb +2 -2
  117. data/app/lib/katello/validators/root_repository_unique_attribute_validator.rb +1 -1
  118. data/app/lib/katello/validators/self_reference_environment_validator.rb +1 -1
  119. data/app/lib/katello/validators/unique_field_in_org.rb +1 -1
  120. data/app/models/katello/activation_key.rb +6 -17
  121. data/app/models/katello/authorization/flatpak_remote.rb +33 -0
  122. data/app/models/katello/concerns/content_facet_host_extensions.rb +2 -1
  123. data/app/models/katello/concerns/host_managed_extensions.rb +8 -5
  124. data/app/models/katello/concerns/http_proxy_extensions.rb +4 -0
  125. data/app/models/katello/concerns/smart_proxy_extensions.rb +30 -6
  126. data/app/models/katello/concerns/subscription_facet_host_extensions.rb +0 -8
  127. data/app/models/katello/content_view.rb +6 -4
  128. data/app/models/katello/content_view_erratum_filter.rb +18 -2
  129. data/app/models/katello/content_view_version.rb +6 -0
  130. data/app/models/katello/docker_manifest.rb +8 -0
  131. data/app/models/katello/docker_manifest_list.rb +8 -0
  132. data/app/models/katello/erratum.rb +8 -2
  133. data/app/models/katello/flatpak_remote.rb +16 -0
  134. data/app/models/katello/flatpak_remote_repository.rb +18 -0
  135. data/app/models/katello/flatpak_remote_repository_manifest.rb +4 -0
  136. data/app/models/katello/glue/candlepin/pool.rb +1 -1
  137. data/app/models/katello/glue/pulp/repos.rb +12 -1
  138. data/app/models/katello/host/content_facet.rb +42 -3
  139. data/app/models/katello/host/subscription_facet.rb +4 -12
  140. data/app/models/katello/repository.rb +22 -8
  141. data/app/models/katello/rhel_lifecycle_status.rb +6 -0
  142. data/app/models/katello/root_repository.rb +6 -8
  143. data/app/models/katello/upstream_pool.rb +1 -0
  144. data/app/overrides/add_organization_attributes.rb +6 -0
  145. data/app/services/katello/product_content_finder.rb +2 -1
  146. data/app/services/katello/pulp3/content_view_version/importable_repositories.rb +1 -1
  147. data/app/services/katello/pulp3/docker_manifest.rb +3 -2
  148. data/app/services/katello/pulp3/docker_manifest_list.rb +3 -2
  149. data/app/services/katello/pulp3/repository/ansible_collection.rb +8 -1
  150. data/app/services/katello/pulp3/repository/apt.rb +37 -21
  151. data/app/services/katello/pulp3/repository/file.rb +4 -2
  152. data/app/services/katello/pulp3/repository.rb +4 -0
  153. data/app/services/katello/pulp3/task.rb +2 -2
  154. data/app/views/foreman/job_templates/bootc_action.erb +26 -0
  155. data/app/views/foreman/job_templates/bootc_rollback.erb +13 -0
  156. data/app/views/foreman/job_templates/bootc_status.erb +13 -0
  157. data/app/views/foreman/job_templates/bootc_switch.erb +13 -0
  158. data/app/views/foreman/job_templates/bootc_upgrade.erb +13 -0
  159. data/app/views/foreman/job_templates/flatpak_install.erb +23 -0
  160. data/app/views/foreman/job_templates/flatpak_login_action.erb +30 -0
  161. data/app/views/foreman/job_templates/flatpak_setup.erb +27 -0
  162. data/app/views/foreman/job_templates/install_errata_by_search_query.erb +1 -1
  163. data/app/views/foreman/job_templates/install_errata_by_search_query_-_katello_ansible_default.erb +1 -1
  164. data/app/views/foreman/job_templates/resolve_traces_-_katello_ansible_default.erb +1 -1
  165. data/app/views/foreman/job_templates/update_packages_by_search_query_-_katello_ansible_default.erb +1 -1
  166. data/app/views/katello/api/v2/activation_keys/base.json.rabl +0 -4
  167. data/app/views/katello/api/v2/content_facet/base.json.rabl +2 -1
  168. data/app/views/katello/api/v2/content_facet/show.json.rabl +2 -0
  169. data/app/views/katello/api/v2/content_view_filter_rules/show.json.rabl +1 -0
  170. data/app/views/katello/api/v2/content_view_versions/base.json.rabl +5 -1
  171. data/app/views/katello/api/v2/docker_manifest_lists/show.json.rabl +1 -1
  172. data/app/views/katello/api/v2/docker_manifests/show.json.rabl +1 -1
  173. data/app/views/katello/api/v2/flatpak_remote_repositories/base.json.rabl +4 -0
  174. data/app/views/katello/api/v2/flatpak_remote_repositories/index.json.rabl +7 -0
  175. data/app/views/katello/api/v2/flatpak_remote_repositories/show.json.rabl +13 -0
  176. data/app/views/katello/api/v2/flatpak_remotes/base.json.rabl +5 -0
  177. data/app/views/katello/api/v2/flatpak_remotes/index.json.rabl +8 -0
  178. data/app/views/katello/api/v2/flatpak_remotes/permissions.json.rabl +11 -0
  179. data/app/views/katello/api/v2/flatpak_remotes/show.json.rabl +3 -0
  180. data/app/views/katello/api/v2/hosts/base.json.rabl +0 -8
  181. data/app/views/katello/api/v2/hosts/os_attributes.json.rabl +13 -0
  182. data/app/views/katello/api/v2/http_proxies/show.json.rabl +1 -0
  183. data/app/views/katello/api/v2/repositories/base.json.rabl +1 -0
  184. data/app/views/katello/api/v2/repositories/show.json.rabl +1 -0
  185. data/app/views/katello/api/v2/subscription_facet/base.json.rabl +0 -4
  186. data/app/views/katello/api/v2/subscriptions/show.json.rabl +1 -1
  187. data/app/views/overrides/activation_keys/_host_environment_select.html.erb +2 -1
  188. data/app/views/overrides/activation_keys/_host_synced_content_select.html.erb +10 -4
  189. data/app/views/overrides/http_proxies/_update_setting_input.html.erb +18 -0
  190. data/app/views/overrides/organizations/_step_1_override.html.erb +5 -0
  191. data/config/initializers/monkeys.rb +0 -1
  192. data/config/initializers/pagelets.rb +6 -0
  193. data/config/routes/api/registry.rb +1 -0
  194. data/config/routes/api/v2.rb +21 -0
  195. data/config/routes/overrides.rb +1 -0
  196. data/config/routes.rb +2 -0
  197. data/db/migrate/20190605014649_add_purpose_addons.rb +0 -12
  198. data/db/migrate/20200213184848_create_evr_type.rb +126 -1
  199. data/db/migrate/20200818192230_update_system_purpose_status.rb +0 -1
  200. data/db/migrate/20240207191223_remove_entitlement_mode_host_statuses.rb +0 -1
  201. data/db/migrate/20240924161240_katello_recreate_evr_constructs.rb +160 -0
  202. data/db/migrate/20241022121706_add_sync_dependencies_option.rb +5 -0
  203. data/db/migrate/20241101144625_remove_system_purpose_addons.rb +9 -0
  204. data/db/migrate/20241107002541_add_registry_url_to_katello_flatpak_remotes.rb +5 -0
  205. data/db/migrate/20241112145802_add_manifest_entity_to_content_facets.rb +7 -0
  206. data/db/migrate/20241120213713_add_allow_other_types_to_content_view_erratum_filter_rules.rb +6 -0
  207. data/db/migrate/20241206183052_add_content_type_to_container_manifests_and_lists.rb +9 -0
  208. data/db/seeds.d/75-job_templates.rb +5 -1
  209. data/engines/bastion/vendor/assets/javascripts/bastion/angular/angular.js +2 -2
  210. data/engines/bastion/vendor/assets/javascripts/bastion/angular-bootstrap/ui-bootstrap-tpls.js +3 -3
  211. data/engines/bastion/vendor/assets/javascripts/bastion/angular-bootstrap/ui-bootstrap.js +3 -3
  212. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-details-info.controller.js +0 -5
  213. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-details.controller.js +1 -41
  214. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-info.html +0 -12
  215. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/new/views/activation-key-new.html +2 -1
  216. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/common/views/subscription-add-or-remove.html +1 -1
  217. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-release-version-modal.controller.js +3 -1
  218. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-system-purpose-modal.controller.js +1 -41
  219. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-traces-modal.controller.js +1 -1
  220. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-errata-modal.html +2 -2
  221. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-release-version-modal.html +1 -1
  222. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-subscriptions-modal.html +2 -2
  223. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-system-purpose-modal.html +0 -13
  224. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-errata.html +1 -1
  225. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details-info.controller.js +0 -5
  226. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details.controller.js +1 -35
  227. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +2 -14
  228. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-provisioning-info.html +1 -1
  229. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +2 -2
  230. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/debs.controller.js +46 -22
  231. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/deb-content-views.controller.js +2 -1
  232. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/views/debs.html +4 -0
  233. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-content-views.html +1 -1
  234. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-details.html +1 -1
  235. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-errata.html +1 -1
  236. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/views/errata-tasks-list.html +2 -1
  237. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +85 -29
  238. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn.po +338 -93
  239. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn_IN.po +340 -95
  240. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ca.po +340 -95
  241. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/cs_CZ.po +341 -96
  242. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +31 -54
  243. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_AT.po +338 -93
  244. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_DE.po +338 -93
  245. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/el.po +341 -96
  246. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_GB.po +349 -104
  247. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_US.po +338 -93
  248. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +33 -56
  249. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/et_EE.po +338 -93
  250. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +80 -68
  251. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gl.po +340 -95
  252. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gu.po +340 -95
  253. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/he_IL.po +339 -111
  254. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/hi.po +340 -95
  255. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/id.po +379 -130
  256. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +342 -103
  257. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +70 -83
  258. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ka.po +84 -90
  259. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/kn.po +340 -95
  260. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +130 -138
  261. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ml_IN.po +338 -93
  262. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/mr.po +340 -95
  263. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/nl_NL.po +343 -97
  264. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/or.po +340 -95
  265. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pa.po +340 -95
  266. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl.po +340 -95
  267. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl_PL.po +338 -93
  268. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt.po +338 -93
  269. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +40 -63
  270. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro.po +338 -93
  271. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro_RO.po +338 -93
  272. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +343 -102
  273. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sl.po +338 -93
  274. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sv_SE.po +340 -95
  275. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta.po +338 -93
  276. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta_IN.po +340 -95
  277. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/te.po +340 -95
  278. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/tr.po +338 -93
  279. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi.po +338 -93
  280. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi_VN.po +338 -93
  281. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh.po +338 -93
  282. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +70 -83
  283. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +362 -105
  284. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +29 -29
  285. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/views/package-info.html +1 -1
  286. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/bulk/products-bulk-advanced-sync-modal.controller.js +1 -1
  287. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/bulk/views/products-bulk-sync-plan-modal.html +2 -2
  288. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +24 -8
  289. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-tasks.html +2 -1
  290. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +2 -2
  291. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +21 -8
  292. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/os-versions.service.js +1 -0
  293. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/views/product-info.html +3 -3
  294. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/views/product-tasks.html +2 -1
  295. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/views/discovery-create.html +4 -2
  296. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/views/discovery.html +2 -1
  297. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.controller.js +3 -3
  298. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/views/partials/product-table-sync-status.html +1 -1
  299. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/subscription-start-date.html +1 -1
  300. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/views/sync-plan-info.html +1 -1
  301. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/views/sync-plans.html +2 -2
  302. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/tasks/tasks-table.directive.js +2 -1
  303. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/tasks/views/task-details.html +2 -2
  304. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/tasks/views/tasks-index.html +1 -1
  305. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/tasks/views/tasks-table.html +1 -1
  306. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/tasks/views/user-tasks-table.html +1 -1
  307. data/lib/katello/engine.rb +6 -0
  308. data/lib/katello/permission_creator.rb +37 -0
  309. data/lib/katello/permissions/host_permissions.rb +2 -0
  310. data/lib/katello/permissions/registry_permissions.rb +1 -0
  311. data/lib/katello/plugin.rb +18 -1
  312. data/lib/katello/repository_types/docker.rb +0 -1
  313. data/lib/katello/repository_types/python.rb +1 -1
  314. data/lib/katello/version.rb +1 -1
  315. data/lib/katello.rb +2 -0
  316. data/locale/Makefile +20 -24
  317. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  318. data/locale/bn/katello.po +248 -263
  319. data/locale/bn_IN/LC_MESSAGES/katello.mo +0 -0
  320. data/locale/bn_IN/katello.po +247 -262
  321. data/locale/ca/LC_MESSAGES/katello.mo +0 -0
  322. data/locale/ca/katello.po +247 -262
  323. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  324. data/locale/cs/katello.po +524 -799
  325. data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
  326. data/locale/cs_CZ/katello.po +254 -269
  327. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  328. data/locale/de/katello.po +248 -263
  329. data/locale/de_AT/LC_MESSAGES/katello.mo +0 -0
  330. data/locale/de_AT/katello.po +247 -262
  331. data/locale/de_DE/LC_MESSAGES/katello.mo +0 -0
  332. data/locale/de_DE/katello.po +250 -265
  333. data/locale/el/LC_MESSAGES/katello.mo +0 -0
  334. data/locale/el/katello.po +252 -267
  335. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  336. data/locale/en/katello.po +257 -271
  337. data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
  338. data/locale/en_GB/katello.po +264 -279
  339. data/locale/en_US/LC_MESSAGES/katello.mo +0 -0
  340. data/locale/en_US/katello.po +247 -262
  341. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  342. data/locale/es/katello.po +248 -263
  343. data/locale/et_EE/LC_MESSAGES/katello.mo +0 -0
  344. data/locale/et_EE/katello.po +247 -262
  345. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  346. data/locale/fr/katello.po +250 -265
  347. data/locale/gl/LC_MESSAGES/katello.mo +0 -0
  348. data/locale/gl/katello.po +247 -262
  349. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  350. data/locale/gu/katello.po +250 -265
  351. data/locale/he_IL/LC_MESSAGES/katello.mo +0 -0
  352. data/locale/he_IL/katello.po +249 -264
  353. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  354. data/locale/hi/katello.po +248 -263
  355. data/locale/id/LC_MESSAGES/katello.mo +0 -0
  356. data/locale/id/katello.po +264 -275
  357. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  358. data/locale/it/katello.po +254 -270
  359. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  360. data/locale/ja/katello.po +250 -265
  361. data/locale/ka/LC_MESSAGES/katello.mo +0 -0
  362. data/locale/ka/katello.po +247 -262
  363. data/locale/katello.pot +1216 -1215
  364. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  365. data/locale/kn/katello.po +248 -263
  366. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  367. data/locale/ko/katello.po +248 -263
  368. data/locale/ml_IN/LC_MESSAGES/katello.mo +0 -0
  369. data/locale/ml_IN/katello.po +247 -262
  370. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  371. data/locale/mr/katello.po +248 -263
  372. data/locale/nl_NL/LC_MESSAGES/katello.mo +0 -0
  373. data/locale/nl_NL/katello.po +254 -268
  374. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  375. data/locale/or/katello.po +248 -263
  376. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  377. data/locale/pa/katello.po +248 -263
  378. data/locale/pl/LC_MESSAGES/katello.mo +0 -0
  379. data/locale/pl/katello.po +249 -264
  380. data/locale/pl_PL/LC_MESSAGES/katello.mo +0 -0
  381. data/locale/pl_PL/katello.po +247 -262
  382. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  383. data/locale/pt/katello.po +248 -263
  384. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  385. data/locale/pt_BR/katello.po +248 -263
  386. data/locale/ro/LC_MESSAGES/katello.mo +0 -0
  387. data/locale/ro/katello.po +247 -262
  388. data/locale/ro_RO/LC_MESSAGES/katello.mo +0 -0
  389. data/locale/ro_RO/katello.po +247 -262
  390. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  391. data/locale/ru/katello.po +255 -270
  392. data/locale/sl/LC_MESSAGES/katello.mo +0 -0
  393. data/locale/sl/katello.po +247 -262
  394. data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
  395. data/locale/sv_SE/katello.po +249 -264
  396. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  397. data/locale/ta/katello.po +248 -263
  398. data/locale/ta_IN/LC_MESSAGES/katello.mo +0 -0
  399. data/locale/ta_IN/katello.po +247 -262
  400. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  401. data/locale/te/katello.po +248 -263
  402. data/locale/tr/LC_MESSAGES/katello.mo +0 -0
  403. data/locale/tr/katello.po +247 -262
  404. data/locale/vi/LC_MESSAGES/katello.mo +0 -0
  405. data/locale/vi/katello.po +247 -262
  406. data/locale/vi_VN/LC_MESSAGES/katello.mo +0 -0
  407. data/locale/vi_VN/katello.po +247 -262
  408. data/locale/zh/LC_MESSAGES/katello.mo +0 -0
  409. data/locale/zh/katello.po +247 -262
  410. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  411. data/locale/zh_CN/katello.po +250 -265
  412. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  413. data/locale/zh_TW/katello.po +257 -272
  414. data/webpack/ForemanColumnExtensions/index.js +71 -3
  415. data/webpack/ForemanColumnExtensions/index.scss +9 -0
  416. data/webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js +1 -0
  417. data/webpack/components/extensions/HostDetails/ActionsBar/index.js +14 -8
  418. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.js +1 -1
  419. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.js +1 -20
  420. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeEditModal.js +3 -61
  421. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeCard.test.js +0 -5
  422. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeEditModal.test.js +0 -5
  423. data/webpack/components/extensions/HostDetails/DetailsTabCards/ImageModeCard.js +87 -0
  424. data/webpack/components/extensions/HostDetails/DetailsTabCards/RegistrationCard.js +28 -2
  425. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebInstallModal.js +1 -1
  426. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +2 -2
  427. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackageInstallModal.js +1 -1
  428. data/webpack/components/extensions/Hosts/FontAwesomeImageModeIcon.js +55 -0
  429. data/webpack/containers/Application/config.js +5 -0
  430. data/webpack/global_index.js +3 -1
  431. data/webpack/redux/actions/RedHatRepositories/helpers.js +12 -6
  432. data/webpack/scenes/BootedContainerImages/BootedContainerImagesConstants.js +5 -0
  433. data/webpack/scenes/BootedContainerImages/BootedContainerImagesPage.js +244 -0
  434. data/webpack/scenes/BootedContainerImages/__tests__/bootedContainerImages.fixtures.js +42 -0
  435. data/webpack/scenes/BootedContainerImages/__tests__/bootedContainerImagesPage.test.js +233 -0
  436. data/webpack/scenes/BootedContainerImages/index.js +4 -0
  437. data/webpack/scenes/ContentViews/Delete/__tests__/affectedHosts.fixtures.json +1 -2
  438. data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +39 -7
  439. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +13 -2
  440. data/webpack/scenes/ContentViews/Details/Filters/CVFilterDetailType.js +1 -1
  441. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataDateFilterContent.test.js +1 -0
  442. data/webpack/scenes/ContentViews/Details/Repositories/RepoIcon.js +4 -2
  443. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/hosts.fixtures.json +1 -2
  444. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignActivationKeysForm.js +20 -1
  445. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignHostsForm.js +20 -1
  446. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionRemoveReview.js +128 -18
  447. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvAffectedActivationKeys.fixture.json +0 -1
  448. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvAffectedHosts.fixture.json +1 -2
  449. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +6 -4
  450. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedActivationKeys.js +5 -1
  451. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedHosts.js +6 -1
  452. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +1 -1
  453. data/webpack/scenes/ContentViews/expansions/DetailsExpansion.js +5 -1
  454. data/webpack/scenes/SmartProxy/ExpandableCvDetails.js +4 -2
  455. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.js +38 -0
  456. data/webpack/scenes/Subscriptions/Details/SubscriptionPurposeAttributes.js +0 -1
  457. data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetailInfo.test.js.snap +0 -10
  458. data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetails.test.js.snap +0 -3
  459. data/webpack/scenes/Subscriptions/Details/__tests__/subscriptionDetails.fixtures.js +0 -1
  460. metadata +61 -58
  461. data/app/models/katello/activation_key_purpose_addon.rb +0 -6
  462. data/app/models/katello/purpose_addon.rb +0 -11
  463. data/app/models/katello/subscription_facet_purpose_addon.rb +0 -6
  464. data/lib/monkeys/fx_sqlite_skip.rb +0 -13
  465. data/locale/action_names.rb +0 -181
  466. data/locale/bn/katello.po.time_stamp +0 -0
  467. data/locale/bn_IN/katello.po.time_stamp +0 -0
  468. data/locale/ca/katello.po.time_stamp +0 -0
  469. data/locale/cs/katello.po.time_stamp +0 -0
  470. data/locale/cs_CZ/katello.po.time_stamp +0 -0
  471. data/locale/de/katello.po.time_stamp +0 -0
  472. data/locale/de_AT/katello.po.time_stamp +0 -0
  473. data/locale/de_DE/katello.po.time_stamp +0 -0
  474. data/locale/el/katello.po.time_stamp +0 -0
  475. data/locale/en/katello.po.time_stamp +0 -0
  476. data/locale/en_GB/katello.po.time_stamp +0 -0
  477. data/locale/en_US/katello.po.time_stamp +0 -0
  478. data/locale/es/katello.po.time_stamp +0 -0
  479. data/locale/et_EE/katello.po.time_stamp +0 -0
  480. data/locale/fr/katello.po.time_stamp +0 -0
  481. data/locale/gl/katello.po.time_stamp +0 -0
  482. data/locale/gu/katello.po.time_stamp +0 -0
  483. data/locale/he_IL/katello.po.time_stamp +0 -0
  484. data/locale/hi/katello.po.time_stamp +0 -0
  485. data/locale/id/katello.po.time_stamp +0 -0
  486. data/locale/it/katello.po.time_stamp +0 -0
  487. data/locale/ja/katello.po.time_stamp +0 -0
  488. data/locale/ka/katello.po.time_stamp +0 -0
  489. data/locale/kn/katello.po.time_stamp +0 -0
  490. data/locale/ko/katello.po.time_stamp +0 -0
  491. data/locale/ml_IN/katello.po.time_stamp +0 -0
  492. data/locale/mr/katello.po.time_stamp +0 -0
  493. data/locale/nl_NL/katello.po.time_stamp +0 -0
  494. data/locale/or/katello.po.time_stamp +0 -0
  495. data/locale/pa/katello.po.time_stamp +0 -0
  496. data/locale/pl/katello.po.time_stamp +0 -0
  497. data/locale/pl_PL/katello.po.time_stamp +0 -0
  498. data/locale/pt/katello.po.time_stamp +0 -0
  499. data/locale/pt_BR/katello.po.time_stamp +0 -0
  500. data/locale/ro/katello.po.time_stamp +0 -0
  501. data/locale/ro_RO/katello.po.time_stamp +0 -0
  502. data/locale/ru/katello.po.time_stamp +0 -0
  503. data/locale/sl/katello.po.time_stamp +0 -0
  504. data/locale/sv_SE/katello.po.time_stamp +0 -0
  505. data/locale/ta/katello.po.time_stamp +0 -0
  506. data/locale/ta_IN/katello.po.time_stamp +0 -0
  507. data/locale/te/katello.po.time_stamp +0 -0
  508. data/locale/tr/katello.po.time_stamp +0 -0
  509. data/locale/vi/katello.po.time_stamp +0 -0
  510. data/locale/vi_VN/katello.po.time_stamp +0 -0
  511. data/locale/zh/katello.po.time_stamp +0 -0
  512. data/locale/zh_CN/katello.po.time_stamp +0 -0
  513. data/locale/zh_TW/katello.po.time_stamp +0 -0
@@ -18,7 +18,6 @@ module Katello
18
18
 
19
19
  included do
20
20
  prepend Overrides
21
- before_action :purpose_addon_params, only: [:create, :update]
22
21
  before_action :set_content_view_environments, only: [:create, :update]
23
22
 
24
23
  def destroy
@@ -35,13 +34,6 @@ module Katello
35
34
  render(:locals => { :resource => @host }, :template => 'katello/api/v2/hosts/show', :status => :ok)
36
35
  end
37
36
 
38
- def purpose_addon_params
39
- addons = params.dig(:host, :subscription_facet_attributes, :purpose_addons)
40
- return if addons.nil?
41
- params[:host][:subscription_facet_attributes][:purpose_addon_ids] = addons.map { |addon_name| ::Katello::PurposeAddon.find_or_create_by(name: addon_name).id }
42
- params[:host][:subscription_facet_attributes].delete(:purpose_addons)
43
- end
44
-
45
37
  def set_content_view_environments
46
38
  content_facet_attributes = params.dig(:host, :content_facet_attributes)
47
39
  return if content_facet_attributes.blank? || @host&.content_facet.blank? ||
@@ -0,0 +1,17 @@
1
+ module Katello
2
+ module Concerns
3
+ module Api
4
+ module V2
5
+ module HttpProxiesControllerExtensions
6
+ extend ::Apipie::DSL::Concern
7
+
8
+ update_api(:create, :show) do
9
+ param :http_proxy, Hash do
10
+ param :content_default_http_proxy, :bool, :required => false, :desc => N_('Set this HTTP proxy as the default content HTTP proxy')
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ module Katello
2
+ module Concerns
3
+ module HttpProxiesControllerExtensions
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ after_action :update_content_default_http_proxy, only: :create
8
+ end
9
+
10
+ private
11
+
12
+ def update_content_default_http_proxy
13
+ return unless @http_proxy.persisted?
14
+ return unless ActiveRecord::Type::Boolean.new.deserialize(params.dig('http_proxy', 'content_default_http_proxy'))
15
+
16
+ Setting[:content_default_http_proxy] = @http_proxy.name
17
+ end
18
+ end
19
+ end
20
+ end
@@ -32,8 +32,12 @@ module Katello
32
32
  end
33
33
 
34
34
  def sync
35
- tasks = sync_repos(params[:repoids]) || []
36
- render :json => tasks.as_json
35
+ begin
36
+ tasks = sync_repos(params[:repoids]) || []
37
+ render json: tasks.as_json
38
+ rescue StandardError => e
39
+ render json: { error: e.message }, status: :internal_server_error
40
+ end
37
41
  end
38
42
 
39
43
  def sync_status
@@ -48,7 +48,14 @@ module Katello
48
48
 
49
49
  source = Foreman::Renderer.get_source(template: template, host: host)
50
50
  scope = Foreman::Renderer.get_scope(source: source, host: host)
51
- Foreman::Renderer.render(source, scope)
51
+
52
+ <<~CMD
53
+ if [ -f /etc/yggdrasil/config.toml ]; then
54
+ cp /etc/yggdrasil/config.toml /etc/yggdrasil/config.toml.bak
55
+ export YGGDRASIL_RESTART_DELAY=10
56
+ #{Foreman::Renderer.render(source, scope)}
57
+ fi
58
+ CMD
52
59
  end
53
60
  end
54
61
  end
@@ -1,10 +1,12 @@
1
1
  module Katello
2
2
  module ContentViewHelper
3
3
  def separated_repo_mapping(repo_mapping, use_multicopy_actions)
4
- separated_mapping = { :pulp3_yum_multicopy => {}, :other => {} }
4
+ separated_mapping = { :pulp3_deb_multicopy => {}, :pulp3_yum_multicopy => {}, :other => {} }
5
5
  repo_mapping.each do |source_repos, dest_repo|
6
6
  if dest_repo.content_type == "yum" && SmartProxy.pulp_primary.pulp3_support?(dest_repo) && use_multicopy_actions
7
7
  separated_mapping[:pulp3_yum_multicopy][source_repos] = dest_repo
8
+ elsif dest_repo.content_type == "deb" && SmartProxy.pulp_primary.pulp3_support?(dest_repo) && use_multicopy_actions
9
+ separated_mapping[:pulp3_deb_multicopy][source_repos] = dest_repo
8
10
  else
9
11
  separated_mapping[:other][source_repos] = dest_repo
10
12
  end
@@ -8,7 +8,6 @@ module Actions
8
8
  param :release_version
9
9
  param :purpose_role
10
10
  param :purpose_usage
11
- param :purpse_addons
12
11
  end
13
12
 
14
13
  def run
@@ -18,8 +17,7 @@ module Actions
18
17
  input[:service_level],
19
18
  input[:release_version],
20
19
  input[:purpose_role],
21
- input[:purpose_usage],
22
- input[:purpose_addons])
20
+ input[:purpose_usage])
23
21
  end
24
22
  end
25
23
  end
@@ -9,7 +9,6 @@ module Actions
9
9
  param :auto_attach
10
10
  param :purpose_role
11
11
  param :purpose_usage
12
- param :purpose_addons
13
12
  end
14
13
 
15
14
  def run
@@ -19,8 +18,7 @@ module Actions
19
18
  input[:service_level],
20
19
  input[:auto_attach],
21
20
  input[:purpose_role],
22
- input[:purpose_usage],
23
- input[:purpose_addons])
21
+ input[:purpose_usage])
24
22
  end
25
23
  end
26
24
  end
@@ -1,7 +1,11 @@
1
1
  module Actions
2
2
  module Candlepin
3
3
  module Environment
4
- class SetContent < Candlepin::Abstract
4
+ class SetContent < Actions::Base
5
+ middleware.use ::Actions::Middleware::RemoteAction
6
+ middleware.use ::Actions::Middleware::CandlepinServicesCheck
7
+ middleware.use ::Actions::Middleware::KeepSessionId
8
+
5
9
  def plan(content_view, environment, content_view_environment, new_content_id = nil)
6
10
  plan_self(:content_view_id => content_view.id,
7
11
  :environment_id => environment.id,
@@ -9,7 +13,7 @@ module Actions
9
13
  :new_content_id => new_content_id)
10
14
  end
11
15
 
12
- def finalize # rubocop:disable Metrics/AbcSize
16
+ def finalize # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
13
17
  content_view = ::Katello::ContentView.find(input[:content_view_id])
14
18
  environment = ::Katello::KTEnvironment.find(input[:environment_id])
15
19
  content_ids = content_view.repos(environment).map(&:content_id).uniq.compact
@@ -32,6 +36,14 @@ module Actions
32
36
  # Since its a dup id refresh the existing ids list (which hopefully will not have the duplicate content)
33
37
  # and try again.
34
38
  output[:add_ids] = content_ids - existing_ids
39
+ rescue RestClient::ResourceNotFound => e
40
+ # Set a higher limit for retries just in case the missing content is not being parsed from the error body correctly.
41
+ # If the content is not found after the retries, assume it is gone and continue.
42
+ raise e if ((retries += 1) == 1_000)
43
+ # Parse the missing content from the Candlepin response and remove it from the add_ids list.
44
+ missing_content = JSON.parse(e.response.body)['displayMessage'].split(' ')[-1].gsub(/"(.+?)"\./, '\1')
45
+ Rails.logger.debug "Content #{missing_content} not found in the environment. Removing it from the add_ids list."
46
+ output[:add_ids].delete(missing_content)
35
47
  end
36
48
  end
37
49
  retries = 0
@@ -39,8 +51,9 @@ module Actions
39
51
  begin
40
52
  output[:delete_response] = ::Katello::Resources::Candlepin::Environment.delete_content(input[:cp_environment_id], output[:delete_ids])
41
53
  break
42
- rescue RestClient::ResourceNotFound => e
43
- raise e if ((retries += 1) == max_retries)
54
+ rescue RestClient::ResourceNotFound
55
+ # If the content is not found after the retries, assume it is gone and continue.
56
+ break if ((retries += 1) == max_retries)
44
57
  # Candlepin raises a 404 in case a content id is not found in this environment
45
58
  # If thats the case lets just refresh the existing ids list (which hopefully will not have the 404'd content)
46
59
  # and try again.
@@ -10,8 +10,7 @@ module Actions
10
10
  service_level: params[:service_level],
11
11
  release_version: activation_key.release_version,
12
12
  purpose_role: activation_key.purpose_role,
13
- purpose_usage: activation_key.purpose_usage,
14
- purpose_addons: activation_key.purpose_addons.pluck(:name))
13
+ purpose_usage: activation_key.purpose_usage)
15
14
  cp_id = cp_create.output[:response][:id]
16
15
  action_subject(activation_key, :cp_id => cp_id)
17
16
  plan_self
@@ -14,8 +14,7 @@ module Actions
14
14
  service_level: activation_key.service_level,
15
15
  auto_attach: activation_key.auto_attach,
16
16
  purpose_role: activation_key.purpose_role,
17
- purpose_usage: activation_key.purpose_usage,
18
- purpose_addons: activation_key.purpose_addons.pluck(:name))
17
+ purpose_usage: activation_key.purpose_usage)
19
18
  end
20
19
  end
21
20
 
@@ -24,8 +23,7 @@ module Actions
24
23
  cp_changed?(activation_key.service_level, activation_key_params[:service_level]) ||
25
24
  cp_changed?(activation_key.release_version, activation_key_params[:release_version]) ||
26
25
  cp_changed?(activation_key.purpose_role, activation_key_params[:purpose_role]) ||
27
- cp_changed?(activation_key.purpose_usage, activation_key_params[:purpose_usage]) ||
28
- cp_changed?(activation_key.purpose_addon_ids, activation_key_params[:purpose_addon_ids])
26
+ cp_changed?(activation_key.purpose_usage, activation_key_params[:purpose_usage])
29
27
  end
30
28
 
31
29
  def cp_changed?(activation_key, activation_key_params)
@@ -45,9 +45,15 @@ module Actions
45
45
 
46
46
  pulp_repo = repo.backend_service(smart_proxy)
47
47
  if !current_repos_on_capsule_ids.include?(repo.id)
48
+ # create_mirror_entities does not apply to the primary smart proxy
48
49
  pulp_repo.create_mirror_entities
49
50
  else
50
- tasks += pulp_repo.refresh_mirror_entities
51
+ if smart_proxy.pulp_primary?
52
+ # The primary smart proxy has extra remote options, like proxy_url
53
+ tasks += pulp_repo.refresh_entities
54
+ else
55
+ tasks += pulp_repo.refresh_mirror_entities
56
+ end
51
57
  end
52
58
  end
53
59
  tasks
@@ -6,7 +6,8 @@ module Actions
6
6
  HUMANIZED_TYPES = {
7
7
  ::Katello::Erratum::CONTENT_TYPE => "Errata",
8
8
  ::Katello::ModuleStream::CONTENT_TYPE => "Module Streams",
9
- ::Katello::Rpm::CONTENT_TYPE => "Packages",
9
+ ::Katello::Rpm::CONTENT_TYPE => "RPM Packages",
10
+ ::Katello::Deb::CONTENT_TYPE => "Deb Packages",
10
11
  }.freeze
11
12
 
12
13
  def humanized_output
@@ -25,7 +26,7 @@ module Actions
25
26
  if cvv
26
27
  humanized_lines << "Content View: #{cvv.content_view.name} version #{cvv.version}"
27
28
  humanized_lines << _("Added Content:")
28
- [::Katello::Erratum, ::Katello::ModuleStream, ::Katello::Rpm].each do |content_type|
29
+ [::Katello::Erratum, ::Katello::ModuleStream, ::Katello::Rpm, ::Katello::Deb].each do |content_type|
29
30
  unless output[:added_units][content_type::CONTENT_TYPE].blank?
30
31
  humanized_lines << " #{HUMANIZED_TYPES[content_type::CONTENT_TYPE]}:"
31
32
  humanized_lines += output[:added_units][content_type::CONTENT_TYPE].sort.map { |unit| " #{unit}" }
@@ -59,8 +59,13 @@ module Actions
59
59
 
60
60
  if options[:importing]
61
61
  handle_import(version, **options.slice(:path, :metadata))
62
- elsif separated_repo_map[:pulp3_yum_multicopy].keys.flatten.present?
63
- plan_action(Repository::MultiCloneToVersion, separated_repo_map[:pulp3_yum_multicopy], version)
62
+ else
63
+ if separated_repo_map[:pulp3_deb_multicopy].keys.flatten.present?
64
+ plan_action(Repository::MultiCloneToVersion, separated_repo_map[:pulp3_deb_multicopy], version)
65
+ end
66
+ if separated_repo_map[:pulp3_yum_multicopy].keys.flatten.present?
67
+ plan_action(Repository::MultiCloneToVersion, separated_repo_map[:pulp3_yum_multicopy], version)
68
+ end
64
69
  end
65
70
 
66
71
  concurrence do
@@ -5,11 +5,20 @@ module Actions
5
5
  def plan(content_view_environment, options)
6
6
  concurrence do
7
7
  content_view_environment.hosts.each do |host|
8
- plan_action(Host::Reassign, host, options[:system_content_view_id], options[:system_environment_id])
8
+ content_facet_attributes = host.content_facet
9
+ if content_facet_attributes.multi_content_view_environment?
10
+ content_facet_attributes.content_view_environments -= [content_view_environment]
11
+ else
12
+ plan_action(Host::Reassign, host, options[:system_content_view_id], options[:system_environment_id])
13
+ end
9
14
  end
10
15
 
11
16
  content_view_environment.activation_keys.each do |key|
12
- plan_action(ActivationKey::Reassign, key, options[:key_content_view_id], options[:key_environment_id])
17
+ if key.multi_content_view_environment?
18
+ key.content_view_environments = key.content_view_environments - [content_view_environment]
19
+ else
20
+ plan_action(ActivationKey::Reassign, key, options[:key_content_view_id], options[:key_environment_id])
21
+ end
13
22
  end
14
23
  end
15
24
  end
@@ -74,29 +74,31 @@ module Actions
74
74
  end
75
75
 
76
76
  concurrence do
77
- if separated_repo_map[:pulp3_yum_multicopy].keys.flatten.present?
78
- extended_repo_mapping = pulp3_repo_mapping(separated_repo_map[:pulp3_yum_multicopy], old_version)
79
- unit_map = pulp3_content_mapping(content)
80
-
81
- unless extended_repo_mapping.empty? || unit_map.values.flatten.empty?
82
- sequence do
83
- # Pre-copy content if dest_repo is a soft copy of its library instance.
84
- # Don't use extended_repo_mapping because the source repositories are library instances.
85
- # We want the old CV snapshot repositories here so as to not pull in excess new content.
86
- separated_repo_map[:pulp3_yum_multicopy].each do |source_repos, dest_repo|
87
- if dest_repo.soft_copy_of_library?
88
- source_repos.each do |source_repo|
89
- # remove_all flag is set to cover the case of incrementally updating more than once with different content.
90
- # Without it, content from the previous incremental update will be copied as well due to how Pulp repo versions work.
91
- plan_action(Pulp3::Repository::CopyContent, source_repo, SmartProxy.pulp_primary, dest_repo, copy_all: true, remove_all: true)
77
+ [:pulp3_deb_multicopy, :pulp3_yum_multicopy].each do |mapping|
78
+ if separated_repo_map[mapping].keys.flatten.present?
79
+ extended_repo_mapping = pulp3_repo_mapping(separated_repo_map[mapping], old_version)
80
+ unit_map = pulp3_content_mapping(content)
81
+
82
+ unless extended_repo_mapping.empty? || unit_map.values.flatten.empty?
83
+ sequence do
84
+ # Pre-copy content if dest_repo is a soft copy of its library instance.
85
+ # Don't use extended_repo_mapping because the source repositories are library instances.
86
+ # We want the old CV snapshot repositories here so as to not pull in excess new content.
87
+ separated_repo_map[mapping].each do |source_repos, dest_repo|
88
+ if dest_repo.soft_copy_of_library?
89
+ source_repos.each do |source_repo|
90
+ # remove_all flag is set to cover the case of incrementally updating more than once with different content.
91
+ # Without it, content from the previous incremental update will be copied as well due to how Pulp repo versions work.
92
+ plan_action(Pulp3::Repository::CopyContent, source_repo, SmartProxy.pulp_primary, dest_repo, copy_all: true, remove_all: true)
93
+ end
92
94
  end
93
95
  end
94
- end
95
- copy_action_outputs << plan_action(Pulp3::Repository::MultiCopyUnits, extended_repo_mapping, unit_map,
96
- dependency_solving: dep_solve).output
97
- repos_to_clone.each do |source_repos|
98
- if separated_repo_map[:pulp3_yum_multicopy].keys.include?(source_repos)
99
- copy_repos(repository_mapping[source_repos])
96
+ copy_action_outputs << plan_action(Pulp3::Repository::MultiCopyUnits, extended_repo_mapping, unit_map,
97
+ dependency_solving: dep_solve).output
98
+ repos_to_clone.each do |source_repos|
99
+ if separated_repo_map[mapping].keys.include?(source_repos)
100
+ copy_repos(repository_mapping[source_repos])
101
+ end
100
102
  end
101
103
  end
102
104
  end
@@ -124,12 +126,15 @@ module Actions
124
126
 
125
127
  def pulp3_content_mapping(content)
126
128
  units = ::Katello::Erratum.with_identifiers(content[:errata_ids]) +
129
+ ::Katello::Deb.with_identifiers(content[:deb_ids]) +
127
130
  ::Katello::Rpm.with_identifiers(content[:package_ids])
128
- unit_map = { :errata => [], :rpms => [] }
131
+ unit_map = { :errata => [], :debs => [], :rpms => [] }
129
132
  units.each do |unit|
130
133
  case unit.class.name
131
134
  when "Katello::Erratum"
132
135
  unit_map[:errata] << unit.id
136
+ when "Katello::Deb"
137
+ unit_map[:debs] << unit.id
133
138
  when "Katello::Rpm"
134
139
  unit_map[:rpms] << unit.id
135
140
  end
@@ -230,6 +235,7 @@ module Actions
230
235
  new_errata = new_repo.errata - (matched_old_repo&.errata || [])
231
236
  new_module_streams = new_repo.module_streams - (matched_old_repo&.module_streams || [])
232
237
  new_rpms = new_repo.rpms - (matched_old_repo&.rpms || [])
238
+ new_debs = new_repo.debs - (matched_old_repo&.debs || [])
233
239
 
234
240
  new_errata.each do |erratum|
235
241
  content[::Katello::Erratum::CONTENT_TYPE] << erratum.errata_id
@@ -241,6 +247,9 @@ module Actions
241
247
  new_rpms.each do |rpm|
242
248
  content[::Katello::Rpm::CONTENT_TYPE] << rpm.nvra
243
249
  end
250
+ new_debs.each do |deb|
251
+ content[::Katello::Deb::CONTENT_TYPE] << deb.nva
252
+ end
244
253
  end
245
254
  end
246
255
  output[:added_units] = content
@@ -0,0 +1,30 @@
1
+ module Actions
2
+ module Katello
3
+ module Flatpak
4
+ class MirrorRemoteRepository < Actions::EntryAction
5
+ def plan(remote_repository, product)
6
+ repo_params = {
7
+ name: remote_repository.name,
8
+ label: remote_repository.label,
9
+ url: remote_repository.flatpak_remote&.registry_url,
10
+ description: 'Mirrored from: ' + remote_repository.flatpak_remote.name,
11
+ product_id: product.id,
12
+ content_type: 'docker',
13
+ docker_upstream_name: remote_repository.name,
14
+ include_tags: ["latest"],
15
+ upstream_username: remote_repository.flatpak_remote.username,
16
+ upstream_password: remote_repository.flatpak_remote.token,
17
+ unprotected: true,
18
+ mirroring_policy: ::Katello::RootRepository::MIRRORING_POLICY_CONTENT,
19
+ }
20
+ root = product.add_repo(repo_params)
21
+ plan_action(::Actions::Katello::Repository::CreateRoot, root)
22
+ end
23
+
24
+ def humanized_name
25
+ _("Mirror Remote Repository")
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -5,25 +5,16 @@ module Actions
5
5
  module Flatpak
6
6
  class ScanRemote < Actions::EntryAction
7
7
  def plan(remote, _args = {})
8
- url = format_url(remote.url)
9
- plan_self({:remote_id => remote.id, :url => url})
8
+ plan_self({:remote_id => remote.id, :url => format_url(remote.url)})
10
9
  end
11
10
 
12
11
  def run
13
12
  remote = ::Katello::FlatpakRemote.find(input[:remote_id])
14
- url = input[:url]
15
- request_params = {
16
- method: :get,
17
- headers: { accept: :json },
18
- url: url,
19
- }
20
- results = RestClient::Request.execute(request_params)
21
- results = JSON.parse(results)
13
+ results = fetch_results(input[:url])
14
+ remote.update!(registry_url: results['Registry']) unless remote.registry_url
22
15
  repositories = results['Results']
23
16
  repositories.each do |repository|
24
17
  remote_repository = remote.remote_repositories.find_or_initialize_by(name: repository['Name'])
25
- remote_repository.label = remote.name + '-' + repository['Name']
26
- remote_repository.flatpak_remote = remote
27
18
  remote_repository.save!
28
19
  repository['Images'].each do |image|
29
20
  remote_repository_manifest = remote_repository.manifests.find_or_initialize_by(digest: image['Digest'])
@@ -38,8 +29,22 @@ module Actions
38
29
  end
39
30
  end
40
31
 
32
+ def rescue_strategy
33
+ Dynflow::Action::Rescue::Skip
34
+ end
35
+
41
36
  private
42
37
 
38
+ def fetch_results(url)
39
+ request_params = {
40
+ method: :get,
41
+ headers: { accept: :json },
42
+ url: url,
43
+ }
44
+ response = RestClient::Request.execute(request_params)
45
+ JSON.parse(response)
46
+ end
47
+
43
48
  def extract_runtime_from_metadata(metadata)
44
49
  match = metadata.match(/^runtime=(.*)$/)
45
50
  match ? "runtime/" + match[1] : nil
@@ -2,18 +2,13 @@ module Actions
2
2
  module Katello
3
3
  module Host
4
4
  class UpdateSystemPurpose < Actions::EntryAction
5
- def plan(host, service_level, purpose_role, purpose_usage, purpose_addons)
5
+ def plan(host, service_level, purpose_role, purpose_usage)
6
6
  fail _("Host %s has not been registered with subscription-manager.") % host.name unless host.subscription_facet
7
7
 
8
8
  host.subscription_facet.service_level = service_level unless service_level.nil?
9
9
  host.subscription_facet.purpose_role = purpose_role unless purpose_role.nil?
10
10
  host.subscription_facet.purpose_usage = purpose_usage unless purpose_usage.nil?
11
11
 
12
- if purpose_addons
13
- purpose_addon_objects = purpose_addons.delete_if(&:blank?).uniq.map { |x| ::Katello::PurposeAddon.find_or_create_by(name: x) }
14
- host.subscription_facet.purpose_addons = purpose_addon_objects
15
- end
16
-
17
12
  host.save!
18
13
  plan_self(:hostname => host.name)
19
14
  end
@@ -19,8 +19,22 @@ module Actions
19
19
  plan_action(Pulp3::Repository::SaveVersion, repository, {force_fetch_version: true, tasks: tag_manifest_output[:pulp_tasks]})
20
20
  else
21
21
  if content_unit_href
22
- artifact_output = { :content_unit_href => content_unit_href }
23
22
  commit_output = {}
23
+ if repository.deb?
24
+ # find artifact-href
25
+ content_backend_service = smart_proxy.content_service('deb')
26
+ artifact_href = content_backend_service.content_api.read(content_unit_href).artifact
27
+
28
+ artifact_output = plan_action(Pulp3::Repository::SaveArtifact,
29
+ file,
30
+ repository,
31
+ smart_proxy,
32
+ nil,
33
+ args.dig(:unit_type_id),
34
+ args.merge({artifact_href: artifact_href})).output
35
+ else
36
+ artifact_output = { :content_unit_href => content_unit_href }
37
+ end
24
38
  else
25
39
  commit_output = plan_action(Pulp3::Repository::CommitUpload,
26
40
  repository,
@@ -48,7 +62,9 @@ module Actions
48
62
  if input[:content_unit_href]
49
63
  output[:content_unit_href] = input[:content_unit_href]
50
64
  elsif input[:artifact_output]
51
- output[:content_unit_href] = input[:artifact_output][:content_unit_href] || input[:artifact_output][:pulp_tasks].last[:created_resources].first
65
+ output[:content_unit_href] = input[:artifact_output][:content_unit_href] ||
66
+ input[:artifact_output][:pulp_tasks].last[:created_resources].find { |href| href.include?("/deb/packages") } ||
67
+ input[:artifact_output][:pulp_tasks].last[:created_resources].first
52
68
  else
53
69
  output[:content_unit_href] = nil
54
70
  end
@@ -12,6 +12,11 @@ module Actions
12
12
  solve_dependencies: solve_dependencies)
13
13
  plan_action(Actions::Pulp3::Repository::SaveVersions, extended_repo_map.values.pluck(:dest_repo),
14
14
  tasks: copy_action.output[:pulp_tasks])
15
+ repo_id_map = {}
16
+ extended_repo_map.each do |source_repos, dest_repo_map|
17
+ repo_id_map[source_repos.first.id] = dest_repo_map[:dest_repo].id if dest_repo_map[:filters].blank?
18
+ end
19
+ plan_self(repo_id_map: repo_id_map)
15
20
  end
16
21
  else
17
22
  repo_id_map = {}
@@ -35,6 +35,10 @@ module Actions
35
35
  katello_errata.id in (#{input[:unit_map][:errata].join(",")})").map(&:erratum_pulp3_href)
36
36
  end
37
37
 
38
+ if input[:unit_map][:debs].any?
39
+ unit_hrefs << ::Katello::Deb.where(:id => input[:unit_map][:debs]).map(&:pulp_id)
40
+ end
41
+
38
42
  if input[:unit_map][:rpms].any?
39
43
  unit_hrefs << ::Katello::Rpm.where(:id => input[:unit_map][:rpms]).map(&:pulp_id)
40
44
  end
@@ -41,8 +41,9 @@ module Katello
41
41
  def respond_with_template(action, resource_name, options = {}, &_block)
42
42
  yield if block_given?
43
43
  status = options[:status] || 200
44
+ template = options[:full_template] || "katello/api/v2/#{resource_name}/#{action}"
44
45
 
45
- render :template => "katello/api/v2/#{resource_name}/#{action}",
46
+ render :template => template,
46
47
  :status => status,
47
48
  :locals => options.slice(:object_name, :root_name, :locals),
48
49
  :layout => "katello/api/v2/layouts/#{options[:layout]}"
@@ -257,17 +257,16 @@ module Katello
257
257
  search_since = since.present? ? "ended_at > \"#{since}\"" : nil
258
258
  search_result = status.present? && status != 'all' ? "result = #{status}" : nil
259
259
  labels = 'label ^ (Actions::Katello::Host::Erratum::Install, Actions::Katello::Host::Erratum::ApplicableErrataInstall)'
260
- select = 'foreman_tasks_tasks.*'
261
260
 
262
261
  new_labels = 'label = Actions::RemoteExecution::RunHostJob AND remote_execution_feature.label ^ (katello_errata_install, katello_errata_install_by_search)'
263
262
  labels = [labels, new_labels].map { |label| "(#{label})" }.join(' OR ')
264
- select += ',template_invocations.id AS template_invocation_id'
265
263
 
266
264
  search = [search_up_to, search_since, search_result, "state = stopped", labels].compact.join(' and ')
267
265
 
268
266
  tasks = load_resource(klass: ForemanTasks::Task,
269
267
  permission: 'view_foreman_tasks',
270
- select: select,
268
+ joins: [:template_invocation],
269
+ preload: [:template_invocation],
271
270
  search: search)
272
271
  only_host_ids = ::Host.search_for(host_filter).pluck(:id) if host_filter
273
272
 
@@ -383,7 +382,7 @@ module Katello
383
382
  found = script.lines.find { |line| line.start_with? '# RESOLVED_ERRATA_IDS=' } || ''
384
383
  (found.chomp.split('=', 2).last || '').split(',')
385
384
  else
386
- TemplateInvocationInputValue.joins(:template_input).where("template_invocation_id = ? AND template_inputs.name = ?", task.template_invocation_id, 'errata')
385
+ TemplateInvocationInputValue.joins(:template_input).where("template_invocation_id = ? AND template_inputs.name = ?", task.template_invocation.id, 'errata')
387
386
  .first&.value&.split(',') || []
388
387
  end
389
388
  end
@@ -0,0 +1,13 @@
1
+ module Katello
2
+ module Concerns
3
+ module BookmarkControllerValidatorExtensions
4
+ extend ActiveSupport::Concern
5
+
6
+ def valid_controllers_list
7
+ @valid_controllers_list ||= (["dashboard", "common_parameters", "/katello/api/v2/host_bootc_images"] +
8
+ ActiveRecord::Base.connection.tables.map(&:to_s) +
9
+ Permission.resources.map(&:tableize)).uniq
10
+ end
11
+ end
12
+ end
13
+ end