@openshift-assisted/ui-lib 5.0.0-cim → 5.0.1-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 (382) hide show
  1. package/build/@types/cim/components/ClusterDeployment/ClusterDeploymentWizard.d.ts +1 -1
  2. package/build/@types/cim/components/ClusterDeployment/ClusterDeploymentWizard.d.ts.map +1 -1
  3. package/build/@types/cim/components/ClusterDeployment/clusterDetails/ACMClusterDeploymentDetailsStep.d.ts.map +1 -1
  4. package/build/@types/cim/components/ClusterDeployment/clusterDetails/ClusterDeploymentDetailsStep.d.ts +0 -17
  5. package/build/@types/cim/components/ClusterDeployment/clusterDetails/ClusterDeploymentDetailsStep.d.ts.map +1 -1
  6. package/build/@types/cim/components/ClusterDeployment/clusterDetails/ClusterDetailsFormFields.d.ts.map +1 -1
  7. package/build/@types/cim/components/ClusterDeployment/clusterDetails/useDetailsFormik.d.ts +19 -0
  8. package/build/@types/cim/components/ClusterDeployment/clusterDetails/useDetailsFormik.d.ts.map +1 -0
  9. package/build/@types/cim/components/ClusterDeployment/review/ClusterDeploymentReviewStep.d.ts.map +1 -1
  10. package/build/@types/cim/components/ClusterDeployment/types.d.ts +0 -1
  11. package/build/@types/cim/components/ClusterDeployment/types.d.ts.map +1 -1
  12. package/build/@types/cim/components/ClusterDeployment/wizardTransition.d.ts +1 -1
  13. package/build/@types/cim/components/ClusterDeployment/wizardTransition.d.ts.map +1 -1
  14. package/build/@types/cim/components/common/CpuArchitectureDropdown.d.ts.map +1 -1
  15. package/build/@types/cim/components/helpers/clusterDeployment.d.ts.map +1 -1
  16. package/build/@types/cim/components/modals/CimConfiguration/CimStorageMissingAlert.d.ts.map +1 -1
  17. package/build/@types/cim/components/modals/CimConfiguration/constants.d.ts +1 -1
  18. package/build/@types/cim/hooks/index.d.ts +1 -0
  19. package/build/@types/cim/hooks/index.d.ts.map +1 -1
  20. package/build/@types/cim/hooks/useAgents.d.ts +4 -0
  21. package/build/@types/cim/hooks/useAgents.d.ts.map +1 -0
  22. package/build/@types/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.d.ts +2 -1
  23. package/build/@types/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.d.ts.map +1 -1
  24. package/build/@types/common/components/clusterConfiguration/ExternalPlatformsDropdown.d.ts.map +1 -1
  25. package/build/@types/common/components/clusterConfiguration/utils.d.ts +9 -1
  26. package/build/@types/common/components/clusterConfiguration/utils.d.ts.map +1 -1
  27. package/build/@types/common/components/clusterDetail/ClusterCredentials.d.ts.map +1 -1
  28. package/build/@types/common/components/clusterDetail/ConsoleModal.d.ts +0 -5
  29. package/build/@types/common/components/clusterDetail/ConsoleModal.d.ts.map +1 -1
  30. package/build/@types/common/components/clusterWizard/ReviewValidations.d.ts.map +1 -1
  31. package/build/@types/common/components/clusterWizard/clusterDetailsValidation.d.ts.map +1 -1
  32. package/build/@types/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.d.ts.map +1 -1
  33. package/build/@types/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.d.ts.map +1 -1
  34. package/build/@types/common/components/clusterWizard/validationsInfoUtils.d.ts +0 -1
  35. package/build/@types/common/components/clusterWizard/validationsInfoUtils.d.ts.map +1 -1
  36. package/build/@types/common/components/hosts/utils.d.ts.map +1 -1
  37. package/build/@types/common/config/constants.d.ts.map +1 -1
  38. package/build/@types/common/selectors/clusterSelectors.d.ts +1 -1
  39. package/build/@types/common/selectors/clusterSelectors.d.ts.map +1 -1
  40. package/build/@types/common/types/clusters.d.ts +2 -2
  41. package/build/@types/common/types/clusters.d.ts.map +1 -1
  42. package/build/@types/ocm/components/Routes.d.ts +1 -1
  43. package/build/@types/ocm/components/Routes.d.ts.map +1 -1
  44. package/build/@types/ocm/components/clusterConfiguration/DiscoveryImageForm.d.ts.map +1 -1
  45. package/build/@types/ocm/components/clusterConfiguration/DiscoveryImageModal.d.ts +0 -1
  46. package/build/@types/ocm/components/clusterConfiguration/DiscoveryImageModal.d.ts.map +1 -1
  47. package/build/@types/ocm/components/clusterConfiguration/OcmClusterDetailsFormFields.d.ts.map +1 -1
  48. package/build/@types/ocm/components/clusterConfiguration/manifestsConfiguration/CustomManifestsPage.d.ts.map +1 -1
  49. package/build/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/CustomManifestsForm.d.ts.map +1 -1
  50. package/build/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/utils.d.ts +4 -0
  51. package/build/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/utils.d.ts.map +1 -1
  52. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfiguration.d.ts.map +1 -1
  53. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.d.ts.map +1 -1
  54. package/build/@types/ocm/components/clusterConfiguration/operators/OperatorCheckbox.d.ts +3 -1
  55. package/build/@types/ocm/components/clusterConfiguration/operators/OperatorCheckbox.d.ts.map +1 -1
  56. package/build/@types/ocm/components/clusterConfiguration/operators/bundleSpecs.d.ts.map +1 -1
  57. package/build/@types/ocm/components/clusterConfiguration/operators/utils.d.ts +3 -6
  58. package/build/@types/ocm/components/clusterConfiguration/operators/utils.d.ts.map +1 -1
  59. package/build/@types/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.d.ts.map +1 -1
  60. package/build/@types/ocm/components/clusterConfiguration/review/ReviewOperatorsTable.d.ts.map +1 -1
  61. package/build/@types/ocm/components/clusterConfiguration/review/ReviewSummary.d.ts.map +1 -1
  62. package/build/@types/ocm/components/clusterConfiguration/review/TableSummaryExpandable.d.ts +1 -0
  63. package/build/@types/ocm/components/clusterConfiguration/review/TableSummaryExpandable.d.ts.map +1 -1
  64. package/build/@types/ocm/components/clusterConfiguration/review/utils.d.ts +1 -1
  65. package/build/@types/ocm/components/clusterConfiguration/review/utils.d.ts.map +1 -1
  66. package/build/@types/ocm/components/clusterConfiguration/staticIp/components/StaticIpForm.d.ts.map +1 -1
  67. package/build/@types/ocm/components/clusterConfiguration/staticIp/components/StaticIpPage.d.ts.map +1 -1
  68. package/build/@types/ocm/components/clusterConfiguration/staticIp/data/formDataToInfraEnvField.d.ts.map +1 -1
  69. package/build/@types/ocm/components/clusterConfiguration/staticIp/data/nmstateTypes.d.ts +1 -0
  70. package/build/@types/ocm/components/clusterConfiguration/staticIp/data/nmstateTypes.d.ts.map +1 -1
  71. package/build/@types/ocm/components/clusterConfiguration/staticIp/data/nmstateYaml.d.ts +1 -1
  72. package/build/@types/ocm/components/clusterConfiguration/staticIp/data/nmstateYaml.d.ts.map +1 -1
  73. package/build/@types/ocm/components/clusterDetail/AssistedInstallerDetailCard.d.ts +1 -1
  74. package/build/@types/ocm/components/clusterDetail/AssistedInstallerDetailCard.d.ts.map +1 -1
  75. package/build/@types/ocm/components/clusterDetail/ClusterDetailsButtonGroup.d.ts.map +1 -1
  76. package/build/@types/ocm/components/clusterWizard/ClusterDetails.d.ts.map +1 -1
  77. package/build/@types/ocm/components/clusterWizard/ClusterWizardContextProvider.d.ts.map +1 -1
  78. package/build/@types/ocm/components/clusterWizard/NewClusterWizard.d.ts.map +1 -1
  79. package/build/@types/ocm/components/clusterWizard/Operators.d.ts.map +1 -1
  80. package/build/@types/ocm/components/clusterWizard/OperatorsBundle.d.ts +3 -3
  81. package/build/@types/ocm/components/clusterWizard/OperatorsBundle.d.ts.map +1 -1
  82. package/build/@types/ocm/components/clusterWizard/OperatorsSelect.d.ts.map +1 -1
  83. package/build/@types/ocm/components/clusterWizard/OptionalOperatorsDropdown.d.ts +13 -0
  84. package/build/@types/ocm/components/clusterWizard/OptionalOperatorsDropdown.d.ts.map +1 -0
  85. package/build/@types/ocm/components/clusterWizard/wizardTransition.d.ts +3 -4
  86. package/build/@types/ocm/components/clusterWizard/wizardTransition.d.ts.map +1 -1
  87. package/build/@types/ocm/components/clusters/ClustersListToolbar.d.ts +1 -2
  88. package/build/@types/ocm/components/clusters/ClustersListToolbar.d.ts.map +1 -1
  89. package/build/@types/ocm/components/clusters/ClustersTable.d.ts.map +1 -1
  90. package/build/@types/ocm/components/ui/Buttons/BackButton.d.ts +1 -1
  91. package/build/@types/ocm/components/ui/Buttons/BackButton.d.ts.map +1 -1
  92. package/build/@types/ocm/hooks/useLateBinding.d.ts.map +1 -1
  93. package/build/@types/ocm/services/InfraEnvsService.d.ts.map +1 -1
  94. package/build/@types/ocm/store/hooks.d.ts +1 -1
  95. package/build/@types/ocm/store/slices/clusters/selectors.d.ts +5 -61
  96. package/build/@types/ocm/store/slices/clusters/selectors.d.ts.map +1 -1
  97. package/build/@types/ocm/store/slices/current-cluster/slice.d.ts +2 -0
  98. package/build/@types/ocm/store/slices/current-cluster/slice.d.ts.map +1 -1
  99. package/build/@types/ocm/store/slices/feature-flags/selectors.d.ts +2 -20
  100. package/build/@types/ocm/store/slices/feature-flags/selectors.d.ts.map +1 -1
  101. package/build/@types/ocm/store/slices/infra-envs/selectors.d.ts +4 -21
  102. package/build/@types/ocm/store/slices/infra-envs/selectors.d.ts.map +1 -1
  103. package/build/cjs/cim/components/Agent/NoAgentsAlert.js +2 -2
  104. package/build/cjs/cim/components/Agent/NoAgentsAlert.js.map +1 -1
  105. package/build/cjs/cim/components/Agent/tableColumns.js +3 -3
  106. package/build/cjs/cim/components/Agent/tableColumns.js.map +1 -1
  107. package/build/cjs/cim/components/ClusterDeployment/ClusterDeploymentWizard.js +9 -1
  108. package/build/cjs/cim/components/ClusterDeployment/ClusterDeploymentWizard.js.map +1 -1
  109. package/build/cjs/cim/components/ClusterDeployment/clusterDetails/ACMClusterDeploymentDetailsStep.js +4 -2
  110. package/build/cjs/cim/components/ClusterDeployment/clusterDetails/ACMClusterDeploymentDetailsStep.js.map +1 -1
  111. package/build/cjs/cim/components/ClusterDeployment/clusterDetails/ClusterDeploymentDetailsStep.js +5 -31
  112. package/build/cjs/cim/components/ClusterDeployment/clusterDetails/ClusterDeploymentDetailsStep.js.map +1 -1
  113. package/build/cjs/cim/components/ClusterDeployment/clusterDetails/ClusterDetailsFormFields.js +1 -11
  114. package/build/cjs/cim/components/ClusterDeployment/clusterDetails/ClusterDetailsFormFields.js.map +1 -1
  115. package/build/cjs/cim/components/ClusterDeployment/clusterDetails/useDetailsFormik.js +41 -0
  116. package/build/cjs/cim/components/ClusterDeployment/clusterDetails/useDetailsFormik.js.map +1 -0
  117. package/build/cjs/cim/components/ClusterDeployment/review/ClusterDeploymentReviewStep.js +4 -4
  118. package/build/cjs/cim/components/ClusterDeployment/review/ClusterDeploymentReviewStep.js.map +1 -1
  119. package/build/cjs/cim/components/ClusterDeployment/wizardTransition.js +5 -1
  120. package/build/cjs/cim/components/ClusterDeployment/wizardTransition.js.map +1 -1
  121. package/build/cjs/cim/components/Hypershift/DetailsPage/NodePoolsTable.js +2 -2
  122. package/build/cjs/cim/components/Hypershift/DetailsPage/NodePoolsTable.js.map +1 -1
  123. package/build/cjs/cim/components/InfraEnv/AddHostDropdown.js +2 -2
  124. package/build/cjs/cim/components/InfraEnv/AddHostDropdown.js.map +1 -1
  125. package/build/cjs/cim/components/common/CpuArchitectureDropdown.js +1 -1
  126. package/build/cjs/cim/components/common/CpuArchitectureDropdown.js.map +1 -1
  127. package/build/cjs/cim/components/helpers/clusterDeployment.js +14 -10
  128. package/build/cjs/cim/components/helpers/clusterDeployment.js.map +1 -1
  129. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigProgressAlert.js +3 -3
  130. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigProgressAlert.js.map +1 -1
  131. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigurationFormFields.js +1 -1
  132. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigurationFormFields.js.map +1 -1
  133. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigurationModal.js +2 -2
  134. package/build/cjs/cim/components/modals/CimConfiguration/CimConfigurationModal.js.map +1 -1
  135. package/build/cjs/cim/components/modals/CimConfiguration/CimStorageMissingAlert.js +3 -3
  136. package/build/cjs/cim/components/modals/CimConfiguration/CimStorageMissingAlert.js.map +1 -1
  137. package/build/cjs/cim/components/modals/CimConfiguration/constants.js +1 -1
  138. package/build/cjs/cim/components/modals/MassDeleteAgentModal.js +2 -2
  139. package/build/cjs/cim/components/modals/MassDeleteAgentModal.js.map +1 -1
  140. package/build/cjs/cim/hooks/index.js +1 -0
  141. package/build/cjs/cim/hooks/index.js.map +1 -1
  142. package/build/cjs/cim/hooks/useAgents.js +13 -0
  143. package/build/cjs/cim/hooks/useAgents.js.map +1 -0
  144. package/build/cjs/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.js +9 -3
  145. package/build/cjs/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.js.map +1 -1
  146. package/build/cjs/common/components/clusterConfiguration/ExternalPlatformsDropdown.js +1 -1
  147. package/build/cjs/common/components/clusterConfiguration/ExternalPlatformsDropdown.js.map +1 -1
  148. package/build/cjs/common/components/clusterConfiguration/utils.js +13 -1
  149. package/build/cjs/common/components/clusterConfiguration/utils.js.map +1 -1
  150. package/build/cjs/common/components/clusterConfiguration/utils.test.js +36 -0
  151. package/build/cjs/common/components/clusterConfiguration/utils.test.js.map +1 -1
  152. package/build/cjs/common/components/clusterDetail/ClusterCredentials.js +10 -9
  153. package/build/cjs/common/components/clusterDetail/ClusterCredentials.js.map +1 -1
  154. package/build/cjs/common/components/clusterDetail/ConsoleModal.js +1 -10
  155. package/build/cjs/common/components/clusterDetail/ConsoleModal.js.map +1 -1
  156. package/build/cjs/common/components/clusterWizard/ReviewValidations.js +16 -0
  157. package/build/cjs/common/components/clusterWizard/ReviewValidations.js.map +1 -1
  158. package/build/cjs/common/components/clusterWizard/clusterDetailsValidation.js +34 -19
  159. package/build/cjs/common/components/clusterWizard/clusterDetailsValidation.js.map +1 -1
  160. package/build/cjs/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.js +29 -31
  161. package/build/cjs/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.js.map +1 -1
  162. package/build/cjs/common/components/clusterWizard/networkingSteps/ManagedNetworkingControlGroup.js +3 -3
  163. package/build/cjs/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.js +19 -30
  164. package/build/cjs/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.js.map +1 -1
  165. package/build/cjs/common/components/clusterWizard/validationsInfoUtils.js +1 -17
  166. package/build/cjs/common/components/clusterWizard/validationsInfoUtils.js.map +1 -1
  167. package/build/cjs/common/components/hosts/utils.js +6 -1
  168. package/build/cjs/common/components/hosts/utils.js.map +1 -1
  169. package/build/cjs/common/config/constants.js +4 -0
  170. package/build/cjs/common/config/constants.js.map +1 -1
  171. package/build/cjs/common/selectors/clusterSelectors.js +7 -8
  172. package/build/cjs/common/selectors/clusterSelectors.js.map +1 -1
  173. package/build/cjs/common/types/clusters.js.map +1 -1
  174. package/build/cjs/common/validationSchemas/addressValidation.js +1 -1
  175. package/build/cjs/common/validationSchemas/addressValidation.js.map +1 -1
  176. package/build/cjs/ocm/components/Routes.js +8 -8
  177. package/build/cjs/ocm/components/Routes.js.map +1 -1
  178. package/build/cjs/ocm/components/clusterConfiguration/DiscoveryImageForm.js +5 -2
  179. package/build/cjs/ocm/components/clusterConfiguration/DiscoveryImageForm.js.map +1 -1
  180. package/build/cjs/ocm/components/clusterConfiguration/DiscoveryImageModal.js +2 -2
  181. package/build/cjs/ocm/components/clusterConfiguration/DiscoveryImageModal.js.map +1 -1
  182. package/build/cjs/ocm/components/clusterConfiguration/OcmClusterDetailsFormFields.js +6 -2
  183. package/build/cjs/ocm/components/clusterConfiguration/OcmClusterDetailsFormFields.js.map +1 -1
  184. package/build/cjs/ocm/components/clusterConfiguration/OcmClusterProgressItems.js +1 -1
  185. package/build/cjs/ocm/components/clusterConfiguration/OcmClusterProgressItems.js.map +1 -1
  186. package/build/cjs/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.js +1 -1
  187. package/build/cjs/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.js.map +1 -1
  188. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/CustomManifestsPage.js +3 -1
  189. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/CustomManifestsPage.js.map +1 -1
  190. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/CustomManifestsForm.js +3 -1
  191. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/CustomManifestsForm.js.map +1 -1
  192. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/utils.js +11 -8
  193. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/utils.js.map +1 -1
  194. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfiguration.js +68 -17
  195. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfiguration.js.map +1 -1
  196. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.js +1 -1
  197. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.js.map +1 -1
  198. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.js +50 -13
  199. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.js.map +1 -1
  200. package/build/cjs/ocm/components/clusterConfiguration/operators/OperatorCheckbox.js +39 -21
  201. package/build/cjs/ocm/components/clusterConfiguration/operators/OperatorCheckbox.js.map +1 -1
  202. package/build/cjs/ocm/components/clusterConfiguration/operators/bundleSpecs.js +1 -2
  203. package/build/cjs/ocm/components/clusterConfiguration/operators/bundleSpecs.js.map +1 -1
  204. package/build/cjs/ocm/components/clusterConfiguration/operators/utils.js +7 -25
  205. package/build/cjs/ocm/components/clusterConfiguration/operators/utils.js.map +1 -1
  206. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.js +4 -2
  207. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.js.map +1 -1
  208. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewOperatorsTable.js +75 -20
  209. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewOperatorsTable.js.map +1 -1
  210. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewSummary.js +2 -2
  211. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewSummary.js.map +1 -1
  212. package/build/cjs/ocm/components/clusterConfiguration/review/TableSummaryExpandable.css +3 -0
  213. package/build/cjs/ocm/components/clusterConfiguration/review/TableSummaryExpandable.js +2 -3
  214. package/build/cjs/ocm/components/clusterConfiguration/review/TableSummaryExpandable.js.map +1 -1
  215. package/build/cjs/ocm/components/clusterConfiguration/review/utils.js +8 -2
  216. package/build/cjs/ocm/components/clusterConfiguration/review/utils.js.map +1 -1
  217. package/build/cjs/ocm/components/clusterConfiguration/review/utils.test.js +35 -0
  218. package/build/cjs/ocm/components/clusterConfiguration/review/utils.test.js.map +1 -1
  219. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/StaticIpForm.js +10 -1
  220. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/StaticIpForm.js.map +1 -1
  221. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/StaticIpPage.js +5 -5
  222. package/build/cjs/ocm/components/clusterConfiguration/staticIp/components/StaticIpPage.js.map +1 -1
  223. package/build/cjs/ocm/components/clusterConfiguration/staticIp/data/formDataToInfraEnvField.js +2 -2
  224. package/build/cjs/ocm/components/clusterConfiguration/staticIp/data/formDataToInfraEnvField.js.map +1 -1
  225. package/build/cjs/ocm/components/clusterConfiguration/staticIp/data/nmstateTypes.js.map +1 -1
  226. package/build/cjs/ocm/components/clusterConfiguration/staticIp/data/nmstateYaml.js +3 -7
  227. package/build/cjs/ocm/components/clusterConfiguration/staticIp/data/nmstateYaml.js.map +1 -1
  228. package/build/cjs/ocm/components/clusterDetail/AssistedInstallerDetailCard.js +4 -4
  229. package/build/cjs/ocm/components/clusterDetail/AssistedInstallerDetailCard.js.map +1 -1
  230. package/build/cjs/ocm/components/clusterDetail/ClusterDetail.js +4 -4
  231. package/build/cjs/ocm/components/clusterDetail/ClusterDetail.js.map +1 -1
  232. package/build/cjs/ocm/components/clusterDetail/ClusterDetailsButtonGroup.js +8 -2
  233. package/build/cjs/ocm/components/clusterDetail/ClusterDetailsButtonGroup.js.map +1 -1
  234. package/build/cjs/ocm/components/clusterWizard/ClusterDetails.js +6 -13
  235. package/build/cjs/ocm/components/clusterWizard/ClusterDetails.js.map +1 -1
  236. package/build/cjs/ocm/components/clusterWizard/ClusterDetailsForm.js +2 -2
  237. package/build/cjs/ocm/components/clusterWizard/ClusterDetailsForm.js.map +1 -1
  238. package/build/cjs/ocm/components/clusterWizard/ClusterWizardContextProvider.js +6 -6
  239. package/build/cjs/ocm/components/clusterWizard/ClusterWizardContextProvider.js.map +1 -1
  240. package/build/cjs/ocm/components/clusterWizard/ClusterWizardFooter.js +2 -2
  241. package/build/cjs/ocm/components/clusterWizard/ClusterWizardFooter.js.map +1 -1
  242. package/build/cjs/ocm/components/clusterWizard/NewClusterWizard.js +6 -3
  243. package/build/cjs/ocm/components/clusterWizard/NewClusterWizard.js.map +1 -1
  244. package/build/cjs/ocm/components/clusterWizard/Operators.js +40 -12
  245. package/build/cjs/ocm/components/clusterWizard/Operators.js.map +1 -1
  246. package/build/cjs/ocm/components/clusterWizard/OperatorsBundle.js +34 -15
  247. package/build/cjs/ocm/components/clusterWizard/OperatorsBundle.js.map +1 -1
  248. package/build/cjs/ocm/components/clusterWizard/OperatorsSelect.js +18 -4
  249. package/build/cjs/ocm/components/clusterWizard/OperatorsSelect.js.map +1 -1
  250. package/build/cjs/ocm/components/clusterWizard/OperatorsSelect.test.js +11 -5
  251. package/build/cjs/ocm/components/clusterWizard/OperatorsSelect.test.js.map +1 -1
  252. package/build/cjs/ocm/components/clusterWizard/OperatorsStep.js +1 -1
  253. package/build/cjs/ocm/components/clusterWizard/OperatorsStep.js.map +1 -1
  254. package/build/cjs/ocm/components/clusterWizard/OptionalOperatorsDropdown.js +34 -0
  255. package/build/cjs/ocm/components/clusterWizard/OptionalOperatorsDropdown.js.map +1 -0
  256. package/build/cjs/ocm/components/clusterWizard/disconnected/ReviewStep.js +3 -3
  257. package/build/cjs/ocm/components/clusterWizard/disconnected/ReviewStep.js.map +1 -1
  258. package/build/cjs/ocm/components/clusterWizard/wizardTransition.js +69 -29
  259. package/build/cjs/ocm/components/clusterWizard/wizardTransition.js.map +1 -1
  260. package/build/cjs/ocm/components/clusters/ClusterBreadcrumbs.js +2 -2
  261. package/build/cjs/ocm/components/clusters/ClusterBreadcrumbs.js.map +1 -1
  262. package/build/cjs/ocm/components/clusters/ClusterPage.js +4 -4
  263. package/build/cjs/ocm/components/clusters/ClusterPage.js.map +1 -1
  264. package/build/cjs/ocm/components/clusters/Clusters.js +3 -3
  265. package/build/cjs/ocm/components/clusters/Clusters.js.map +1 -1
  266. package/build/cjs/ocm/components/clusters/ClustersListToolbar.js +5 -5
  267. package/build/cjs/ocm/components/clusters/ClustersListToolbar.js.map +1 -1
  268. package/build/cjs/ocm/components/clusters/ClustersTable.js +4 -3
  269. package/build/cjs/ocm/components/clusters/ClustersTable.js.map +1 -1
  270. package/build/cjs/ocm/components/featureSupportLevels/featureStateUtils.js +1 -1
  271. package/build/cjs/ocm/components/ui/Buttons/BackButton.js +2 -2
  272. package/build/cjs/ocm/components/ui/Buttons/BackButton.js.map +1 -1
  273. package/build/cjs/ocm/hooks/useInfraEnvId.js +2 -2
  274. package/build/cjs/ocm/hooks/useInfraEnvId.js.map +1 -1
  275. package/build/cjs/ocm/hooks/useLateBinding.js +41 -26
  276. package/build/cjs/ocm/hooks/useLateBinding.js.map +1 -1
  277. package/build/cjs/ocm/hooks/usePullSecret.js +2 -2
  278. package/build/cjs/ocm/services/InfraEnvsService.js +4 -1
  279. package/build/cjs/ocm/services/InfraEnvsService.js.map +1 -1
  280. package/build/cjs/ocm/store/slices/clusters/selectors.js +2 -2
  281. package/build/cjs/ocm/store/slices/clusters/selectors.js.map +1 -1
  282. package/build/cjs/ocm/store/slices/feature-flags/selectors.js.map +1 -1
  283. package/build/cjs/ocm/store/slices/infra-envs/selectors.js.map +1 -1
  284. package/lib/cim/components/Agent/NoAgentsAlert.tsx +1 -1
  285. package/lib/cim/components/Agent/tableColumns.tsx +1 -1
  286. package/lib/cim/components/ClusterDeployment/ClusterDeploymentWizard.tsx +10 -2
  287. package/lib/cim/components/ClusterDeployment/clusterDetails/ACMClusterDeploymentDetailsStep.tsx +3 -1
  288. package/lib/cim/components/ClusterDeployment/clusterDetails/ClusterDeploymentDetailsStep.tsx +5 -86
  289. package/lib/cim/components/ClusterDeployment/clusterDetails/ClusterDetailsFormFields.tsx +1 -12
  290. package/lib/cim/components/ClusterDeployment/clusterDetails/useDetailsFormik.tsx +97 -0
  291. package/lib/cim/components/ClusterDeployment/review/ClusterDeploymentReviewStep.tsx +18 -14
  292. package/lib/cim/components/ClusterDeployment/types.ts +0 -1
  293. package/lib/cim/components/ClusterDeployment/wizardTransition.ts +5 -1
  294. package/lib/cim/components/Hypershift/DetailsPage/NodePoolsTable.tsx +1 -1
  295. package/lib/cim/components/InfraEnv/AddHostDropdown.tsx +1 -1
  296. package/lib/cim/components/common/CpuArchitectureDropdown.tsx +2 -1
  297. package/lib/cim/components/helpers/clusterDeployment.ts +9 -4
  298. package/lib/cim/components/modals/CimConfiguration/CimConfigProgressAlert.tsx +2 -2
  299. package/lib/cim/components/modals/CimConfiguration/CimConfigurationFormFields.tsx +1 -1
  300. package/lib/cim/components/modals/CimConfiguration/CimConfigurationModal.tsx +2 -2
  301. package/lib/cim/components/modals/CimConfiguration/CimStorageMissingAlert.tsx +5 -2
  302. package/lib/cim/components/modals/CimConfiguration/constants.ts +1 -1
  303. package/lib/cim/components/modals/MassDeleteAgentModal.tsx +1 -1
  304. package/lib/cim/hooks/index.tsx +1 -0
  305. package/lib/cim/hooks/useAgents.tsx +15 -0
  306. package/lib/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.tsx +18 -8
  307. package/lib/common/components/clusterConfiguration/ExternalPlatformsDropdown.tsx +3 -1
  308. package/lib/common/components/clusterConfiguration/utils.test.ts +43 -1
  309. package/lib/common/components/clusterConfiguration/utils.ts +13 -0
  310. package/lib/common/components/clusterDetail/ClusterCredentials.tsx +49 -53
  311. package/lib/common/components/clusterDetail/ConsoleModal.tsx +0 -35
  312. package/lib/common/components/clusterWizard/ReviewValidations.tsx +24 -0
  313. package/lib/common/components/clusterWizard/clusterDetailsValidation.ts +38 -12
  314. package/lib/common/components/clusterWizard/networkingSteps/AvailableSubnetsControl.tsx +31 -57
  315. package/lib/common/components/clusterWizard/networkingSteps/ManagedNetworkingControlGroup.tsx +3 -3
  316. package/lib/common/components/clusterWizard/networkingSteps/StackTypeControlGroup.tsx +33 -38
  317. package/lib/common/components/clusterWizard/validationsInfoUtils.ts +0 -20
  318. package/lib/common/components/hosts/utils.ts +8 -1
  319. package/lib/common/config/constants.ts +4 -0
  320. package/lib/common/selectors/clusterSelectors.ts +9 -9
  321. package/lib/common/types/clusters.ts +3 -1
  322. package/lib/common/validationSchemas/addressValidation.tsx +2 -2
  323. package/lib/ocm/components/Routes.tsx +2 -2
  324. package/lib/ocm/components/clusterConfiguration/DiscoveryImageForm.tsx +11 -2
  325. package/lib/ocm/components/clusterConfiguration/DiscoveryImageModal.tsx +13 -3
  326. package/lib/ocm/components/clusterConfiguration/OcmClusterDetailsFormFields.tsx +9 -1
  327. package/lib/ocm/components/clusterConfiguration/OcmClusterProgressItems.tsx +2 -2
  328. package/lib/ocm/components/clusterConfiguration/OcmDiscoveryImageConfigForm.tsx +1 -1
  329. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/CustomManifestsPage.tsx +8 -1
  330. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/components/CustomManifestsForm.tsx +3 -1
  331. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/components/utils.tsx +12 -6
  332. package/lib/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfiguration.tsx +86 -22
  333. package/lib/ocm/components/clusterConfiguration/networkConfiguration/NetworkConfigurationForm.tsx +2 -2
  334. package/lib/ocm/components/clusterConfiguration/networkConfiguration/networkConfigurationValidation.ts +57 -20
  335. package/lib/ocm/components/clusterConfiguration/operators/OperatorCheckbox.tsx +48 -34
  336. package/lib/ocm/components/clusterConfiguration/operators/bundleSpecs.tsx +2 -3
  337. package/lib/ocm/components/clusterConfiguration/operators/utils.tsx +6 -37
  338. package/lib/ocm/components/clusterConfiguration/review/ReviewNetworkingTable.tsx +4 -2
  339. package/lib/ocm/components/clusterConfiguration/review/ReviewOperatorsTable.tsx +114 -24
  340. package/lib/ocm/components/clusterConfiguration/review/ReviewSummary.tsx +1 -4
  341. package/lib/ocm/components/clusterConfiguration/review/TableSummaryExpandable.css +3 -0
  342. package/lib/ocm/components/clusterConfiguration/review/TableSummaryExpandable.tsx +1 -1
  343. package/lib/ocm/components/clusterConfiguration/review/utils.test.ts +41 -0
  344. package/lib/ocm/components/clusterConfiguration/review/utils.tsx +6 -3
  345. package/lib/ocm/components/clusterConfiguration/staticIp/components/StaticIpForm.tsx +10 -1
  346. package/lib/ocm/components/clusterConfiguration/staticIp/components/StaticIpPage.tsx +9 -6
  347. package/lib/ocm/components/clusterConfiguration/staticIp/data/formDataToInfraEnvField.ts +2 -0
  348. package/lib/ocm/components/clusterConfiguration/staticIp/data/nmstateTypes.ts +1 -0
  349. package/lib/ocm/components/clusterConfiguration/staticIp/data/nmstateYaml.ts +2 -0
  350. package/lib/ocm/components/clusterDetail/AssistedInstallerDetailCard.tsx +1 -1
  351. package/lib/ocm/components/clusterDetail/ClusterDetail.tsx +3 -3
  352. package/lib/ocm/components/clusterDetail/ClusterDetailsButtonGroup.tsx +27 -2
  353. package/lib/ocm/components/clusterWizard/ClusterDetails.tsx +4 -16
  354. package/lib/ocm/components/clusterWizard/ClusterDetailsForm.tsx +1 -1
  355. package/lib/ocm/components/clusterWizard/ClusterWizardContextProvider.tsx +6 -14
  356. package/lib/ocm/components/clusterWizard/ClusterWizardFooter.tsx +1 -1
  357. package/lib/ocm/components/clusterWizard/NewClusterWizard.tsx +7 -3
  358. package/lib/ocm/components/clusterWizard/Operators.tsx +47 -12
  359. package/lib/ocm/components/clusterWizard/OperatorsBundle.tsx +72 -26
  360. package/lib/ocm/components/clusterWizard/OperatorsSelect.test.ts +11 -5
  361. package/lib/ocm/components/clusterWizard/OperatorsSelect.tsx +21 -4
  362. package/lib/ocm/components/clusterWizard/OperatorsStep.tsx +1 -1
  363. package/lib/ocm/components/clusterWizard/OptionalOperatorsDropdown.tsx +106 -0
  364. package/lib/ocm/components/clusterWizard/disconnected/ReviewStep.tsx +2 -2
  365. package/lib/ocm/components/clusterWizard/wizardTransition.ts +92 -37
  366. package/lib/ocm/components/clusters/ClusterBreadcrumbs.tsx +1 -1
  367. package/lib/ocm/components/clusters/ClusterPage.tsx +1 -1
  368. package/lib/ocm/components/clusters/Clusters.tsx +2 -2
  369. package/lib/ocm/components/clusters/ClustersListToolbar.tsx +5 -7
  370. package/lib/ocm/components/clusters/ClustersTable.tsx +60 -50
  371. package/lib/ocm/components/featureSupportLevels/featureStateUtils.ts +1 -1
  372. package/lib/ocm/components/ui/Buttons/BackButton.tsx +1 -1
  373. package/lib/ocm/hooks/useInfraEnvId.ts +2 -2
  374. package/lib/ocm/hooks/useLateBinding.ts +45 -24
  375. package/lib/ocm/hooks/usePullSecret.ts +2 -2
  376. package/lib/ocm/services/InfraEnvsService.ts +4 -1
  377. package/lib/ocm/store/slices/clusters/selectors.tsx +7 -5
  378. package/lib/ocm/store/slices/feature-flags/selectors.ts +5 -2
  379. package/lib/ocm/store/slices/infra-envs/selectors.ts +4 -2
  380. package/package.json +17 -17
  381. package/build/cjs/ocm/components/clusterConfiguration/DiscoveryImageModal.css +0 -3
  382. package/lib/ocm/components/clusterConfiguration/DiscoveryImageModal.css +0 -3
