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
@@ -2,16 +2,13 @@ module Actions
2
2
  module Katello
3
3
  module Host
4
4
  module PackageGroup
5
- class Remove < Actions::EntryAction
6
- include Helpers::Presenter
5
+ class Remove < Actions::Katello::AgentAction
6
+ def self.agent_message
7
+ :remove_package_group
8
+ end
7
9
 
8
- def plan(host, groups)
9
- action_subject(host, :groups => groups)
10
- plan_action(Pulp::Consumer::ContentUninstall,
11
- consumer_uuid: host.content_facet.uuid,
12
- type: 'package_group',
13
- args: groups)
14
- plan_self(:host_id => host.id)
10
+ def agent_action_type
11
+ :content_uninstall
15
12
  end
16
13
 
17
14
  def humanized_name
@@ -19,21 +16,12 @@ module Actions
19
16
  end
20
17
 
21
18
  def humanized_input
22
- [input[:groups].join(', ')] + super
23
- end
24
-
25
- def presenter
26
- Helpers::Presenter::Delegated.new(
27
- self, planned_actions(Pulp::Consumer::ContentUninstall))
28
- end
29
-
30
- def rescue_strategy
31
- Dynflow::Action::Rescue::Skip
19
+ [input[:content].join(', ')] + super
32
20
  end
33
21
 
34
22
  def finalize
35
23
  host = ::Host.find_by(:id => input[:host_id])
36
- host.update(audit_comment: (_("Removal of package group(s) requested: %{groups}") % {groups: input[:groups].join(", ")}).truncate(255))
24
+ host.update(audit_comment: (_("Removal of package group(s) requested: %{groups}") % {groups: input[:content].join(", ")}).truncate(255))
37
25
  end
38
26
  end
39
27
  end
@@ -14,7 +14,7 @@ module Actions
14
14
  host.subscription_facet.purpose_addons = purpose_addon_objects
15
15
  end
16
16
 
17
- host.subscription_facet.save!
17
+ host.save!
18
18
  plan_self(:hostname => host.name)
19
19
  end
20
20
 
@@ -12,11 +12,9 @@ module Actions
12
12
  organization.save!
13
13
 
14
14
  sequence do
15
- if ::SETTINGS[:katello][:use_cp]
16
- cp_create = plan_action(Candlepin::Owner::Create,
17
- label: organization.label,
18
- name: organization.name)
19
- end
15
+ cp_create = plan_action(Candlepin::Owner::Create,
16
+ label: organization.label,
17
+ name: organization.name)
20
18
  plan_action(Katello::Environment::LibraryCreate, organization.library)
21
19
  end
22
20
  if cp_create
@@ -17,7 +17,7 @@ module Actions
17
17
  remove_providers(organization)
18
18
  remove_environments(organization)
19
19
  plan_self
20
- plan_action(Candlepin::Owner::Destroy, label: organization.label) if ::SETTINGS[:katello][:use_cp]
20
+ plan_action(Candlepin::Owner::Destroy, label: organization.label)
21
21
  end
22
22
  end
23
23
 
@@ -12,11 +12,9 @@ module Actions
12
12
  sequence do
13
13
  plan_action(Candlepin::Owner::DestroyImports, label: organization.label)
14
14
 
15
- if SETTINGS[:katello][:use_pulp]
16
- repositories = ::Katello::Repository.in_default_view.in_product(::Katello::Product.redhat.in_org(organization))
17
- repositories.each do |repo|
18
- plan_action(Katello::Repository::RefreshRepository, repo)
19
- end
15
+ repositories = ::Katello::Repository.in_default_view.in_product(::Katello::Product.redhat.in_org(organization))
16
+ repositories.each do |repo|
17
+ plan_action(Katello::Repository::RefreshRepository, repo)
20
18
  end
21
19
  plan_self
22
20
  end
@@ -17,7 +17,7 @@ module Actions
17
17
  :force => force)
18
18
  plan_action(Candlepin::Owner::ImportProducts, :organization_id => organization.id)
19
19
 
20
- if manifest_update && SETTINGS[:katello][:use_pulp]
20
+ if manifest_update
21
21
  repositories = ::Katello::Repository.in_default_view.in_product(::Katello::Product.redhat.in_org(organization))
22
22
  repositories.each do |repo|
