@openshift-assisted/ui-lib 2.8.2-cim → 2.8.4-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 (307) hide show
  1. package/@types/cim/components/ClusterDeployment/ClusterDeploymentDetails.d.ts.map +1 -1
  2. package/@types/cim/components/ClusterDeployment/ClusterDeploymentDetailsStep.d.ts +6 -1
  3. package/@types/cim/components/ClusterDeployment/ClusterDeploymentDetailsStep.d.ts.map +1 -1
  4. package/@types/cim/components/ClusterDeployment/ClusterDeploymentHostSelectionStep.d.ts.map +1 -1
  5. package/@types/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscoveryStep.d.ts.map +1 -1
  6. package/@types/cim/components/ClusterDeployment/ClusterDeploymentHostsSelectionBasic.d.ts.map +1 -1
  7. package/@types/cim/components/ClusterDeployment/ClusterDeploymentWizardNavigation.d.ts.map +1 -1
  8. package/@types/cim/components/ClusterDeployment/ClusterDetailsFormFields.d.ts.map +1 -1
  9. package/@types/cim/components/ClusterDeployment/helpers.d.ts +1 -1
  10. package/@types/cim/components/ClusterDeployment/helpers.d.ts.map +1 -1
  11. package/@types/cim/components/ClusterDeployment/validationSchemas.d.ts.map +1 -1
  12. package/@types/cim/components/Hypershift/HostedClusterWizard/NetworkStep/types.d.ts +0 -1
  13. package/@types/cim/components/Hypershift/HostedClusterWizard/NetworkStep/types.d.ts.map +1 -1
  14. package/@types/cim/components/Hypershift/modals/ManageHostsModal.d.ts.map +1 -1
  15. package/@types/cim/components/InfraEnv/InfraEnvFormPage.d.ts +2 -0
  16. package/@types/cim/components/InfraEnv/InfraEnvFormPage.d.ts.map +1 -1
  17. package/@types/cim/components/helpers/versions.d.ts +1 -0
  18. package/@types/cim/components/helpers/versions.d.ts.map +1 -1
  19. package/@types/cim/components/modals/AddHostModal.d.ts.map +1 -1
  20. package/@types/cim/components/modals/EditProxyModal.d.ts.map +1 -1
  21. package/@types/common/components/clusterConfiguration/DiscoveryImageConfigForm.d.ts +5 -1
  22. package/@types/common/components/clusterConfiguration/DiscoveryImageConfigForm.d.ts.map +1 -1
  23. package/@types/common/components/clusterConfiguration/DownloadIso.d.ts +2 -1
  24. package/@types/common/components/clusterConfiguration/DownloadIso.d.ts.map +1 -1
  25. package/@types/common/components/clusterConfiguration/OpenShiftVersionSelect.d.ts +2 -0
  26. package/@types/common/components/clusterConfiguration/OpenShiftVersionSelect.d.ts.map +1 -1
  27. package/@types/common/components/clusterWizard/ClusterWizardStep.d.ts +1 -1
  28. package/@types/common/components/clusterWizard/ClusterWizardStep.d.ts.map +1 -1
  29. package/@types/common/components/clusterWizard/networkingSteps/ManagedNetworkingControlGroup.d.ts.map +1 -1
  30. package/@types/common/components/fetching/EventListFetch.d.ts +1 -1
  31. package/@types/common/components/fetching/EventListFetch.d.ts.map +1 -1
  32. package/@types/common/components/hosts/TableToolbar.d.ts.map +1 -1
  33. package/@types/common/components/ui/ClusterEventsToolbar.d.ts.map +1 -1
  34. package/@types/common/components/ui/StaticTextField.d.ts +1 -1
  35. package/@types/common/components/ui/StaticTextField.d.ts.map +1 -1
  36. package/@types/common/components/ui/eventsModal.d.ts +4 -8
  37. package/@types/common/components/ui/eventsModal.d.ts.map +1 -1
  38. package/@types/common/components/ui/formik/UploadField.d.ts.map +1 -1
  39. package/@types/common/components/ui/formik/types.d.ts +2 -2
  40. package/@types/common/components/ui/formik/types.d.ts.map +1 -1
  41. package/@types/common/components/ui/formik/validationSchemas.d.ts +5 -1
  42. package/@types/common/components/ui/formik/validationSchemas.d.ts.map +1 -1
  43. package/@types/common/config/constants.d.ts +2 -1
  44. package/@types/common/config/constants.d.ts.map +1 -1
  45. package/@types/common/types/events.d.ts +9 -2
  46. package/@types/common/types/events.d.ts.map +1 -1
  47. package/@types/ocm/components/AddHosts/day2Wizard/Day2ClusterDetails.d.ts.map +1 -1
  48. package/@types/ocm/components/AddHosts/day2Wizard/Day2StaticIP.d.ts.map +1 -1
  49. package/@types/ocm/components/AddHosts/day2Wizard/Day2Wizard.d.ts.map +1 -1
  50. package/@types/ocm/components/HostsClusterDetailTab/HostsClusterDetailTabContent.d.ts.map +1 -1
  51. package/@types/ocm/components/HostsClusterDetailTab/types.d.ts +5 -0
  52. package/@types/ocm/components/HostsClusterDetailTab/types.d.ts.map +1 -1
  53. package/@types/ocm/components/HostsClusterDetailTab/utils.d.ts +2 -7
  54. package/@types/ocm/components/HostsClusterDetailTab/utils.d.ts.map +1 -1
  55. package/@types/ocm/components/clusterConfiguration/CpuArchitectureDropdown.d.ts +2 -1
  56. package/@types/ocm/components/clusterConfiguration/CpuArchitectureDropdown.d.ts.map +1 -1
  57. package/@types/ocm/components/clusterConfiguration/DiscoveryImageForm.d.ts.map +1 -1
  58. package/@types/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.d.ts.map +1 -1
  59. package/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/CustomManifestsForm.d.ts.map +1 -1
  60. package/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.d.ts.map +1 -1
  61. package/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/customManifestsValidationSchema.d.ts +1 -0
  62. package/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/customManifestsValidationSchema.d.ts.map +1 -1
  63. package/@types/ocm/components/clusterConfiguration/networkConfiguration/AdvancedNetworkFields.d.ts.map +1 -1
  64. package/@types/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.d.ts.map +1 -1
  65. package/@types/ocm/components/clusterConfiguration/networkConfiguration/StackTypeControl.d.ts.map +1 -1
  66. package/@types/ocm/components/clusterConfiguration/networkConfiguration/VirtualIPControlGroup.d.ts.map +1 -1
  67. package/@types/ocm/components/clusterDetail/AssistedInstallerDetailCard.d.ts.map +1 -1
  68. package/@types/ocm/components/clusterDetail/AssistedInstallerExtraDetailCard.d.ts.map +1 -1
  69. package/@types/ocm/components/clusterWizard/ClusterWizardContextProvider.d.ts.map +1 -1
  70. package/@types/ocm/components/clusterWizard/wizardTransition.d.ts +2 -1
  71. package/@types/ocm/components/clusterWizard/wizardTransition.d.ts.map +1 -1
  72. package/@types/ocm/components/clusters/ClusterPage.d.ts.map +1 -1
  73. package/@types/ocm/components/featureSupportLevels/FeatureSupportLevelProvider.d.ts.map +1 -1
  74. package/@types/ocm/components/fetching/fetchEvents.d.ts.map +1 -1
  75. package/@types/ocm/components/newFeatureSupportLevels/NewFeatureSupportLevelProvider.d.ts.map +1 -1
  76. package/@types/ocm/components/ui/OcmFormFields.d.ts +1 -1
  77. package/@types/ocm/hooks/useClusterCustomManifests.d.ts +1 -1
  78. package/@types/ocm/hooks/useClusterCustomManifests.d.ts.map +1 -1
  79. package/@types/ocm/hooks/useInfraEnv.d.ts +1 -1
  80. package/@types/ocm/hooks/useInfraEnv.d.ts.map +1 -1
  81. package/@types/ocm/hooks/useInfraEnvId.d.ts +1 -1
  82. package/@types/ocm/hooks/useInfraEnvId.d.ts.map +1 -1
  83. package/@types/ocm/selectors/clusters.d.ts +3 -3
  84. package/@types/ocm/services/Day2ClusterService.d.ts +3 -3
  85. package/@types/ocm/services/Day2ClusterService.d.ts.map +1 -1
  86. package/@types/ocm/services/InfraEnvIdsCacheService.d.ts +1 -1
  87. package/@types/ocm/services/InfraEnvIdsCacheService.d.ts.map +1 -1
  88. package/@types/ocm/services/InfraEnvsService.d.ts +4 -3
  89. package/@types/ocm/services/InfraEnvsService.d.ts.map +1 -1
  90. package/@types/ocm/services/apis/EventsAPI.d.ts +1 -0
  91. package/@types/ocm/services/apis/EventsAPI.d.ts.map +1 -1
  92. package/@types/ocm/store/slices/infraEnvs/selectors.d.ts +1 -1
  93. package/build/build.json +1 -1
  94. package/build/cim/components/Agent/BMCForm.js +2 -2
  95. package/build/cim/components/Agent/BMCForm.js.map +1 -1
  96. package/build/cim/components/ClusterDeployment/ClusterDeploymentDetails.js +59 -56
  97. package/build/cim/components/ClusterDeployment/ClusterDeploymentDetails.js.map +1 -1
  98. package/build/cim/components/ClusterDeployment/ClusterDeploymentDetailsStep.js +10 -6
  99. package/build/cim/components/ClusterDeployment/ClusterDeploymentDetailsStep.js.map +1 -1
  100. package/build/cim/components/ClusterDeployment/ClusterDeploymentHostSelectionStep.js +1 -9
  101. package/build/cim/components/ClusterDeployment/ClusterDeploymentHostSelectionStep.js.map +1 -1
  102. package/build/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscoveryStep.js +1 -2
  103. package/build/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscoveryStep.js.map +1 -1
  104. package/build/cim/components/ClusterDeployment/ClusterDeploymentHostsSelectionBasic.js +3 -10
  105. package/build/cim/components/ClusterDeployment/ClusterDeploymentHostsSelectionBasic.js.map +1 -1
  106. package/build/cim/components/ClusterDeployment/ClusterDeploymentWizardNavigation.js +2 -2
  107. package/build/cim/components/ClusterDeployment/ClusterDeploymentWizardNavigation.js.map +1 -1
  108. package/build/cim/components/ClusterDeployment/ClusterDetailsFormFields.js +6 -2
  109. package/build/cim/components/ClusterDeployment/ClusterDetailsFormFields.js.map +1 -1
  110. package/build/cim/components/ClusterDeployment/helpers.js +46 -7
  111. package/build/cim/components/ClusterDeployment/helpers.js.map +1 -1
  112. package/build/cim/components/ClusterDeployment/use-networking-formik.js +2 -2
  113. package/build/cim/components/ClusterDeployment/use-networking-formik.js.map +1 -1
  114. package/build/cim/components/ClusterDeployment/validationSchemas.js +0 -1
  115. package/build/cim/components/ClusterDeployment/validationSchemas.js.map +1 -1
  116. package/build/cim/components/Hypershift/HostedClusterWizard/NetworkStep/NetworkStep.js +2 -2
  117. package/build/cim/components/Hypershift/HostedClusterWizard/NetworkStep/NetworkStep.js.map +1 -1
  118. package/build/cim/components/Hypershift/modals/ManageHostsModal.js +1 -6
  119. package/build/cim/components/Hypershift/modals/ManageHostsModal.js.map +1 -1
  120. package/build/cim/components/Hypershift/utils/nodepool.js +5 -5
  121. package/build/cim/components/Hypershift/utils/nodepool.js.map +1 -1
  122. package/build/cim/components/InfraEnv/InfraEnvFormPage.js +13 -5
  123. package/build/cim/components/InfraEnv/InfraEnvFormPage.js.map +1 -1
  124. package/build/cim/components/helpers/versions.js +1 -0
  125. package/build/cim/components/helpers/versions.js.map +1 -1
  126. package/build/cim/components/modals/AddHostModal.js +4 -4
  127. package/build/cim/components/modals/AddHostModal.js.map +1 -1
  128. package/build/cim/components/modals/EditProxyModal.js +18 -7
  129. package/build/cim/components/modals/EditProxyModal.js.map +1 -1
  130. package/build/common/components/clusterConfiguration/DiscoveryImageConfigForm.js +9 -9
  131. package/build/common/components/clusterConfiguration/DiscoveryImageConfigForm.js.map +1 -1
  132. package/build/common/components/clusterConfiguration/DownloadIso.js +2 -2
  133. package/build/common/components/clusterConfiguration/DownloadIso.js.map +1 -1
  134. package/build/common/components/clusterConfiguration/OpenShiftVersionSelect.js +2 -2
  135. package/build/common/components/clusterConfiguration/OpenShiftVersionSelect.js.map +1 -1
  136. package/build/common/components/clusterWizard/ClusterWizardStep.js +1 -1
  137. package/build/common/components/clusterWizard/ClusterWizardStep.js.map +1 -1
  138. package/build/common/components/clusterWizard/networkingSteps/ManagedNetworkingControlGroup.js +5 -2
  139. package/build/common/components/clusterWizard/networkingSteps/ManagedNetworkingControlGroup.js.map +1 -1
  140. package/build/common/components/clusterWizard/networkingSteps/NetworkTypeControlGroup.js +1 -1
  141. package/build/common/components/clusterWizard/networkingSteps/NetworkTypeControlGroup.js.map +1 -1
  142. package/build/common/components/fetching/EventListFetch.js +14 -25
  143. package/build/common/components/fetching/EventListFetch.js.map +1 -1
  144. package/build/common/components/hosts/TableToolbar.js +3 -3
  145. package/build/common/components/hosts/TableToolbar.js.map +1 -1
  146. package/build/common/components/hosts/status.js +1 -1
  147. package/build/common/components/hosts/status.js.map +1 -1
  148. package/build/common/components/ui/ClusterEventsToolbar.js +1 -1
  149. package/build/common/components/ui/ClusterEventsToolbar.js.map +1 -1
  150. package/build/common/components/ui/eventsModal.js +12 -6
  151. package/build/common/components/ui/eventsModal.js.map +1 -1
  152. package/build/common/components/ui/formik/CodeField.js +1 -1
  153. package/build/common/components/ui/formik/CodeField.js.map +1 -1
  154. package/build/common/components/ui/formik/SelectField.js +1 -1
  155. package/build/common/components/ui/formik/SelectField.js.map +1 -1
  156. package/build/common/components/ui/formik/UploadField.js +1 -2
  157. package/build/common/components/ui/formik/UploadField.js.map +1 -1
  158. package/build/common/components/ui/formik/validationSchemas.js +20 -13
  159. package/build/common/components/ui/formik/validationSchemas.js.map +1 -1
  160. package/build/common/config/constants.js +3 -1
  161. package/build/common/config/constants.js.map +1 -1
  162. package/build/ocm/components/AddHosts/day2Wizard/Day2ClusterDetails.js +94 -20
  163. package/build/ocm/components/AddHosts/day2Wizard/Day2ClusterDetails.js.map +1 -1
  164. package/build/ocm/components/AddHosts/day2Wizard/Day2DownloadISO.js +1 -1
  165. package/build/ocm/components/AddHosts/day2Wizard/Day2DownloadISO.js.map +1 -1
  166. package/build/ocm/components/AddHosts/day2Wizard/Day2StaticIP.js +16 -9
  167. package/build/ocm/components/AddHosts/day2Wizard/Day2StaticIP.js.map +1 -1
  168. package/build/ocm/components/AddHosts/day2Wizard/Day2Wizard.js +1 -1
  169. package/build/ocm/components/AddHosts/day2Wizard/Day2Wizard.js.map +1 -1
  170. package/build/ocm/components/HostsClusterDetailTab/HostsClusterDetailTabContent.js +5 -2
  171. package/build/ocm/components/HostsClusterDetailTab/HostsClusterDetailTabContent.js.map +1 -1
  172. package/build/ocm/components/HostsClusterDetailTab/utils.js +35 -29
  173. package/build/ocm/components/HostsClusterDetailTab/utils.js.map +1 -1
  174. package/build/ocm/components/clusterConfiguration/CpuArchitectureDropdown.js +5 -4
  175. package/build/ocm/components/clusterConfiguration/CpuArchitectureDropdown.js.map +1 -1
  176. package/build/ocm/components/clusterConfiguration/DiscoveryImageForm.js +3 -1
  177. package/build/ocm/components/clusterConfiguration/DiscoveryImageForm.js.map +1 -1
  178. package/build/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.js +11 -8
  179. package/build/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.js.map +1 -1
  180. package/build/ocm/components/clusterConfiguration/manifestsConfiguration/components/CustomManifestsForm.js +49 -21
  181. package/build/ocm/components/clusterConfiguration/manifestsConfiguration/components/CustomManifestsForm.js.map +1 -1
  182. package/build/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.js +3 -9
  183. package/build/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.js.map +1 -1
  184. package/build/ocm/components/clusterConfiguration/manifestsConfiguration/components/customManifestsValidationSchema.js +37 -2
  185. package/build/ocm/components/clusterConfiguration/manifestsConfiguration/components/customManifestsValidationSchema.js.map +1 -1
  186. package/build/ocm/components/clusterConfiguration/networkConfiguration/AdvancedNetworkFields.js +16 -5
  187. package/build/ocm/components/clusterConfiguration/networkConfiguration/AdvancedNetworkFields.js.map +1 -1
  188. package/build/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.js +5 -2
  189. package/build/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.js.map +1 -1
  190. package/build/ocm/components/clusterConfiguration/networkConfiguration/StackTypeControl.js +1 -2
  191. package/build/ocm/components/clusterConfiguration/networkConfiguration/StackTypeControl.js.map +1 -1
  192. package/build/ocm/components/clusterConfiguration/networkConfiguration/VirtualIPControlGroup.js +27 -16
  193. package/build/ocm/components/clusterConfiguration/networkConfiguration/VirtualIPControlGroup.js.map +1 -1
  194. package/build/ocm/components/clusterConfiguration/platformIntegration/PlatformIntegration.js +1 -1
  195. package/build/ocm/components/clusterConfiguration/platformIntegration/PlatformIntegration.js.map +1 -1
  196. package/build/ocm/components/clusterDetail/AssistedInstallerDetailCard.js +7 -2
  197. package/build/ocm/components/clusterDetail/AssistedInstallerDetailCard.js.map +1 -1
  198. package/build/ocm/components/clusterDetail/AssistedInstallerExtraDetailCard.js +7 -2
  199. package/build/ocm/components/clusterDetail/AssistedInstallerExtraDetailCard.js.map +1 -1
  200. package/build/ocm/components/clusterWizard/ClusterWizardContextProvider.js +13 -3
  201. package/build/ocm/components/clusterWizard/ClusterWizardContextProvider.js.map +1 -1
  202. package/build/ocm/components/clusterWizard/wizardTransition.js +10 -2
  203. package/build/ocm/components/clusterWizard/wizardTransition.js.map +1 -1
  204. package/build/ocm/components/clusters/ClusterPage.js +10 -4
  205. package/build/ocm/components/clusters/ClusterPage.js.map +1 -1
  206. package/build/ocm/components/featureSupportLevels/FeatureSupportLevelProvider.js +5 -2
  207. package/build/ocm/components/featureSupportLevels/FeatureSupportLevelProvider.js.map +1 -1
  208. package/build/ocm/components/fetching/fetchEvents.js +25 -4
  209. package/build/ocm/components/fetching/fetchEvents.js.map +1 -1
  210. package/build/ocm/components/newFeatureSupportLevels/NewFeatureSupportLevelProvider.js +5 -2
  211. package/build/ocm/components/newFeatureSupportLevels/NewFeatureSupportLevelProvider.js.map +1 -1
  212. package/build/ocm/hooks/useClusterCustomManifests.js +5 -3
  213. package/build/ocm/hooks/useClusterCustomManifests.js.map +1 -1
  214. package/build/ocm/hooks/useInfraEnv.js +2 -2
  215. package/build/ocm/hooks/useInfraEnv.js.map +1 -1
  216. package/build/ocm/hooks/useInfraEnvId.js +18 -3
  217. package/build/ocm/hooks/useInfraEnvId.js.map +1 -1
  218. package/build/ocm/hooks/useInfraEnvImageUrl.js +1 -1
  219. package/build/ocm/hooks/useInfraEnvImageUrl.js.map +1 -1
  220. package/build/ocm/hooks/useInfraEnvIpxeImageUrl.js +1 -1
  221. package/build/ocm/hooks/useInfraEnvIpxeImageUrl.js.map +1 -1
  222. package/build/ocm/services/ClustersService.js +2 -2
  223. package/build/ocm/services/ClustersService.js.map +1 -1
  224. package/build/ocm/services/Day2ClusterService.js +11 -20
  225. package/build/ocm/services/Day2ClusterService.js.map +1 -1
  226. package/build/ocm/services/InfraEnvIdsCacheService.js +5 -4
  227. package/build/ocm/services/InfraEnvIdsCacheService.js.map +1 -1
  228. package/build/ocm/services/InfraEnvsService.js +7 -4
  229. package/build/ocm/services/InfraEnvsService.js.map +1 -1
  230. package/build/ocm/services/apis/EventsAPI.js +13 -1
  231. package/build/ocm/services/apis/EventsAPI.js.map +1 -1
  232. package/lib/cim/components/Agent/BMCForm.tsx +2 -2
  233. package/lib/cim/components/ClusterDeployment/ClusterDeploymentDetails.tsx +112 -101
  234. package/lib/cim/components/ClusterDeployment/ClusterDeploymentDetailsStep.tsx +17 -5
  235. package/lib/cim/components/ClusterDeployment/ClusterDeploymentHostSelectionStep.tsx +1 -12
  236. package/lib/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscoveryStep.tsx +1 -2
  237. package/lib/cim/components/ClusterDeployment/ClusterDeploymentHostsSelectionBasic.tsx +2 -10
  238. package/lib/cim/components/ClusterDeployment/ClusterDeploymentWizardNavigation.tsx +7 -2
  239. package/lib/cim/components/ClusterDeployment/ClusterDetailsFormFields.tsx +9 -2
  240. package/lib/cim/components/ClusterDeployment/helpers.ts +65 -15
  241. package/lib/cim/components/ClusterDeployment/use-networking-formik.ts +2 -2
  242. package/lib/cim/components/ClusterDeployment/validationSchemas.ts +0 -1
  243. package/lib/cim/components/Hypershift/HostedClusterWizard/NetworkStep/NetworkStep.tsx +2 -2
  244. package/lib/cim/components/Hypershift/HostedClusterWizard/NetworkStep/types.ts +0 -1
  245. package/lib/cim/components/Hypershift/modals/ManageHostsModal.tsx +1 -6
  246. package/lib/cim/components/Hypershift/utils/nodepool.ts +1 -1
  247. package/lib/cim/components/InfraEnv/InfraEnvFormPage.tsx +21 -4
  248. package/lib/cim/components/helpers/versions.ts +5 -0
  249. package/lib/cim/components/modals/AddHostModal.tsx +6 -0
  250. package/lib/cim/components/modals/EditProxyModal.tsx +15 -3
  251. package/lib/common/components/clusterConfiguration/DiscoveryImageConfigForm.tsx +18 -13
  252. package/lib/common/components/clusterConfiguration/DownloadIso.tsx +3 -1
  253. package/lib/common/components/clusterConfiguration/OpenShiftVersionSelect.tsx +4 -1
  254. package/lib/common/components/clusterWizard/ClusterWizardStep.tsx +5 -1
  255. package/lib/common/components/clusterWizard/networkingSteps/ManagedNetworkingControlGroup.tsx +11 -2
  256. package/lib/common/components/clusterWizard/networkingSteps/NetworkTypeControlGroup.tsx +1 -1
  257. package/lib/common/components/fetching/EventListFetch.tsx +31 -41
  258. package/lib/common/components/hosts/TableToolbar.tsx +3 -3
  259. package/lib/common/components/hosts/status.tsx +1 -1
  260. package/lib/common/components/ui/ClusterEventsToolbar.tsx +3 -0
  261. package/lib/common/components/ui/StaticTextField.tsx +1 -1
  262. package/lib/common/components/ui/eventsModal.tsx +28 -23
  263. package/lib/common/components/ui/formik/CodeField.tsx +1 -1
  264. package/lib/common/components/ui/formik/SelectField.tsx +1 -1
  265. package/lib/common/components/ui/formik/UploadField.tsx +2 -3
  266. package/lib/common/components/ui/formik/types.ts +2 -1
  267. package/lib/common/components/ui/formik/validationSchemas.test.ts +6 -0
  268. package/lib/common/components/ui/formik/validationSchemas.ts +33 -15
  269. package/lib/common/config/constants.ts +6 -2
  270. package/lib/common/types/events.ts +10 -3
  271. package/lib/ocm/components/AddHosts/day2Wizard/Day2ClusterDetails.tsx +129 -21
  272. package/lib/ocm/components/AddHosts/day2Wizard/Day2DownloadISO.tsx +1 -1
  273. package/lib/ocm/components/AddHosts/day2Wizard/Day2StaticIP.tsx +15 -10
  274. package/lib/ocm/components/AddHosts/day2Wizard/Day2Wizard.tsx +1 -0
  275. package/lib/ocm/components/HostsClusterDetailTab/HostsClusterDetailTabContent.tsx +7 -3
  276. package/lib/ocm/components/HostsClusterDetailTab/types.ts +6 -0
  277. package/lib/ocm/components/HostsClusterDetailTab/utils.ts +43 -37
  278. package/lib/ocm/components/clusterConfiguration/CpuArchitectureDropdown.tsx +6 -3
  279. package/lib/ocm/components/clusterConfiguration/DiscoveryImageForm.tsx +9 -1
  280. package/lib/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.tsx +25 -16
  281. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/components/CustomManifestsForm.tsx +69 -32
  282. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.tsx +3 -14
  283. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/components/customManifestsValidationSchema.tsx +59 -24
  284. package/lib/ocm/components/clusterConfiguration/networkConfiguration/AdvancedNetworkFields.tsx +29 -8
  285. package/lib/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.tsx +11 -2
  286. package/lib/ocm/components/clusterConfiguration/networkConfiguration/StackTypeControl.tsx +6 -13
  287. package/lib/ocm/components/clusterConfiguration/networkConfiguration/VirtualIPControlGroup.tsx +30 -32
  288. package/lib/ocm/components/clusterConfiguration/platformIntegration/PlatformIntegration.tsx +1 -1
  289. package/lib/ocm/components/clusterDetail/AssistedInstallerDetailCard.tsx +14 -2
  290. package/lib/ocm/components/clusterDetail/AssistedInstallerExtraDetailCard.tsx +11 -2
  291. package/lib/ocm/components/clusterWizard/ClusterWizardContextProvider.tsx +20 -2
  292. package/lib/ocm/components/clusterWizard/wizardTransition.ts +13 -1
  293. package/lib/ocm/components/clusters/ClusterPage.tsx +19 -5
  294. package/lib/ocm/components/featureSupportLevels/FeatureSupportLevelProvider.tsx +8 -2
  295. package/lib/ocm/components/fetching/fetchEvents.ts +31 -5
  296. package/lib/ocm/components/newFeatureSupportLevels/NewFeatureSupportLevelProvider.tsx +8 -2
  297. package/lib/ocm/hooks/useClusterCustomManifests.ts +9 -3
  298. package/lib/ocm/hooks/useInfraEnv.ts +10 -1
  299. package/lib/ocm/hooks/useInfraEnvId.ts +24 -4
  300. package/lib/ocm/hooks/useInfraEnvImageUrl.ts +1 -1
  301. package/lib/ocm/hooks/useInfraEnvIpxeImageUrl.ts +1 -1
  302. package/lib/ocm/services/ClustersService.ts +2 -2
  303. package/lib/ocm/services/Day2ClusterService.ts +12 -42
  304. package/lib/ocm/services/InfraEnvIdsCacheService.ts +9 -6
  305. package/lib/ocm/services/InfraEnvsService.ts +12 -13
  306. package/lib/ocm/services/apis/EventsAPI.ts +15 -1
  307. package/package.json +1 -1
