@openshift-assisted/ui-lib 2.8.2-cim → 2.8.3-cim

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/@types/cim/components/ClusterDeployment/ClusterDeploymentDetails.d.ts.map +1 -1
  2. package/@types/cim/components/ClusterDeployment/ClusterDeploymentHostSelectionStep.d.ts.map +1 -1
  3. package/@types/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscoveryStep.d.ts.map +1 -1
  4. package/@types/cim/components/ClusterDeployment/ClusterDeploymentHostsSelectionBasic.d.ts.map +1 -1
  5. package/@types/cim/components/ClusterDeployment/ClusterDeploymentWizardNavigation.d.ts.map +1 -1
  6. package/@types/cim/components/ClusterDeployment/helpers.d.ts +1 -1
  7. package/@types/cim/components/ClusterDeployment/helpers.d.ts.map +1 -1
  8. package/@types/cim/components/ClusterDeployment/validationSchemas.d.ts.map +1 -1
  9. package/@types/cim/components/Hypershift/HostedClusterWizard/NetworkStep/types.d.ts +0 -1
  10. package/@types/cim/components/Hypershift/HostedClusterWizard/NetworkStep/types.d.ts.map +1 -1
  11. package/@types/cim/components/Hypershift/modals/ManageHostsModal.d.ts.map +1 -1
  12. package/@types/cim/components/InfraEnv/InfraEnvFormPage.d.ts.map +1 -1
  13. package/@types/cim/components/modals/AddHostModal.d.ts.map +1 -1
  14. package/@types/cim/components/modals/EditProxyModal.d.ts.map +1 -1
  15. package/@types/common/components/clusterConfiguration/DiscoveryImageConfigForm.d.ts +1 -0
  16. package/@types/common/components/clusterConfiguration/DiscoveryImageConfigForm.d.ts.map +1 -1
  17. package/@types/common/components/clusterWizard/ClusterWizardStep.d.ts +1 -1
  18. package/@types/common/components/clusterWizard/ClusterWizardStep.d.ts.map +1 -1
  19. package/@types/common/components/clusterWizard/networkingSteps/ManagedNetworkingControlGroup.d.ts.map +1 -1
  20. package/@types/common/components/fetching/EventListFetch.d.ts +1 -1
  21. package/@types/common/components/fetching/EventListFetch.d.ts.map +1 -1
  22. package/@types/common/components/hosts/TableToolbar.d.ts.map +1 -1
  23. package/@types/common/components/ui/ClusterEventsToolbar.d.ts.map +1 -1
  24. package/@types/common/components/ui/StaticTextField.d.ts +1 -1
  25. package/@types/common/components/ui/StaticTextField.d.ts.map +1 -1
  26. package/@types/common/components/ui/eventsModal.d.ts +4 -8
  27. package/@types/common/components/ui/eventsModal.d.ts.map +1 -1
  28. package/@types/common/components/ui/formik/UploadField.d.ts.map +1 -1
  29. package/@types/common/components/ui/formik/validationSchemas.d.ts +5 -1
  30. package/@types/common/components/ui/formik/validationSchemas.d.ts.map +1 -1
  31. package/@types/common/config/constants.d.ts +1 -0
  32. package/@types/common/config/constants.d.ts.map +1 -1
  33. package/@types/common/types/events.d.ts +9 -2
  34. package/@types/common/types/events.d.ts.map +1 -1
  35. package/@types/ocm/components/AddHosts/day2Wizard/Day2ClusterDetails.d.ts.map +1 -1
  36. package/@types/ocm/components/AddHosts/day2Wizard/Day2StaticIP.d.ts.map +1 -1
  37. package/@types/ocm/components/AddHosts/day2Wizard/Day2Wizard.d.ts.map +1 -1
  38. package/@types/ocm/components/HostsClusterDetailTab/HostsClusterDetailTabContent.d.ts.map +1 -1
  39. package/@types/ocm/components/HostsClusterDetailTab/types.d.ts +5 -0
  40. package/@types/ocm/components/HostsClusterDetailTab/types.d.ts.map +1 -1
  41. package/@types/ocm/components/HostsClusterDetailTab/utils.d.ts +2 -7
  42. package/@types/ocm/components/HostsClusterDetailTab/utils.d.ts.map +1 -1
  43. package/@types/ocm/components/clusterConfiguration/CpuArchitectureDropdown.d.ts +2 -1
  44. package/@types/ocm/components/clusterConfiguration/CpuArchitectureDropdown.d.ts.map +1 -1
  45. package/@types/ocm/components/clusterConfiguration/DiscoveryImageForm.d.ts.map +1 -1
  46. package/@types/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.d.ts.map +1 -1
  47. package/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/CustomManifestsForm.d.ts.map +1 -1
  48. package/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.d.ts.map +1 -1
  49. package/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/customManifestsValidationSchema.d.ts +1 -0
  50. package/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/customManifestsValidationSchema.d.ts.map +1 -1
  51. package/@types/ocm/components/clusterConfiguration/networkConfiguration/AdvancedNetworkFields.d.ts.map +1 -1
  52. package/@types/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.d.ts.map +1 -1
  53. package/@types/ocm/components/clusterConfiguration/networkConfiguration/StackTypeControl.d.ts.map +1 -1
  54. package/@types/ocm/components/clusterConfiguration/networkConfiguration/VirtualIPControlGroup.d.ts.map +1 -1
  55. package/@types/ocm/components/clusterDetail/AssistedInstallerDetailCard.d.ts.map +1 -1
  56. package/@types/ocm/components/clusterDetail/AssistedInstallerExtraDetailCard.d.ts.map +1 -1
  57. package/@types/ocm/components/clusterWizard/ClusterWizardContextProvider.d.ts.map +1 -1
  58. package/@types/ocm/components/clusterWizard/wizardTransition.d.ts +2 -1
  59. package/@types/ocm/components/clusterWizard/wizardTransition.d.ts.map +1 -1
  60. package/@types/ocm/components/clusters/ClusterPage.d.ts.map +1 -1
  61. package/@types/ocm/components/featureSupportLevels/FeatureSupportLevelProvider.d.ts.map +1 -1
  62. package/@types/ocm/components/fetching/fetchEvents.d.ts.map +1 -1
  63. package/@types/ocm/components/newFeatureSupportLevels/NewFeatureSupportLevelProvider.d.ts.map +1 -1
  64. package/@types/ocm/hooks/useClusterCustomManifests.d.ts +1 -1
  65. package/@types/ocm/hooks/useClusterCustomManifests.d.ts.map +1 -1
  66. package/@types/ocm/hooks/useInfraEnv.d.ts +1 -1
  67. package/@types/ocm/hooks/useInfraEnv.d.ts.map +1 -1
  68. package/@types/ocm/hooks/useInfraEnvId.d.ts +1 -1
  69. package/@types/ocm/hooks/useInfraEnvId.d.ts.map +1 -1
  70. package/@types/ocm/services/Day2ClusterService.d.ts +3 -3
  71. package/@types/ocm/services/Day2ClusterService.d.ts.map +1 -1
  72. package/@types/ocm/services/InfraEnvIdsCacheService.d.ts +1 -1
  73. package/@types/ocm/services/InfraEnvIdsCacheService.d.ts.map +1 -1
  74. package/@types/ocm/services/InfraEnvsService.d.ts +4 -3
  75. package/@types/ocm/services/InfraEnvsService.d.ts.map +1 -1
  76. package/@types/ocm/services/apis/EventsAPI.d.ts +1 -0
  77. package/@types/ocm/services/apis/EventsAPI.d.ts.map +1 -1
  78. package/build/build.json +1 -1
  79. package/build/cim/components/Agent/BMCForm.js +1 -1
  80. package/build/cim/components/Agent/BMCForm.js.map +1 -1
  81. package/build/cim/components/ClusterDeployment/ClusterDeploymentDetails.js +1 -1
  82. package/build/cim/components/ClusterDeployment/ClusterDeploymentDetails.js.map +1 -1
  83. package/build/cim/components/ClusterDeployment/ClusterDeploymentHostSelectionStep.js +1 -9
  84. package/build/cim/components/ClusterDeployment/ClusterDeploymentHostSelectionStep.js.map +1 -1
  85. package/build/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscoveryStep.js +1 -2
  86. package/build/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscoveryStep.js.map +1 -1
  87. package/build/cim/components/ClusterDeployment/ClusterDeploymentHostsSelectionBasic.js +3 -10
  88. package/build/cim/components/ClusterDeployment/ClusterDeploymentHostsSelectionBasic.js.map +1 -1
  89. package/build/cim/components/ClusterDeployment/ClusterDeploymentWizardNavigation.js +2 -2
  90. package/build/cim/components/ClusterDeployment/ClusterDeploymentWizardNavigation.js.map +1 -1
  91. package/build/cim/components/ClusterDeployment/helpers.js +42 -5
  92. package/build/cim/components/ClusterDeployment/helpers.js.map +1 -1
  93. package/build/cim/components/ClusterDeployment/use-networking-formik.js +2 -2
  94. package/build/cim/components/ClusterDeployment/use-networking-formik.js.map +1 -1
  95. package/build/cim/components/ClusterDeployment/validationSchemas.js +0 -1
  96. package/build/cim/components/ClusterDeployment/validationSchemas.js.map +1 -1
  97. package/build/cim/components/Hypershift/HostedClusterWizard/NetworkStep/NetworkStep.js +2 -2
  98. package/build/cim/components/Hypershift/HostedClusterWizard/NetworkStep/NetworkStep.js.map +1 -1
  99. package/build/cim/components/Hypershift/modals/ManageHostsModal.js +1 -6
  100. package/build/cim/components/Hypershift/modals/ManageHostsModal.js.map +1 -1
  101. package/build/cim/components/Hypershift/utils/nodepool.js +5 -5
  102. package/build/cim/components/Hypershift/utils/nodepool.js.map +1 -1
  103. package/build/cim/components/InfraEnv/InfraEnvFormPage.js +10 -2
  104. package/build/cim/components/InfraEnv/InfraEnvFormPage.js.map +1 -1
  105. package/build/cim/components/modals/AddHostModal.js +1 -1
  106. package/build/cim/components/modals/AddHostModal.js.map +1 -1
  107. package/build/cim/components/modals/EditProxyModal.js +18 -7
  108. package/build/cim/components/modals/EditProxyModal.js.map +1 -1
  109. package/build/common/components/clusterConfiguration/DiscoveryImageConfigForm.js +5 -5
  110. package/build/common/components/clusterConfiguration/DiscoveryImageConfigForm.js.map +1 -1
  111. package/build/common/components/clusterWizard/ClusterWizardStep.js +1 -1
  112. package/build/common/components/clusterWizard/ClusterWizardStep.js.map +1 -1
  113. package/build/common/components/clusterWizard/networkingSteps/ManagedNetworkingControlGroup.js +5 -2
  114. package/build/common/components/clusterWizard/networkingSteps/ManagedNetworkingControlGroup.js.map +1 -1
  115. package/build/common/components/clusterWizard/networkingSteps/NetworkTypeControlGroup.js +1 -1
  116. package/build/common/components/clusterWizard/networkingSteps/NetworkTypeControlGroup.js.map +1 -1
  117. package/build/common/components/fetching/EventListFetch.js +14 -25
  118. package/build/common/components/fetching/EventListFetch.js.map +1 -1
  119. package/build/common/components/hosts/TableToolbar.js +3 -3
  120. package/build/common/components/hosts/TableToolbar.js.map +1 -1
  121. package/build/common/components/hosts/status.js +1 -1
  122. package/build/common/components/hosts/status.js.map +1 -1
  123. package/build/common/components/ui/ClusterEventsToolbar.js +1 -1
  124. package/build/common/components/ui/ClusterEventsToolbar.js.map +1 -1
  125. package/build/common/components/ui/eventsModal.js +12 -6
  126. package/build/common/components/ui/eventsModal.js.map +1 -1
  127. package/build/common/components/ui/formik/CodeField.js +1 -1
  128. package/build/common/components/ui/formik/CodeField.js.map +1 -1
  129. package/build/common/components/ui/formik/UploadField.js +1 -2
  130. package/build/common/components/ui/formik/UploadField.js.map +1 -1
  131. package/build/common/components/ui/formik/validationSchemas.js +20 -13
  132. package/build/common/components/ui/formik/validationSchemas.js.map +1 -1
  133. package/build/common/config/constants.js +2 -0
  134. package/build/common/config/constants.js.map +1 -1
  135. package/build/ocm/components/AddHosts/day2Wizard/Day2ClusterDetails.js +94 -20
  136. package/build/ocm/components/AddHosts/day2Wizard/Day2ClusterDetails.js.map +1 -1
  137. package/build/ocm/components/AddHosts/day2Wizard/Day2DownloadISO.js +1 -1
  138. package/build/ocm/components/AddHosts/day2Wizard/Day2DownloadISO.js.map +1 -1
  139. package/build/ocm/components/AddHosts/day2Wizard/Day2StaticIP.js +16 -9
  140. package/build/ocm/components/AddHosts/day2Wizard/Day2StaticIP.js.map +1 -1
  141. package/build/ocm/components/AddHosts/day2Wizard/Day2Wizard.js +1 -1
  142. package/build/ocm/components/AddHosts/day2Wizard/Day2Wizard.js.map +1 -1
  143. package/build/ocm/components/HostsClusterDetailTab/HostsClusterDetailTabContent.js +5 -2
  144. package/build/ocm/components/HostsClusterDetailTab/HostsClusterDetailTabContent.js.map +1 -1
  145. package/build/ocm/components/HostsClusterDetailTab/utils.js +35 -29
  146. package/build/ocm/components/HostsClusterDetailTab/utils.js.map +1 -1
  147. package/build/ocm/components/clusterConfiguration/CpuArchitectureDropdown.js +5 -4
  148. package/build/ocm/components/clusterConfiguration/CpuArchitectureDropdown.js.map +1 -1
  149. package/build/ocm/components/clusterConfiguration/DiscoveryImageForm.js +3 -1
  150. package/build/ocm/components/clusterConfiguration/DiscoveryImageForm.js.map +1 -1
  151. package/build/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.js +11 -8
  152. package/build/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.js.map +1 -1
  153. package/build/ocm/components/clusterConfiguration/manifestsConfiguration/components/CustomManifestsForm.js +49 -21
  154. package/build/ocm/components/clusterConfiguration/manifestsConfiguration/components/CustomManifestsForm.js.map +1 -1
  155. package/build/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.js +3 -9
  156. package/build/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.js.map +1 -1
  157. package/build/ocm/components/clusterConfiguration/manifestsConfiguration/components/customManifestsValidationSchema.js +37 -2
  158. package/build/ocm/components/clusterConfiguration/manifestsConfiguration/components/customManifestsValidationSchema.js.map +1 -1
  159. package/build/ocm/components/clusterConfiguration/networkConfiguration/AdvancedNetworkFields.js +16 -5
  160. package/build/ocm/components/clusterConfiguration/networkConfiguration/AdvancedNetworkFields.js.map +1 -1
  161. package/build/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.js +5 -2
  162. package/build/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.js.map +1 -1
  163. package/build/ocm/components/clusterConfiguration/networkConfiguration/StackTypeControl.js +1 -2
  164. package/build/ocm/components/clusterConfiguration/networkConfiguration/StackTypeControl.js.map +1 -1
  165. package/build/ocm/components/clusterConfiguration/networkConfiguration/VirtualIPControlGroup.js +27 -16
  166. package/build/ocm/components/clusterConfiguration/networkConfiguration/VirtualIPControlGroup.js.map +1 -1
  167. package/build/ocm/components/clusterConfiguration/platformIntegration/PlatformIntegration.js +1 -1
  168. package/build/ocm/components/clusterConfiguration/platformIntegration/PlatformIntegration.js.map +1 -1
  169. package/build/ocm/components/clusterDetail/AssistedInstallerDetailCard.js +7 -2
  170. package/build/ocm/components/clusterDetail/AssistedInstallerDetailCard.js.map +1 -1
  171. package/build/ocm/components/clusterDetail/AssistedInstallerExtraDetailCard.js +7 -2
  172. package/build/ocm/components/clusterDetail/AssistedInstallerExtraDetailCard.js.map +1 -1
  173. package/build/ocm/components/clusterWizard/ClusterWizardContextProvider.js +13 -3
  174. package/build/ocm/components/clusterWizard/ClusterWizardContextProvider.js.map +1 -1
  175. package/build/ocm/components/clusterWizard/wizardTransition.js +10 -2
  176. package/build/ocm/components/clusterWizard/wizardTransition.js.map +1 -1
  177. package/build/ocm/components/clusters/ClusterPage.js +10 -4
  178. package/build/ocm/components/clusters/ClusterPage.js.map +1 -1
  179. package/build/ocm/components/featureSupportLevels/FeatureSupportLevelProvider.js +5 -2
  180. package/build/ocm/components/featureSupportLevels/FeatureSupportLevelProvider.js.map +1 -1
  181. package/build/ocm/components/fetching/fetchEvents.js +25 -4
  182. package/build/ocm/components/fetching/fetchEvents.js.map +1 -1
  183. package/build/ocm/components/newFeatureSupportLevels/NewFeatureSupportLevelProvider.js +5 -2
  184. package/build/ocm/components/newFeatureSupportLevels/NewFeatureSupportLevelProvider.js.map +1 -1
  185. package/build/ocm/hooks/useClusterCustomManifests.js +5 -3
  186. package/build/ocm/hooks/useClusterCustomManifests.js.map +1 -1
  187. package/build/ocm/hooks/useInfraEnv.js +2 -2
  188. package/build/ocm/hooks/useInfraEnv.js.map +1 -1
  189. package/build/ocm/hooks/useInfraEnvId.js +18 -3
  190. package/build/ocm/hooks/useInfraEnvId.js.map +1 -1
  191. package/build/ocm/hooks/useInfraEnvImageUrl.js +1 -1
  192. package/build/ocm/hooks/useInfraEnvImageUrl.js.map +1 -1
  193. package/build/ocm/hooks/useInfraEnvIpxeImageUrl.js +1 -1
  194. package/build/ocm/hooks/useInfraEnvIpxeImageUrl.js.map +1 -1
  195. package/build/ocm/services/ClustersService.js +2 -2
  196. package/build/ocm/services/ClustersService.js.map +1 -1
  197. package/build/ocm/services/Day2ClusterService.js +11 -20
  198. package/build/ocm/services/Day2ClusterService.js.map +1 -1
  199. package/build/ocm/services/InfraEnvIdsCacheService.js +5 -4
  200. package/build/ocm/services/InfraEnvIdsCacheService.js.map +1 -1
  201. package/build/ocm/services/InfraEnvsService.js +7 -4
  202. package/build/ocm/services/InfraEnvsService.js.map +1 -1
  203. package/build/ocm/services/apis/EventsAPI.js +13 -1
  204. package/build/ocm/services/apis/EventsAPI.js.map +1 -1
  205. package/lib/cim/components/Agent/BMCForm.tsx +1 -1
  206. package/lib/cim/components/ClusterDeployment/ClusterDeploymentDetails.tsx +1 -0
  207. package/lib/cim/components/ClusterDeployment/ClusterDeploymentHostSelectionStep.tsx +1 -12
  208. package/lib/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscoveryStep.tsx +1 -2
  209. package/lib/cim/components/ClusterDeployment/ClusterDeploymentHostsSelectionBasic.tsx +2 -10
  210. package/lib/cim/components/ClusterDeployment/ClusterDeploymentWizardNavigation.tsx +7 -2
  211. package/lib/cim/components/ClusterDeployment/helpers.ts +52 -5
  212. package/lib/cim/components/ClusterDeployment/use-networking-formik.ts +2 -2
  213. package/lib/cim/components/ClusterDeployment/validationSchemas.ts +0 -1
  214. package/lib/cim/components/Hypershift/HostedClusterWizard/NetworkStep/NetworkStep.tsx +2 -2
  215. package/lib/cim/components/Hypershift/HostedClusterWizard/NetworkStep/types.ts +0 -1
  216. package/lib/cim/components/Hypershift/modals/ManageHostsModal.tsx +1 -6
  217. package/lib/cim/components/Hypershift/utils/nodepool.ts +1 -1
  218. package/lib/cim/components/InfraEnv/InfraEnvFormPage.tsx +10 -2
  219. package/lib/cim/components/modals/AddHostModal.tsx +1 -0
  220. package/lib/cim/components/modals/EditProxyModal.tsx +15 -3
  221. package/lib/common/components/clusterConfiguration/DiscoveryImageConfigForm.tsx +12 -9
  222. package/lib/common/components/clusterWizard/ClusterWizardStep.tsx +5 -1
  223. package/lib/common/components/clusterWizard/networkingSteps/ManagedNetworkingControlGroup.tsx +11 -2
  224. package/lib/common/components/clusterWizard/networkingSteps/NetworkTypeControlGroup.tsx +1 -1
  225. package/lib/common/components/fetching/EventListFetch.tsx +31 -41
  226. package/lib/common/components/hosts/TableToolbar.tsx +3 -3
  227. package/lib/common/components/hosts/status.tsx +1 -1
  228. package/lib/common/components/ui/ClusterEventsToolbar.tsx +3 -0
  229. package/lib/common/components/ui/StaticTextField.tsx +1 -1
  230. package/lib/common/components/ui/eventsModal.tsx +28 -23
  231. package/lib/common/components/ui/formik/CodeField.tsx +1 -1
  232. package/lib/common/components/ui/formik/UploadField.tsx +2 -3
  233. package/lib/common/components/ui/formik/validationSchemas.ts +33 -15
  234. package/lib/common/config/constants.ts +4 -0
  235. package/lib/common/types/events.ts +10 -3
  236. package/lib/ocm/components/AddHosts/day2Wizard/Day2ClusterDetails.tsx +129 -21
  237. package/lib/ocm/components/AddHosts/day2Wizard/Day2DownloadISO.tsx +1 -1
  238. package/lib/ocm/components/AddHosts/day2Wizard/Day2StaticIP.tsx +15 -10
  239. package/lib/ocm/components/AddHosts/day2Wizard/Day2Wizard.tsx +1 -0
  240. package/lib/ocm/components/HostsClusterDetailTab/HostsClusterDetailTabContent.tsx +7 -3
  241. package/lib/ocm/components/HostsClusterDetailTab/types.ts +6 -0
  242. package/lib/ocm/components/HostsClusterDetailTab/utils.ts +43 -37
  243. package/lib/ocm/components/clusterConfiguration/CpuArchitectureDropdown.tsx +6 -3
  244. package/lib/ocm/components/clusterConfiguration/DiscoveryImageForm.tsx +9 -1
  245. package/lib/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.tsx +25 -16
  246. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/components/CustomManifestsForm.tsx +69 -32
  247. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.tsx +3 -14
  248. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/components/customManifestsValidationSchema.tsx +59 -24
  249. package/lib/ocm/components/clusterConfiguration/networkConfiguration/AdvancedNetworkFields.tsx +29 -8
  250. package/lib/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.tsx +11 -2
  251. package/lib/ocm/components/clusterConfiguration/networkConfiguration/StackTypeControl.tsx +6 -13
  252. package/lib/ocm/components/clusterConfiguration/networkConfiguration/VirtualIPControlGroup.tsx +30 -32
  253. package/lib/ocm/components/clusterConfiguration/platformIntegration/PlatformIntegration.tsx +1 -1
  254. package/lib/ocm/components/clusterDetail/AssistedInstallerDetailCard.tsx +14 -2
  255. package/lib/ocm/components/clusterDetail/AssistedInstallerExtraDetailCard.tsx +11 -2
  256. package/lib/ocm/components/clusterWizard/ClusterWizardContextProvider.tsx +20 -2
  257. package/lib/ocm/components/clusterWizard/wizardTransition.ts +13 -1
  258. package/lib/ocm/components/clusters/ClusterPage.tsx +19 -5
  259. package/lib/ocm/components/featureSupportLevels/FeatureSupportLevelProvider.tsx +8 -2
  260. package/lib/ocm/components/fetching/fetchEvents.ts +31 -5
  261. package/lib/ocm/components/newFeatureSupportLevels/NewFeatureSupportLevelProvider.tsx +8 -2
  262. package/lib/ocm/hooks/useClusterCustomManifests.ts +9 -3
  263. package/lib/ocm/hooks/useInfraEnv.ts +10 -1
  264. package/lib/ocm/hooks/useInfraEnvId.ts +24 -4
  265. package/lib/ocm/hooks/useInfraEnvImageUrl.ts +1 -1
  266. package/lib/ocm/hooks/useInfraEnvIpxeImageUrl.ts +1 -1
  267. package/lib/ocm/services/ClustersService.ts +2 -2
  268. package/lib/ocm/services/Day2ClusterService.ts +12 -42
  269. package/lib/ocm/services/InfraEnvIdsCacheService.ts +9 -6
  270. package/lib/ocm/services/InfraEnvsService.ts +12 -13
  271. package/lib/ocm/services/apis/EventsAPI.ts +15 -1
  272. package/package.json +1 -1
