@openshift-assisted/ui-lib 2.46.2 → 2.47.0

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 (393) hide show
  1. package/build/@types/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscovery.d.ts.map +1 -1
  2. package/build/@types/cim/components/ClusterDeployment/ClusterDeploymentNetworkingForm.d.ts.map +1 -1
  3. package/build/@types/cim/components/ClusterDeployment/ClusterDetailsFormFields.d.ts.map +1 -1
  4. package/build/@types/cim/components/InfraEnv/EnvironmentDetails.d.ts.map +1 -1
  5. package/build/@types/cim/components/common/ResourceAlerts.d.ts.map +1 -1
  6. package/build/@types/cim/types/k8s/agent-cluster-install.d.ts +1 -0
  7. package/build/@types/cim/types/k8s/agent-cluster-install.d.ts.map +1 -1
  8. package/build/@types/common/api/assisted-service/BundleAPI.d.ts +2 -2
  9. package/build/@types/common/api/assisted-service/ClustersAPI.d.ts +25 -25
  10. package/build/@types/common/api/assisted-service/ComponentVersionsAPI.d.ts +1 -1
  11. package/build/@types/common/api/assisted-service/EventsAPI.d.ts +1 -1
  12. package/build/@types/common/api/assisted-service/HostsAPI.d.ts +6 -6
  13. package/build/@types/common/api/assisted-service/InfraEnvsAPI.d.ts +7 -7
  14. package/build/@types/common/api/assisted-service/ManagedDomainsAPI.d.ts +1 -1
  15. package/build/@types/common/api/assisted-service/NewFeatureSupportLevelsAPI.d.ts +2 -2
  16. package/build/@types/common/api/assisted-service/OperatorsAPI.d.ts +1 -1
  17. package/build/@types/common/api/assisted-service/SupportedOpenshiftVersionsAPI.d.ts +1 -1
  18. package/build/@types/common/api/assisted-service/UISettingsAPI.d.ts +2 -2
  19. package/build/@types/common/components/clusterConfiguration/ControlPlaneNodesDropdown.d.ts +2 -1
  20. package/build/@types/common/components/clusterConfiguration/ControlPlaneNodesDropdown.d.ts.map +1 -1
  21. package/build/@types/common/components/clusterConfiguration/DiscoveryImageConfigForm.d.ts.map +1 -1
  22. package/build/@types/common/components/clusterConfiguration/DiscoveryTroubleshootingModal.d.ts.map +1 -1
  23. package/build/@types/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionMode.d.ts.map +1 -1
  24. package/build/@types/common/components/clusterConfiguration/DownloadIpxeScript.d.ts.map +1 -1
  25. package/build/@types/common/components/clusterConfiguration/DownloadIso.d.ts.map +1 -1
  26. package/build/@types/common/components/clusterConfiguration/DownloadIsoModal.d.ts.map +1 -1
  27. package/build/@types/common/components/clusterConfiguration/OcmTNADisclaimer.d.ts.map +1 -0
  28. package/build/@types/common/components/clusterConfiguration/utils.d.ts +3 -1
  29. package/build/@types/common/components/clusterConfiguration/utils.d.ts.map +1 -1
  30. package/build/@types/common/components/clusterConfiguration/utils.test.d.ts +2 -0
  31. package/build/@types/common/components/clusterConfiguration/utils.test.d.ts.map +1 -0
  32. package/build/@types/common/components/clusterDetail/ConsoleModal.d.ts.map +1 -1
  33. package/build/@types/common/components/clusterDetail/FinalizingProgress.d.ts.map +1 -1
  34. package/build/@types/common/components/clusterWizard/ClusterWizardStepHeader.d.ts.map +1 -1
  35. package/build/@types/common/components/hosts/AITableMemo.d.ts.map +1 -1
  36. package/build/@types/common/components/hosts/AdditionalNTPSourcesDialog.d.ts.map +1 -1
  37. package/build/@types/common/components/hosts/EditHostForm.d.ts.map +1 -1
  38. package/build/@types/common/components/hosts/EditHostModal.d.ts.map +1 -1
  39. package/build/@types/common/components/hosts/HostRequirements.d.ts.map +1 -1
  40. package/build/@types/common/components/hosts/MassChangeHostnameModal.d.ts.map +1 -1
  41. package/build/@types/common/components/hosts/MassDeleteHostModal.d.ts.map +1 -1
  42. package/build/@types/common/components/storage/DisksTable.d.ts.map +1 -1
  43. package/build/@types/common/components/storage/StorageUtils.d.ts.map +1 -1
  44. package/build/@types/common/components/ui/ConfirmationModal.d.ts +2 -3
  45. package/build/@types/common/components/ui/ConfirmationModal.d.ts.map +1 -1
  46. package/build/@types/common/components/ui/OpenShiftVersionModal.d.ts.map +1 -1
  47. package/build/@types/common/components/ui/SectionTitle.d.ts.map +1 -1
  48. package/build/@types/common/components/ui/StaticTextField.d.ts.map +1 -1
  49. package/build/@types/common/components/ui/eventsModal.d.ts.map +1 -1
  50. package/build/@types/common/components/ui/formik/AlertFormikError.d.ts.map +1 -1
  51. package/build/@types/common/components/ui/formik/RichInputField.d.ts.map +1 -1
  52. package/build/@types/common/components/ui/formik/TextAreaField.d.ts.map +1 -1
  53. package/build/@types/common/components/ui/formik/validationSchemas.d.ts +1 -1
  54. package/build/@types/common/components/ui/formik/validationSchemas.d.ts.map +1 -1
  55. package/build/@types/common/config/constants.d.ts.map +1 -1
  56. package/build/@types/ocm/components/AddHosts/InventoryAddHost.d.ts.map +1 -1
  57. package/build/@types/ocm/components/AddHosts/day2Wizard/Day2StaticIpHostConfigurations.d.ts.map +1 -1
  58. package/build/@types/ocm/components/AddHosts/day2Wizard/Day2Wizard.d.ts.map +1 -1
  59. package/build/@types/ocm/components/clusterConfiguration/DiscoveryImageModal.d.ts.map +1 -1
  60. package/build/@types/ocm/components/clusterConfiguration/HostInventory.d.ts.map +1 -1
  61. package/build/@types/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.d.ts.map +1 -1
  62. package/build/@types/ocm/components/clusterConfiguration/manifestsConfiguration/DeleteCustomManifestModal.d.ts.map +1 -1
  63. package/build/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/ExpandedManifest.d.ts.map +1 -1
  64. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/AdvancedNetworkFields.d.ts.map +1 -1
  65. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/AvailableSubnetsControl.d.ts +2 -1
  66. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/AvailableSubnetsControl.d.ts.map +1 -1
  67. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfiguration.d.ts.map +1 -1
  68. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.d.ts.map +1 -1
  69. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/StackTypeControl.d.ts.map +1 -1
  70. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.d.ts +2 -1
  71. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.d.ts.map +1 -1
  72. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/VirtualIPControlGroup.d.ts.map +1 -1
  73. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.d.ts +1 -1
  74. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.d.ts.map +1 -1
  75. package/build/@types/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.d.ts.map +1 -1
  76. package/build/@types/ocm/components/clusterConfiguration/review/ReviewPreflightChecks.d.ts.map +1 -1
  77. package/build/@types/ocm/components/clusterConfiguration/staticIp/components/CollapsedHost.d.ts.map +1 -1
  78. package/build/@types/ocm/components/clusterConfiguration/staticIp/components/FormViewHosts/BondsConfirmationModal.d.ts.map +1 -1
  79. package/build/@types/ocm/components/clusterConfiguration/staticIp/components/FormViewHosts/FormViewHostsFields.d.ts.map +1 -1
  80. package/build/@types/ocm/components/clusterConfiguration/staticIp/components/StaticIpPage.d.ts.map +1 -1
  81. package/build/@types/ocm/components/clusterConfiguration/staticIp/components/YamlView/YamlViewFields.d.ts.map +1 -1
  82. package/build/@types/ocm/components/clusterDetail/CancelInstallationModal.d.ts.map +1 -1
  83. package/build/@types/ocm/components/clusterDetail/ClusterDetail.d.ts.map +1 -1
  84. package/build/@types/ocm/components/clusterDetail/ClusterDetailStatusMessages.d.ts.map +1 -1
  85. package/build/@types/ocm/components/clusterDetail/ClusterInstallationError.d.ts.map +1 -1
  86. package/build/@types/ocm/components/clusterDetail/ClusterPollingErrorModal.d.ts.map +1 -1
  87. package/build/@types/ocm/components/clusterDetail/ClusterProperties.d.ts.map +1 -1
  88. package/build/@types/ocm/components/clusterDetail/ClusterProperties.test.d.ts +2 -0
  89. package/build/@types/ocm/components/clusterDetail/ClusterProperties.test.d.ts.map +1 -0
  90. package/build/@types/ocm/components/clusterDetail/ClusterUpdateErrorModal.d.ts.map +1 -1
  91. package/build/@types/ocm/components/clusterDetail/OpenShiftVersionDetail.d.ts.map +1 -1
  92. package/build/@types/ocm/components/clusterDetail/ProgressBarAlerts.d.ts.map +1 -1
  93. package/build/@types/ocm/components/clusterDetail/ResetClusterModal.d.ts.map +1 -1
  94. package/build/@types/ocm/components/clusterWizard/disconnected/BasicStep.d.ts.map +1 -1
  95. package/build/@types/ocm/components/clusterWizard/disconnected/ReviewStep.d.ts.map +1 -1
  96. package/build/@types/ocm/components/clusters/ClusterPage.d.ts.map +1 -1
  97. package/build/@types/ocm/components/clusters/Clusters.d.ts.map +1 -1
  98. package/build/@types/ocm/components/clusters/DeleteClusterModal.d.ts.map +1 -1
  99. package/build/@types/ocm/components/hosts/DeleteHostModal.d.ts.map +1 -1
  100. package/build/@types/ocm/components/hosts/HostRequirementsContent.d.ts.map +1 -1
  101. package/build/@types/ocm/components/hosts/ResetHostModal.d.ts.map +1 -1
  102. package/build/@types/ocm/components/hosts/UpdateDay2ApiVipForm.d.ts.map +1 -1
  103. package/build/@types/ocm/components/hosts/UpdateDay2ApiVipModal.d.ts.map +1 -1
  104. package/build/@types/ocm/components/ui/InfoLinkWithModal.d.ts +1 -2
  105. package/build/@types/ocm/components/ui/InfoLinkWithModal.d.ts.map +1 -1
  106. package/build/@types/ocm/services/ClustersService.d.ts +5 -5
  107. package/build/@types/ocm/services/HostsService.d.ts +11 -11
  108. package/build/@types/ocm/services/InfraEnvsService.d.ts +2 -2
  109. package/build/@types/ocm/services/UISettingsService.d.ts +1 -1
  110. package/build/@types/ocm/store/slices/infra-envs/thunks.d.ts +1 -1
  111. package/build/cjs/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscovery.js +2 -3
  112. package/build/cjs/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscovery.js.map +1 -1
  113. package/build/cjs/cim/components/ClusterDeployment/ClusterDeploymentNetworkingForm.js +4 -6
  114. package/build/cjs/cim/components/ClusterDeployment/ClusterDeploymentNetworkingForm.js.map +1 -1
  115. package/build/cjs/cim/components/ClusterDeployment/ClusterDetailsFormFields.js +9 -5
  116. package/build/cjs/cim/components/ClusterDeployment/ClusterDetailsFormFields.js.map +1 -1
  117. package/build/cjs/cim/components/InfraEnv/EnvironmentDetails.js +1 -2
  118. package/build/cjs/cim/components/InfraEnv/EnvironmentDetails.js.map +1 -1
  119. package/build/cjs/cim/components/common/ResourceAlerts.js +15 -16
  120. package/build/cjs/cim/components/common/ResourceAlerts.js.map +1 -1
  121. package/build/cjs/common/components/clusterConfiguration/ControlPlaneNodesDropdown.js +23 -6
  122. package/build/cjs/common/components/clusterConfiguration/ControlPlaneNodesDropdown.js.map +1 -1
  123. package/build/cjs/common/components/clusterConfiguration/DiscoveryImageConfigForm.js +2 -3
  124. package/build/cjs/common/components/clusterConfiguration/DiscoveryImageConfigForm.js.map +1 -1
  125. package/build/cjs/common/components/clusterConfiguration/DiscoveryInstructions.js +1 -1
  126. package/build/cjs/common/components/clusterConfiguration/DiscoveryInstructions.js.map +1 -1
  127. package/build/cjs/common/components/clusterConfiguration/DiscoveryIpxeInstructions.js +1 -1
  128. package/build/cjs/common/components/clusterConfiguration/DiscoveryIpxeInstructions.js.map +1 -1
  129. package/build/cjs/common/components/clusterConfiguration/DiscoveryTroubleshootingModal.js +7 -6
  130. package/build/cjs/common/components/clusterConfiguration/DiscoveryTroubleshootingModal.js.map +1 -1
  131. package/build/cjs/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionMode.js +1 -2
  132. package/build/cjs/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionMode.js.map +1 -1
  133. package/build/cjs/common/components/clusterConfiguration/DownloadIpxeScript.js +2 -3
  134. package/build/cjs/common/components/clusterConfiguration/DownloadIpxeScript.js.map +1 -1
  135. package/build/cjs/common/components/clusterConfiguration/DownloadIso.js +5 -6
  136. package/build/cjs/common/components/clusterConfiguration/DownloadIso.js.map +1 -1
  137. package/build/cjs/common/components/clusterConfiguration/DownloadIsoModal.js +3 -2
  138. package/build/cjs/common/components/clusterConfiguration/DownloadIsoModal.js.map +1 -1
  139. package/build/cjs/{ocm → common}/components/clusterConfiguration/OcmTNADisclaimer.js +1 -1
  140. package/build/cjs/common/components/clusterConfiguration/OcmTNADisclaimer.js.map +1 -0
  141. package/build/cjs/common/components/clusterConfiguration/utils.js +23 -12
  142. package/build/cjs/common/components/clusterConfiguration/utils.js.map +1 -1
  143. package/build/cjs/common/components/clusterConfiguration/utils.test.js +242 -0
  144. package/build/cjs/common/components/clusterConfiguration/utils.test.js.map +1 -0
  145. package/build/cjs/common/components/clusterDetail/ConsoleModal.js +5 -3
  146. package/build/cjs/common/components/clusterDetail/ConsoleModal.js.map +1 -1
  147. package/build/cjs/common/components/clusterDetail/FinalizingProgress.js +1 -2
  148. package/build/cjs/common/components/clusterDetail/FinalizingProgress.js.map +1 -1
  149. package/build/cjs/common/components/clusterWizard/ClusterWizardStepHeader.js +1 -2
  150. package/build/cjs/common/components/clusterWizard/ClusterWizardStepHeader.js.map +1 -1
  151. package/build/cjs/common/components/clusterWizard/clusterDetailsValidation.js +1 -1
  152. package/build/cjs/common/components/clusterWizard/clusterDetailsValidation.js.map +1 -1
  153. package/build/cjs/common/components/clusterWizard/networkingSteps/UserManagedNetworkingTextContent.js +1 -1
  154. package/build/cjs/common/components/clusterWizard/networkingSteps/UserManagedNetworkingTextContent.js.map +1 -1
  155. package/build/cjs/common/components/hosts/AITableMemo.js +2 -1
  156. package/build/cjs/common/components/hosts/AITableMemo.js.map +1 -1
  157. package/build/cjs/common/components/hosts/AdditionalNTPSourcesDialog.js +4 -4
  158. package/build/cjs/common/components/hosts/AdditionalNTPSourcesDialog.js.map +1 -1
  159. package/build/cjs/common/components/hosts/EditHostForm.js +2 -3
  160. package/build/cjs/common/components/hosts/EditHostForm.js.map +1 -1
  161. package/build/cjs/common/components/hosts/EditHostModal.js +3 -2
  162. package/build/cjs/common/components/hosts/EditHostModal.js.map +1 -1
  163. package/build/cjs/common/components/hosts/HostRequirements.js +1 -2
  164. package/build/cjs/common/components/hosts/HostRequirements.js.map +1 -1
  165. package/build/cjs/common/components/hosts/HostStatus.js +2 -2
  166. package/build/cjs/common/components/hosts/HostStatus.js.map +1 -1
  167. package/build/cjs/common/components/hosts/MassChangeHostnameModal.js +4 -4
  168. package/build/cjs/common/components/hosts/MassChangeHostnameModal.js.map +1 -1
  169. package/build/cjs/common/components/hosts/MassDeleteHostModal.js +4 -4
  170. package/build/cjs/common/components/hosts/MassDeleteHostModal.js.map +1 -1
  171. package/build/cjs/common/components/storage/DisksTable.js +1 -2
  172. package/build/cjs/common/components/storage/DisksTable.js.map +1 -1
  173. package/build/cjs/common/components/storage/StorageUtils.js +1 -2
  174. package/build/cjs/common/components/storage/StorageUtils.js.map +1 -1
  175. package/build/cjs/common/components/ui/ConfirmationModal.js +5 -4
  176. package/build/cjs/common/components/ui/ConfirmationModal.js.map +1 -1
  177. package/build/cjs/common/components/ui/OpenShiftVersionModal.js +7 -6
  178. package/build/cjs/common/components/ui/OpenShiftVersionModal.js.map +1 -1
  179. package/build/cjs/common/components/ui/SectionTitle.js +1 -2
  180. package/build/cjs/common/components/ui/SectionTitle.js.map +1 -1
  181. package/build/cjs/common/components/ui/StaticTextField.js +1 -2
  182. package/build/cjs/common/components/ui/StaticTextField.js.map +1 -1
  183. package/build/cjs/common/components/ui/eventsModal.js +9 -9
  184. package/build/cjs/common/components/ui/eventsModal.js.map +1 -1
  185. package/build/cjs/common/components/ui/formik/AlertFormikError.js +1 -2
  186. package/build/cjs/common/components/ui/formik/AlertFormikError.js.map +1 -1
  187. package/build/cjs/common/components/ui/formik/RichInputField.css +0 -7
  188. package/build/cjs/common/components/ui/formik/RichInputField.js +1 -1
  189. package/build/cjs/common/components/ui/formik/RichInputField.js.map +1 -1
  190. package/build/cjs/common/components/ui/formik/TextAreaField.js +2 -1
  191. package/build/cjs/common/components/ui/formik/TextAreaField.js.map +1 -1
  192. package/build/cjs/common/components/ui/formik/validationSchemas.js +13 -3
  193. package/build/cjs/common/components/ui/formik/validationSchemas.js.map +1 -1
  194. package/build/cjs/common/config/constants.js +5 -10
  195. package/build/cjs/common/config/constants.js.map +1 -1
  196. package/build/cjs/ocm/components/AddHosts/InventoryAddHost.js +3 -4
  197. package/build/cjs/ocm/components/AddHosts/InventoryAddHost.js.map +1 -1
  198. package/build/cjs/ocm/components/AddHosts/day2Wizard/Day2StaticIpHostConfigurations.js +1 -2
  199. package/build/cjs/ocm/components/AddHosts/day2Wizard/Day2StaticIpHostConfigurations.js.map +1 -1
  200. package/build/cjs/ocm/components/AddHosts/day2Wizard/Day2Wizard.js +1 -2
  201. package/build/cjs/ocm/components/AddHosts/day2Wizard/Day2Wizard.js.map +1 -1
  202. package/build/cjs/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.js +1 -1
  203. package/build/cjs/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.js.map +1 -1
  204. package/build/cjs/ocm/components/clusterConfiguration/DiscoveryImageModal.js +2 -2
  205. package/build/cjs/ocm/components/clusterConfiguration/DiscoveryImageModal.js.map +1 -1
  206. package/build/cjs/ocm/components/clusterConfiguration/HostInventory.js +3 -5
  207. package/build/cjs/ocm/components/clusterConfiguration/HostInventory.js.map +1 -1
  208. package/build/cjs/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.js +11 -9
  209. package/build/cjs/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.js.map +1 -1
  210. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/DeleteCustomManifestModal.js +7 -7
  211. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/DeleteCustomManifestModal.js.map +1 -1
  212. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/ExpandedManifest.js +0 -1
  213. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/ExpandedManifest.js.map +1 -1
  214. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/AdvancedNetworkFields.js +60 -18
  215. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/AdvancedNetworkFields.js.map +1 -1
  216. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/AvailableSubnetsControl.js +49 -12
  217. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/AvailableSubnetsControl.js.map +1 -1
  218. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfiguration.js +3 -3
  219. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfiguration.js.map +1 -1
  220. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.js +2 -3
  221. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.js.map +1 -1
  222. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/StackTypeControl.js +67 -7
  223. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/StackTypeControl.js.map +1 -1
  224. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.js +31 -6
  225. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.js.map +1 -1
  226. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/VirtualIPControlGroup.js +7 -16
  227. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/VirtualIPControlGroup.js.map +1 -1
  228. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.js +8 -8
  229. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.js.map +1 -1
  230. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.js +26 -8
  231. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.js.map +1 -1
  232. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewPreflightChecks.js +5 -5
  233. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewPreflightChecks.js.map +1 -1
  234. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/CollapsedHost.js +1 -2
  235. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/CollapsedHost.js.map +1 -1
  236. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/FormViewHosts/BondsConfirmationModal.js +4 -4
  237. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/FormViewHosts/BondsConfirmationModal.js.map +1 -1
  238. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/FormViewHosts/FormViewHostsFields.js +1 -2
  239. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/FormViewHosts/FormViewHostsFields.js.map +1 -1
  240. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/StaticIpPage.js +1 -1
  241. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/StaticIpPage.js.map +1 -1
  242. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/YamlView/YamlViewFields.js +6 -7
  243. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/YamlView/YamlViewFields.js.map +1 -1
  244. package/build/cjs/ocm/components/clusterDetail/CancelInstallationModal.js +6 -6
  245. package/build/cjs/ocm/components/clusterDetail/CancelInstallationModal.js.map +1 -1
  246. package/build/cjs/ocm/components/clusterDetail/ClusterDetail.js +1 -2
  247. package/build/cjs/ocm/components/clusterDetail/ClusterDetail.js.map +1 -1
  248. package/build/cjs/ocm/components/clusterDetail/ClusterDetailStatusMessages.js +17 -14
  249. package/build/cjs/ocm/components/clusterDetail/ClusterDetailStatusMessages.js.map +1 -1
  250. package/build/cjs/ocm/components/clusterDetail/ClusterInstallationError.js +4 -5
  251. package/build/cjs/ocm/components/clusterDetail/ClusterInstallationError.js.map +1 -1
  252. package/build/cjs/ocm/components/clusterDetail/ClusterPollingErrorModal.js +5 -4
  253. package/build/cjs/ocm/components/clusterDetail/ClusterPollingErrorModal.js.map +1 -1
  254. package/build/cjs/ocm/components/clusterDetail/ClusterProperties.js +3 -4
  255. package/build/cjs/ocm/components/clusterDetail/ClusterProperties.js.map +1 -1
  256. package/build/cjs/ocm/components/clusterDetail/ClusterProperties.test.js +180 -0
  257. package/build/cjs/ocm/components/clusterDetail/ClusterProperties.test.js.map +1 -0
  258. package/build/cjs/ocm/components/clusterDetail/ClusterUpdateErrorModal.js +5 -4
  259. package/build/cjs/ocm/components/clusterDetail/ClusterUpdateErrorModal.js.map +1 -1
  260. package/build/cjs/ocm/components/clusterDetail/OpenShiftVersionDetail.js +1 -2
  261. package/build/cjs/ocm/components/clusterDetail/OpenShiftVersionDetail.js.map +1 -1
  262. package/build/cjs/ocm/components/clusterDetail/ProgressBarAlerts.js +4 -5
  263. package/build/cjs/ocm/components/clusterDetail/ProgressBarAlerts.js.map +1 -1
  264. package/build/cjs/ocm/components/clusterDetail/ResetClusterModal.js +5 -3
  265. package/build/cjs/ocm/components/clusterDetail/ResetClusterModal.js.map +1 -1
  266. package/build/cjs/ocm/components/clusterWizard/disconnected/BasicStep.js +1 -2
  267. package/build/cjs/ocm/components/clusterWizard/disconnected/BasicStep.js.map +1 -1
  268. package/build/cjs/ocm/components/clusterWizard/disconnected/ReviewStep.js +1 -2
  269. package/build/cjs/ocm/components/clusterWizard/disconnected/ReviewStep.js.map +1 -1
  270. package/build/cjs/ocm/components/clusters/AssistedInstallerHeader.js +1 -1
  271. package/build/cjs/ocm/components/clusters/AssistedInstallerHeader.js.map +1 -1
  272. package/build/cjs/ocm/components/clusters/ClusterPage.js +1 -2
  273. package/build/cjs/ocm/components/clusters/ClusterPage.js.map +1 -1
  274. package/build/cjs/ocm/components/clusters/Clusters.js +1 -2
  275. package/build/cjs/ocm/components/clusters/Clusters.js.map +1 -1
  276. package/build/cjs/ocm/components/clusters/DeleteClusterModal.js +8 -7
  277. package/build/cjs/ocm/components/clusters/DeleteClusterModal.js.map +1 -1
  278. package/build/cjs/ocm/components/featureSupportLevels/ReviewClusterFeatureSupportLevels.js +1 -1
  279. package/build/cjs/ocm/components/featureSupportLevels/ReviewClusterFeatureSupportLevels.js.map +1 -1
  280. package/build/cjs/ocm/components/hosts/DeleteHostModal.js +5 -4
  281. package/build/cjs/ocm/components/hosts/DeleteHostModal.js.map +1 -1
  282. package/build/cjs/ocm/components/hosts/HostRequirementsContent.js +1 -2
  283. package/build/cjs/ocm/components/hosts/HostRequirementsContent.js.map +1 -1
  284. package/build/cjs/ocm/components/hosts/ResetHostModal.js +8 -7
  285. package/build/cjs/ocm/components/hosts/ResetHostModal.js.map +1 -1
  286. package/build/cjs/ocm/components/hosts/UpdateDay2ApiVipForm.js +2 -3
  287. package/build/cjs/ocm/components/hosts/UpdateDay2ApiVipForm.js.map +1 -1
  288. package/build/cjs/ocm/components/hosts/UpdateDay2ApiVipModal.js +3 -2
  289. package/build/cjs/ocm/components/hosts/UpdateDay2ApiVipModal.js.map +1 -1
  290. package/build/cjs/ocm/components/ui/InfoLinkWithModal.js +5 -4
  291. package/build/cjs/ocm/components/ui/InfoLinkWithModal.js.map +1 -1
  292. package/lib/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscovery.tsx +3 -5
  293. package/lib/cim/components/ClusterDeployment/ClusterDeploymentNetworkingForm.tsx +8 -12
  294. package/lib/cim/components/ClusterDeployment/ClusterDetailsFormFields.tsx +17 -35
  295. package/lib/cim/components/InfraEnv/EnvironmentDetails.tsx +1 -5
  296. package/lib/cim/components/common/ResourceAlerts.tsx +26 -28
  297. package/lib/cim/types/k8s/agent-cluster-install.ts +1 -0
  298. package/lib/common/components/clusterConfiguration/ControlPlaneNodesDropdown.tsx +61 -31
  299. package/lib/common/components/clusterConfiguration/DiscoveryImageConfigForm.tsx +14 -6
  300. package/lib/common/components/clusterConfiguration/DiscoveryInstructions.tsx +2 -2
  301. package/lib/common/components/clusterConfiguration/DiscoveryIpxeInstructions.tsx +2 -2
  302. package/lib/common/components/clusterConfiguration/DiscoveryTroubleshootingModal.tsx +15 -12
  303. package/lib/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionMode.tsx +1 -3
  304. package/lib/common/components/clusterConfiguration/DownloadIpxeScript.tsx +6 -5
  305. package/lib/common/components/clusterConfiguration/DownloadIso.tsx +13 -7
  306. package/lib/common/components/clusterConfiguration/DownloadIsoModal.tsx +2 -3
  307. package/lib/{ocm → common}/components/clusterConfiguration/OcmTNADisclaimer.tsx +1 -1
  308. package/lib/common/components/clusterConfiguration/utils.test.ts +275 -0
  309. package/lib/common/components/clusterConfiguration/utils.ts +28 -9
  310. package/lib/common/components/clusterDetail/ConsoleModal.tsx +17 -10
  311. package/lib/common/components/clusterDetail/FinalizingProgress.tsx +4 -6
  312. package/lib/common/components/clusterWizard/ClusterWizardStepHeader.tsx +1 -3
  313. package/lib/common/components/clusterWizard/clusterDetailsValidation.ts +1 -1
  314. package/lib/common/components/clusterWizard/networkingSteps/UserManagedNetworkingTextContent.tsx +2 -2
  315. package/lib/common/components/hosts/AITableMemo.tsx +1 -0
  316. package/lib/common/components/hosts/AdditionalNTPSourcesDialog.tsx +11 -10
  317. package/lib/common/components/hosts/EditHostForm.tsx +6 -5
  318. package/lib/common/components/hosts/EditHostModal.tsx +2 -3
  319. package/lib/common/components/hosts/HostRequirements.tsx +2 -4
  320. package/lib/common/components/hosts/HostStatus.tsx +5 -5
  321. package/lib/common/components/hosts/MassChangeHostnameModal.tsx +9 -7
  322. package/lib/common/components/hosts/MassDeleteHostModal.tsx +15 -9
  323. package/lib/common/components/storage/DisksTable.tsx +1 -3
  324. package/lib/common/components/storage/StorageUtils.tsx +1 -3
  325. package/lib/common/components/ui/ConfirmationModal.tsx +18 -15
  326. package/lib/common/components/ui/OpenShiftVersionModal.tsx +32 -22
  327. package/lib/common/components/ui/SectionTitle.tsx +2 -4
  328. package/lib/common/components/ui/StaticTextField.tsx +2 -4
  329. package/lib/common/components/ui/eventsModal.tsx +29 -20
  330. package/lib/common/components/ui/formik/AlertFormikError.tsx +8 -10
  331. package/lib/common/components/ui/formik/RichInputField.css +0 -7
  332. package/lib/common/components/ui/formik/RichInputField.tsx +2 -1
  333. package/lib/common/components/ui/formik/TextAreaField.tsx +13 -4
  334. package/lib/common/components/ui/formik/_validationSchemas.test.ts +82 -0
  335. package/lib/common/components/ui/formik/validationSchemas.ts +16 -10
  336. package/lib/common/config/constants.ts +5 -11
  337. package/lib/ocm/components/AddHosts/InventoryAddHost.tsx +4 -6
  338. package/lib/ocm/components/AddHosts/day2Wizard/Day2StaticIpHostConfigurations.tsx +1 -5
  339. package/lib/ocm/components/AddHosts/day2Wizard/Day2Wizard.tsx +2 -4
  340. package/lib/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.tsx +1 -1
  341. package/lib/ocm/components/clusterConfiguration/DiscoveryImageModal.tsx +6 -7
  342. package/lib/ocm/components/clusterConfiguration/HostInventory.tsx +7 -11
  343. package/lib/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.tsx +43 -25
  344. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/DeleteCustomManifestModal.tsx +22 -16
  345. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/components/ExpandedManifest.tsx +1 -7
  346. package/lib/ocm/components/clusterConfiguration/networkConfiguration/AdvancedNetworkFields.tsx +64 -18
  347. package/lib/ocm/components/clusterConfiguration/networkConfiguration/AvailableSubnetsControl.tsx +98 -36
  348. package/lib/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfiguration.tsx +3 -2
  349. package/lib/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.tsx +4 -5
  350. package/lib/ocm/components/clusterConfiguration/networkConfiguration/StackTypeControl.tsx +78 -11
  351. package/lib/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.tsx +79 -11
  352. package/lib/ocm/components/clusterConfiguration/networkConfiguration/VirtualIPControlGroup.tsx +4 -9
  353. package/lib/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.ts +17 -6
  354. package/lib/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.tsx +34 -4
  355. package/lib/ocm/components/clusterConfiguration/review/ReviewPreflightChecks.tsx +7 -9
  356. package/lib/ocm/components/clusterConfiguration/staticIp/components/CollapsedHost.tsx +1 -3
  357. package/lib/ocm/components/clusterConfiguration/staticIp/components/FormViewHosts/BondsConfirmationModal.tsx +15 -9
  358. package/lib/ocm/components/clusterConfiguration/staticIp/components/FormViewHosts/FormViewHostsFields.tsx +1 -3
  359. package/lib/ocm/components/clusterConfiguration/staticIp/components/StaticIpPage.tsx +10 -3
  360. package/lib/ocm/components/clusterConfiguration/staticIp/components/YamlView/YamlViewFields.tsx +6 -8
  361. package/lib/ocm/components/clusterDetail/CancelInstallationModal.tsx +19 -17
  362. package/lib/ocm/components/clusterDetail/ClusterDetail.tsx +1 -3
  363. package/lib/ocm/components/clusterDetail/ClusterDetailStatusMessages.tsx +34 -26
  364. package/lib/ocm/components/clusterDetail/ClusterInstallationError.tsx +5 -7
  365. package/lib/ocm/components/clusterDetail/ClusterPollingErrorModal.tsx +15 -13
  366. package/lib/ocm/components/clusterDetail/ClusterProperties.test.ts +215 -0
  367. package/lib/ocm/components/clusterDetail/ClusterProperties.tsx +3 -5
  368. package/lib/ocm/components/clusterDetail/ClusterUpdateErrorModal.tsx +17 -13
  369. package/lib/ocm/components/clusterDetail/OpenShiftVersionDetail.tsx +2 -4
  370. package/lib/ocm/components/clusterDetail/ProgressBarAlerts.tsx +5 -7
  371. package/lib/ocm/components/clusterDetail/ResetClusterModal.tsx +16 -12
  372. package/lib/ocm/components/clusterWizard/disconnected/BasicStep.tsx +1 -3
  373. package/lib/ocm/components/clusterWizard/disconnected/ReviewStep.tsx +1 -3
  374. package/lib/ocm/components/clusters/AssistedInstallerHeader.tsx +2 -2
  375. package/lib/ocm/components/clusters/ClusterPage.tsx +1 -3
  376. package/lib/ocm/components/clusters/Clusters.tsx +1 -3
  377. package/lib/ocm/components/clusters/DeleteClusterModal.tsx +16 -11
  378. package/lib/ocm/components/featureSupportLevels/ReviewClusterFeatureSupportLevels.tsx +2 -2
  379. package/lib/ocm/components/hosts/DeleteHostModal.tsx +18 -9
  380. package/lib/ocm/components/hosts/HostRequirementsContent.tsx +3 -5
  381. package/lib/ocm/components/hosts/ResetHostModal.tsx +16 -13
  382. package/lib/ocm/components/hosts/UpdateDay2ApiVipForm.tsx +12 -6
  383. package/lib/ocm/components/hosts/UpdateDay2ApiVipModal.tsx +2 -3
  384. package/lib/ocm/components/ui/InfoLinkWithModal.tsx +16 -13
  385. package/package.json +3 -3
  386. package/build/@types/ocm/components/clusterConfiguration/OcmTNADisclaimer.d.ts.map +0 -1
  387. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/UserManagedNetworkingTextContent.d.ts +0 -6
  388. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/UserManagedNetworkingTextContent.d.ts.map +0 -1
  389. package/build/cjs/ocm/components/clusterConfiguration/OcmTNADisclaimer.js.map +0 -1
  390. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/UserManagedNetworkingTextContent.js +0 -25
  391. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/UserManagedNetworkingTextContent.js.map +0 -1
  392. package/lib/ocm/components/clusterConfiguration/networkConfiguration/UserManagedNetworkingTextContent.tsx +0 -30
  393. /package/build/@types/{ocm → common}/components/clusterConfiguration/OcmTNADisclaimer.d.ts +0 -0
