katello 4.14.1 → 4.15.0.rc1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


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

Files changed (453) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/common/chosen.jquery.js +3 -3
  3. data/app/assets/javascripts/katello/common/env_select_scroll.js +3 -3
  4. data/app/assets/javascripts/katello/common/katello.js +8 -7
  5. data/app/assets/javascripts/katello/common/katello_object.js +3 -3
  6. data/app/assets/javascripts/katello/common/menu.js +7 -7
  7. data/app/assets/javascripts/katello/hosts/host_and_hostgroup_edit.js +6 -6
  8. data/app/assets/javascripts/katello/locale/bn/katello.js +259 -28
  9. data/app/assets/javascripts/katello/locale/bn_IN/katello.js +258 -27
  10. data/app/assets/javascripts/katello/locale/ca/katello.js +258 -27
  11. data/app/assets/javascripts/katello/locale/cs/katello.js +258 -27
  12. data/app/assets/javascripts/katello/locale/cs_CZ/katello.js +258 -27
  13. data/app/assets/javascripts/katello/locale/de/katello.js +259 -28
  14. data/app/assets/javascripts/katello/locale/de_AT/katello.js +258 -27
  15. data/app/assets/javascripts/katello/locale/de_DE/katello.js +258 -27
  16. data/app/assets/javascripts/katello/locale/el/katello.js +258 -27
  17. data/app/assets/javascripts/katello/locale/en/katello.js +258 -27
  18. data/app/assets/javascripts/katello/locale/en_GB/katello.js +258 -27
  19. data/app/assets/javascripts/katello/locale/en_US/katello.js +258 -27
  20. data/app/assets/javascripts/katello/locale/es/katello.js +259 -28
  21. data/app/assets/javascripts/katello/locale/et_EE/katello.js +258 -27
  22. data/app/assets/javascripts/katello/locale/fr/katello.js +259 -28
  23. data/app/assets/javascripts/katello/locale/gl/katello.js +258 -27
  24. data/app/assets/javascripts/katello/locale/gu/katello.js +258 -27
  25. data/app/assets/javascripts/katello/locale/he_IL/katello.js +258 -27
  26. data/app/assets/javascripts/katello/locale/hi/katello.js +258 -27
  27. data/app/assets/javascripts/katello/locale/id/katello.js +258 -27
  28. data/app/assets/javascripts/katello/locale/it/katello.js +259 -28
  29. data/app/assets/javascripts/katello/locale/ja/katello.js +259 -28
  30. data/app/assets/javascripts/katello/locale/ka/katello.js +259 -28
  31. data/app/assets/javascripts/katello/locale/kn/katello.js +258 -27
  32. data/app/assets/javascripts/katello/locale/ko/katello.js +259 -28
  33. data/app/assets/javascripts/katello/locale/ml_IN/katello.js +258 -27
  34. data/app/assets/javascripts/katello/locale/mr/katello.js +258 -27
  35. data/app/assets/javascripts/katello/locale/nl_NL/katello.js +258 -27
  36. data/app/assets/javascripts/katello/locale/or/katello.js +258 -27
  37. data/app/assets/javascripts/katello/locale/pa/katello.js +258 -27
  38. data/app/assets/javascripts/katello/locale/pl/katello.js +258 -27
  39. data/app/assets/javascripts/katello/locale/pl_PL/katello.js +258 -27
  40. data/app/assets/javascripts/katello/locale/pt/katello.js +258 -27
  41. data/app/assets/javascripts/katello/locale/pt_BR/katello.js +259 -28
  42. data/app/assets/javascripts/katello/locale/ro/katello.js +258 -27
  43. data/app/assets/javascripts/katello/locale/ro_RO/katello.js +258 -27
  44. data/app/assets/javascripts/katello/locale/ru/katello.js +259 -28
  45. data/app/assets/javascripts/katello/locale/sl/katello.js +258 -27
  46. data/app/assets/javascripts/katello/locale/sv_SE/katello.js +258 -27
  47. data/app/assets/javascripts/katello/locale/ta/katello.js +259 -28
  48. data/app/assets/javascripts/katello/locale/ta_IN/katello.js +258 -27
  49. data/app/assets/javascripts/katello/locale/te/katello.js +258 -27
  50. data/app/assets/javascripts/katello/locale/tr/katello.js +258 -27
  51. data/app/assets/javascripts/katello/locale/vi/katello.js +258 -27
  52. data/app/assets/javascripts/katello/locale/vi_VN/katello.js +258 -27
  53. data/app/assets/javascripts/katello/locale/zh/katello.js +258 -27
  54. data/app/assets/javascripts/katello/locale/zh_CN/katello.js +259 -28
  55. data/app/assets/javascripts/katello/locale/zh_TW/katello.js +259 -28
  56. data/app/assets/javascripts/katello/organizations/download_certificate.js +1 -1
  57. data/app/assets/javascripts/katello/sync_management/sync_management.js +9 -9
  58. data/app/assets/javascripts/katello/widgets/env_content_view_selector.js +5 -5
  59. data/app/assets/javascripts/katello/widgets/path_selector.js +6 -6
  60. data/app/assets/javascripts/katello/widgets/subpanel_new.js +1 -1
  61. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +7 -7
  62. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +6 -1
  63. data/app/controllers/katello/api/v2/activation_keys_controller.rb +131 -59
  64. data/app/controllers/katello/api/v2/api_controller.rb +1 -1
  65. data/app/controllers/katello/api/v2/capsule_content_controller.rb +21 -10
  66. data/app/controllers/katello/api/v2/content_view_components_controller.rb +1 -1
  67. data/app/controllers/katello/api/v2/content_view_environments_controller.rb +54 -0
  68. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +3 -3
  69. data/app/controllers/katello/api/v2/content_views_controller.rb +1 -1
  70. data/app/controllers/katello/api/v2/environments_controller.rb +1 -1
  71. data/app/controllers/katello/api/v2/exports_controller.rb +1 -1
  72. data/app/controllers/katello/api/v2/host_collections_controller.rb +2 -2
  73. data/app/controllers/katello/api/v2/host_contents_controller.rb +1 -1
  74. data/app/controllers/katello/api/v2/host_errata_controller.rb +1 -1
  75. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +1 -1
  76. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +1 -4
  77. data/app/controllers/katello/api/v2/organizations_controller.rb +1 -1
  78. data/app/controllers/katello/api/v2/repositories_controller.rb +3 -2
  79. data/app/controllers/katello/api/v2/repository_sets_controller.rb +1 -1
  80. data/app/controllers/katello/concerns/api/v2/hosts_controller_extensions.rb +10 -16
  81. data/app/controllers/katello/concerns/api/v2/multi_cv_params_handling.rb +24 -0
  82. data/app/controllers/katello/concerns/authorization/api/v2/content_views_controller.rb +2 -5
  83. data/app/controllers/katello/concerns/hosts_controller_extensions.rb +1 -1
  84. data/app/controllers/katello/concerns/registration_commands_controller_extensions.rb +1 -1
  85. data/app/helpers/katello/concerns/smart_proxy_helper_extensions.rb +5 -5
  86. data/app/helpers/katello/hosts_and_hostgroups_helper.rb +2 -2
  87. data/app/helpers/katello/katello_url_helper.rb +1 -1
  88. data/app/lib/actions/candlepin/product/content_create.rb +12 -1
  89. data/app/lib/actions/candlepin/product/content_update.rb +21 -4
  90. data/app/lib/actions/katello/activation_key/reassign.rb +4 -3
  91. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +8 -3
  92. data/app/lib/actions/katello/capsule_content/update_content_counts.rb +21 -3
  93. data/app/lib/actions/katello/cdn_configuration/update.rb +1 -1
  94. data/app/lib/actions/katello/content_view/capsule_sync.rb +17 -1
  95. data/app/lib/actions/katello/content_view/incremental_updates.rb +1 -1
  96. data/app/lib/actions/katello/content_view/presenters/incremental_updates_presenter.rb +1 -1
  97. data/app/lib/actions/katello/content_view/remove.rb +8 -12
  98. data/app/lib/actions/katello/content_view_version/import.rb +1 -1
  99. data/app/lib/actions/katello/content_view_version/incremental_update.rb +2 -2
  100. data/app/lib/actions/katello/flatpak/scan_remote.rb +62 -0
  101. data/app/lib/actions/katello/host/hypervisors.rb +1 -1
  102. data/app/lib/actions/katello/product/content_create.rb +28 -19
  103. data/app/lib/actions/katello/product/content_destroy.rb +6 -5
  104. data/app/lib/actions/katello/product/destroy.rb +1 -1
  105. data/app/lib/actions/katello/repository/clone_contents.rb +14 -0
  106. data/app/lib/actions/katello/repository/create.rb +24 -17
  107. data/app/lib/actions/katello/repository/create_container_push_root.rb +44 -0
  108. data/app/lib/actions/katello/repository/create_root.rb +5 -15
  109. data/app/lib/actions/katello/repository/destroy.rb +3 -3
  110. data/app/lib/actions/katello/repository/discover.rb +1 -1
  111. data/app/lib/actions/katello/repository/finish_upload.rb +13 -0
  112. data/app/lib/actions/katello/repository/import_upload.rb +1 -1
  113. data/app/lib/actions/katello/repository/sync.rb +16 -0
  114. data/app/lib/actions/katello/repository/update.rb +11 -20
  115. data/app/lib/actions/katello/repository/upload_files.rb +1 -1
  116. data/app/lib/actions/katello/repository_set/enable_repository.rb +1 -1
  117. data/app/lib/actions/katello/repository_set/scan_cdn.rb +1 -1
  118. data/app/lib/actions/katello/upstream_subscriptions/bind_entitlement.rb +1 -1
  119. data/app/lib/actions/pulp3/capsule_content/sync.rb +1 -1
  120. data/app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb +1 -1
  121. data/app/lib/actions/pulp3/orchestration/repository/create.rb +6 -1
  122. data/app/lib/actions/pulp3/orchestration/repository/trigger_update_repo_cert_guard.rb +1 -1
  123. data/app/lib/actions/pulp3/repository/initialize.rb +17 -0
  124. data/app/lib/actions/pulp3/repository/refresh_distribution.rb +1 -1
  125. data/app/lib/katello/api/constraints/register_with_activation_key_constraint.rb +11 -0
  126. data/app/lib/katello/concerns/base_template_scope_extensions.rb +1 -1
  127. data/app/lib/katello/http_resource.rb +6 -6
  128. data/app/lib/katello/messaging/stomp_connection.rb +4 -4
  129. data/app/lib/katello/resources/candlepin/activation_key.rb +1 -1
  130. data/app/lib/katello/resources/candlepin/owner.rb +1 -1
  131. data/app/lib/katello/resources/candlepin/product.rb +1 -1
  132. data/app/lib/katello/resources/candlepin.rb +1 -1
  133. data/app/lib/katello/resources/cdn/katello_cdn.rb +3 -3
  134. data/app/lib/katello/resources/cdn.rb +1 -1
  135. data/app/lib/katello/resources/discovery/container.rb +5 -3
  136. data/app/lib/katello/resources/discovery/yum.rb +3 -1
  137. data/app/lib/katello/resources/registry.rb +0 -3
  138. data/app/lib/katello/util/candlepin_repository_checker.rb +2 -2
  139. data/app/lib/katello/util/cveak_migrator.rb +38 -0
  140. data/app/lib/katello/util/deb.rb +9 -0
  141. data/app/lib/katello/util/deduplication_migrator.rb +8 -8
  142. data/app/lib/katello/util/model.rb +2 -2
  143. data/app/lib/katello/util/search.rb +5 -5
  144. data/app/lib/katello/util/task_status.rb +19 -19
  145. data/app/lib/katello/util/url_matcher.rb +3 -3
  146. data/app/lib/katello/validators/content_view_environment_org_validator.rb +2 -1
  147. data/app/lib/katello/validators/katello_url_format_validator.rb +2 -2
  148. data/app/mailers/katello/errata_mailer.rb +1 -4
  149. data/app/models/katello/activation_key.rb +123 -27
  150. data/app/models/katello/alternate_content_source.rb +5 -5
  151. data/app/models/katello/authorization/activation_key.rb +1 -1
  152. data/app/models/katello/authorization/content_view_environment.rb +7 -0
  153. data/app/models/katello/cdn_configuration.rb +1 -1
  154. data/app/models/katello/concerns/content_facet_host_extensions.rb +24 -2
  155. data/app/models/katello/concerns/host_managed_extensions.rb +11 -6
  156. data/app/models/katello/concerns/organization_extensions.rb +4 -4
  157. data/app/models/katello/concerns/redhat_extensions.rb +1 -1
  158. data/app/models/katello/concerns/smart_proxy_extensions.rb +84 -39
  159. data/app/models/katello/content.rb +3 -3
  160. data/app/models/katello/content_view.rb +15 -18
  161. data/app/models/katello/content_view_environment.rb +56 -15
  162. data/app/models/katello/content_view_environment_activation_key.rb +20 -0
  163. data/app/models/katello/content_view_erratum_filter_rule.rb +1 -1
  164. data/app/models/katello/content_view_filter.rb +2 -2
  165. data/app/models/katello/content_view_history.rb +1 -1
  166. data/app/models/katello/content_view_repository.rb +1 -1
  167. data/app/models/katello/content_view_version.rb +3 -3
  168. data/app/models/katello/content_view_version_export_history.rb +2 -2
  169. data/app/models/katello/content_view_version_import_history.rb +1 -1
  170. data/app/models/katello/events/delete_latest_content_view_version.rb +1 -1
  171. data/app/models/katello/flatpak_remote.rb +11 -0
  172. data/app/models/katello/flatpak_remote_repository.rb +12 -0
  173. data/app/models/katello/flatpak_remote_repository_manifest.rb +10 -0
  174. data/app/models/katello/glue/candlepin/activation_key.rb +1 -1
  175. data/app/models/katello/glue/candlepin/candlepin_object.rb +1 -1
  176. data/app/models/katello/glue/candlepin/pool.rb +1 -1
  177. data/app/models/katello/glue/pulp/repos.rb +1 -1
  178. data/app/models/katello/host/content_facet.rb +33 -17
  179. data/app/models/katello/host/info_provider.rb +2 -4
  180. data/app/models/katello/host/subscription_facet.rb +2 -2
  181. data/app/models/katello/host_available_module_stream.rb +1 -1
  182. data/app/models/katello/installed_product.rb +2 -2
  183. data/app/models/katello/kt_environment.rb +11 -6
  184. data/app/models/katello/ping.rb +2 -3
  185. data/app/models/katello/repository.rb +40 -6
  186. data/app/models/katello/rhel_lifecycle_status.rb +10 -10
  187. data/app/models/katello/root_repository.rb +14 -18
  188. data/app/models/katello/task_status.rb +1 -1
  189. data/app/models/katello/upstream_pool.rb +2 -2
  190. data/app/presenters/katello/product_content_presenter.rb +2 -2
  191. data/app/presenters/katello/repository_presenter.rb +3 -3
  192. data/app/presenters/katello/sync_status_presenter.rb +3 -3
  193. data/app/services/cert/certs.rb +6 -2
  194. data/app/services/katello/candlepin_event_listener.rb +1 -1
  195. data/app/services/katello/event_monitor/poller_thread.rb +1 -1
  196. data/app/services/katello/event_queue.rb +1 -1
  197. data/app/services/katello/product_content_finder.rb +10 -10
  198. data/app/services/katello/product_content_importer.rb +1 -1
  199. data/app/services/katello/pulp3/alternate_content_source.rb +2 -2
  200. data/app/services/katello/pulp3/ansible_collection.rb +1 -1
  201. data/app/services/katello/pulp3/api/apt.rb +4 -0
  202. data/app/services/katello/pulp3/content.rb +1 -0
  203. data/app/services/katello/pulp3/content_view_version/export.rb +3 -10
  204. data/app/services/katello/pulp3/content_view_version/export_validator.rb +1 -1
  205. data/app/services/katello/pulp3/content_view_version/import.rb +2 -2
  206. data/app/services/katello/pulp3/content_view_version/import_gpg_keys.rb +1 -1
  207. data/app/services/katello/pulp3/content_view_version/importable_products.rb +2 -2
  208. data/app/services/katello/pulp3/content_view_version/importable_repositories.rb +4 -4
  209. data/app/services/katello/pulp3/content_view_version/metadata_generator.rb +2 -2
  210. data/app/services/katello/pulp3/deb.rb +35 -1
  211. data/app/services/katello/pulp3/docker_manifest.rb +1 -1
  212. data/app/services/katello/pulp3/docker_manifest_list.rb +6 -2
  213. data/app/services/katello/pulp3/docker_tag.rb +1 -1
  214. data/app/services/katello/pulp3/erratum.rb +2 -2
  215. data/app/services/katello/pulp3/file_unit.rb +1 -1
  216. data/app/services/katello/pulp3/generic_content_unit.rb +1 -1
  217. data/app/services/katello/pulp3/module_stream.rb +2 -2
  218. data/app/services/katello/pulp3/repository/ansible_collection.rb +1 -1
  219. data/app/services/katello/pulp3/repository/apt.rb +22 -16
  220. data/app/services/katello/pulp3/repository/docker.rb +2 -2
  221. data/app/services/katello/pulp3/repository/file.rb +1 -1
  222. data/app/services/katello/pulp3/repository/generic.rb +1 -1
  223. data/app/services/katello/pulp3/repository/yum.rb +7 -7
  224. data/app/services/katello/pulp3/repository.rb +15 -9
  225. data/app/services/katello/pulp3/repository_mirror.rb +3 -3
  226. data/app/services/katello/registration_manager.rb +23 -6
  227. data/app/services/katello/repository_type.rb +3 -3
  228. data/app/services/katello/smart_proxy_helper.rb +3 -3
  229. data/app/services/katello/ui_notifications/content_view/delete_latest_version_failure.rb +1 -1
  230. data/app/services/katello/ui_notifications/subscriptions/expire_soon.rb +3 -3
  231. data/app/services/katello/ui_notifications/subscriptions/manifest_expire_soon_warning.rb +3 -3
  232. data/app/services/katello/ui_notifications/task_notification.rb +2 -2
  233. data/app/services/katello/upstream_connection_checker.rb +1 -1
  234. data/app/views/katello/api/v2/activation_keys/base.json.rabl +43 -8
  235. data/app/views/katello/api/v2/alternate_content_sources/base.json.rabl +1 -1
  236. data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +5 -5
  237. data/app/views/katello/api/v2/common/_metadata.json.rabl +1 -1
  238. data/app/views/katello/api/v2/content_credentials/show.json.rabl +1 -1
  239. data/app/views/katello/api/v2/content_facet/base.json.rabl +15 -6
  240. data/app/views/katello/api/v2/content_facet/show.json.rabl +1 -1
  241. data/app/views/katello/api/v2/content_view_environments/index.json.rabl +7 -0
  242. data/app/views/katello/api/v2/content_view_environments/show.json.rabl +33 -0
  243. data/app/views/katello/api/v2/content_view_filter_rules/show.json.rabl +1 -1
  244. data/app/views/katello/api/v2/content_view_filters/show.json.rabl +1 -1
  245. data/app/views/katello/api/v2/content_view_versions/base.json.rabl +3 -3
  246. data/app/views/katello/api/v2/content_views/base.json.rabl +3 -3
  247. data/app/views/katello/api/v2/content_views/show.json.rabl +1 -1
  248. data/app/views/katello/api/v2/debs/backend.json.rabl +7 -0
  249. data/app/views/katello/api/v2/debs/base.json.rabl +4 -0
  250. data/app/views/katello/api/v2/debs/show.json.rabl +2 -0
  251. data/app/views/katello/api/v2/docker_manifest_lists/show.json.rabl +1 -0
  252. data/app/views/katello/api/v2/docker_tags/_base.json.rabl +2 -2
  253. data/app/views/katello/api/v2/environments/show.json.rabl +4 -4
  254. data/app/views/katello/api/v2/gpg_keys/show.json.rabl +1 -1
  255. data/app/views/katello/api/v2/host_collections/base.json.rabl +1 -1
  256. data/app/views/katello/api/v2/hosts/base.json.rabl +2 -2
  257. data/app/views/katello/api/v2/package_groups/base.json.rabl +2 -2
  258. data/app/views/katello/api/v2/products/show.json.rabl +2 -2
  259. data/app/views/katello/api/v2/repositories/show.json.rabl +1 -1
  260. data/app/views/katello/api/v2/repository_sets/show.json.rabl +1 -1
  261. data/app/views/katello/api/v2/subscriptions/base.json.rabl +1 -1
  262. data/app/views/katello/api/v2/subscriptions/show.json.rabl +3 -3
  263. data/app/views/katello/api/v2/sync_plans/show.json.rabl +1 -1
  264. data/config/initializers/inflections.rb +11 -0
  265. data/config/katello.yaml.example +4 -10
  266. data/config/routes/api/registry.rb +0 -2
  267. data/config/routes/api/rhsm.rb +1 -4
  268. data/config/routes/api/v2.rb +2 -3
  269. data/db/migrate/20140716211853_repo_rename_feed_to_url.rb +1 -1
  270. data/db/migrate/20141003210742_add_docker_container_registry_url_to_providers.rb +1 -1
  271. data/db/migrate/20150224083608_remove_docker_registry_url.rb +1 -1
  272. data/db/migrate/20160808002834_add_files.rb +1 -1
  273. data/db/migrate/20161014133811_move_content_view_version_description_to_histories.rb +1 -1
  274. data/db/migrate/20200818192230_update_system_purpose_status.rb +1 -1
  275. data/db/migrate/20201012172713_remove_gpg_key_perms.rb +1 -1
  276. data/db/migrate/20210322142311_add_auth_url_token_to_root_repositories.rb +1 -1
  277. data/db/migrate/20211220185935_clean_duplicate_content_units.rb +2 -2
  278. data/db/migrate/20230717150442_change_change_content_source_job_template_name.rb +1 -1
  279. data/db/migrate/20240207191223_remove_entitlement_mode_host_statuses.rb +1 -1
  280. data/db/migrate/20240508100434_add_content_id_to_katello_repository.rb +5 -0
  281. data/db/migrate/20240730163043_add_content_view_environment_activation_key.rb +87 -0
  282. data/db/migrate/20240806130902_add_more_deb_fields.rb +15 -0
  283. data/db/migrate/20240903194428_add_priority_to_content_view_environment_activation_key.rb +5 -0
  284. data/db/migrate/20241007200316_add_fields_to_katello_docker_manifest_list.rb +8 -0
  285. data/db/migrate/20241007212705_add_bootc_facts_to_content_facet.rb +27 -0
  286. data/db/migrate/20241025151105_remove_pulp3_migrated_hrefs_from_content_tables.rb +10 -0
  287. data/db/migrate/20241030181402_create_katello_flatpak_tables.rb +41 -0
  288. data/db/seeds.d/106-mail_notifications.rb +9 -9
  289. data/db/seeds.d/108-subcription-bookmarks.rb +1 -1
  290. data/db/seeds.d/109-katello-notification-blueprints.rb +21 -21
  291. data/db/seeds.d/110-content-view-autopublish.rb +5 -5
  292. data/db/seeds.d/111-container-image-bookmarks.rb +1 -1
  293. data/db/seeds.d/111-upgrade_tasks.rb +1 -1
  294. data/engines/bastion/lib/bastion/engine.rb +1 -1
  295. data/engines/bastion/lib/bastion.rb +1 -1
  296. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-repository-sets.controller.js +16 -0
  297. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-info.html +29 -15
  298. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-repository-sets.html +13 -0
  299. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/views/activation-keys.html +2 -0
  300. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-host-collections-modal.controller.js +2 -0
  301. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-host-collections-modal.html +4 -4
  302. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/debs.routes.js +9 -0
  303. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/views/deb-dependencies.html +54 -0
  304. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/views/deb-info.html +13 -1
  305. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/debs/details/views/deb.html +8 -1
  306. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/errata/views/apply-errata-confirm.html +1 -1
  307. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +4 -0
  308. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +11 -0
  309. data/engines/bastion_katello/app/assets/stylesheets/bastion_katello/activation_keys.scss +1 -1
  310. data/engines/bastion_katello/lib/bastion_katello/engine.rb +1 -1
  311. data/lib/katello/engine.rb +17 -15
  312. data/lib/katello/permission_creator.rb +51 -49
  313. data/lib/katello/permissions/host_permissions.rb +4 -4
  314. data/lib/katello/permissions/organization_permissions.rb +4 -4
  315. data/lib/katello/permissions/registry_permissions.rb +1 -1
  316. data/lib/katello/permissions/roles_permissions.rb +1 -1
  317. data/lib/katello/permissions/user_permissions.rb +1 -1
  318. data/lib/katello/plugin.rb +14 -8
  319. data/lib/katello/repository_types/docker.rb +4 -2
  320. data/lib/katello/repository_types/ostree.rb +5 -3
  321. data/lib/katello/repository_types/python.rb +1 -1
  322. data/lib/katello/repository_types/yum.rb +2 -1
  323. data/lib/katello/scheduled_jobs.rb +1 -1
  324. data/lib/katello/tasks/migrate_structure_content_for_deb.rake +105 -0
  325. data/lib/katello/tasks/receptor/extract_orgs.rake +1 -1
  326. data/lib/katello/tasks/reimport.rake +1 -1
  327. data/lib/katello/tasks/repository.rake +19 -9
  328. data/lib/katello/tasks/upgrades/4.1/reupdate_content_import_export_perms.rake +1 -1
  329. data/lib/katello/tasks/upgrades/4.3/fix_url_auth.rake +1 -1
  330. data/lib/katello/version.rb +1 -1
  331. data/locale/action_names.rb +92 -1
  332. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  333. data/locale/bn/katello.po +259 -28
  334. data/locale/bn_IN/LC_MESSAGES/katello.mo +0 -0
  335. data/locale/bn_IN/katello.po +258 -27
  336. data/locale/ca/LC_MESSAGES/katello.mo +0 -0
  337. data/locale/ca/katello.po +258 -27
  338. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  339. data/locale/cs/katello.po +258 -30
  340. data/locale/cs_CZ/LC_MESSAGES/katello.mo +0 -0
  341. data/locale/cs_CZ/katello.po +258 -27
  342. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  343. data/locale/de/katello.po +259 -28
  344. data/locale/de_AT/LC_MESSAGES/katello.mo +0 -0
  345. data/locale/de_AT/katello.po +258 -27
  346. data/locale/de_DE/LC_MESSAGES/katello.mo +0 -0
  347. data/locale/de_DE/katello.po +258 -27
  348. data/locale/el/LC_MESSAGES/katello.mo +0 -0
  349. data/locale/el/katello.po +258 -27
  350. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  351. data/locale/en/katello.po +258 -27
  352. data/locale/en_GB/LC_MESSAGES/katello.mo +0 -0
  353. data/locale/en_GB/katello.po +258 -27
  354. data/locale/en_US/LC_MESSAGES/katello.mo +0 -0
  355. data/locale/en_US/katello.po +258 -27
  356. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  357. data/locale/es/katello.po +259 -28
  358. data/locale/et_EE/LC_MESSAGES/katello.mo +0 -0
  359. data/locale/et_EE/katello.po +258 -27
  360. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  361. data/locale/fr/katello.po +259 -28
  362. data/locale/gl/LC_MESSAGES/katello.mo +0 -0
  363. data/locale/gl/katello.po +258 -27
  364. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  365. data/locale/gu/katello.po +258 -27
  366. data/locale/he_IL/LC_MESSAGES/katello.mo +0 -0
  367. data/locale/he_IL/katello.po +258 -27
  368. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  369. data/locale/hi/katello.po +258 -27
  370. data/locale/id/LC_MESSAGES/katello.mo +0 -0
  371. data/locale/id/katello.po +258 -27
  372. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  373. data/locale/it/katello.po +259 -28
  374. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  375. data/locale/ja/katello.po +259 -28
  376. data/locale/ka/LC_MESSAGES/katello.mo +0 -0
  377. data/locale/ka/katello.po +259 -28
  378. data/locale/katello.pot +1041 -696
  379. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  380. data/locale/kn/katello.po +258 -27
  381. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  382. data/locale/ko/katello.po +259 -28
  383. data/locale/ml_IN/LC_MESSAGES/katello.mo +0 -0
  384. data/locale/ml_IN/katello.po +258 -27
  385. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  386. data/locale/mr/katello.po +258 -27
  387. data/locale/nl_NL/LC_MESSAGES/katello.mo +0 -0
  388. data/locale/nl_NL/katello.po +258 -27
  389. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  390. data/locale/or/katello.po +258 -27
  391. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  392. data/locale/pa/katello.po +258 -27
  393. data/locale/pl/LC_MESSAGES/katello.mo +0 -0
  394. data/locale/pl/katello.po +258 -27
  395. data/locale/pl_PL/LC_MESSAGES/katello.mo +0 -0
  396. data/locale/pl_PL/katello.po +258 -27
  397. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  398. data/locale/pt/katello.po +258 -27
  399. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  400. data/locale/pt_BR/katello.po +259 -28
  401. data/locale/ro/LC_MESSAGES/katello.mo +0 -0
  402. data/locale/ro/katello.po +258 -27
  403. data/locale/ro_RO/LC_MESSAGES/katello.mo +0 -0
  404. data/locale/ro_RO/katello.po +258 -27
  405. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  406. data/locale/ru/katello.po +259 -28
  407. data/locale/sl/LC_MESSAGES/katello.mo +0 -0
  408. data/locale/sl/katello.po +258 -27
  409. data/locale/sv_SE/LC_MESSAGES/katello.mo +0 -0
  410. data/locale/sv_SE/katello.po +258 -27
  411. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  412. data/locale/ta/katello.po +259 -28
  413. data/locale/ta_IN/LC_MESSAGES/katello.mo +0 -0
  414. data/locale/ta_IN/katello.po +258 -27
  415. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  416. data/locale/te/katello.po +258 -27
  417. data/locale/tr/LC_MESSAGES/katello.mo +0 -0
  418. data/locale/tr/katello.po +258 -27
  419. data/locale/vi/LC_MESSAGES/katello.mo +0 -0
  420. data/locale/vi/katello.po +258 -27
  421. data/locale/vi_VN/LC_MESSAGES/katello.mo +0 -0
  422. data/locale/vi_VN/katello.po +258 -27
  423. data/locale/zh/LC_MESSAGES/katello.mo +0 -0
  424. data/locale/zh/katello.po +258 -27
  425. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  426. data/locale/zh_CN/katello.po +259 -28
  427. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  428. data/locale/zh_TW/katello.po +259 -28
  429. data/vendor/assets/javascripts/katello/chosen.jquery.js +2 -2
  430. data/vendor/assets/javascripts/katello/jquery.ba-bbq.js +1 -1
  431. data/vendor/assets/javascripts/katello/jquery.hoverIntent.js +2 -2
  432. data/webpack/ForemanColumnExtensions/index.js +1 -1
  433. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ContentViewDetailsCard.js +113 -86
  434. data/webpack/components/extensions/HostDetails/DetailsTabCards/HwPropertiesCard.js +7 -2
  435. data/webpack/components/extensions/HostDetails/Tabs/DebsTab/DebsTab.js +31 -4
  436. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +1 -1
  437. data/webpack/components/extensions/RegistrationCommands/fields/ActivationKeys.js +1 -7
  438. data/webpack/components/extensions/RegistrationCommands/helpers.js +15 -0
  439. data/webpack/components/extensions/RegistrationCommands/index.js +3 -9
  440. data/webpack/global_index.js +11 -4
  441. data/webpack/redux/actions/RedHatRepositories/helpers.js +2 -0
  442. data/webpack/scenes/ActivationKeys/Details/ActivationKeyDetails.js +4 -0
  443. data/webpack/scenes/ActivationKeys/Details/components/CVEDetailsCard.js +37 -0
  444. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +1 -2
  445. data/webpack/scenes/Hosts/ChangeContentSource/helpers.js +2 -8
  446. data/webpack/scenes/SmartProxy/ExpandableCvDetails.js +22 -2
  447. data/webpack/scenes/SmartProxy/ExpandedSmartProxyRepositories.js +39 -20
  448. data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +2 -1
  449. data/webpack/scenes/SmartProxy/SmartProxyExpandableTable.js +6 -4
  450. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.js +62 -0
  451. metadata +134 -76
  452. data/app/lib/katello/api/constraints/activation_key_constraint.rb +0 -7
  453. /data/app/lib/katello/{api → routing}/mapper_extensions.rb +0 -0