@@ -1,5 +1,13 @@
1
1
  import React from 'react';
2
- import { Button, Modal, ButtonVariant, ModalVariant, ModalBoxBody } from '@patternfly/react-core';
2
+ import {
3
+ Button,
4
+ Modal,
5
+ ButtonVariant,
6
+ ModalVariant,
7
+ ModalBoxBody,
8
+ Spinner,
9
+ Title,
10
+ } from '@patternfly/react-core';
3
11
  import { ExclamationTriangleIcon } from '@patternfly/react-icons';
4
12
  import { global_warning_color_100 as globalWarningColor100 } from '@patternfly/react-tokens';
5
13
  import { ToolbarButton } from './Toolbar';
@@ -12,17 +20,14 @@ import ErrorState from './uiState/ErrorState';
12
20
  import './EventsModal.css';
13
21
  import { useTranslation } from '../../hooks/use-translation-wrapper';
14
22
  import { Trans } from 'react-i18next';
23
+ import { useStateSafely } from '../../hooks';
15
24
 
16
- type EventsModalButtonProps = React.ComponentProps<typeof Button> & {
17
- ButtonComponent?: typeof Button | typeof ToolbarButton;
18
- onFetchEvents: EventListFetchProps['onFetchEvents'];
19
- onClick?: () => void;
20
- hostId?: Event['hostId'];
21
- cluster: Cluster;
22
- entityKind: EventsEntityKind;
23
- title: string;
24
- fallbackEventsURL?: string;
25
- };
25
+ type EventsModalButtonProps = React.ComponentProps<typeof Button> &
26
+ Omit<EventsModalProps, 'onClose' | 'isOpen' | 'hostId'> & {
27
+ ButtonComponent?: typeof Button | typeof ToolbarButton;
28
+ onClick?: () => void;
29
+ hostId?: Event['hostId'];
30
+ };
26
31
 
