katello 3.18.0.rc2.1 → 4.0.0.rc2

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 (380) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/katello/katello.scss +0 -72
  3. data/app/controllers/katello/api/rhsm/candlepin_dynflow_proxy_controller.rb +0 -19
  4. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +1 -3
  5. data/app/controllers/katello/api/v2/api_controller.rb +1 -2
  6. data/app/controllers/katello/api/v2/capsule_content_controller.rb +2 -2
  7. data/app/controllers/katello/api/v2/content_credentials_controller.rb +24 -24
  8. data/app/controllers/katello/api/v2/content_export_incrementals_controller.rb +98 -0
  9. data/app/controllers/katello/api/v2/content_exports_controller.rb +88 -0
  10. data/app/controllers/katello/api/v2/content_imports_controller.rb +59 -0
  11. data/app/controllers/katello/api/v2/content_view_filters_controller.rb +1 -1
  12. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +56 -94
  13. data/app/controllers/katello/api/v2/content_views_controller.rb +2 -2
  14. data/app/controllers/katello/api/v2/host_errata_controller.rb +1 -1
  15. data/app/controllers/katello/api/v2/host_packages_controller.rb +6 -6
  16. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +2 -3
  17. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +3 -2
  18. data/app/controllers/katello/api/v2/repositories_controller.rb +5 -19
  19. data/app/controllers/katello/api/v2/simple_content_access_controller.rb +34 -0
  20. data/app/controllers/katello/api/v2/subscriptions_controller.rb +1 -1
  21. data/app/controllers/katello/api/v2/upstream_subscriptions_controller.rb +8 -4
  22. data/app/controllers/katello/concerns/authorization/api/v2/content_views_controller.rb +1 -1
  23. data/app/helpers/katello/sync_management_helper.rb +0 -2
  24. data/app/lib/actions/candlepin/environment/create.rb +1 -1
  25. data/app/lib/actions/candlepin/environment/set_content.rb +1 -1
  26. data/app/lib/actions/katello/activation_key/create.rb +9 -11
  27. data/app/lib/actions/katello/agent/dispatch_history_presenter.rb +64 -0
  28. data/app/lib/actions/katello/agent_action.rb +107 -0
  29. data/app/lib/actions/katello/applicability/hosts/bulk_generate.rb +6 -2
  30. data/app/lib/actions/katello/bulk_agent_action.rb +21 -0
  31. data/app/lib/actions/katello/capsule_content/sync.rb +8 -8
  32. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +16 -2
  33. data/app/lib/actions/katello/check_matching_content.rb +17 -0
  34. data/app/lib/actions/katello/content_view/environment_create.rb +6 -8
  35. data/app/lib/actions/katello/content_view/promote_to_environment.rb +1 -1
  36. data/app/lib/actions/katello/content_view/publish.rb +2 -2
  37. data/app/lib/actions/katello/content_view_version/import.rb +2 -1
  38. data/app/lib/actions/katello/content_view_version/import_library.rb +17 -0
  39. data/app/lib/actions/katello/content_view_version/incremental_update.rb +30 -10
  40. data/app/lib/actions/katello/host/erratum/applicable_errata_install.rb +1 -1
  41. data/app/lib/actions/katello/host/erratum/install.rb +8 -26
  42. data/app/lib/actions/katello/host/hypervisors_update.rb +4 -4
  43. data/app/lib/actions/katello/host/package/install.rb +8 -21
  44. data/app/lib/actions/katello/host/package/remove.rb +8 -20
  45. data/app/lib/actions/katello/host/package/update.rb +9 -22
  46. data/app/lib/actions/katello/host/package_group/install.rb +8 -21
  47. data/app/lib/actions/katello/host/package_group/remove.rb +8 -20
  48. data/app/lib/actions/katello/host/update_system_purpose.rb +1 -1
  49. data/app/lib/actions/katello/organization/create.rb +3 -5
  50. data/app/lib/actions/katello/organization/destroy.rb +1 -1
  51. data/app/lib/actions/katello/organization/manifest_delete.rb +3 -5
  52. data/app/lib/actions/katello/organization/manifest_import.rb +1 -1
  53. data/app/lib/actions/katello/organization/manifest_refresh.rb +1 -1
  54. data/app/lib/actions/katello/repository/check_matching_content.rb +3 -1
  55. data/app/lib/actions/katello/repository/clone_contents.rb +8 -11
  56. data/app/lib/actions/katello/repository/create.rb +0 -8
  57. data/app/lib/actions/katello/repository/filtered_index_content.rb +3 -0
  58. data/app/lib/actions/katello/repository/index_content.rb +1 -0
  59. data/app/lib/actions/katello/repository/multi_clone_contents.rb +9 -12
  60. data/app/lib/actions/katello/repository/update.rb +0 -8
  61. data/app/lib/actions/middleware/execute_if_contents_changed.rb +4 -1
  62. data/app/lib/actions/middleware/record_smart_proxy_sync_history.rb +24 -4
  63. data/app/lib/actions/pulp/consumer.rb +0 -11
  64. data/app/lib/actions/pulp/orchestration/repository/refresh_repos.rb +0 -6
  65. data/app/lib/actions/pulp3/capsule_content/refresh_distribution.rb +3 -3
  66. data/app/lib/actions/pulp3/content_migration.rb +10 -0
  67. data/app/lib/actions/pulp3/content_migration_presenter.rb +59 -0
  68. data/app/lib/actions/pulp3/content_view/delete_repository_references.rb +1 -1
  69. data/app/lib/actions/pulp3/content_view_version/export.rb +3 -2
  70. data/app/lib/actions/pulp3/import_migration.rb +6 -1
  71. data/app/lib/actions/pulp3/orchestration/content_view_version/copy_version_units_to_library.rb +2 -1
  72. data/app/lib/actions/pulp3/orchestration/content_view_version/export.rb +17 -13
  73. data/app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb +60 -0
  74. data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +0 -4
  75. data/app/lib/actions/pulp3/orchestration/repository/import_upload.rb +16 -3
  76. data/app/lib/actions/pulp3/orchestration/repository/refresh_repos.rb +1 -6
  77. data/app/lib/actions/pulp3/repository/copy_content.rb +1 -1
  78. data/app/lib/actions/pulp3/repository/delete.rb +1 -1
  79. data/app/lib/actions/pulp3/repository/save_version.rb +1 -1
  80. data/app/lib/actions/pulp3/repository/upload_tag.rb +18 -0
  81. data/app/lib/katello/agent/base_message.rb +38 -0
  82. data/app/lib/katello/agent/client_message_handler.rb +60 -0
  83. data/app/lib/katello/agent/connection.rb +24 -0
  84. data/app/lib/katello/agent/install_errata_message.rb +25 -0
  85. data/app/lib/katello/agent/install_package_group_message.rb +25 -0
  86. data/app/lib/katello/agent/install_package_message.rb +28 -0
  87. data/app/lib/katello/agent/remove_package_group_message.rb +25 -0
  88. data/app/lib/katello/agent/remove_package_message.rb +28 -0
  89. data/app/lib/katello/agent/update_package_message.rb +25 -0
  90. data/app/lib/katello/concerns/base_template_scope_extensions.rb +8 -0
  91. data/app/lib/katello/event_daemon/monitor.rb +53 -0
  92. data/app/lib/katello/event_daemon/runner.rb +99 -0
  93. data/app/lib/katello/event_daemon/services/agent_event_receiver.rb +62 -0
  94. data/app/lib/katello/logging.rb +32 -0
  95. data/app/lib/katello/messaging/connection.rb +1 -7
  96. data/app/lib/katello/messaging/received_message.rb +1 -1
  97. data/app/lib/katello/qpid/connection.rb +130 -0
  98. data/app/lib/katello/validators/content_view_puppet_module_validator.rb +1 -1
  99. data/app/models/katello/activation_key.rb +2 -2
  100. data/app/models/katello/agent/dispatch_history.rb +17 -0
  101. data/app/models/katello/authorization/content_view_version.rb +25 -2
  102. data/app/models/katello/authorization/content_view_version_export_history.rb +1 -1
  103. data/app/models/katello/authorization/organization.rb +8 -0
  104. data/app/models/katello/candlepin/repository_mapper.rb +1 -1
  105. data/app/models/katello/concerns/host_managed_extensions.rb +3 -0
  106. data/app/models/katello/concerns/operatingsystem_extensions.rb +2 -0
  107. data/app/models/katello/concerns/organization_extensions.rb +2 -2
  108. data/app/models/katello/concerns/pulp_database_unit.rb +7 -0
  109. data/app/models/katello/concerns/redhat_extensions.rb +2 -2
  110. data/app/models/katello/concerns/smart_proxy_extensions.rb +31 -5
  111. data/app/models/katello/content_migration_progress.rb +4 -0
  112. data/app/models/katello/content_view.rb +10 -1
  113. data/app/models/katello/content_view_environment.rb +2 -2
  114. data/app/models/katello/content_view_history.rb +2 -1
  115. data/app/models/katello/content_view_package_filter.rb +1 -1
  116. data/app/models/katello/content_view_puppet_environment.rb +2 -2
  117. data/app/models/katello/content_view_version.rb +2 -1
  118. data/app/models/katello/content_view_version_export_history.rb +26 -1
  119. data/app/models/katello/erratum.rb +3 -1
  120. data/app/models/katello/events/delete_host_agent_queue.rb +19 -0
  121. data/app/models/katello/glue/candlepin/pool.rb +2 -0
  122. data/app/models/katello/glue/pulp/repo.rb +0 -6
  123. data/app/models/katello/glue/pulp/repos.rb +1 -22
  124. data/app/models/katello/host/subscription_facet.rb +4 -0
  125. data/app/models/katello/ping.rb +12 -4
  126. data/app/models/katello/pool.rb +5 -0
  127. data/app/models/katello/product.rb +3 -3
  128. data/app/models/katello/repository.rb +10 -3
  129. data/app/models/katello/subscription_status.rb +3 -2
  130. data/app/models/setting/content.rb +0 -2
  131. data/app/presenters/katello/host_subscription_presenter.rb +3 -4
  132. data/app/presenters/katello/host_subscriptions_presenter.rb +24 -0
  133. data/app/services/katello/agent/dispatcher.rb +66 -0
  134. data/app/services/katello/applicability/applicable_content_helper.rb +44 -15
  135. data/app/services/katello/candlepin_event_listener.rb +12 -19
  136. data/app/services/katello/event_monitor/poller_thread.rb +3 -11
  137. data/app/services/katello/pulp/smart_proxy_repository.rb +0 -15
  138. data/app/services/katello/pulp3/api/docker.rb +4 -0
  139. data/app/services/katello/pulp3/content_view_version/export.rb +63 -5
  140. data/app/services/katello/pulp3/content_view_version/import.rb +40 -0
  141. data/app/services/katello/pulp3/content_view_version/import_export_common.rb +0 -16
  142. data/app/services/katello/pulp3/content_view_version/import_validator.rb +26 -49
  143. data/app/services/katello/pulp3/docker_manifest.rb +1 -0
  144. data/app/services/katello/pulp3/docker_tag.rb +1 -0
  145. data/app/services/katello/pulp3/migration.rb +44 -9
  146. data/app/services/katello/pulp3/repository.rb +13 -4
  147. data/app/services/katello/pulp3/repository/docker.rb +5 -0
  148. data/app/services/katello/pulp3/repository/yum.rb +15 -9
  149. data/app/services/katello/pulp3/task.rb +4 -0
  150. data/app/services/katello/pulp3/task_group.rb +4 -0
  151. data/app/services/katello/registration_manager.rb +10 -0
  152. data/app/services/katello/repository_type.rb +1 -1
  153. data/app/views/foreman/smart_proxies/_content_tab.html.erb +4 -47
  154. data/app/views/foreman/smart_proxies/show.html.erb +1 -1
  155. data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +22 -25
  156. data/app/views/katello/api/v2/content_view_version_export_histories/show.json.rabl +1 -0
  157. data/app/views/katello/api/v2/content_views/show.json.rabl +6 -0
  158. data/app/views/katello/api/v2/organizations/show.json.rabl +7 -9
  159. data/app/views/katello/layouts/react.html.erb +3 -2
  160. data/app/views/katello/sync_management/_products.html.erb +1 -1
  161. data/app/views/overrides/activation_keys/_host_tab_pane.html.erb +1 -5
  162. data/app/views/overrides/organizations/_edit_override.html.erb +1 -4
  163. data/app/views/overrides/smart_proxies/_environment_tab.html.erb +1 -1
  164. data/app/views/overrides/smart_proxies/_environment_tab_pane.html.erb +1 -1
  165. data/config/katello.yaml.example +0 -3
  166. data/config/routes/api/v2.rb +31 -13
  167. data/db/migrate/20150930183738_migrate_content_hosts.rb +1 -1
  168. data/db/migrate/20191204214919_add_content_view_version_counts.rb +0 -1
  169. data/db/migrate/20200514092553_move_katello_fields_from_hostgroups.katello.rb +5 -2
  170. data/db/migrate/20201119211133_pulp3_migration_progress.rb +9 -0
  171. data/db/migrate/20210119162528_delete_puppet_and_ostree_repos.rb +56 -0
  172. data/db/migrate/20210122200618_create_katello_agent_dispatch_history.rb +11 -0
  173. data/db/migrate/20210125161911_delete_erratum_install_batch_size_setting.rb +5 -0
  174. data/db/migrate/20210128231228_add_type_and_from_cvv_to_cvv_export_history.rb +14 -0
  175. data/db/migrate/20210201163238_migrate_background_download_policy_to_migrate.rb +7 -0
  176. data/db/migrate/20210208213920_add_available_module_stream_context.rb +8 -0
  177. data/db/seeds.d/104-proxy.rb +1 -1
  178. data/db/seeds.d/111-upgrade_tasks.rb +2 -1
  179. data/engines/bastion/app/assets/javascripts/bastion/auth/authorization.service.js +1 -1
  180. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/capsule-content/capsule-content.controller.js +1 -1
  181. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/common/views/katello-agent-notice.html +1 -1
  182. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-system-purpose-modal.html +35 -40
  183. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-register-os-client.directive.js +17 -0
  184. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +2 -2
  185. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +2 -2
  186. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-client.html +12 -5
  187. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-deb-client.html +38 -0
  188. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-oracle-client.html +5 -0
  189. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-sles-client.html +28 -0
  190. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register.html +14 -11
  191. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-activation-keys.controller.js +8 -3
  192. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-content-hosts.controller.js +9 -3
  193. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter-details.html +2 -2
  194. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details.html +1 -1
  195. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-publish.html +4 -0
  196. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +78 -7
  197. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +17 -20
  198. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +17 -24
  199. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +1292 -1170
  200. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +17 -20
  201. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +858 -807
  202. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +18 -19
  203. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +17 -24
  204. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +17 -18
  205. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +986 -971
  206. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +19 -20
  207. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +9 -9
  208. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +2 -2
  209. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +1 -1
  210. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/download-policy.service.js +0 -1
  211. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +1 -1
  212. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.controller.js +2 -2
  213. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/subscription-start-date.directive.js +21 -0
  214. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/subscription-type.directive.js +16 -0
  215. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/subscription-start-date.html +2 -0
  216. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/subscription-type.html +18 -0
  217. data/lib/katello/engine.rb +12 -6
  218. data/lib/katello/middleware/event_daemon.rb +1 -1
  219. data/lib/katello/permission_creator.rb +26 -5
  220. data/lib/katello/plugin.rb +3 -2
  221. data/lib/katello/tasks/delete_orphaned_content.rake +1 -3
  222. data/lib/katello/tasks/jenkins.rake +1 -1
  223. data/lib/katello/tasks/pulp3_content_switchover.rake +1 -1
  224. data/lib/katello/tasks/pulp3_migration.rake +18 -6
  225. data/lib/katello/tasks/pulp3_migration_abort.rake +7 -2
  226. data/lib/katello/tasks/pulp3_migration_stats.rake +28 -8
  227. data/lib/katello/tasks/pulp3_post_migration_check.rake +1 -3
  228. data/lib/katello/tasks/receptor/extract_orgs.rake +1 -1
  229. data/lib/katello/tasks/reimport.rake +1 -1
  230. data/lib/katello/tasks/repository.rake +3 -5
  231. data/lib/katello/tasks/reset.rake +0 -15
  232. data/lib/katello/tasks/upgrades/4.0/remove_ostree_puppet_content.rake +16 -0
  233. data/lib/katello/version.rb +1 -1
  234. data/lib/proxy_api/container_gateway.rb +21 -0
  235. data/locale/action_names.rb +51 -51
  236. data/locale/bn/katello.edit.po +8538 -0
  237. data/locale/bn/katello.po +136 -51
  238. data/locale/bn/katello.po.time_stamp +0 -0
  239. data/locale/cs/katello.edit.po +8440 -0
  240. data/locale/cs/katello.po +136 -49
  241. data/locale/cs/katello.po.time_stamp +0 -0
  242. data/locale/de/katello.edit.po +8344 -0
  243. data/locale/de/katello.po +136 -48
  244. data/locale/de/katello.po.time_stamp +0 -0
  245. data/locale/en/katello.edit.po +8161 -0
  246. data/locale/en/katello.po +136 -48
  247. data/locale/en/katello.po.time_stamp +0 -0
  248. data/locale/es/katello.edit.po +8306 -0
  249. data/locale/es/katello.po +136 -48
  250. data/locale/es/katello.po.time_stamp +0 -0
  251. data/locale/fr/katello.edit.po +8356 -0
  252. data/locale/fr/katello.po +136 -48
  253. data/locale/fr/katello.po.time_stamp +0 -0
  254. data/locale/gu/katello.edit.po +8540 -0
  255. data/locale/gu/katello.po +136 -51
  256. data/locale/gu/katello.po.time_stamp +0 -0
  257. data/locale/hi/katello.edit.po +8537 -0
  258. data/locale/hi/katello.po +136 -51
  259. data/locale/hi/katello.po.time_stamp +0 -0
  260. data/locale/it/katello.edit.po +8293 -0
  261. data/locale/it/katello.po +136 -48
  262. data/locale/it/katello.po.time_stamp +0 -0
  263. data/locale/ja/katello.edit.po +8322 -0
  264. data/locale/ja/katello.po +136 -48
  265. data/locale/ja/katello.po.time_stamp +0 -0
  266. data/locale/katello.pot +941 -767
  267. data/locale/kn/katello.edit.po +8538 -0
  268. data/locale/kn/katello.po +136 -51
  269. data/locale/kn/katello.po.time_stamp +0 -0
  270. data/locale/ko/katello.edit.po +8289 -0
  271. data/locale/ko/katello.po +136 -48
  272. data/locale/ko/katello.po.time_stamp +0 -0
  273. data/locale/mr/katello.edit.po +8502 -0
  274. data/locale/mr/katello.po +136 -51
  275. data/locale/mr/katello.po.time_stamp +0 -0
  276. data/locale/or/katello.edit.po +8538 -0
  277. data/locale/or/katello.po +136 -51
  278. data/locale/or/katello.po.time_stamp +0 -0
  279. data/locale/pa/katello.edit.po +8524 -0
  280. data/locale/pa/katello.po +136 -51
  281. data/locale/pa/katello.po.time_stamp +0 -0
  282. data/locale/pt/katello.edit.po +8255 -0
  283. data/locale/pt/katello.po +136 -51
  284. data/locale/pt/katello.po.time_stamp +0 -0
  285. data/locale/pt_BR/katello.edit.po +8289 -0
  286. data/locale/pt_BR/katello.po +136 -48
  287. data/locale/pt_BR/katello.po.time_stamp +0 -0
  288. data/locale/ru/katello.edit.po +8309 -0
  289. data/locale/ru/katello.po +136 -48
  290. data/locale/ru/katello.po.time_stamp +0 -0
  291. data/locale/ta/katello.edit.po +8536 -0
  292. data/locale/ta/katello.po +136 -51
  293. data/locale/ta/katello.po.time_stamp +0 -0
  294. data/locale/te/katello.edit.po +8536 -0
  295. data/locale/te/katello.po +136 -51
  296. data/locale/te/katello.po.time_stamp +0 -0
  297. data/locale/zh_CN/katello.edit.po +8288 -0
  298. data/locale/zh_CN/katello.po +136 -48
  299. data/locale/zh_CN/katello.po.time_stamp +0 -0
  300. data/locale/zh_TW/katello.edit.po +8420 -0
  301. data/locale/zh_TW/katello.po +136 -48
  302. data/locale/zh_TW/katello.po.time_stamp +0 -0
  303. data/package.json +1 -1
  304. data/webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js +0 -1
  305. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationHooks.js +2 -0
  306. data/webpack/__mocks__/foremanReact/components/common/dates/LongDateTime.js +5 -0
  307. data/webpack/{scenes/ContentViews/Details/Repositories → components/SelectableDropdown}/SelectableDropdown.js +20 -3
  308. data/webpack/components/SelectableDropdown/__tests__/SelectableDropdown.test.js +45 -0
  309. data/webpack/components/SelectableDropdown/index.js +3 -0
  310. data/webpack/components/Table/TableWrapper.js +2 -1
  311. data/webpack/components/Table/helpers.js +14 -0
  312. data/webpack/components/TypeAhead/TypeAhead.js +2 -1
  313. data/webpack/components/TypeAhead/pf3Search/TypeAheadSearch.js +2 -1
  314. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +0 -1
  315. data/webpack/containers/Application/overrides.scss +6 -0
  316. data/webpack/index.js +6 -0
  317. data/webpack/redux/actions/RedHatRepositories/helpers.js +5 -5
  318. data/webpack/scenes/ContentViews/ContentViewsActions.js +31 -2
  319. data/webpack/scenes/ContentViews/ContentViewsConstants.js +5 -1
  320. data/webpack/scenes/ContentViews/Copy/ContentViewCopySelectors.js +16 -0
  321. data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +77 -0
  322. data/webpack/scenes/ContentViews/Copy/CopyContentViewModal.js +44 -0
  323. data/webpack/scenes/ContentViews/Copy/__tests__/contentViewCopyResult.fixtures.json +42 -0
  324. data/webpack/scenes/ContentViews/Copy/__tests__/copyContentView.test.js +39 -0
  325. data/webpack/scenes/ContentViews/Copy/index.js +4 -0
  326. data/webpack/scenes/ContentViews/Create/ContentViewCreateSelectors.js +16 -0
  327. data/webpack/scenes/ContentViews/Create/ContentViewFormComponents.js +58 -0
  328. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +175 -0
  329. data/webpack/scenes/ContentViews/Create/CreateContentViewModal.js +27 -0
  330. data/webpack/scenes/ContentViews/Create/__tests__/contentViewCreateResult.fixtures.json +42 -0
  331. data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +92 -0
  332. data/webpack/scenes/ContentViews/Create/index.js +4 -0
  333. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +16 -0
  334. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +20 -1
  335. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +17 -7
  336. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +19 -13
  337. data/webpack/scenes/ContentViews/Details/Filters/ContentType.js +40 -0
  338. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +124 -0
  339. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.fixtures.json +134 -0
  340. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +92 -0
  341. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +44 -25
  342. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.test.js +17 -7
  343. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +24 -0
  344. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +53 -3
  345. data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +4 -3
  346. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +41 -0
  347. data/webpack/scenes/ContentViews/helpers.js +13 -0
  348. data/webpack/scenes/SmartProxy/Content.js +17 -0
  349. data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +11 -0
  350. data/webpack/scenes/SmartProxy/SmartProxyContentConstants.js +3 -0
  351. data/webpack/scenes/SmartProxy/SmartProxyContentSelectors.js +16 -0
  352. data/webpack/scenes/SmartProxy/SmartProxyContentTable.js +152 -0
  353. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentResult.fixtures.json +140 -0
  354. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.js +38 -0
  355. data/webpack/scenes/SmartProxy/index.js +4 -0
  356. data/webpack/scenes/Subscriptions/Manifest/ManifestActions.js +3 -3
  357. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManifestActions.test.js +2 -2
  358. data/webpack/scenes/Subscriptions/Manifest/__tests__/SimpleContentAccess.test.js +2 -2
  359. data/webpack/test-utils/react-testing-lib-wrapper.js +5 -2
  360. data/webpack/utils/helpers.js +3 -0
  361. metadata +160 -40
  362. data/app/controllers/katello/api/v2/gpg_keys_controller.rb +0 -114
  363. data/app/lib/actions/pulp/consumer/abstract_content_action.rb +0 -71
  364. data/app/lib/actions/pulp/consumer/content_install.rb +0 -43
  365. data/app/lib/actions/pulp/consumer/content_uninstall.rb +0 -26
  366. data/app/lib/actions/pulp/consumer/content_update.rb +0 -32
  367. data/app/overrides/disable_turbolinks_on_proxies_index.rb +0 -5
  368. data/app/services/katello/event_daemon.rb +0 -135
  369. data/app/services/katello/pulp/content_counts_calculator.rb +0 -60
  370. data/db/functions/empty_v01.sql +0 -7
  371. data/db/functions/evr_trigger_v01.sql +0 -9
  372. data/db/functions/isalpha_v01.sql +0 -11
  373. data/db/functions/isalphanum_v01.sql +0 -12
  374. data/db/functions/isdigit_v01.sql +0 -10
  375. data/db/functions/rpmver_array_v01.sql +0 -60
  376. data/lib/katello/tasks/common.rake +0 -7
  377. data/lib/katello/tasks/reports.rake +0 -4
  378. data/lib/katello/tasks/upgrades/3.10/update_gpg_key_urls.rake +0 -32
  379. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.scss +0 -5
  380. data/webpack/scenes/ContentViews/Table/actionResolver.js +0 -28