@@ -23,6 +23,7 @@ import { CustomManifestValues, ManifestFormData } from '../data/dataTypes';
23
23
  import useClusterCustomManifests from '../../../../hooks/useClusterCustomManifests';
24
24
  import { ClustersService } from '../../../../services';
25
25
  import { CustomManifestsArray } from './CustomManifestsArray';
26
+ import { userProvidedManifests } from './utils';
26
27
  import { selectCurrentClusterPermissionsState } from '../../../../store/slices/current-cluster/selectors';
27
28
  import { useClusterWizardContext } from '../../../clusterWizard/ClusterWizardContext';
28
29
  import { ClustersAPI } from '../../../../services/apis';
@@ -70,7 +71,8 @@ export const CustomManifestsForm = ({
70
71
  if (customManifests && !customManifestsLocalRef.current.length) {
71
72
  const initValues = getInitialValues(customManifests);
72
73
  setInitialValues(initValues);
73
- customManifestsLocalRef.current = !!customManifests.length ? initValues.manifests : [];
74
+ customManifestsLocalRef.current =
75
+ userProvidedManifests(customManifests).length > 0 ? initValues.manifests : [];
74
76
  }
75
77
  }, [customManifests, getInitialValues]);
76
78
 
@@ -1,5 +1,10 @@
1
1
  import { CustomManifestValues, ListManifestsExtended, ManifestFormData } from '../data/dataTypes';
