katello 3.18.0.rc1 → 4.0.0.rc1

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

Potentially problematic release.


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

Files changed (345) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/katello/api/rhsm/candlepin_dynflow_proxy_controller.rb +0 -19
  3. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +1 -3
  4. data/app/controllers/katello/api/v2/api_controller.rb +1 -2
  5. data/app/controllers/katello/api/v2/capsule_content_controller.rb +2 -2
  6. data/app/controllers/katello/api/v2/content_credentials_controller.rb +24 -24
  7. data/app/controllers/katello/api/v2/content_export_incrementals_controller.rb +98 -0
  8. data/app/controllers/katello/api/v2/content_exports_controller.rb +88 -0
  9. data/app/controllers/katello/api/v2/content_imports_controller.rb +59 -0
  10. data/app/controllers/katello/api/v2/content_view_filters_controller.rb +16 -7
  11. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +57 -92
  12. data/app/controllers/katello/api/v2/content_views_controller.rb +12 -3
  13. data/app/controllers/katello/api/v2/host_debs_controller.rb +1 -0
  14. data/app/controllers/katello/api/v2/host_errata_controller.rb +2 -2
  15. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +2 -3
  16. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +20 -7
  17. data/app/controllers/katello/api/v2/products_bulk_actions_controller.rb +1 -1
  18. data/app/controllers/katello/api/v2/products_controller.rb +9 -9
  19. data/app/controllers/katello/api/v2/repositories_controller.rb +5 -19
  20. data/app/controllers/katello/api/v2/repository_sets_controller.rb +24 -14
  21. data/app/controllers/katello/api/v2/simple_content_access_controller.rb +34 -0
  22. data/app/controllers/katello/api/v2/subscriptions_controller.rb +1 -1
  23. data/app/controllers/katello/api/v2/upstream_subscriptions_controller.rb +8 -4
  24. data/app/controllers/katello/concerns/api/v2/authorization.rb +10 -0
  25. data/app/controllers/katello/concerns/api/v2/bulk_hosts_extensions.rb +22 -18
  26. data/app/controllers/katello/concerns/authorization/api/v2/content_views_controller.rb +1 -1
  27. data/app/controllers/katello/concerns/registration_controller_extensions.rb +16 -0
  28. data/app/helpers/katello/sync_management_helper.rb +0 -2
  29. data/app/lib/actions/candlepin/environment/create.rb +1 -1
  30. data/app/lib/actions/candlepin/environment/set_content.rb +1 -1
  31. data/app/lib/actions/helpers/smart_proxy_sync_history_helper.rb +24 -0
  32. data/app/lib/actions/katello/activation_key/create.rb +9 -11
  33. data/app/lib/actions/katello/applicability/hosts/bulk_generate.rb +6 -2
  34. data/app/lib/actions/katello/capsule_content/sync.rb +8 -8
  35. data/app/lib/actions/katello/capsule_content/sync_capsule.rb +31 -8
  36. data/app/lib/actions/katello/check_matching_content.rb +17 -0
  37. data/app/lib/actions/katello/content_view/environment_create.rb +6 -8
  38. data/app/lib/actions/katello/content_view/promote_to_environment.rb +1 -1
  39. data/app/lib/actions/katello/content_view/publish.rb +6 -5
  40. data/app/lib/actions/katello/content_view_version/import.rb +5 -11
  41. data/app/lib/actions/katello/content_view_version/import_library.rb +17 -0
  42. data/app/lib/actions/katello/content_view_version/incremental_update.rb +30 -10
  43. data/app/lib/actions/katello/host/hypervisors_update.rb +4 -4
  44. data/app/lib/actions/katello/host/update_system_purpose.rb +1 -1
  45. data/app/lib/actions/katello/host/upload_package_profile.rb +3 -1
  46. data/app/lib/actions/katello/host/upload_profiles.rb +8 -6
  47. data/app/lib/actions/katello/organization/create.rb +3 -5
  48. data/app/lib/actions/katello/organization/destroy.rb +1 -1
  49. data/app/lib/actions/katello/organization/manifest_delete.rb +3 -5
  50. data/app/lib/actions/katello/organization/manifest_import.rb +1 -1
  51. data/app/lib/actions/katello/organization/manifest_refresh.rb +1 -1
  52. data/app/lib/actions/katello/repository/check_matching_content.rb +3 -1
  53. data/app/lib/actions/katello/repository/clone_contents.rb +8 -11
  54. data/app/lib/actions/katello/repository/create.rb +0 -8
  55. data/app/lib/actions/katello/repository/filtered_index_content.rb +3 -0
  56. data/app/lib/actions/katello/repository/import_upload.rb +2 -0
  57. data/app/lib/actions/katello/repository/index_content.rb +1 -0
  58. data/app/lib/actions/katello/repository/multi_clone_contents.rb +9 -12
  59. data/app/lib/actions/katello/repository/remove_content.rb +1 -1
  60. data/app/lib/actions/katello/repository/sync.rb +3 -1
  61. data/app/lib/actions/katello/repository/update.rb +1 -8
  62. data/app/lib/actions/katello/repository/upload_files.rb +1 -0
  63. data/app/lib/actions/middleware/execute_if_contents_changed.rb +4 -1
  64. data/app/lib/actions/middleware/record_smart_proxy_sync_history.rb +35 -0
  65. data/app/lib/actions/pulp/consumer/sync_capsule.rb +4 -2
  66. data/app/lib/actions/pulp/orchestration/repository/refresh_repos.rb +0 -6
  67. data/app/lib/actions/pulp/repository/distributor_publish.rb +1 -1
  68. data/app/lib/actions/pulp3/abstract_async_task.rb +1 -0
  69. data/app/lib/actions/pulp3/capsule_content/refresh_distribution.rb +3 -3
  70. data/app/lib/actions/pulp3/capsule_content/sync.rb +1 -0
  71. data/app/lib/actions/pulp3/content_migration.rb +10 -0
  72. data/app/lib/actions/pulp3/content_migration_presenter.rb +59 -0
  73. data/app/lib/actions/pulp3/content_view/delete_repository_references.rb +1 -1
  74. data/app/lib/actions/pulp3/content_view_version/export.rb +6 -1
  75. data/app/lib/actions/pulp3/import_migration.rb +6 -1
  76. data/app/lib/actions/pulp3/orchestration/content_view_version/copy_version_units_to_library.rb +2 -1
  77. data/app/lib/actions/pulp3/orchestration/content_view_version/export.rb +30 -9
  78. data/app/lib/actions/pulp3/orchestration/content_view_version/export_library.rb +60 -0
  79. data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +0 -4
  80. data/app/lib/actions/pulp3/orchestration/repository/generate_metadata.rb +4 -1
  81. data/app/lib/actions/pulp3/orchestration/repository/import_upload.rb +16 -3
  82. data/app/lib/actions/pulp3/orchestration/repository/refresh_repos.rb +1 -6
  83. data/app/lib/actions/pulp3/repository/copy_content.rb +1 -1
  84. data/app/lib/actions/pulp3/repository/delete.rb +1 -1
  85. data/app/lib/actions/pulp3/repository/save_version.rb +1 -1
  86. data/app/lib/actions/pulp3/repository/upload_tag.rb +18 -0
  87. data/app/lib/katello/concerns/base_template_scope_extensions.rb +8 -0
  88. data/app/lib/katello/event_daemon/monitor.rb +53 -0
  89. data/app/lib/katello/event_daemon/runner.rb +99 -0
  90. data/app/lib/katello/logging.rb +32 -0
  91. data/app/lib/katello/messaging/connection.rb +1 -7
  92. data/app/lib/katello/validators/content_view_puppet_module_validator.rb +1 -1
  93. data/app/models/katello/activation_key.rb +2 -2
  94. data/app/models/katello/authorization/content_view_filter.rb +15 -0
  95. data/app/models/katello/authorization/content_view_version.rb +25 -2
  96. data/app/models/katello/authorization/content_view_version_export_history.rb +1 -1
  97. data/app/models/katello/authorization/organization.rb +8 -0
  98. data/app/models/katello/candlepin/repository_mapper.rb +1 -1
  99. data/app/models/katello/concerns/operatingsystem_extensions.rb +2 -0
  100. data/app/models/katello/concerns/organization_extensions.rb +2 -2
  101. data/app/models/katello/concerns/pulp_database_unit.rb +7 -0
  102. data/app/models/katello/concerns/redhat_extensions.rb +2 -2
  103. data/app/models/katello/concerns/smart_proxy_extensions.rb +33 -5
  104. data/app/models/katello/content_migration_progress.rb +4 -0
  105. data/app/models/katello/content_view.rb +35 -5
  106. data/app/models/katello/content_view_environment.rb +2 -2
  107. data/app/models/katello/content_view_filter.rb +5 -0
  108. data/app/models/katello/content_view_history.rb +2 -1
  109. data/app/models/katello/content_view_package_filter.rb +1 -1
  110. data/app/models/katello/content_view_puppet_environment.rb +2 -2
  111. data/app/models/katello/content_view_puppet_module.rb +8 -0
  112. data/app/models/katello/content_view_repository.rb +13 -1
  113. data/app/models/katello/content_view_version.rb +2 -1
  114. data/app/models/katello/content_view_version_export_history.rb +26 -1
  115. data/app/models/katello/erratum.rb +3 -1
  116. data/app/models/katello/glue/candlepin/pool.rb +2 -0
  117. data/app/models/katello/glue/pulp/repo.rb +0 -6
  118. data/app/models/katello/glue/pulp/repos.rb +1 -22
  119. data/app/models/katello/host/subscription_facet.rb +4 -0
  120. data/app/models/katello/ping.rb +11 -6
  121. data/app/models/katello/pool.rb +5 -0
  122. data/app/models/katello/product.rb +3 -3
  123. data/app/models/katello/repository.rb +36 -3
  124. data/app/models/katello/smart_proxy_sync_history.rb +8 -0
  125. data/app/models/katello/subscription_status.rb +3 -2
  126. data/app/presenters/katello/host_subscription_presenter.rb +3 -4
  127. data/app/presenters/katello/host_subscriptions_presenter.rb +24 -0
  128. data/app/services/katello/applicability/applicable_content_helper.rb +44 -15
  129. data/app/services/katello/candlepin_event_listener.rb +11 -19
  130. data/app/services/katello/event_monitor/poller_thread.rb +2 -11
  131. data/app/services/katello/pulp/smart_proxy_repository.rb +0 -15
  132. data/app/services/katello/pulp3/api/docker.rb +4 -0
  133. data/app/services/katello/pulp3/content_view_version/export.rb +122 -6
  134. data/app/services/katello/pulp3/content_view_version/import.rb +37 -22
  135. data/app/services/katello/pulp3/content_view_version/import_export_common.rb +6 -16
  136. data/app/services/katello/pulp3/content_view_version/import_validator.rb +84 -0
  137. data/app/services/katello/pulp3/docker_manifest.rb +1 -0
  138. data/app/services/katello/pulp3/docker_tag.rb +1 -0
  139. data/app/services/katello/pulp3/migration.rb +51 -10
  140. data/app/services/katello/pulp3/repository.rb +13 -4
  141. data/app/services/katello/pulp3/repository/docker.rb +5 -0
  142. data/app/services/katello/pulp3/repository/yum.rb +15 -10
  143. data/app/services/katello/pulp3/task.rb +7 -3
  144. data/app/services/katello/pulp3/task_group.rb +10 -0
  145. data/app/services/katello/repository_type.rb +3 -2
  146. data/app/services/katello/smart_proxy_helper.rb +9 -0
  147. data/app/views/foreman/hosts/_registration.html.erb +12 -0
  148. data/app/views/foreman/smart_proxies/_content_tab.html.erb +4 -47
  149. data/app/views/foreman/smart_proxies/show.html.erb +1 -1
  150. data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +22 -25
  151. data/app/views/katello/api/v2/content_view_version_export_histories/show.json.rabl +1 -0
  152. data/app/views/katello/api/v2/content_views/base.json.rabl +1 -0
  153. data/app/views/katello/api/v2/content_views/show.json.rabl +6 -0
  154. data/app/views/katello/api/v2/organizations/show.json.rabl +7 -9
  155. data/app/views/katello/layouts/react.html.erb +3 -2
  156. data/app/views/overrides/activation_keys/_host_tab_pane.html.erb +1 -5
  157. data/app/views/overrides/organizations/_edit_override.html.erb +1 -4
  158. data/app/views/overrides/smart_proxies/_environment_tab.html.erb +1 -1
  159. data/app/views/overrides/smart_proxies/_environment_tab_pane.html.erb +1 -1
  160. data/config/katello.yaml.example +0 -3
  161. data/config/routes/api/v2.rb +31 -13
  162. data/db/migrate/20150930183738_migrate_content_hosts.rb +1 -1
  163. data/db/migrate/20191204214919_add_content_view_version_counts.rb +0 -1
  164. data/db/migrate/20200514092553_move_katello_fields_from_hostgroups.katello.rb +5 -2
  165. data/db/migrate/20200929200357_create_katello_smart_proxy_sync_history.rb +13 -0
  166. data/db/migrate/20201021150008_add_import_only_to_katello_content_view.rb +5 -0
  167. data/db/migrate/20201119211133_pulp3_migration_progress.rb +9 -0
  168. data/db/migrate/20210119162528_delete_puppet_and_ostree_repos.rb +56 -0
  169. data/db/migrate/20210128231228_add_type_and_from_cvv_to_cvv_export_history.rb +14 -0
  170. data/db/migrate/20210201163238_migrate_background_download_policy_to_migrate.rb +7 -0
  171. data/db/seeds.d/104-proxy.rb +1 -1
  172. data/db/seeds.d/111-upgrade_tasks.rb +2 -1
  173. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/capsule-content/capsule-content.controller.js +1 -1
  174. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/common/views/katello-agent-notice.html +1 -1
  175. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/views/content-hosts-bulk-system-purpose-modal.html +35 -40
  176. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-host-register-os-client.directive.js +17 -0
  177. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +2 -2
  178. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +2 -2
  179. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-client.html +12 -5
  180. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-deb-client.html +38 -0
  181. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-oracle-client.html +5 -0
  182. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register-sles-client.html +28 -0
  183. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/register.html +14 -11
  184. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/content-views.controller.js +6 -2
  185. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-activation-keys.controller.js +8 -3
  186. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/deletion/content-view-version-deletion-content-hosts.controller.js +9 -3
  187. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-details.controller.js +12 -0
  188. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/package-filter-details.html +2 -2
  189. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-details.html +7 -7
  190. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-info.html +7 -1
  191. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/views/content-view-publish.html +4 -0
  192. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/content-view-new.controller.js +17 -3
  193. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/new/views/content-view-new.html +16 -2
  194. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/views/content-views.html +5 -0
  195. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +78 -7
  196. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/de.po +17 -20
  197. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/es.po +17 -24
  198. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/fr.po +1292 -1170
  199. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/it.po +17 -20
  200. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ja.po +858 -807
  201. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ko.po +18 -19
  202. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/pt_BR.po +17 -24
  203. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/ru.po +17 -18
  204. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_CN.po +986 -971
  205. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/locale/zh_TW.po +19 -20
  206. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/translations.js +9 -9
  207. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +2 -2
  208. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +1 -1
  209. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/download-policy.service.js +0 -1
  210. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +1 -1
  211. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/repository-types.service.js +8 -1
  212. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.controller.js +2 -2
  213. data/lib/katello/engine.rb +6 -6
  214. data/lib/katello/middleware/event_daemon.rb +1 -1
  215. data/lib/katello/permission_creator.rb +35 -14
  216. data/lib/katello/plugin.rb +8 -3
  217. data/lib/katello/tasks/delete_orphaned_content.rake +1 -3
  218. data/lib/katello/tasks/jenkins.rake +1 -1
  219. data/lib/katello/tasks/pulp3_content_switchover.rake +1 -1
  220. data/lib/katello/tasks/pulp3_migration.rake +18 -6
  221. data/lib/katello/tasks/pulp3_migration_abort.rake +22 -0
  222. data/lib/katello/tasks/pulp3_migration_stats.rake +28 -8
  223. data/lib/katello/tasks/pulp3_post_migration_check.rake +1 -3
  224. data/lib/katello/tasks/receptor/extract_orgs.rake +1 -1
  225. data/lib/katello/tasks/reimport.rake +1 -1
  226. data/lib/katello/tasks/repository.rake +3 -5
  227. data/lib/katello/tasks/upgrades/4.0/remove_ostree_puppet_content.rake +16 -0
  228. data/lib/katello/version.rb +1 -1
  229. data/lib/proxy_api/container_gateway.rb +21 -0
  230. data/locale/action_names.rb +51 -51
  231. data/locale/bn/katello.edit.po +0 -0
  232. data/locale/bn/katello.po +136 -51
  233. data/locale/cs/katello.edit.po +0 -0
  234. data/locale/cs/katello.po +136 -49
  235. data/locale/de/katello.edit.po +0 -0
  236. data/locale/de/katello.po +136 -48
  237. data/locale/en/katello.edit.po +0 -0
  238. data/locale/en/katello.po +136 -48
  239. data/locale/es/katello.edit.po +0 -0
  240. data/locale/es/katello.po +136 -48
  241. data/locale/fr/katello.edit.po +0 -0
  242. data/locale/fr/katello.po +136 -48
  243. data/locale/gu/katello.edit.po +0 -0
  244. data/locale/gu/katello.po +136 -51
  245. data/locale/hi/katello.edit.po +0 -0
  246. data/locale/hi/katello.po +136 -51
  247. data/locale/it/katello.edit.po +0 -0
  248. data/locale/it/katello.po +136 -48
  249. data/locale/ja/katello.edit.po +0 -0
  250. data/locale/ja/katello.po +136 -48
  251. data/locale/katello.pot +941 -767
  252. data/locale/kn/katello.edit.po +0 -0
  253. data/locale/kn/katello.po +136 -51
  254. data/locale/ko/katello.edit.po +0 -0
  255. data/locale/ko/katello.po +136 -48
  256. data/locale/mr/katello.edit.po +0 -0
  257. data/locale/mr/katello.po +136 -51
  258. data/locale/or/katello.edit.po +0 -0
  259. data/locale/or/katello.po +136 -51
  260. data/locale/pa/katello.edit.po +0 -0
  261. data/locale/pa/katello.po +136 -51
  262. data/locale/pt/katello.edit.po +0 -0
  263. data/locale/pt/katello.po +136 -51
  264. data/locale/pt_BR/katello.edit.po +0 -0
  265. data/locale/pt_BR/katello.po +136 -48
  266. data/locale/ru/katello.edit.po +0 -0
  267. data/locale/ru/katello.po +136 -48
  268. data/locale/ta/katello.edit.po +0 -0
  269. data/locale/ta/katello.po +136 -51
  270. data/locale/te/katello.edit.po +0 -0
  271. data/locale/te/katello.po +136 -51
  272. data/locale/zh_CN/katello.edit.po +0 -0
  273. data/locale/zh_CN/katello.po +136 -48
  274. data/locale/zh_TW/katello.edit.po +0 -0
  275. data/locale/zh_TW/katello.po +136 -48
  276. data/package.json +1 -1
  277. data/webpack/__mocks__/foremanReact/Root/Context/ForemanContext.js +0 -1
  278. data/webpack/__mocks__/foremanReact/components/Pagination/PaginationHooks.js +2 -0
  279. data/webpack/__mocks__/foremanReact/components/common/dates/LongDateTime.js +5 -0
  280. data/webpack/{scenes/ContentViews/Details/Repositories → components/SelectableDropdown}/SelectableDropdown.js +20 -3
  281. data/webpack/components/SelectableDropdown/__tests__/SelectableDropdown.test.js +45 -0
  282. data/webpack/components/SelectableDropdown/index.js +3 -0
  283. data/webpack/components/Table/TableWrapper.js +2 -1
  284. data/webpack/components/Table/helpers.js +14 -0
  285. data/webpack/components/TypeAhead/TypeAhead.js +2 -1
  286. data/webpack/components/TypeAhead/pf3Search/TypeAheadSearch.js +2 -1
  287. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +0 -1
  288. data/webpack/containers/Application/overrides.scss +6 -0
  289. data/webpack/index.js +6 -0
  290. data/webpack/redux/actions/RedHatRepositories/helpers.js +5 -5
  291. data/webpack/scenes/ContentViews/ContentViewsActions.js +31 -2
  292. data/webpack/scenes/ContentViews/ContentViewsConstants.js +5 -1
  293. data/webpack/scenes/ContentViews/Copy/ContentViewCopySelectors.js +16 -0
  294. data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +77 -0
  295. data/webpack/scenes/ContentViews/Copy/CopyContentViewModal.js +44 -0
  296. data/webpack/scenes/ContentViews/Copy/__tests__/contentViewCopyResult.fixtures.json +42 -0
  297. data/webpack/scenes/ContentViews/Copy/__tests__/copyContentView.test.js +39 -0
  298. data/webpack/scenes/ContentViews/Copy/index.js +4 -0
  299. data/webpack/scenes/ContentViews/Create/ContentViewCreateSelectors.js +16 -0
  300. data/webpack/scenes/ContentViews/Create/ContentViewFormComponents.js +58 -0
  301. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +175 -0
  302. data/webpack/scenes/ContentViews/Create/CreateContentViewModal.js +27 -0
  303. data/webpack/scenes/ContentViews/Create/__tests__/contentViewCreateResult.fixtures.json +42 -0
  304. data/webpack/scenes/ContentViews/Create/__tests__/createContentView.test.js +92 -0
  305. data/webpack/scenes/ContentViews/Create/index.js +4 -0
  306. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +16 -0
  307. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +20 -1
  308. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +17 -7
  309. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +19 -13
  310. data/webpack/scenes/ContentViews/Details/Filters/ContentType.js +40 -0
  311. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +124 -0
  312. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.fixtures.json +134 -0
  313. data/webpack/scenes/ContentViews/Details/Filters/__tests__/contentViewFilters.test.js +92 -0
  314. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +44 -25
  315. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewDetailRepos.test.js +17 -7
  316. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetail.test.js +24 -0
  317. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +53 -3
  318. data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +4 -3
  319. data/webpack/scenes/ContentViews/__tests__/contentViewPage.test.js +41 -0
  320. data/webpack/scenes/ContentViews/helpers.js +13 -0
  321. data/webpack/scenes/SmartProxy/Content.js +17 -0
  322. data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +11 -0
  323. data/webpack/scenes/SmartProxy/SmartProxyContentConstants.js +3 -0
  324. data/webpack/scenes/SmartProxy/SmartProxyContentSelectors.js +16 -0
  325. data/webpack/scenes/SmartProxy/SmartProxyContentTable.js +152 -0
  326. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentResult.fixtures.json +140 -0
  327. data/webpack/scenes/SmartProxy/__tests__/SmartProxyContentTest.js +38 -0
  328. data/webpack/scenes/SmartProxy/index.js +4 -0
  329. data/webpack/scenes/Subscriptions/Manifest/ManageManifestModal.js +13 -11
  330. data/webpack/scenes/Subscriptions/Manifest/ManifestActions.js +3 -3
  331. data/webpack/scenes/Subscriptions/Manifest/__tests__/ManifestActions.test.js +2 -2
  332. data/webpack/scenes/Subscriptions/Manifest/__tests__/SimpleContentAccess.test.js +2 -2
  333. data/webpack/test-utils/react-testing-lib-wrapper.js +8 -2
  334. data/webpack/utils/helpers.js +3 -0
  335. metadata +110 -31
  336. data/app/controllers/katello/api/v2/gpg_keys_controller.rb +0 -114
  337. data/app/overrides/disable_turbolinks_on_proxies_index.rb +0 -5
  338. data/app/services/katello/event_daemon.rb +0 -135
  339. data/app/services/katello/pulp/content_counts_calculator.rb +0 -60
  340. data/lib/katello/tasks/common.rake +0 -7
  341. data/lib/katello/tasks/reports.rake +0 -4
  342. data/lib/katello/tasks/upgrades/3.10/update_gpg_key_urls.rake +0 -32
  343. data/webpack/__mocks__/foremanReact/components/common/Fill/GlobalFill.js +0 -3
  344. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.scss +0 -5
  345. data/webpack/scenes/ContentViews/Table/actionResolver.js +0 -28