@@ -2,6 +2,7 @@ import { test, describe, expect } from 'vitest';
2
2
  import {
3
3
  baseDomainValidationSchema,
4
4
  dnsNameValidationSchema,
5
+ dualStackValidationSchema,
5
6
  hostPrefixValidationSchema,
6
7
  ipBlockValidationSchema,
7
8
  ipValidationSchema,
@@ -347,4 +348,85 @@ describe('validationSchemas', () => {
347
348
 
348
349
  expect(counter).toBe(invalid.length);
349
350
  });
351
+
352
+ describe('dualStackValidationSchema', () => {
353
+ describe('OCP < 4.12 (legacy behavior)', () => {
354
+ const schema = dualStackValidationSchema('machine networks', '4.11');
355
+
356
+ test('validates IPv4 as primary and IPv6 as secondary', async () => {
357
+ const validValues = [[{ cidr: '192.168.1.0/24' }, { cidr: '2001:db8::/64' }]];
358
+
359
+ for (const value of validValues) {
360
+ await expect(schema.validate(value)).resolves.toBe(value);
361
+ }
362
+ });
363
+
364
+ test('rejects IPv6 as primary for OCP < 4.12', async () => {
365
+ const invalidValues = [[{ cidr: '2001:db8::/64' }, { cidr: '192.168.1.0/24' }]];
366
+
367
+ for (const value of invalidValues) {
368
+ await expect(schema.validate(value)).rejects.toThrow(
369
+ 'First network has to be IPv4 subnet',
370
+ );
371
+ }
372
+ });
373
+ });
374
+
375
+ describe('OCP >= 4.12 (new behavior)', () => {
376
+ const schema = dualStackValidationSchema('machine networks', '4.12');
377
+
378
+ test('validates IPv4 as primary and IPv6 as secondary', async () => {
379
+ const validValues = [[{ cidr: '192.168.1.0/24' }, { cidr: '2001:db8::/64' }]];
380
+
381
+ for (const value of validValues) {
382
+ await expect(schema.validate(value)).resolves.toBe(value);
383
+ }
384
+ });
385
+
386
+ test('validates IPv6 as primary and IPv4 as secondary', async () => {
387
+ const validValues = [[{ cidr: '2001:db8::/64' }, { cidr: '192.168.1.0/24' }]];
388
+
389
+ for (const value of validValues) {
390
+ await expect(schema.validate(value)).resolves.toBe(value);
391
+ }
392
+ });
393
+ });
394
+
395
+ describe('no version specified (defaults to legacy behavior)', () => {
396
+ const schema = dualStackValidationSchema('machine networks');
397
+
398
+ test('validates IPv4 as primary and IPv6 as secondary', async () => {
399
+ const validValues = [[{ cidr: '192.168.1.0/24' }, { cidr: '2001:db8::/64' }]];
400
+
401
+ for (const value of validValues) {
402
+ await expect(schema.validate(value)).resolves.toBe(value);
403
+ }
404
+ });
405
+
406
+ test('rejects IPv6 as primary when no version specified', async () => {
407
+ const invalidValues = [[{ cidr: '2001:db8::/64' }, { cidr: '192.168.1.0/24' }]];
408
+
409
+ for (const value of invalidValues) {
410
+ await expect(schema.validate(value)).rejects.toThrow(
411
+ 'First network has to be IPv4 subnet',
412
+ );
413
+ }
414
+ });
415
+ });
416
+
417
+ describe('edge cases', () => {
418
+ test('validates maximum 2 networks', async () => {
419
+ const schema = dualStackValidationSchema('machine networks', '4.12');
420
+ const invalidValue = [
421
+ { cidr: '192.168.1.0/24' },
422
+ { cidr: '2001:db8::/64' },
423
+ { cidr: '10.0.0.0/24' },
424
+ ];
425
+
426
+ await expect(schema.validate(invalidValue)).rejects.toThrow(
427
+ 'Maximum number of machine networks subnets in dual stack is 2',
428
+ );
429
+ });
430
+ });
431
+ });
350
432
  });