23
23
  plan_action(Katello::Repository::RefreshRepository, repo)
@@ -28,7 +28,7 @@ module Actions
28
28
  :dependency => export_action.output)
29
29
  import_products = plan_action(Candlepin::Owner::ImportProducts, :organization_id => organization.id, :dependency => owner_import.output)
30
30
 
31
- if manifest_update && SETTINGS[:katello][:use_pulp]
31
+ if manifest_update
32
32
  repositories = ::Katello::Repository.in_default_view.in_product(::Katello::Product.redhat.in_org(organization))
33
33
  repositories.each do |repo|
34
34
  plan_action(Katello::Repository::RefreshRepository, repo, :dependency => import_products.output)
@@ -23,8 +23,10 @@ module Actions
23
23
  yum_metadata_files = yum_metadata_files_match?(source_repo, target_repo)
24
24
  checksum_match = (target_repo.saved_checksum_type == source_repo.saved_checksum_type)
25
25
 
26
+ published = target_repo.backend_service(SmartProxy.pulp_primary).published?
27
+
26
28
  output[:checksum_match] = checksum_match
27
- output[:matching_content] = yum_metadata_files && srpms_match && rpms && errata && package_groups && distributions && target_repo.published? && checksum_match
29
+ output[:matching_content] = yum_metadata_files && srpms_match && rpms && errata && package_groups && distributions && published && checksum_match
28
30
  end
29
31
 
30
32
  if source_repo.content_type == ::Katello::Repository::DEB_TYPE
@@ -3,6 +3,8 @@ module Actions
3
3
  module Repository
4
4
  class CloneContents < Actions::Base
5
5
  include Actions::Katello::PulpSelector
6
+ include Actions::Katello::CheckMatchingContent
7
+
6
8
  def plan(source_repositories, new_repository, options)
7
9
  filters = options.fetch(:filters, nil)
8
10
  rpm_filenames = options.fetch(:rpm_filenames, nil)
@@ -20,10 +22,12 @@ module Actions
20
22
  filters: filters, rpm_filenames: rpm_filenames, solve_dependencies: solve_dependencies)
21
23
  end
22
24
 
23
- metadata_generate(source_repositories, new_repository, filters, rpm_filenames) if generate_metadata
25
+ matching_content = check_matching_content(new_repository, source_repositories)
26
+ metadata_generate(source_repositories, new_repository, filters, rpm_filenames, matching_content) if generate_metadata
24
27
 
25
28
  index_options = {id: new_repository.id}
26
29
  index_options[:source_repository_id] = source_repositories.first.id if source_repositories.count == 1 && filters.empty? && rpm_filenames.nil?
30
+ index_options[:matching_content] = matching_content
27
31
  plan_action(Katello::Repository::IndexContent, index_options)
28
32
 
29
33
  if purge_empty_contents && new_repository.backend_service(SmartProxy.pulp_primary).should_purge_empty_contents?
@@ -32,22 +36,15 @@ module Actions
32
36
  end
33
37
  end
34
38
 
35
- def metadata_generate(source_repositories, new_repository, filters, rpm_filenames)
39
+ def metadata_generate(source_repositories, new_repository, filters, rpm_filenames, matching_content)
36
40
  metadata_options = {}
37
41
 
42
+ metadata_options[:matching_content] = matching_content
43
+
38
44
  if source_repositories.count == 1 && filters.empty? && rpm_filenames.empty?
39
45
  metadata_options[:source_repository] = source_repositories.first
40
46
  end
41
47
 
42
- check_matching_content = ::Katello::RepositoryTypeManager.find(new_repository.content_type).metadata_publish_matching_check
43
- if new_repository.environment && source_repositories.count == 1 && check_matching_content && !SmartProxy.pulp_primary.pulp3_support?(new_repository)
44
- match_check_output = plan_action(Katello::Repository::CheckMatchingContent,
45
- :source_repo_id => source_repositories.first.id,
46
- :target_repo_id => new_repository.id).output
47
-
48
- metadata_options[:matching_content] = match_check_output[:matching_content]
49
- end
50
-
51
48
  plan_action(Katello::Repository::MetadataGenerate, new_repository, metadata_options)
52
49
  unless source_repositories.first.saved_checksum_type == new_repository.saved_checksum_type