@@ -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?
@@ -4,8 +4,10 @@ module Actions
4
4
  module Repository
5
5
  class ImportUpload < Actions::EntryAction
6
6
  include Actions::Katello::PulpSelector
7
+ # rubocop:disable Metrics/MethodLength
7
8
  def plan(repository, uploads, options = {})
8
9
  action_subject(repository)
10
+ repository.clear_smart_proxy_sync_histories
9
11
  repo_service = repository.backend_service(::SmartProxy.pulp_primary)
10
12
 
11
13
  upload_ids = uploads.pluck('id')
@@ -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,
@@ -23,7 +23,7 @@ module Actions
23
23
  remove_content_args = {
24
24
  :contents => content_unit_ids,
25
25
  :content_unit_type => content_unit_type}
26
-
26
+ repository.clear_smart_proxy_sync_histories
27
27
  pulp_action = plan_pulp_action(
28
28
  [Pulp::Orchestration::Repository::RemoveUnits,
29
29
  Pulp3::Orchestration::Repository::RemoveUnits],
@@ -79,7 +79,9 @@ module Actions
79
79
  end
80
80
 
81
81
  def run
82
- ForemanTasks.async_task(Repository::CapsuleSync, ::Katello::Repository.find(input[:id])) if Setting[:foreman_proxy_content_auto_sync]
82
+ repo = ::Katello::Repository.find(input[:id])
83
+ repo.clear_smart_proxy_sync_histories if input[:contents_changed]
84
+ ForemanTasks.async_task(Repository::CapsuleSync, repo) if Setting[:foreman_proxy_content_auto_sync]
83
85
  rescue ::Katello::Errors::CapsuleCannotBeReached # skip any capsules that cannot be connected to
84
86
  end
85
87
 
@@ -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
 
@@ -60,6 +52,7 @@ module Actions
60
52
  def run
61
53
  repository = ::Katello::Repository.find(input[:repository_id])
62
54
  ForemanTasks.async_task(Katello::Repository::MetadataGenerate, repository)
55
+ repository.clear_smart_proxy_sync_histories
63
56
  end
64
57
 
65
58
  private
@@ -9,6 +9,7 @@ module Actions
9
9
  include Actions::Katello::PulpSelector
10
10
  def plan(repository, files, content_type = nil)
11
11
  action_subject(repository)
12
+ repository.clear_smart_proxy_sync_histories
12
13
  tmp_files = prepare_tmp_files(files)
13
14
 
14
15
  content_type ||= ::Katello::RepositoryTypeManager.find(repository.content_type).default_managed_content_type.label
@@ -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
@@ -0,0 +1,35 @@
1
+ module Actions
2
+ module Middleware
3
+ class RecordSmartProxySyncHistory < Dynflow::Middleware
4
+ def save_smart_proxy_sync_history
5
+ if (action.input[:repository_id] && (action.input[:smart_proxy_id] || action.input[:capsule_id]) && !self.action.output[:smart_proxy_history_id])
6
+ repo_id = action.input[:repository_id]
7
+ repo = ::Katello::Repository.find_by(id: repo_id)
8
+ smart_proxy_id = action.input[:smart_proxy_id] || action.input[:capsule_id]
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}")
30
+ end
31
+ pass(*args)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -2,14 +2,16 @@ module Actions
2
2
  module Pulp