@@ -38,8 +38,6 @@ module Katello
38
38
 
39
39
  has_many :filters, :dependent => :destroy, :class_name => "Katello::ContentViewFilter"
40
40
 
41
- has_many :activation_keys, :class_name => "Katello::ActivationKey", :dependent => :restrict_with_exception
42
-
43
41
  has_many :content_view_environment_content_facets, :class_name => "Katello::ContentViewEnvironmentContentFacet",
44
42
  :through => :content_view_environments
45
43
  has_many :content_facets, :class_name => "Katello::Host::ContentFacet", :through => :content_view_environment_content_facets,
@@ -47,6 +45,11 @@ module Katello
47
45
  has_many :hosts, :class_name => "::Host::Managed", :through => :content_facets,
48
46
  :inverse_of => :content_views
49
47
 
48
+ has_many :content_view_environment_activation_keys, :class_name => "Katello::ContentViewEnvironmentActivationKey",
49
+ :through => :content_view_environments
50
+ has_many :activation_keys, :class_name => "Katello::ActivationKey", :through => :content_view_environment_activation_keys,
51
+ :inverse_of => :content_views
52
+
50
53
  has_many :hostgroup_content_facets, :class_name => "Katello::Hostgroup::ContentFacet",
51
54
  :inverse_of => :content_view, :dependent => :nullify