@@ -113,12 +113,6 @@ module Katello
113
113
  backend_service(capsule).generate_distributors
114
114
  end
115
115
 
116
- def populate_from(repos_map)
117
- found = repos_map[self.pulp_id]
118
- prepopulate(found) if found
119
- !found.nil?
120
- end
121
-
122
116
  def package_group_count
123
117
  content_unit_counts = 0
124
118
  if self.pulp_repo_facts
@@ -12,27 +12,6 @@ module Katello
12
12
  "#{path_prefix}/#{path}"
13
13
  end
14
14
 
15
- def self.prepopulate!(products, environment, repos = [], content_view = nil)
16
- if content_view.nil?
17
- if environment.library?
18
- content_view = environment.default_content_view
19
- else
20
- fail "No content view specified for a Non library environment #{environment.inspect}"
21
- end
22
- end
23
-
24
- items = Katello.pulp_server.extensions.repository.search_by_repository_ids(Repository.in_environment(environment).pluck(:pulp_id))
25
- full_repos = {}
26
- items.each { |item| full_repos[item["id"]] = item }
27
-
28
- products.each do |prod|
29
- prod.repos(environment, content_view).each do |repo|
30
- repo.populate_from(full_repos)
31
- end
32
- end
33
- repos.each { |repo| repo.populate_from(full_repos) }
34
- end
35
-
36
15
  module InstanceMethods
