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
@@ -0,0 +1,25 @@
1
+ module Katello
2
+ module Agent
3
+ class InstallPackageGroupMessage < BaseMessage
4
+ def initialize(content:, consumer_id:)
5
+ @groups = content
6
+ @consumer_id = consumer_id
7
+ @content_type = 'package_group'
8
+ @method = 'install'
9
+ end
10
+
11
+ protected
12
+
13
+ def units
14
+ @groups.map do |group|
15
+ {
16
+ type_id: @content_type,
17
+ unit_key: {
18
+ name: group
19
+ }
20
+ }
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,28 @@
1
+ module Katello
2
+ module Agent
3
+ class InstallPackageMessage < BaseMessage
4
+ def initialize(content:, consumer_id:)
5
+ @packages = content
6
+ @consumer_id = consumer_id
7
+ @content_type = 'rpm'
8
+ @method = 'install'
9
+ end
10
+
11
+ protected
12
+
13
+ def units
14
+ @packages.map do |package|
15
+ nvra = ::Katello::Util::Package.parse_nvrea_nvre(package)
16
+ unit_key = nvra || {
17
+ name: package
18
+ }
19
+
20
+ {
21
+ type_id: @content_type,
22
+ unit_key: unit_key
23
+ }
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ module Katello
2
+ module Agent
3
+ class RemovePackageGroupMessage < BaseMessage
4
+ def initialize(content:, consumer_id:)
5
+ @groups = content
6
+ @consumer_id = consumer_id
7
+ @content_type = 'package_group'
8
+ @method = 'uninstall'
9
+ end
10
+
11
+ protected
12
+
13
+ def units
14
+ @groups.map do |group|
15
+ {
16
+ type_id: @content_type,
17
+ unit_key: {
18
+ name: group
19
+ }
20
+ }
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,28 @@
1
+ module Katello
2
+ module Agent
3
+ class RemovePackageMessage < BaseMessage
4
+ def initialize(content:, consumer_id:)
5
+ @packages = content
6
+ @consumer_id = consumer_id
7
+ @content_type = 'rpm'
8
+ @method = 'uninstall'
9
+ end
10
+
11
+ protected
12
+
13
+ def units
14
+ @packages.map do |package|
15
+ nvra = ::Katello::Util::Package.parse_nvrea_nvre(package)
16
+ unit_key = nvra || {
17
+ name: package
18
+ }
19
+
20
+ {
21
+ type_id: @content_type,
22
+ unit_key: unit_key
23
+ }
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ module Katello
2
+ module Agent
3
+ class UpdatePackageMessage < BaseMessage
4
+ def initialize(content:, consumer_id:)
5
+ @packages = content
6
+ @consumer_id = consumer_id
7
+ @content_type = 'rpm'
8
+ @method = 'update'
9
+ end
10
+
11
+ protected
12
+
13
+ def units
14
+ @packages.map do |package|
15
+ {
16
+ type_id: @content_type,
17
+ unit_key: {
18
+ name: package
19
+ }
20
+ }
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -19,6 +19,11 @@ module Katello
19
19
  host.subscriptions.redhat.pluck(:name)
20
20
  end
21
21
 
22
+ def host_redhat_subscriptions_consumed(host)
23
+ presenter = ::Katello::HostSubscriptionsPresenter.new(host)
24
+ presenter.subscriptions.select(&:redhat?).sum(&:quantity_consumed)
25
+ end
26
+
22
27
  def host_content_facet(host)
23
28
  host.content_facet
24
29
  end
@@ -87,6 +92,9 @@ module Katello
87
92
  end
88
93
 
89
94
  # rubocop:disable Metrics/MethodLength
95
+ # rubocop:disable Metrics/AbcSize
96
+ # rubocop:disable Metrics/CyclomaticComplexity
97
+ # rubocop:disable Metrics/PerceivedComplexity
90
98
  def load_errata_applications(filter_errata_type: nil, include_last_reboot: 'yes', since: nil, up_to: nil, status: nil, host_filter: nil)
91
99
  result = []
92
100
 
