@openshift-assisted/ui-lib 2.41.2 → 2.42.1

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 (217) hide show
  1. package/build/@types/cim/components/ClusterDeployment/ClusterDeploymentDetailsForm.d.ts.map +1 -1
  2. package/build/@types/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscovery.d.ts.map +1 -1
  3. package/build/@types/cim/components/ClusterDeployment/LabelsSelector.d.ts.map +1 -1
  4. package/build/@types/cim/components/ClusterDeployment/ScaleUpForm.d.ts +1 -0
  5. package/build/@types/cim/components/ClusterDeployment/ScaleUpForm.d.ts.map +1 -1
  6. package/build/@types/cim/components/InfraEnv/AddHostDropdown.d.ts.map +1 -1
  7. package/build/@types/cim/components/InfraEnv/EnvironmentDetails.d.ts.map +1 -1
  8. package/build/@types/cim/components/InfraEnv/InfraEnvOpenShiftVersionDropdown.d.ts.map +1 -1
  9. package/build/@types/cim/components/common/CpuArchitectureDropdown.d.ts.map +1 -1
  10. package/build/@types/cim/components/helpers/versions.d.ts.map +1 -1
  11. package/build/@types/cim/components/modals/ScaleUpModal.d.ts +1 -0
  12. package/build/@types/cim/components/modals/ScaleUpModal.d.ts.map +1 -1
  13. package/build/@types/common/components/clusterConfiguration/ControlPlaneNodesDropdown.d.ts.map +1 -1
  14. package/build/@types/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.d.ts.map +1 -1
  15. package/build/@types/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionValues.d.ts +1 -0
  16. package/build/@types/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionValues.d.ts.map +1 -1
  17. package/build/@types/common/components/clusterWizard/clusterDetailsValidation.d.ts.map +1 -1
  18. package/build/@types/common/components/clusterWizard/types.d.ts +1 -0
  19. package/build/@types/common/components/clusterWizard/types.d.ts.map +1 -1
  20. package/build/@types/common/components/hosts/DiskRole.d.ts.map +1 -1
  21. package/build/@types/common/components/hosts/TableToolbar.d.ts.map +1 -1
  22. package/build/@types/common/components/newFeatureSupportLevels/types.d.ts +1 -1
  23. package/build/@types/common/components/newFeatureSupportLevels/types.d.ts.map +1 -1
  24. package/build/@types/common/components/operators/operatorDescriptions.d.ts +23 -0
  25. package/build/@types/common/components/operators/operatorDescriptions.d.ts.map +1 -0
  26. package/build/@types/common/components/operators/operatorSpecs.d.ts +25 -4
  27. package/build/@types/common/components/operators/operatorSpecs.d.ts.map +1 -1
  28. package/build/@types/common/components/ui/ClusterEventsToolbar.d.ts.map +1 -1
  29. package/build/@types/common/components/ui/OpenShiftVersionDropdown.d.ts +0 -1
  30. package/build/@types/common/components/ui/OpenShiftVersionDropdown.d.ts.map +1 -1
  31. package/build/@types/common/components/ui/SimpleDropdown.d.ts +2 -2
  32. package/build/@types/common/components/ui/SimpleDropdown.d.ts.map +1 -1
  33. package/build/@types/common/config/constants.d.ts.map +1 -1
  34. package/build/@types/common/config/docs_links.d.ts +1 -2
  35. package/build/@types/common/config/docs_links.d.ts.map +1 -1
  36. package/build/@types/common/index.d.ts +1 -0
  37. package/build/@types/common/index.d.ts.map +1 -1
  38. package/build/@types/common/types/ui-settings.d.ts +1 -0
  39. package/build/@types/common/types/ui-settings.d.ts.map +1 -1
  40. package/build/@types/common/utils.d.ts +8 -0
  41. package/build/@types/common/utils.d.ts.map +1 -1
  42. package/build/@types/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.d.ts +2 -0
  43. package/build/@types/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.d.ts.map +1 -1
  44. package/build/@types/ocm/components/clusterConfiguration/CpuArchitectureDropdown.d.ts.map +1 -1
  45. package/build/@types/ocm/components/clusterConfiguration/DiscoveryImageTypeDropdown.d.ts.map +1 -1
  46. package/build/@types/ocm/components/clusterConfiguration/OcmBaseDomainField.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/OcmTNADisclaimer.d.ts +4 -0
  49. package/build/@types/ocm/components/clusterConfiguration/OcmTNADisclaimer.d.ts.map +1 -0
  50. package/build/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.d.ts.map +1 -1
  51. package/build/@types/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.d.ts.map +1 -1
  52. package/build/@types/ocm/components/clusterConfiguration/operators/utils.d.ts.map +1 -1
  53. package/build/@types/ocm/components/clusterConfiguration/platformIntegration/ExternalPlatformDropdown.d.ts.map +1 -1
  54. package/build/@types/ocm/components/clusterConfiguration/review/ReviewOperatorsTable.d.ts.map +1 -1
  55. package/build/@types/ocm/components/clusterConfiguration/staticIp/commonValidationSchemas.d.ts.map +1 -1
  56. package/build/@types/ocm/components/clusterWizard/ClusterDetails.d.ts.map +1 -1
  57. package/build/@types/ocm/components/clusterWizard/OperatorsBundle.d.ts.map +1 -1
  58. package/build/@types/ocm/components/clusterWizard/OperatorsSelect.d.ts.map +1 -1
  59. package/build/@types/ocm/components/featureSupportLevels/featureStateUtils.d.ts.map +1 -1
  60. package/build/@types/ocm/components/hosts/use-hosts-table.d.ts.map +1 -1
  61. package/build/@types/ocm/services/DiskEncryptionService.d.ts +1 -1
  62. package/build/@types/ocm/services/DiskEncryptionService.d.ts.map +1 -1
  63. package/build/@types/ocm/store/slices/current-cluster/slice.d.ts +1 -1
  64. package/build/cjs/cim/components/ClusterDeployment/ClusterDeploymentDetailsForm.js +2 -2
  65. package/build/cjs/cim/components/ClusterDeployment/ClusterDeploymentDetailsForm.js.map +1 -1
  66. package/build/cjs/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscovery.js +2 -1
  67. package/build/cjs/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscovery.js.map +1 -1
  68. package/build/cjs/cim/components/ClusterDeployment/LabelsSelector.js +5 -5
  69. package/build/cjs/cim/components/ClusterDeployment/LabelsSelector.js.map +1 -1
  70. package/build/cjs/cim/components/ClusterDeployment/ScaleUpForm.js +2 -2
  71. package/build/cjs/cim/components/ClusterDeployment/ScaleUpForm.js.map +1 -1
  72. package/build/cjs/cim/components/InfraEnv/AddHostDropdown.js +29 -28
  73. package/build/cjs/cim/components/InfraEnv/AddHostDropdown.js.map +1 -1
  74. package/build/cjs/cim/components/InfraEnv/EnvironmentDetails.js +16 -14
  75. package/build/cjs/cim/components/InfraEnv/EnvironmentDetails.js.map +1 -1
  76. package/build/cjs/cim/components/InfraEnv/InfraEnvAgentTable.js +2 -2
  77. package/build/cjs/cim/components/InfraEnv/InfraEnvAgentTable.js.map +1 -1
  78. package/build/cjs/cim/components/InfraEnv/InfraEnvOpenShiftVersionDropdown.js +4 -8
  79. package/build/cjs/cim/components/InfraEnv/InfraEnvOpenShiftVersionDropdown.js.map +1 -1
  80. package/build/cjs/cim/components/common/CpuArchitectureDropdown.js +3 -3
  81. package/build/cjs/cim/components/common/CpuArchitectureDropdown.js.map +1 -1
  82. package/build/cjs/cim/components/helpers/versions.js +1 -1
  83. package/build/cjs/cim/components/helpers/versions.js.map +1 -1
  84. package/build/cjs/cim/components/modals/MassApproveAction.js +2 -2
  85. package/build/cjs/cim/components/modals/MassApproveAction.js.map +1 -1
  86. package/build/cjs/cim/components/modals/ScaleUpModal.js +3 -3
  87. package/build/cjs/cim/components/modals/ScaleUpModal.js.map +1 -1
  88. package/build/cjs/common/components/clusterConfiguration/ControlPlaneNodesDropdown.js +5 -6
  89. package/build/cjs/common/components/clusterConfiguration/ControlPlaneNodesDropdown.js.map +1 -1
  90. package/build/cjs/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.js +11 -6
  91. package/build/cjs/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.js.map +1 -1
  92. package/build/cjs/common/components/clusterDetail/OperatorsProgressItem.js +1 -1
  93. package/build/cjs/common/components/clusterDetail/OperatorsProgressItem.js.map +1 -1
  94. package/build/cjs/common/components/clusterWizard/clusterDetailsValidation.js +2 -1
  95. package/build/cjs/common/components/clusterWizard/clusterDetailsValidation.js.map +1 -1
  96. package/build/cjs/common/components/hosts/DiskRole.js +5 -5
  97. package/build/cjs/common/components/hosts/DiskRole.js.map +1 -1
  98. package/build/cjs/common/components/hosts/HostToolbarActions.js +3 -3
  99. package/build/cjs/common/components/hosts/HostToolbarActions.js.map +1 -1
  100. package/build/cjs/common/components/hosts/TableToolbar.js +15 -15
  101. package/build/cjs/common/components/hosts/TableToolbar.js.map +1 -1
  102. package/build/cjs/common/components/operators/operatorDescriptions.js +26 -0
  103. package/build/cjs/common/components/operators/operatorDescriptions.js.map +1 -0
  104. package/build/cjs/common/components/operators/operatorSpecs.js +332 -189
  105. package/build/cjs/common/components/operators/operatorSpecs.js.map +1 -1
  106. package/build/cjs/common/components/ui/ClusterEventsToolbar.js +1 -1
  107. package/build/cjs/common/components/ui/ClusterEventsToolbar.js.map +1 -1
  108. package/build/cjs/common/components/ui/OpenShiftVersionDropdown.js +13 -16
  109. package/build/cjs/common/components/ui/OpenShiftVersionDropdown.js.map +1 -1
  110. package/build/cjs/common/components/ui/SimpleDropdown.js +4 -5
  111. package/build/cjs/common/components/ui/SimpleDropdown.js.map +1 -1
  112. package/build/cjs/common/config/constants.js +10 -0
  113. package/build/cjs/common/config/constants.js.map +1 -1
  114. package/build/cjs/common/config/docs_links.js +41 -25
  115. package/build/cjs/common/config/docs_links.js.map +1 -1
  116. package/build/cjs/common/index.js +1 -0
  117. package/build/cjs/common/index.js.map +1 -1
  118. package/build/cjs/common/utils.js +27 -1
  119. package/build/cjs/common/utils.js.map +1 -1
  120. package/build/cjs/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.js +23 -13
  121. package/build/cjs/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.js.map +1 -1
  122. package/build/cjs/ocm/components/clusterConfiguration/CpuArchitectureDropdown.js +3 -5
  123. package/build/cjs/ocm/components/clusterConfiguration/CpuArchitectureDropdown.js.map +1 -1
  124. package/build/cjs/ocm/components/clusterConfiguration/DiscoveryImageTypeDropdown.js +15 -17
  125. package/build/cjs/ocm/components/clusterConfiguration/DiscoveryImageTypeDropdown.js.map +1 -1
  126. package/build/cjs/ocm/components/clusterConfiguration/OcmBaseDomainField.js +5 -7
  127. package/build/cjs/ocm/components/clusterConfiguration/OcmBaseDomainField.js.map +1 -1
  128. package/build/cjs/ocm/components/clusterConfiguration/OcmClusterDetailsFormFields.js +16 -0
  129. package/build/cjs/ocm/components/clusterConfiguration/OcmClusterDetailsFormFields.js.map +1 -1
  130. package/build/cjs/ocm/components/clusterConfiguration/OcmOperatorProgressItem.js +1 -1
  131. package/build/cjs/ocm/components/clusterConfiguration/OcmOperatorProgressItem.js.map +1 -1
  132. package/build/cjs/ocm/components/clusterConfiguration/OcmTNADisclaimer.js +14 -0
  133. package/build/cjs/ocm/components/clusterConfiguration/OcmTNADisclaimer.js.map +1 -0
  134. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.js +6 -8
  135. package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.js.map +1 -1
  136. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.js +7 -10
  137. package/build/cjs/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.js.map +1 -1
  138. package/build/cjs/ocm/components/clusterConfiguration/operators/OperatorCheckbox.js +1 -1
  139. package/build/cjs/ocm/components/clusterConfiguration/operators/OperatorCheckbox.js.map +1 -1
  140. package/build/cjs/ocm/components/clusterConfiguration/operators/utils.js +2 -1
  141. package/build/cjs/ocm/components/clusterConfiguration/operators/utils.js.map +1 -1
  142. package/build/cjs/ocm/components/clusterConfiguration/platformIntegration/ExternalPlatformDropdown.js +11 -13
  143. package/build/cjs/ocm/components/clusterConfiguration/platformIntegration/ExternalPlatformDropdown.js.map +1 -1
  144. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewOperatorsTable.js +1 -1
  145. package/build/cjs/ocm/components/clusterConfiguration/review/ReviewOperatorsTable.js.map +1 -1
  146. package/build/cjs/ocm/components/clusterConfiguration/staticIp/commonValidationSchemas.js +4 -0
  147. package/build/cjs/ocm/components/clusterConfiguration/staticIp/commonValidationSchemas.js.map +1 -1
  148. package/build/cjs/ocm/components/clusterDetail/ProgressBarAlerts.js +1 -1
  149. package/build/cjs/ocm/components/clusterDetail/ProgressBarAlerts.js.map +1 -1
  150. package/build/cjs/ocm/components/clusterWizard/ClusterDetails.js +7 -4
  151. package/build/cjs/ocm/components/clusterWizard/ClusterDetails.js.map +1 -1
  152. package/build/cjs/ocm/components/clusterWizard/OperatorsBundle.js +14 -10
  153. package/build/cjs/ocm/components/clusterWizard/OperatorsBundle.js.map +1 -1
  154. package/build/cjs/ocm/components/clusterWizard/OperatorsSelect.js +13 -15
  155. package/build/cjs/ocm/components/clusterWizard/OperatorsSelect.js.map +1 -1
  156. package/build/cjs/ocm/components/featureSupportLevels/featureStateUtils.js +5 -15
  157. package/build/cjs/ocm/components/featureSupportLevels/featureStateUtils.js.map +1 -1
  158. package/build/cjs/ocm/components/hosts/use-hosts-table.js +9 -2
  159. package/build/cjs/ocm/components/hosts/use-hosts-table.js.map +1 -1
  160. package/build/cjs/ocm/services/DiskEncryptionService.js +11 -3
  161. package/build/cjs/ocm/services/DiskEncryptionService.js.map +1 -1
  162. package/lib/cim/components/ClusterDeployment/ClusterDeploymentDetailsForm.tsx +4 -2
  163. package/lib/cim/components/ClusterDeployment/ClusterDeploymentHostsDiscovery.tsx +8 -6
  164. package/lib/cim/components/ClusterDeployment/LabelsSelector.tsx +27 -14
  165. package/lib/cim/components/ClusterDeployment/ScaleUpForm.tsx +3 -0
  166. package/lib/cim/components/InfraEnv/AddHostDropdown.tsx +60 -47
  167. package/lib/cim/components/InfraEnv/EnvironmentDetails.tsx +7 -10
  168. package/lib/cim/components/InfraEnv/InfraEnvAgentTable.tsx +1 -1
  169. package/lib/cim/components/InfraEnv/InfraEnvOpenShiftVersionDropdown.tsx +34 -22
  170. package/lib/cim/components/common/CpuArchitectureDropdown.tsx +6 -3
  171. package/lib/cim/components/helpers/versions.ts +2 -2
  172. package/lib/cim/components/modals/MassApproveAction.tsx +1 -1
  173. package/lib/cim/components/modals/ScaleUpModal.tsx +5 -2
  174. package/lib/common/components/clusterConfiguration/ControlPlaneNodesDropdown.tsx +30 -17
  175. package/lib/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionControlGroup.tsx +20 -5
  176. package/lib/common/components/clusterConfiguration/DiskEncryptionFields/DiskEncryptionValues.ts +1 -0
  177. package/lib/common/components/clusterDetail/OperatorsProgressItem.tsx +1 -1
  178. package/lib/common/components/clusterWizard/clusterDetailsValidation.ts +3 -0
  179. package/lib/common/components/clusterWizard/types.ts +1 -0
  180. package/lib/common/components/hosts/DiskRole.tsx +23 -17
  181. package/lib/common/components/hosts/HostToolbarActions.tsx +1 -1
  182. package/lib/common/components/hosts/TableToolbar.tsx +54 -48
  183. package/lib/common/components/newFeatureSupportLevels/types.ts +1 -0
  184. package/lib/common/components/operators/operatorDescriptions.tsx +58 -0
  185. package/lib/common/components/operators/operatorSpecs.tsx +425 -257
  186. package/lib/common/components/ui/ClusterEventsToolbar.tsx +1 -0
  187. package/lib/common/components/ui/OpenShiftVersionDropdown.tsx +38 -44
  188. package/lib/common/components/ui/SimpleDropdown.tsx +23 -22
  189. package/lib/common/config/constants.ts +11 -0
  190. package/lib/common/config/docs_links.ts +44 -30
  191. package/lib/common/index.ts +1 -0
  192. package/lib/common/types/ui-settings.ts +1 -0
  193. package/lib/common/utils.ts +30 -0
  194. package/lib/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.tsx +46 -15
  195. package/lib/ocm/components/clusterConfiguration/CpuArchitectureDropdown.tsx +26 -20
  196. package/lib/ocm/components/clusterConfiguration/DiscoveryImageTypeDropdown.tsx +47 -46
  197. package/lib/ocm/components/clusterConfiguration/OcmBaseDomainField.tsx +16 -13
  198. package/lib/ocm/components/clusterConfiguration/OcmClusterDetailsFormFields.tsx +33 -1
  199. package/lib/ocm/components/clusterConfiguration/OcmOperatorProgressItem.tsx +1 -1
  200. package/lib/ocm/components/clusterConfiguration/OcmTNADisclaimer.tsx +23 -0
  201. package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.tsx +26 -26
  202. package/lib/ocm/components/clusterConfiguration/networkConfiguration/SubnetsDropdown.tsx +26 -30
  203. package/lib/ocm/components/clusterConfiguration/operators/OperatorCheckbox.tsx +1 -1
  204. package/lib/ocm/components/clusterConfiguration/operators/utils.tsx +2 -1
  205. package/lib/ocm/components/clusterConfiguration/platformIntegration/ExternalPlatformDropdown.tsx +34 -33
  206. package/lib/ocm/components/clusterConfiguration/review/ReviewOperatorsTable.tsx +2 -1
  207. package/lib/ocm/components/clusterConfiguration/staticIp/commonValidationSchemas.tsx +4 -0
  208. package/lib/ocm/components/clusterDetail/ProgressBarAlerts.tsx +1 -1
  209. package/lib/ocm/components/clusterWizard/ClusterDetails.tsx +15 -5
  210. package/lib/ocm/components/clusterWizard/OperatorsBundle.tsx +15 -17
  211. package/lib/ocm/components/clusterWizard/OperatorsSelect.tsx +33 -27
  212. package/lib/ocm/components/featureSupportLevels/featureStateUtils.ts +7 -18
  213. package/lib/ocm/components/hosts/use-hosts-table.tsx +9 -3
  214. package/lib/ocm/services/DiskEncryptionService.ts +7 -1
  215. package/package.json +3 -3
  216. package/build/cjs/common/components/ui/OpenShiftVersionDropdown.css +0 -9
  217. package/lib/common/components/ui/OpenShiftVersionDropdown.css +0 -9
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { Cluster } from '@openshift-assisted/types/assisted-installer-service';
2
+ import { Cluster, SupportLevel } from '@openshift-assisted/types/assisted-installer-service';
3
3
  import { FeatureId } from '../../types';