@@ -28,6 +28,7 @@ import {
28
28
  nameValidationMessages,
29
29
  } from './constants';
30
30
  import { allSubnetsIPv4, getAddress, trimCommaSeparatedList, trimSshPublicKey } from './utils';
31
+ import { isMajorMinorVersionEqualOrGreater } from '../../../utils';
31
32
  import { selectApiVip, selectIngressVip } from '../../../selectors';
32
33
  import { ClusterDetailsValues } from '../../clusterWizard/types';
33
34
 
@@ -703,20 +704,25 @@ export const serviceNetworkValidationSchema = Yup.array().of(
703
704
  }),
704
705
  );
705
706
 
706
- export const dualStackValidationSchema = (field: string) =>
707
+ export const dualStackValidationSchema = (field: string, openshiftVersion?: string) =>
707
708
  Yup.array()
708
709
  .max(2, `Maximum number of ${field} subnets in dual stack is 2.`)
709
710
  .test(
710
711
  'dual-stack-ipv4',
711
- 'First network has to be IPv4 subnet.',
712
- (values?: { cidr: MachineNetwork['cidr'] }[]): boolean =>
713
- !!values?.[0].cidr && Address4.isValid(values[0].cidr),
714
- )
715
- .test(
716
- 'dual-stack-ipv6',
717
- 'Second network has to be IPv6 subnet.',
718
- (values?: { cidr: MachineNetwork['cidr'] }[]): boolean =>
719
- !!values?.[1].cidr && Address6.isValid(values[1].cidr),
712
+ openshiftVersion && isMajorMinorVersionEqualOrGreater(openshiftVersion, '4.12')
713
+ ? 'First network has to be a valid IPv4 or IPv6 subnet.'
714
+ : 'First network has to be IPv4 subnet.',
715
+ (values?: { cidr: MachineNetwork['cidr'] }[]): boolean => {
716
+ // For OCP versions > 4.11, allow IPv6 as primary network
717
+ if (openshiftVersion && isMajorMinorVersionEqualOrGreater(openshiftVersion, '4.12')) {
718
+ return (
719
+ !!values?.[0].cidr &&
720
+ (Address4.isValid(values[0].cidr) || Address6.isValid(values[0].cidr))
721
+ );
722
+ }
723
+ // For older versions, require IPv4 as primary network
724
+ return !!values?.[0].cidr && Address4.isValid(values[0].cidr);
725
+ },
720
726
  );