@@ -0,0 +1,53 @@
1
+ module Katello
2
+ module EventDaemon
3
+ class Monitor
4
+ def initialize(services)
5
+ @services = services
6
+ @service_statuses = {}
7
+ @services.keys.each do |service_name|
8
+ @service_statuses[service_name] = { running: 'starting' }
9
+ end
10
+ end
11
+
12
+ def start
13
+ write_statuses_to_cache
14
+ loop do
15
+ Rails.application.executor.wrap do
16
+ check_services
17
+ end
18
+ sleep 15
19
+ end
20
+ end
21
+
22
+ def write_statuses_to_cache
23
+ Rails.cache.write(
24
+ Katello::EventDaemon::Runner::STATUS_CACHE_KEY,
25
+ @service_statuses
26
+ )
27
+ end
28
+
29
+ def check_services
30
+ @services.each do |service_name, service_class|
31
+ @service_statuses[service_name] = service_class.status
32
+ rescue => error
33
+ Rails.logger.error("Error occurred while pinging #{service_class}")
34
+ Rails.logger.error(error.message)
35
+ Rails.logger.error(error.backtrace.join("\n"))
36
+ ensure
37
+ if error || !@service_statuses.dig(service_name, :running)
38
+ begin
39
+ service_class.close
40
+ service_class.run
41
+ @service_statuses[service_name] = service_class.status
42
+ rescue => error
43
+ Rails.logger.error("Error occurred while starting #{service_class}")
44
+ Rails.logger.error(error.message)
45
+ Rails.logger.error(error.backtrace.join("\n"))
46
+ end
47
+ end
48
+ end
49
+ write_statuses_to_cache
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,99 @@
1
+ module Katello
2
+ module EventDaemon
3
+ class Runner
4
+ STATUS_CACHE_KEY = "katello_event_daemon_status".freeze
5
+ @services = {}
6
+ @cache = ActiveSupport::Cache::MemoryStore.new
7
+
8
+ class << self
9
+ def initialize
10
+ FileUtils.touch(lock_file)
11
+ end
12
+
13
+ def settings
14
+ SETTINGS[:katello][:event_daemon]
15
+ end
16
+
17
+ def pid
18
+ return unless pid_file && File.exist?(pid_file)
19
+
20
+ File.open(pid_file) { |f| f.read.to_i }
21
+ end
22
+
23
+ def pid_file
24
+ pid_dir.join('katello_event_daemon.pid')
25
+ end
26
+
27
+ def pid_dir
28
+ Rails.root.join('tmp', 'pids')
29
+ end
30
+
31
+ def lock_file
32
+ Rails.root.join('tmp', 'katello_event_daemon.lock')
33
+ end
34
+
35
+ def write_pid_file
36
+ return unless pid_file
37
+
38
+ FileUtils.mkdir_p(pid_dir)
39
+ File.open(pid_file, 'w') { |f| f.puts Process.pid }
40
+ end
41
+
42
+ def stop
43
+ return unless pid == Process.pid
44
+ @monitor_thread.kill
45
+ @cache.clear
46
+ @services.values.each(&:close)
47
+ File.unlink(pid_file) if pid_file && File.exist?(pid_file)
48
+ end
49
+
50
+ def start
51
+ return unless runnable?
52
+ lockfile = File.open(lock_file, 'r')
53
+ begin
54
+ lockfile.flock(File::LOCK_EX)
55
+ return if started? # ensure it wasn't started while we waited for the lock
56
+ start_monitor_thread
57
+ write_pid_file
58
+
59
+ at_exit do
60
+ stop
61
+ end
62
+
63
+ Rails.logger.info("Katello event daemon started process=#{Process.pid}")
64
+ ensure
65
+ lockfile.flock(File::LOCK_UN)
66
+ end
67
+ end
68
+
69
+ def started?
70
+ Process.kill(0, pid)
71
+ true
72
+ rescue Errno::ESRCH, TypeError # process no longer exists or we had no PID cached
73
+ false
74
+ end
75
+
76
+ def start_monitor_thread
77
+ @monitor_thread = Thread.new do
78
+ Katello::EventDaemon::Monitor.new(@services).start
79
+ end
80
+ end
81
+
82
+ def runnable?
83
+ # avoid accessing the disk on each request
84
+ @cache.fetch('katello_event_daemon_runnable', expires_in: 1.minute) do
85
+ !started? && settings[:enabled] && !::Foreman.in_rake? && !Rails.env.test?
86
+ end
87
+ end
88
+
89
+ def register_service(name, klass)
90
+ @services[name] = klass
91
+ end
92
+
93
+ def service_status(service_name = nil)
94
+ Rails.cache.read(STATUS_CACHE_KEY)&.dig(service_name)
95
+ end
96
+ end
97
+ end
98
+ end
99
+ end
@@ -0,0 +1,62 @@
1
+ module Katello
2
+ module EventDaemon
3
+ module Services
4
+ class AgentEventReceiver
5
+ STATUS_CACHE_KEY = 'katello_agent_events'.freeze
6
+
7
+ class Handler
8
+ attr_accessor :processed, :failed
9
+
10
+ def initialize
11
+ @processed = 0
12
+ @failed = 0
13
+ end
14
+
15
+ def handle(message)
16
+ ::Katello::Util::Support.with_db_connection do
17
+ ::Katello::Agent::ClientMessageHandler.new(message).handle
18
+ @processed += 1
19
+ rescue => e
20
+ @failed += 1
21
+ Rails.logger.error("Error handling Katello Agent client message")
22
+ Rails.logger.error(e.message)
23
+ Rails.logger.error(e.backtrace.join("\n"))
24
+ end
25
+ end
26
+ end
27
+
28
+ def self.logger
29
+ ::Foreman::Logging.logger('katello/agent')
30
+ end
31
+
32
+ def self.run
33
+ fail("Katello agent event receiver already started") if running?
34
+
35
+ @thread = Thread.new do
36
+ @handler = Handler.new
37
+ agent_connection = ::Katello::Agent::Connection.new
38
+ agent_connection.fetch_agent_messages(@handler)
39
+ end
40
+ end
41
+
42
+ def self.close
43
+ @thread&.kill
44
+ end
45
+
46
+ def self.running?
47
+ @thread&.status.present?
48
+ end
49
+
50
+ def self.status(refresh: true)
51
+ Rails.cache.fetch(STATUS_CACHE_KEY, force: refresh) do
52
+ {
53
+ running: running?,
54
+ processed_count: @handler&.processed || 0,
55
+ failed_count: @handler&.failed || 0
56
+ }
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
62
+ end
@@ -10,5 +10,37 @@ module Katello
10
10
 
