katello 4.15.1 → 4.16.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 (498) 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/locale/bn/katello.js +248 -263
  4. data/app/assets/javascripts/katello/locale/bn_IN/katello.js +247 -262
  5. data/app/assets/javascripts/katello/locale/ca/katello.js +247 -262
  6. data/app/assets/javascripts/katello/locale/cs/katello.js +521 -536
  7. data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +253 -268
  8. data/app/assets/javascripts/katello/locale/de/katello.js +248 -263
  9. data/app/assets/javascripts/katello/locale/de_AT/katello.js +247 -262
  10. data/app/assets/javascripts/katello/locale/de_DE/katello.js +249 -264
  11. data/app/assets/javascripts/katello/locale/el/katello.js +251 -266
  12. data/app/assets/javascripts/katello/locale/en/katello.js +253 -268
  13. data/app/assets/javascripts/katello/locale/en_GB/katello.js +263 -278
  14. data/app/assets/javascripts/katello/locale/en_US/katello.js +247 -262
  15. data/app/assets/javascripts/katello/locale/es/katello.js +248 -263
  16. data/app/assets/javascripts/katello/locale/et_EE/katello.js +247 -262
  17. data/app/assets/javascripts/katello/locale/fr/katello.js +250 -265
  18. data/app/assets/javascripts/katello/locale/gl/katello.js +247 -262
  19. data/app/assets/javascripts/katello/locale/gu/katello.js +249 -264
  20. data/app/assets/javascripts/katello/locale/he_IL/katello.js +249 -264
  21. data/app/assets/javascripts/katello/locale/hi/katello.js +248 -263
  22. data/app/assets/javascripts/katello/locale/id/katello.js +261 -275
  23. data/app/assets/javascripts/katello/locale/it/katello.js +252 -267
  24. data/app/assets/javascripts/katello/locale/ja/katello.js +250 -265
  25. data/app/assets/javascripts/katello/locale/ka/katello.js +247 -262
  26. data/app/assets/javascripts/katello/locale/kn/katello.js +248 -263
  27. data/app/assets/javascripts/katello/locale/ko/katello.js +248 -263
  28. data/app/assets/javascripts/katello/locale/ml_IN/katello.js +247 -262
  29. data/app/assets/javascripts/katello/locale/mr/katello.js +248 -263
  30. data/app/assets/javascripts/katello/locale/nl_NL/katello.js +252 -267
  31. data/app/assets/javascripts/katello/locale/or/katello.js +248 -263
  32. data/app/assets/javascripts/katello/locale/pa/katello.js +248 -263
  33. data/app/assets/javascripts/katello/locale/pl/katello.js +248 -263
  34. data/app/assets/javascripts/katello/locale/pl_PL/katello.js +247 -262
  35. data/app/assets/javascripts/katello/locale/pt/katello.js +248 -263
  36. data/app/assets/javascripts/katello/locale/pt_BR/katello.js +248 -263
  37. data/app/assets/javascripts/katello/locale/ro/katello.js +247 -262
  38. data/app/assets/javascripts/katello/locale/ro_RO/katello.js +247 -262
  39. data/app/assets/javascripts/katello/locale/ru/katello.js +253 -268
  40. data/app/assets/javascripts/katello/locale/sl/katello.js +247 -262
  41. data/app/assets/javascripts/katello/locale/sv_SE/katello.js +248 -263
  42. data/app/assets/javascripts/katello/locale/ta/katello.js +248 -263
  43. data/app/assets/javascripts/katello/locale/ta_IN/katello.js +247 -262
  44. data/app/assets/javascripts/katello/locale/te/katello.js +248 -263
  45. data/app/assets/javascripts/katello/locale/tr/katello.js +247 -262
  46. data/app/assets/javascripts/katello/locale/vi/katello.js +247 -262
  47. data/app/assets/javascripts/katello/locale/vi_VN/katello.js +247 -262
  48. data/app/assets/javascripts/katello/locale/zh/katello.js +247 -262
  49. data/app/assets/javascripts/katello/locale/zh_CN/katello.js +250 -265
  50. data/app/assets/javascripts/katello/locale/zh_TW/katello.js +255 -270
  51. data/app/assets/javascripts/katello/sync_management/sync_management.js +16 -2
  52. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +33 -9
  53. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +1 -1
  54. data/app/controllers/katello/api/v2/activation_keys_controller.rb +4 -9
  55. data/app/controllers/katello/api/v2/content_view_filter_rules_controller.rb +3 -1
  56. data/app/controllers/katello/api/v2/content_views_controller.rb +4 -1
  57. data/app/controllers/katello/api/v2/environments_controller.rb +4 -0
  58. data/app/controllers/katello/api/v2/errata_controller.rb +12 -1
  59. data/app/controllers/katello/api/v2/flatpak_remote_repositories_controller.rb +81 -0
  60. data/app/controllers/katello/api/v2/flatpak_remotes_controller.rb +86 -0
  61. data/app/controllers/katello/api/v2/host_bootc_images_controller.rb +71 -0
  62. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +1 -3
  63. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +3 -5
  64. data/app/controllers/katello/api/v2/repositories_controller.rb +11 -3
  65. data/app/controllers/katello/concerns/api/v2/hosts_controller_extensions.rb +0 -8
  66. data/app/controllers/katello/concerns/api/v2/http_proxies_controller_extensions.rb +17 -0
  67. data/app/controllers/katello/concerns/http_proxies_controller_extensions.rb +20 -0
  68. data/app/controllers/katello/sync_management_controller.rb +6 -2
  69. data/app/helpers/katello/content_source_helper.rb +8 -1
  70. data/app/helpers/katello/content_view_helper.rb +3 -1
  71. data/app/lib/actions/candlepin/activation_key/create.rb +1 -3
  72. data/app/lib/actions/candlepin/activation_key/update.rb +1 -3
  73. data/app/lib/actions/candlepin/environment/set_content.rb +17 -4
  74. data/app/lib/actions/katello/activation_key/create.rb +1 -2
  75. data/app/lib/actions/katello/activation_key/update.rb +2 -4
  76. data/app/lib/actions/katello/capsule_content/refresh_repos.rb +7 -1
  77. data/app/lib/actions/katello/content_view/presenters/incremental_updates_presenter.rb +3 -2
  78. data/app/lib/actions/katello/content_view/publish.rb +7 -2
  79. data/app/lib/actions/katello/content_view_environment/reassign_objects.rb +11 -2
  80. data/app/lib/actions/katello/content_view_version/incremental_update.rb +31 -22
  81. data/app/lib/actions/katello/flatpak/mirror_remote_repository.rb +30 -0
  82. data/app/lib/actions/katello/flatpak/scan_remote.rb +17 -12
  83. data/app/lib/actions/katello/host/update_system_purpose.rb +1 -6
  84. data/app/lib/actions/pulp3/orchestration/repository/import_upload.rb +18 -2
  85. data/app/lib/actions/pulp3/repository/multi_copy_units.rb +4 -0
  86. data/app/lib/katello/api/v2/rendering.rb +2 -1
  87. data/app/lib/katello/concerns/bookmark_controller_validator_extensions.rb +13 -0
  88. data/app/lib/katello/resources/candlepin/activation_key.rb +3 -5
  89. data/app/lib/katello/validators/alternate_content_source_path_validator.rb +2 -2
  90. data/app/lib/katello/validators/container_image_name_validator.rb +1 -1
  91. data/app/lib/katello/validators/content_validator.rb +1 -1
  92. data/app/lib/katello/validators/content_view_environment_coherent_default_validator.rb +2 -2
  93. data/app/lib/katello/validators/content_view_environment_org_validator.rb +2 -2
  94. data/app/lib/katello/validators/content_view_environment_validator.rb +3 -3
  95. data/app/lib/katello/validators/content_view_erratum_filter_rule_validator.rb +12 -12
  96. data/app/lib/katello/validators/content_view_filter_version_validator.rb +1 -1
  97. data/app/lib/katello/validators/generated_content_view_validator.rb +1 -1
  98. data/app/lib/katello/validators/gpg_key_content_type_validator.rb +2 -2
  99. data/app/lib/katello/validators/gpg_key_content_validator.rb +5 -5
  100. data/app/lib/katello/validators/katello_label_format_validator.rb +4 -4
  101. data/app/lib/katello/validators/katello_name_format_validator.rb +2 -2
  102. data/app/lib/katello/validators/katello_url_format_validator.rb +1 -1
  103. data/app/lib/katello/validators/library_presence_validator.rb +1 -1
  104. data/app/lib/katello/validators/no_trailing_space_validator.rb +1 -1
  105. data/app/lib/katello/validators/non_library_environment_validator.rb +1 -1
  106. data/app/lib/katello/validators/not_in_library_validator.rb +1 -1
  107. data/app/lib/katello/validators/path_descendents_validator.rb +1 -1
  108. data/app/lib/katello/validators/prior_validator.rb +1 -1
  109. data/app/lib/katello/validators/product_unique_attribute_validator.rb +1 -1
  110. data/app/lib/katello/validators/repo_disablement_validator.rb +2 -2
  111. data/app/lib/katello/validators/root_repository_unique_attribute_validator.rb +1 -1
  112. data/app/lib/katello/validators/self_reference_environment_validator.rb +1 -1
  113. data/app/lib/katello/validators/unique_field_in_org.rb +1 -1
  114. data/app/models/katello/activation_key.rb +6 -17
  115. data/app/models/katello/authorization/flatpak_remote.rb +33 -0
  116. data/app/models/katello/concerns/content_facet_host_extensions.rb +2 -1
  117. data/app/models/katello/concerns/host_managed_extensions.rb +8 -5
  118. data/app/models/katello/concerns/http_proxy_extensions.rb +4 -0
  119. data/app/models/katello/concerns/smart_proxy_extensions.rb +30 -6
  120. data/app/models/katello/concerns/subscription_facet_host_extensions.rb +0 -8
  121. data/app/models/katello/content_view.rb +3 -1
  122. data/app/models/katello/content_view_erratum_filter.rb +18 -2
  123. data/app/models/katello/content_view_version.rb +6 -0
  124. data/app/models/katello/docker_manifest.rb +8 -0
  125. data/app/models/katello/docker_manifest_list.rb +8 -0
  126. data/app/models/katello/erratum.rb +8 -2
  127. data/app/models/katello/flatpak_remote.rb +16 -0
  128. data/app/models/katello/flatpak_remote_repository.rb +18 -0
  129. data/app/models/katello/flatpak_remote_repository_manifest.rb +4 -0
  130. data/app/models/katello/glue/candlepin/pool.rb +1 -1
  131. data/app/models/katello/glue/pulp/repos.rb +12 -1
  132. data/app/models/katello/host/content_facet.rb +42 -3
  133. data/app/models/katello/host/subscription_facet.rb +4 -12
  134. data/app/models/katello/repository.rb +21 -8
  135. data/app/models/katello/rhel_lifecycle_status.rb +6 -0
  136. data/app/models/katello/root_repository.rb +3 -8
  137. data/app/overrides/add_organization_attributes.rb +6 -0
  138. data/app/services/katello/product_content_finder.rb +2 -1
  139. data/app/services/katello/pulp3/docker_manifest.rb +3 -2
  140. data/app/services/katello/pulp3/docker_manifest_list.rb +3 -2
  141. data/app/services/katello/pulp3/repository/ansible_collection.rb +8 -1
  142. data/app/services/katello/pulp3/repository/apt.rb +16 -18
  143. data/app/services/katello/pulp3/repository/file.rb +4 -2
  144. data/app/services/katello/pulp3/repository.rb +4 -0
  145. data/app/services/katello/pulp3/task.rb +2 -2
  146. data/app/views/foreman/job_templates/bootc_action.erb +26 -0
  147. data/app/views/foreman/job_templates/bootc_rollback.erb +13 -0
  148. data/app/views/foreman/job_templates/bootc_status.erb +13 -0
  149. data/app/views/foreman/job_templates/bootc_switch.erb +13 -0
  150. data/app/views/foreman/job_templates/bootc_upgrade.erb +13 -0
  151. data/app/views/foreman/job_templates/flatpak_install.erb +23 -0
  152. data/app/views/foreman/job_templates/flatpak_login_action.erb +30 -0
  153. data/app/views/foreman/job_templates/flatpak_setup.erb +27 -0
  154. data/app/views/foreman/job_templates/install_errata_by_search_query.erb +1 -1
  155. data/app/views/foreman/job_templates/install_errata_by_search_query_-_katello_ansible_default.erb +1 -1
  156. data/app/views/foreman/job_templates/resolve_traces_-_katello_ansible_default.erb +1 -1
  157. data/app/views/foreman/job_templates/update_packages_by_search_query_-_katello_ansible_default.erb +1 -1
  158. data/app/views/katello/api/v2/activation_keys/base.json.rabl +0 -4
  159. data/app/views/katello/api/v2/content_facet/base.json.rabl +2 -1
  160. data/app/views/katello/api/v2/content_view_filter_rules/show.json.rabl +1 -0
  161. data/app/views/katello/api/v2/content_view_versions/base.json.rabl +5 -1
  162. data/app/views/katello/api/v2/docker_manifest_lists/show.json.rabl +1 -1
  163. data/app/views/katello/api/v2/docker_manifests/show.json.rabl +1 -1
  164. data/app/views/katello/api/v2/flatpak_remote_repositories/base.json.rabl +4 -0
  165. data/app/views/katello/api/v2/flatpak_remote_repositories/index.json.rabl +7 -0
  166. data/app/views/katello/api/v2/flatpak_remote_repositories/show.json.rabl +13 -0
  167. data/app/views/katello/api/v2/flatpak_remotes/base.json.rabl +5 -0
  168. data/app/views/katello/api/v2/flatpak_remotes/index.json.rabl +8 -0
  169. data/app/views/katello/api/v2/flatpak_remotes/permissions.json.rabl +11 -0
  170. data/app/views/katello/api/v2/flatpak_remotes/show.json.rabl +3 -0
  171. data/app/views/katello/api/v2/hosts/base.json.rabl +0 -8
  172. data/app/views/katello/api/v2/hosts/os_attributes.json.rabl +13 -0
  173. data/app/views/katello/api/v2/http_proxies/show.json.rabl +1 -0
  174. data/app/views/katello/api/v2/repositories/base.json.rabl +1 -0
  175. data/app/views/katello/api/v2/repositories/show.json.rabl +1 -0
  176. data/app/views/katello/api/v2/subscription_facet/base.json.rabl +0 -4
  177. data/app/views/katello/api/v2/subscriptions/show.json.rabl +1 -1
  178. data/app/views/overrides/activation_keys/_host_synced_content_select.html.erb +10 -4
  179. data/app/views/overrides/http_proxies/_update_setting_input.html.erb +18 -0
  180. data/app/views/overrides/organizations/_step_1_override.html.erb +5 -0
  181. data/config/initializers/monkeys.rb +0 -1
  182. data/config/initializers/pagelets.rb +6 -0
  183. data/config/routes/api/registry.rb +1 -0
  184. data/config/routes/api/v2.rb +21 -0
  185. data/config/routes/overrides.rb +1 -0
  186. data/config/routes.rb +2 -0
  187. data/db/migrate/20190605014649_add_purpose_addons.rb +0 -12
  188. data/db/migrate/20200213184848_create_evr_type.rb +126 -1
  189. data/db/migrate/20200818192230_update_system_purpose_status.rb +0 -1
  190. data/db/migrate/20240207191223_remove_entitlement_mode_host_statuses.rb +0 -1
  191. data/db/migrate/20240924161240_katello_recreate_evr_constructs.rb +160 -0
  192. data/db/migrate/20241022121706_add_sync_dependencies_option.rb +5 -0
  193. data/db/migrate/20241101144625_remove_system_purpose_addons.rb +9 -0
  194. data/db/migrate/20241107002541_add_registry_url_to_katello_flatpak_remotes.rb +5 -0
  195. data/db/migrate/20241112145802_add_manifest_entity_to_content_facets.rb +7 -0
  196. data/db/migrate/20241120213713_add_allow_other_types_to_content_view_erratum_filter_rules.rb +6 -0
  197. data/db/migrate/20241206183052_add_content_type_to_container_manifests_and_lists.rb +9 -0
  198. data/db/seeds.d/75-job_templates.rb +5 -1
  199. data/engines/bastion/vendor/assets/javascripts/bastion/angular/angular.js +2 -2
  200. data/engines/bastion/vendor/assets/javascripts/bastion/angular-bootstrap/ui-bootstrap-tpls.js +3 -3
  201. data/engines/bastion/vendor/assets/javascripts/bastion/angular-bootstrap/ui-bootstrap.js +3 -3
  202. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-details-info.controller.js +0 -5
  203. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-details.controller.js +1 -41
  204. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-info.html +0 -12
  205. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/common/views/subscription-add-or-remove.html +1 -1
  206. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-system-purpose-modal.controller.js +1 -41
  207. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-traces-modal.controller.js +1 -1
  208. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-errata-modal.html +2 -2
  209. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-subscriptions-modal.html +2 -2
  210. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-system-purpose-modal.html +0 -13
  211. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-errata.html +1 -1
  212. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details-info.controller.js +0 -5
  213. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details.controller.js +1 -35
  214. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +2 -14
  215. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-provisioning-info.html +1 -1
  216. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +2 -2
  217. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/debs.controller.js +46 -22
  218. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/deb-content-views.controller.js +2 -1
  219. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/views/debs.html +4 -0
  220. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-content-views.html +1 -1
  221. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-details.html +1 -1
  222. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-errata.html +1 -1
  223. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/views/errata-tasks-list.html +2 -1
  224. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +85 -29
  225. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn.po +338 -93
  226. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/bn_IN.po +340 -95
  227. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ca.po +340 -95
  228. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/cs_CZ.po +341 -96
  229. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +31 -54
  230. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_AT.po +338 -93
  231. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de_DE.po +338 -93
  232. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/el.po +341 -96
  233. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_GB.po +349 -104
  234. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/en_US.po +338 -93
  235. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +33 -56
  236. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/et_EE.po +338 -93
  237. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +80 -68
  238. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gl.po +340 -95
  239. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/gu.po +340 -95
  240. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/he_IL.po +339 -111
  241. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/hi.po +340 -95
  242. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/id.po +379 -130
  243. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +342 -103
  244. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +70 -83
  245. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ka.po +84 -90
  246. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/kn.po +340 -95
  247. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +130 -138
  248. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ml_IN.po +338 -93
  249. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/mr.po +340 -95
  250. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/nl_NL.po +343 -97
  251. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/or.po +340 -95
  252. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pa.po +340 -95
  253. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl.po +340 -95
  254. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pl_PL.po +338 -93
  255. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt.po +338 -93
  256. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +40 -63
  257. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro.po +338 -93
  258. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ro_RO.po +338 -93
  259. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +343 -102
  260. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sl.po +338 -93
  261. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/sv_SE.po +340 -95
  262. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta.po +338 -93
  263. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ta_IN.po +340 -95
  264. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/te.po +340 -95
  265. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/tr.po +338 -93
  266. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi.po +338 -93
  267. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/vi_VN.po +338 -93
  268. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh.po +338 -93
  269. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +70 -83
  270. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +362 -105
  271. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +29 -29
  272. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/packages/details/views/package-info.html +1 -1
  273. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/bulk/products-bulk-advanced-sync-modal.controller.js +1 -1
  274. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/bulk/views/products-bulk-sync-plan-modal.html +2 -2
  275. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +24 -8
  276. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-tasks.html +2 -1
  277. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +2 -2
  278. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +21 -8
  279. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/os-versions.service.js +1 -0
  280. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/views/product-info.html +3 -3
  281. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/views/product-tasks.html +2 -1
  282. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/views/discovery-create.html +4 -2
  283. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/views/discovery.html +2 -1
  284. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.controller.js +3 -3
  285. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/views/partials/product-table-sync-status.html +1 -1
  286. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/subscription-start-date.html +1 -1
  287. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/details/views/sync-plan-info.html +1 -1
  288. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/sync-plans/views/sync-plans.html +2 -2
  289. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/tasks/tasks-table.directive.js +2 -1
  290. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/tasks/views/task-details.html +2 -2
  291. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/tasks/views/tasks-index.html +1 -1
  292. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/tasks/views/tasks-table.html +1 -1
  293. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/tasks/views/user-tasks-table.html +1 -1
  294. data/lib/katello/engine.rb +6 -0
  295. data/lib/katello/permission_creator.rb +37 -0
  296. data/lib/katello/permissions/host_permissions.rb +2 -0
  297. data/lib/katello/permissions/registry_permissions.rb +1 -0
  298. data/lib/katello/plugin.rb +18 -1
  299. data/lib/katello/repository_types/python.rb +1 -1
  300. data/lib/katello/version.rb +1 -1
  301. data/lib/katello.rb +2 -0
  302. data/locale/Makefile +20 -24
  303. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  304. data/locale/bn/katello.po +248 -263
  305. data/locale/bn_IN/LC_MESSAGES/katello.mo +0 -0
  306. data/locale/bn_IN/katello.po +247 -262
  307. data/locale/ca/LC_MESSAGES/katello.mo +0 -0
  308. data/locale/ca/katello.po +247 -262
  309. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  310. data/locale/cs/katello.po +524 -799
  311. data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
  312. data/locale/cs_CZ/katello.po +254 -269
  313. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  314. data/locale/de/katello.po +248 -263
  315. data/locale/de_AT/LC_MESSAGES/katello.mo +0 -0
  316. data/locale/de_AT/katello.po +247 -262
  317. data/locale/de_DE/LC_MESSAGES/katello.mo +0 -0
  318. data/locale/de_DE/katello.po +250 -265
  319. data/locale/el/LC_MESSAGES/katello.mo +0 -0
  320. data/locale/el/katello.po +252 -267
  321. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  322. data/locale/en/katello.po +257 -271
  323. data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
  324. data/locale/en_GB/katello.po +264 -279
  325. data/locale/en_US/LC_MESSAGES/katello.mo +0 -0
  326. data/locale/en_US/katello.po +247 -262
  327. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  328. data/locale/es/katello.po +248 -263
  329. data/locale/et_EE/LC_MESSAGES/katello.mo +0 -0
  330. data/locale/et_EE/katello.po +247 -262
  331. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  332. data/locale/fr/katello.po +250 -265
  333. data/locale/gl/LC_MESSAGES/katello.mo +0 -0
  334. data/locale/gl/katello.po +247 -262
  335. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  336. data/locale/gu/katello.po +250 -265
  337. data/locale/he_IL/LC_MESSAGES/katello.mo +0 -0
  338. data/locale/he_IL/katello.po +249 -264
  339. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  340. data/locale/hi/katello.po +248 -263
  341. data/locale/id/LC_MESSAGES/katello.mo +0 -0
  342. data/locale/id/katello.po +264 -275
  343. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  344. data/locale/it/katello.po +254 -270
  345. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  346. data/locale/ja/katello.po +250 -265
  347. data/locale/ka/LC_MESSAGES/katello.mo +0 -0
  348. data/locale/ka/katello.po +247 -262
  349. data/locale/katello.pot +1216 -1215
  350. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  351. data/locale/kn/katello.po +248 -263
  352. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  353. data/locale/ko/katello.po +248 -263
  354. data/locale/ml_IN/LC_MESSAGES/katello.mo +0 -0
  355. data/locale/ml_IN/katello.po +247 -262
  356. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  357. data/locale/mr/katello.po +248 -263
  358. data/locale/nl_NL/LC_MESSAGES/katello.mo +0 -0
  359. data/locale/nl_NL/katello.po +254 -268
  360. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  361. data/locale/or/katello.po +248 -263
  362. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  363. data/locale/pa/katello.po +248 -263
  364. data/locale/pl/LC_MESSAGES/katello.mo +0 -0
  365. data/locale/pl/katello.po +249 -264
  366. data/locale/pl_PL/LC_MESSAGES/katello.mo +0 -0
  367. data/locale/pl_PL/katello.po +247 -262
  368. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  369. data/locale/pt/katello.po +248 -263
  370. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  371. data/locale/pt_BR/katello.po +248 -263
  372. data/locale/ro/LC_MESSAGES/katello.mo +0 -0
  373. data/locale/ro/katello.po +247 -262
  374. data/locale/ro_RO/LC_MESSAGES/katello.mo +0 -0
  375. data/locale/ro_RO/katello.po +247 -262
  376. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  377. data/locale/ru/katello.po +255 -270
  378. data/locale/sl/LC_MESSAGES/katello.mo +0 -0
  379. data/locale/sl/katello.po +247 -262
  380. data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
  381. data/locale/sv_SE/katello.po +249 -264
  382. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  383. data/locale/ta/katello.po +248 -263
  384. data/locale/ta_IN/LC_MESSAGES/katello.mo +0 -0
  385. data/locale/ta_IN/katello.po +247 -262
  386. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  387. data/locale/te/katello.po +248 -263
  388. data/locale/tr/LC_MESSAGES/katello.mo +0 -0
  389. data/locale/tr/katello.po +247 -262
  390. data/locale/vi/LC_MESSAGES/katello.mo +0 -0
  391. data/locale/vi/katello.po +247 -262
  392. data/locale/vi_VN/LC_MESSAGES/katello.mo +0 -0
  393. data/locale/vi_VN/katello.po +247 -262
  394. data/locale/zh/LC_MESSAGES/katello.mo +0 -0
  395. data/locale/zh/katello.po +247 -262
  396. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  397. data/locale/zh_CN/katello.po +250 -265
  398. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  399. data/locale/zh_TW/katello.po +257 -272
  400. data/webpack/ForemanColumnExtensions/index.js +73 -3
  401. data/webpack/ForemanColumnExtensions/index.scss +9 -0
  402. data/webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js +1 -0
  403. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.js +1 -1
  404. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeCard.js +1 -20
  405. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/SystemPurposeEditModal.js +3 -61
  406. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeCard.test.js +0 -5
  407. data/webpack/components/extensions/HostDetails/Cards/SystemPurposeCard/__tests__/SystemPurposeEditModal.test.js +0 -5
  408. data/webpack/components/extensions/HostDetails/DetailsTabCards/ImageModeCard.js +87 -0
  409. data/webpack/components/extensions/HostDetails/DetailsTabCards/RegistrationCard.js +28 -2
  410. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebInstallModal.js +1 -1
  411. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +2 -2
  412. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackageInstallModal.js +1 -1
  413. data/webpack/components/extensions/Hosts/FontAwesomeImageModeIcon.js +55 -0
  414. data/webpack/containers/Application/config.js +5 -0
  415. data/webpack/global_index.js +3 -1
  416. data/webpack/redux/actions/RedHatRepositories/helpers.js +9 -0
  417. data/webpack/scenes/BootedContainerImages/BootedContainerImagesConstants.js +5 -0
  418. data/webpack/scenes/BootedContainerImages/BootedContainerImagesPage.js +242 -0
  419. data/webpack/scenes/BootedContainerImages/__tests__/bootedContainerImages.fixtures.js +42 -0
  420. data/webpack/scenes/BootedContainerImages/__tests__/bootedContainerImagesPage.test.js +233 -0
  421. data/webpack/scenes/BootedContainerImages/index.js +4 -0
  422. data/webpack/scenes/ContentViews/Delete/__tests__/affectedHosts.fixtures.json +1 -2
  423. data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +39 -7
  424. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +13 -2
  425. data/webpack/scenes/ContentViews/Details/Filters/CVFilterDetailType.js +1 -1
  426. data/webpack/scenes/ContentViews/Details/Filters/__tests__/cvErrataDateFilterContent.test.js +1 -0
  427. data/webpack/scenes/ContentViews/Details/Repositories/RepoIcon.js +4 -2
  428. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/hosts.fixtures.json +1 -2
  429. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignActivationKeysForm.js +20 -1
  430. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVReassignHostsForm.js +20 -1
  431. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionRemoveReview.js +128 -18
  432. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvAffectedActivationKeys.fixture.json +0 -1
  433. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvAffectedHosts.fixture.json +1 -2
  434. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +6 -4
  435. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedActivationKeys.js +5 -1
  436. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedHosts.js +6 -1
  437. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +1 -1
  438. data/webpack/scenes/ContentViews/expansions/DetailsExpansion.js +5 -1
  439. data/webpack/scenes/SmartProxy/ExpandableCvDetails.js +4 -2
  440. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.js +38 -0
  441. data/webpack/scenes/Subscriptions/Details/SubscriptionPurposeAttributes.js +0 -1
  442. data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetailInfo.test.js.snap +0 -10
  443. data/webpack/scenes/Subscriptions/Details/__tests__/__snapshots__/SubscriptionDetails.test.js.snap +0 -3
  444. data/webpack/scenes/Subscriptions/Details/__tests__/subscriptionDetails.fixtures.js +0 -1
  445. metadata +61 -64
  446. data/app/models/katello/activation_key_purpose_addon.rb +0 -6
  447. data/app/models/katello/purpose_addon.rb +0 -11
  448. data/app/models/katello/subscription_facet_purpose_addon.rb +0 -6
  449. data/lib/monkeys/fx_sqlite_skip.rb +0 -13
  450. data/locale/action_names.rb +0 -181
  451. data/locale/bn/katello.po.time_stamp +0 -0
  452. data/locale/bn_IN/katello.po.time_stamp +0 -0
  453. data/locale/ca/katello.po.time_stamp +0 -0
  454. data/locale/cs/katello.po.time_stamp +0 -0
  455. data/locale/cs_CZ/katello.po.time_stamp +0 -0
  456. data/locale/de/katello.po.time_stamp +0 -0
  457. data/locale/de_AT/katello.po.time_stamp +0 -0
  458. data/locale/de_DE/katello.po.time_stamp +0 -0
  459. data/locale/el/katello.po.time_stamp +0 -0
  460. data/locale/en/katello.po.time_stamp +0 -0
  461. data/locale/en_GB/katello.po.time_stamp +0 -0
  462. data/locale/en_US/katello.po.time_stamp +0 -0
  463. data/locale/es/katello.po.time_stamp +0 -0
  464. data/locale/et_EE/katello.po.time_stamp +0 -0
  465. data/locale/fr/katello.po.time_stamp +0 -0
  466. data/locale/gl/katello.po.time_stamp +0 -0
  467. data/locale/gu/katello.po.time_stamp +0 -0
  468. data/locale/he_IL/katello.po.time_stamp +0 -0
  469. data/locale/hi/katello.po.time_stamp +0 -0
  470. data/locale/id/katello.po.time_stamp +0 -0
  471. data/locale/it/katello.po.time_stamp +0 -0
  472. data/locale/ja/katello.po.time_stamp +0 -0
  473. data/locale/ka/katello.po.time_stamp +0 -0
  474. data/locale/kn/katello.po.time_stamp +0 -0
  475. data/locale/ko/katello.po.time_stamp +0 -0
  476. data/locale/ml_IN/katello.po.time_stamp +0 -0
  477. data/locale/mr/katello.po.time_stamp +0 -0
  478. data/locale/nl_NL/katello.po.time_stamp +0 -0
  479. data/locale/or/katello.po.time_stamp +0 -0
  480. data/locale/pa/katello.po.time_stamp +0 -0
  481. data/locale/pl/katello.po.time_stamp +0 -0
  482. data/locale/pl_PL/katello.po.time_stamp +0 -0
  483. data/locale/pt/katello.po.time_stamp +0 -0
  484. data/locale/pt_BR/katello.po.time_stamp +0 -0
  485. data/locale/ro/katello.po.time_stamp +0 -0
  486. data/locale/ro_RO/katello.po.time_stamp +0 -0
  487. data/locale/ru/katello.po.time_stamp +0 -0
  488. data/locale/sl/katello.po.time_stamp +0 -0
  489. data/locale/sv_SE/katello.po.time_stamp +0 -0
  490. data/locale/ta/katello.po.time_stamp +0 -0
  491. data/locale/ta_IN/katello.po.time_stamp +0 -0
  492. data/locale/te/katello.po.time_stamp +0 -0
  493. data/locale/tr/katello.po.time_stamp +0 -0
  494. data/locale/vi/katello.po.time_stamp +0 -0
  495. data/locale/vi_VN/katello.po.time_stamp +0 -0
  496. data/locale/zh/katello.po.time_stamp +0 -0
  497. data/locale/zh_CN/katello.po.time_stamp +0 -0
  498. data/locale/zh_TW/katello.po.time_stamp +0 -0