4
4
  import {
5
5
  OPERATOR_NAME_AMD_GPU,
@@ -30,6 +30,7 @@ import {
30
30
  AUTHORINO_OPERATOR_LINK,
31
31
  CNV_LINK,
32
32
  FENCE_AGENTS_REMEDIATION_LINK,
33
+ getKmmDocsLink,
33
34
  getKubeDeschedulerLink,
34
35
  getLsoLink,
35
36
  getLvmsDocsLink,
@@ -38,9 +39,9 @@ import {
38
39
  getNodeFeatureDiscoveryLink,
39
40
  getNvidiaGpuLink,
40
41
  getServiceMeshLink,
41
- KMM_LINK,
42
42
  MTV_LINK,
43
43
  NODE_HEALTHCHECK_LINK,
44
+ NODE_MAINTENANCE_LINK,
44
45
  ODF_LINK,
45
46
  ODF_REQUIREMENTS_LINK,
46
47
  OPENSHIFT_AI_LINK,
@@ -52,8 +53,33 @@ import {
52
53
  SERVERLESS_OPERATOR_LINK,
53
54
  } from '../../config';
54
55
  import { getMajorMinorVersion } from '../../utils';
55
- import { useNewFeatureSupportLevel } from '../newFeatureSupportLevels';
56
+ import { GetFeatureSupportLevel, useNewFeatureSupportLevel } from '../newFeatureSupportLevels';
57
+ import {
58
+ DESCRIPTION_AMD_GPU,
59
+ DESCRIPTION_AUTHORINO,
60
+ DESCRIPTION_LSO,
61
+ DESCRIPTION_MTV,
62
+ DESCRIPTION_CNV,
63
+ DESCRIPTION_FENCE_AGENTS_REMEDIATION,
64
+ DESCRIPTION_KMM,
65
+ DESCRIPTION_KUBE_DESCHEDULER,
66
+ DESCRIPTION_MCE,
67
+ DESCRIPTION_NMSTATE,
68
+ DESCRIPTION_NODE_FEATURE_DISCOVERY,
69
+ DESCRIPTION_NODE_HEALTHCHECK,
70
+ DESCRIPTION_NODE_MAINTENANCE,
71
+ DESCRIPTION_NVIDIA_GPU,
72
+ DESCRIPTION_ODF,
73
+ DESCRIPTION_OPENSHIFT_AI,
74
+ DESCRIPTION_OSC,
75
+ DESCRIPTION_PIPELINES,
76
+ DESCRIPTION_SELF_NODE_REMEDIATION,
77
+ DESCRIPTION_SERVERLESS,
78
+ DESCRIPTION_SERVICEMESH,
79
+ DESCRIPTION_LVM,
80
+ } from './operatorDescriptions';
56
81
 
82
+ // TODO check if it's unused and it can be deleted in favor of "isMajorMinorVersionEqualOrGreater"
57
83
  export const isOCPVersionEqualsOrMore = (
58
84
  openshiftVersion: string,
59
85
  ocpVersionToCompare: string,
@@ -67,278 +93,420 @@ export const isOCPVersionEqualsOrMore = (
67
93
  };
68
94
 
69
95
  export type OperatorSpec = {
96
+ operatorKey: string;
70
97
  title: string;
71
98
  featureId: FeatureId;
99
+ descriptionText?: string;
72
100
  Description?: React.ComponentType<{ openshiftVersion?: string }>;
73
101
  notStandalone?: boolean;
74
102
  Requirements?: React.ComponentType<{ cluster: Cluster }>;
103
+ category: string;
104
+ supportLevel?: SupportLevel | undefined;
75
105
  };
76
106
 
77
- export const getOperatorSpecs = (useLVMS?: boolean): { [key: string]: OperatorSpec } => {
107
+ export const getOperatorSpecs = (
108
+ getFeatureSupportLevel: GetFeatureSupportLevel,
109
+ useLVMS?: boolean,
110
+ ): { [category: string]: OperatorSpec[] } => {
78
111
  return {
79
- [OPERATOR_NAME_MTV]: {
80
- title: 'Migration Toolkit for Virtualization',
81
- featureId: 'MTV',
82
- Description: () => (
83
- <>
84
- This Toolkit (MTV) enables you to migrate virtual machines from VMware vSphere, Red Hat
85
- Virtualization, or OpenStack to OpenShift Virtualization running on Red Hat OpenShift.{' '}
86
- <ExternalLink href={MTV_LINK}>Learn more</ExternalLink>
87
- </>
88
- ),
89
- },
90
- [OPERATOR_NAME_AMD_GPU]: {
91
- title: 'AMD GPU',
92
- featureId: 'AMD_GPU',
93
- Requirements: () => <>Requires at least one supported AMD GPU</>,
94
- Description: () => (
95
- <>
96
- Automate the management of AMD software components needed to provision and monitor GPUs.
97
- </>
98
- ),
99
- },
100
- [OPERATOR_NAME_LSO]: {
101
- title: 'Local Storage Operator',
102
- featureId: 'LSO',
103
- Description: ({ openshiftVersion }) => (
104
- <>
105
- Allows provisioning of persistent storage by using local volumes.{' '}
106
- <ExternalLink href={getLsoLink(openshiftVersion)}>Learn more</ExternalLink>
107
- </>
108
- ),
109
- notStandalone: true,
110
- },
111
- [OPERATOR_NAME_AUTHORINO]: {
112
- title: 'Authorino',
113
- featureId: 'AUTHORINO',
114
- Description: () => (
115
- <>
116
- Lightweight external authorization service for tailor-made Zero Trust API security.{' '}
117
- <ExternalLink href={AUTHORINO_OPERATOR_LINK}>Learn more</ExternalLink>
118
- </>
119
- ),
120
- notStandalone: true,
121
- },
122
- [OPERATOR_NAME_CNV]: {
123
- title: 'OpenShift Virtualization',
124
- featureId: 'CNV',
125
- Requirements: () => (
126
- <>Enabled CPU virtualization support in BIOS (Intel-VT / AMD-V) on all nodes</>
127
- ),
128
- Description: () => (
129
- <>
130
- Run virtual machines alongside containers on one platform.{' '}
131
- <ExternalLink href={CNV_LINK}>Learn more</ExternalLink>
132
- </>
133
- ),
134
- },
135
- [OPERATOR_NAME_FENCE_AGENTS_REMEDIATION]: {
136
- title: 'Fence Agents Remediation',
137
- featureId: 'FENCE_AGENTS_REMEDIATION',
138
- Description: () => (
139
- <>
140
- Externally fences failed nodes using power controllers.{' '}
141
- <ExternalLink href={FENCE_AGENTS_REMEDIATION_LINK}>Learn more</ExternalLink>
142
- </>
143
- ),
144
- notStandalone: true,
145
- },
146
- [OPERATOR_NAME_KMM]: {
147
- title: 'Kernel Module Management',
148
- featureId: 'KMM',
149
- Description: () => (
150
- <>
151
- Management of kernel modules. <ExternalLink href={KMM_LINK}>Learn more</ExternalLink>
152
- </>
153
- ),
154
- },
155
- [OPERATOR_NAME_KUBE_DESCHEDULER]: {
156
- title: 'Kube Descheduler',
157
- featureId: 'KUBE_DESCHEDULER',
158
- Description: ({ openshiftVersion }) => (
159
- <>
160
- Evicts pods to reschedule them onto more suitable nodes.{' '}
161
- <ExternalLink href={getKubeDeschedulerLink(openshiftVersion)}>Learn more</ExternalLink>
162
- </>
163
- ),
164
- notStandalone: true,
165
- },
166
- [OPERATOR_NAME_MCE]: {
167
- title: 'Multicluster engine',
168
- featureId: 'MCE',
169
- Description: ({ openshiftVersion }) => (
170
- <>
171
- Create, import, and manage multiple clusters from this cluster.{' '}
172
- <ExternalLink href={getMceDocsLink(openshiftVersion)}>Learn more</ExternalLink>
173
- </>
174
- ),
175
- },
176
- [OPERATOR_NAME_NMSTATE]: {
177
- title: 'NMState',
178
- featureId: 'NMSTATE',
179
- Description: ({ openshiftVersion }) => (
180
- <>
181
- Provides users with functionality to configure various network interface types, DNS, and
182
- routing on cluster nodes.{' '}
183
- <ExternalLink href={getNmstateLink(openshiftVersion)}>Learn more</ExternalLink>
184
- </>
185
- ),
186
- },
187
- [OPERATOR_NAME_NODE_FEATURE_DISCOVERY]: {
188
- title: 'Node Feature Discovery',
189
- featureId: 'NODE_FEATURE_DISCOVERY',
190
- Description: ({ openshiftVersion }) => (
191
- <>
192
- Manage the detection of hardware features and configuration by labeling nodes with
193
- hardware-specific information.{' '}
194
- <ExternalLink href={getNodeFeatureDiscoveryLink(openshiftVersion)}>
195
- Learn more
112
+ [categories[Category.STORAGE]]: [
113
+ {
114
+ operatorKey: OPERATOR_NAME_LSO,
115
+ title: 'Local Storage Operator',
116
+ featureId: 'LSO',
117
+ descriptionText: DESCRIPTION_LSO,
118
+ Description: ({ openshiftVersion }) => (
119
+ <>
120
+ {DESCRIPTION_LSO}{' '}
121
+ <ExternalLink href={getLsoLink(openshiftVersion)}>Learn more</ExternalLink>
122
+ </>
123
+ ),
124
+ notStandalone: true,
125
+ category: categories[Category.STORAGE],
126
+ supportLevel: getFeatureSupportLevel('LSO'),
127
+ },
128
+ {
129
+ operatorKey: OPERATOR_NAME_LVM,
130
+ title: useLVMS ? 'Logical Volume Manager Storage' : 'Logical Volume Manager',
131
+ featureId: 'LVM',
132
+ descriptionText: DESCRIPTION_LVM,
133
+ Description: ({ openshiftVersion }) =>
134
+ useLVMS ? (
135
+ <>
136
+ {DESCRIPTION_LVM}{' '}
137
+ <ExternalLink href={getLvmsDocsLink(openshiftVersion)}>Learn more</ExternalLink>
138
+ </>
139
+ ) : (
140
+ <>{DESCRIPTION_LVM}</>
141
+ ),
142
+ category: categories[Category.STORAGE],
143
+ supportLevel: getFeatureSupportLevel('LVM'),
144
+ },
145
+ {
146
+ operatorKey: OPERATOR_NAME_ODF,
147
+ title: 'OpenShift Data Foundation',
148
+ featureId: 'ODF',
149
+ descriptionText: DESCRIPTION_ODF,
150
+ Requirements: () => (
151
+ <ExternalLink href={ODF_REQUIREMENTS_LINK}>
152
+ Learn more about the requirements for OpenShift Data Foundation
196
153
  </ExternalLink>
197
- </>
198
- ),
199
- },
200
- [OPERATOR_NAME_NODE_HEALTHCHECK]: {
201
- title: 'Node Healthcheck',
202
- featureId: 'NODE_HEALTHCHECK',
203
- Description: () => (
204
- <>
205
- Identify Unhealthy Nodes.{' '}
206
- <ExternalLink href={NODE_HEALTHCHECK_LINK}>Learn more</ExternalLink>
207
- </>
208
- ),
209
- notStandalone: true,
210
- },
211
- [OPERATOR_NAME_NODE_MAINTENANCE]: {
212
- title: 'Node Maintenance',
213
- featureId: 'NODE_MAINTENANCE',
214
- Description: () => (
215
- <>
216
- Place nodes in maintenance mode.{' '}
217
- <ExternalLink href={NODE_HEALTHCHECK_LINK}>Learn more</ExternalLink>
218
- </>
219
- ),
220
- notStandalone: true,
221
- },
222
- [OPERATOR_NAME_NVIDIA_GPU]: {
223
- title: 'NVIDIA GPU',
224
- featureId: 'NVIDIA_GPU',
225
- Requirements: () => <>Requires at least one supported NVIDIA GPU</>,
226
- Description: ({ openshiftVersion }) => (
227
- <>
228
- Automate the management of NVIDIA software components needed to provision and monitor
229
- GPUs. <ExternalLink href={getNvidiaGpuLink(openshiftVersion)}>Learn more</ExternalLink>
230
- </>
231
- ),
232
- },
233
- [OPERATOR_NAME_ODF]: {
234
- title: 'OpenShift Data Foundation',
235
- featureId: 'ODF',
236
- Requirements: () => (
237
- <ExternalLink href={ODF_REQUIREMENTS_LINK}>
238
- Learn more about the requirements for OpenShift Data Foundation
239
- </ExternalLink>
240
- ),
241
- Description: () => (
242
- <>
243
- Persistent software-defined storage for hybrid applications.{' '}
244
- <ExternalLink href={ODF_LINK}>Learn more</ExternalLink>
245
- </>
246
- ),
247
- },
248
- [OPERATOR_NAME_OPENSHIFT_AI]: {
249
- title: 'OpenShift AI',
250
- featureId: 'OPENSHIFT_AI',
251
- Requirements: () => (
252
- <ExternalLink href={OPENSHIFT_AI_REQUIREMENTS_LINK}>Learn more</ExternalLink>
253
- ),
254
- Description: () => (
255
- <>
256
- Train, serve, monitor and manage AI/ML models and applications.{' '}
257
- <ExternalLink href={OPENSHIFT_AI_LINK}>Learn more</ExternalLink>
258
- </>
259
- ),
260
- },
261
- [OPERATOR_NAME_OSC]: {
262
- title: 'OpenShift sandboxed containers',
263
- featureId: 'OSC',
264
- Requirements: () => (
265
- <ExternalLink href={OSC_REQUIREMENTS_LINK}>
266
- Learn more about the requirements for OpenShift sandboxed containers
267
- </ExternalLink>
268
- ),
269
- Description: () => (
270
- <>
271
- OpenShift sandboxed containers support for OpenShift Container Platform provides users
272
- with built-in support for running Kata Containers as an additional optional runtime. It
273
- provides an additional virtualization machine(VM) isolation layer for pods.{' '}
274
- <ExternalLink href={OSC_LINK}>Learn more</ExternalLink>
275
- </>
276
- ),
277
- },
278
- [OPERATOR_NAME_PIPELINES]: {
279
- title: 'Pipelines',
280
- featureId: 'PIPELINES',
281
- Description: () => (
282
- <>
283
- Cloud-native continuous integration and delivery (CI/CD) solution for building pipelines
284
- using Tekton. <ExternalLink href={PIPELINES_OPERATOR_LINK}>Learn more</ExternalLink>
285
- </>
286
- ),
287
- notStandalone: true,
288
- },
289
- [OPERATOR_NAME_SELF_NODE_REMEDIATION]: {
290
- title: 'Self Node Remediation',
291
- featureId: 'SELF_NODE_REMEDIATION',
292
- Description: () => (
293
- <>
294
- Allows nodes to reboot themselves when they become unhealthy.{' '}
295
- <ExternalLink href={SELF_NODE_REMEDIATION_LINK}>Learn more</ExternalLink>
296
- </>
297
- ),
298
- notStandalone: true,
299
- },
300
- [OPERATOR_NAME_SERVERLESS]: {
301
- title: 'Serverless',
302
- featureId: 'SERVERLESS',
303
- Description: () => (
304
- <>
305
- Deploy workflow applications based on the CNCF Serverless Workflow specification.{' '}
306
- <ExternalLink href={SERVERLESS_OPERATOR_LINK}>Learn more</ExternalLink>
307
- </>
308
- ),
309
- notStandalone: true,
310
- },
311
- [OPERATOR_NAME_SERVICEMESH]: {
312
- title: 'Service Mesh',
313
- featureId: 'SERVICEMESH',
314
- Description: ({ openshiftVersion }) => (
315
- <>
316
- Platform that provides behavioral insight and operational control over a service mesh.{' '}
317
- <ExternalLink href={getServiceMeshLink(openshiftVersion)}>Learn more</ExternalLink>
318
- </>
319
- ),
320
- notStandalone: true,
321
- },
322
- [OPERATOR_NAME_LVM]: {
323
- title: useLVMS ? 'Logical Volume Manager Storage' : 'Logical Volume Manager',
324
- featureId: 'LVM',
325
- Description: ({ openshiftVersion }) =>
326
- useLVMS ? (
154
+ ),
155
+ Description: () => (
327
156
  <>
328
- Storage virtualization that offers a more flexible approach for disk space management.{' '}
329
- <ExternalLink href={getLvmsDocsLink(openshiftVersion)}>Learn more</ExternalLink>
157
+ {DESCRIPTION_ODF} <ExternalLink href={ODF_LINK}>Learn more</ExternalLink>
330
158
  </>
331
- ) : (
159
+ ),
160
+ category: categories[Category.STORAGE],
161
+ supportLevel: getFeatureSupportLevel('ODF'),
162
+ },
163
+ ],
164
+ [categories[Category.VIRT]]: [
165
+ {
166
+ operatorKey: OPERATOR_NAME_CNV,
167
+ title: 'OpenShift Virtualization',
168
+ featureId: 'CNV',
169
+ descriptionText: DESCRIPTION_CNV,
170
+ Requirements: () => (
171
+ <>Enabled CPU virtualization support in BIOS (Intel-VT / AMD-V) on all nodes</>
172
+ ),
173
+ Description: () => (
174
+ <>
175
+ {DESCRIPTION_CNV} <ExternalLink href={CNV_LINK}>Learn more</ExternalLink>
176
+ </>
177
+ ),
178
+ category: categories[Category.VIRT],
179
+ supportLevel: getFeatureSupportLevel('CNV'),
180
+ },
181
+ {
182
+ operatorKey: OPERATOR_NAME_MTV,
183
+ title: 'Migration Toolkit for Virtualization',
184
+ featureId: 'MTV',
185
+ descriptionText: DESCRIPTION_MTV,
186
+ Description: () => (
332
187
  <>
333
- Storage virtualization that offers a more flexible approach for disk space management.
188
+ {DESCRIPTION_MTV} <ExternalLink href={MTV_LINK}>Learn more</ExternalLink>
334
189
  </>
335
190
  ),
336
- },
191
+ category: categories[Category.VIRT],
192
+ supportLevel: getFeatureSupportLevel('MTV'),
193
+ },
194
+ ],
195
+ [categories[Category.AI]]: [
196
+ {
197
+ operatorKey: OPERATOR_NAME_OPENSHIFT_AI,
198
+ title: 'OpenShift AI',
199
+ featureId: 'OPENSHIFT_AI',
200
+ descriptionText: DESCRIPTION_OPENSHIFT_AI,
201
+ Requirements: () => (
202
+ <ExternalLink href={OPENSHIFT_AI_REQUIREMENTS_LINK}>Learn more</ExternalLink>
203
+ ),
204
+ Description: () => (
205
+ <>
206
+ {DESCRIPTION_OPENSHIFT_AI}{' '}
207
+ <ExternalLink href={OPENSHIFT_AI_LINK}>Learn more</ExternalLink>
208
+ </>
209
+ ),
210
+ category: categories[Category.AI],
211
+ supportLevel: getFeatureSupportLevel('OPENSHIFT_AI'),
212
+ },
213
+ {
214
+ operatorKey: OPERATOR_NAME_AMD_GPU,
215
+ title: 'AMD GPU',
216
+ featureId: 'AMD_GPU',
217
+ descriptionText: DESCRIPTION_AMD_GPU,
218
+ Requirements: () => <>Requires at least one supported AMD GPU</>,
219
+ Description: () => <>{DESCRIPTION_AMD_GPU}</>,
220
+ category: categories[Category.AI],
221
+ supportLevel: getFeatureSupportLevel('AMD_GPU'),
222
+ },
223
+ {
224
+ operatorKey: OPERATOR_NAME_NVIDIA_GPU,
225
+ title: 'NVIDIA GPU',
226
+ featureId: 'NVIDIA_GPU',
227
+ descriptionText: DESCRIPTION_NVIDIA_GPU,
228
+ Requirements: () => <>Requires at least one supported NVIDIA GPU</>,
229
+ Description: ({ openshiftVersion }) => (
230
+ <>
231
+ {DESCRIPTION_NVIDIA_GPU}
232
+ <ExternalLink href={getNvidiaGpuLink(openshiftVersion)}>Learn more</ExternalLink>
233
+ </>
234
+ ),
235
+ category: categories[Category.AI],
236
+ supportLevel: getFeatureSupportLevel('NVIDIA_GPU'),
237
+ },
238
+ ],
239
+ [categories[Category.NETWORK]]: [
240
+ {
241
+ operatorKey: OPERATOR_NAME_NMSTATE,
242
+ title: 'NMState',
243
+ featureId: 'NMSTATE',
244
+ descriptionText: DESCRIPTION_NMSTATE,
245
+ Description: ({ openshiftVersion }) => (
246
+ <>
247
+ {DESCRIPTION_NMSTATE}{' '}
248
+ <ExternalLink href={getNmstateLink(openshiftVersion)}>Learn more</ExternalLink>
249
+ </>
250
+ ),
251
+ category: categories[Category.NETWORK],
252
+ supportLevel: getFeatureSupportLevel('NMSTATE'),
253
+ },
254
+ {
255
+ operatorKey: OPERATOR_NAME_SERVICEMESH,
256
+ title: 'Service Mesh',
257
+ featureId: 'SERVICEMESH',
258
+ descriptionText: DESCRIPTION_SERVICEMESH,
259
+ Description: ({ openshiftVersion }) => (
260
+ <>
261
+ {DESCRIPTION_SERVICEMESH}{' '}
262
+ <ExternalLink href={getServiceMeshLink(openshiftVersion)}>Learn more</ExternalLink>
263
+ </>
264
+ ),
265
+ notStandalone: true,
266
+ category: categories[Category.NETWORK],
267
+ supportLevel: getFeatureSupportLevel('SERVICEMESH'),
268
+ },
269
+ ],
270
+ [categories[Category.REMEDIATION]]: [
271
+ {
272
+ operatorKey: OPERATOR_NAME_FENCE_AGENTS_REMEDIATION,
273
+ title: 'Fence Agents Remediation',
274
+ featureId: 'FENCE_AGENTS_REMEDIATION',
275
+ descriptionText: DESCRIPTION_FENCE_AGENTS_REMEDIATION,
276
+ Description: () => (
277
+ <>
278
+ {DESCRIPTION_FENCE_AGENTS_REMEDIATION}{' '}
279
+ <ExternalLink href={FENCE_AGENTS_REMEDIATION_LINK}>Learn more</ExternalLink>
280
+ </>
281
+ ),
282
+ notStandalone: true,
283
+ category: categories[Category.REMEDIATION],
284
+ supportLevel: getFeatureSupportLevel('FENCE_AGENTS_REMEDIATION'),
285
+ },
286
+ {
287
+ operatorKey: OPERATOR_NAME_NODE_HEALTHCHECK,
288
+ title: 'Node Healthcheck',
289
+ featureId: 'NODE_HEALTHCHECK',
290
+ descriptionText: DESCRIPTION_NODE_HEALTHCHECK,
291
+ Description: () => (
292
+ <>
293
+ {DESCRIPTION_NODE_HEALTHCHECK}{' '}
294
+ <ExternalLink href={NODE_HEALTHCHECK_LINK}>Learn more</ExternalLink>
295
+ </>
296
+ ),
297
+ notStandalone: true,
298
+ category: categories[Category.REMEDIATION],
299
+ supportLevel: getFeatureSupportLevel('NODE_HEALTHCHECK'),
300
+ },
301
+ {
302
+ operatorKey: OPERATOR_NAME_SELF_NODE_REMEDIATION,
303
+ title: 'Self Node Remediation',
304
+ featureId: 'SELF_NODE_REMEDIATION',
305
+ descriptionText: DESCRIPTION_SELF_NODE_REMEDIATION,
306
+ Description: () => (
307
+ <>
308
+ {DESCRIPTION_SELF_NODE_REMEDIATION}{' '}
309
+ <ExternalLink href={SELF_NODE_REMEDIATION_LINK}>Learn more</ExternalLink>
310
+ </>
311
+ ),
312
+ notStandalone: true,
313
+ category: categories[Category.REMEDIATION],
314
+ supportLevel: getFeatureSupportLevel('SELF_NODE_REMEDIATION'),
315
+ },
316
+ ],
317
+ [categories[Category.OTHER]]: [
318
+ {
319
+ operatorKey: OPERATOR_NAME_AUTHORINO,
320
+ title: 'Authorino',
321
+ featureId: 'AUTHORINO',
322
+ descriptionText: DESCRIPTION_AUTHORINO,
323
+ Description: () => (
324
+ <>
325
+ {DESCRIPTION_AUTHORINO}{' '}
326
+ <ExternalLink href={AUTHORINO_OPERATOR_LINK}>Learn more</ExternalLink>
327
+ </>
328
+ ),
329
+ notStandalone: true,
330
+ category: categories[Category.OTHER],
331
+ supportLevel: getFeatureSupportLevel('AUTHORINO'),
332
+ },
333
+ {
334
+ operatorKey: OPERATOR_NAME_NODE_FEATURE_DISCOVERY,
335
+ title: 'Node Feature Discovery',
336
+ featureId: 'NODE_FEATURE_DISCOVERY',
337
+ descriptionText: DESCRIPTION_NODE_FEATURE_DISCOVERY,
338
+ Description: ({ openshiftVersion }) => (
339
+ <>
340
+ {DESCRIPTION_NODE_FEATURE_DISCOVERY}{' '}
341
+ <ExternalLink href={getNodeFeatureDiscoveryLink(openshiftVersion)}>
342
+ Learn more
343
+ </ExternalLink>
344
+ </>
345
+ ),
346
+ category: categories[Category.OTHER],
347
+ supportLevel: getFeatureSupportLevel('NODE_FEATURE_DISCOVERY'),
348
+ },
349
+ {
350
+ operatorKey: OPERATOR_NAME_PIPELINES,
351
+ title: 'Pipelines',
352
+ featureId: 'PIPELINES',
353
+ descriptionText: DESCRIPTION_PIPELINES,
354
+ Description: () => (
355
+ <>
356
+ {DESCRIPTION_PIPELINES}{' '}
357
+ <ExternalLink href={PIPELINES_OPERATOR_LINK}>Learn more</ExternalLink>
358
+ </>
359
+ ),
360
+ notStandalone: true,
361
+ category: categories[Category.OTHER],
362
+ supportLevel: getFeatureSupportLevel('PIPELINES'),
363
+ },
364
+ {
365
+ operatorKey: OPERATOR_NAME_SERVERLESS,
366
+ title: 'Serverless',
367
+ featureId: 'SERVERLESS',
368
+ descriptionText: DESCRIPTION_SERVERLESS,
369
+ Description: () => (
370
+ <>
371
+ {DESCRIPTION_SERVERLESS}{' '}
372
+ <ExternalLink href={SERVERLESS_OPERATOR_LINK}>Learn more</ExternalLink>
373
+ </>
374
+ ),
375
+ notStandalone: true,
376
+ category: categories[Category.OTHER],
377
+ supportLevel: getFeatureSupportLevel('SERVERLESS'),
378
+ },
379
+ {
380
+ operatorKey: OPERATOR_NAME_KMM,
381
+ title: 'Kernel Module Management',
382
+ featureId: 'KMM',
383
+ descriptionText: DESCRIPTION_KMM,
384
+ Description: ({ openshiftVersion }) => (
385
+ <>
386
+ {DESCRIPTION_KMM}{' '}
387
+ <ExternalLink href={getKmmDocsLink(openshiftVersion)}>Learn more</ExternalLink>
388
+ </>
389
+ ),
390
+ category: categories[Category.OTHER],
391
+ supportLevel: getFeatureSupportLevel('KMM'),
392
+ },
393
+ {
394
+ operatorKey: OPERATOR_NAME_MCE,
395
+ title: 'Multicluster engine',
396
+ featureId: 'MCE',
397
+ descriptionText: DESCRIPTION_MCE,
398
+ Description: ({ openshiftVersion }) => (
399
+ <>
400
+ {DESCRIPTION_MCE}{' '}
401
+ <ExternalLink href={getMceDocsLink(openshiftVersion)}>Learn more</ExternalLink>
402
+ </>
403
+ ),
404
+ category: categories[Category.OTHER],
405
+ supportLevel: getFeatureSupportLevel('MCE'),
406
+ },
407
+ {
408
+ operatorKey: OPERATOR_NAME_OSC,
409
+ title: 'OpenShift sandboxed containers',
410
+ featureId: 'OSC',
411
+ descriptionText: DESCRIPTION_OSC,
412
+ Requirements: () => (
413
+ <ExternalLink href={OSC_REQUIREMENTS_LINK}>
414
+ Learn more about the requirements for OpenShift sandboxed containers
415
+ </ExternalLink>
416
+ ),
417
+ Description: () => (
418
+ <>
419
+ {DESCRIPTION_OSC} <ExternalLink href={OSC_LINK}>Learn more</ExternalLink>
420
+ </>
421
+ ),
422
+ category: categories[Category.OTHER],
423
+ supportLevel: getFeatureSupportLevel('OSC'),
424
+ },
425
+ {
426
+ operatorKey: OPERATOR_NAME_KUBE_DESCHEDULER,
427
+ title: 'Kube Descheduler',
428
+ featureId: 'KUBE_DESCHEDULER',
429
+ descriptionText: DESCRIPTION_KUBE_DESCHEDULER,
430
+ Description: ({ openshiftVersion }) => (
431
+ <>
432
+ {DESCRIPTION_KUBE_DESCHEDULER}{' '}
433
+ <ExternalLink href={getKubeDeschedulerLink(openshiftVersion)}>Learn more</ExternalLink>
434
+ </>
435
+ ),
436
+ notStandalone: true,
437
+ category: categories[Category.OTHER],
438
+ supportLevel: getFeatureSupportLevel('KUBE_DESCHEDULER'),
439
+ },
440
+
441
+ {
442
+ operatorKey: OPERATOR_NAME_NODE_MAINTENANCE,
443
+ title: 'Node Maintenance',
444
+ featureId: 'NODE_MAINTENANCE',
445
+ descriptionText: DESCRIPTION_NODE_MAINTENANCE,
446
+ Description: () => (
447
+ <>
448
+ {DESCRIPTION_NODE_MAINTENANCE}{' '}
449
+ <ExternalLink href={NODE_MAINTENANCE_LINK}>Learn more</ExternalLink>
450
+ </>
451
+ ),
452
+ notStandalone: true,
453
+ category: categories[Category.OTHER],
454
+ supportLevel: getFeatureSupportLevel('NODE_MAINTENANCE'),
455
+ },
456
+ ],
337
457
  };
338
458
  };
339
459
 
340
460
  export const useOperatorSpecs = () => {
341
461
  const { getFeatureSupportLevel } = useNewFeatureSupportLevel();
342
462
  const useLVMS = getFeatureSupportLevel('LVM') === 'supported';
343
- return React.useMemo(() => getOperatorSpecs(useLVMS), [useLVMS]);
463
+
464
+ // Grouped by category
465
+ const byCategory = React.useMemo(
466
+ () => getOperatorSpecs(getFeatureSupportLevel, useLVMS),
467
+ [getFeatureSupportLevel, useLVMS],
468
+ );
469
+
470
+ // Flat map operatorKey -> spec
471
+ const byKey: Record<string, OperatorSpec> = React.useMemo(() => {
472
+ return Object.values(byCategory).reduce((acc, specs) => {
473
+ specs.forEach((spec) => {
474
+ acc[spec.operatorKey] = spec;
475
+ });
476
+ return acc;
477
+ }, {} as Record<string, OperatorSpec>);
478
+ }, [byCategory]);
479
+
480
+ return { byCategory, byKey };
481
+ };
482
+
483
+ export const getOperatorTitleByFeatureId = (featureId: FeatureId): string | undefined => {
484
+ const allSpecs = getOperatorSpecs(() => undefined);
485
+
486
+ for (const categorySpecs of Object.values(allSpecs)) {
487
+ const spec = categorySpecs.find((s) => s.featureId === featureId);
488
+ if (spec) {
489
+ return spec.title;
490
+ }
491
+ }
492
+
493
+ return undefined;
494
+ };
495
+
496
+ enum Category {
497
+ STORAGE,
498
+ VIRT,
499
+ AI,
500
+ NETWORK,
501
+ REMEDIATION,
502
+ OTHER,
503
+ }
504
+
505
+ export const categories: { [key in Category]: string } = {
506
+ [Category.STORAGE]: 'Storage',
507
+ [Category.VIRT]: 'Virtualization',
508
+ [Category.AI]: 'AI',
509
+ [Category.NETWORK]: 'Network',
510
+ [Category.REMEDIATION]: 'Remediation',
511
+ [Category.OTHER]: 'Other',
344
512
  };