11
11
  logger.send(level, "#{message} #{data_string}")
12
12
  end
13
+
14
+ class Timer
15
+ def initialize(key = "default")
16
+ @key = key
17
+ @start_time = Time.now
18
+ Thread.current[:timers] ||= {}
19
+ Thread.current[:timers][key] = self
20
+ end
21
+
22
+ def start
23
+ Rails.logger.info "Timer #{@key} already started; resetting start time" if @start_time
24
+ Rails.logger.info "Timer #{@key} starting at #{Time.now}"
25
+ @start_time = Time.now
26
+ self
27
+ end
28
+
29
+ def stop
30
+ fail ::StandardError, "Timer #{@key} is not started" unless @start_time
31
+ duration = (Time.now - @start_time).truncate(2)
32
+ @start_time = nil
33
+ Rails.logger.info "Timer #{@key} stopping at #{Time.now}: #{duration} sec"
34
+ end
35
+
36
+ def self.find_by_key(key)
37
+ if Thread.current&.[](:timers)&.[](key)
38
+ Thread.current[:timers][key]
39
+ else
40
+ Rails.logger.warn "Timer #{key} not found on current thread; creating a new timer"
41
+ self.new(key)
42
+ end
43
+ end
44
+ end
13
45
  end
14
46
  end
@@ -2,13 +2,7 @@ module Katello
2
2
  module Messaging
3
3
  class Connection
4
4
  def self.create(connection_class:, settings:)
5
- connection = connection_class.new(settings: settings)
6
-
7
- at_exit do
8
- connection.close
9
- end
10
-
11
- connection
5
+ connection_class.new(settings: settings)
12
6
  end
13
7
  end
14
8
  end
@@ -3,7 +3,7 @@ module Katello
3
3
  class ReceivedMessage
