katello 4.4.1 → 4.5.0

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 (488) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/hosts/activation_key_edit.js +9 -2
  3. data/app/controllers/katello/api/registry/registry_proxies_controller.rb +3 -0
  4. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +5 -1
  5. data/app/controllers/katello/api/v2/alternate_content_sources_bulk_actions_controller.rb +44 -0
  6. data/app/controllers/katello/api/v2/alternate_content_sources_controller.rb +121 -0
  7. data/app/controllers/katello/api/v2/content_export_incrementals_controller.rb +39 -3
  8. data/app/controllers/katello/api/v2/content_exports_controller.rb +19 -0
  9. data/app/controllers/katello/api/v2/content_imports_controller.rb +13 -16
  10. data/app/controllers/katello/api/v2/content_view_components_controller.rb +1 -1
  11. data/app/controllers/katello/api/v2/content_view_repositories_controller.rb +1 -1
  12. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +0 -12
  13. data/app/controllers/katello/api/v2/content_views_controller.rb +13 -0
  14. data/app/controllers/katello/api/v2/environments_controller.rb +1 -1
  15. data/app/controllers/katello/api/v2/host_module_streams_controller.rb +8 -2
  16. data/app/controllers/katello/api/v2/host_subscriptions_controller.rb +25 -3
  17. data/app/controllers/katello/api/v2/organizations_controller.rb +4 -2
  18. data/app/controllers/katello/api/v2/repositories_bulk_actions_controller.rb +1 -1
  19. data/app/controllers/katello/api/v2/repositories_controller.rb +1 -1
  20. data/app/controllers/katello/api/v2/repository_sets_controller.rb +40 -7
  21. data/app/controllers/katello/api/v2/subscriptions_controller.rb +2 -2
  22. data/app/controllers/katello/concerns/api/v2/hosts_controller_extensions.rb +1 -1
  23. data/app/helpers/katello/concerns/smart_proxy_helper_extensions.rb +4 -0
  24. data/app/helpers/katello/hosts_and_hostgroups_helper.rb +21 -3
  25. data/app/lib/actions/katello/alternate_content_source/create.rb +24 -0
  26. data/app/lib/actions/katello/alternate_content_source/destroy.rb +27 -0
  27. data/app/lib/actions/katello/alternate_content_source/refresh.rb +27 -0
  28. data/app/lib/actions/katello/alternate_content_source/update.rb +41 -0
  29. data/app/lib/actions/katello/cdn_configuration/update.rb +3 -3
  30. data/app/lib/actions/katello/content_view/destroy.rb +2 -1
  31. data/app/lib/actions/katello/content_view/incremental_updates.rb +7 -3
  32. data/app/lib/actions/katello/content_view/publish.rb +8 -10
  33. data/app/lib/actions/katello/content_view_version/auto_create_products.rb +4 -4
  34. data/app/lib/actions/katello/content_view_version/auto_create_redhat_repositories.rb +6 -4
  35. data/app/lib/actions/katello/content_view_version/auto_create_repositories.rb +6 -4
  36. data/app/lib/actions/katello/content_view_version/import.rb +25 -22
  37. data/app/lib/actions/katello/content_view_version/import_library.rb +0 -1
  38. data/app/lib/actions/katello/content_view_version/import_repository.rb +21 -0
  39. data/app/lib/actions/katello/content_view_version/incremental_update.rb +85 -93
  40. data/app/lib/actions/katello/content_view_version/reset_content_view_repositories_from_metadata.rb +2 -2
  41. data/app/lib/actions/katello/organization/manifest_refresh.rb +1 -1
  42. data/app/lib/actions/katello/product/content_create.rb +10 -8
  43. data/app/lib/actions/katello/repository/destroy.rb +36 -12
  44. data/app/lib/actions/katello/repository_set/disable_repository.rb +8 -3
  45. data/app/lib/actions/pulp3/alternate_content_source/create.rb +20 -0
  46. data/app/lib/actions/pulp3/alternate_content_source/create_remote.rb +20 -0
  47. data/app/lib/actions/pulp3/alternate_content_source/delete.rb +16 -0
  48. data/app/lib/actions/pulp3/alternate_content_source/delete_remote.rb +16 -0
  49. data/app/lib/actions/pulp3/alternate_content_source/refresh.rb +23 -0
  50. data/app/lib/actions/pulp3/alternate_content_source/update.rb +16 -0
  51. data/app/lib/actions/pulp3/alternate_content_source/update_remote.rb +17 -0
  52. data/app/lib/actions/pulp3/content_view_version/{import.rb → create_import.rb} +5 -5
  53. data/app/lib/actions/pulp3/content_view_version/create_importer.rb +4 -3
  54. data/app/lib/actions/pulp3/content_view_version/destroy_importer.rb +12 -1
  55. data/app/lib/actions/pulp3/orchestration/alternate_content_source/create.rb +16 -0
  56. data/app/lib/actions/pulp3/orchestration/alternate_content_source/delete.rb +23 -0
  57. data/app/lib/actions/pulp3/orchestration/alternate_content_source/refresh.rb +15 -0
  58. data/app/lib/actions/pulp3/orchestration/alternate_content_source/update.rb +16 -0
  59. data/app/lib/actions/pulp3/orchestration/content_view_version/copy_version_units_to_library.rb +1 -1
  60. data/app/lib/actions/pulp3/orchestration/content_view_version/export_repository.rb +51 -0
  61. data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +5 -2
  62. data/app/lib/actions/pulp3/repository/save_artifact.rb +1 -1
  63. data/app/lib/katello/api/v2/error_handling.rb +1 -0
  64. data/app/lib/katello/concerns/base_template_scope_extensions.rb +24 -11
  65. data/app/lib/katello/resources/cdn/katello_cdn.rb +3 -1
  66. data/app/lib/katello/util/errata.rb +2 -3
  67. data/app/lib/katello/validators/alternate_content_source_path_validator.rb +29 -0
  68. data/app/lib/katello/validators/content_default_http_proxy_setting_validator.rb +12 -0
  69. data/app/lib/katello/validators/content_view_environment_validator.rb +10 -5
  70. data/app/models/katello/alternate_content_source.rb +71 -0
  71. data/app/models/katello/authorization/alternate_content_source.rb +33 -0
  72. data/app/models/katello/authorization/repository.rb +5 -3
  73. data/app/models/katello/candlepin/repository_mapper.rb +13 -6
  74. data/app/models/katello/cdn_configuration.rb +15 -15
  75. data/app/models/katello/concerns/content_facet_host_extensions.rb +25 -0
  76. data/app/models/katello/concerns/host_managed_extensions.rb +7 -6
  77. data/app/models/katello/concerns/http_proxy_extensions.rb +14 -0
  78. data/app/models/katello/concerns/organization_extensions.rb +4 -2
  79. data/app/models/katello/concerns/setting_extensions.rb +14 -0
  80. data/app/models/katello/concerns/smart_proxy_extensions.rb +2 -1
  81. data/app/models/katello/content.rb +1 -0
  82. data/app/models/katello/content_credential.rb +6 -0
  83. data/app/models/katello/content_override.rb +7 -3
  84. data/app/models/katello/content_view.rb +33 -2
  85. data/app/models/katello/content_view_erratum_filter.rb +26 -12
  86. data/app/models/katello/content_view_filter.rb +4 -0
  87. data/app/models/katello/content_view_version.rb +12 -0
  88. data/app/models/katello/content_view_version_export_history.rb +3 -1
  89. data/app/models/katello/erratum.rb +9 -5
  90. data/app/models/katello/events/delete_latest_content_view_version.rb +40 -0
  91. data/app/models/katello/host/content_facet.rb +14 -0
  92. data/app/models/katello/host_available_module_stream.rb +12 -0
  93. data/app/models/katello/product_content.rb +1 -0
  94. data/app/models/katello/purpose_sla_status.rb +1 -1
  95. data/app/models/katello/purpose_status.rb +2 -2
  96. data/app/models/katello/repository.rb +7 -4
  97. data/app/models/katello/root_repository.rb +1 -1
  98. data/app/models/katello/smart_proxy_alternate_content_source.rb +8 -0
  99. data/app/models/katello/sync_plan.rb +1 -1
  100. data/app/presenters/katello/product_content_presenter.rb +15 -0
  101. data/app/services/katello/applicable_host_queue.rb +1 -1
  102. data/app/services/katello/product_content_finder.rb +12 -2
  103. data/app/services/katello/pulp3/alternate_content_source.rb +123 -0
  104. data/app/services/katello/pulp3/api/file.rb +8 -0
  105. data/app/services/katello/pulp3/api/yum.rb +8 -0
  106. data/app/services/katello/pulp3/content_view_version/export.rb +27 -5
  107. data/app/services/katello/pulp3/content_view_version/import.rb +104 -71
  108. data/app/services/katello/pulp3/content_view_version/import_export_common.rb +4 -4
  109. data/app/services/katello/pulp3/content_view_version/import_gpg_keys.rb +13 -11
  110. data/app/services/katello/pulp3/content_view_version/import_validator.rb +67 -72
  111. data/app/services/katello/pulp3/content_view_version/importable_products.rb +40 -24
  112. data/app/services/katello/pulp3/content_view_version/importable_repositories.rb +102 -38
  113. data/app/services/katello/pulp3/content_view_version/metadata_generator.rb +2 -2
  114. data/app/services/katello/pulp3/content_view_version/metadata_map.rb +117 -0
  115. data/app/services/katello/pulp3/pulp_content_unit.rb +6 -1
  116. data/app/services/katello/pulp3/repository/yum.rb +70 -12
  117. data/app/services/katello/pulp3/repository.rb +6 -62
  118. data/app/services/katello/pulp3/service_common.rb +66 -0
  119. data/app/services/katello/pulp3/smart_proxy_mirror_repository.rb +4 -1
  120. data/app/services/katello/ui_notifications/content_view/delete_latest_version_failure.rb +22 -0
  121. data/app/views/foreman/job_templates/change_content_source.erb +1 -1
  122. data/app/views/foreman/job_templates/install_errata.erb +5 -5
  123. data/app/views/foreman/job_templates/install_errata_by_search_query.erb +10 -8
  124. data/app/views/foreman/job_templates/install_group.erb +4 -4
  125. data/app/views/foreman/job_templates/install_package.erb +4 -4
  126. data/app/views/foreman/job_templates/install_packages_by_search_query.erb +3 -3
  127. data/app/views/foreman/job_templates/remove_group.erb +4 -4
  128. data/app/views/foreman/job_templates/remove_package.erb +4 -4
  129. data/app/views/foreman/job_templates/remove_packages_by_search_query.erb +3 -3
  130. data/app/views/foreman/job_templates/resolve_traces.erb +2 -2
  131. data/app/views/foreman/job_templates/restart_services.erb +3 -3
  132. data/app/views/foreman/job_templates/update_group.erb +4 -4
  133. data/app/views/foreman/job_templates/update_package.erb +4 -4
  134. data/app/views/foreman/job_templates/update_packages_by_search_query.erb +3 -3
  135. data/app/views/katello/api/v2/alternate_content_sources/base.json.rabl +24 -0
  136. data/app/views/katello/api/v2/alternate_content_sources/index.json.rabl +7 -0
  137. data/app/views/katello/api/v2/alternate_content_sources/show.json.rabl +3 -0
  138. data/app/views/katello/api/v2/capsule_content/sync_status.json.rabl +1 -1
  139. data/app/views/katello/api/v2/content_facet/show.json.rabl +12 -0
  140. data/app/views/katello/api/v2/content_view_version_export_histories/show.json.rabl +2 -3
  141. data/app/views/katello/api/v2/content_view_versions/base.json.rabl +1 -1
  142. data/app/views/katello/api/v2/content_views/base.json.rabl +1 -0
  143. data/app/views/katello/api/v2/environments/show.json.rabl +2 -0
  144. data/app/views/katello/api/v2/errata/_counts.json.rabl +2 -2
  145. data/app/views/katello/api/v2/host_module_streams/base.json.rabl +2 -2
  146. data/app/views/katello/api/v2/hosts/host_collections.json.rabl +1 -1
  147. data/app/views/katello/api/v2/organizations/show.json.rabl +7 -1
  148. data/app/views/katello/api/v2/repositories/show.json.rabl +2 -1
  149. data/app/views/katello/api/v2/repository_sets/show.json.rabl +4 -0
  150. data/app/views/katello/sync_management/_repo.html.erb +8 -29
  151. data/config/routes/api/v2.rb +19 -0
  152. data/db/migrate/20150930183738_migrate_content_hosts.rb +0 -399
  153. data/db/migrate/20171025163149_remove_use_pulp_oauth_setting.rb +1 -1
  154. data/db/migrate/20171114150937_cleanup_installed_packages.rb +1 -1
  155. data/db/migrate/20180402160223_clean_up_force_post_sync_action_setting.rb +1 -1
  156. data/db/migrate/20211129200124_remove_dependency_solving_algorithm_setting.rb +1 -1
  157. data/db/migrate/20211220185935_clean_duplicate_content_units.rb +1 -1
  158. data/db/migrate/20220110223754_update_disconnected_settings.rb +5 -5
  159. data/db/migrate/20220117151612_add_alternate_content_sources.rb +48 -0
  160. data/db/migrate/20220124191056_add_type_to_cdn_configuration.rb +9 -4
  161. data/db/migrate/20220209203251_add_generated_for_to_content_views.rb +13 -0
  162. data/db/migrate/20220209205137_expand_sync_timeout_settings.rb +7 -7
  163. data/db/migrate/20220228173251_remove_drpm_from_ignorable_content.rb +12 -0
  164. data/db/migrate/20220303160220_remove_duplicate_errata.rb +1 -1
  165. data/db/migrate/20220404190836_delete_old_setting_data.rb +9 -0
  166. data/db/migrate/20220405220616_update_cdn_configuration_type.rb +11 -0
  167. data/db/migrate/20220419193414_content_settings_to_dsl_category.rb +5 -0
  168. data/db/migrate/20220428203334_add_last_refreshed_to_katello_alternate_content_sources.rb +5 -0
  169. data/db/seeds.d/110-content-view-autopublish.rb +13 -0
  170. data/db/seeds.d/150-module_job_templates.rb +1 -1
  171. data/engines/bastion/README.md +1 -0
  172. data/engines/bastion/app/assets/javascripts/bastion/components/bst-modal.directive.js +1 -0
  173. data/engines/bastion/app/views/bastion/layouts/assets.html.erb +1 -0
  174. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/activation-keys.routes.js +1 -1
  175. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-details.controller.js +4 -2
  176. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-details.html +1 -1
  177. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/capsule-content/capsule-content.controller.js +11 -6
  178. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-module-streams.controller.js +1 -0
  179. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-packages-installed.controller.js +1 -0
  180. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-packages.controller.js +11 -3
  181. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/content-host-traces.controller.js +1 -0
  182. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-actions.html +1 -1
  183. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content/views/content-host-packages-applicable.html +1 -1
  184. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/content-hosts.controller.js +8 -0
  185. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details.controller.js +4 -2
  186. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/views/content-hosts.html +2 -2
  187. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/content.service.js +10 -0
  188. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-deb-repositories.html +26 -0
  189. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/details/views/environment-debs.html +27 -0
  190. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/environments.controller.js +1 -0
  191. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/environments.routes.js +22 -0
  192. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/environments/views/environments.html +13 -7
  193. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/i18n/bastion_katello.pot +63 -17
  194. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details-info.controller.js +7 -8
  195. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/repository-details.controller.js +10 -1
  196. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-details.html +21 -3
  197. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +8 -12
  198. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/new-repository.controller.js +7 -5
  199. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +2 -1
  200. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/discovery-create.controller.js +1 -1
  201. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/discovery/views/discovery-create.html +1 -1
  202. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/products.routes.js +1 -0
  203. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/subscriptions/views/content-access-mode-banner.html +6 -1
  204. data/lib/katello/engine.rb +1 -5
  205. data/lib/katello/permission_creator.rb +34 -4
  206. data/lib/katello/plugin.rb +377 -3
  207. data/lib/katello/tasks/refresh_alternate_content_sources.rake +15 -0
  208. data/lib/katello/tasks/reset.rake.bak +67 -0
  209. data/lib/katello/tasks/update_content_default_http_proxy.rake +2 -3
  210. data/lib/katello/version.rb +1 -1
  211. data/locale/action_names.rb +47 -41
  212. data/locale/bn/LC_MESSAGES/katello.mo +0 -0
  213. data/locale/bn/katello.po +820 -106
  214. data/locale/bn/katello.po.time_stamp +0 -0
  215. data/locale/cs/LC_MESSAGES/katello.mo +0 -0
  216. data/locale/cs/katello.po +818 -104
  217. data/locale/cs/katello.po.time_stamp +0 -0
  218. data/locale/de/LC_MESSAGES/katello.mo +0 -0
  219. data/locale/de/katello.po +893 -179
  220. data/locale/de/katello.po.time_stamp +0 -0
  221. data/locale/en/LC_MESSAGES/katello.mo +0 -0
  222. data/locale/en/katello.po +817 -103
  223. data/locale/en/katello.po.time_stamp +0 -0
  224. data/locale/es/LC_MESSAGES/katello.mo +0 -0
  225. data/locale/es/katello.po +882 -168
  226. data/locale/es/katello.po.time_stamp +0 -0
  227. data/locale/fr/LC_MESSAGES/katello.mo +0 -0
  228. data/locale/fr/katello.po +1219 -505
  229. data/locale/fr/katello.po.time_stamp +0 -0
  230. data/locale/gu/LC_MESSAGES/katello.mo +0 -0
  231. data/locale/gu/katello.po +826 -112
  232. data/locale/gu/katello.po.time_stamp +0 -0
  233. data/locale/hi/LC_MESSAGES/katello.mo +0 -0
  234. data/locale/hi/katello.po +826 -112
  235. data/locale/hi/katello.po.time_stamp +0 -0
  236. data/locale/it/LC_MESSAGES/katello.mo +0 -0
  237. data/locale/it/katello.po +863 -148
  238. data/locale/it/katello.po.time_stamp +0 -0
  239. data/locale/ja/LC_MESSAGES/katello.mo +0 -0
  240. data/locale/ja/katello.po +1216 -499
  241. data/locale/ja/katello.po.time_stamp +0 -0
  242. data/locale/katello.pot +3847 -2507
  243. data/locale/kn/LC_MESSAGES/katello.mo +0 -0
  244. data/locale/kn/katello.po +826 -112
  245. data/locale/kn/katello.po.time_stamp +0 -0
  246. data/locale/ko/LC_MESSAGES/katello.mo +0 -0
  247. data/locale/ko/katello.po +912 -198
  248. data/locale/ko/katello.po.time_stamp +0 -0
  249. data/locale/mr/LC_MESSAGES/katello.mo +0 -0
  250. data/locale/mr/katello.po +826 -112
  251. data/locale/mr/katello.po.time_stamp +0 -0
  252. data/locale/or/LC_MESSAGES/katello.mo +0 -0
  253. data/locale/or/katello.po +826 -112
  254. data/locale/or/katello.po.time_stamp +0 -0
  255. data/locale/pa/LC_MESSAGES/katello.mo +0 -0
  256. data/locale/pa/katello.po +826 -112
  257. data/locale/pa/katello.po.time_stamp +0 -0
  258. data/locale/pt/LC_MESSAGES/katello.mo +0 -0
  259. data/locale/pt/katello.po +817 -103
  260. data/locale/pt/katello.po.time_stamp +0 -0
  261. data/locale/pt_BR/LC_MESSAGES/katello.mo +0 -0
  262. data/locale/pt_BR/katello.po +879 -165
  263. data/locale/pt_BR/katello.po.time_stamp +0 -0
  264. data/locale/ru/LC_MESSAGES/katello.mo +0 -0
  265. data/locale/ru/katello.po +927 -213
  266. data/locale/ru/katello.po.time_stamp +0 -0
  267. data/locale/ta/LC_MESSAGES/katello.mo +0 -0
  268. data/locale/ta/katello.po +820 -106
  269. data/locale/ta/katello.po.time_stamp +0 -0
  270. data/locale/te/LC_MESSAGES/katello.mo +0 -0
  271. data/locale/te/katello.po +826 -112
  272. data/locale/te/katello.po.time_stamp +0 -0
  273. data/locale/zh_CN/LC_MESSAGES/katello.mo +0 -0
  274. data/locale/zh_CN/katello.po +1202 -486
  275. data/locale/zh_CN/katello.po.time_stamp +0 -0
  276. data/locale/zh_TW/LC_MESSAGES/katello.mo +0 -0
  277. data/locale/zh_TW/katello.po +856 -142
  278. data/locale/zh_TW/katello.po.time_stamp +0 -0
  279. data/webpack/components/Bookmark/index.js +22 -14
  280. data/webpack/components/EditableTextInput/EditableTextInput.js +20 -5
  281. data/webpack/components/Errata/index.js +38 -8
  282. data/webpack/components/Packages/index.js +1 -4
  283. data/webpack/components/Search/Search.js +22 -3
  284. data/webpack/components/SelectAllCheckbox/index.js +1 -0
  285. data/webpack/components/SelectableDropdown/SelectableDropdown.js +4 -2
  286. data/webpack/components/Table/EmptyStateMessage.js +21 -7
  287. data/webpack/components/Table/MainTable.js +29 -4
  288. data/webpack/components/Table/MainTable.scss +5 -1
  289. data/webpack/components/Table/TableHooks.js +65 -20
  290. data/webpack/components/Table/TableWrapper.js +9 -3
  291. data/webpack/components/Table/components/SortableColumnHeaders.js +19 -0
  292. data/webpack/components/Table/components/TranslatedPlural.js +57 -0
  293. data/webpack/components/TypeAhead/TypeAhead.js +12 -0
  294. data/webpack/components/TypeAhead/pf4Search/TypeAheadInput.js +13 -11
  295. data/webpack/components/TypeAhead/pf4Search/TypeAheadSearch.js +7 -2
  296. data/webpack/components/extensions/HostDetails/ActionsBar/index.js +27 -0
  297. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ChangeHostCVModal.js +250 -0
  298. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/ContentViewDetailsCard.js +232 -0
  299. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/HostContentViewActions.js +19 -0
  300. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/HostContentViewConstants.js +2 -0
  301. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/changeHostCVModal.test.js +131 -0
  302. data/webpack/components/extensions/HostDetails/Cards/{__tests__ → ContentViewDetailsCard/__tests__}/contentViewDetailsCard.test.js +22 -0
  303. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/contentViews.fixtures.json +443 -0
  304. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard/__tests__/envPaths.fixtures.json +320 -0
  305. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.js +57 -33
  306. data/webpack/components/extensions/HostDetails/Cards/ErrataOverviewCard.scss +3 -0
  307. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsActions.js +30 -0
  308. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsCard.js +206 -0
  309. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsConstants.js +7 -0
  310. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsModal.js +227 -0
  311. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsSelectors.js +18 -0
  312. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/availableHostCollections.fixtures.json +106 -0
  313. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/hostCollectionsCard.test.js +118 -0
  314. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/hostCollectionsModal.test.js +235 -0
  315. data/webpack/components/extensions/HostDetails/Cards/HostCollectionsCard/__tests__/removableHostCollections.fixtures.json +45 -0
  316. data/webpack/components/extensions/HostDetails/Cards/__tests__/errataOverviewCard.test.js +33 -8
  317. data/webpack/components/extensions/HostDetails/DetailsTabCards/InstalledProductsCard.js +44 -0
  318. data/webpack/components/extensions/HostDetails/DetailsTabCards/RecentCommunicationCardExtensions.js +37 -0
  319. data/webpack/components/extensions/HostDetails/DetailsTabCards/RegistrationCard.js +107 -0
  320. data/webpack/components/extensions/HostDetails/DetailsTabCards/SystemPropertiesCardExtensions.js +38 -0
  321. data/webpack/components/extensions/HostDetails/HostDetailsActions.js +11 -0
  322. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/SecondaryTabsRoutes.js +4 -0
  323. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/constants.js +2 -0
  324. data/webpack/components/extensions/HostDetails/Tabs/ContentTab/index.js +6 -1
  325. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/ErrataTab.js +176 -72
  326. data/webpack/components/extensions/HostDetails/Tabs/ErrataTab/HostErrataActions.js +1 -7
  327. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsActions.js +1 -3
  328. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsConstants.js +28 -0
  329. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/ModuleStreamsTab.js +522 -118
  330. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/HostPackagesActions.js +1 -7
  331. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackageInstallModal.js +6 -4
  332. data/webpack/components/extensions/HostDetails/Tabs/PackagesTab/PackagesTab.js +164 -58
  333. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionActions.js +59 -49
  334. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionConstants.js +1 -0
  335. data/webpack/components/extensions/HostDetails/Tabs/RemoteExecutionHooks.js +85 -0
  336. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsActions.js +33 -54
  337. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsConstants.js +20 -0
  338. data/webpack/components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab.js +298 -107
  339. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/EnableTracerModal.js +14 -7
  340. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/HostTracesActions.js +2 -1
  341. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesEnabler.js +104 -0
  342. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js +134 -57
  343. data/webpack/components/extensions/HostDetails/Tabs/__tests__/errataTab.test.js +37 -32
  344. data/webpack/components/extensions/HostDetails/Tabs/{ModuleStreamsTab/__tests__/modules.fixtures.json → __tests__/moduleStreams.fixtures.json} +6 -3
  345. data/webpack/components/extensions/HostDetails/Tabs/__tests__/moduleStreamsTab.test.js +261 -0
  346. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packageInstallModal.test.js +21 -15
  347. data/webpack/components/extensions/HostDetails/Tabs/__tests__/packagesTab.test.js +44 -1
  348. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySets.fixtures.json +4 -1
  349. data/webpack/components/extensions/HostDetails/Tabs/__tests__/repositorySetsTab.test.js +105 -6
  350. data/webpack/components/extensions/HostDetails/Tabs/__tests__/tracesTab.test.js +25 -6
  351. data/webpack/components/extensions/HostDetails/Tabs/customizedRexUrlHelpers.js +6 -0
  352. data/webpack/components/extensions/HostDetails/hostDetailsHelpers.js +18 -0
  353. data/webpack/containers/Application/config.js +5 -0
  354. data/webpack/global_index.js +32 -9
  355. data/webpack/global_test_setup.js +13 -0
  356. data/webpack/redux/actions/RedHatRepositories/enabled.js +2 -1
  357. data/webpack/redux/actions/RedHatRepositories/helpers.js +13 -8
  358. data/webpack/scenes/AlternateContentSources/ACSActions.js +65 -0
  359. data/webpack/scenes/AlternateContentSources/ACSConstants.js +18 -0
  360. data/webpack/scenes/AlternateContentSources/ACSIndexPage.js +23 -0
  361. data/webpack/scenes/AlternateContentSources/ACSSelectors.js +24 -0
  362. data/webpack/scenes/AlternateContentSources/Create/ACSCreateContext.js +4 -0
  363. data/webpack/scenes/AlternateContentSources/Create/ACSCreateWizard.js +160 -0
  364. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCreateFinish.js +79 -0
  365. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSCredentials.js +199 -0
  366. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSReview.js +104 -0
  367. data/webpack/scenes/AlternateContentSources/Create/Steps/ACSSmartProxies.js +41 -0
  368. data/webpack/scenes/AlternateContentSources/Create/Steps/AcsUrlPaths.js +71 -0
  369. data/webpack/scenes/AlternateContentSources/Create/Steps/NameACS.js +57 -0
  370. data/webpack/scenes/AlternateContentSources/Create/Steps/SelectSource.js +77 -0
  371. data/webpack/scenes/AlternateContentSources/Create/__tests__/acsCreate.test.js +149 -0
  372. data/webpack/scenes/AlternateContentSources/Create/__tests__/acsCreateData.fixtures.json +3 -0
  373. data/webpack/scenes/AlternateContentSources/Create/__tests__/contentCredentials.fixtures.json +69 -0
  374. data/webpack/scenes/AlternateContentSources/Create/__tests__/smartProxy.fixtures.json +65 -0
  375. data/webpack/scenes/AlternateContentSources/MainTable/ACSTable.js +162 -0
  376. data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsIndex.fixtures.json +91 -0
  377. data/webpack/scenes/AlternateContentSources/MainTable/__tests__/acsTable.test.js +67 -0
  378. data/webpack/scenes/AlternateContentSources/index.js +4 -0
  379. data/webpack/scenes/Content/Details/ContentRepositories.js +1 -0
  380. data/webpack/scenes/Content/Table/ContentTable.js +1 -0
  381. data/webpack/scenes/ContentCredentials/ContentCredentialSelectors.js +4 -1
  382. data/webpack/scenes/ContentViews/ContentViewsActions.js +6 -2
  383. data/webpack/scenes/ContentViews/ContentViewsConstants.js +11 -3
  384. data/webpack/scenes/ContentViews/Copy/CopyContentViewForm.js +2 -1
  385. data/webpack/scenes/ContentViews/Create/ContentViewFormComponents.js +10 -1
  386. data/webpack/scenes/ContentViews/Create/CreateContentViewForm.js +2 -1
  387. data/webpack/scenes/ContentViews/Delete/ContentViewDeleteWizard.js +7 -5
  388. data/webpack/scenes/ContentViews/Delete/Steps/CVDeletionFinish.js +29 -21
  389. data/webpack/scenes/ContentViews/Delete/__tests__/contentViewDelete.test.js +15 -8
  390. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewAddModal.js +2 -2
  391. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ComponentContentViewBulkAddModal.js +2 -2
  392. data/webpack/scenes/ContentViews/Details/ComponentContentViews/ContentViewComponents.js +3 -1
  393. data/webpack/scenes/ContentViews/Details/ContentViewDetailActions.js +34 -8
  394. data/webpack/scenes/ContentViews/Details/ContentViewDetailSelectors.js +33 -29
  395. data/webpack/scenes/ContentViews/Details/ContentViewDetails.js +130 -79
  396. data/webpack/scenes/ContentViews/Details/ContentViewInfo.js +16 -2
  397. data/webpack/scenes/ContentViews/Details/Filters/Add/CVFilterAddModal.js +2 -1
  398. data/webpack/scenes/ContentViews/Details/Filters/AffectedRepositories/AffectedRepositoryTable.js +2 -1
  399. data/webpack/scenes/ContentViews/Details/Filters/CVContainerImageFilterContent.js +6 -1
  400. data/webpack/scenes/ContentViews/Details/Filters/CVErrataDateFilterContent.js +41 -21
  401. data/webpack/scenes/ContentViews/Details/Filters/CVErrataIDFilterContent.js +38 -20
  402. data/webpack/scenes/ContentViews/Details/Filters/CVModuleStreamFilterContent.js +2 -0
  403. data/webpack/scenes/ContentViews/Details/Filters/CVPackageGroupFilterContent.js +8 -1
  404. data/webpack/scenes/ContentViews/Details/Filters/CVRpmFilterContent.js +9 -1
  405. data/webpack/scenes/ContentViews/Details/Filters/ContentViewFilters.js +2 -1
  406. data/webpack/scenes/ContentViews/Details/Filters/MatchContentModal/CVRpmMatchContentModal.js +1 -0
  407. data/webpack/scenes/ContentViews/Details/Filters/Rules/ContainerTag/AddEditContainerTagRuleModal.js +27 -12
  408. data/webpack/scenes/ContentViews/Details/Filters/Rules/Package/AddEditPackageRuleModal.js +39 -17
  409. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVContainerImageFilterContent.test.js +27 -10
  410. data/webpack/scenes/ContentViews/Details/Filters/__tests__/CVRpmFilterContent.test.js +46 -23
  411. data/webpack/scenes/ContentViews/Details/Histories/ContentViewHistories.js +3 -2
  412. data/webpack/scenes/ContentViews/Details/Promote/ContentViewVersionPromote.js +5 -2
  413. data/webpack/scenes/ContentViews/Details/Repositories/ContentViewRepositories.js +161 -108
  414. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewAddRemove.test.js +7 -7
  415. data/webpack/scenes/ContentViews/Details/Repositories/__tests__/contentViewRepoAdd.fixture.json +1 -0
  416. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/ActionSummary.js +58 -0
  417. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/BulkDeleteContextWrapper.js +45 -0
  418. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/BulkDeleteHelpers.js +30 -0
  419. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/BulkDeleteModal.js +56 -0
  420. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ConfirmBulkDelete.js +126 -0
  421. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/FinishBulkDelete.js +61 -0
  422. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReassignActivationKeys.js +196 -0
  423. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReassignHosts.js +220 -0
  424. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/Steps/ReviewEnvironments.js +104 -0
  425. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/BulkDeleteModal.test.js +122 -0
  426. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/BulkDeleteVersions.fixtures.json +600 -0
  427. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/contentView.fixtures.json +1504 -0
  428. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/contentViewVersion.fixtures.json +936 -0
  429. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/environmentPaths.fixtures.json +261 -0
  430. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/__tests__/hosts.fixtures.json +163 -0
  431. data/webpack/scenes/ContentViews/Details/Versions/BulkDelete/bulkDeleteSteps.js +79 -0
  432. data/webpack/scenes/ContentViews/Details/Versions/ContentViewVersions.js +192 -167
  433. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveCVVersionWizard.js +2 -5
  434. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionDeleteFinish.js +38 -53
  435. data/webpack/scenes/ContentViews/Details/Versions/Delete/RemoveSteps/CVVersionRemoveReview.js +1 -1
  436. data/webpack/scenes/ContentViews/Details/Versions/Delete/__tests__/cvVersionRemove.test.js +6 -12
  437. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedActivationKeys.js +1 -0
  438. data/webpack/scenes/ContentViews/Details/Versions/Delete/affectedHosts.js +1 -0
  439. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailConfig.js +1 -0
  440. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetails.js +8 -20
  441. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsHeader.js +23 -13
  442. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/ContentViewVersionDetailsTable.js +3 -0
  443. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.fixtures.json +4 -4
  444. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetails.test.js +0 -3
  445. data/webpack/scenes/ContentViews/Details/Versions/VersionDetails/__tests__/ContentViewVersionDetailsEmpty.test.js +4 -4
  446. data/webpack/scenes/ContentViews/Details/Versions/__tests__/contentViewVersions.test.js +12 -14
  447. data/webpack/scenes/ContentViews/Details/__tests__/contentViewDetails.fixtures.json +1 -0
  448. data/webpack/scenes/ContentViews/Publish/CVPublishFinish.js +96 -117
  449. data/webpack/scenes/ContentViews/Publish/PublishContentViewWizard.js +13 -19
  450. data/webpack/scenes/ContentViews/Publish/__tests__/publishContentView.test.js +9 -20
  451. data/webpack/scenes/ContentViews/Table/ContentViewsTable.js +165 -148
  452. data/webpack/scenes/ContentViews/Table/tableDataGenerator.js +2 -0
  453. data/webpack/scenes/ContentViews/components/ContentViewIcon.js +14 -3
  454. data/webpack/scenes/ContentViews/components/EnvironmentLabels.js +4 -3
  455. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.js +10 -6
  456. data/webpack/scenes/ContentViews/components/EnvironmentPaths/EnvironmentPaths.scss +6 -1
  457. data/webpack/scenes/ContentViews/components/TaskPresenter/TaskPresenter.js +40 -35
  458. data/webpack/scenes/ContentViews/expansions/RelatedCompositeContentViewsModal.js +1 -1
  459. data/webpack/scenes/ContentViews/expansions/RelatedContentViewComponentsModal.js +2 -2
  460. data/webpack/scenes/ContentViews/helpers.js +3 -0
  461. data/webpack/scenes/Hosts/ChangeContentSource/helpers.js +5 -0
  462. data/webpack/scenes/RedHatRepositories/RedHatRepositoriesPage.js +3 -3
  463. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/EnabledRepository.js +2 -1
  464. data/webpack/scenes/RedHatRepositories/components/EnabledRepository/__tests__/EnabledRepository.test.js +2 -0
  465. data/webpack/scenes/RedHatRepositories/components/Search.js +4 -4
  466. data/webpack/scenes/SmartProxy/SmartProxyContentActions.js +9 -2
  467. data/webpack/scenes/SmartProxy/SmartProxyContentConstants.js +1 -1
  468. data/webpack/scenes/SmartProxy/SmartProxyContentSelectors.js +10 -1
  469. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnConfigurationConstants.js +3 -3
  470. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/CdnTypeForm.js +2 -0
  471. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/{AirGappedTypeForm.js → ExportSyncForm.js} +7 -6
  472. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/{UpstreamServerTypeForm.js → NetworkSyncForm.js} +15 -7
  473. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/{AirGappedTypeForm.test.js → ExportSyncForm.test.js} +4 -4
  474. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/__tests__/{UpstreamServerTypeForm.test.js → NetworkSyncForm.test.js} +8 -8
  475. data/webpack/scenes/Subscriptions/Manifest/CdnConfigurationTab/index.js +11 -11
  476. data/webpack/scenes/Subscriptions/SubscriptionConstants.js +1 -0
  477. data/webpack/scenes/Subscriptions/SubscriptionsPage.js +8 -7
  478. data/webpack/scenes/Tasks/TaskActions.js +6 -0
  479. data/webpack/scenes/Tasks/TaskSelectors.js +11 -0
  480. data/webpack/scenes/Tasks/helpers.js +60 -5
  481. data/webpack/utils/helpers.js +2 -0
  482. metadata +183 -38
  483. data/app/models/setting/content.rb +0 -201
  484. data/db/seeds.d/107-enable_dynflow.rb +0 -8
  485. data/webpack/components/extensions/HostDetails/Cards/ContentViewDetailsCard.js +0 -96
  486. data/webpack/components/extensions/HostDetails/Tabs/ModuleStreamsTab/__tests__/moduleStreamsTab.test.js +0 -108
  487. data/webpack/components/extensions/HostDetails/Tabs/TracesTab/EnableTracerEmptyState.js +0 -42
  488. data/webpack/scenes/ContentViews/Details/DetailsContainer.js +0 -36
