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
@@ -1,62 +1,66 @@
1
1
  import React, { useState, useEffect } from 'react';
2
2
  import { useDispatch, useSelector } from 'react-redux';
3
- import useDeepCompareEffect from 'use-deep-compare-effect';
4
3
  import { InProgressIcon } from '@patternfly/react-icons';
5
4
  import PropTypes from 'prop-types';
6
- import { Progress,
5
+ import {
6
+ Progress,
7
7
  ProgressSize,
8
8
  ProgressMeasureLocation,
9
- ProgressVariant } from '@patternfly/react-core';
9
+ ProgressVariant,
10
+ } from '@patternfly/react-core';
10
11
  import { STATUS } from 'foremanReact/constants';
11
- import { stopPollingTask, toastTaskFinished } from '../../../Tasks/TaskActions';
12
+ import { startPollingTask, toastTaskFinished } from '../../../Tasks/TaskActions';
12
13
  import { selectTaskPoll, selectTaskPollStatus } from '../../Details/ContentViewDetailSelectors';
14
+ import { getContentViewVersions } from '../../Details/ContentViewDetailActions';
15
+ import { cvVersionTaskPollingKey } from '../../ContentViewsConstants';
16
+ import { selectIsPollingTask } from '../../../Tasks/TaskSelectors';
13
17
 
14
- const TaskPresenter = ({ activeHistory, setPollingFinished }) => {
18
+ const TaskPresenter = ({ activeHistory, cvId, allowCallback }) => {
15
19
  const { task } = activeHistory;
16
20
  const dispatch = useDispatch();
17
- const [polling, setPolling] = useState(true);
18
- const [taskErrored, setTaskErrored] = useState(task.result === 'error');
21
+ const [taskPausedOrErrored, setTaskPausedOrErrored] =
22
+ useState(task.result === 'error' || task.result === 'paused');
23
+ const [resolved, setResolved] = useState(false);
24
+ const POLLING_TASK_KEY = cvVersionTaskPollingKey(cvId);
25
+ const isTaskRunning = useSelector(state =>
26
+ selectIsPollingTask(state, POLLING_TASK_KEY));
27
+
19
28
  const pollResponse = useSelector(state =>
20
- selectTaskPoll(state, task.id));
29
+ selectTaskPoll(state, POLLING_TASK_KEY));
21
30
  const pollResponseStatus = useSelector(state =>
22
- selectTaskPollStatus(state, task.id));
23
- const loading = pollResponseStatus === STATUS.PENDING;
31
+ selectTaskPollStatus(state, POLLING_TASK_KEY));
24
32
 
25
- const progressCompleted = () => (
26
- pollResponse.progress ?
27
- pollResponse.progress * 100 :
28
- task.progress * 100
29
- );
30
33
 
31
34
  useEffect(() => {
32
- if (!polling) {
33
- const { id } = task;
34
- dispatch(stopPollingTask(id));
35
- dispatch(toastTaskFinished(pollResponse));
36
- setPollingFinished(true); // Use this boolean as activeListener in referring page table
35
+ if (allowCallback && !isTaskRunning && !taskPausedOrErrored) {
36
+ dispatch(startPollingTask(POLLING_TASK_KEY, task));
37
37
  }
38
- }, [polling, dispatch, setPollingFinished, pollResponse, task]);
38
+ }, [POLLING_TASK_KEY, allowCallback, dispatch, isTaskRunning, task, taskPausedOrErrored]);
39
39
 
40
- useDeepCompareEffect(() => {
41
- if (!loading && polling) {
42
- const { state, result } = pollResponse;
43
- if ((state === 'paused' || result === 'error') && !taskErrored) {
44
- setTaskErrored(true);
45
- setPolling(false);
46
- } else if (state === 'stopped' && result === 'success') {
47
- setPolling(false);
48
- }
49
- }
50
- }, [pollResponse, loading, taskErrored, setTaskErrored, polling, setPolling]);
40
+ const { state, result } = pollResponse;
41
+
42
+ if ((state === 'paused' || result === 'error' || pollResponseStatus === STATUS.ERROR)) {
43
+ setTaskPausedOrErrored(true);
44
+ }
45
+
46
+ if (allowCallback && !resolved && state === 'stopped' && result === 'success') {
47
+ setResolved(true);
48
+ dispatch(toastTaskFinished(pollResponse));
49
+ dispatch(getContentViewVersions(cvId));
50
+ }
51
+
52
+ const progressCompleted = pollResponse.progress ?
53
+ pollResponse.progress * 100 :
54
+ task.progress * 100;
51
55
 