@@ -50,8 +50,8 @@ export type OcmDiscoveryImageFormValues = OcmImageCreateParams &
50
50
  const validationSchema = Yup.lazy<OcmDiscoveryImageFormValues>((values) =>
51
51
  Yup.object<OcmDiscoveryImageFormValues>().shape({
52
52
  sshPublicKey: sshPublicKeyListValidationSchema,
53
- httpProxy: httpProxyValidationSchema(values, 'httpProxy'),
54
- httpsProxy: httpProxyValidationSchema(values, 'httpsProxy'), // share the schema, httpS is currently not supported
53
+ httpProxy: httpProxyValidationSchema({ values, pairValueName: 'httpProxy' }),
54
+ httpsProxy: httpProxyValidationSchema({ values, pairValueName: 'httpsProxy' }), // share the schema, httpS is currently not supported
55
55
  noProxy: noProxyValidationSchema,
56
56
  }),
57
57
  );
@@ -131,7 +131,7 @@ export const OcmDiscoveryImageConfigForm = ({
131
131
  validationSchema={validationSchema}
132
132
  onSubmit={handleSubmit}
133
133
  >
134
- {({ submitForm, isSubmitting, status }) => {
134
+ {({ submitForm, isSubmitting, status, setStatus }) => {
135
135
  return (
136
136
  <>
137
137
  <ModalBoxBody>
@@ -142,7 +142,6 @@ export const OcmDiscoveryImageConfigForm = ({
142
142
 
143
143
  <StackItem>
144
144
  <Form>
145
- <AlertFormikError status={status as StatusErrorType} />
146
145
  <DiscoveryImageTypeDropdown
147
146
  name="imageType"
148
147
  defaultValue={discoveryImageTypes[imageTypeValue]}
@@ -161,18 +160,28 @@ export const OcmDiscoveryImageConfigForm = ({
161
160
  </Stack>
162
161
  </ModalBoxBody>
163
162
  <ModalBoxFooter>
164
- <Button
165
- onClick={() => {
166
- void submitForm();
167
- }}
168
- isDisabled={isSubmitting}
169
- isLoading={isSubmitting}
170
- >
171
- {isSubmitting ? t('ai:Generating') : buttonText}
172
- </Button>
173
- <Button key="cancel" variant="link" onClick={onCancel}>
174
- {t('ai:Cancel')}
175
- </Button>
163
+ <Stack hasGutter style={{ width: '100%' }}>
164
+ <StackItem>
165
+ <AlertFormikError
166
+ status={status as StatusErrorType}
167
+ onClose={() => setStatus(undefined)}
168
+ />
169
+ </StackItem>
170
+ <StackItem>
171
+ <Button
172
+ onClick={() => {
173
+ void submitForm();
174
+ }}
175
+ isDisabled={isSubmitting}
176
+ isLoading={isSubmitting}
177
+ >
178
+ {isSubmitting ? t('ai:Generating') : buttonText}
179
+ </Button>
180
+ <Button key="cancel" variant="link" onClick={onCancel}>
181
+ {t('ai:Cancel')}
182
+ </Button>
183
+ </StackItem>
184
+ </Stack>
176
185
  </ModalBoxFooter>
177
186
  </>
178
187
  );
@@ -1,11 +1,13 @@
1
1
  import React, { PropsWithChildren } from 'react';
2
2
  import { useSelector } from 'react-redux';
3
- import { Form } from '@patternfly/react-core';
3
+ import { Form, debounce } from '@patternfly/react-core';
4
4
  import {
5
5
  FieldArray,
6
6
  FieldArrayRenderProps,
7
7
  Formik,
8
8
  FormikConfig,
9
+ FormikErrors,
10
+ FormikHelpers,
9
11
  useFormikContext,
10
12
  yupToFormErrors,
11
13
  } from 'formik';
@@ -68,6 +70,33 @@ const getManifestDetails = (
68
70
  };
69
71
  };
70
72
 
73
+ const handleApiErrorInForm = (
74
+ manifests: CustomManifestValues[],
75
+ manifestsThatExists: CustomManifestValues[],
76
+ actions: FormikHelpers<ManifestFormData>,
77
+ ) => {
78
+ const errors: FormikErrors<ManifestFormData> = {};
79
+ errors.manifests = [];
80
+ manifests.forEach((manifest) => {
81
+ (errors.manifests as FormikErrors<CustomManifestValues>[]).push({
82
+ fakeId: manifest.fakeId,
83
+ folder: '',
84
+ filename: '',
85
+ manifestYaml: '',
86
+ });
87
+ });
88
+ errors.manifests.forEach((errorManifest) => {
89
+ manifestsThatExists.forEach((updatedManifest) => {
90
+ if ((errorManifest as CustomManifestValues).fakeId === updatedManifest.fakeId) {
91
+ (errorManifest as CustomManifestValues).manifestYaml =
92
+ 'Failed to update the existing manifest';
93
+ }
94
+ });
95
+ });
96
+
97
+ actions.setErrors(errors);
98
+ };
99
+
71
100
  export const CustomManifestsForm = ({
72
101
  onFormStateChange,
73
102
  getEmptyValues,
@@ -78,36 +107,42 @@ export const CustomManifestsForm = ({
78
107
  const { isViewerMode } = useSelector(selectCurrentClusterPermissionsState);
79
108
  const [initialValues, setInitialValues] = React.useState<ManifestFormData | undefined>();
80
109
  const { addAlert, clearAlerts } = useAlerts();
81
- const { customManifests, isLoading, error } = useClusterCustomManifests(cluster.id || '', true);
110
+ const [refreshFlag, setRefreshFlag] = React.useState<boolean>(true);
111
+ const { customManifests, isLoading, error } = useClusterCustomManifests(
112
+ cluster.id || '',
113
+ true,
114
+ refreshFlag,
115
+ );
82
116
  React.useEffect(() => {
83
117
  if (customManifests) {
84
118
  setInitialValues(getInitialValues(customManifests));
85
119
  }
86
120
  }, [customManifests, getInitialValues]);
87
121
 
122
+ const refreshCustomManifests = () => {
123
+ setRefreshFlag((refreshFlag) => !refreshFlag);
124
+ };
125
+
88
126
  const handleSubmit: FormikConfig<ManifestFormData>['onSubmit'] = React.useCallback(
89
127
  async (values, actions) => {
90
128
  clearAlerts();
91
129
  actions.setSubmitting(true);
92
- try {
93
- const manifests = values.manifests;
94
- const manifestsModified = manifests.filter(
95
- (manifest) =>
96
- !customManifests?.some(
97
- (customManifest) =>
98
- customManifest.folder === manifest.folder &&
99
- customManifest.fileName === manifest.filename &&
100
- customManifest.yamlContent === manifest.manifestYaml,
101
- ),
102
- );
103
- if (cluster && manifestsModified.length > 0) {
104
- //See if manifests exists previously to make a patch or create a new one
105
- const manifestsThatExists = manifestsModified.filter(
106
- (manifest) => manifest.fakeId !== '',
107
- );
108
- const newManifestsToCreate = manifestsModified.filter(
109
- (manifest) => manifest.fakeId === '',
110
- );
130
+
131
+ const manifests = values.manifests;
132
+ const manifestsModified = manifests.filter(
133
+ (manifest) =>
134
+ !customManifests?.some(
135
+ (customManifest) =>
136
+ customManifest.folder === manifest.folder &&
137
+ customManifest.fileName === manifest.filename &&
138
+ customManifest.yamlContent === manifest.manifestYaml,
139
+ ),
140
+ );
141
+ if (cluster && manifestsModified.length > 0) {
142
+ //See if manifests exists previously to make a patch or create a new one
143
+ const manifestsThatExists = manifestsModified.filter((manifest) => manifest.fakeId !== '');
144
+ const newManifestsToCreate = manifestsModified.filter((manifest) => manifest.fakeId === '');
145
+ try {
111
146
  const manifestsRequests = manifestsThatExists.map((updatedManifest) => {
112
147
  const { folderName, fileName } = getManifestDetails(updatedManifest);
113
148
 
@@ -124,26 +159,28 @@ export const CustomManifestsForm = ({
124
159
  );
125
160
  });
126
161
  await Promise.all(manifestsRequests);
127
-
162
+ refreshCustomManifests();
128
163
  if (newManifestsToCreate.length > 0) {
129
164
  await ClustersService.createClusterManifests(newManifestsToCreate, cluster?.id);
165
+ refreshCustomManifests();
130
166
  }
167
+ } catch (e) {
168
+ handleApiErrorInForm(manifests, manifestsThatExists, actions);
169
+ handleApiError(e, () =>
170
+ addAlert({
171
+ title: 'Failed to update the custom manifests',
172
+ message: getApiErrorMessage(e),
173
+ }),
174
+ );
175
+ } finally {
176
+ actions.setSubmitting(false);
131
177
  }
132
- } catch (e) {
133
- handleApiError(e, () =>
134
- addAlert({
135
- title: 'Failed to update the custom manifests',
136
- message: getApiErrorMessage(e),
137
- }),
138
- );
139
- } finally {
140
- actions.setSubmitting(false);
141
178
  }
142
179
  },
143
180
  [addAlert, clearAlerts, cluster, customManifests],
144
181
  );
145
182
 
146
- const onSubmit = isViewerMode ? () => Promise.resolve() : handleSubmit;
183
+ const onSubmit = isViewerMode ? () => Promise.resolve() : debounce(handleSubmit, 1000);
147
184
 
148
185
  const validate = (values: ManifestFormData) => {
149
186
  try {
@@ -6,28 +6,17 @@ import {
6
6
  HelperText,
7
7
  FormGroup,
8
8
  } from '@patternfly/react-core';
9
- import { CaretDownIcon, ExternalLinkAltIcon } from '@patternfly/react-icons';
9
+ import { CaretDownIcon } from '@patternfly/react-icons';
10
10
  import { useField } from 'formik';
11
11
  import { getFieldId } from '../../../../../common/components/ui/formik';
12
- import { CUSTOM_MANIFESTS_HELP_LINK, PopoverIcon } from '../../../../../common';
12
+ import { PopoverIcon } from '../../../../../common';
13
13
 
14
14
  const FolderLabel = () => {
15
15
  return (
16
16
  <>
17
17
  Folder{' '}
18
18
  <PopoverIcon
19
- bodyContent={
20
- <>
21
- Use documentation to help you select the right folder for the manifest you want to add.{' '}
22
- <a
23
- href={CUSTOM_MANIFESTS_HELP_LINK as string}
24
- target="_blank"
25
- rel="noopener noreferrer"
26
- >
27
- {'Learn more'} <ExternalLinkAltIcon />
28
- </a>
29
- </>
30
- }
19
+ bodyContent={<>To overwrite a manifest, select the folder the existing manifest is in.</>}
31
20
  />
32
21
  </>
33
22
  );
@@ -1,36 +1,37 @@
1
1
  import * as Yup from 'yup';
2
2
  import { UniqueStringArrayExtractor } from '../../staticIp/commonValidationSchemas';
3
3
  import { CustomManifestValues, ManifestFormData } from '../data/dataTypes';
4
+ import { load } from 'js-yaml';
4
5
 
6
+ const MAX_FILE_SIZE = 100000; //100 kb
5
7
  const FILENAME_REGEX = /^[^/]*\.(yaml|yml|json)$/;
6
8
  const INCORRECT_FILENAME = 'Must have a yaml, yml or json extension and can not contain /.';
9
+ const INCORRECT_TYPE_FILE = 'File type is not supported. File type must be yaml, yml or json.';
10
+ const UNIQUE_FOLDER_FILENAME =
11
+ 'Ensure unique file names within each folder to avoid conflicts and errors.';
7
12
 
8
13
  export const getUniqueValidationSchema = <FormValues,>(
9
14
  uniqueStringArrayExtractor: UniqueStringArrayExtractor<FormValues>,
10
15
  ) => {
11
- return Yup.string().test(
12
- 'unique',
13
- 'Folder and file name must be unique',
14
- function (value: string) {
15
- const context = this.options.context as Yup.TestContext & { values?: FormValues };
16
- if (!context || !context.values) {
17
- return this.createError({
18
- message: 'Unexpected error: Yup test context should contain form values',
19
- });
20
- }
21
-
22
- const values = uniqueStringArrayExtractor(context.values, this, value);
23
-
24
- const setValues = new Set(values);
25
-
26
- if (!values) {
27
- return this.createError({
28
- message: 'Unexpected error: Failed to get values to test uniqueness',
29
- });
30
- }
31
- return values.length === setValues.size;
32
- },
33
- );
16
+ return Yup.string().test('unique', UNIQUE_FOLDER_FILENAME, function (value: string) {
17
+ const context = this.options.context as Yup.TestContext & { values?: FormValues };
18
+ if (!context || !context.values) {
19
+ return this.createError({
20
+ message: 'Unexpected error: Yup test context should contain form values',
21
+ });
22
+ }
23
+
24
+ const values = uniqueStringArrayExtractor(context.values, this, value);
25
+
26
+ const setValues = new Set(values);
27
+
28
+ if (!values) {
29
+ return this.createError({
30
+ message: 'Unexpected error: Failed to get values to test uniqueness',
31
+ });
32
+ }
33
+ return values.length === setValues.size;
34
+ });
34
35
  };
35
36
 
36
37
  const getAllManifests: UniqueStringArrayExtractor<ManifestFormData> = (values: ManifestFormData) =>
@@ -49,7 +50,10 @@ export const getFormViewManifestsValidationSchema = Yup.lazy<ManifestFormData>((
49
50
  return validateFileName(value);
50
51
  })
51
52
  .concat(getUniqueValidationSchema(getAllManifests)),
52
- manifestYaml: Yup.string().required('Required'),
53
+ manifestYaml: Yup.string()
54
+ .required('Required')
55
+ .test('not-big-file', getMaxFileSizeMessage, validateFileSize)
56
+ .test('not-valid-file', INCORRECT_TYPE_FILE, validateFileType),
53
57
  }),
54
58
  ),
55
59
  }),
@@ -58,3 +62,34 @@ export const getFormViewManifestsValidationSchema = Yup.lazy<ManifestFormData>((
58
62
  export const validateFileName = (fileName: string) => {
59
63
  return new RegExp(FILENAME_REGEX).test((fileName || '').toString());
60
64
  };
65
+
66
+ export const validateFileType = (value: string) => {
67
+ return isStringValidYAML(value) || isStringValidJSON(value);
68
+ };
69
+
70
+ const isStringValidYAML = (input: string): boolean => {
71
+ try {
72
+ load(input);
73
+ return true;
74
+ } catch {
75
+ return false;
76
+ }
77
+ };
78
+
79
+ const isStringValidJSON = (input: string): boolean => {
80
+ try {
81
+ JSON.parse(input);
82
+ return true;
83
+ } catch {
84
+ return false;
85
+ }
86
+ };
87
+
88
+ const validateFileSize = (value: string): boolean => {
89
+ const contentFile = new Blob([value], { type: 'text/plain;charset=utf-8' });
90
+ return contentFile.size <= MAX_FILE_SIZE;
91
+ };
92
+
93
+ const getMaxFileSizeMessage = (): string => {
94
+ return `File size is too big. Upload a new ${MAX_FILE_SIZE / 1000} or less.`;
95
+ };
@@ -21,11 +21,14 @@ const getNetworkLabelSuffix = (index: number, isDualStack: boolean) => {
21
21
  return isDualStack ? ` (${index === 0 ? 'IPv4' : 'IPv6'})` : '';
22
22
  };
23
23
 
24
- const IPv4PrefixHelperText =
25
- 'The subnet prefix length to assign to each individual node. For example, if Cluster Network Host Prefix is set to 23, then each node is assigned a /23 subnet out of the given cidr (clusterNetworkCIDR), which allows for 510 (2^(32 - 23) - 2) pod IPs addresses. If you are required to provide access to nodes from an external network, configure load balancers and routers to manage the traffic.';
24
+ const IPv4PrefixPopoverText =
25
+ 'For example, if Cluster Network Host Prefix is set to 23, then each node is assigned a /23 subnet out of the given cidr (clusterNetworkCIDR), which allows for 510 (2^(32 - 23) - 2) pod IPs addresses.';
26
26
 
27
- const IPv6PrefixHelperText =
28
- 'The subnet prefix length to assign to each individual node. For example, if Cluster Network Host Prefix is set to 116, then each node is assigned a /116 subnet out of the given cidr (clusterNetworkCIDR), which allows for 4,094 (2^(128 - 116) - 2) pod IPs addresses. If you are required to provide access to nodes from an external network, configure load balancers and routers to manage the traffic.';
27
+ const IPv6PrefixPopoverText =
28
+ 'For example, if Cluster Network Host Prefix is set to 116, then each node is assigned a /116 subnet out of the given cidr (clusterNetworkCIDR), which allows for 4,094 (2^(128 - 116) - 2) pod IPs addresses.';
29
+
30
+ const ClusterPrefixHelperText =
31
+ 'Defines how big the subnets for each individual node are out of the given CIDR. Must enter a whole number.';
29
32
 
30
33
  const clusterCidrHelperText =
31
34
  'The block must not overlap with existing physical networks. To access the Pods from an external network, configure load balancers and routers to manage the traffic.';
@@ -45,8 +48,18 @@ const AdvancedNetworkFields = () => {
45
48
 
46
49
  const isSubnetIPv6 = (index: number) => (isDualStack ? !!index : false);
47
50
 
48
- const clusterNetworkHostPrefixHelperText = (index: number) =>
49
- isSubnetIPv6(index) ? IPv6PrefixHelperText : IPv4PrefixHelperText;
51
+ const clusterNetworkHostPrefixPopoverText = (index: number) => (
52
+ <>
53
+ <p>
54
+ The subnet prefix length to assign to each individual node.{' '}
55
+ {isSubnetIPv6(index) ? IPv6PrefixPopoverText : IPv4PrefixPopoverText}
56
+ </p>
57
+ <p>
58
+ If you are required to provide access to nodes from an external network, configure load
59
+ balancers and routers to manage the traffic.
60
+ </p>
61
+ </>
62
+ );
50
63
 
51
64
  return (
52
65
  <Grid hasGutter className="pf-u-ml-lg">
@@ -76,7 +89,15 @@ const AdvancedNetworkFields = () => {
76
89
  <StackItem className={'network-field-group pf-u-pb-md'}>
77
90
  <OcmInputField
78
91
  name={`clusterNetworks.${index}.hostPrefix`}
79
- label={`Cluster network host prefix${networkSuffix}`}
92
+ label={
93
+ <>
94
+ <span>Cluster network host prefix{networkSuffix} </span>
95
+ <PopoverIcon
96
+ bodyContent={clusterNetworkHostPrefixPopoverText(index)}
97
+ minWidth="30rem"
98
+ />
99
+ </>
100
+ }
80
101
  type={TextInputTypes.number}
81
102
  min={clusterNetworkCidrPrefix(index)}
82
103
  max={
@@ -84,7 +105,7 @@ const AdvancedNetworkFields = () => {
84
105
  ? PREFIX_MAX_RESTRICTION.IPv6
85
106
  : PREFIX_MAX_RESTRICTION.IPv4
86
107
  }
87
- helperText={clusterNetworkHostPrefixHelperText(index)}
108
+ helperText={ClusterPrefixHelperText}
88
109
  isRequired
89
110
  />
90
111
  </StackItem>
@@ -38,7 +38,7 @@ import { captureException } from '../../../sentry';
38
38
  import { ClustersService } from '../../../services';
39
39
  import { setServerUpdateError, updateClusterBase } from '../../../reducers/clusters';
40
40
  import { isUnknownServerError, getApiErrorMessage, handleApiError } from '../../../api';
41
- import { useClusterSupportedPlatforms } from '../../../hooks';
41
+ import { useClusterSupportedPlatforms, usePullSecret } from '../../../hooks';
42
42
 
43
43
  const NetworkConfigurationForm: React.FC<{
44
44
  cluster: Cluster;
@@ -127,11 +127,20 @@ const NetworkConfigurationForm: React.FC<{
127
127
  };
128
128
 
129
129
  const NetworkConfigurationPage = ({ cluster }: { cluster: Cluster }) => {
130
+ const pullSecret = usePullSecret();
130
131
  const {
131
132
  infraEnv,
132
133
  error: infraEnvError,
133
134
  isLoading,
134
- } = useInfraEnv(cluster.id, CpuArchitecture.USE_DAY1_ARCHITECTURE);
135
+ } = useInfraEnv(
136
+ cluster.id,
137
+ cluster.cpuArchitecture
138
+ ? (cluster.cpuArchitecture as CpuArchitecture)
139
+ : CpuArchitecture.USE_DAY1_ARCHITECTURE,
140
+ cluster.name,
141
+ pullSecret,
142
+ cluster.openshiftVersion,
143
+ );
135
144
  const defaultNetworkValues = useDefaultConfiguration([
136
145
  'clusterNetworksDualstack',
137
146
  'clusterNetworksIpv4',
@@ -159,19 +159,12 @@ export const StackTypeControlGroup = ({
159
159
  >
160
160
  <Split>
161
161
  <SplitItem>
162
- <Tooltip
163
- content={
164
- 'Dual-stack is only available when your hosts are using IPV4 together with IPV6.'
165
- }
166
- hidden={isDualStackSelectable}
167
- >
168
- <OcmRadioField
169
- name={'stackType'}
170
- value={IPV4_STACK}
171
- isDisabled={!isDualStackSelectable}
172
- label="IPv4&nbsp;"
173
- />
174
- </Tooltip>
162
+ <OcmRadioField
163
+ name={'stackType'}
164
+ value={IPV4_STACK}
165
+ isDisabled={!isDualStackSelectable}
166
+ label="IPv4&nbsp;"
167
+ />
175
168
  </SplitItem>
176
169
  <SplitItem>
177
170
  <PopoverIcon
@@ -11,6 +11,7 @@ import {
11
11
  getVipValidationsById,
12
12
  DUAL_STACK,
13
13
  SupportLevel,
14
+ PopoverIcon,
14
15
  } from '../../../../common';
15
16
  import { selectCurrentClusterPermissionsState } from '../../../selectors';
16
17
  import { OcmCheckboxField, OcmInputField } from '../../ui/OcmFormFields';
@@ -59,20 +60,6 @@ const VipStaticValue = ({
59
60
  return <i>This IP will be allocated by the DHCP server</i>;
60
61
  };
61
62
 
62
- const getVipHelperSuffix = (
63
- vip?: string,
64
- vipDhcpAllocation?: boolean,
65
- vipDhcpAllocationFormValue?: boolean,
66
- ): string => {
67
- if (!vipDhcpAllocationFormValue) {
68
- return 'Make sure that the VIP is unique and not used by any other device on your network.';
69
- }
70
- if (vipDhcpAllocation && vip) {
71
- return 'This IP was allocated by the DHCP server.';
72
- }
73
- return '';
74
- };
75
-
76
63
  export type VirtualIPControlGroupProps = {
77
64
  cluster: Cluster;
78
65
  isVipDhcpAllocationDisabled?: boolean;
@@ -88,16 +75,9 @@ export const VirtualIPControlGroup = ({
88
75
  const { isViewerMode } = useSelector(selectCurrentClusterPermissionsState);
89
76
  const { t } = useTranslation();
90
77
 
91
- const apiVipHelperText = `Provide an endpoint for users, both human and machine, to interact with and configure the platform. If needed, contact your IT manager for more information. ${getVipHelperSuffix(
92
- cluster.apiVip,
93
- cluster.vipDhcpAllocation,
94
- values.vipDhcpAllocation,
95
- )}`;
96
- const ingressVipHelperText = `Provide an endpoint for application traffic flowing in from outside the cluster. If needed, contact your IT manager for more information. ${getVipHelperSuffix(
97
- cluster.ingressVip,
98
- cluster.vipDhcpAllocation,
99
- values.vipDhcpAllocation,
100
- )}`;
78
+ const ipHelperText = 'Make sure the IP is not used by any other device on your network.';
79
+ const ipPopoverContent =
80
+ 'Provides an endpoint for users, both human and machine, to interact with and configure the platform.';
101
81
 
102
82
  const {
103
83
  'api-vip-defined': apiVipFailedValidationMessage,
@@ -150,9 +130,13 @@ export const VirtualIPControlGroup = ({
150
130
  {values.vipDhcpAllocation ? (
151
131
  <>
152
132
  <FormikStaticField
153
- label={`API IP${ipFieldsSuffix}`}
133
+ label={
134
+ <>
135
+ <span>API IP{ipFieldsSuffix}</span> <PopoverIcon bodyContent={ipPopoverContent} />
136
+ </>
137
+ }
154
138
  name="apiVip"
155
- helperText={apiVipHelperText}
139
+ helperText={ipHelperText}
156
140
  value={values.apiVip || ''}
157
141
  isValid={!apiVipFailedValidationMessage}
158
142
  isRequired
@@ -165,9 +149,14 @@ export const VirtualIPControlGroup = ({
165
149
  />
166
150
  </FormikStaticField>
167
151
  <FormikStaticField
168
- label={`Ingress IP${ipFieldsSuffix}`}
152
+ label={
153
+ <>
154
+ <span>Ingress IP{ipFieldsSuffix}</span>{' '}
155
+ <PopoverIcon bodyContent={ipPopoverContent} />
156
+ </>
157
+ }
169
158
  name="ingressVip"
170
- helperText={ingressVipHelperText}
159
+ helperText={ipHelperText}
171
160
  value={values.ingressVip || ''}
172
161
  isValid={!ingressVipFailedValidationMessage}
173
162
  isRequired
@@ -183,15 +172,24 @@ export const VirtualIPControlGroup = ({
183
172
  ) : (
184
173
  <>
185
174
  <OcmInputField
186
- label={`API IP${ipFieldsSuffix}`}
175
+ label={
176
+ <>
177
+ <span>API IP{ipFieldsSuffix}</span> <PopoverIcon bodyContent={ipPopoverContent} />
178
+ </>
179
+ }
187
180
  name="apiVip"
188
- helperText={apiVipHelperText}
181
+ helperText={ipHelperText}
189
182
  isRequired
190
183
  />
191
184
  <OcmInputField
192
185
  name="ingressVip"
193
- label={`Ingress IP${ipFieldsSuffix}`}
194
- helperText={ingressVipHelperText}
186
+ label={
187
+ <>
188
+ <span>Ingress IP{ipFieldsSuffix}</span>{' '}
189
+ <PopoverIcon bodyContent={ipPopoverContent} />
190
+ </>
191
+ }
192
+ helperText={ipHelperText}
195
193
  isRequired
196
194
  />
197
195
  </>
@@ -20,7 +20,7 @@ const nutanixPlatformMessage =
20
20
  'Enable Nutanix platform integration to access features like node auto-scaling directly inside OpenShift.';
21
21
 
22
22
  const platformIntegrationTooltip =
23
- 'Platform integration is only applicable on non-SNO deployments and when all discovered hosts originated from the same platform.';
23
+ 'Virtualization platform integration is only applicable on non-SNO deployments and when all discovered hosts originated from the same platform.';
24
24
 
25
25
  const messages: KeyType = {
26
26
  'no-active-integrations': undeterminedPlatformMessage,
@@ -28,6 +28,7 @@ import { SentryErrorMonitorContextProvider } from '../SentryErrorMonitorContextP
28
28
  import ClusterWizardContextProvider from '../clusterWizard/ClusterWizardContextProvider';
29
29
  import { BackButton } from '../ui/Buttons/BackButton';
30
30
  import { NewFeatureSupportLevelProvider } from '../newFeatureSupportLevels';
31
+ import { usePullSecret } from '../../hooks';
31
32
 
32
33
  type AssistedInstallerDetailCardProps = {
33
34
  aiClusterId: string;
@@ -90,12 +91,21 @@ const AssistedInstallerDetailCard = ({
90
91
  permissions,
91
92
  }: AssistedInstallerDetailCardProps) => {
92
93
  const { cluster, uiState } = useClusterPolling(aiClusterId);
94
+ const pullSecret = usePullSecret();
93
95
  const {
94
96
  infraEnv,
95
97
  isLoading: infraEnvLoading,
96
98
  error: infraEnvError,
97
99
  updateInfraEnv,
98
- } = useInfraEnv(aiClusterId, CpuArchitecture.USE_DAY1_ARCHITECTURE);
100
+ } = useInfraEnv(
101
+ aiClusterId,
102
+ cluster?.cpuArchitecture
103
+ ? (cluster.cpuArchitecture as CpuArchitecture)
104
+ : CpuArchitecture.USE_DAY1_ARCHITECTURE,
105
+ cluster?.name,
106
+ pullSecret,
107
+ cluster?.openshiftVersion,
108
+ );
99
109
  if (uiState === ResourceUIState.LOADING || infraEnvLoading) {
100
110
  return <LoadingCard />;
101
111
  } else if ((uiState === ResourceUIState.POLLING_ERROR && !cluster) || infraEnvError) {
@@ -151,7 +161,9 @@ const AssistedInstallerDetailCard = ({
151
161
 
152
162
  const Wrapper = (props: AssistedInstallerDetailCardProps) => (
153
163
  <Provider store={store}>
154
- <AssistedInstallerDetailCard {...props} />
164
+ <AlertsContextProvider>
165
+ <AssistedInstallerDetailCard {...props} />
166
+ </AlertsContextProvider>
155
167
  </Provider>
156
168
  );
157
169