@@ -9,8 +9,18 @@ import mockTraceData from './traces.fixtures.json';
9
9
  import mockResolveTraceTask from './resolveTraces.fixtures.json';
10
10
  import emptyTraceResults from './tracerEmptyTraceResults.fixtures.json';
11
11
  import mockJobInvocationStatus from './tracerEnableJobInvocation.fixtures.json';
12
+ import mockBookmarkData from './bookmarks.fixtures.json';
12
13
 
13
14
  const hostName = 'client.example.com';
15
+ const tracesBookmarks = foremanApi.getApiUrl('/bookmarks?search=controller%3Dkatello_host_tracers');
16
+
17
+ jest.mock('../../hostDetailsHelpers', () => ({
18
+ ...jest.requireActual('../../hostDetailsHelpers'),
19
+ userPermissionsFromHostDetails: () => ({
20
+ create_job_invocations: true,
21
+ }),
22
+ }));
23
+
14
24
  const tracerInstalledResponse = {
15
25
  id: 1,
16
26
  name: 'client.example.com',
@@ -42,18 +52,20 @@ const renderOptions = isTracerInstalled => ({ // sets initial Redux state
42
52
 
43
53
  const actionMenuToTheRightOf = node => node.nextElementSibling.firstElementChild.firstElementChild;
44
54
 
45
- const hostTraces = foremanApi.getApiUrl('/hosts/1/traces?per_page=20&page=1');
55
+ const hostTraces = foremanApi.getApiUrl('/hosts/1/traces');
46
56
  const autocompleteUrl = '/hosts/1/traces/auto_complete_search';
47
57
  const jobInvocations = foremanApi.getApiUrl('/job_invocations');
48
58
 
49
59
  let firstTrace;
50
60
  let searchDelayScope;
51
61
  let autoSearchScope;
62
+ let bookmarkScope;
52
63
 
53
64
  describe('With tracer installed', () => {
54
65
  beforeEach(() => {
55
66
  const { results } = mockTraceData;
56
67
  [firstTrace] = results;
68
+ bookmarkScope = nockInstance.get(tracesBookmarks).reply(200, mockBookmarkData);
57
69
  searchDelayScope = mockSetting(nockInstance, 'autosearch_delay', 0);
58
70
  autoSearchScope = mockSetting(nockInstance, 'autosearch_while_typing');
59
71
  });
@@ -61,6 +73,7 @@ describe('With tracer installed', () => {
61
73
  afterEach(() => {
62
74
  assertNockRequest(searchDelayScope);
63
75
  assertNockRequest(autoSearchScope);
76
+ assertNockRequest(bookmarkScope);
64
77
  nock.cleanAll();
65
78
  });
66
79
 
@@ -71,6 +84,7 @@ describe('With tracer installed', () => {
71
84
  // return tracedata results when we look for traces
72
85
  const scope = nockInstance
73
86
  .get(hostTraces)
87
+ .query(true)
74
88
  .reply(200, mockTraceData);
75
89
 
76
90
 
@@ -89,13 +103,14 @@ describe('With tracer installed', () => {
89
103
 
90
104
  const scope = nockInstance
91
105
  .get(hostTraces)
106
+ .query(true)
92
107
  .reply(200, emptyTraceResults);
93
108
 
94
109
 
95
110
  const { queryByText } = renderWithRedux(<TracesTab />, renderOptions(true));
96
111
 
97
112
  // Assert that there are not any traces showing on the screen.
98
- await patientlyWaitFor(() => expect(queryByText('This host currently does not have traces.')).toBeInTheDocument());
113
+ await patientlyWaitFor(() => expect(queryByText('No applications to restart')).toBeInTheDocument());
99
114
  // Assert request was made and completed, see helper function
100
115
  assertNockRequest(autocompleteScope);
101
116
  assertNockRequest(scope, done);
@@ -107,7 +122,7 @@ describe('With tracer installed', () => {
107
122
 
108
123
  const scope = nockInstance
109
124
  .get(hostTraces)
110
- .times(2)
125
+ .query(true)
111
126
  .reply(200, mockTraceData);
112
127
  const resolveTracesScope = nockInstance
113
128
  .post(jobInvocations)
@@ -130,7 +145,7 @@ describe('With tracer installed', () => {
130
145
  const restartAppButton = getByText('Restart app');
131
146
  // wait 50ms so that the button is enabled
132
147
  await waitFor(() => {
133
- expect(getByText('Restart app')).not.toBeDisabled();
148
+ expect(restartAppButton.parentElement).not.toHaveClass('pf-m-disabled');
134
149
  restartAppButton.click();
135
150
  });
136
151
 
@@ -146,7 +161,7 @@ describe('With tracer installed', () => {
146
161
 
147
162
  const scope = nockInstance
148
163
  .get(hostTraces)
149
- .times(2)
164
+ .query(true)
150
165
  .reply(200, mockTraceData);
151
166
  const resolveTracesScope = nockInstance
152
167
  .post(jobInvocations)
@@ -183,7 +198,7 @@ describe('With tracer installed', () => {
183
198
  const thirdTrace = mockTraceData.results[2];
184
199
  const scope = nockInstance
185
200
  .get(hostTraces)
186
- .times(2)
201
+ .query(true)
187
202
  .reply(200, mockTraceData);
188
203
  const jobInvocationBody = ({ job_invocation: { inputs } }) =>
189
204
  inputs[TRACES_SEARCH_QUERY] === `id !^ (${firstTrace.id},${thirdTrace.id})`;
@@ -225,6 +240,7 @@ describe('With tracer installed', () => {
225
240
 
226
241
  const scope = nockInstance
227
242
  .get(hostTraces)
243
+ .query(true)
228
244
  .reply(200, mockTraceData);
229
245
  const resolveTracesScope = nockInstance
230
246
  .post(jobInvocations)
@@ -260,6 +276,7 @@ describe('With tracer installed', () => {
260
276
  const autocompleteScope = mockForemanAutocomplete(nockInstance, autocompleteUrl);
261
277
  const scope = nockInstance
262
278
  .get(hostTraces)
279
+ .query(true)
263
280
  .reply(200, mockTraceData);
264
281
 
265
282
  const { getByText } = renderWithRedux(
@@ -294,6 +311,7 @@ describe('With tracer installed', () => {
294
311
  const feature = REX_FEATURES.KATELLO_HOST_TRACER_RESOLVE;
295
312
  const scope = nockInstance
296
313
  .get(hostTraces)
314
+ .query(true)
297
315
  .reply(200, mockTraceData);
298
316
 
299
317
  const { getByLabelText, queryByText } = renderWithRedux(
@@ -336,6 +354,7 @@ describe('With tracer installed', () => {
336
354
 
337
355
  const scope = nockInstance
338
356
  .get(hostTraces)
357
+ .query(true)
339
358
  .reply(200, mockTraceData);
340
359
 
341
360
  const { getByLabelText } = renderWithRedux(
@@ -52,3 +52,9 @@ export const errataInstallUrl = ({ hostname, search }) => createJob({
52
52
  feature: REX_FEATURES.KATELLO_HOST_ERRATA_INSTALL_BY_SEARCH,
53
53
  inputs: { [ERRATA_SEARCH_QUERY]: search },
54
54
  });
55
+
56
+ export const katelloModuleStreamActionUrl = ({ hostname, action, moduleSpec }) => createJob({
57
+ hostname,
58
+ feature: REX_FEATURES.KATELLO_HOST_MODULE_STREAM_ACTION,
59
+ inputs: { action, module_spec: moduleSpec },
60
+ });
@@ -25,4 +25,22 @@ export const hostIsNotRegistered = ({ hostDetails }) => {
25
25
 
26
26
  export const hostIsRegistered = ({ hostDetails }) => !hostIsNotRegistered({ hostDetails });
27
27
 
28
+ export const userPermissionsFromHostDetails = ({ hostDetails }) => {
29
+ const {
30
+ permissions: hostPermissions,
31
+ content_facet_attributes: cfAttributes = {},
32
+ } = hostDetails;
33
+ return { ...hostPermissions, ...cfAttributes?.permissions };
34
+ };
35
+
36
+ // requiredPermissions is an array
37
+ // userPermissions is an object, e.g. { view_hosts: true }
38
+ export const hasRequiredPermissions = (requiredPermissions = [], userPermissions) => {
39
+ const permittedActions = Object.keys(userPermissions).filter(key => userPermissions[key]);
40
+ return requiredPermissions.every(permission => permittedActions.includes(permission));
41
+ };
42
+
43
+ export const missingRequiredPermissions = (requiredPermissions = [], userPermissions) =>
44
+ !hasRequiredPermissions(requiredPermissions, userPermissions);
45
+
28
46
  export default defaultRemoteActionMethod;
@@ -15,6 +15,7 @@ import Content from '../../scenes/Content';
15
15
  import ContentDetails from '../../scenes/Content/Details';
16
16
  import withHeader from './withHeaders';
17
17
  import ChangeContentSource from '../../scenes/Hosts/ChangeContentSource';
18
+ import AlternateContentSource from '../../scenes/AlternateContentSources';
18
19
 
19
20
  // eslint-disable-next-line import/prefer-default-export
20
21
  export const links = [
@@ -80,4 +81,8 @@ export const links = [
80
81
  path: 'change_host_content_source',
81
82
  component: WithOrganization(withHeader(ChangeContentSource, { title: __('Change host content source') })),
82
83
  },
84
+ {
85
+ path: 'labs/alternate_content_sources',
86
+ component: WithOrganization(withHeader(AlternateContentSource, { title: __('Alternate Content Sources') })),
87
+ },
83
88
  ];
@@ -6,31 +6,54 @@ import { translate as __ } from 'foremanReact/common/I18n';
6
6
  import SystemStatuses from './components/extensions/about';
7
7
  import RegistrationCommands from './components/extensions/RegistrationCommands';
8
8
  import ContentTab from './components/extensions/HostDetails/Tabs/ContentTab';
9
- import ContentViewDetailsCard from './components/extensions/HostDetails/Cards/ContentViewDetailsCard';
9
+ import ContentViewDetailsCard from './components/extensions/HostDetails/Cards/ContentViewDetailsCard/ContentViewDetailsCard';
10
10
  import ErrataOverviewCard from './components/extensions/HostDetails/Cards/ErrataOverviewCard';
11
+ import InstalledProductsCard from './components/extensions/HostDetails/DetailsTabCards/InstalledProductsCard';
12
+ import RegistrationCard from './components/extensions/HostDetails/DetailsTabCards/RegistrationCard';
11
13
 
12
- // import SubscriptionTab from './components/extensions/HostDetails/Tabs/SubscriptionTab';
13
- import RepositorySetsTab from './components/extensions/HostDetails/Tabs/RepositorySetsTab/RepositorySetsTab';
14
14
  import TracesTab from './components/extensions/HostDetails/Tabs/TracesTab/TracesTab.js';
15
15
  import extendReducer from './components/extensions/reducers';
16
16
  import rootReducer from './redux/reducers';
17
+ import HostCollectionsCard from './components/extensions/HostDetails/Cards/HostCollectionsCard/HostCollectionsCard';
17
18
  import { hostIsNotRegistered } from './components/extensions/HostDetails/hostDetailsHelpers';
19
+ import SystemPropertiesCardExtensions from './components/extensions/HostDetails/DetailsTabCards/SystemPropertiesCardExtensions';
20
+ import HostActionsBar from './components/extensions/HostDetails/ActionsBar';
21
+ import RecentCommunicationCardExtensions from './components/extensions/HostDetails/DetailsTabCards/RecentCommunicationCardExtensions';
18
22
 
19
23
  registerReducer('katelloExtends', extendReducer);
20
24
  registerReducer('katello', rootReducer);
21
25
 
22
26
  addGlobalFill('aboutFooterSlot', '[katello]AboutSystemStatuses', <SystemStatuses key="katello-system-statuses" />, 100);
23
27
  addGlobalFill('registrationAdvanced', '[katello]RegistrationCommands', <RegistrationCommands key="katello-reg" />, 100);
28
+
29
+ // Host details page tabs
24
30
  addGlobalFill('host-details-page-tabs', 'Content', <ContentTab key="content" />, 900, { title: __('Content'), hideTab: hostIsNotRegistered });
25
- /* eslint-disable max-len */
26
- // addGlobalFill('host-details-page-tabs', 'Subscription', <SubscriptionTab key="subscription" />, 100, { title: __('Subscription') });
27
31
  addGlobalFill('host-details-page-tabs', 'Traces', <TracesTab key="traces" />, 800, { title: __('Traces'), hideTab: hostIsNotRegistered });
28
- addGlobalFill('host-details-page-tabs', 'Repository sets', <RepositorySetsTab key="repository-sets" />, 700, { title: __('Repository sets'), hideTab: hostIsNotRegistered });
29
32
 
33
+ // Overview tab cards
30
34
  addGlobalFill(
31
- 'details-cards',
32
- 'Content View Details',
35
+ 'host-overview-cards',
36
+ 'Content view details',
33
37
  <ContentViewDetailsCard key="content-view-details" />,
34
38
  2000,
35
39
  );
36
- addGlobalFill('details-cards', 'Installable errata', <ErrataOverviewCard key="errata-overview" />, 1900);
40
+ addGlobalFill(
41
+ 'host-overview-cards',
42
+ 'Host collections',
43
+ <HostCollectionsCard key="host-collections-details" />,
44
+ 700,
45
+ );
46
+ addGlobalFill('host-overview-cards', 'Installable errata', <ErrataOverviewCard key="errata-overview" />, 1900);
47
+ addGlobalFill('recent-communication-card-item', 'Recent communication', <RecentCommunicationCardExtensions key="recent-communication" />, 3000);
48
+
49
+ // Details tab cards & card extensions
50
+ addGlobalFill('host-tab-details-cards', 'Installed products', <InstalledProductsCard key="installed-products" />, 100);
51
+ addGlobalFill('host-tab-details-cards', 'Registration details', <RegistrationCard key="registration-details" />, 200);
52
+ addGlobalFill('host-details-tab-properties-1', 'Subscription UUID', <SystemPropertiesCardExtensions key="subscription-uuid" />);
53
+
54
+ addGlobalFill(
55
+ 'host-details-kebab',
56
+ 'katello-host-details-kebab',
57
+ <HostActionsBar key="katello-host-details-kebab" />,
58
+ 100,
59
+ );
@@ -1,7 +1,11 @@
1
+ import nock from 'nock';
2
+
1
3
  // runs before each test to make sure console.error output will
2
4
  // fail a test (i.e. default PropType missing). Check the error
3
5
  // output and traceback for actual error.
6
+ const originalConsoleError = global.console.error;
4
7
  global.console.error = (error, stack) => {
8
+ originalConsoleError(error); // ensure error is printed to console
5
9
  /* eslint-disable-next-line no-console */
6
10
  if (stack) console.log(stack); // Prints out original stack trace
7
11
  throw new Error(error);
@@ -14,3 +18,12 @@ afterAll(() => {
14
18
  jest.resetModules();
15
19
  if (global.gc) global.gc();
16
20
  });
21
+
22
+ beforeEach(() => {
23
+ if (!nock.isActive()) { nock.activate(); }
24
+ });
25
+
26
+ afterEach(() => {
27
+ nock.restore();
28
+ });
29
+
@@ -44,7 +44,7 @@ export const createEnabledRepoParams = (extendedParams = {}) => {
44
44
 
45
45
  export const disableRepository = repository => async (dispatch) => {
46
46
  const {
47
- productId, contentId, arch, releasever,
47
+ productId, contentId, arch, releasever, id,
48
48
  } = repository;
49
49
 
50
50
  const repoData = {
@@ -52,6 +52,7 @@ export const disableRepository = repository => async (dispatch) => {
52
52
  product_id: productId,
53
53
  basearch: arch,
54
54
  releasever,
55
+ repository_id: id,
55
56
  };
56
57
  dispatch({ type: DISABLE_REPOSITORY_REQUEST, repository });
57
58
  const url = `/products/${productId}/repository_sets/${contentId}/disable`;
@@ -14,26 +14,31 @@ const recommendedRepositoriesRHEL = [
14
14
  'rhel-8-for-x86_64-baseos-kickstart',
15
15
  'rhel-8-for-x86_64-appstream-rpms',
16
16
  'rhel-8-for-x86_64-appstream-kickstart',
17
+ 'rhel-8-for-x86_64-baseos-eus-rpms',
18
+ 'rhel-8-for-x86_64-appstream-eus-rpms',
17
19
  'rhel-7-server-rpms',
18
20
  'rhel-7-server-optional-rpms',
19
21
  'rhel-7-server-extras-rpms',
20
- 'rhel-7-server-eus-rpms',
21
22
  'rhel-7-server-kickstart',
22
- 'rhel-6-server-els-rpms',
23
- 'rhel-6-server-kickstart',
24
23
  ];
25
24
 
26
25
  const recommendedRepositoriesSatTools = [
27
- 'satellite-tools-6.10-for-rhel-8-x86_64-rpms',
28
- 'rhel-7-server-satellite-tools-6.10-rpms',
29
- 'rhel-6-server-els-satellite-tools-6.10-rpms',
30
- 'rhel-7-server-satellite-maintenance-6-rpms',
26
+ 'satellite-client-6-for-rhel-9-x86_64-rpms',
27
+ 'satellite-client-6-for-rhel-8-x86_64-rpms',
28
+ 'rhel-7-server-satellite-client-6-rpms',
29
+ 'rhel-6-server-els-satellite-client-6-rpms',
31
30
  ];
32
31
 
33
32
  const recommendedRepositoriesMisc = [
34
33
  'rhel-server-rhscl-7-rpms',
35
- 'rhel-7-server-satellite-capsule-6.10-rpms',
34
+ 'rhel-7-server-satellite-capsule-6.11-rpms',
35
+ 'satellite-capsule-6.11-for-rhel-8-x86_64-rpms',
36
36
  'rhel-7-server-ansible-2.9-rpms',
37
+ 'ansible-2-for-rhel-8-x86_64-rpms',
38
+ 'rhel-7-server-satellite-maintenance-6.11-rpms',
39
+ 'rhel-7-server-satellite-utils-6.11-rpms',
40
+ 'satellite-maintenance-6.11-for-rhel-8-x86_64-rpms',
41
+ 'satellite-utils-6.11-for-rhel-8-x86_64-rpms',
37
42
  ];
38
43
 
39
44
  const recommendedRepositorySetLables = recommendedRepositoriesRHEL
@@ -0,0 +1,65 @@
1
+ import { API_OPERATIONS, APIActions, get, post } from 'foremanReact/redux/API';
2
+ import { translate as __ } from 'foremanReact/common/I18n';
3
+ import api, { orgId } from '../../services/api';
4
+ import ACS_KEY, { acsRefreshKey, CREATE_ACS_KEY, DELETE_ACS_KEY } from './ACSConstants';
5
+ import { getResponseErrorMsgs } from '../../utils/helpers';
6
+ import { renderTaskStartedToast } from '../Tasks/helpers';
7
+
8
+ const acsSuccessToast = (response) => {
9
+ const { data: { name } } = response;
10
+ return __(`Alternate content source ${name} created`);
11
+ };
12
+
13
+ export const acsErrorToast = (error) => {
14
+ const message = getResponseErrorMsgs(error.response);
15
+ return message;
16
+ };
17
+
18
+ export const createACSParams = (extraParams) => {
19
+ const getParams = {
20
+ organization_id: orgId(),
21
+ ...extraParams,
22
+ };
23
+ return getParams;
24
+ };
25
+
26
+ const getAlternateContentSources = (extraParams, id = '') => get({
27
+ type: API_OPERATIONS.GET,
28
+ key: ACS_KEY + id,
29
+ url: api.getApiUrl('/alternate_content_sources'),
30
+ params: createACSParams(extraParams),
31
+ });
32
+
33
+ export const createACS = params => post({
34
+ type: API_OPERATIONS.POST,
35
+ key: CREATE_ACS_KEY,
36
+ url: api.getApiUrl('/alternate_content_sources'),
37
+ params,
38
+ successToast: response => acsSuccessToast(response),
39
+ errorToast: error => acsErrorToast(error),
40
+ });
41
+
42
+ export const deleteACS = (acsId, handleSuccess) => APIActions.delete({
43
+ type: API_OPERATIONS.DELETE,
44
+ key: DELETE_ACS_KEY,
45
+ url: api.getApiUrl(`/alternate_content_sources/${acsId}`),
46
+ handleSuccess,
47
+ successToast: () => __('Alternate content source deleted'),
48
+ errorToast: error => __(`Something went wrong while deleting this alternate content source! ${getResponseErrorMsgs(error.response)}`),
49
+ });
50
+
51
+ export const refreshACS = (acsId, handleSuccess) => post({
52
+ type: API_OPERATIONS.POST,
53
+ key: acsRefreshKey(acsId),
54
+ url: api.getApiUrl(`/alternate_content_sources/${acsId}/refresh`),
55
+ params: { id: acsId },
56
+ handleSuccess: (response) => {
57
+ if (handleSuccess) handleSuccess();
58
+ return renderTaskStartedToast(response.data);
59
+ },
60
+ errorToast: error => __(`Something went wrong while refreshing this alternate content source! ${getResponseErrorMsgs(error.response)}`),
61
+ });
62
+ export default getAlternateContentSources;
63
+
64
+ // acs = Katello::AlternateContentSource.new
65
+ // (name:"acs", label:"acs", alternate_content_source_type:"custom", base_url:"abcdef")
@@ -0,0 +1,18 @@
1
+ import { translate as __ } from 'foremanReact/common/I18n';
2
+
3
+ const ACS_KEY = 'ACS';
4
+ export const CREATE_ACS_KEY = 'ACS_CREATE';
5
+ export const DELETE_ACS_KEY = 'ACS_DELETE';
6
+ export const SMART_PROXY_KEY = 'SMART_PROXY';
7
+ export const SSL_CERTS = 'SSL_CERTS';
8
+ export const acsRefreshKey = acsId => `${ACS_KEY}_REFRESH_${acsId}`;
9
+
10
+ export const YUM = __('Yum');
11
+ export const FILE = __('File');
12
+
13
+ export const ACS_TYPE_TRANSLATIONS_ENUM = {
14
+ [YUM]: 'yum',
15
+ [FILE]: 'file',
16
+ };
17
+
18
+ export default ACS_KEY;
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import { translate as __ } from 'foremanReact/common/I18n';
3
+ import { Grid, GridItem, TextContent, Text, TextVariants } from '@patternfly/react-core';
4
+ import ACSTable from './MainTable/ACSTable';
5
+
6
+ const ACSIndexPage = () => (
7
+ <>
8
+ <Grid className="margin-24">
9
+ <GridItem span={12}>
10
+ <TextContent>
11
+ <Text component={TextVariants.h1}>{__('Alternate content sources')}</Text>
12
+ </TextContent>
13
+ </GridItem>
14
+ </Grid>
15
+ <Grid>
16
+ <GridItem span={12}>
17
+ <ACSTable />
18
+ </GridItem>
19
+ </Grid>
20
+ </>
21
+ );
22
+
23
+ export default ACSIndexPage;
@@ -0,0 +1,24 @@
1
+ import {
2
+ selectAPIStatus,
3
+ selectAPIError,
4
+ selectAPIResponse,
5
+ } from 'foremanReact/redux/API/APISelectors';
6
+ import { STATUS } from 'foremanReact/constants';
7
+ import ACS_KEY, { CREATE_ACS_KEY } from './ACSConstants';
8
+
9
+ export const selectAlternateContentSources = (state, index = '') => selectAPIResponse(state, ACS_KEY + index) || {};
10
+
11
+ export const selectAlternateContentSourcesStatus = (state, index = '') =>
12
+ selectAPIStatus(state, ACS_KEY + index) || STATUS.PENDING;
13
+
14
+ export const selectAlternateContentSourcesError = (state, index = '') =>
15
+ selectAPIError(state, ACS_KEY + index);
16
+
17
+ export const selectCreateACS = state =>
18
+ selectAPIResponse(state, CREATE_ACS_KEY) || {};
19
+
20
+ export const selectCreateACSStatus = state =>
21
+ selectAPIStatus(state, CREATE_ACS_KEY) || STATUS.PENDING;
22
+
23
+ export const selectCreateACSError = state =>
24
+ selectAPIError(state, CREATE_ACS_KEY);
@@ -0,0 +1,4 @@
1
+ import { createContext } from 'react';
2
+
3
+ const ACSCreateContext = createContext({});
4
+ export default ACSCreateContext;
@@ -0,0 +1,160 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { useDispatch } from 'react-redux';
3
+ import PropTypes from 'prop-types';
4
+ import { Wizard } from '@patternfly/react-core';
5
+ import { translate as __ } from 'foremanReact/common/I18n';
6
+ import ACSCreateContext from './ACSCreateContext';
7
+ import SelectSource from './Steps/SelectSource';
8
+ import NameACS from './Steps/NameACS';
9
+ import AcsUrlPaths from './Steps/AcsUrlPaths';
10
+ import ACSCredentials from './Steps/ACSCredentials';
11
+ import ACSSmartProxies from './Steps/ACSSmartProxies';
12
+ import ACSReview from './Steps/ACSReview';
13
+ import ACSCreateFinish from './Steps/ACSCreateFinish';
14
+ import { getContentCredentials } from '../../ContentCredentials/ContentCredentialActions';
15
+ import { getSmartProxies } from '../../SmartProxy/SmartProxyContentActions';
16
+ import { CONTENT_CREDENTIAL_CERT_TYPE } from '../../ContentCredentials/ContentCredentialConstants';
17
+
18
+ const ACSCreateWizard = ({ show, setIsOpen }) => {
19
+ const [acsType, setAcsType] = useState(null);
20
+ const [contentType, setContentType] = useState('yum');
21
+ const [name, setName] = useState('');
22
+ const [description, setDescription] = useState('');
23
+ const [smartProxies, setSmartProxies] = useState([]);
24
+ const [url, setUrl] = useState('');
25
+ const [subpaths, setSubpaths] = useState('');
26
+ const [verifySSL, setVerifySSL] = useState(false);
27
+ const [authentication, setAuthentication] = useState('');
28
+ const [sslCert, setSslCert] = useState('');
29
+ const [sslKey, setSslKey] = useState('');
30
+ const [sslCertName, setSslCertName] = useState('');
31
+ const [sslKeyName, setSslKeyName] = useState('');
32
+ const [username, setUsername] = useState('');
33
+ const [password, setPassword] = useState('');
34
+ const [caCert, setCACert] = useState('');
35
+ const [caCertName, setCACertName] = useState('');
36
+ const [currentStep, setCurrentStep] = useState(1);
37
+ const dispatch = useDispatch();
38
+
39
+ useEffect(
40
+ () => {
41
+ dispatch(getContentCredentials({ content_type: CONTENT_CREDENTIAL_CERT_TYPE }));
42
+ dispatch(getSmartProxies());
43
+ },
44
+ [dispatch],
45
+ );
46
+
47
+ const steps = [
48
+ {
49
+ id: 1,
50
+ name: __('Select source type'),
51
+ component: <SelectSource />,
52
+ enableNext: acsType && contentType,
53
+ },
54
+ {
55
+ id: 2,
56
+ name: __('Name source'),
57
+ component: <NameACS />,
58
+ enableNext: name !== '',
59
+ },
60
+ {
61
+ id: 3,
62
+ name: __('Select smart proxy'),
63
+ component: <ACSSmartProxies />,
64
+ enableNext: smartProxies.length,
65
+ },
66
+ {
67
+ id: 4,
68
+ name: __('URL and paths'),
69
+ component: <AcsUrlPaths />,
70
+ enableNext: url !== '' && subpaths !== '',
71
+ },
72
+ {
73
+ id: 5,
74
+ name: __('Credentials'),
75
+ component: <ACSCredentials />,
76
+ },
77
+ {
78
+ id: 6,
79
+ name: __('Review details'),
80
+ component: <ACSReview />,
81
+ nextButtonText: __('Add'),
82
+ },
83
+ {
84
+ id: 7,
85
+ name: __('Create ACS'),
86
+ component: <ACSCreateFinish />,
87
+ isFinishedStep: true,
88
+ },
89
+
90
+ ];
91
+
92
+ return (
93
+ <ACSCreateContext.Provider value={{
94
+ show,
95
+ setIsOpen,
96
+ currentStep,
97
+ setCurrentStep,
98
+ acsType,
99
+ setAcsType,
100
+ contentType,
101
+ setContentType,
102
+ name,
103
+ setName,
104
+ description,
105
+ setDescription,
106
+ smartProxies,
107
+ setSmartProxies,
108
+ url,
109
+ setUrl,
110
+ subpaths,
111
+ setSubpaths,
112
+ verifySSL,
113
+ setVerifySSL,
114
+ authentication,
115
+ setAuthentication,
116
+ sslCert,
117
+ setSslCert,
118
+ sslKey,
119
+ setSslKey,
120
+ sslCertName,
121
+ setSslCertName,
122
+ sslKeyName,
123
+ setSslKeyName,
124
+ username,
125
+ setUsername,
126
+ password,
127
+ setPassword,
128
+ caCert,
129
+ setCACert,
130
+ caCertName,
131
+ setCACertName,
132
+ }}
133
+ >
134
+ <Wizard
135
+ title={__('Add an alternate content source')}
136
+ steps={steps}
137
+ startAtStep={currentStep}
138
+ onGoToStep={({ id }) => setCurrentStep(id)}
139
+ onNext={({ id }) => setCurrentStep(id)}
140
+ onBack={({ id }) => setCurrentStep(id)}
141
+ onClose={() => {
142
+ setIsOpen(false);
143
+ }}
144
+ isOpen={show}
145
+ />
146
+ </ACSCreateContext.Provider>
147
+ );
148
+ };
149
+
150
+ ACSCreateWizard.propTypes = {
151
+ show: PropTypes.bool,
152
+ setIsOpen: PropTypes.func,
153
+ };
154
+
155
+ ACSCreateWizard.defaultProps = {
156
+ show: false,
157
+ setIsOpen: null,
158
+ };
159
+
160
+ export default ACSCreateWizard;