37
16
  def distributions(env)
38
17
  to_ret = []
@@ -125,7 +104,7 @@ module Katello
125
104
  AND inner_select.resource_id = locks_foreman_tasks_tasks.resource_id")
126
105
  .distinct
127
106
 
128
- max_per_repoid.map { |x| [x.resource_id, x] }.to_h
107
+ max_per_repoid.index_by { |x| [x.resource_id, x] }
129
108
  end
130
109
 
131
110
  def sync_state_aggregated
@@ -282,6 +282,10 @@ module Katello
282
282
  name.gsub('_', '-').chomp('.').downcase
283
283
  end
284
284
 
285
+ def unsubscribed_hypervisor?
286
+ self.hypervisor && !self.candlepin_consumer.entitlements?
287
+ end
288
+
285
289
  def candlepin_consumer
286
290
  @candlepin_consumer ||= Katello::Candlepin::Consumer.new(self.uuid, self.host.organization.label)
287
291
  end
@@ -14,7 +14,7 @@ module Katello
14
14
 
15
15
  def services(capsule_id = nil)
16
16
  proxy = fetch_proxy(capsule_id)
17
- services = [:candlepin, :candlepin_auth, :foreman_tasks, :katello_events, :candlepin_events]
17
+ services = [:candlepin, :candlepin_auth, :foreman_tasks, :katello_events, :candlepin_events, :katello_agent]
18
18
  services += [:pulp3] if proxy&.pulp3_enabled? && pulpcore_enabled