52
55
  has_many :hostgroups, :class_name => "::Hostgroup", :through => :hostgroup_content_facets,
@@ -121,7 +124,7 @@ module Katello
121
124
  kcv = Katello::ContentView.table_name
122
125
  kcvc = Katello::ContentViewComponent.table_name
123
126
  { :conditions => "#{kcv}.composite = 't' AND #{kcv}.id IN (SELECT #{kcvc}.composite_content_view_id FROM #{kcvc} WHERE #{kcvc}.content_view_id IN (SELECT #{kcv}.id FROM #{kcv} WHERE #{kcv}.name #{operator} ?))",
124
- :parameter => [value]
127
+ :parameter => [value],
125
128
  }
126
129
  end
127
130
 
@@ -141,7 +144,7 @@ module Katello
141
144
  library_import: 3,
142
145
  repository_import: 4,
143
146
  library_export_syncable: 5,
144
- repository_export_syncable: 6
147
+ repository_export_syncable: 6,
145
148
  }, _prefix: true
146
149
 
147
150
  set_crud_hooks :content_view
@@ -298,7 +301,7 @@ module Katello
298
301
  {
299
302
  :version => v.version,
300
303
  :published => v.created_at.to_s,
301
- :environments => v.environments.map { |e| e.name }
304
+ :environments => v.environments.map { |e| e.name },
302
305
  }