3
3
  module Consumer
4
4
  class SyncCapsule < ::Actions::Pulp::AbstractAsyncTask
5
+ include ::Actions::Helpers::SmartProxySyncHistoryHelper
5
6
  input_format do
6
7
  param :capsule_id, Integer
7
8
  param :repo_pulp_id, String
9
+ param :repository_id, Integer
8
10
  param :sync_options
9
11
  end
10
12
 
11
13
  def plan(repository, smart_proxy, options)
12
- plan_self(:capsule_id => smart_proxy.id, :repo_pulp_id => repository.pulp_id, :sync_options => options)
14
+ plan_self(:capsule_id => smart_proxy.id, :repo_pulp_id => repository.pulp_id, :repository_id => repository.id, :sync_options => options)
13
15
  end
14
16
 
15
17
  def humanized_name
@@ -17,7 +19,7 @@ module Actions
17
19
  end
18
20
 
19
21
  def invoke_external_task
20
- pulp_resources.repository.sync(input[:repo_pulp_id], override_config: input[:sync_options])
22
+ output[:pulp_tasks] = pulp_resources.repository.sync(input[:repo_pulp_id], override_config: input[:sync_options])
21
23
  end
22
24
 
23
25
  def run_progress
@@ -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)
@@ -20,7 +20,7 @@ module Actions
20
20
  else
21
21
  repo = ::Katello::ContentViewPuppetEnvironment.find_by(:id => input[:content_view_puppet_environment_id]).nonpersisted_repository
22
22
  end
23
-
23
+ repo.clear_smart_proxy_sync_histories if smart_proxy(input[:smart_proxy_id]).pulp_primary?
24
24
  repo.backend_service(smart_proxy(input[:smart_proxy_id])).distributor_publish(input[:options])
25
25
  end
26
26
 
@@ -74,6 +74,7 @@ module Actions
74
74
 
75
75
  def cancel
76
76
  pulp_tasks.each { |task| task.cancel }
77
+ task_groups.each { |task_group| task_group.cancel }
77
78
  end
78
79
 
79
80
  def rescue_external_task(error)
@@ -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
@@ -2,6 +2,7 @@ module Actions
2
2
  module Pulp3
3
3
  module CapsuleContent
4
4
  class Sync < Pulp3::AbstractAsyncTask
5
+ include ::Actions::Helpers::SmartProxySyncHistoryHelper
5
6
  def plan(repository, smart_proxy, options = {})
6
7
  sequence do
7
8
  plan_self(:repository_id => repository.id, :smart_proxy_id => smart_proxy.id, :options => options)
@@ -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