@@ -4,7 +4,132 @@ class CreateEvrType < ActiveRecord::Migration[5.2]
4
4
  def up
5
5
  unless connection.adapter_name.downcase.include?('sqlite')
6
6
 
7
- enable_extension "evr"
7
+ execute <<~SQL
8
+ create type evr_array_item as (
9
+ n NUMERIC,
10
+ s TEXT
11
+ );
12
+
13
+ create type evr_t as (
14
+ epoch INT,
15
+ version evr_array_item[],
16
+ release evr_array_item[]
17
+ );
18
+
19
+ CREATE FUNCTION evr_trigger() RETURNS trigger AS $$
20
+ BEGIN
21
+ NEW.evr = (select ROW(coalesce(NEW.epoch::numeric,0),
22
+ rpmver_array(coalesce(NEW.version,'empty'))::evr_array_item[],
23
+ rpmver_array(coalesce(NEW.release,'empty'))::evr_array_item[])::evr_t);
24
+ RETURN NEW;
25
+ END;
26
+ $$ language 'plpgsql';
27
+
28
+ create or replace FUNCTION empty(t TEXT)
29
+ RETURNS BOOLEAN as $$
30
+ BEGIN
31
+ return t ~ '^[[:space:]]*$';
32
+ END;
33
+ $$ language 'plpgsql';
34
+
35
+ create or replace FUNCTION isalpha(ch CHAR)
36
+ RETURNS BOOLEAN as $$
37
+ BEGIN
38
+ if ascii(ch) between ascii('a') and ascii('z') or
39
+ ascii(ch) between ascii('A') and ascii('Z')
40
+ then
41
+ return TRUE;
42
+ end if;
43
+ return FALSE;
44
+ END;
45
+ $$ language 'plpgsql';
46
+
47
+ create or replace FUNCTION isalphanum(ch CHAR)
48
+ RETURNS BOOLEAN as $$
49
+ BEGIN
50
+ if ascii(ch) between ascii('a') and ascii('z') or
51
+ ascii(ch) between ascii('A') and ascii('Z') or
52
+ ascii(ch) between ascii('0') and ascii('9')
53
+ then
54
+ return TRUE;
55
+ end if;
56
+ return FALSE;
57
+ END;
58
+ $$ language 'plpgsql';
59
+
60
+ create or replace function isdigit(ch CHAR)
61
+ RETURNS BOOLEAN as $$
62
+ BEGIN
63
+ if ascii(ch) between ascii('0') and ascii('9')
64
+ then
65
+ return TRUE;
66
+ end if;
67
+ return FALSE;
68
+ END ;
69
+ $$ language 'plpgsql';
70
+
71
+ create or replace FUNCTION rpmver_array (string1 IN VARCHAR)
72
+ RETURNS evr_array_item[] as $$
73
+ declare
74
+ str1 VARCHAR := string1;
75
+ digits VARCHAR(10) := '0123456789';
76
+ lc_alpha VARCHAR(27) := 'abcdefghijklmnopqrstuvwxyz';
77
+ uc_alpha VARCHAR(27) := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
78
+ alpha VARCHAR(54) := lc_alpha || uc_alpha;
79
+ one VARCHAR;
80
+ isnum BOOLEAN;
81
+ ver_array evr_array_item[] := ARRAY[]::evr_array_item[];
82
+ BEGIN
83
+ if str1 is NULL
84
+ then
85
+ RAISE EXCEPTION 'VALUE_ERROR.';
86
+ end if;
87
+
88
+ one := str1;
89
+ <<segment_loop>>
90
+ while one <> ''
91
+ loop
92
+ declare
93
+ segm1 VARCHAR;
94
+ segm1_n NUMERIC := 0;
95
+ begin
96
+ -- Throw out all non-alphanum characters
97
+ while one <> '' and not isalphanum(one)
98
+ loop
99
+ one := substr(one, 2);
100
+ end loop;
101
+ str1 := one;
102
+ if str1 <> '' and isdigit(str1)
103
+ then
104
+ str1 := ltrim(str1, digits);
105
+ isnum := true;
106
+ else
107
+ str1 := ltrim(str1, alpha);
108
+ isnum := false;
109
+ end if;
110
+ if str1 <> ''
111
+ then segm1 := substr(one, 1, length(one) - length(str1));
112
+ else segm1 := one;
113
+ end if;
114
+
115
+ if segm1 = '' then return ver_array; end if; /* arbitrary */
116
+ if isnum
117
+ then
118
+ segm1 := ltrim(segm1, '0');
119
+ if segm1 <> '' then segm1_n := segm1::numeric; end if;
120
+ segm1 := NULL;
121
+ else
122
+ end if;
123
+ ver_array := array_append(ver_array, (segm1_n, segm1)::evr_array_item);
124
+ one := str1;
125
+ end;
126
+ end loop segment_loop;
127
+
128
+ return ver_array;
129
+ END ;
130
+ $$ language 'plpgsql';
131
+
132
+ SQL
8
133
 