721
727
 
722
728
  export const IPv4ValidationSchema = Yup.array().test(
@@ -5,12 +5,10 @@ import {
5
5
  ClusterValidationId,
6
6
  DiskRole,
7
7
  Event,
8
- HostRoleUpdateParams,
9
8
  HostValidationId,
10
9
  } from '@openshift-assisted/types/assisted-installer-service';
11
10
  import { ValidationGroup as ClusterValidationGroup } from '../types/clusters';
12
11
  import buildManifest from '@openshift-assisted/ui-lib/package.json';
13
- import { isInOcm } from '../api/axiosClient';
14
12
 
15
13
  export const DEFAULT_POLLING_INTERVAL = 10 * 1000;
16
14
  export const REDUCED_POLLING_INTERVAL = 10 * 1000 * 6;
@@ -35,15 +33,11 @@ export const hostRoles = (t: TFunction): HostRole[] => [
35
33
  'ai:Runs application workloads. Connect at least 5 hosts to enable dedicated workers.',
36
34
  ),
37
35
  },
38
- ...(isInOcm
39
- ? [
40
- {
41
- value: 'arbiter' as HostRoleUpdateParams,
42
- label: t('ai:Arbiter'),
43
- description: t('ai:Prevents split-brain scenarios and maintains quorum.'),
44
- },
45
- ]
46
- : []),
36
+ {
37
+ value: 'arbiter',
38
+ label: t('ai:Arbiter'),
39
+ description: t('ai:Prevents split-brain scenarios and maintains quorum.'),
40
+ },
47
41
  ];
