@openshift-assisted/ui-lib 2.42.0 → 2.42.2

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