19
19
  if proxy.nil? || proxy.has_feature?(SmartProxy::PULP_NODE_FEATURE) || proxy.has_feature?(SmartProxy::PULP_FEATURE)
20
20
  services += [:pulp, :pulp_auth]
@@ -38,6 +38,7 @@ module Katello
38
38
  ping_foreman_tasks(result[:foreman_tasks]) if result.include?(:foreman_tasks)
39
39
  ping_katello_events(result[:katello_events]) if result.include?(:katello_events)
40
40
  ping_candlepin_events(result[:candlepin_events]) if result.include?(:candlepin_events)
41
+ ping_katello_agent(result[:katello_agent]) if result.include?(:katello_agent)
41
42
 
42
43
  # set overall status result code
43
44
  result = {:services => result}
@@ -56,7 +57,7 @@ module Katello
56
57
  running = status&.dig(:running)
57
58
 
58
59
  if running
59
- result[:message] = "#{status[:processed_count]} Processed, #{status[:failed_count]} Failed"
60
+ result[:message] = "#{status[:processed_count].to_i} Processed, #{status[:failed_count].to_i} Failed"
60
61
  else
61
62
  result[:status] = FAIL_RETURN_CODE
62
63
  result[:message] = _("Not running")
@@ -65,14 +66,21 @@ module Katello
65
66
 