52
56
  if (pollResponse) {
53
57
  return (
54
58
  <a href={`/foreman_tasks/tasks/${task.id}`} target="_blank" rel="noreferrer">
55
59
  <Progress
56
60
  aria-label="task_presenter"
57
- value={progressCompleted()}
61
+ value={progressCompleted}
58
62
  measureLocation={ProgressMeasureLocation.inside}
59
- variant={taskErrored ? ProgressVariant.danger : ProgressVariant.default}
63
+ variant={taskPausedOrErrored ? ProgressVariant.danger : ProgressVariant.default}
60
64
  size={ProgressSize.sm}
61
65
  />
62
66
  </a>
@@ -78,7 +82,8 @@ TaskPresenter.propTypes = {
78
82
  progress: PropTypes.number.isRequired,
79
83
  }).isRequired,
80
84
  }).isRequired,
81
- setPollingFinished: PropTypes.func.isRequired,
85
+ cvId: PropTypes.number.isRequired,
86
+ allowCallback: PropTypes.bool.isRequired,
82
87
  };
83
88
 
84
89
 
@@ -30,7 +30,7 @@ const RelatedCompositeContentViewsModal = ({
30
30
  const columns = ['Name'];
31
31
  return (
32
32
  <>
33
- <Button aria-label={`button_${cvId}`} variant="link" isInline onClick={handleModalToggle}>
33
+ <Button ouiaId="related-cv-count" aria-label={`button_${cvId}`} variant="link" isInline onClick={handleModalToggle}>
34
34
  {relatedCVCount}
35
35
  </Button>
36
36
  <Modal
@@ -43,7 +43,7 @@ const RelatedContentViewsModal = ({ cvName, cvId, relatedCVCount }) => {
43
43
 
44
44
  return (
45
45
  <>
46
- <Button aria-label={`button_${cvId}`} variant="link" isInline onClick={handleModalToggle}>
46
+ <Button ouiaId="related-cv-count" aria-label={`button_${cvId}`} variant="link" isInline onClick={handleModalToggle}>
47
47
  {relatedCVCount}
48
48
  </Button>
49
49
  <Grid>
@@ -58,7 +58,6 @@ const RelatedContentViewsModal = ({ cvName, cvId, relatedCVCount }) => {
58
58
  }}
59
59
  appendTo={document.body}
60
60
  >
61
-
62
61
  <TableWrapper
63
62
  {...{
64
63
  metadata,
@@ -67,6 +66,7 @@ const RelatedContentViewsModal = ({ cvName, cvId, relatedCVCount }) => {
67
66
  error,
68
67
  status,
69
68
  }}
69
+ ouiaId="related-content-view-components-table"
70
70
  fetchItems={useCallback(params => getContentViewComponents(cvId, params, 'Added'), [cvId])}
71
71
  variant={TableVariant.compact}
72
72
  autocompleteEndpoint="/content_views/auto_complete_search"
@@ -11,4 +11,7 @@ export const autoPublishHelpText = __('Automatically publish a new version of th
11
11
  export const importOnlyHelpText = __('Designate whether this content view is for importing from an upstream server. ' +
12
12
  'Import-only content views cannot be published directly.');
13
13
 
14
+ export const generatedContentViewHelpText = __('This content view is generated for importing or exporting content view versions. ' +
15
+ 'Generated content views cannot be published directly and can only be updated via import/export process.');
16
+
14
17
  export const hasPermission = (permissions, perm) => permissions && permissions[perm];
@@ -1,6 +1,11 @@
1
1
  import { STATUS } from 'foremanReact/constants';
2
2
 
3
3
  export const getHostIds = () => {
4
+ const url = new URL(window.location);
5
+ const hostId = url.searchParams.get('host_id');
6
+
7
+ if (hostId) return [hostId];
8
+
4
9
  const cookie = document.cookie.split('; ')
5
10
  .find(row => row.startsWith('_ForemanSelectedhosts'));
6
11
  const params = new URLSearchParams(cookie);
@@ -16,7 +16,7 @@ import SearchBar from './components/SearchBar';
16
16
  import RecommendedRepositorySetsToggler from './components/RecommendedRepositorySetsToggler';
17
17
  import { getSetsComponent, getEnabledComponent } from './helpers';
18
18
  import api from '../../services/api';
19
- import { AIRGAPPED } from '../Subscriptions/Manifest/CdnConfigurationTab/CdnConfigurationConstants';
19
+ import { EXPORT_SYNC } from '../Subscriptions/Manifest/CdnConfigurationTab/CdnConfigurationConstants';
20
20
 
21
21
  class RedHatRepositoriesPage extends Component {
22
22
  componentDidMount() {
@@ -42,7 +42,7 @@ class RedHatRepositoriesPage extends Component {
42
42
  if (!(organization?.cdn_configuration)) {
43
43
  return <Skeleton />;
44
44
  }
45
- if (organization.cdn_configuration.type === AIRGAPPED) {
45
+ if (organization.cdn_configuration.type === EXPORT_SYNC) {
46
46
  return (
47
47
  <Grid id="redhatRepositoriesPage" bsClass="container-fluid">
48
48
  <h1>{__('Red Hat Repositories')}</h1>
@@ -52,7 +52,7 @@ class RedHatRepositoriesPage extends Component {
52
52
  variant="info"
53
53
  className="repo-sets-alert"
54
54
  isInline
55
- title={__('CDN configuration is set to Air-gapped (disconnected). Repository enablement/disablement is not permitted on this page.')}
55
+ title={__('CDN configuration is set to Export Sync (disconnected). Repository enablement/disablement is not permitted on this page.')}
56
56
  />
57
57
  </Col>
58
58
  </Row>
@@ -19,10 +19,11 @@ class EnabledRepository extends Component {
19
19
 
20
20
  repoForAction = () => {
21
21
  const {
22
- productId, contentId, arch, releasever, name, type,
22
+ id, productId, contentId, arch, releasever, name, type,
23
23
  } = this.props;
24
24
 
25
25
  return {
26
+ id,
26
27
  contentId,
27
28
  productId,
28
29
  name,
@@ -60,6 +60,7 @@ describe('Enabled Repositories Component', () => {
60
60
  type: 'foo',
61
61
  arch: 'foo',
62
62
  releasever: '1.1.1',
63
+ id: 1,
63
64
  };
64
65
  expect(instance.repoForAction()).toEqual(expected);
65
66
  });
@@ -109,6 +110,7 @@ describe('Enabled Repositories Component', () => {
109
110
  type: 'foo',
110
111
  arch: 'foo',
111
112
  releasever: '1.1.1',
113
+ id: 1,
112
114
  };
113
115
  instance.reloadAndNotify = jest.fn();
114
116
  await instance.disableRepository();
@@ -2,7 +2,7 @@
2
2
  import React, { Component } from 'react';
3
3
  import { DropdownButton, MenuItem } from 'patternfly-react';
4
4
  import PropTypes from 'prop-types';
5
-
5
+ import { translate as __ } from 'foremanReact/common/I18n';
6
6
  import '../index.scss';
7
7
  import Search from '../../../components/Search/index';
8
8
  import { orgId } from '../../../services/api';
@@ -14,17 +14,17 @@ class RepositorySearch extends Component {
14
14
  {
15
15
  key: 'available',
16
16
  endpoint: 'repository_sets',
17
- title: 'Available',
17
+ title: __('Available'),
18
18
  },
19
19
  {
20
20
  key: 'enabled',
21
21
  endpoint: 'enabled_repositories',
22
- title: 'Enabled',
22
+ title: __('Enabled'),
23
23
  },
24
24
  {
25
25
  key: 'both',
26
26
  endpoint: false,
27
- title: 'Both',
27
+ title: __('Both'),
28
28
  },
29
29
  ];
30
30
  this.state = { searchList: this.dropDownItems[0] };
@@ -1,6 +1,6 @@
1
1
  import { API_OPERATIONS, get } from 'foremanReact/redux/API';
2
- import api, { orgId } from '../../services/api';
3
- import SMART_PROXY_CONTENT_KEY from './SmartProxyContentConstants';
2
+ import api, { foremanApi, orgId } from '../../services/api';
3
+ import SMART_PROXY_CONTENT_KEY, { SMART_PROXY_KEY } from './SmartProxyContentConstants';
4
4
 
5
5
  const getSmartProxyContent = ({ smartProxyId }) => get({
6
6
  type: API_OPERATIONS.GET,
@@ -8,4 +8,11 @@ const getSmartProxyContent = ({ smartProxyId }) => get({
8
8
  url: api.getApiUrl(`/capsules/${smartProxyId}/content/sync?${orgId()}`),
9
9
  });
10
10
 
11
+ export const getSmartProxies = () => get({
12
+ type: API_OPERATIONS.GET,
13
+ key: SMART_PROXY_KEY,
14
+ url: foremanApi.getApiUrl('/smart_proxies'),
15
+ params: { organization_id: orgId() },
16
+ });
17
+
11
18
  export default getSmartProxyContent;
@@ -1,3 +1,3 @@
1
1
  const SMART_PROXY_CONTENT_KEY = 'SMART_PROXY_CONTENT';
2
-
2
+ export const SMART_PROXY_KEY = 'SMART_PROXY';
3
3
  export default SMART_PROXY_CONTENT_KEY;
@@ -4,7 +4,7 @@ import {
4
4
  selectAPIResponse,
5
5
  } from 'foremanReact/redux/API/APISelectors';
6
6
  import { STATUS } from 'foremanReact/constants';
7
- import SMART_PROXY_CONTENT_KEY from './SmartProxyContentConstants';
7
+ import SMART_PROXY_CONTENT_KEY, { SMART_PROXY_KEY } from './SmartProxyContentConstants';
8
8
 
9
9
  export const selectSmartProxyContent = state =>
10
10
  selectAPIResponse(state, SMART_PROXY_CONTENT_KEY) || {};
@@ -14,3 +14,12 @@ export const selectSmartProxyContentStatus = state =>
14
14
 
15
15
  export const selectSmartProxyContentError = state =>
16
16
  selectAPIError(state, SMART_PROXY_CONTENT_KEY);
17
+
18
+ export const selectSmartProxy = state =>
19
+ selectAPIResponse(state, SMART_PROXY_KEY) || {};
20
+
21
+ export const selectSmartProxyStatus = state =>
22
+ selectAPIStatus(state, SMART_PROXY_KEY) || STATUS.PENDING;
23
+
24
+ export const selectSmartProxyError = state =>
25
+ selectAPIError(state, SMART_PROXY_KEY);
@@ -2,11 +2,11 @@ import { translate as __ } from 'foremanReact/common/I18n';
2
2
 
3
3
  export const CDN_URL = 'https://cdn.redhat.com';
4
4
 
5
- export const [CDN, UPSTREAM_SERVER, AIRGAPPED] = ['redhat_cdn', 'upstream_server', 'airgapped'];
5
+ export const [CDN, NETWORK_SYNC, EXPORT_SYNC] = ['redhat_cdn', 'network_sync', 'export_sync'];
6
6
  export const CDN_CONFIGURATION_TYPES = {
7
7
  redhat_cdn: __('Red Hat CDN'),
8
- upstream_server: __('Upstream Foreman server'),
9
- airgapped: __('Air-gapped'),
8
+ network_sync: __('Network Sync'),
9
+ export_sync: __('Export Sync'),
10
10
  };
11
11
 
12
12
  export const DEFAULT_ORGANIZATION_LABEL = 'Default_Organization';
@@ -68,6 +68,7 @@ const CdnTypeForm = ({ showUpdate, onUpdate, url }) => {
68
68
  </div>
69
69
  <FormGroup label={__('URL')} isRequired>
70
70
  <TextInput
71
+ ouiaId="cdn-configuration-url-input"
71
72
  aria-label="cdn-url"
72
73
  type="text"
73
74
  value={cdnUrl}
@@ -78,6 +79,7 @@ const CdnTypeForm = ({ showUpdate, onUpdate, url }) => {
78
79
 
79
80
  <ActionGroup>
80
81
  <Button
82
+ ouiaId="cdn-configuration-update-button"
81
83
  aria-label="update-cdn-configuration"
82
84
  variant="secondary"
83
85
  onClick={performUpdate}
@@ -10,7 +10,7 @@ import {
10
10
  import { translate as __ } from 'foremanReact/common/I18n';
11
11
  import { noop } from 'foremanReact/common/helpers';
12
12
 
13
- import { AIRGAPPED } from './CdnConfigurationConstants';
13
+ import { EXPORT_SYNC } from './CdnConfigurationConstants';
14
14
  import { updateCdnConfiguration } from '../../../Organizations/OrganizationActions';
15
15
  import {
16
16
  selectUpdatingCdnConfiguration,
@@ -18,14 +18,14 @@ import {
18
18
 
19
19
  import './CdnConfigurationForm.scss';
20
20
 
21
- const AirGappedTypeForm = ({ showUpdate, onUpdate }) => {
21
+ const ExportSyncForm = ({ showUpdate, onUpdate }) => {
22
22
  const [updateEnabled, setUpdateEnabled] = useState(showUpdate);
23
23
  const updatingCdnConfiguration = useSelector(state => selectUpdatingCdnConfiguration(state));
24
24
  const dispatch = useDispatch();
25
25
  const performUpdate = () => {
26
26
  setUpdateEnabled(false);
27
27
  dispatch(updateCdnConfiguration({
28
- type: AIRGAPPED,
28
+ type: EXPORT_SYNC,
29
29
  }, onUpdate));
30
30
  };
31
31
 
@@ -55,6 +55,7 @@ const AirGappedTypeForm = ({ showUpdate, onUpdate }) => {
55
55
 
56
56
  <ActionGroup>
57
57
  <Button
58
+ ouiaId="export-sync-configuration-update-button"
58
59
  aria-label="update-airgapped-configuration"
59
60
  variant="secondary"
60
61
  onClick={performUpdate}
@@ -69,13 +70,13 @@ const AirGappedTypeForm = ({ showUpdate, onUpdate }) => {
69
70
  };
70
71
 
71
72
 
72
- AirGappedTypeForm.propTypes = {
73
+ ExportSyncForm.propTypes = {
73
74
  showUpdate: PropTypes.bool.isRequired,
74
75
  onUpdate: PropTypes.func,
75
76
  };
76
77
 
77
- AirGappedTypeForm.defaultProps = {
78
+ ExportSyncForm.defaultProps = {
78
79
  onUpdate: noop,
79
80
  };
80
81
 
81
- export default AirGappedTypeForm;
82
+ export default ExportSyncForm;
@@ -18,7 +18,7 @@ import {
18
18
  import { translate as __ } from 'foremanReact/common/I18n';
19
19
  import { noop } from 'foremanReact/common/helpers';
20
20
 
21
- import { UPSTREAM_SERVER, DEFAULT_CONTENT_VIEW_LABEL, DEFAULT_LIFECYCLE_ENVIRONMENT_LABEL, DEFAULT_ORGANIZATION_LABEL } from './CdnConfigurationConstants';
21
+ import { NETWORK_SYNC, DEFAULT_CONTENT_VIEW_LABEL, DEFAULT_LIFECYCLE_ENVIRONMENT_LABEL, DEFAULT_ORGANIZATION_LABEL } from './CdnConfigurationConstants';
22
22
  import EditableTextInput from '../../../../components/EditableTextInput';
23
23
 
24
24
  import {
@@ -28,11 +28,11 @@ import {
28
28
  import { updateCdnConfiguration } from '../../../Organizations/OrganizationActions';
29
29
  import './CdnConfigurationForm.scss';
30
30
 
31
- const UpstreamServerTypeForm = ({
31
+ const NetworkSyncForm = ({
32
32
  showUpdate, contentCredentials, cdnConfiguration, onUpdate,
33
33
  }) => {
34
34
  const dispatch = useDispatch();
35
- const urlValue = cdnConfiguration.type === UPSTREAM_SERVER ? cdnConfiguration.url : '';
35
+ const urlValue = cdnConfiguration.type === NETWORK_SYNC ? cdnConfiguration.url : '';
36
36
  const [url, setUrl] = useState(urlValue);
37
37
  const [username, setUsername] = useState(cdnConfiguration.username);
38
38
  const [password, setPassword] = useState(null);
@@ -92,7 +92,7 @@ const UpstreamServerTypeForm = ({
92
92
  upstream_content_view_label: contentViewLabel || DEFAULT_CONTENT_VIEW_LABEL,
93
93
  upstream_lifecycle_environment_label: lifecycleEnvironmentLabel ||
94
94
  DEFAULT_LIFECYCLE_ENVIRONMENT_LABEL,
95
- type: UPSTREAM_SERVER,
95
+ type: NETWORK_SYNC,
96
96
  }, onUpdate, onError));
97
97
  };
98
98
 
@@ -136,6 +136,7 @@ const UpstreamServerTypeForm = ({
136
136
  isRequired
137
137
  >
138
138
  <TextInput
139
+ ouiaId="network-sync-url-input"
139
140
  aria-label="cdn-url"
140
141
  type="text"
141
142
  value={url || ''}
@@ -148,6 +149,7 @@ const UpstreamServerTypeForm = ({
148
149
  isRequired
149
150
  >
150
151
  <TextInput
152
+ ouiaId="network-sync-username-input"
151
153
  aria-label="cdn-username"
152
154
  type="text"
153
155
  value={username || ''}
@@ -160,6 +162,7 @@ const UpstreamServerTypeForm = ({
160
162
  isRequired
161
163
  >
162
164
  <EditableTextInput
165
+ ouiaId="network-sync-password-input"
163
166
  attribute="cdn-password"
164
167
  value={password}
165
168
  isPassword
@@ -173,6 +176,7 @@ const UpstreamServerTypeForm = ({
173
176
  isRequired
174
177
  >
175
178
  <TextInput
179
+ ouiaId="network-sync-organization-input"
176
180
  aria-label="cdn-organization-label"
177
181
  type="text"
178
182
  value={organizationLabel || ''}
@@ -184,6 +188,7 @@ const UpstreamServerTypeForm = ({
184
188
  label={__('Lifecycle Environment Label')}
185
189
  >
186
190
  <TextInput
191
+ ouiaId="network-sync-lifecycle-environment-input"
187
192
  aria-label="cdn-lifecycle-environment-label"
188
193
  type="text"
189
194
  value={lifecycleEnvironmentLabel || ''}
@@ -195,6 +200,7 @@ const UpstreamServerTypeForm = ({
195
200
  label={__('Content view label')}
196
201
  >
197
202
  <TextInput
203
+ ouiaId="network-sync-content-view-input"
198
204
  aria-label="cdn-content-view-label"
199
205
  type="text"
200
206
  value={contentViewLabel || ''}
@@ -207,6 +213,7 @@ const UpstreamServerTypeForm = ({
207
213
  isRequired
208
214
  >
209
215
  <FormSelect
216
+ ouiaId="network-sync-ca-content-credential-input"
210
217
  aria-label="cdn-ssl-ca-content-credential"
211
218
  value={sslCaCredentialId || ''}
212
219
  isDisabled={updatingCdnConfiguration}
@@ -220,6 +227,7 @@ const UpstreamServerTypeForm = ({
220
227
 
221
228
  <ActionGroup>
222
229
  <Button
230
+ ouiaId="network-sync-configuration-update-button"
223
231
  aria-label="update-upstream-configuration"
224
232
  variant="secondary"
225
233
  onClick={performUpdate}
@@ -234,7 +242,7 @@ const UpstreamServerTypeForm = ({
234
242
  );
235
243
  };
236
244
 
237
- UpstreamServerTypeForm.propTypes = {
245
+ NetworkSyncForm.propTypes = {
238
246
  showUpdate: PropTypes.bool.isRequired,
239
247
  contentCredentials: PropTypes.arrayOf(PropTypes.shape({
240
248
  id: PropTypes.number,
@@ -253,10 +261,10 @@ UpstreamServerTypeForm.propTypes = {
253
261
  onUpdate: PropTypes.func,
254
262
  };
255
263
 
256
- UpstreamServerTypeForm.defaultProps = {
264
+ NetworkSyncForm.defaultProps = {
257
265
  contentCredentials: [],
258
266
  cdnConfiguration: {},
259
267
  onUpdate: noop,
260
268
  };
261
269
 
262
- export default UpstreamServerTypeForm;
270
+ export default NetworkSyncForm;
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
2
  import { cleanup } from '@testing-library/react';
3
3
  import { renderWithRedux, fireEvent } from 'react-testing-lib-wrapper';
4
- import AirGappedTypeForm from '../AirGappedTypeForm';
4
+ import ExportSyncForm from '../ExportSyncForm';
5
5
  import { nockInstance, assertNockRequest } from '../../../../../test-utils/nockWrapper';
6
6
  import { updateCdnConfigurationSuccessResponse } from '../../../../Organizations/__tests__/organizations.fixtures';
7
- import { AIRGAPPED } from '../CdnConfigurationConstants';
7
+ import { EXPORT_SYNC } from '../CdnConfigurationConstants';
8
8
 
9
9
  import api from '../../../../../services/api';
10
10
 
@@ -25,13 +25,13 @@ const initialState = {
25
25
 
26
26
 
27
27
  test('Can update to Airgapped type', async (done) => {
28
- const { getByLabelText } = renderWithRedux(<AirGappedTypeForm
28
+ const { getByLabelText } = renderWithRedux(<ExportSyncForm
29
29
  showUpdate
30
30
  />, { initialState });
31
31
 
32
32
  const updateCdnConfigurationRequest = nockInstance
33
33
  .put(updateCdnConfigurationPath, {
34
- type: AIRGAPPED,
34
+ type: EXPORT_SYNC,
35
35
  })
36
36
  .reply(200, updateCdnConfigurationSuccessResponse);
37
37
 
@@ -2,10 +2,10 @@ import React from 'react';
2
2
  import { cleanup } from '@testing-library/react';
3
3
  import { renderWithRedux, fireEvent, patientlyWaitFor } from 'react-testing-lib-wrapper';
4
4
  import userEvent from '@testing-library/user-event';
5
- import UpstreamServerTypeForm from '../UpstreamServerTypeForm';
5
+ import NetworkSyncForm from '../NetworkSyncForm';
6
6
  import { nockInstance, assertNockRequest } from '../../../../../test-utils/nockWrapper';
7
7
  import { updateCdnConfigurationSuccessResponse } from '../../../../Organizations/__tests__/organizations.fixtures';
8
- import { UPSTREAM_SERVER } from '../CdnConfigurationConstants';
8
+ import { NETWORK_SYNC } from '../CdnConfigurationConstants';
9
9
 
10
10
  import api from '../../../../../services/api';
11
11
 
@@ -20,7 +20,7 @@ const cdnConfiguration = {
20
20
  password_exists: false,
21
21
  upstream_organization_label: 'CurrentOrg',
22
22
  ssl_ca_credential_id: 2,
23
- type: UPSTREAM_SERVER,
23
+ type: NETWORK_SYNC,
24
24
  upstream_lifecycle_environment_label: 'Library',
25
25
  upstream_content_view_label: 'CV',
26
26
  };
@@ -47,7 +47,7 @@ const contentCredentials = [
47
47
  ];
48
48
 
49
49
  test('Can update the upstream server configuration', async (done) => {
50
- const { getByLabelText } = renderWithRedux(<UpstreamServerTypeForm
50
+ const { getByLabelText } = renderWithRedux(<NetworkSyncForm
51
51
  showUpdate
52
52
  cdnConfiguration={cdnConfiguration}
53
53
  contentCredentials={contentCredentials}
@@ -60,7 +60,7 @@ test('Can update the upstream server configuration', async (done) => {
60
60
  password: 'changeme',
61
61
  upstream_organization_label: 'Default_Organization',
62
62
  ssl_ca_credential_id: '1',
63
- type: UPSTREAM_SERVER,
63
+ type: NETWORK_SYNC,
64
64
  upstream_lifecycle_environment_label: 'Library',
65
65
  upstream_content_view_label: 'CV',
66
66
  })
@@ -92,7 +92,7 @@ test('Can update the upstream server configuration', async (done) => {
92
92
  });
93
93
 
94
94
  test('the form shall reflect the given cdnConfiguration', () => {
95
- const { getAllByTestId, getByLabelText } = renderWithRedux(<UpstreamServerTypeForm
95
+ const { getAllByTestId, getByLabelText } = renderWithRedux(<NetworkSyncForm
96
96
  showUpdate
97
97
  cdnConfiguration={cdnConfiguration}
98
98
  contentCredentials={contentCredentials}
@@ -109,7 +109,7 @@ test('the form shall reflect the given cdnConfiguration', () => {
109
109
  });
110
110
 
111
111
  test('resetting the password enables/disables appropriately', async (done) => {
112
- const { getByLabelText } = renderWithRedux(<UpstreamServerTypeForm
112
+ const { getByLabelText } = renderWithRedux(<NetworkSyncForm
113
113
  showUpdate
114
114
  cdnConfiguration={{ ...cdnConfiguration, password_exists: true }}
115
115
  />, { initialState });
@@ -130,7 +130,7 @@ test('resetting the password enables/disables appropriately', async (done) => {
130
130
  });
131
131
 
132
132
  test('update button disabled on incomplete information', async (done) => {
133
- const { getByLabelText } = renderWithRedux(<UpstreamServerTypeForm
133
+ const { getByLabelText } = renderWithRedux(<NetworkSyncForm
134
134
  showUpdate
135
135
  cdnConfiguration={{ ...cdnConfiguration, password_exists: true }}
136
136
  contentCredentials={contentCredentials}
@@ -7,11 +7,11 @@ import {
7
7
  } from '@patternfly/react-core';
8
8
  import { noop } from 'foremanReact/common/helpers';
9
9
  import CdnTypeForm from './CdnTypeForm';
10
- import AirGappedTypeForm from './AirGappedTypeForm';
11
- import UpstreamServerTypeForm from './UpstreamServerTypeForm';
10
+ import ExportSyncForm from './ExportSyncForm';
11
+ import NetworkSyncForm from './NetworkSyncForm';
12
12
 
13
13
  import './CdnConfigurationForm.scss';
14
- import { CDN_URL, CDN, AIRGAPPED, UPSTREAM_SERVER, CDN_CONFIGURATION_TYPES } from './CdnConfigurationConstants';
14
+ import { CDN_URL, CDN, EXPORT_SYNC, NETWORK_SYNC, CDN_CONFIGURATION_TYPES } from './CdnConfigurationConstants';
15
15
 
16
16
  const CdnConfigurationForm = (props) => {
17
17
  const {
@@ -35,17 +35,17 @@ const CdnConfigurationForm = (props) => {
35
35
  <ToggleGroup aria-label="Default with multiple selectable">
36
36
  <ToggleGroupItem text={CDN_CONFIGURATION_TYPES[CDN]} key={0} buttonId="cdn" isSelected={type === CDN} onChange={() => updateType(CDN)} />
37
37
  <ToggleGroupItem
38
- text={CDN_CONFIGURATION_TYPES[UPSTREAM_SERVER]}
38
+ text={CDN_CONFIGURATION_TYPES[NETWORK_SYNC]}
39
39
  key={1}
40
40
  buttonId="usptream_server"
41
- isSelected={type === UPSTREAM_SERVER}
42
- onChange={() => updateType(UPSTREAM_SERVER)}
41
+ isSelected={type === NETWORK_SYNC}
42
+ onChange={() => updateType(NETWORK_SYNC)}
43
43
  />
44
- <ToggleGroupItem text={CDN_CONFIGURATION_TYPES[AIRGAPPED]} key={2} buttonId="airgapped" isSelected={type === AIRGAPPED} onChange={() => updateType(AIRGAPPED)} />
44
+ <ToggleGroupItem text={CDN_CONFIGURATION_TYPES[EXPORT_SYNC]} key={2} buttonId="airgapped" isSelected={type === EXPORT_SYNC} onChange={() => updateType(EXPORT_SYNC)} />
45
45
  </ToggleGroup>
46
46
 
47
- { type === UPSTREAM_SERVER &&
48
- <UpstreamServerTypeForm
47
+ { type === NETWORK_SYNC &&
48
+ <NetworkSyncForm
49
49
  cdnConfiguration={cdnConfiguration}
50
50
  contentCredentials={contentCredentials}
51
51
  onUpdate={onUpdate}
@@ -60,8 +60,8 @@ const CdnConfigurationForm = (props) => {
60
60
  url={cdnUrl}
61
61
  />
62
62
  }
63
- { type === AIRGAPPED &&
64
- <AirGappedTypeForm
63
+ { type === EXPORT_SYNC &&
64
+ <ExportSyncForm
65
65
  showUpdate={type !== cdnConfiguration.type}
66
66
  onUpdate={onUpdate}
67
67
  />