303
306
  end
304
307
 
@@ -448,10 +451,7 @@ module Katello
448
451
  # update errata applicability counts for all hosts in the CV & LE
449
452
  Location.no_taxonomy_scope do
450
453
  User.as_anonymous_admin do
451
- ::Katello::Host::ContentFacet.in_content_views_and_environments(
452
- content_views: [self],
453
- lifecycle_environments: [environment]
454
- ).each do |facet|
454
+ ::Katello::Host::ContentFacet.with_content_views(self).with_environments(environment).each do |facet|
455
455
  facet.update_applicability_counts
456
456
  facet.update_errata_status
457
457
  rescue NoMethodError
@@ -699,10 +699,7 @@ module Katello
699
699
  def check_orphaned_content_facets!(environments: [])
700
700
  Location.no_taxonomy_scope do
701
701
  User.as_anonymous_admin do
702
- ::Katello::Host::ContentFacet.in_content_views_and_environments(
703
- content_views: [self],
704
- lifecycle_environments: environments
705
- ).each do |facet|
702
+ ::Katello::Host::ContentFacet.with_content_views(self).with_environments(environments).each do |facet|
706
703
  unless facet.host
707
704
  fail _("Orphaned content facets for deleted hosts exist for the content view and environment. Please run rake task : katello:clean_orphaned_facets and try again!")