66
67
  def ping_katello_events(result)
67
68
  exception_watch(result) do
68
- status = Katello::EventMonitor::PollerThread.status(refresh: false)
69
+ status = Katello::EventDaemon::Runner.service_status(:katello_events)
69
70
  event_daemon_status(status, result)
70
71
  end
71
72
  end
72
73
 
73
74
  def ping_candlepin_events(result)
74
75
  exception_watch(result) do
75
- status = Katello::CandlepinEventListener.status(refresh: false)
76
+ status = Katello::EventDaemon::Runner.service_status(:candlepin_events)
77
+ event_daemon_status(status, result)
78
+ end
79
+ end
80
+
81
+ def ping_katello_agent(result)
82
+ exception_watch(result) do
83
+ status = Katello::EventDaemon::Services::AgentEventReceiver.status(refresh: false)
76
84
  event_daemon_status(status, result)
77
85
  end
78
86
  end
@@ -22,6 +22,7 @@ module Katello
22
22
  where(["end_date < ?", days.to_i.days.from_now.end_of_day])
23
23
  end
24
24
  scope :upstream, -> { where.not(upstream_pool_id: nil) }
25
+ scope :redhat, -> { joins(:products).merge(Katello::Product.redhat).distinct }
25
26
 
26
27
  include Glue::Candlepin::Pool