9
134
  add_column :katello_rpms, :evr, :evr_t
10
135
  add_column :katello_installed_packages, :evr, :evr_t
@@ -2,7 +2,6 @@ class UpdateSystemPurposeStatus < ActiveRecord::Migration[6.0]
2
2
  def change
3
3
  purpose_types = [
4
4
  "Katello::PurposeStatus",
5
- "Katello::PurposeAddonsStatus",
6
5
  "Katello::PurposeRoleStatus",
7
6
  "Katello::PurposeSlaStatus",
8
7
  "Katello::PurposeUsageStatus",
@@ -8,7 +8,6 @@ class RemoveEntitlementModeHostStatuses < ActiveRecord::Migration[6.1]
8
8
  obsolete_statuses = [
9
9
  "Katello::SubscriptionStatus",
10
10
  "Katello::PurposeStatus",
11
- "Katello::PurposeAddonsStatus",
12
11
  "Katello::PurposeRoleStatus",
13
12
  "Katello::PurposeSlaStatus",
14
13
  "Katello::PurposeUsageStatus",
@@ -0,0 +1,160 @@
1
+ class KatelloRecreateEvrConstructs < ActiveRecord::Migration[6.1]
2
+ def up
3
+ if !extension_enabled?('evr')
4
+ return
5
+ else
6
+ execute <<~SQL
7
+ DROP EXTENSION evr CASCADE;
8
+ SQL
9
+
10
+ execute <<~SQL
11
+ create type evr_array_item as (
12
+ n NUMERIC,
13
+ s TEXT
14
+ );
15
+
16
+ create type evr_t as (
17
+ epoch INT,
18
+ version evr_array_item[],
19
+ release evr_array_item[]
20
+ );
21
+
22
+ CREATE FUNCTION evr_trigger() RETURNS trigger AS $$
23
+ BEGIN
24
+ NEW.evr = (select ROW(coalesce(NEW.epoch::numeric,0),
25
+ rpmver_array(coalesce(NEW.version,'empty'))::evr_array_item[],
26
+ rpmver_array(coalesce(NEW.release,'empty'))::evr_array_item[])::evr_t);
27
+ RETURN NEW;
28
+ END;
29
+ $$ language 'plpgsql';
30
+
31
+ create or replace FUNCTION empty(t TEXT)
32
+ RETURNS BOOLEAN as $$
33
+ BEGIN
34
+ return t ~ '^[[:space:]]*$';
35
+ END;
36
+ $$ language 'plpgsql';
37
+
38
+ create or replace FUNCTION isalpha(ch CHAR)
39
+ RETURNS BOOLEAN as $$
40
+ BEGIN
41
+ if ascii(ch) between ascii('a') and ascii('z') or
42
+ ascii(ch) between ascii('A') and ascii('Z')
43
+ then
44
+ return TRUE;
45
+ end if;
46
+ return FALSE;
47
+ END;
48
+ $$ language 'plpgsql';
49
+
50
+ create or replace FUNCTION isalphanum(ch CHAR)
51
+ RETURNS BOOLEAN as $$
52
+ BEGIN
53
+ if ascii(ch) between ascii('a') and ascii('z') or
54
+ ascii(ch) between ascii('A') and ascii('Z') or
55
+ ascii(ch) between ascii('0') and ascii('9')
56
+ then
57
+ return TRUE;
58
+ end if;
59
+ return FALSE;
60
+ END;
61
+ $$ language 'plpgsql';
62
+
63
+ create or replace function isdigit(ch CHAR)
64
+ RETURNS BOOLEAN as $$
65
+ BEGIN
66
+ if ascii(ch) between ascii('0') and ascii('9')
67
+ then
68
+ return TRUE;
69
+ end if;
70
+ return FALSE;
71
+ END ;
72
+ $$ language 'plpgsql';
73
+
74
+ create or replace FUNCTION rpmver_array (string1 IN VARCHAR)
75
+ RETURNS evr_array_item[] as $$
76
+ declare
77
+ str1 VARCHAR := string1;
78
+ digits VARCHAR(10) := '0123456789';
79
+ lc_alpha VARCHAR(27) := 'abcdefghijklmnopqrstuvwxyz';
80
+ uc_alpha VARCHAR(27) := 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
81
+ alpha VARCHAR(54) := lc_alpha || uc_alpha;
82
+ one VARCHAR;
83
+ isnum BOOLEAN;
84
+ ver_array evr_array_item[] := ARRAY[]::evr_array_item[];
85
+ BEGIN
86
+ if str1 is NULL
87
+ then
88
+ RAISE EXCEPTION 'VALUE_ERROR.';
89
+ end if;
90
+
91
+ one := str1;
92
+ <<segment_loop>>
93
+ while one <> ''
94
+ loop
95
+ declare
96
+ segm1 VARCHAR;
97
+ segm1_n NUMERIC := 0;
98
+ begin
99
+ -- Throw out all non-alphanum characters
100
+ while one <> '' and not isalphanum(one)
101
+ loop
102
+ one := substr(one, 2);
103
+ end loop;
104
+ str1 := one;
105
+ if str1 <> '' and isdigit(str1)
106
+ then
107
+ str1 := ltrim(str1, digits);
108
+ isnum := true;
109
+ else
110
+ str1 := ltrim(str1, alpha);
111
+ isnum := false;
112
+ end if;
113
+ if str1 <> ''
114
+ then segm1 := substr(one, 1, length(one) - length(str1));
115
+ else segm1 := one;
116
+ end if;
117
+
118
+ if segm1 = '' then return ver_array; end if; /* arbitrary */
119
+ if isnum
120
+ then
121
+ segm1 := ltrim(segm1, '0');
122
+ if segm1 <> '' then segm1_n := segm1::numeric; end if;
123
+ segm1 := NULL;
124
+ else
125
+ end if;
126
+ ver_array := array_append(ver_array, (segm1_n, segm1)::evr_array_item);
127
+ one := str1;
128
+ end;
129
+ end loop segment_loop;
130
+
131
+ return ver_array;
132
+ END ;
133
+ $$ language 'plpgsql';
134
+
135
+ SQL
136
+
137
+ add_column :katello_rpms, :evr, :evr_t
138
+ add_column :katello_installed_packages, :evr, :evr_t
139
+
140
+ execute <<-SQL
141
+ update katello_rpms SET evr = (ROW(coalesce(epoch::numeric,0),
142
+ rpmver_array(coalesce(version,'empty'))::evr_array_item[],
143
+ rpmver_array(coalesce(release,'empty'))::evr_array_item[])::evr_t);
144
+
145
+ update katello_installed_packages SET evr = (ROW(coalesce(epoch::numeric,0),
146
+ rpmver_array(coalesce(version,'empty'))::evr_array_item[],
147
+ rpmver_array(coalesce(release,'empty'))::evr_array_item[])::evr_t);
148
+ SQL
149
+
150
+ create_trigger :evr_insert_trigger_katello_rpms, on: :katello_rpms
151
+ create_trigger :evr_update_trigger_katello_rpms, on: :katello_rpms
152
+ create_trigger :evr_insert_trigger_katello_installed_packages, on: :katello_installed_packages
153
+ create_trigger :evr_update_trigger_katello_installed_packages, on: :katello_installed_packages
154
+ end
155
+ end
156
+
157
+ def down
158
+ fail ActiveRecord::IrreversibleMigration
159
+ end
160
+ end
@@ -0,0 +1,5 @@
1
+ class AddSyncDependenciesOption < ActiveRecord::Migration[6.1]
2
+ def change
3
+ add_column :katello_root_repositories, :sync_dependencies, :boolean, :default => true
4
+ end
5
+ end
@@ -0,0 +1,9 @@
1
+ class RemoveSystemPurposeAddons < ActiveRecord::Migration[6.1]
2
+ def change
3
+ remove_foreign_key :katello_subscription_facet_purpose_addons, :katello_purpose_addons, column: :purpose_addon_id
4
+
5
+ drop_table :katello_activation_key_purpose_addons
6
+ drop_table :katello_purpose_addons
7
+ drop_table :katello_subscription_facet_purpose_addons
8
+ end
9
+ end
@@ -0,0 +1,5 @@
1
+ class AddRegistryURLToKatelloFlatpakRemotes < ActiveRecord::Migration[6.1]
2
+ def change
3
+ add_column :katello_flatpak_remotes, :registry_url, :string
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ class AddManifestEntityToContentFacets < ActiveRecord::Migration[6.1]
2
+ def change
3
+ add_reference :katello_content_facets, :manifest_entity, polymorphic: true, index: true
4
+ change_column_null :katello_content_facets, :manifest_entity_type, true
5
+ change_column_null :katello_content_facets, :manifest_entity_id, true
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ class AddAllowOtherTypesToContentViewErratumFilterRules < ActiveRecord::Migration[6.1]
2
+ def change
3
+ add_column :katello_content_view_erratum_filter_rules, :allow_other_types, :boolean,
4
+ :default => false, :null => false
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ class AddContentTypeToContainerManifestsAndLists < ActiveRecord::Migration[6.1]
2
+ def change
3
+ add_column :katello_docker_manifests, :content_type, :string, :limit => 255
4
+ add_column :katello_docker_manifest_lists, :content_type, :string, :limit => 255
5
+
6
+ add_index :katello_docker_manifests, :content_type
7
+ add_index :katello_docker_manifest_lists, :content_type
8
+ end
9
+ end
@@ -1,8 +1,12 @@
1
1
  User.as_anonymous_admin do
2
2
  JobTemplate.without_auditing do
3
+ # let's name root template as *_action.erb
4
+ root_action_files = Dir[File.join("#{Katello::Engine.root}/app/views/foreman/job_templates/**/*_action.erb")]
3
5
  template_files = Dir[File.join("#{Katello::Engine.root}/app/views/foreman/job_templates/**/*.erb")]
4
6
  template_files.reject! { |file| file.end_with?('_ansible_default.erb') } unless Katello.with_ansible?
5
- template_files.each do |template|
7
+
8
+ # root templates need to be imported first
9
+ (root_action_files + (template_files - root_action_files)).each do |template|
6
10
  sync = !Rails.env.test? && Setting[:remote_execution_sync_templates]
7
11
  template = JobTemplate.import_raw!(File.read(template), :default => true, :lock => true, :update => sync)
8
12
 
@@ -9593,7 +9593,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
9593
9593
 
9594
9594
  if (writeAttr !== false) {
9595
9595
  if (value === null || isUndefined(value)) {
9596
- this.$$element.removeAttr(attrName);
9596
+ this.$$element.prop(attrName, false);
9597
9597
  } else {
9598
9598
  if (SIMPLE_ATTR_NAME.test(attrName)) {
9599
9599
  // jQuery skips special boolean attrs treatment in XML nodes for
@@ -9602,7 +9602,7 @@ function $CompileProvider($provide, $$sanitizeUriProvider) {
9602
9602
  // in XHTML, call `removeAttr` in such cases instead.
9603
9603
  // See https://github.com/jquery/jquery/issues/4249
9604
9604
  if (booleanKey && value === false) {
9605
- this.$$element.removeAttr(attrName);
9605
+ this.$$element.prop(attrName, false);
9606
9606
  } else {
9607
9607
  this.$$element.attr(attrName, value);
9608
9608
  }
@@ -6083,7 +6083,7 @@ angular.module('ui.bootstrap.timepicker', [])
6083
6083
  padHours = angular.isDefined($attrs.padHours) ? $scope.$parent.$eval($attrs.padHours) : true;
6084
6084
 
6085
6085
  $scope.tabindex = angular.isDefined($attrs.tabindex) ? $attrs.tabindex : 0;
6086
- $element.removeAttr('tabindex');
6086
+ $element.prop('tabIndex', false);
6087
6087
 
6088
6088
  this.init = function(ngModelCtrl_, inputs) {
6089
6089
  ngModelCtrl = ngModelCtrl_;
@@ -6806,7 +6806,7 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.debounce', 'ui.bootstrap
6806
6806
  });
6807
6807
 
6808
6808
  if (hintInputElem.attr('id')) {
6809
- hintInputElem.removeAttr('id'); // remove duplicate id if present.
6809
+ hintInputElem.prop('id', false); // remove duplicate id if present.
6810
6810
  }
6811
6811
  inputsContainer.append(hintInputElem);
6812
6812
  hintInputElem.after(element);
@@ -6855,7 +6855,7 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.debounce', 'ui.bootstrap
6855
6855
  // This attribute is added or removed automatically when the `activeIdx` changes.
6856
6856
  scope.$watch('activeIdx', function(index) {
6857
6857
  if (index < 0) {
6858
- element.removeAttr('aria-activedescendant');
6858
+ element.prop('aria-activedescendant', false);
6859
6859
  } else {
6860
6860
  element.attr('aria-activedescendant', getMatchId(index));
6861
6861
  }
@@ -6082,7 +6082,7 @@ angular.module('ui.bootstrap.timepicker', [])
6082
6082
  padHours = angular.isDefined($attrs.padHours) ? $scope.$parent.$eval($attrs.padHours) : true;
6083
6083
 
6084
6084
  $scope.tabindex = angular.isDefined($attrs.tabindex) ? $attrs.tabindex : 0;
6085
- $element.removeAttr('tabindex');
6085
+ $element.prop('tabindex', false);
6086
6086
 
6087
6087
  this.init = function(ngModelCtrl_, inputs) {
6088
6088
  ngModelCtrl = ngModelCtrl_;
@@ -6805,7 +6805,7 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.debounce', 'ui.bootstrap
6805
6805
  });
6806
6806
 
6807
6807
  if (hintInputElem.attr('id')) {
6808
- hintInputElem.removeAttr('id'); // remove duplicate id if present.
6808
+ hintInputElem.prop('id', false); // remove duplicate id if present.
6809
6809
  }
6810
6810
  inputsContainer.append(hintInputElem);
6811
6811
  hintInputElem.after(element);
@@ -6854,7 +6854,7 @@ angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.debounce', 'ui.bootstrap
6854
6854
  // This attribute is added or removed automatically when the `activeIdx` changes.
6855
6855
  scope.$watch('activeIdx', function(index) {
6856
6856
  if (index < 0) {
6857
- element.removeAttr('aria-activedescendant');
6857
+ element.prop('aria-activedescendant', '');
6858
6858
  } else {
6859
6859
  element.attr('aria-activedescendant', getMatchId(index));
6860
6860
  }
@@ -117,11 +117,6 @@ angular.module('Bastion.activation-keys').controller('ActivationKeyDetailsInfoCo
117
117
  $scope.save($scope.activationKey);
118
118
  };
119
119
 
120
- $scope.clearAddOns = function () {
121
- $scope.activationKey['purpose_addons'] = [];
122
- $scope.save($scope.activationKey);
123
- };
124
-
125
120
  $scope.contentViews = function () {
126
121
  var deferred = $q.defer();
127
122
 
@@ -22,11 +22,9 @@ angular.module('Bastion.activation-keys').controller('ActivationKeyDetailsContro
22
22
  $scope.defaultRoles = ['Red Hat Enterprise Linux Server', 'Red Hat Enterprise Linux Workstation', 'Red Hat Enterprise Linux Compute Node'];
23
23
  $scope.defaultUsages = ['Production', 'Development/Test', 'Disaster Recovery'];
24
24
 
25
- $scope.purposeAddonsCount = 0;
26
25
  $scope.simpleContentAccessEnabled = simpleContentAccessEnabled;
27
26
 
28
- $scope.organization = Organization.get({id: CurrentOrganization}, function(org) {
29
- $scope.purposeAddonsCount += org.system_purposes.addons.length;
27
+ $scope.organization = Organization.get({id: CurrentOrganization}, function() {
30
28
  });
31
29
 
32
30
  $scope.panel = {
@@ -113,43 +111,5 @@ angular.module('Bastion.activation-keys').controller('ActivationKeyDetailsContro
113
111
  return _.union(roles, $scope.defaultRoles);
114
112
  });
115
113
  };
116
-
117
-
118
- $scope.savePurposeAddons = function (key) {
119
-
120
- if ($scope.purposeAddonsList) {
121
- key['purpose_addons'] = _.chain($scope.purposeAddonsList).filter(function(addOn) {
122
- return addOn.selected;
123
- }).map(function(addOn) {
124
- return addOn.name;
125
- }).value();
126
- }
127
-
128
- return $scope.save(key);
129
- };
130
-
131
-
132
- $scope.purposeAddons = function () {
133
- var purposeAddons;
134
- var addOns;
135
-
136
- return $scope.organization.$promise.then(function(org) {
137
- $scope.purposeAddonsList = [];
138
- addOns = org.system_purposes.addons;
139
-
140
- purposeAddons = $scope.activationKey.purpose_addons;
141
- angular.forEach(purposeAddons, function(addOn) {
142
- if (addOn && !_.includes(addOns, addOn)) {
143
- addOns.push(addOn);
144
- }
145
- });
146
-
147
- angular.forEach(addOns, function (addOn) {
148
- $scope.purposeAddonsList.push({"name": addOn, "selected": purposeAddons.indexOf(addOn) > -1});
149
- });
150
-
151
- return $scope.purposeAddonsList;
152
- });
153
- };
154
114
  }]
155
115
  );
@@ -93,18 +93,6 @@
93
93
  on-delete="clearRole()"
94
94
  on-save="save(activationKey)">
95
95
  </dd>
96
-
97
- <dt translate>Add ons</dt>
98
- <dd bst-edit-multiselect="activationKey.purpose_addons"
99
- readonly="denied('edit_activation_keys', activationKey) || purposeAddonsCount === 0"
100
- options="purposeAddons()"
101
- formatter="arrayToString"
102
- deletable="true"
103
- on-delete="clearAddOns()"
104
- selector="activationKey.purpose_addons"
105
- on-save="savePurposeAddons(activationKey)">
106
- </dd>
107
-
108
96
  </dl>
109
97
  </div>
110
98
 
@@ -40,7 +40,7 @@
40
40
  </td>
41
41
  <td bst-table-cell><div subscription-type="subscription"></div></td>
42
42
  <td bst-table-cell><div subscription-start-date="subscription"></div></td>
43
- <td bst-table-cell><date date="subscription.end_date" /></td>
43
+ <td bst-table-cell><date date="subscription.end_date" ></date></td>
44
44
  <td bst-table-cell>{{ subscription.support_level }}</td>
45
45
  <td bst-table-cell>{{ subscription.contract_number }}</td>
46
46
  <td bst-table-cell>{{ subscription.account_number }}</td>
@@ -19,14 +19,6 @@ angular.module('Bastion.content-hosts').controller('ContentHostsBulkSystemPurpos
19
19
 
20
20
  $scope.organization = Organization.get({id: CurrentOrganization});
21
21
 
22
- $scope.purposeAddonsList = function () {
23
- var defaultOptions = ['No Change', 'None (Clear)'];
24
- if ($scope.organization.system_purposes && $scope.organization.system_purposes.addons) {
25
- return defaultOptions.concat($scope.organization.system_purposes.addons);
26
- }
27
- return [];
28
- };
29
-
30
22
  $scope.defaultUsages = ['No change', 'None (Clear)', 'Production', 'Development/Test', 'Disaster Recovery'];
31
23
  $scope.defaultRoles = ['No change', 'None (Clear)', 'Red Hat Enterprise Linux Server', 'Red Hat Enterprise Linux Workstation', 'Red Hat Enterprise Linux Compute Node'];
32
24
  $scope.defaultServiceLevels = ['No change', 'None (Clear)', 'Self-Support', 'Standard', 'Premium'];
@@ -37,54 +29,22 @@ angular.module('Bastion.content-hosts').controller('ContentHostsBulkSystemPurpos
37
29
  $scope.selectedRoles = $scope.defaultRoles[0];
38
30
  $scope.selectedServiceLevels = $scope.defaultServiceLevels[0];
39
31
 
40
- $scope.selected = {
41
- addons: undefined
42
- };
43
-
44
32
  $scope.selectedItemToParam = function (item) {
45
33
  var mapping = {
46
34
  "None (Clear)": "",
47
- "No change": null,
48
- "": []
35
+ "No change": null
49
36
  };
50
- if (Array.isArray(item)) {
51
- return $scope.selectedAddonsToParam(item);
52
- }
53
37
  if (mapping.hasOwnProperty(item)) {
54
38
  return mapping[item];
55
39
  }
56
40
  return item;
57
41
  };
58
42
 
59
- $scope.selectedAddonsToParam = function (addons) {
60
- var intentOptions = ['No Change', 'None (Clear)'];
61
-
62
- var userIntent = intentOptions.filter(function(val) {
63
- return addons.indexOf(val) !== -1;
64
- });
65
-
66
- if (userIntent.length === 0) {
67
- return addons;
68
- }
69
-
70
- if (userIntent.includes('No Change')) {
71
- return null;
72
- }
73
-
74
- if (userIntent.includes('None (Clear)') && addons.length === 1) {
75
- return [];
76
- } if (userIntent.includes('None (Clear)') && addons.length > 1) {
77
- addons.shift();
78
- return addons;
79
- }
80
- };
81
-
82
43
  function actionParams() {
83
44
  var params = hostIds;
84
45
 
85
46
  params['purpose_usage'] = $scope.selectedItemToParam($scope.selectedUsages);
86
47
  params['purpose_role'] = $scope.selectedItemToParam($scope.selectedRoles);
87
- params['purpose_addons'] = $scope.selectedItemToParam($scope.selectedAddons);
88
48
  params['service_level'] = $scope.selectedItemToParam($scope.selectedServiceLevels);
89
49
 
90
50
  return params;
@@ -34,7 +34,7 @@ angular.module('Bastion.content-hosts').controller('ContentHostsBulkTracesContro
34
34
  Notification.setSuccessMessage(message, {
35
35
  link: {
36
36
  children: translate("View job invocations."),
37
- href: translate("/job_invocations")
37
+ href: "/job_invocations"
38
38
  }});
39
39
  $scope.ok();
40
40
  };
@@ -102,11 +102,11 @@
102
102
  <span ng-switch="newHostDetailsUI">
103
103
  <a ng-switch-when="true" target="_blank" href="{{ '/hosts?search=installable_errata%3D' + erratum.errata_id }}">
104
104
  {{ erratum.affected_hosts_count }}
105
- <span class="fa fa-external-link"/>
105
+ <span class="fa fa-external-link"></span>
106
106
  </a>
107
107
  <a ng-switch-when="false" target="_blank" href="{{ '/content_hosts?search=installable_errata%3D' + erratum.errata_id }}">
108
108
  {{ erratum.affected_hosts_count }}
109
- <span class="fa fa-external-link"/>
109
+ <span class="fa fa-external-link"></span>
110
110
  </a>
111
111
  </span>
112
112
  </td>
@@ -16,7 +16,7 @@
16
16
  </p>
17
17
 
18
18
  <p>
19
- <div content-access-mode-banner/>
19
+ <div content-access-mode-banner></div>
20
20
  </p>
21
21
 
22
22
  <p class="help-text" translate ng-show="table.numSelected > 0 && !simpleContentAccessEnabled">
@@ -106,7 +106,7 @@
106
106
  <td bst-table-cell>{{ subscription | subscriptionConsumedFilter }}</td>
107
107
  <td bst-table-cell><div subscription-type="subscription"></div></td>
108
108
  <td bst-table-cell><div subscription-start-date="subscription"></div></td>
109
- <td bst-table-cell><date date="subscription.end_date" /></td>
109
+ <td bst-table-cell><date date="subscription.end_date" ></date></td>
110
110
  <td bst-table-cell>{{ subscription.support_level }}</td>
111
111
  <td bst-table-cell>{{ subscription.contract_number }}</td>
112
112
  <td bst-table-cell>{{ subscription.account_number }}</td>