4
4
  attr_reader :headers, :body
5
5
 
6
- def initialize(body:, headers:)
6
+ def initialize(body:, headers: {})
7
7
  @body = body
8
8
  @headers = headers
9
9
  end
@@ -0,0 +1,130 @@
1
+ require 'qpid_proton'
2
+
3
+ module Katello
4
+ module Qpid
5
+ class Connection
6
+ class Sender < ::Qpid::Proton::MessagingHandler
7
+ def initialize(url, address, messages)
8
+ super()
9
+ @url = url
10
+ @address = address
11
+ @messages = messages
12
+ @sent = 0
13
+ @confirmed = 0
14
+ end
15
+
16
+ def on_container_start(container)
17
+ c = container.connect(@url)
18
+ c.open_sender
19
+ @receiver = c.open_receiver(@address) if @address
20
+ end
21
+
22
+ def on_sendable(sender)
23
+ @messages.each do |msg|
24
+ msg.reply_to = @receiver.remote_source.address if @receiver
25
+ sender.send(msg)
26
+ @sent += 1
27
+ end
28
+ ensure
29
+ sender.close
30
+ end
31
+
32
+ def on_tracker_accept(tracker)
33
+ @confirmed += 1
34
+ if @confirmed == @sent
35
+ tracker.connection.close
36
+ end
37
+ end
38
+
39
+ def on_message(_delivery, message)
40
+ opcode = message.properties['qmf.opcode']
41
+ if opcode == '_exception'
42
+ error_code = message.body.dig('_values', 'error_code')
43
+ if error_code != '7' # not found
44
+ error_message = message.body.dig('_values', 'error_text')
45
+ fail(error_message)
46
+ end
47
+ end
48
+ end
49
+ end
50
+
51
+ class Receiver < ::Qpid::Proton::MessagingHandler
52
+ def initialize(url, address, handler)
53
+ super()
54
+ @url = url
55
+ @address = address
56
+ @handler = handler
57
+ end
58
+
59
+ def on_container_start(container)
60
+ c = container.connect(@url,
61
+ idle_timeout: 4
62
+ )
63
+ c.open_receiver(@address)
64
+ end
65
+
66
+ def on_message(_delivery, message)
67
+ received = Katello::Messaging::ReceivedMessage.new(body: message.body)
68
+ @handler.handle(received)
69
+ end
70
+ end
71
+
72
+ def initialize(url)
73
+ @url = url
74
+ end
75
+
76
+ def delete_queue(queue_name)
77
+ address = "qmf.default.direct"
78
+ message = ::Qpid::Proton::Message.new
79
+ message.subject = 'broker'
80
+ message.address = address
81
+ message.body = {
82
+ '_object_id' => {
83
+ '_object_name' => 'org.apache.qpid.broker:broker:amqp-broker'
84
+ },
85
+ '_method_name' => 'delete',
86
+ '_arguments' => {
87
+ 'strict' => true,
88
+ 'name' => queue_name,
89
+ 'type' => 'queue',
90
+ 'properties' => {}
91
+ }
92
+ }
93
+
94
+ message.properties = {
95
+ 'qmf.opcode' => '_method_request',
96
+ 'x-amqp-0-10.app-id' => 'qmf2',
97
+ 'method' => 'request'
98
+ }
99
+
100
+ sender = Sender.new(@url, address, [message])
101
+ with_connection(sender)
102
+ end
103
+
104
+ def send_messages(messages)
105
+ qpid_messages = messages.map do |message|
106
+ msg = ::Qpid::Proton::Message.new
107
+ msg.body = message.to_s
108
+ msg.address = message.recipient_address
109
+ msg
110
+ end
111
+ sender = Sender.new(@url, nil, qpid_messages)
112
+ with_connection(sender)
113
+ end
114
+
115
+ def receive_messages(address:, handler:)
116
+ receiver = Receiver.new(@url, address, handler)
117
+ with_connection(receiver)
118
+ end
119
+
120
+ private
121
+
122
+ def with_connection(handler)
123
+ container = ::Qpid::Proton::Container.new(handler)
124
+ container.run
125
+ ensure
126
+ container&.stop
127
+ end
128
+ end
129
+ end
130
+ end