27
32
  export const EventsModalButton = ({
28
33
  ButtonComponent = ToolbarButton,
@@ -34,6 +39,7 @@ export const EventsModalButton = ({
34
39
  children,
35
40
  title,
36
41
  fallbackEventsURL,
42
+ disablePagination,
37
43
  ...props
38
44
  }: EventsModalButtonProps) => {
39
45
  const [isModalOpen, setIsModalOpen] = React.useState(false);
@@ -53,6 +59,7 @@ export const EventsModalButton = ({
53
59
  entityKind={entityKind}
54
60
  onFetchEvents={onFetchEvents}
55
61
  fallbackEventsURL={fallbackEventsURL}
62
+ disablePagination={disablePagination}
56
63
  />
57
64
  </>
58
65
  );
@@ -67,22 +74,26 @@ type EventsModalProps = {
67
74
  isOpen: boolean;
68
75
  title: string;
69
76
  fallbackEventsURL?: string;
77
+ disablePagination?: boolean;
70
78
  };
71
79
 
72
80
  export const EventsModal = ({
73
- onFetchEvents,
74
- hostId,
75
- cluster,
76
- entityKind,
77
81
  onClose,
78
82
  isOpen,
79
83
  title,
80
84
  fallbackEventsURL,
85
+ ...rest
81
86
  }: EventsModalProps) => {
82
87
  const { t } = useTranslation();
88
+ const [isLoading, setLoading] = useStateSafely(true);
89
+
83
90
  return (
84
91
  <Modal
85
- title={title}
92
+ header={
93
+ <Title headingLevel={'h1'}>
94
+ {title} {isLoading && <Spinner isSVG size="lg" />}
95
+ </Title>
96
+ }
86
97
  isOpen={isOpen}
87
98
  aria-label={t('ai:Displays events')}
88
99
  hasNoBodyWrapper
@@ -111,13 +122,7 @@ export const EventsModal = ({
111
122
  iconColor={globalWarningColor100.value}
112
123
  />
113
124
  ) : (
114
- <EventListFetch
115
- hostId={hostId}
116
- cluster={cluster}
117
- entityKind={entityKind}
118
- onFetchEvents={onFetchEvents}
119
- className="events-modal__event-list"
120
- />
125
+ <EventListFetch className="events-modal__event-list" setLoading={setLoading} {...rest} />
121
126
  )}
122
127
  </ModalBoxBody>
123
128
  </Modal>
@@ -74,7 +74,7 @@ const CodeField = ({
74
74
  <CodeEditor
75
75
  code={field.value as string}
76
76
  isUploadEnabled={!isDisabled}
77
- isDownloadEnabled
77
+ isDownloadEnabled={isValid}
78
78
  isCopyEnabled
79
79
  isLanguageLabelVisible
80
80
  height="400px"
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { FieldHelperProps, useField } from 'formik';
2
+ import { useField } from 'formik';
3
3
  import { FormGroup, FileUpload, Stack, StackItem } from '@patternfly/react-core';
4
4
  import { UploadFieldProps } from './types';
5
5
  import { getFieldId } from './utils';
@@ -80,8 +80,7 @@ const UploadField: React.FC<UploadFieldProps> = ({
80
80
  dropzoneProps={{
81
81
  ...dropzoneProps,
82
82
  onDropRejected:
83
- dropzoneProps?.onDropRejected &&
84
- dropzoneProps?.onDropRejected(helpers as FieldHelperProps<string>),
83
+ dropzoneProps?.onDropRejected && dropzoneProps?.onDropRejected(helpers),
85
84
  }}
86
85
  allowEditingUploadedText={allowEdittingUploadedText}
87
86
  />
@@ -34,7 +34,7 @@ const BASE_DOMAIN_REGEX = /^([a-z0-9]+(-[a-z0-9]+)*)$/;
34
34
  const DNS_NAME_REGEX_OCM = /^([a-z0-9]+(-[a-z0-9]+)*[.])+[a-z]{2,}$/;
35
35
 
36
36
  const PROXY_DNS_REGEX =
37
- /(^\.?([a-zA-Z0-9_]{1}[a-zA-Z0-9_-]{0,62}\.){1}([a-zA-Z0-9_]{1}[a-zA-Z0-9_-]{0,62})+$)|(^\*$)/;
37
+ /(^\.?([a-zA-Z0-9_]{1}[a-zA-Z0-9_-]{0,62}){1}(\.[a-zA-Z0-9_]{1}[a-zA-Z0-9_-]{0,62})+$)/;
38
38
  const IP_V4_ZERO = '0.0.0.0';
39
39
  const IP_V6_ZERO = '0000:0000:0000:0000:0000:0000:0000:0000';
40
40
  const MAC_REGEX = /^([0-9A-Fa-f]{2}[:]){5}([0-9A-Fa-f]{2})$/;
@@ -504,28 +504,46 @@ export const richHostnameValidationSchema = (
504
504
  };
505
505
 
506
506
  const httpProxyValidationMessage = 'Provide a valid HTTP URL.';
507
- export const httpProxyValidationSchema = (
508
- values: ProxyFieldsType,
509
- pairValueName: 'httpProxy' | 'httpsProxy',
510
- ) =>
511
- Yup.string()
512
- .test(
513
- 'http-proxy-no-empty-validation',
514
- 'At least one of the HTTP or HTTPS proxy URLs is required.',
515
- (value) => Boolean(!values.enableProxy || value || values[pairValueName]),
516
- )
517
- .test('http-proxy-validation', httpProxyValidationMessage, (value: string) => {
507
+ export const httpProxyValidationSchema = ({
508
+ values,
509
+ pairValueName,
510
+ allowEmpty,
511
+ }: {
512
+ values: ProxyFieldsType;
513
+ pairValueName: 'httpProxy' | 'httpsProxy';
514
+ allowEmpty?: boolean;
515
+ }) => {
516
+ const validation = Yup.string().test(
517
+ 'http-proxy-validation',
518
+ httpProxyValidationMessage,
519
+ (value: string) => {
518
520
  if (!value) {
519
521
  return true;
520
522
  }
521
523
 
524
+ if (!value.startsWith('http://')) {
525
+ return false;
526
+ }
527
+
522
528
  try {
523
- const url = new URL(value);
524
- return url.protocol === 'http:';
529
+ new URL(value);
525
530
  } catch {
526
531
  return false;
527
532
  }
528
- });
533
+ return true;
534
+ },
535
+ );
536
+
537
+ if (allowEmpty) {
538
+ return validation;
539
+ }
540
+
541
+ return validation.test(
542
+ 'http-proxy-no-empty-validation',
543
+ 'At least one of the HTTP or HTTPS proxy URLs is required.',
544
+ (value) => !values.enableProxy || !!value || !!values[pairValueName],
545
+ );
546
+ };
529
547
 
530
548
  const isIPorDN = (value: string, dnsRegex = DNS_NAME_REGEX) => {
531
549
  if (value.match(dnsRegex)) {
@@ -366,3 +366,7 @@ export const CHANGE_ISO_PASSWORD_FILE_LINK =
366
366
 
367
367
  export const CUSTOM_MANIFESTS_HELP_LINK =
368
368
  'https://docs.openshift.com/container-platform/4.12/installing/install_config/installing-customizing.html';
369
+
370
+ //TODO (mortegag): Change the link. Related to https://issues.redhat.com/browse/MGMT-13976
371
+ export const HOW_TO_KNOW_IF_CLUSTER_SUPPORTS_MULTIPLE_CPU_ARCHS =
372
+ 'https://57587--docspreview.netlify.app/openshift-enterprise/latest/post_installation_configuration/multi-architecture-configuration.html#multi-architecture-verifying-cluster-compatibility_multi-architecture-configuration';
@@ -1,4 +1,3 @@
1
- import { AxiosResponse } from 'axios';
2
1
  import { Cluster, Event, EventList, V2Events } from '../api';
3
2
 
4
3
  export type EventsEntityKind = 'cluster' | 'host';
@@ -16,12 +15,20 @@ export type EventFetchProps = {
16
15
  cluster: Cluster;
17
16
  };
18
17
 
18
+ type OnSuccessResponse = {
19
+ data: EventList;
20
+ totalEvents: number;
21
+ severities: Record<Event['severity'], number>;
22
+ };
23
+
19
24
  export type EventListFetchProps = EventFetchProps & {
20
25
  entityKind: EventsEntityKind;
21
26
  onFetchEvents: (
22
27
  params: V2Events,
23
- onSuccess: (data: AxiosResponse<EventList>) => void,
28
+ onSuccess: (response: OnSuccessResponse) => void,
24
29
  onError: (message: string) => void,
25
- ) => Promise<void>;
30
+ ) => void;
26
31
  className?: string;
32
+ setLoading: (loading: boolean) => void;
33
+ disablePagination?: boolean;
27
34
  };
@@ -1,14 +1,19 @@
1
- import { Grid, GridItem } from '@patternfly/react-core';
1
+ import { Alert, Grid, GridItem } from '@patternfly/react-core';
2
2
  import { Form, Formik } from 'formik';
3
3
  import React from 'react';
4
4
  import {
5
5
  Cluster,
6
+ ClusterCpuArchitecture,
6
7
  ClusterWizardStep,
7
8
  ClusterWizardStepHeader,
8
9
  CpuArchitecture,
9
10
  ErrorState,
11
+ ExternalLink,
10
12
  getSupportedCpuArchitectures,
13
+ HOW_TO_KNOW_IF_CLUSTER_SUPPORTS_MULTIPLE_CPU_ARCHS,
14
+ InfraEnv,
11
15
  LoadingState,
16
+ SupportedCpuArchitecture,
12
17
  useFeature,
13
18
  } from '../../../../common';
14
19
  import { HostsNetworkConfigurationType, InfraEnvsService } from '../../../services';
@@ -21,24 +26,50 @@ import Day2WizardFooter from './Day2WizardFooter';
21
26
  import Day2HostStaticIpConfigurations from './Day2StaticIpHostConfigurations';
22
27
  import { mapClusterCpuArchToInfraEnvCpuArch } from '../../../services/CpuArchitectureService';
23
28
  import CpuArchitectureDropdown from '../../clusterConfiguration/CpuArchitectureDropdown';
24
- import { useOpenshiftVersions } from '../../../hooks';
29
+ import { useOpenshiftVersions, usePullSecret } from '../../../hooks';
25
30
 
26
31
  const getDay2ClusterDetailInitialValues = async (
27
32
  clusterId: Cluster['id'],
28
33
  day1CpuArchitecture: CpuArchitecture,
29
- ) => {
34
+ pullSecret?: string,
35
+ name?: string,
36
+ openshiftVersion?: string,
37
+ ): Promise<Day2ClusterDetailValues | Error> => {
30
38
  try {
31
39
  const infraEnv = await InfraEnvsService.getInfraEnv(clusterId, day1CpuArchitecture);
32
-
33
- return {
34
- cpuArchitecture: day1CpuArchitecture,
35
- hostsNetworkConfigurationType: infraEnv.staticNetworkConfig
36
- ? HostsNetworkConfigurationType.STATIC
37
- : HostsNetworkConfigurationType.DHCP,
38
- };
40
+ if (infraEnv && !(infraEnv instanceof Error)) {
41
+ return {
42
+ cpuArchitecture: day1CpuArchitecture as SupportedCpuArchitecture,
43
+ hostsNetworkConfigurationType: infraEnv.staticNetworkConfig
44
+ ? HostsNetworkConfigurationType.STATIC
45
+ : HostsNetworkConfigurationType.DHCP,
46
+ };
47
+ } else {
48
+ //Create a new InfraEnv because is not found
49
+ if (pullSecret) {
50
+ const infraEnv = await InfraEnvsService.create({
51
+ name: InfraEnvsService.makeInfraEnvName(
52
+ day1CpuArchitecture as ClusterCpuArchitecture,
53
+ name,
54
+ ),
55
+ pullSecret,
56
+ clusterId,
57
+ openshiftVersion,
58
+ cpuArchitecture: day1CpuArchitecture as ClusterCpuArchitecture,
59
+ });
60
+ return {
61
+ cpuArchitecture: day1CpuArchitecture as SupportedCpuArchitecture,
62
+ hostsNetworkConfigurationType: infraEnv.staticNetworkConfig
63
+ ? HostsNetworkConfigurationType.STATIC
64
+ : HostsNetworkConfigurationType.DHCP,
65
+ };
66
+ } else {
67
+ return new Error('Could not get infraEnv for this cpu architecture');
68
+ }
69
+ }
39
70
  } catch (error) {
40
71
  handleApiError(error);
41
- return null;
72
+ return new Error('Could not get infraEnv for this cpu architecture');
42
73
  }
43
74
  };
44
75
 
@@ -49,15 +80,16 @@ const Day2ClusterDetails = () => {
49
80
  data: { cluster: day2Cluster },
50
81
  } = day2DiscoveryImageDialog;
51
82
  const wizardContext = useDay2WizardContext();
52
- const [initialValues, setInitialValues] = React.useState<
53
- Day2ClusterDetailValues | Error | null
54
- >();
83
+ const [initialValues, setInitialValues] = React.useState<Day2ClusterDetailValues | null>(null);
55
84
  const [isSubmitting, setSubmitting] = React.useState(false);
56
-
85
+ const [isAlternativeCpuSelected, setIsAlternativeCpuSelected] = React.useState(false);
57
86
  const canSelectCpuArch = useFeature('ASSISTED_INSTALLER_MULTIARCH_SUPPORTED');
58
87
  const { getCpuArchitectures } = useOpenshiftVersions();
59
88
  const cpuArchitecturesByVersionImage = getCpuArchitectures(day2Cluster.openshiftVersion);
60
89
  const day1CpuArchitecture = mapClusterCpuArchToInfraEnvCpuArch(day2Cluster.cpuArchitecture);
90
+ const [errorState, setErrorState] = React.useState<Error | null>(null);
91
+ const pullSecret = usePullSecret();
92
+
61
93
  const cpuArchitectures = React.useMemo(
62
94
  () =>
63
95
  getSupportedCpuArchitectures(
@@ -72,13 +104,26 @@ const Day2ClusterDetails = () => {
72
104
  const initialValues = await getDay2ClusterDetailInitialValues(
73
105
  day2Cluster.id,
74
106
  day1CpuArchitecture,
107
+ pullSecret,
108
+ day2Cluster.name,
109
+ day2Cluster.openshiftVersion,
75
110
  );
76
111
  // eslint-disable-next-line @typescript-eslint/ban-ts-comment
77
112
  // @ts-ignore
78
- setInitialValues(initialValues);
113
+ if (initialValues instanceof Error) {
114
+ setErrorState(initialValues);
115
+ } else {
116
+ setInitialValues(initialValues);
117
+ }
79
118
  };
80
119
  void fetchAndSetInitialValues();
81
- }, [day2Cluster.id, day1CpuArchitecture]);
120
+ }, [
121
+ day2Cluster.id,
122
+ day1CpuArchitecture,
123
+ pullSecret,
124
+ day2Cluster.name,
125
+ day2Cluster.openshiftVersion,
126
+ ]);
82
127
 
83
128
  const handleSubmit = React.useCallback(
84
129
  async (values: Day2ClusterDetailValues) => {
@@ -102,10 +147,54 @@ const Day2ClusterDetails = () => {
102
147
  [day2Cluster.id, wizardContext],
103
148
  );
104
149
 
105
- if (!initialValues) {
150
+ const changeCpuArchitectureDropdownAsync = React.useCallback(
151
+ async (value: string, initialValues: Day2ClusterDetailValues) => {
152
+ if (pullSecret === undefined) {
153
+ setErrorState(new Error('Pull secret is missing'));
154
+ } else {
155
+ if (value !== initialValues.cpuArchitecture) {
156
+ //Fetch infraEnv by clusterId and cpu architecture
157
+ let infraEnv: InfraEnv | Error;
158
+ try {
159
+ infraEnv = await InfraEnvsService.getInfraEnv(
160
+ day2Cluster.id,
161
+ value as SupportedCpuArchitecture,
162
+ );
163
+ if (!infraEnv || infraEnv instanceof Error) {
164
+ try {
165
+ infraEnv = await InfraEnvsService.create({
166
+ name: InfraEnvsService.makeInfraEnvName(
167
+ value as ClusterCpuArchitecture,
168
+ day2Cluster.name,
169
+ ),
170
+ pullSecret,
171
+ clusterId: day2Cluster.id,
172
+ openshiftVersion: day2Cluster.openshiftVersion,
173
+ cpuArchitecture: value as ClusterCpuArchitecture,
174
+ });
175
+ } catch {
176
+ setErrorState(new Error('Could not get infraEnv for this cpu architecture'));
177
+ }
178
+ }
179
+ } catch {
180
+ setErrorState(new Error('Could not get infraEnv for this cpu architecture'));
181
+ }
182
+ }
183
+ }
184
+ setIsAlternativeCpuSelected(value !== initialValues.cpuArchitecture);
185
+ },
186
+ [day2Cluster.id, day2Cluster.name, day2Cluster.openshiftVersion, pullSecret],
187
+ );
188
+ const handleChangeCpuArchitectureDropdown = React.useCallback(
189
+ (value: string, initialValues: Day2ClusterDetailValues) =>
190
+ void changeCpuArchitectureDropdownAsync(value, initialValues),
191
+ [changeCpuArchitectureDropdownAsync],
192
+ );
193
+
194
+ if (initialValues === null) {
106
195
  return <LoadingState />;
107
- } else if (initialValues instanceof Error) {
108
- return <ErrorState content="Failed to load associated data for the Day2 cluster" />;
196
+ } else if (errorState !== null) {
197
+ return <ErrorState content={errorState.message} />;
109
198
  }
110
199
 
111
200
  return (
@@ -129,13 +218,32 @@ const Day2ClusterDetails = () => {
129
218
  <GridItem>
130
219
  <ClusterWizardStepHeader>Cluster details</ClusterWizardStepHeader>
131
220
  </GridItem>
132
- <GridItem span={12} lg={10} xl={9} xl2={7}>
221
+ <GridItem span={12} xl={10}>
133
222
  <CpuArchitectureDropdown
134
223
  openshiftVersion={day2Cluster.openshiftVersion}
135
224
  day1CpuArchitecture={initialValues.cpuArchitecture}
136
225
  cpuArchitectures={cpuArchitectures}
226
+ onChange={(value) => handleChangeCpuArchitectureDropdown(value, initialValues)}
137
227
  />
138
228
  </GridItem>
229
+ {isAlternativeCpuSelected && (
230
+ <GridItem span={12} xl={10}>
231
+ <Alert
232
+ isInline
233
+ variant="info"
234
+ title={
235
+ 'To check if the current version of your cluster supports multiple CPU architectures,'
236
+ }
237
+ >
238
+ <>
239
+ <ExternalLink href={HOW_TO_KNOW_IF_CLUSTER_SUPPORTS_MULTIPLE_CPU_ARCHS}>
240
+ follow these steps
241
+ </ExternalLink>
242
+ </>
243
+ </Alert>
244
+ </GridItem>
245
+ )}
246
+
139
247
  <GridItem>
140
248
  <Day2HostStaticIpConfigurations />
141
249
  </GridItem>
@@ -13,7 +13,7 @@ const Day2DownloadISO = () => {
13
13
  const wizardContext = useDay2WizardContext();
14
14
  const isoDownloadUrl = wizardContext.selectedIsoUrl;
15
15
  const ipxeDownloadUrl = wizardContext.selectedIpxeUrl;
16
- const nameImageSuffix = `${cluster.name || ''}_${wizardContext.selectedCpuArchitecture}`;
16
+ const nameImageSuffix = `${cluster.name || ''}`;
17
17
  return (
18
18
  <ClusterWizardStep navigation={<Day2WizardNav />}>
19
19
  <Stack hasGutter>
@@ -65,18 +65,23 @@ const Day2StaticIP = () => {
65
65
  setInfraEnv(undefined);
66
66
  return;
67
67
  }
68
-
69
- if (!infraEnv.staticNetworkConfig) {
70
- // Make sure the infraEnv we store in the state has staticIP config
71
- // This is required to be able to reuse the StaticIP services
72
- infraEnv = await InfraEnvsService.setDummyStaticConfigToInfraEnv(infraEnv.id);
73
- }
74
- const staticIpInfo = getStaticIpInfo(infraEnv);
75
- if (staticIpInfo) {
76
- setInfraEnv(infraEnv);
77
- setInitialStaticIpInfo(staticIpInfo);
68
+ if (infraEnv && !(infraEnv instanceof Error)) {
69
+ if (!infraEnv.staticNetworkConfig) {
70
+ // Make sure the infraEnv we store in the state has staticIP config
71
+ // This is required to be able to reuse the StaticIP services
72
+ infraEnv = await InfraEnvsService.setDummyStaticConfigToInfraEnv(infraEnv.id);
73
+ }
74
+ const staticIpInfo = getStaticIpInfo(infraEnv);
75
+ if (staticIpInfo) {
76
+ setInfraEnv(infraEnv);
77
+ setInitialStaticIpInfo(staticIpInfo);
78
+ } else {
79
+ setHasLoadError(true);
80
+ }
78
81
  } else {
79
82
  setHasLoadError(true);
83
+ setInfraEnv(undefined);
84
+ return;
80
85
  }
81
86
  };
82
87
  void setCurrentStaticConfig();
@@ -41,6 +41,7 @@ const Day2Wizard = () => {
41
41
  variant={ModalVariant.large}
42
42
  showClose={false}
43
43
  hasNoBodyWrapper
44
+ id="generate-discovery-iso-modal"
44
45
  >
45
46
  <div className={classNames('pf-c-wizard', 'cluster-wizard')}>
46
47
  <WizardHeader
@@ -18,6 +18,7 @@ import { AddHosts } from '../AddHosts';
18
18
  import { HostsClusterDetailTabProps } from './types';
19
19
  import { NewFeatureSupportLevelProvider } from '../newFeatureSupportLevels';
20
20
  import useInfraEnv from '../../hooks/useInfraEnv';
21
+ import { mapOcmArchToCpuArchitecture } from '../../services/CpuArchitectureService';
21
22
 
22
23
  export const HostsClusterDetailTabContent = ({
23
24
  cluster: ocmCluster,
@@ -37,7 +38,12 @@ export const HostsClusterDetailTabContent = ({
37
38
 
38
39
  const { infraEnv } = useInfraEnv(
39
40
  ocmCluster.id ? ocmCluster.id : '',
40
- CpuArchitecture.USE_DAY1_ARCHITECTURE,
41
+ ocmCluster.cpu_architecture
42
+ ? (mapOcmArchToCpuArchitecture(ocmCluster.cpu_architecture) as CpuArchitecture)
43
+ : CpuArchitecture.USE_DAY1_ARCHITECTURE,
44
+ ocmCluster.name,
45
+ pullSecret,
46
+ ocmCluster.openshift_version,
41
47
  );
42
48
  React.useEffect(() => {
43
49
  if (!isVisible && day2Cluster) {
@@ -106,8 +112,6 @@ export const HostsClusterDetailTabContent = ({
106
112
  ocmCluster,
107
113
  pullSecret,
108
114
  normalizedVersion,
109
- cpuArchitecturesByVersionImage,
110
- canSelectCpuArch,
111
115
  );
112
116
  const aiCluster = Day2ClusterService.completeAiClusterWithOcmCluster(
113
117
  day2Cluster,
@@ -6,3 +6,9 @@ export type HostsClusterDetailTabProps = {
6
6
  isVisible: boolean;
7
7
  allEnabledFeatures: FeatureListType;
8
8
  };
9
+
10
+ export interface AddHostsTabState {
11
+ showTab: boolean;
12
+ isDisabled: boolean;
13
+ tabTooltip: string;
14
+ }
@@ -1,6 +1,6 @@
1
- import Day2ClusterService from '../../services/Day2ClusterService';
2
1
  import { getFeatureSupported } from '../featureSupportLevels/FeatureSupportLevelProvider';
3
2
  import { OcmClusterType } from '../AddHosts/types';
3
+ import { AddHostsTabState } from './types';
4
4
 
5
5
  const isSNOExpansionAllowed = (cluster: OcmClusterType) => {
6
6
  return getFeatureSupported(
@@ -10,46 +10,52 @@ const isSNOExpansionAllowed = (cluster: OcmClusterType) => {
10
10
  );
11
11
  };
12
12
 
13
- const visibleTabResult = {
14
- showTab: true,
15
- isDisabled: false,
16
- tabTooltip: '',
17
- };
18
-
19
- const hiddenTabResult = {
20
- showTab: false,
21
- isDisabled: false,
22
- tabTooltip: '',
23
- };
24
-
25
- const disabledTabResult = (tooltipMessage: string) => ({
26
- showTab: true,
27
- isDisabled: true,
28
- tabTooltip: tooltipMessage,
29
- });
30
-
31
- export const getAddHostTabDetails = ({ cluster }: { cluster: OcmClusterType }) => {
32
- const isHiddenTab =
33
- (cluster.state !== 'ready' && cluster.state !== 'installed') ||
34
- cluster.product?.id !== 'OCP-AssistedInstall';
35
- if (isHiddenTab) {
36
- return hiddenTabResult;
13
+ const makeState = (
14
+ state: 'hidden' | 'visible' | 'disabled',
15
+ tooltipMessage = '',
16
+ ): AddHostsTabState => {
17
+ switch (state) {
18
+ case 'hidden':
19
+ return {
20
+ showTab: false,
21
+ isDisabled: false,
22
+ tabTooltip: '',
23
+ };
24
+ case 'visible':
25
+ return {
26
+ showTab: true,
27
+ isDisabled: false,
28
+ tabTooltip: tooltipMessage,
29
+ };
30
+ case 'disabled':
31
+ return {
32
+ showTab: true,
33
+ isDisabled: true,
34
+ tabTooltip: tooltipMessage,
35
+ };
37
36
  }
37
+ };
38
38
 
39
+ export const getAddHostsTabState = (cluster: OcmClusterType): AddHostsTabState => {
40
+ const isClusterStateReady = /ready|installed/.test(cluster.state);
41
+ const wasInstalledUsingAssistedInstaller = cluster.product?.id === 'OCP-AssistedInstall';
39
42
  // Checking if the Day1 cluster has reported metrics, so it can be determined if it's an SNO / multi node and has required information
40
- // If that's not the case, we will still show the tab, and the content will be an ErrorState with an explanation message
41
43
  const day1ClusterHostCount = cluster.metrics?.nodes?.total || 0;
42
- if (day1ClusterHostCount === 0 || !Day2ClusterService.getOpenshiftClusterId(cluster)) {
43
- return visibleTabResult;
44
- }
45
44
 
46
- // The cluster has metrics etc., but it's an SNO with an OpenshiftVersion that doesn't support Day2 flow
47
- if (day1ClusterHostCount === 1 && !isSNOExpansionAllowed(cluster)) {
48
- return disabledTabResult(
49
- 'OpenShift version not supported for SNO expansion. Hosts cannot be added to an existing SNO cluster that was installed with any OpenShift version older than 4.11. Upgrade to a newer OpenShift version and try again.',
50
- );
45
+ if (isClusterStateReady && wasInstalledUsingAssistedInstaller) {
46
+ let tabState = makeState('visible');
47
+ if (day1ClusterHostCount === 1 && !isSNOExpansionAllowed(cluster)) {
48
+ // The cluster has metrics etc., but it's an SNO with an OpenshiftVersion that doesn't support Day2 flow
49
+ tabState = makeState(
50
+ 'disabled',
51
+ 'OpenShift version not supported for SNO expansion. Hosts cannot be added to an existing SNO cluster that was installed with any OpenShift version older than 4.11. Upgrade to a newer OpenShift version and try again.',
52
+ );
53
+ }
54
+
55
+ return tabState;
56
+ } else {
57
+ // The cluster is not ready or was not installed using Assisted Installer.
58
+ // (see: https://issues.redhat.com/browse/HAC-3989)
59
+ return makeState('hidden');
51
60
  }
52
-
53
- // This is a cluster that supports the AI Day2 flow
54
- return visibleTabResult;
55
61
  };