708
705
  end
@@ -716,11 +713,11 @@ module Katello
716
713
  errors = []
717
714
 
718
715
  dependencies = { hosts: _("hosts"),
719
- activation_keys: _("activation keys")
716
+ activation_keys: _("activation keys"),
720
717
  }
721
718
 
722
719
  dependencies.each do |key, name|
723
- if (models = self.association(key).scope.in_environment(env)).any?
720
+ if (models = self.association(key).scope.in_environments(env)).any?
724
721
  errors << _("Cannot remove '%{view}' from environment '%{env}' due to associated %{dependent}: %{names}.") %
725
722
  { view: self.name, env: env.name, dependent: name, names: models.map(&:name).join(", ") }
726
723
  end
@@ -736,7 +733,7 @@ module Katello
736
733
 
737
734
  dependencies = { environments: _("environments"),
738
735
  hosts: _("hosts"),
739
- activation_keys: _("activation keys")
736
+ activation_keys: _("activation keys"),
740
737
  }
741
738
 
742
739
  dependencies.each do |key, name|
@@ -778,7 +775,7 @@ module Katello
778
775
  content_views.push(
779
776
  {
780
777
  id: cv_id,
781
- name: cv_name
778
+ name: cv_name,
782
779
  }
783
780
  )
784
781
  end
@@ -893,7 +890,7 @@ module Katello
893
890
 
894
891
  def blocking_task
895
892
  blocking_task_labels = [
896
- ::Actions::Katello::ContentView::Publish.name
893
+ ::Actions::Katello::ContentView::Publish.name,
897
894
  ]
898
895
  ForemanTasks::Task::DynflowTask.where(:label => blocking_task_labels)
899
896
  .where.not(state: 'stopped')
@@ -15,6 +15,9 @@ module Katello
15
15
  has_many :content_view_environment_content_facets, :class_name => "Katello::ContentViewEnvironmentContentFacet", :dependent => :destroy, :inverse_of => :content_view_environment
16
16
  has_many :content_facets, through: :content_view_environment_content_facets, :class_name => "::Katello::Host::ContentFacet", :inverse_of => :content_view_environments
17
17
 
18
+ has_many :content_view_environment_activation_keys, :class_name => "Katello::ContentViewEnvironmentActivationKey", :dependent => :destroy, :inverse_of => :content_view_environment
19
+ has_many :activation_keys, through: :content_view_environment_activation_keys, :class_name => "::Katello::ActivationKey", :inverse_of => :content_view_environments
20
+
18
21
  validates_lengths_from_database
19
22
  validates :environment_id, uniqueness: {scope: :content_view_id}, presence: true
20
23
  validates :content_view_id, presence: true
@@ -25,20 +28,24 @@ module Katello
25
28
 
26
29
  scope :non_default, -> { joins(:content_view).where("katello_content_views.default" => false) }
27
30
  scope :default, -> { joins(:content_view).where("katello_content_views.default" => true) }
31
+ scope :non_generated, -> { where(content_view: ::Katello::ContentView.ignore_generated) }
32
+
33
+ scoped_search :on => :id, :complete_value => true
34
+
28
35
  alias :lifecycle_environment :environment
36
+ has_one :organization, :through => :environment
37
+
38
+ def self.in_organization(org)
39
+ where(environment_id: org.kt_environments)
40
+ end
29
41
 
30
42
  def self.for_content_facets(content_facets)