48
42
 
49
43
  export const clusterStatusLabels = (t: TFunction): { [key in Cluster['status']]: string } => ({
@@ -17,14 +17,12 @@ const InventoryAddHosts = ({ cluster }: { cluster?: Cluster }) => {
17
17
  return (
18
18
  <Stack hasGutter>
19
19
  <StackItem>
20
- <Content>
20
+ <Day2WizardContextProvider>
21
21
  <Content component="p">
22
- <Day2WizardContextProvider>
23
- <Day2DiscoveryImageModalButton cluster={cluster} />
24
- <Day2Wizard />
25
- </Day2WizardContextProvider>
22
+ <Day2DiscoveryImageModalButton cluster={cluster} />
26
23
  </Content>
27
- </Content>
24
+ <Day2Wizard />
25
+ </Day2WizardContextProvider>
28
26
  </StackItem>
29
27
  <StackItem>
30
28
  <InformationAndAlerts cluster={cluster} />
@@ -23,11 +23,7 @@ const Day2HostStaticIpConfigurations = ({ isDisabled }: { isDisabled: boolean })
23
23
 
24
24
  return (
25
25
  <FormGroup
26
- label={
27
- <Content>
28
- <Content component={ContentVariants.h4}>Hosts' network configuration</Content>
29
- </Content>
30
- }
26
+ label={<Content component={ContentVariants.h4}>Hosts' network configuration</Content>}
31
27
  fieldId={getFieldId(GROUP_NAME, 'radio')}
32
28
  isInline
33
29
  onChange={onChangeNetworkType}
@@ -1,6 +1,5 @@
1
1
  import React from 'react';
2
- import { Modal, ModalVariant } from '@patternfly/react-core/deprecated';
3
- import { WizardHeader } from '@patternfly/react-core';
2
+ import { Modal, ModalVariant, WizardHeader } from '@patternfly/react-core';
4
3
  import classNames from 'classnames';
5
4
  import { ClusterWizardStep } from '../../../../common';
6
5
  import { useModalDialogsContext } from '../../hosts/ModalDialogsContext';
@@ -40,8 +39,7 @@ const Day2Wizard = () => {
40
39
  aria-label={'Day 2 Wizard'}
41
40
  isOpen={isOpen}
42
41
  variant={ModalVariant.large}
43
- showClose={false}
44
- hasNoBodyWrapper
42
+ onClose={undefined}
45
43
  id="generate-discovery-iso-modal"
46
44
  >
47
45
  <div className={classNames('pf-v6-c-wizard', 'cluster-wizard')}>
@@ -17,7 +17,7 @@ import {
17
17
  useNewFeatureSupportLevel,
18
18
  } from '../../../common/components/newFeatureSupportLevels';
19
19
  import { isFeatureSupportedAndAvailable } from '../featureSupportLevels/featureStateUtils';
20
- import OcmTNADisclaimer from './OcmTNADisclaimer';
20
+ import OcmTNADisclaimer from '../../../common/components/clusterConfiguration/OcmTNADisclaimer';
21
21
  import OcmSNODisclaimer from './OcmSNODisclaimer';
22
22
 
23
23
  const INPUT_NAME = 'controlPlaneCount';
@@ -1,6 +1,5 @@
1
1
  import React from 'react';
2
- import { Button, ButtonVariant } from '@patternfly/react-core';
3
- import { Modal, ModalVariant } from '@patternfly/react-core/deprecated';
2
+ import { Button, ButtonVariant, Modal, ModalHeader, ModalVariant } from '@patternfly/react-core';
4
3
  import { pluralize } from 'humanize-plus';
5
4
  import {
6
5
  AI_CISCO_INTERSIGHT_TAG,
@@ -105,17 +104,17 @@ export const DiscoveryImageModal = () => {
105
104
  return (
106
105
  <Modal
107
106
  aria-label="Add hosts dialog"
108
- title={
109
- <span data-testid="discovery-modal-title">{`Add ${pluralize(+isSNOCluster, 'host')}`}</span>
110
- }
111
107
  isOpen={isOpen}
112
108
  onClose={close}
113
109
  variant={ModalVariant.small}
114
- hasNoBodyWrapper
115
110
  id="generate-discovery-iso-modal"
116
- tabIndex={0}
117
111
  ouiaId="discovery-image-modal"
112
+ tabIndex={0}
118
113
  >
114
+ <ModalHeader
115
+ data-testid="discovery-modal-title"
116
+ title={`Add ${pluralize(+isSNOCluster, 'host')}`}
117
+ />
119
118
  {(isoDownloadError || ipxeDownloadError) && <ErrorState />}
120
119
  {isoDownloadUrl ? (
121
120
  <DownloadIso
@@ -37,14 +37,12 @@ const HostInventory = ({ cluster }: { cluster: Cluster }) => {
37
37
  </StackItem>
38
38
  <StackItem data-testid="discovery-image-modal-section">
39
39
  {!isViewerMode && !isSingleClusterFeatureEnabled && (
40
- <Content>
41
- <Content component="p">
42
- <DiscoveryImageModalButton
43
- ButtonComponent={Button}
44
- cluster={cluster}
45
- idPrefix="host-inventory"
46
- />
47
- </Content>
40
+ <Content component="p">
41
+ <DiscoveryImageModalButton
42
+ ButtonComponent={Button}
43
+ cluster={cluster}
44
+ idPrefix="host-inventory"
45
+ />
48
46
  </Content>
49
47
  )}
50
48
  </StackItem>
@@ -77,9 +75,7 @@ const HostInventory = ({ cluster }: { cluster: Cluster }) => {
77
75
  <InformationAndAlerts cluster={cluster} />
78
76
  </StackItem>
79
77
  <StackItem data-testid="host-inventory-title">
80
- <Content>
81
- <Content component="h3">Host Inventory</Content>
82
- </Content>
78
+ <Content component="h3">Host Inventory</Content>
83
79
  </StackItem>
84
80
  <StackItem data-testid="hosts-discovery-table-wrapper">
85
81
  <HostsDiscoveryTable cluster={cluster} />
@@ -1,7 +1,17 @@
1
1
  import React from 'react';
2
2
  import * as Yup from 'yup';
3
- import { Button, Form, AlertVariant, Alert, Stack, StackItem } from '@patternfly/react-core';
4
- import { ModalBoxBody, ModalBoxFooter } from '@patternfly/react-core/deprecated';
3
+ import {
4
+ Button,
5
+ Form,
6
+ AlertVariant,
7
+ Alert,
8
+ Stack,
9
+ StackItem,
10
+ ModalBody,
11
+ ModalFooter,
12
+ Flex,
13
+ FlexItem,
14
+ } from '@patternfly/react-core';
5
15
  import { Formik, FormikHelpers } from 'formik';
6
16
  import {
7
17
  HostStaticNetworkConfig,
@@ -133,7 +143,7 @@ export const OcmDiscoveryImageConfigForm = ({
133
143
  {({ submitForm, isSubmitting, status, setStatus }) => {
134
144
  return (
135
145
  <>
136
- <ModalBoxBody>
146
+ <ModalBody>
137
147
  <Stack hasGutter>
138
148
  <StackItem>
139
149
  <Alert variant={AlertVariant.info} isInline title={alertDiscoveryText} />
@@ -158,32 +168,40 @@ export const OcmDiscoveryImageConfigForm = ({
158
168
  </Form>
159
169
  </StackItem>
160
170
  </Stack>
161
- </ModalBoxBody>
162
- <ModalBoxFooter>
171
+ </ModalBody>
172
+ <ModalFooter>
163
173
  <Stack hasGutter style={{ width: '100%' }}>
174
+ {(status as StatusErrorType)?.error && (
175
+ <StackItem>
176
+ <AlertFormikError
177
+ status={status as StatusErrorType}
178
+ onClose={() => setStatus(undefined)}
179
+ />
180
+ </StackItem>
181
+ )}
164
182
  <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
- data-testid="generate-discovery-iso-button"
178
- >
179
- {isSubmitting ? t('ai:Generating') : buttonText}
180
- </Button>
181
- <Button key="cancel" variant="link" onClick={onCancel}>
182
- {t('ai:Cancel')}
183
- </Button>
183
+ <Flex>
184
+ <FlexItem>
185
+ <Button
186
+ onClick={() => {
187
+ void submitForm();
188
+ }}
189
+ isDisabled={isSubmitting}
190
+ isLoading={isSubmitting}
191
+ data-testid="generate-discovery-iso-button"
192
+ >
193
+ {isSubmitting ? t('ai:Generating') : buttonText}
194
+ </Button>
195
+ </FlexItem>
196
+ <FlexItem>
197
+ <Button key="cancel" variant="link" onClick={onCancel}>
198
+ {t('ai:Cancel')}
199
+ </Button>
200
+ </FlexItem>
201
+ </Flex>
184
202
  </StackItem>
185
203
  </Stack>
186
- </ModalBoxFooter>
204
+ </ModalFooter>
187
205
  </>
188
206
  );
189
207
  }}
@@ -1,6 +1,13 @@
1
1
  import * as React from 'react';
2
- import { Button } from '@patternfly/react-core';
3
- import { Modal, ModalVariant } from '@patternfly/react-core/deprecated';
2
+ import {
3
+ Button,
4
+ Content,
5
+ Modal,
6
+ ModalBody,
7
+ ModalFooter,
8
+ ModalHeader,
9
+ ModalVariant,
10
+ } from '@patternfly/react-core';
4
11
 
5
12
  const DeleteCustomManifestModal = ({
6
13
  isOpen,
@@ -11,28 +18,27 @@ const DeleteCustomManifestModal = ({
11
18
  onClose: () => void;
12
19
  onDelete: () => void;
13
20
  }) => (
14
- <Modal
15
- title={'Remove custom manifests'}
16
- isOpen={isOpen}
17
- onClose={onClose}
18
- variant={ModalVariant.small}
19
- actions={[
21
+ <Modal isOpen={isOpen} onClose={onClose} variant={ModalVariant.small}>
22
+ <ModalHeader title={'Remove custom manifests'} />
23
+ <ModalBody>
24
+ <Content>
25
+ All the data entered for custom manifests will be lost and there will not be any custom
26
+ manifests included in the installation.
27
+ </Content>
28
+ </ModalBody>
29
+ <ModalFooter>
20
30
  <Button
21
31
  data-testid="delete-manifest-submit"
22
32
  key="confirm"
23
33
  variant="danger"
24
34
  onClick={onDelete}
25
35
  >
26
- {'Remove'}{' '}
27
- </Button>,
36
+ Remove
37
+ </Button>
28
38
  <Button key="cancel" variant="link" onClick={onClose}>
29
39
  Cancel
30
- </Button>,
31
- ]}
32
- >
33
- {
34
- 'All the data entered for custom manifests will be lost and there will not be any custom manifests included in the installation.'
35
- }
40
+ </Button>
41
+ </ModalFooter>
36
42
  </Modal>
37
43
  );
38
44
 
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { Language } from '@patternfly/react-code-editor';
3
- import { ExpandableSection, Grid, GridItem, TextInput } from '@patternfly/react-core';
3
+ import { ExpandableSection, Grid, GridItem } from '@patternfly/react-core';
4
4
  import { useField } from 'formik';
5
5
  import { OcmInputField, OcmCodeField } from '../../../ui/OcmFormFields';
6
6
  import { CustomManifestValues } from '../data/dataTypes';
@@ -30,12 +30,6 @@ const ExpandedManifest = ({ fieldName, manifestIdx }: CustomManifestComponentPro
30
30
  >
31
31
  <Grid hasGutter span={12}>
32
32
  <GridItem span={6}>
33
- <TextInput
34
- hidden={true}
35
- name={`${fieldName}.fakeId`}
36
- data-testid={`fakeId-${manifestIdx}`}
37
- id={`fakeId-${manifestIdx}`}
38
- />
39
33
  <FolderDropdown name={`${fieldName}.folder`} data-testid={`folder-${manifestIdx}`} />
40
34
  </GridItem>
41
35
  <GridItem span={6}>
@@ -8,6 +8,7 @@ import {
8
8
  Grid,
9
9
  } from '@patternfly/react-core';
10
10
  import { FieldArray, useFormikContext } from 'formik';
11
+ import { Address6 } from 'ip-address';
11
12
  import {
12
13
  DUAL_STACK,
13
14
  PREFIX_MAX_RESTRICTION,
@@ -16,10 +17,6 @@ import {
16
17
  } from '../../../../common';
17
18
  import { OcmInputField } from '../../ui/OcmFormFields';
18
19
 
19
- const getNetworkLabelSuffix = (index: number, isDualStack: boolean) => {
20
- return isDualStack ? ` (${index === 0 ? 'IPv4' : 'IPv6'})` : '';
21
- };
22
-
23
20
  const IPv4PrefixPopoverText =
24
21
  '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.';
25
22
 
@@ -36,10 +33,62 @@ const serviceCidrHelperText =
36
33
  'Enter only 1 IP address pool. If you need to access the services from an external network, configure load balancers and routers to manage the traffic.';
37
34
 
38
35
  const AdvancedNetworkFields = () => {
39
- const { values, errors } = useFormikContext<NetworkConfigurationValues>();
36
+ const { values, errors, setFieldValue } = useFormikContext<NetworkConfigurationValues>();
40
37
 
41
38
  const isDualStack = values.stackType === DUAL_STACK;
42
39
 
40
+ // Reorder Cluster Networks and Service Networks when Machine Network primary changes
41
+ React.useEffect(() => {
42
+ if (!isDualStack || !values.machineNetworks?.[0]?.cidr) return;
43
+
44
+ const primaryMachineNetworkCidr = values.machineNetworks[0].cidr;
45
+ const isPrimaryIPv6 = Address6.isValid(primaryMachineNetworkCidr);
46
+
47
+ // Check Cluster Networks
48
+ if (values.clusterNetworks && values.clusterNetworks.length >= 2) {
49
+ const firstClusterCidr = values.clusterNetworks[0].cidr;
50
+ if (!firstClusterCidr) return;
51
+
52
+ const isFirstClusterIPv6 = Address6.isValid(firstClusterCidr);
53
+
54
+ // If primary machine is IPv6 but first cluster is IPv4, swap them
55
+ if (isPrimaryIPv6 && !isFirstClusterIPv6) {
56
+ const reordered = [values.clusterNetworks[1], values.clusterNetworks[0]];
57
+ setFieldValue('clusterNetworks', reordered, false);
58
+ }
59
+ // If primary machine is IPv4 but first cluster is IPv6, swap them
60
+ else if (!isPrimaryIPv6 && isFirstClusterIPv6) {
61
+ const reordered = [values.clusterNetworks[1], values.clusterNetworks[0]];
62
+ setFieldValue('clusterNetworks', reordered, false);
63
+ }
64
+ }
65
+
66
+ // Check Service Networks
67
+ if (values.serviceNetworks && values.serviceNetworks.length >= 2) {
68
+ const firstServiceCidr = values.serviceNetworks[0].cidr;
69
+ if (!firstServiceCidr) return;
70
+
71
+ const isFirstServiceIPv6 = Address6.isValid(firstServiceCidr);
72
+
73
+ // If primary machine is IPv6 but first service is IPv4, swap them
74
+ if (isPrimaryIPv6 && !isFirstServiceIPv6) {
75
+ const reordered = [values.serviceNetworks[1], values.serviceNetworks[0]];
76
+ setFieldValue('serviceNetworks', reordered, false);
77
+ }
78
+ // If primary machine is IPv4 but first service is IPv6, swap them
79
+ else if (!isPrimaryIPv6 && isFirstServiceIPv6) {
80
+ const reordered = [values.serviceNetworks[1], values.serviceNetworks[0]];
81
+ setFieldValue('serviceNetworks', reordered, false);
82
+ }
83
+ }
84
+ }, [
85
+ isDualStack,
86
+ values.machineNetworks,
87
+ values.clusterNetworks,
88
+ values.serviceNetworks,
89
+ setFieldValue,
90
+ ]);
91
+
43
92
  const clusterNetworkCidrPrefix = (index: number) =>
44
93
  parseInt(
45
94
  ((values.clusterNetworks && values.clusterNetworks[index].cidr) || '').split('/')[1],
@@ -61,20 +110,19 @@ const AdvancedNetworkFields = () => {
61
110
  );
62
111
 
63
112
  return (
64
- <Grid hasGutter className="pf-v6-u-ml-lg">
113
+ <Grid className="pf-v6-u-ml-lg">
65
114
  <FieldArray name="clusterNetworks">
66
115
  {() => (
67
116
  <FormGroup fieldId="clusterNetworks" labelInfo={isDualStack && 'Primary'}>
68
117
  {values.clusterNetworks?.map((_, index) => {
69
- const networkSuffix = getNetworkLabelSuffix(index, isDualStack);
70
118
  return (
71
- <Grid hasGutter key={index}>
72
- <GridItem className={'network-field-group pf-v6-u-pb-md'}>
119
+ <Grid key={index} className="pf-v6-u-pb-md">
120
+ <GridItem className={'network-field-group'}>
73
121
  <OcmInputField
74
122
  name={`clusterNetworks.${index}.cidr`}
75
123
  label={
76
124
  <>
77
- <span>{`Cluster network CIDR${networkSuffix} `}</span>
125
+ <span>Cluster network CIDR </span>
78
126
  <PopoverIcon
79
127
  bodyContent={'IP address blocks from which Pod IPs are allocated.'}
80
128
  />
@@ -82,15 +130,15 @@ const AdvancedNetworkFields = () => {
82
130
  }
83
131
  helperText={clusterCidrHelperText}
84
132
  isRequired
85
- labelInfo={index === 0 && isDualStack ? 'Primary' : ''}
133
+ labelInfo={isDualStack ? (index === 0 ? 'Primary' : 'Secondary') : ''}
86
134
  />
87
135
  </GridItem>
88
- <GridItem className={'network-field-group pf-v6-u-pb-md'}>
136
+ <GridItem className={'network-field-group'}>
89
137
  <OcmInputField
90
138
  name={`clusterNetworks.${index}.hostPrefix`}
91
139
  label={
92
140
  <>
93
- <span>Cluster network host prefix{networkSuffix} </span>
141
+ <span>Cluster network host prefix </span>
94
142
  <PopoverIcon
95
143
  bodyContent={clusterNetworkHostPrefixPopoverText(index)}
96
144
  minWidth="30rem"
@@ -123,14 +171,12 @@ const AdvancedNetworkFields = () => {
123
171
  {() => (
124
172
  <FormGroup fieldId="serviceNetworks" labelInfo={isDualStack && 'Primary'}>
125
173
  {values.serviceNetworks?.map((_, index) => (
126
- <GridItem key={index} className={'network-field-group pf-v6-u-pb-md'}>
174
+ <GridItem key={index} className={'network-field-group'}>
127
175
  <OcmInputField
128
176
  name={`serviceNetworks.${index}.cidr`}
129
177
  label={
130
178
  <>
131
- <span>
132
- {`Service network CIDR${getNetworkLabelSuffix(index, isDualStack)} `}
133
- </span>
179
+ <span>Service network CIDR </span>
134
180
  <PopoverIcon
135
181
  bodyContent={'The IP address pool used for service IP addresses.'}
136
182
  />
@@ -138,7 +184,7 @@ const AdvancedNetworkFields = () => {
138
184
  }
139
185
  helperText={serviceCidrHelperText}
140
186
  isRequired
141
- labelInfo={index === 0 && isDualStack ? 'Primary' : ''}
187
+ labelInfo={isDualStack ? (index === 0 ? 'Primary' : 'Secondary') : ''}
142
188
  />
143
189
  </GridItem>
144
190
  ))}