2
2
 
3
+ /** Manifests created by the installer (e.g. OVE defaults); not editable in the wizard. */
4
+ export const userProvidedManifests = <T extends { manifestSource?: string }>(
5
+ manifests: T[] | undefined,
6
+ ): T[] => (manifests ?? []).filter((m) => m.manifestSource !== 'system');
7
+
3
8
  export const getManifestName = (manifestIdx: number) => `Custom manifest ${manifestIdx + 1}`;
4
9
 
5
10
  export const getFormData = (manifests: ListManifestsExtended): ManifestFormData => {
@@ -18,11 +23,11 @@ export const getEmptyManifest = (): CustomManifestValues => {
18
23
  };
19
24
 
20
25
  export const getManifestValues = (manifests: ListManifestsExtended): ManifestFormData => {
21
- if (!!manifests.length) {
22
- return getFormData(manifests);
23
- } else {
24
- return getEmptyManifestsValues();
26
+ const userManifests = userProvidedManifests(manifests);
27
+ if (userManifests.length > 0) {
28
+ return getFormData(userManifests);
25
29
  }
30
+ return getEmptyManifestsValues();
26
31
  };
27
32
 
28
33
  export const getEmptyManifestsValues = (): ManifestFormData => {
@@ -32,8 +37,9 @@ export const getEmptyManifestsValues = (): ManifestFormData => {
32
37
  export const getClusterCustomManifests = (
33
38
  customManifests: ListManifestsExtended,
34
39
  ): CustomManifestValues[] => {
35
- if (customManifests && customManifests.length > 0) {
36
- return customManifests.map((manifest) => ({
40
+ const userManifests = userProvidedManifests(customManifests);
41
+ if (userManifests.length > 0) {
42
+ return userManifests.map((manifest) => ({
37
43
  folder: manifest.folder || 'manifests',
38
44
  filename: manifest.fileName || '',
39
45
  manifestYaml: manifest.yamlContent || '',
@@ -6,13 +6,16 @@ import {
6
6
  canBeDualStack,
7
7
  CpuArchitecture,
8
8
  DUAL_STACK,
9
+ getIPv6FromDualstack,
9
10
  HostSubnets,
10
11
  isAdvNetworkConf,
11
12
  isSNO,
12
13
  NetworkConfigurationValues,
14
+ NO_SUBNET_SET,
13
15
  selectApiVip,
14
16
  selectIngressVip,
15
17
  } from '../../../../common';
18
+ import { Address6 } from 'ip-address';
16
19
  import {
17
20
  ManagedNetworkingControlGroup,
18
21
  UserManagedNetworkingTextContent,
@@ -36,6 +39,7 @@ import {
36
39
  } from '@openshift-assisted/types/assisted-installer-service';
37
40
  import useSupportLevelsAPI from '../../../hooks/useSupportLevelsAPI';
38
41
  import { isOciPlatformType } from '../../utils';
42
+ import { useFeature } from '../../../hooks/use-feature';
39
43
 
40
44
  export type NetworkConfigurationProps = VirtualIPControlGroupProps & {
41
45
  hostSubnets: HostSubnets;
@@ -122,6 +126,33 @@ const getManagedNetworkingState = (
122
126
  };
123
127
  };
124
128
 
129
+ type DefaultNetworkSettings = NetworkConfigurationProps['defaultNetworkSettings'];
130
+
131
+ const getNetworkDefaultsByFamily = (
132
+ settings: DefaultNetworkSettings,
133
+ isDualStack: boolean,
134
+ isIPv6: boolean,
135
+ ) => {
136
+ if (isDualStack) {
137
+ return {
138
+ clusterNetworkDefaults: settings.clusterNetworksDualstack,
139
+ serviceNetworkDefaults: settings.serviceNetworksDualstack,
140
+ };
141
+ }
142
+ if (isIPv6) {
143
+ const ipv6Cluster = getIPv6FromDualstack(settings.clusterNetworksDualstack);
144
+ const ipv6Service = getIPv6FromDualstack(settings.serviceNetworksDualstack);
145
+ return {
146
+ clusterNetworkDefaults: ipv6Cluster ? [ipv6Cluster] : settings.clusterNetworksIpv4,
147
+ serviceNetworkDefaults: ipv6Service ? [ipv6Service] : settings.serviceNetworksIpv4,
148
+ };
149
+ }
150
+ return {
151
+ clusterNetworkDefaults: settings.clusterNetworksIpv4,
152
+ serviceNetworkDefaults: settings.serviceNetworksIpv4,
153
+ };
154
+ };
155
+
125
156
  const NetworkConfiguration = ({
126
157
  cluster,
127
158
  hostSubnets,
@@ -136,8 +167,10 @@ const NetworkConfiguration = ({
136
167
  cluster.platform?.type,
137
168
  );
138
169
  const { isViewerMode } = useSelector(selectCurrentClusterPermissionsState);
139
- const { setFieldValue, values, validateField } = useFormikContext<NetworkConfigurationValues>();
170
+ const { setFieldValue, values, validateField, validateForm } =
171
+ useFormikContext<NetworkConfigurationValues>();
140
172
 
173
+ const isSingleClusterFeature = useFeature('ASSISTED_INSTALLER_SINGLE_CLUSTER_FEATURE');
141
174
  const isSNOCluster = isSNO(cluster);
142
175
  const isUserManagedNetworking = values.managedNetworkingType === 'userManaged';
143
176
  const isDualStack = values.stackType === DUAL_STACK;
@@ -177,30 +210,18 @@ const NetworkConfiguration = ({
177
210
  setAdvanced(checked);
178
211
 
179
212
  if (!checked) {
180
- setFieldValue(
181
- 'clusterNetworks',
182
- isDualStack
183
- ? defaultNetworkSettings.clusterNetworksDualstack
184
- : defaultNetworkSettings.clusterNetworksIpv4,
185
- true,
186
- );
187
- setFieldValue(
188
- 'serviceNetworks',
189
- isDualStack
190
- ? defaultNetworkSettings.serviceNetworksDualstack
191
- : defaultNetworkSettings.serviceNetworksIpv4,
192
- true,
213
+ const primaryCidr = values.machineNetworks?.[0]?.cidr;
214
+ const isIPv6Stack = !!primaryCidr && Address6.isValid(primaryCidr);
215
+ const { clusterNetworkDefaults, serviceNetworkDefaults } = getNetworkDefaultsByFamily(
216
+ defaultNetworkSettings,
217
+ isDualStack,
218
+ isIPv6Stack,
193
219
  );
220
+ setFieldValue('clusterNetworks', clusterNetworkDefaults, true);
221
+ setFieldValue('serviceNetworks', serviceNetworkDefaults, true);
194
222
  }
195
223
  },
196
- [
197
- setFieldValue,
198
- isDualStack,
199
- defaultNetworkSettings.clusterNetworksDualstack,
200
- defaultNetworkSettings.clusterNetworksIpv4,
201
- defaultNetworkSettings.serviceNetworksDualstack,
202
- defaultNetworkSettings.serviceNetworksIpv4,
203
- ],
224
+ [setFieldValue, isDualStack, values.machineNetworks, defaultNetworkSettings],
204
225
  );
205
226
 
206
227
  React.useEffect(() => {
@@ -209,6 +230,47 @@ const NetworkConfiguration = ({
209
230
  }
210
231
  }, [isDualStack, isViewerMode, toggleAdvConfiguration]);
211
232
 
233
+ React.useEffect(() => {
234
+ if (!isSingleClusterFeature || isViewerMode || isDualStack || isAdvanced) {
235
+ return;
236
+ }
237
+ const primaryCidr = values.machineNetworks?.[0]?.cidr;
238
+ if (!primaryCidr || primaryCidr === NO_SUBNET_SET) {
239
+ return;
240
+ }
241
+ const isIPv6 = Address6.isValid(primaryCidr);
242
+ const currentClusterCidr = values.clusterNetworks?.[0]?.cidr;
243
+ const clusterIsIPv6 = currentClusterCidr ? Address6.isValid(currentClusterCidr) : null;
244
+
245
+ if (clusterIsIPv6 === isIPv6) {
246
+ return;
247
+ }
248
+
249
+ const { clusterNetworkDefaults, serviceNetworkDefaults } = getNetworkDefaultsByFamily(
250
+ defaultNetworkSettings,
251
+ false,
252
+ isIPv6,
253
+ );
254
+ if (clusterNetworkDefaults) {
255
+ setFieldValue('clusterNetworks', clusterNetworkDefaults);
256
+ }
257
+ if (serviceNetworkDefaults) {
258
+ setFieldValue('serviceNetworks', serviceNetworkDefaults);
259
+ }
260
+ void validateForm();
261
+ }, [
262
+ isSingleClusterFeature,
263
+ isViewerMode,
264
+ isDualStack,
265
+ isAdvanced,
266
+ values.machineNetworks,
267
+ values.clusterNetworks,
268
+ defaultNetworkSettings,
269
+ setFieldValue,
270
+ validateForm,
271
+ cluster.id,
272
+ ]);
273
+
212
274
  const managedNetworkingState = React.useMemo(
213
275
  () =>
214
276
  getManagedNetworkingState(
@@ -252,6 +314,7 @@ const NetworkConfiguration = ({
252
314
  hostSubnets={hostSubnets}
253
315
  defaultNetworkValues={defaultNetworkSettings}
254
316
  isViewerMode={isViewerMode}
317
+ allowSingleStackIPv6={isSingleClusterFeature}
255
318
  />
256
319
  </StackItem>
257
320
  )}
@@ -277,6 +340,7 @@ const NetworkConfiguration = ({
277
340
  }
278
341
  openshiftVersion={cluster.openshiftVersion}
279
342
  isViewerMode={isViewerMode}
343
+ allowSingleStackIPv6={isSingleClusterFeature}
280
344
  />
281
345
  </StackItem>
282
346
  )}
@@ -9,7 +9,7 @@ import {
9
9
  getFormikErrorFields,
10
10
  getHostSubnets,
11
11
  HostSubnets,
12
- SINGLE_STACK,
12
+ DUAL_STACK,
13
13
  isSNO,
14
14
  LoadingState,
15
15
  NetworkConfigurationValues,
@@ -262,7 +262,7 @@ const NetworkConfigurationPage = ({ cluster }: { cluster: Cluster }) => {
262
262
  if (values.vipDhcpAllocation) {
263
263
  delete params.apiVips;
264
264
  delete params.ingressVips;
265
- } else if (values.stackType === SINGLE_STACK) {
265
+ } else if (values.stackType !== DUAL_STACK) {
266
266
  // The API will rebuild the default machineNetwork
267
267
  params.machineNetworks = [];
268
268
  }
@@ -1,8 +1,11 @@
1
1
  import * as Yup from 'yup';
2
2
  import { TFunction } from 'i18next';
3
+ import { Address6 } from 'ip-address';
3
4
  import {
4
5
  clusterNetworksValidationSchema,
5
6
  dualStackValidationSchema,
7
+ getIPv6FromDualstack,
8
+ isPrimaryIPv6,
6
9
  HostSubnets,
7
10
  isDualStack,
8
11
  isSNO,
@@ -10,6 +13,7 @@ import {
10
13
  NetworkConfigurationValues,
11
14
  serviceNetworkValidationSchema,
12
15
  IPv4ValidationSchema,
16
+ IPv6ValidationSchema,
13
17
  sshPublicKeyValidationSchema,
14
18
  SINGLE_STACK,
15
19
  DUAL_STACK,
@@ -36,6 +40,38 @@ export const getNetworkInitialValues = (
36
40
  ): NetworkConfigurationValues => {
37
41
  const isSNOCluster = isSNO(cluster);
38
42
  const isDualStackType = isDualStack(cluster);
43
+ const primaryMachineNetworkCidr = cluster.machineNetworks?.[0]?.cidr;
44
+ const isIPv6OnlyStack =
45
+ !isDualStackType && !!primaryMachineNetworkCidr && Address6.isValid(primaryMachineNetworkCidr);
46
+
47
+ const getStackType = (): NetworkConfigurationValues['stackType'] => {
48
+ if (isDualStackType) return DUAL_STACK;
49
+ return SINGLE_STACK;
50
+ };
51
+
52
+ const getDefaultClusterNetworks = () => {
53
+ if (isDualStackType) return defaultNetworkValues.clusterNetworksDualstack;
54
+ if (isIPv6OnlyStack) {
55
+ const ipv6Entry = getIPv6FromDualstack(defaultNetworkValues.clusterNetworksDualstack);
56
+ return ipv6Entry ? [{ ...ipv6Entry, clusterId: cluster?.id }] : undefined;
57
+ }
58
+ return defaultNetworkValues.clusterNetworksIpv4?.map((network) => ({
59
+ ...network,
60
+ clusterId: cluster?.id,
61
+ }));
62
+ };
63
+
64
+ const getDefaultServiceNetworks = () => {
65
+ if (isDualStackType) return defaultNetworkValues.serviceNetworksDualstack;
66
+ if (isIPv6OnlyStack) {
67
+ const ipv6Entry = getIPv6FromDualstack(defaultNetworkValues.serviceNetworksDualstack);
68
+ return ipv6Entry ? [{ ...ipv6Entry, clusterId: cluster?.id }] : undefined;
69
+ }
70
+ return defaultNetworkValues.serviceNetworksIpv4?.map((network) => ({
71
+ ...network,
72
+ clusterId: cluster?.id,
73
+ }));
74
+ };
39
75
 
40
76
  return {
41
77
  apiVips: cluster.apiVips,
@@ -50,23 +86,9 @@ export const getNetworkInitialValues = (
50
86
  : 'clusterManaged',
51
87
  networkType: cluster.networkType || NETWORK_TYPE_OVN,
52
88
  machineNetworks: cluster.machineNetworks || [],
53
- stackType: isDualStackType ? DUAL_STACK : SINGLE_STACK,
54
- clusterNetworks:
55
- cluster.clusterNetworks ||
56
- (isDualStackType
57
- ? defaultNetworkValues.clusterNetworksDualstack
58
- : defaultNetworkValues.clusterNetworksIpv4?.map((network) => ({
59
- ...network,
60
- clusterId: cluster?.id,
61
- }))),
62
- serviceNetworks:
63
- cluster.serviceNetworks ||
64
- (isDualStackType
65
- ? defaultNetworkValues.serviceNetworksDualstack
66
- : defaultNetworkValues.serviceNetworksIpv4?.map((network) => ({
67
- ...network,
68
- clusterId: cluster?.id,
69
- }))),
89
+ stackType: getStackType(),
90
+ clusterNetworks: cluster.clusterNetworks || getDefaultClusterNetworks(),
91
+ serviceNetworks: cluster.serviceNetworks || getDefaultServiceNetworks(),
70
92
  };
71
93
  };
72
94
 
@@ -87,7 +109,12 @@ export const getNetworkConfigurationValidationSchema = (
87
109
  : machineNetworksValidationSchema.when('stackType', {
88
110
  is: (stackType: NetworkConfigurationValues['stackType']) =>
89
111
  stackType === SINGLE_STACK,
90
- then: () => machineNetworksValidationSchema.concat(IPv4ValidationSchema),
112
+ then: () => {
113
+ if (isPrimaryIPv6(values.machineNetworks)) {
114
+ return machineNetworksValidationSchema.concat(IPv6ValidationSchema);
115
+ }
116
+ return machineNetworksValidationSchema.concat(IPv4ValidationSchema);
117
+ },
91
118
  otherwise: () =>
92
119
  values.machineNetworks && values.machineNetworks?.length >= 2
93
120
  ? machineNetworksValidationSchema.concat(
@@ -97,13 +124,23 @@ export const getNetworkConfigurationValidationSchema = (
97
124
  }),
98
125
  clusterNetworks: clusterNetworksValidationSchema(t).when('stackType', {
99
126
  is: (stackType: NetworkConfigurationValues['stackType']) => stackType === SINGLE_STACK,
100
- then: (schema) => schema.concat(IPv4ValidationSchema),
127
+ then: (schema) => {
128
+ if (isPrimaryIPv6(values.machineNetworks)) {
129
+ return schema.concat(IPv6ValidationSchema);
130
+ }
131
+ return schema.concat(IPv4ValidationSchema);
132
+ },
101
133
  otherwise: (schema) =>
102
134
  schema.concat(dualStackValidationSchema('cluster network', t, openshiftVersion)),
103
135
  }),
104
136
  serviceNetworks: serviceNetworkValidationSchema(t).when('stackType', {
105
137
  is: (stackType: NetworkConfigurationValues['stackType']) => stackType === SINGLE_STACK,
106
- then: (schema) => schema.concat(IPv4ValidationSchema),
138
+ then: (schema) => {
139
+ if (isPrimaryIPv6(values.machineNetworks)) {
140
+ return schema.concat(IPv6ValidationSchema);
141
+ }
142
+ return schema.concat(IPv4ValidationSchema);
143
+ },
107
144
  otherwise: (schema) =>
108
145
  schema.concat(dualStackValidationSchema('service network', t, openshiftVersion)),
109
146
  }),
@@ -24,7 +24,6 @@ import {
24
24
  import NewFeatureSupportLevelBadge from '../../../../common/components/newFeatureSupportLevels/NewFeatureSupportLevelBadge';
25
25
  import { getFieldId, OperatorsValues, PopoverIcon } from '../../../../common';
26
26
  import { useNewFeatureSupportLevel } from '../../../../common/components/newFeatureSupportLevels';
27
- import { getNewOperators } from './utils';
28
27
  import {
29
28
  highlightMatch,
30
29
  OperatorSpec,
@@ -110,8 +109,10 @@ const OperatorRequirements = ({
110
109
 
111
110
  const OperatorCheckbox = ({
112
111
  bundles,
112
+ checkedOperatorIds,
113
113
  cluster,
114
114
  operatorId,
115
+ isChecked,
115
116
  title,
116
117
  featureId,
117
118
  notStandalone,
@@ -122,8 +123,10 @@ const OperatorCheckbox = ({
122
123
  searchTerm,
123
124
  }: {
124
125
  bundles: Bundle[];
126
+ checkedOperatorIds: Set<string>;
125
127
  cluster: Cluster;
126
128
  operatorId: string;
129
+ isChecked: boolean;
127
130
  openshiftVersion?: string;
128
131
  preflightRequirements: PreflightHardwareRequirements | undefined;
129
132
  searchTerm?: string;
@@ -135,32 +138,54 @@ const OperatorCheckbox = ({
135
138
  const { values, setFieldValue } = useFormikContext<OperatorsValues>();
136
139
  const fieldId = getFieldId(operatorId, 'input');
137
140
  const supportLevel = getFeatureSupportLevel(featureId);
141
+ const getDisabledReason = (): string | undefined => {
142
+ const featureDisabledReason = getFeatureDisabledReason(featureId);
143
+ if (featureDisabledReason) {
144
+ return featureDisabledReason;
145
+ }
138
146
 
139
- const isInBundle = values.selectedBundles.some(
140
- (sb) => !!bundles.find((b) => b.id === sb)?.operators?.includes(operatorId),
141
- );
147
+ const isRequiredByBundle = values.selectedBundles.some(
148
+ (selectedBundle) =>
149
+ !!bundles
150
+ .find((bundle) => bundle.id === selectedBundle.id)
151
+ ?.operators?.includes(operatorId),
152
+ );
153
+ if (isRequiredByBundle) {
154
+ return 'This operator is part of a selected bundle and cannot be deselected.';
155
+ }
142
156
 
143
- const isChecked = values.selectedOperators.includes(operatorId) || isInBundle;
157
+ const isOptionallySelectedForBundle = values.selectedBundles.some((selectedBundle) =>
158
+ selectedBundle.optionalOperators?.includes(operatorId),
159
+ );
160
+ if (isOptionallySelectedForBundle) {
161
+ return 'This optional operator is selected through a bundle. Use the bundle card to change it.';
162
+ }
144
163
 
145
- const parentOperator = preflightRequirements?.operators?.find((op) =>
146
- op.dependencies?.includes(operatorId),
147
- );
164
+ const parentOperator = preflightRequirements?.operators?.find(
165
+ ({ operatorName, dependencies }) =>
166
+ !!operatorName &&
167
+ dependencies?.includes(operatorId) &&
168
+ checkedOperatorIds.has(operatorName),
169
+ );
170
+ if (parentOperator?.operatorName) {
171
+ const parentName = opSpecs[parentOperator.operatorName]?.title || parentOperator.operatorName;
172
+ return `This operator is required by ${parentName}`;
173
+ }
148
174
 
149
- let parentOperatorName = '';
150
- if (
151
- parentOperator?.operatorName &&
152
- values.selectedOperators.includes(parentOperator.operatorName)
153
- ) {
154
- parentOperatorName = opSpecs[parentOperator.operatorName]?.title || parentOperator.operatorName;
155
- }
175
+ if (notStandalone && !checkedOperatorIds.has(operatorId)) {
176
+ return 'This operator cannot be installed as a standalone';
177
+ }
178
+
179
+ return undefined;
180
+ };
156
181
 
157
- const disabledReason = isInBundle
158
- ? 'This operator is part of a bundle and cannot be deselected.'
159
- : notStandalone
160
- ? 'This operator cannot be installed as a standalone'
161
- : parentOperatorName
162
- ? `This operator is a dependency of ${parentOperatorName}`
163
- : getFeatureDisabledReason(featureId);
182
+ const disabledReason = getDisabledReason();
183
+ const handleClick = (_: React.FormEvent, checked: boolean) => {
184
+ const next = checked
185
+ ? [...values.selectedOperators, operatorId]
186
+ : values.selectedOperators.filter((op) => op !== operatorId);
187
+ setFieldValue('selectedOperators', next);
188
+ };
164
189
 
165
190
  return (
166
191
  <FormGroup fieldId={fieldId} id={`form-control__${fieldId}`}>
@@ -182,18 +207,7 @@ const OperatorCheckbox = ({
182
207
  }
183
208
  aria-describedby={`${fieldId}-helper`}
184
209
  isChecked={isChecked}
185
- onChange={(_, checked) => {
186
- setFieldValue(
187
- 'selectedOperators',
188
- getNewOperators(
189
- values.selectedOperators,
190
- operatorId,
191
- preflightRequirements,
192
- checked,
193
- opSpecs,
194
- ),
195
- );
196
- }}
210
+ onChange={handleClick}
197
211
  isDisabled={isViewerMode || !!disabledReason}
198
212
  description={
199
213
  !!Description && (
@@ -31,10 +31,9 @@ export const bundleSpecs: { [key: string]: BundleSpec } = {
31
31
  incompatibleBundles: [],
32
32
  Description: () => (
33
33
  <List>
34
- <ListItem>GPUs are recommended for optimal AI/ML workload performance.</ListItem>
35
34
  <ListItem>
36
- NVIDIA GPU, AMD GPU and Kernel Module Management may or may not be installed based on the
37
- GPU discovered on your hosts.
35
+ GPUs are recommended for optimal AI/ML workload performance. Please select the GPU
36
+ operators you want to install.
38
37
  </ListItem>
39
38
  </List>
40
39
  ),
@@ -1,10 +1,9 @@
1
1
  import {
2
+ BundleCreateParams,
2
3
  Bundle,
3
4
  PreflightHardwareRequirements,
4
5
  } from '@openshift-assisted/types/assisted-installer-service';
5
- import { OperatorSpec } from '../../../../common/components/operators/operatorSpecs';
6
-
7
- const getOperatorDependencies = (
6
+ export const getOperatorDependencies = (
8
7
  operatorId: string,
9
8
  preflightRequirements: PreflightHardwareRequirements | undefined,
10
9
  dependencies: Set<string> = new Set(),
@@ -25,36 +24,6 @@ const getOperatorDependencies = (
25
24
  return [...dependencies];
26
25
  };
27
26
 
28
- export const getNewOperators = (
29
- currentOperators: string[],
30
- operatorId: string,
31
- preflightRequirements: PreflightHardwareRequirements | undefined,
32
- add: boolean,
33
- opSpecs: { [key: string]: OperatorSpec },
34
- ): string[] => {
35
- const dependencies = getOperatorDependencies(operatorId, preflightRequirements);
36
-
37
- if (add) {
38
- const uniqueOps = new Set([...currentOperators, ...dependencies, operatorId]);
39
- return Array.from(uniqueOps);
40
- }
41
-
42
- const newOperators = currentOperators.filter((op) => op !== operatorId);
43
- const notStandaloneDeps = dependencies
44
- .filter((dep) => opSpecs[dep]?.notStandalone)
45
- .filter((dep) => {
46
- const hasDependency = newOperators.some((op) =>
47
- getOperatorDependencies(op, preflightRequirements).includes(dep),
48
- );
49
- if (!hasDependency) {
50
- newOperators.splice(newOperators.indexOf(dep), 1);
51
- }
52
- return !hasDependency;
53
- });
54
-
55
- return currentOperators.filter((op) => op !== operatorId && !notStandaloneDeps.includes(op));
56
- };
57
-
58
27
  const getBundleOperators = (
59
28
  bundle: Bundle,
60
29
  preflightRequirements: PreflightHardwareRequirements | undefined,
@@ -68,7 +37,7 @@ const getBundleOperators = (
68
37
 
69
38
  export const getNewBundleOperators = (
70
39
  currentOperators: string[],
71
- currentBundles: string[],
40
+ currentBundles: BundleCreateParams[],
72
41
  allBundles: Bundle[],
73
42
  newBundle: Bundle,
74
43
  preflightRequirements: PreflightHardwareRequirements | undefined,
@@ -81,10 +50,10 @@ export const getNewBundleOperators = (
81
50
  return Array.from(new Set(combined));
82
51
  }
83
52
 
84
- const newBundles = currentBundles.filter((b) => b !== newBundle.id);
53
+ const newBundles = currentBundles.filter((bundle) => bundle.id !== newBundle.id);
85
54
  const operatorsToKeep = [
86
- ...newBundles.reduce((acc, bundleId) => {
87
- const bundle = allBundles.find(({ id }) => id === bundleId);
55
+ ...newBundles.reduce((acc, selectedBundle) => {
56
+ const bundle = allBundles.find(({ id }) => id === selectedBundle.id);
88
57
  if (bundle) {
89
58
  const bundleOperators = getBundleOperators(bundle, preflightRequirements);
90
59
  bundleOperators.forEach((op) => {
@@ -8,6 +8,7 @@ import {
8
8
  useTranslation,
9
9
  } from '../../../../common';
10
10
  import { getManagementType, getStackTypeLabel } from './utils';
11
+ import { useFeature } from '../../../hooks/use-feature';
11
12
  import { Cluster } from '@openshift-assisted/types/assisted-installer-service';
12
13
 
13
14
  type ReviewTableRowsType = {
@@ -17,6 +18,7 @@ type ReviewTableRowsType = {
17
18
 
18
19
  export const ReviewNetworkingTable = ({ cluster }: { cluster: Cluster }) => {
19
20
  const { t } = useTranslation();
21
+ const isSingleClusterFeature = useFeature('ASSISTED_INSTALLER_SINGLE_CLUSTER_FEATURE');
20
22
  const rows = React.useMemo(() => {
21
23
  const networkRows = [
22
24
  {
@@ -34,7 +36,7 @@ export const ReviewNetworkingTable = ({ cluster }: { cluster: Cluster }) => {
34
36
  cells: [
35
37
  { title: 'Stack type', colSpan: 2 },
36
38
  {
37
- title: getStackTypeLabel(cluster),
39
+ title: getStackTypeLabel(cluster, isSingleClusterFeature),
38
40
  props: { 'data-testid': 'stack-type', colSpan: 2 },
39
41
  },
40
42
  ],
@@ -125,7 +127,7 @@ export const ReviewNetworkingTable = ({ cluster }: { cluster: Cluster }) => {
125
127
  });
126
128
 
127
129
  return networkRows;
128
- }, [cluster]);
130
+ }, [cluster, isSingleClusterFeature]);
129
131
 
130
132
  const rowsAdvanced = React.useMemo(() => {
131
133
  return [