31
- joins(:content_view_environment_content_facets, :content_facets).where("#{Katello::ContentViewEnvironmentContentFacet.table_name}.content_facet_id" => content_facets).uniq
43
+ joins(:content_facets).
44
+ where("#{Katello::ContentViewEnvironmentContentFacet.table_name}.content_facet_id" => content_facets)
32
45
  end
33
46
 
34
- def self.with_candlepin_name(cp_name, organization: Organization.current)
35
- lce_name, cv_name = cp_name.split('/')
36
- if cv_name.blank? && lce_name == 'Library'
37
- return default.find_by(
38
- environment: ::Katello::KTEnvironment.library.where(organization: organization)&.first
39
- )
40
- end
41
- joins(:environment, :content_view).where("#{Katello::KTEnvironment.table_name}.label" => lce_name, "#{Katello::ContentView.table_name}.label" => cv_name).first
47
+ def self.with_label_and_org(label, organization: Organization.current)
48
+ joins(:environment, :content_view).where("#{Katello::KTEnvironment.table_name}.organization_id" => organization, label: label).first
42
49
  end
43
50
 
44
51
  # retrieve the owning environment for this content view environment.
@@ -51,20 +58,54 @@ module Katello
51
58
  end
52
59
 
53
60
  def activation_keys
54
- content_view.activation_keys.in_environment(environment)
61
+ ::Katello::ActivationKey.with_content_views(self.content_view).with_environments(self.environment)
55
62
  end
56
63
 
57
64
  def default_environment?
58
65
  content_view.default? && environment.library?
59
66
  end
60
67
 
61
- def candlepin_name
62
- return environment.label if default_environment?
63
- "#{environment.label}/#{content_view.label}"
68
+ def priority(content_object)
69
+ case content_object
70
+ when Katello::ActivationKey
71
+ content_view_environment_activation_keys.find_by(:activation_key_id => content_object.id).try(:priority)
72
+ when Katello::Host::ContentFacet
73
+ content_view_environment_content_facets.find_by(:content_facet_id => content_object.id).try(:priority)
74
+ end
64
75
  end
65
76
 
66
- def priority(content_facet)
67
- content_view_environment_content_facets.find_by(:content_facet_id => content_facet.id).try(:priority)
77
+ def self.fetch_content_view_environments(organization:, labels: [], ids: [])
78
+ # Must ensure CVEs remain in the same order.
79
+ # Using ActiveRecord .where will return them in a different order.
80
+ id_errors = []
81
+ label_errors = []
82
+ cves = []
83
+ if ids.present?
84
+ ids.each do |id|
85
+ cve = ::Katello::ContentViewEnvironment.find_by(id: id)
86
+ if cve.blank?
87
+ id_errors << id
88
+ else
89
+ cves << cve
90
+ end
91
+ end
92
+ elsif labels.present?
93
+ environment_names = labels.map(&:strip)
94
+ environment_names.each do |name|
95
+ cve = with_label_and_org(name, organization: organization)
96
+ if cve.blank?
97
+ label_errors << name
98
+ else
99
+ cves << cve
100
+ end
101
+ end
102
+ end
103
+ if labels.present? && labels.length != cves.length
104
+ fail HttpErrors::UnprocessableEntity, _("No content view environments found with names: %{names}") % {names: label_errors.join(', ')} if label_errors.present?
105
+ elsif ids.present? && ids.length != cves.length
106
+ fail HttpErrors::UnprocessableEntity, _("No content view environments found with ids: %{ids}") % {ids: id_errors.join(', ')} if id_errors.present?
107
+ end
108
+ cves
68
109
  end
69
110
 
70
111
  private
@@ -0,0 +1,20 @@
1
+ module Katello
2
+ class ContentViewEnvironmentActivationKey < Katello::Model
3
+ belongs_to :content_view_environment, :class_name => "::Katello::ContentViewEnvironment", :inverse_of => :content_view_environment_activation_keys
4
+ belongs_to :activation_key, :class_name => "::Katello::ActivationKey", :inverse_of => :content_view_environment_activation_keys
5
+
6
+ default_scope { order(:priority => :asc) }
7
+
8
+ validates :content_view_environment_id, presence: true
9
+ validates :activation_key_id, presence: true, unless: :new_record?
10
+
11
+ def self.reprioritize_for_activation_key(activation_key, new_cves)
12
+ new_order = new_cves.map do |cve|
13
+ activation_key.content_view_environment_activation_keys.find_by(:content_view_environment_id => cve.id)
14
+ end
15
+ new_order.compact.each_with_index do |cveak, index|
16
+ cveak.update_column(:priority, index)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -23,7 +23,7 @@ module Katello
23
23
  :inclusion => {
24
24
  :in => DATE_TYPES,
25
25
  :allow_blank => false,
26
- :message => (_("must be one of the following: %s") % DATE_TYPES.join(', '))
26
+ :message => (_("must be one of the following: %s") % DATE_TYPES.join(', ')),
27
27
  }
28
28
 
29
29
  def self.in_content_views(content_view_ids)
@@ -41,7 +41,7 @@ module Katello
41
41
  def self.yum(include_module_streams = true)
42
42
  types = [::Katello::ContentViewPackageGroupFilter.name,
43
43
  ::Katello::ContentViewErratumFilter.name,
44
- ::Katello::ContentViewPackageFilter.name
44
+ ::Katello::ContentViewPackageFilter.name,
45
45
  ]
46
46
  types << ::Katello::ContentViewModuleStreamFilter.name if include_module_streams
47
47
  where(:type => types)
@@ -74,7 +74,7 @@ module Katello
74
74
  ContentViewErratumFilter => ERRATA,
75
75
  ContentViewPackageGroupFilter => PACKAGE_GROUP,
76
76
  ContentViewDockerFilter => DOCKER,
77
- ContentViewModuleStreamFilter => MODULE_STREAM
77
+ ContentViewModuleStreamFilter => MODULE_STREAM,
78
78
  }[self.class]
79
79
  end
80
80
 
@@ -33,7 +33,7 @@ module Katello
33
33
  promotion: 2,
34
34
  removal: 3,
35
35
  export: 4,
36
- importing: 5
36
+ importing: 5,
37
37
  }
38
38
 
39
39
  def content_view
@@ -6,7 +6,7 @@ module Katello
6
6
  Repository::FILE_TYPE,
7
7
  Repository::DEB_TYPE,
8
8
  Repository::ANSIBLE_COLLECTION_TYPE,
9
- Katello::RepositoryTypeManager.generic_repository_types(false).keys.flatten
9
+ Katello::RepositoryTypeManager.generic_repository_types(false).keys.flatten,
10
10
  ].flatten.freeze
11
11
 
12
12
  ALLOWED_IMPORT_REPOSITORY_TYPES = Repository::EXPORTABLE_TYPES
@@ -357,7 +357,7 @@ module Katello
357
357
  def auto_publish_composites!
358
358
  metadata = {
359
359
  description: _("Auto Publish - Triggered by '%s'") % self.name,
360
- triggered_by: self.id
360
+ triggered_by: self.id,
361
361
  }
362
362
  self.content_view.auto_publish_components.pluck(:composite_content_view_id).each do |composite_id|
363
363
  ::Katello::EventQueue.push_event(::Katello::Events::AutoPublishCompositeView::EVENT_TYPE, composite_id) do |attrs|
@@ -443,12 +443,12 @@ module Katello
443
443
  repo.slice(:id, :name, :label, :arch, :major, :minor,
444
444
  :content_type, :os_versions, :url, :content_id).merge(redhat: repo.redhat?, root: repo.root.id,
445
445
  product: repo.product.slice(:id, :label))
446
- end
446
+ end,
447
447
  }
448
448
  end
449
449
  self.applied_filters = {
450
450
  applied_filters: applied_filters_and_rules,
451
- dependency_solving: content_view.solve_dependencies
451
+ dependency_solving: content_view.solve_dependencies,
452
452
  }
453
453
  save!
454
454
  end
@@ -18,7 +18,7 @@ module Katello
18
18
  validates :export_type, :presence => true,
19
19
  :inclusion => { :in => EXPORT_TYPES,
20
20
  :allow_blank => false,
21
- :message => _("must be one of the following: %s" % EXPORT_TYPES.join(', '))
21
+ :message => _("must be one of the following: %s" % EXPORT_TYPES.join(', ')),
22
22
  }