53
50
  plan_self(:source_checksum_type => source_repositories.first.saved_checksum_type,
@@ -10,14 +10,6 @@ module Actions
10
10
 
11
11
  action_subject(repository)
12
12
 
13
- if repository.download_policy == ::Runcible::Models::YumImporter::DOWNLOAD_BACKGROUND
14
- ::Foreman::Deprecation.api_deprecation_warning("Background download_policy will be removed in Katello 4.0. Any background repositories will be converted to Immediate")
15
- end
16
-
17
- if root['content_type'] == 'puppet' || root['content_type'] == 'ostree'
18
- ::Foreman::Deprecation.api_deprecation_warning("Repository types of 'Puppet' and 'OSTree' will no longer be supported in Katello 4.0.")
19
- end
20
-
21
13
  org = repository.organization
22
14
  pulp2_create_action = plan_create ? Actions::Pulp::Repository::CreateInPlan : Actions::Pulp::Repository::Create
23
15
  sequence do
@@ -11,6 +11,9 @@ module Actions
11
11
  end
12
12
 
13
13
  # rubocop:disable Metrics/MethodLength
14
+ # rubocop:disable Metrics/CyclomaticComplexity
15
+ # rubocop:disable Metrics/AbcSize
16
+ # rubocop:disable Metrics/PerceivedComplexity
14
17
  def run
15
18
  repo = ::Katello::Repository.find(input[:id])
16
19
  if repo.puppet?
@@ -8,6 +8,7 @@ module Actions
8
8
  param :id, Integer
9
9
  param :dependency, Hash
10
10
  param :contents_changed
11
+ param :matching_content
11
12
  param :source_repository_id
12
13
  end
13
14
 
@@ -3,6 +3,8 @@ module Actions
3
3
  module Repository
4
4
  class MultiCloneContents < Actions::Base
5
5
  include Actions::Katello::PulpSelector
6
+ include Actions::Katello::CheckMatchingContent
7
+
6
8
  def plan(extended_repo_mapping, options)
7
9
  generate_metadata = options.fetch(:generate_metadata, true)
8
10
  copy_contents = options.fetch(:copy_contents, true)
@@ -18,34 +20,29 @@ module Actions
18
20
 
19
21
  concurrence do
20
22
  extended_repo_mapping.each do |source_repos, dest_repo_map|
23
+ dest_repo_map[:matching_content] = check_matching_content(dest_repo_map[:dest_repo], source_repos)
24
+
21
25
  if generate_metadata
22
- metadata_generate(source_repos, dest_repo_map[:dest_repo], dest_repo_map[:filters])
26
+ metadata_generate(source_repos, dest_repo_map[:dest_repo], dest_repo_map[:filters], dest_repo_map[:matching_content])
23
27
  end
24
28
  end
25
29
 
26
30
  extended_repo_mapping.values.each do |dest_repo_map|
27
- plan_action(Katello::Repository::IndexContent, id: dest_repo_map[:dest_repo].id)
31
+ plan_action(Katello::Repository::IndexContent, id: dest_repo_map[:dest_repo].id, matching_content: dest_repo_map[:matching_content])
28
32
  end
29
33
  end
30
34
  end
31
35
  end
32
36
 
33
- def metadata_generate(source_repositories, new_repository, filters)
37
+ def metadata_generate(source_repositories, new_repository, filters, matching_content)
34
38
  metadata_options = {}
35
39
 
40
+ metadata_options[:matching_content] = matching_content
41
+
36
42
  if source_repositories.count == 1 && filters.empty?
37
43
  metadata_options[:source_repository] = source_repositories.first
38
44
  end
39
45
 
40
- check_matching_content = ::Katello::RepositoryTypeManager.find(new_repository.content_type).metadata_publish_matching_check
41
- if new_repository.environment && source_repositories.count == 1 && check_matching_content
42
- match_check_output = plan_action(Katello::Repository::CheckMatchingContent,
43
- :source_repo_id => source_repositories.first.id,
44
- :target_repo_id => new_repository.id).output
45
-
46
- metadata_options[:matching_content] = match_check_output[:matching_content]
47
- end
48
-
49
46
  plan_action(Katello::Repository::MetadataGenerate, new_repository, metadata_options)
50
47
  unless source_repositories.first.saved_checksum_type == new_repository.saved_checksum_type
51
48
  plan_self(:source_checksum_type => source_repositories.first.saved_checksum_type,
@@ -14,14 +14,6 @@ module Actions
14
14
 
15
15
  root.update!(repo_params)
16
16
 
17
- if root.download_policy == ::Runcible::Models::YumImporter::DOWNLOAD_BACKGROUND
18
- ::Foreman::Deprecation.api_deprecation_warning("Background download_policy will be removed in Katello 4.0. Any background repositories will be converted to Immediate")
19
- end
20
-
21
- if root['content_type'] == 'puppet' || root['content_type'] == 'ostree'
22
- ::Foreman::Deprecation.api_deprecation_warning("Repository types of 'Puppet' and 'OSTree' will no longer be supported in Katello 4.0.")
23
- end
24
-
25
17
  if update_content?(repository)
26
18
  content = root.content
27
19
 
@@ -13,7 +13,10 @@ module Actions
13
13
 
14
14
  def execute?
15
15
  if action.input.keys.include?('contents_changed') && action.input['contents_changed'] == false
16
- self.action.output[:post_sync_skipped] = true
16
+ self.action.output[:post_action_skipped] = true
17
+ false
18
+ elsif action.input.keys.include?('matching_content') && action.input['matching_content'] == true
19
+ self.action.output[:post_action_skipped] = true
17
20
  false
18
21
  else
19
22
  true
@@ -1,12 +1,32 @@
1
1
  module Actions
2
2
  module Middleware
3
3
  class RecordSmartProxySyncHistory < Dynflow::Middleware
4
- def run(*args)
4
+ def save_smart_proxy_sync_history
5
5
  if (action.input[:repository_id] && (action.input[:smart_proxy_id] || action.input[:capsule_id]) && !self.action.output[:smart_proxy_history_id])
6
- repo = ::Katello::Repository.find(action.input[:repository_id])
6
+ repo_id = action.input[:repository_id]
7
+ repo = ::Katello::Repository.find_by(id: repo_id)
7
8
  smart_proxy_id = action.input[:smart_proxy_id] || action.input[:capsule_id]
8
- smart_proxy = ::SmartProxy.find(smart_proxy_id)
9
- self.action.output[:smart_proxy_history_id] = repo.create_smart_proxy_sync_history(smart_proxy)
9
+ smart_proxy = ::SmartProxy.find_by(id: smart_proxy_id)
10
+
11
+ #skip pulp2 puppet syncs
12
+ if (repo_pulp_id = action.input[:repo_pulp_id])
13
+ return if ::Katello::ContentViewPuppetEnvironment.find_by(pulp_id: repo_pulp_id)
14
+ end
15
+
16
+ if repo && smart_proxy
17
+ self.action.output[:smart_proxy_history_id] = repo.create_smart_proxy_sync_history(smart_proxy)
18
+ else
19
+ fail "Smart Proxy could not be found with id #{smart_proxy_id}" if smart_proxy.nil?
20
+ fail "Repository could not be found with id #{repo_id}" if repo.nil?
21
+ end
22
+ end
23
+ end
24
+
25
+ def run(*args)
26
+ begin
27
+ save_smart_proxy_sync_history
28
+ rescue => error
29
+ Rails.logger.error("Error saving smart proxy history: #{error.message}")
10
30
  end
11
31
  pass(*args)
12
32
  end
@@ -9,8 +9,6 @@ module Actions
9
9
  ret << task_result_packages
10
10
  elsif task_result_packages.any?
11
11
  ret.concat(task_result_packages.map { |package| package[:qname] })
12
- else
13
- ret << humanized_no_package
14
12
  end
15
13
  if humanized_errors
16
14
  ret.concat(humanized_errors)
@@ -96,15 +94,6 @@ module Actions
96
94
  def humanized_errors
97
95
  task_errors&.map { |k, v| "#{k}: #{v}" }
98
96
  end
99
-
100
- def humanized_no_package
101
- case action
102
- when Consumer::ContentInstall
103
- _("No new packages installed")
104
- when Consumer::ContentUninstall
105
- _("No packages removed")
106
- end
107
- end
108
97
  end
109
98
  end
110
99
  end
@@ -4,12 +4,6 @@ module Actions
4
4
  module Repository
5
5
  class RefreshRepos < Pulp::AbstractAsyncTask
6
6
  include ::Actions::Katello::CapsuleContent::RefreshRepos
7
- input_format do
8
- param :smart_proxy_id
9
- param :environment_id
10
- param :content_view_id
11
- param :repository_id
12
- end
13
7
 
14
8
  def fetch_proxy_service(smart_proxy)
15
9
  ::Katello::Pulp::SmartProxyRepository.new(smart_proxy)
@@ -11,17 +11,17 @@ module Actions
11
11
  :options => options)
12
12
  end
13
13
 
14
- def run
14
+ def invoke_external_task
15
15
  smart_proxy = ::SmartProxy.unscoped.find(input[:smart_proxy_id])
16
16
  options = input[:options]
17
17
  tasks = options[:tasks]
18
18
  repo = ::Katello::Repository.find(input[:repository_id])
19
19
  if options[:use_repository_version]
20
- output[:response] = repo.backend_service(smart_proxy).with_mirror_adapter.refresh_distributions(:use_repository_version => true)
20
+ repo.backend_service(smart_proxy).with_mirror_adapter.refresh_distributions(:use_repository_version => true)
21
21
  elsif tasks && tasks[:pulp_tasks] && tasks[:pulp_tasks].first
22
22
  publication_href = tasks[:pulp_tasks].first[:created_resources].first
23
23
  if publication_href
24
- output[:response] = repo.backend_service(smart_proxy).with_mirror_adapter.refresh_distributions(:publication => publication_href)
24
+ repo.backend_service(smart_proxy).with_mirror_adapter.refresh_distributions(:publication => publication_href)
25
25
  end
26
26
  end
27
27
  end
@@ -1,6 +1,8 @@
1
1
  module Actions
2
2
  module Pulp3
3
3
  class ContentMigration < Pulp3::AbstractAsyncTask
4
+ include Helpers::Presenter
5
+
4
6
  def plan(smart_proxy, options)
5
7
  sequence do
6
8
  action = plan_self(smart_proxy_id: smart_proxy.id)
@@ -13,6 +15,14 @@ module Actions
13
15
  migration_service.create_and_run_migrations
14
16
  end
15
17
 
18
+ def humanized_name
19
+ _("Content Migration")
20
+ end
21
+
22
+ def presenter
23
+ Actions::Pulp3::ContentMigrationPresenter.new(self)
24
+ end
25
+
16
26
  def rescue_strategy
17
27
  Dynflow::Action::Rescue::Skip
18
28
  end
@@ -0,0 +1,59 @@
1
+ require 'katello/content_migration_progress'
2
+
3
+ module Actions
4
+ module Pulp3
5
+ class ContentMigrationPresenter < Helpers::Presenter::Base
6
+ def initialize(migration_action)
7
+ @migration_action = migration_action
8
+ end
9
+
10
+ def humanized_output
11
+ if !@migration_action.done?
12
+ ContentMigrationTaskPresenter.new(@migration_action).humanized_output
13
+ else
14
+ task = ForemanTasks::Task.find_by(:external_id => @migration_action.execution_plan_id)
15
+ ::Katello::ContentMigrationProgress.find_by(:task_id => task.id)&.progress_message
16
+ end
17
+ end
18
+
19
+ class ContentMigrationTaskPresenter
20
+ def initialize(action)
21
+ @action = action
22
+ end
23
+
24
+ def task_progress_reports
25
+ if @action.pulp_tasks.empty?
26
+ []
27
+ else
28
+ @action.pulp_tasks[0].progress_reports
29
+ end
30
+ end
31
+
32
+ def task_group_progress_reports
33
+ if @action.task_groups.empty?
34
+ []
35
+ else
36
+ @action.task_groups[0].group_progress_reports
37
+ end
38
+ end
39
+
40
+ def humanized_output
41
+ report = task_progress_reports.find { |current| current['state'] == 'running' && current['total'] != 0 }
42
+ report ||= task_group_progress_reports.find { |current| current['total'] != 0 && current['done'] != current['total'] }
43
+
44
+ if !report.blank? && report['total'] != 0
45
+ "#{report['message']} #{report['done']}/#{report['total']}"
46
+ elsif report
47
+ report['message']
48
+ elsif task_progress_reports.empty?
49
+ "Content migration starting. "
50
+ else
51
+ "Initial Migration steps complete."
52
+ end
53
+ rescue
54
+ ""
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end