27
28
  include Glue::Candlepin::CandlepinObject
@@ -51,6 +52,10 @@ module Katello
51
52
 
52
53
  DAYS_RECENTLY_EXPIRED = 30
53
54
 
55
+ def redhat?
56
+ self.class.redhat.where(:id => self.id).exists?
57
+ end
58
+
54
59
  def active?
55
60
  active
56
61
  end
@@ -3,9 +3,9 @@ module Katello
3
3
  audited
4
4
 
5
5
  include ForemanTasks::Concerns::ActionSubject
6
- include Glue::Candlepin::Product if SETTINGS[:katello][:use_cp]
7
- include Glue::Pulp::Repos if SETTINGS[:katello][:use_pulp]
8
- include Glue if SETTINGS[:katello][:use_cp] || SETTINGS[:katello][:use_pulp]
6
+ include Glue::Candlepin::Product
7
+ include Glue::Pulp::Repos
8
+ include Glue
9
9
 
10
10
  include Katello::Authorization::Product
11
11
 
@@ -12,9 +12,9 @@ module Katello
12
12
 
13
13
  include ForemanTasks::Concerns::ActionSubject
14
14
  include Glue::Candlepin::Repository
15
- include Glue::Pulp::Repo if SETTINGS[:katello][:use_pulp]
15
+ include Glue::Pulp::Repo
16
16
 
17
- include Glue if (SETTINGS[:katello][:use_cp] || SETTINGS[:katello][:use_pulp])
17
+ include Glue
18
18
  include Authorization::Repository
19
19
  include Katello::Engine.routes.url_helpers
20
20
 
@@ -122,6 +122,8 @@ module Katello
122
122
 
123
123
  scope :has_url, -> { joins(:root).where.not("#{RootRepository.table_name}.url" => nil) }
124
124
  scope :on_demand, -> { joins(:root).where("#{RootRepository.table_name}.download_policy" => ::Runcible::Models::YumImporter::DOWNLOAD_ON_DEMAND) }
125
+ scope :immediate, -> { joins(:root).where("#{RootRepository.table_name}.download_policy" => ::Runcible::Models::YumImporter::DOWNLOAD_IMMEDIATE) }
126
+ scope :non_immediate, -> { joins(:root).where.not("#{RootRepository.table_name}.download_policy" => ::Runcible::Models::YumImporter::DOWNLOAD_IMMEDIATE) }
125
127
  scope :in_default_view, -> { joins(:content_view_version => :content_view).where("#{Katello::ContentView.table_name}.default" => true) }
126
128
  scope :in_non_default_view, -> { joins(:content_view_version => :content_view).where("#{Katello::ContentView.table_name}.default" => false) }
127
129
  scope :deb_type, -> { with_type(DEB_TYPE) }
@@ -143,7 +145,7 @@ module Katello
143
145
  scoped_search :rename => :product, :on => :name, :relation => :product, :complete_value => true
144
146
  scoped_search :rename => :product_id, :on => :id, :relation => :product
145
147
  scoped_search :on => :content_type, :relation => :root, :complete_value => -> do
146
- Katello::RepositoryTypeManager.repository_types.keys.each_with_object({}) { |value, hash| hash[value.to_sym] = value }
148
+ Katello::RepositoryTypeManager.repository_types.keys.index_by { |value| value.to_sym }
147
149
  end
148
150
  scoped_search :on => :content_view_id, :relation => :content_view_repositories, :validator => ScopedSearch::Validators::INTEGER, :only_explicit => true
149
151
  scoped_search :on => :distribution_version, :complete_value => true
@@ -154,6 +156,7 @@ module Katello
154
156
  scoped_search :on => :redhat, :complete_value => { :true => true, :false => false }, :ext_method => :search_by_redhat
155
157
  scoped_search :on => :container_repository_name, :complete_value => true
156
158
  scoped_search :on => :description, :relation => :root, :only_explicit => true
159
+ scoped_search :on => :download_policy, :relation => :root, :only_explicit => true
157
160
  scoped_search :on => :name, :relation => :product, :rename => :product_name
158
161
  scoped_search :on => :id, :relation => :product, :rename => :product_id, :only_explicit => true
159
162
  scoped_search :on => :label, :relation => :root, :complete_value => true, :only_explicit => true
@@ -287,6 +290,10 @@ module Katello
287
290
  root.download_policy == Runcible::Models::YumImporter::DOWNLOAD_ON_DEMAND
288
291
  end
289
292
 
293
+ def immediate?
294
+ root.download_policy == ::Runcible::Models::YumImporter::DOWNLOAD_IMMEDIATE
295
+ end
296
+
290
297
  def yum_gpg_key_url
291
298
  # if the repo has a gpg key return a url to access it
292
299
  if self.root.gpg_key.try(:content).present?
@@ -43,9 +43,10 @@ module Katello
43
43
 
44
44
  def to_status(options = {})
45
45
  return UNKNOWN unless host.subscription_facet.try(:uuid)
46
- status_override = 'unsubscribed_hypervisor' if host.subscription_facet.hypervisor && !host.subscription_facet.candlepin_consumer.entitlements?
46
+ return DISABLED if host.organization.simple_content_access?
47
+ status_override = 'unsubscribed_hypervisor' if host.subscription_facet.unsubscribed_hypervisor?
47
48
  status_override ||= options.fetch(:status_override, nil)