23
23
  validates :metadata, :presence => true
24
24
  serialize :metadata, Hash
@@ -51,7 +51,7 @@ module Katello
51
51
  self.export_type ||= self.class.export_type_from_metadata(metadata)
52
52
  end
53
53
 
54
- def self.generate_audit_comment(user:, content_view_version:, from_version: nil, metadata:)
54
+ def self.generate_audit_comment(user:, content_view_version:, metadata:, from_version: nil)
55
55
  export_type = export_type_from_metadata(metadata)
56
56
  if content_view_version.content_view.generated_for_library?
57
57
  export_descriptor = "library export"
@@ -35,7 +35,7 @@ module Katello
35
35
  def self.generate_audit_comment(user:, content_view_name:)
36
36
  truncate_audit_comment(_("Content imported by %{user} into content view '%{name}'") % {
37
37
  user: user.to_label,
38
- name: content_view_name
38
+ name: content_view_name,
39
39
  })
40
40
  end
41
41
  end
@@ -33,7 +33,7 @@ module Katello
33
33
  private
34
34
 
35
35
  def deliver_failure_notification
36
- ::Katello::UINotifications::ContentView::DelelteLatestVersionFailure.deliver!(content_view)
36
+ ::Katello::UINotifications::ContentView::DeleteLatestVersionFailure.deliver!(content_view)
37
37
  end
38
38
  end
39
39
  end
@@ -0,0 +1,11 @@
1
+ module Katello
2
+ class FlatpakRemote < Katello::Model
3
+ has_many :remote_repositories, dependent: :destroy, class_name: 'Katello::FlatpakRemoteRepository'
4
+ has_many :remote_repository_manifests, through: :remote_repositories, source: :remote_repository_manifests
5
+ belongs_to :organization, inverse_of: :flatpak_remotes
6
+
7
+ validates :name, presence: true
8
+ validates :url, presence: true
9
+ validates :organization_id, presence: true
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ module Katello
2
+ class FlatpakRemoteRepository < Katello::Model
3
+ belongs_to :flatpak_remote, inverse_of: :remote_repositories
4
+ has_many :remote_repository_manifests, dependent: :destroy, class_name: 'Katello::FlatpakRemoteRepositoryManifest'
5
+
6
+ validates :flatpak_remote_id, presence: true
7
+ validates :name, presence: true
8
+ validates :label, presence: true
9
+
10
+ alias_attribute :manifests, :remote_repository_manifests
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ module Katello
2
+ class FlatpakRemoteRepositoryManifest < Katello::Model
3
+ belongs_to :remote_repository,
4
+ class_name: 'Katello::FlatpakRemoteRepository',
5
+ foreign_key: 'flatpak_remote_repository_id',
6
+ inverse_of: :remote_repository_manifests
7
+ validates :flatpak_remote_repository_id, presence: true
8
+ validates :name, presence: true
9
+ end
10
+ end
@@ -31,7 +31,7 @@ module Katello
31
31
  key_pools.map do |key_pool|
32
32
  {
33
33
  :amount => (key_pool[:quantity] || 0),
34
- :id => key_pool[:poolId]
34
+ :id => key_pool[:poolId],
35
35
  }.with_indifferent_access
36
36
  end
37
37
  end
@@ -21,7 +21,7 @@ module Katello
21
21
  def import_candlepin_record(record:, organization:)
22
22
  db_attrs = {
23
23
  cp_id: record['id'],
24
- organization: organization
24
+ organization: organization,
25
25
  }
26
26
 
27
27
  yield(db_attrs) if block_given?
@@ -74,7 +74,7 @@ module Katello
74
74
  end
75
75
  end
76
76
 
77
- def determine_subscription(product_id: nil, source_stack_id: nil, organization:)
77
+ def determine_subscription(organization:, product_id: nil, source_stack_id: nil)
78
78
  if source_stack_id
79
79
  self.stacking_subscription(organization, source_stack_id)
80
80
  # isn't it an error if we have a sourceStackID but no stacking subscription?
@@ -95,7 +95,7 @@ module Katello
95
95
  :canceled,
96
96
  :error,
97
97
  :paused,
98
- :running
98
+ :running,
99
99
  ]
100
100
 
101
101
  presented.each do |_repoid, task|
@@ -1,5 +1,6 @@
1
1
  module Katello
2
2
  module Host
3
+ # rubocop:disable Metrics/ClassLength
3
4
  class ContentFacet < Katello::Model
4
5
  audited :associated_with => :host
5
6
  self.table_name = 'katello_content_facets'
@@ -46,6 +47,23 @@ module Katello
46
47
  validates_with Katello::Validators::GeneratedContentViewValidator
47
48
  validates_associated :content_view_environment_content_facets, :message => _("invalid: The content source must sync the lifecycle environment assigned to the host. See the logs for more information.")
48
49
  validates :host, :presence => true, :allow_blank => false
50
+ validates :bootc_booted_digest, :bootc_available_digest, :bootc_staged_digest, :bootc_rollback_digest,
51
+ format: { with: /\Asha256:[A-Fa-f0-9]{64}\z/, message: "must be a valid sha256 digest", allow_nil: true }
52
+
53
+ scope :with_environments, ->(lifecycle_environments) do
54
+ joins(:content_view_environment_content_facets => :content_view_environment).
55
+ where("#{::Katello::ContentViewEnvironment.table_name}.environment_id" => lifecycle_environments)
56
+ end
57
+
58
+ scope :with_content_views, ->(content_views) do
59
+ joins(:content_view_environment_content_facets => :content_view_environment).
60
+ where("#{::Katello::ContentViewEnvironment.table_name}.content_view_id" => content_views)
61
+ end
62
+
63
+ scope :with_content_view_environments, ->(content_view_environments) do
64
+ joins(:content_view_environment_content_facets => :content_view_environment).
65
+ where("#{::Katello::ContentViewEnvironment.table_name}.id" => content_view_environments)
66
+ end
49
67
 
50
68
  attr_accessor :cves_changed
51
69
 
@@ -72,6 +90,10 @@ module Katello
72
90
  self.cves_changed = false
73
91
  end
74
92
 
93
+ def image_mode_host?
94
+ bootc_booted_image.present?
95
+ end
96
+
75
97
  def cves_changed?
76
98
  cves_changed
77
99
  end
@@ -111,6 +133,10 @@ module Katello
111
133
  self.host&.update_candlepin_associations unless self.host&.new_record?
112
134
  end
113
135
 
136
+ def content_view_environment_labels
137
+ content_view_environments.map(&:label).join(',')
138
+ end
139
+
114
140
  # rubocop:disable Metrics/CyclomaticComplexity
115
141
  def assign_single_environment(
116
142
  content_view_id: nil, lifecycle_environment_id: nil, environment_id: nil,
@@ -148,10 +174,12 @@ module Katello
148
174
  prefixes = %w(/pulp/deb/ /pulp/repos/ /pulp/content/)
149
175
  relative_paths = []
150
176
 
151
- # paths == ["/pulp/content/Default_Organization/Library/custom/Test_product/test2"]
177
+ # paths == ["/pulp/content/Default_Organization/Library/custom/Test_product/test2",
178
+ # "/pulp/content/Org/Library/custom/Test_product/test2/%3Fcomp%3Dmain%26rel%3Dstable"]
152
179
  paths.each do |path|
153
180
  if (prefix = prefixes.find { |pre| path.start_with?(pre) })
154
- relative_paths << path.gsub(prefix, '')
181
+ # strip prefix and structured_apt postfix before adding to relative_paths
182
+ relative_paths << path.sub(prefix, '').sub(%r{/?(%3F|\?).*}, '')
155
183
  else
156
184
  Rails.logger.warn("System #{self.host.name} (#{self.host.id}) requested binding to repo with unknown prefix. #{path}")
157
185
  end
@@ -193,7 +221,7 @@ module Katello
193
221
  installable_hash = {
194
222
  :security => installable_security_errata_count,
195
223
  :bugfix => installable_bugfix_errata_count,
196
- :enhancement => installable_enhancement_errata_count
224
+ :enhancement => installable_enhancement_errata_count,
197
225
  }
198
226
  installable_hash[:total] = installable_hash.values.inject(:+)
199
227
  # same for applicable, but we need to get the counts from the db
@@ -201,13 +229,13 @@ module Katello
201
229
  applicable_hash = {
202
230
  :bugfix => applicable_errata_counts.values_at(*Katello::Erratum::BUGZILLA).compact.sum,
203
231
  :security => applicable_errata_counts.values_at(*Katello::Erratum::SECURITY).compact.sum,
204
- :enhancement => applicable_errata_counts.values_at(*Katello::Erratum::ENHANCEMENT).compact.sum
232
+ :enhancement => applicable_errata_counts.values_at(*Katello::Erratum::ENHANCEMENT).compact.sum,
205
233
  }
206
234
  applicable_hash[:total] = applicable_errata_counts.values.sum
207
235
 
208
236
  # keeping installable at the top level for backward compatibility
209
237
  installable_hash.merge({
210
- :applicable => applicable_hash
238
+ :applicable => applicable_hash,
211
239
  })
212
240
  end
213
241
 
@@ -257,13 +285,6 @@ module Katello
257
285
  relation.where(queries.join(" OR "))
258
286
  end
259
287
 
260
- def self.in_content_views_and_environments(content_views: nil, lifecycle_environments: nil)
261
- relation = self.joins(:content_view_environment_content_facets => :content_view_environment)
262
- relation = relation.where("#{::Katello::ContentViewEnvironment.table_name}.content_view_id" => content_views) if content_views
263
- relation = relation.where("#{::Katello::ContentViewEnvironment.table_name}.environment_id" => lifecycle_environments) if lifecycle_environments
264
- relation
265
- end
266
-
267
288
  def self.with_non_installable_errata(errata, hosts = nil)
268
289
  content_facets = Katello::Host::ContentFacet.select(:id).where(:host_id => hosts)
269
290
  reachable_repos = ::Katello::ContentFacetRepository.where(content_facet_id: content_facets).distinct.pluck(:repository_id)
@@ -348,11 +369,6 @@ module Katello
348
369
  host.refresh_global_status!
349
370
  end
350
371
 
351
- # TODO: uncomment when we need to display multiple CVE names in the UI
352
- # def content_view_environment_names
353
- # content_view_environments.map(&:candlepin_name).join(', ')
354
- # end
355
-
356
372
  def self.joins_installable_relation(content_model, facet_join_model)
357
373
  facet_repository = Katello::ContentFacetRepository.table_name
358
374
  content_table = content_model.table_name
@@ -1,12 +1,10 @@
1
- require 'host_info'
2
-
3
1
  module Katello
4
2
  module Host
5
3
  class InfoProvider < ::HostInfo::Provider
6
4
  def host_info
7
5
  info = {}
8
6
  info['parameters'] = {
9
- 'foreman_host_collections' => host.host_collections.map(&:name)
7
+ 'foreman_host_collections' => host.host_collections.map(&:name),
10
8
  }
11
9
 
12
10
  if host.content_facet.present?
@@ -45,7 +43,7 @@ module Katello
45
43
  'latest-version' => content_view.try(:latest_version),
46
44
  'version' => content_version(content_view_environment).try(:version),
47
45
  'published' => content_version(content_view_environment).try(:created_at).try(:time).to_s,
48
- 'components' => content_view_components(content_view_environment)
46
+ 'components' => content_view_components(content_view_environment),
49
47
  }
50
48
  end
51
49
 
@@ -146,7 +146,7 @@ module Katello
146
146
  :releaseVer => release_version,
147
147
  :environments => self.candlepin_environments,
148
148
  :installedProducts => self.installed_products.map(&:consumer_attributes),
149
- :guestIds => virtual_guest_uuids
149
+ :guestIds => virtual_guest_uuids,
150
150
  }
151
151
  attrs[:facts] = facts if facts
152
152
  HashWithIndifferentAccess.new(attrs)
@@ -305,7 +305,7 @@ module Katello
305
305
  # might make you think it was converted2rhel but not with satellite, that is why I have the tenary below.
306
306
  facet = host.subscription_facet || host.build_subscription_facet
307
307
  facet.attributes = {
308
- convert2rhel_through_foreman: has_convert2rhel ? ::Foreman::Cast.to_bool(parser.facts['conversions.env.CONVERT2RHEL_THROUGH_FOREMAN']) : nil
308
+ convert2rhel_through_foreman: has_convert2rhel ? ::Foreman::Cast.to_bool(parser.facts['conversions.env.CONVERT2RHEL_THROUGH_FOREMAN']) : nil,
309
309
  }.compact
310
310
  facet.save unless facet.new_record?
311
311
  end
@@ -22,7 +22,7 @@ module Katello
22
22
  DISABLED => :disabled,
23
23
  UNKNOWN => :unknown,
24
24
  INSTALLED => :installed,
25
- UPGRADABLE => :upgradable
25
+ UPGRADABLE => :upgradable,
26
26
  }.with_indifferent_access
27
27
 
28
28
  scoped_search :on => :name, :relation => :available_module_stream, :complete_value => true
@@ -11,7 +11,7 @@ module Katello
11
11
  :arch => consumer_attributes['arch'],
12
12
  :version => consumer_attributes['version'],
13
13
  :name => consumer_attributes['productName'],
14
- :cp_product_id => consumer_attributes['productId']
14
+ :cp_product_id => consumer_attributes['productId'],
15
15
  }
16
16
  Katello::Util::Support.active_record_retry do
17
17
  unless self.where(attributes).exists?
@@ -26,7 +26,7 @@ module Katello
26
26
  :arch => arch,
27
27
  :version => version,
28
28
  :productName => name,
29
- :productId => cp_product_id
29
+ :productId => cp_product_id,
30
30
  }
31
31
  end
32
32
  end
@@ -8,8 +8,6 @@ module Katello
8
8
  include Ext::LabelFromName
9
9
 
10
10
  belongs_to :organization, :class_name => "Organization", :inverse_of => :kt_environments
11
- has_many :activation_keys, :class_name => "Katello::ActivationKey",
12
- :dependent => :restrict_with_exception, :foreign_key => :environment_id
13
11
 
14
12
  has_many :env_priors, :class_name => "Katello::EnvironmentPrior", :foreign_key => :environment_id, :dependent => :destroy
15
13
  has_many :priors, :class_name => "Katello::KTEnvironment", :through => :env_priors, :source => :env_prior
@@ -30,14 +28,21 @@ module Katello
30
28
  has_many :content_view_environments, :class_name => "Katello::ContentViewEnvironment",
31
29
  :foreign_key => :environment_id, :inverse_of => :environment, :dependent => :destroy
32
30
  has_many :content_view_environment_content_facets, :through => :content_view_environments,
33
- :class_name => "Katello::ContentViewEnvironmentContentFacet",
34
- :inverse_of => :lifecycle_environment
31
+ :class_name => "Katello::ContentViewEnvironmentContentFacet"
32
+
35
33
  has_many :content_facets, :through => :content_view_environment_content_facets,
36
- :class_name => "Katello::Host::ContentFacet",
37
- :inverse_of => :lifecycle_environments
34
+ :class_name => "Katello::Host::ContentFacet"
35
+
38
36
  has_many :content_views, :through => :content_view_environments
39
37
  has_many :content_view_versions, :through => :content_view_environments, :inverse_of => :environments
40
38
 
39
+ has_many :content_view_environment_activation_keys, :through => :content_view_environments,
40
+ :class_name => "Katello::ContentViewEnvironmentActivationKey",
41
+ :dependent => :restrict_with_exception
42
+
43
+ has_many :activation_keys, :through => :content_view_environment_activation_keys,
44
+ :class_name => "Katello::ActivationKey"
45
+
41
46
  has_many :hosts, :class_name => "::Host::Managed", :through => :content_facets,
42
47
  :inverse_of => :lifecycle_environments
43
48
  has_many :hostgroup_content_facets, :class_name => "Katello::Hostgroup::ContentFacet", :foreign_key => :lifecycle_environment_id,