48
- status = status_override || Katello::Candlepin::Consumer.new(host.subscription_facet.uuid, host.organization.label).entitlement_status
49
+ status = status_override || host.subscription_facet.candlepin_consumer.entitlement_status
49
50
 
50
51
  case status
51
52
  when Katello::Candlepin::Consumer::ENTITLEMENTS_DISABLED
@@ -120,8 +120,6 @@ class Setting::Content < Setting
120
120
  '', N_('Subscription manager name registration fact'), nil),
121
121
  self.set('register_hostname_fact_strict_match', N_('If true, and register_hostname_fact is set and provided, registration will look for a new host by name only '\
122
122
  'using that fact, and will skip all hostname matching'), false, N_('Subscription manager name registration fact strict matching'), nil),
123
- self.set('erratum_install_batch_size', N_("Errata installed via katello-agent will be triggered in batches of this size. Set to 0 to install all errata in one batch."),
124
- 0, N_('Erratum Install Batch Size')),
125
123
  self.set('default_location_subscribed_hosts',
126
124
  N_('Default Location where new subscribed hosts will put upon registration'),
127
125
  nil, N_('Default Location subscribed hosts'), nil,
@@ -1,11 +1,10 @@
1
1
  module Katello
2
2
  class HostSubscriptionPresenter < SimpleDelegator
3
- attr_accessor :quantity_consumed
3
+ attr_reader :quantity_consumed
4
4
 
5
- def initialize(entitlement)
6
- @subscription = Katello::Pool.find_by(:cp_id => entitlement['pool']['id'])
5
+ def initialize(pool:, entitlement:)
7
6
  @quantity_consumed = entitlement.try(:[], :quantity)
8
- super(@subscription)
7
+ super(pool)
9
8
  end
10
9
  end
11
10
  end
@@ -0,0 +1,24 @@
1
+ module Katello
2
+ class HostSubscriptionsPresenter
3
+ attr_reader :subscriptions
4
+
5
+ def initialize(host)
6
+ pools = host.subscription_facet&.pools || []
7
+ @pools = pools.group_by(&:cp_id)
8
+
9
+ entitlements = host.subscription_facet.candlepin_consumer.entitlements if @pools.any?
10
+ entitlements ||= []
11
+
12
+ @subscriptions = entitlements.map do |e|
13
+ HostSubscriptionPresenter.new(pool: pool_for_entitlement(e), entitlement: e)
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def pool_for_entitlement(entitlement)
20
+ pool_cp_id = entitlement['pool']['id']
21
+ @pools[pool_cp_id]&.first
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,66 @@
1
+ module Katello
2
+ module Agent
3
+ class Dispatcher
4
+ @supported_messages = {}
5
+
6
+ def self.register_message(name, klass)
7
+ @supported_messages[name] = klass
8
+ end
9
+
10
+ register_message(:install_package, Katello::Agent::InstallPackageMessage)
11
+ register_message(:remove_package, Katello::Agent::RemovePackageMessage)
12
+ register_message(:update_package, Katello::Agent::UpdatePackageMessage)
13
+ register_message(:install_errata, Katello::Agent::InstallErrataMessage)
14
+ register_message(:install_package_group, Katello::Agent::InstallPackageGroupMessage)
15
+ register_message(:remove_package_group, Katello::Agent::RemovePackageGroupMessage)
16
+
17
+ def self.dispatch(message_type, host_ids, args)
18
+ message_class = @supported_messages[message_type]
19
+
20
+ fail("Unsupported message type") unless message_class
21
+
22
+ uuid_data = ::Katello::Host::ContentFacet.where(host_id: host_ids).pluck(:host_id, :uuid)
23
+ fail("Couldn't find all hosts specified") unless host_ids.size == uuid_data.size
24
+
25
+ host_data = uuid_data.map do |host_id, consumer_id|
26
+ {
27
+ host_id: host_id,
28
+ consumer_id: consumer_id,
29
+ history: Katello::Agent::DispatchHistory.new(host_id: host_id),
30
+ message: message_class.new(**args.merge(consumer_id: consumer_id))
31
+ }
32
+ end
33
+
34
+ histories = host_data.map { |attrs| attrs[:history] }
35
+ ActiveRecord::Base.transaction do
36
+ Katello::Agent::DispatchHistory.import(histories)
37
+
38
+ host_data.each do |d|
39
+ d[:message].dispatch_history_id = d[:history].id
40
+ d[:message].recipient_address = settings[:client_queue_format] % [d[:consumer_id]]
41
+ d[:message].reply_to = settings[:event_queue_name]
42
+ end
43
+
44
+ connection = Connection.new
45
+ connection.send_messages(host_data.map { |d| d[:message] })
46
+ end
47
+
48
+ histories
49
+ end
50
+
51
+ def self.delete_client_queue(queue_name:)
52
+ connection = Connection.new
53
+ connection.delete_client_queue(queue_name)
54
+ end
55
+
56
+ def self.host_queue_name(host)
57
+ uuid = host.content_facet.uuid
58
+ settings[:client_queue_format] % uuid
59
+ end
60
+
61
+ def self.settings
62
+ SETTINGS[:katello][:agent]
63
+ end
64
+ end
65
+ end
66
+ end
@@ -60,17 +60,7 @@ module Katello
60
60
  end
61
61
 
62
62
  def fetch_rpm_content_ids
63
- # Query for applicable RPM ids
64
- # -> Include all non-modular rpms or rpms that exist within installed module streams
65
- enabled_module_stream_ids = ::Katello::ModuleStream.
66
- joins("inner join katello_available_module_streams on
67
- katello_module_streams.name = katello_available_module_streams.name and
68
- katello_module_streams.stream = katello_available_module_streams.stream").
69
- joins("inner join katello_host_available_module_streams on
70
- katello_available_module_streams.id = katello_host_available_module_streams.available_module_stream_id").
71
- where("katello_host_available_module_streams.host_id = :content_facet_id and
72
- katello_host_available_module_streams.status = 'enabled'",
73
- :content_facet_id => self.content_facet.host.id).select(:id)
63
+ enabled_module_stream_ids = fetch_enabled_module_stream_ids
74
64
 
75
65
  ::Katello::Rpm.
76
66
  joins("INNER JOIN katello_repository_rpms ON
@@ -78,7 +68,8 @@ module Katello
78
68
  joins("INNER JOIN katello_installed_packages ON
79
69
  katello_rpms.name = katello_installed_packages.name AND
80
70
  katello_rpms.arch = katello_installed_packages.arch AND
81
- katello_rpms.evr > katello_installed_packages.evr").
71
+ katello_rpms.evr > katello_installed_packages.evr AND
72
+ katello_installed_packages.id in (#{newest_distinct_installed_packages_query})").
82
73
  joins("LEFT JOIN katello_module_stream_rpms ON
83
74
  katello_rpms.id = katello_module_stream_rpms.rpm_id").
84
75
  joins("INNER JOIN katello_host_installed_packages ON
@@ -87,9 +78,47 @@ module Katello
87
78
  :bound_library_repos => self.bound_library_instance_repos).
88
79
  where("katello_host_installed_packages.host_id = :content_facet_id",
89
80
  :content_facet_id => self.content_facet.host.id).
90
- where("katello_module_stream_rpms.module_stream_id is null or
91
- katello_module_stream_rpms.module_stream_id in (:enabled_module_streams)",
92
- :enabled_module_streams => enabled_module_stream_ids).pluck(:id).uniq
81
+ where("(katello_module_stream_rpms.module_stream_id IS NULL AND
82
+ katello_installed_packages.id NOT IN (:locked_modular_installed_packages)) OR
83
+ (katello_module_stream_rpms.module_stream_id IN (:enabled_module_streams)
84
+ AND katello_installed_packages.id IN (:locked_modular_installed_packages))",
85
+ :enabled_module_streams => enabled_module_stream_ids,
86
+ :locked_modular_installed_packages => locked_modular_installed_packages(enabled_module_stream_ids)).pluck(:id).uniq
87
+ end
88
+
89
+ def fetch_enabled_module_stream_ids
90
+ # Query for applicable RPM ids
91
+ # -> Include all non-modular rpms or rpms that exist within installed module streams
92
+ ::Katello::ModuleStream.
93
+ joins("inner join katello_available_module_streams on
94
+ katello_module_streams.name = katello_available_module_streams.name and
95
+ katello_module_streams.stream = katello_available_module_streams.stream").
96
+ joins("inner join katello_host_available_module_streams on
97
+ katello_available_module_streams.id = katello_host_available_module_streams.available_module_stream_id").
98
+ where("katello_host_available_module_streams.host_id = :content_facet_id and
99
+ katello_host_available_module_streams.status = 'enabled'",
100
+ :content_facet_id => self.content_facet.host.id).select(:id)
101
+ end
102
+
103
+ # Installed packages that are locked for the host due to enabled module stream membership
104
+ def locked_modular_installed_packages(enabled_module_streams)
105
+ rpms_in_enabled_module_streams = ::Katello::Rpm.
106
+ joins("INNER JOIN katello_module_stream_rpms ON katello_rpms.id = katello_module_stream_rpms.rpm_id").
107
+ where("katello_module_stream_rpms.module_stream_id IN (:enabled_module_streams)",
108
+ :enabled_module_streams => enabled_module_streams).select(:nvra, :epoch)
109
+
110
+ ::Katello::InstalledPackage.where(nvra: rpms_in_enabled_module_streams.map(&:nvra),
111
+ epoch: rpms_in_enabled_module_streams.map(&:epoch)).select(:id)
112
+ end
113
+
114
+ def newest_distinct_installed_packages_query
115
+ "SELECT DISTINCT ON (katello_installed_packages.name) katello_installed_packages.id " \
116
+ "FROM katello_installed_packages INNER JOIN " \
117
+ "katello_host_installed_packages ON " \
118
+ "katello_installed_packages.id = " \
119
+ "katello_host_installed_packages.installed_package_id " \
120
+ "WHERE katello_host_installed_packages.host_id = " \
121
+ "#{content_facet.host.id} ORDER BY katello_installed_packages.name, katello_installed_packages.evr DESC"
93
122
  end
94
123
 
95
124
  def applicable_differences
@@ -1,7 +1,6 @@
1
1
  module Katello
2
+ # TODO: Move this class to app/lib/katello/event_daemon/services with other service definitions
2
3
  class CandlepinEventListener
3
- STATUS_CACHE_KEY = 'candlepin_events_status'.freeze
4
-
5
4
  Event = Struct.new(:subject, :content)
6
5
 
7
6
  cattr_accessor :client_factory
@@ -14,22 +13,20 @@ module Katello
14
13
  end
15
14
 
16
15
  def self.running?
17
- @running == true && @client&.running?
16
+ @client&.running? || false
18
17
  end
19
18
 
20
19
  def self.close
21
- return unless running?
22
-
23
- logger.info("Closing candlepin event listener")
24
- @client&.close
20
+ if @client&.close
21
+ logger.info("Closed candlepin event listener")
22
+ end
25
23
  reset
26
24
  end
27
25
 
28
26
  def self.reset
29
27
  @processed_count = 0
30
28
  @failed_count = 0
31
- @running = false
32
- Rails.cache.delete(STATUS_CACHE_KEY)
29
+ @client = nil
33
30
  end
34
31
 
35
32
  def self.run
@@ -37,18 +34,14 @@ module Katello
37
34
  @client.subscribe do |message|
38
35
  handle_message(message)
39
36
  end
40
-
41
- @running = true
42
37
  end
43
38
 
44
- def self.status(refresh: true)
45
- Rails.cache.fetch(STATUS_CACHE_KEY, force: refresh) do
46
- {
47
- processed_count: @processed_count,
48
- failed_count: @failed_count,
49
- running: running?
50
- }
51
- end
39
+ def self.status
40
+ {
41
+ processed_count: @processed_count,
42
+ failed_count: @failed_count,
43
+ running: running?
44
+ }
52
45
  end
53
46
 
54
47
  def self.handle_message(message)