@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.
- package/build/@types/common/components/newFeatureSupportLevels/types.d.ts +1 -1
- package/build/@types/common/components/newFeatureSupportLevels/types.d.ts.map +1 -1
- package/build/@types/common/components/operators/operatorDescriptions.d.ts +23 -0
- package/build/@types/common/components/operators/operatorDescriptions.d.ts.map +1 -0
- package/build/@types/common/components/operators/operatorSpecs.d.ts +32 -4
- package/build/@types/common/components/operators/operatorSpecs.d.ts.map +1 -1
- package/build/@types/common/components/operators/test.d.ts +50 -0
- package/build/@types/common/components/operators/test.d.ts.map +1 -0
- package/build/@types/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.d.ts +2 -0
- package/build/@types/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.d.ts.map +1 -1
- package/build/@types/ocm/components/clusterConfiguration/OcmClusterDetailsFormFields.d.ts.map +1 -1
- package/build/@types/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.d.ts.map +1 -1
- package/build/@types/ocm/components/clusterConfiguration/operators/OperatorCheckbox.d.ts +2 -1
- package/build/@types/ocm/components/clusterConfiguration/operators/OperatorCheckbox.d.ts.map +1 -1
- package/build/@types/ocm/components/clusterConfiguration/review/ReviewOperatorsTable.d.ts.map +1 -1
- package/build/@types/ocm/components/clusterWizard/OperatorsBundle.d.ts +2 -1
- package/build/@types/ocm/components/clusterWizard/OperatorsBundle.d.ts.map +1 -1
- package/build/@types/ocm/components/clusterWizard/OperatorsSelect.d.ts +2 -1
- package/build/@types/ocm/components/clusterWizard/OperatorsSelect.d.ts.map +1 -1
- package/build/@types/ocm/components/clusterWizard/OperatorsStep.d.ts.map +1 -1
- package/build/@types/ocm/components/featureSupportLevels/featureStateUtils.d.ts.map +1 -1
- package/build/cjs/common/components/clusterDetail/OperatorsProgressItem.js +1 -1
- package/build/cjs/common/components/clusterDetail/OperatorsProgressItem.js.map +1 -1
- package/build/cjs/common/components/operators/operatorDescriptions.js +26 -0
- package/build/cjs/common/components/operators/operatorDescriptions.js.map +1 -0
- package/build/cjs/common/components/operators/operatorSpecs.js +303 -190
- package/build/cjs/common/components/operators/operatorSpecs.js.map +1 -1
- package/build/cjs/common/components/operators/test.js +323 -0
- package/build/cjs/common/components/operators/test.js.map +1 -0
- package/build/cjs/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.js +20 -10
- package/build/cjs/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.js.map +1 -1
- package/build/cjs/ocm/components/clusterConfiguration/OcmClusterDetailsFormFields.js +16 -0
- package/build/cjs/ocm/components/clusterConfiguration/OcmClusterDetailsFormFields.js.map +1 -1
- package/build/cjs/ocm/components/clusterConfiguration/OcmOperatorProgressItem.js +1 -1
- package/build/cjs/ocm/components/clusterConfiguration/OcmOperatorProgressItem.js.map +1 -1
- package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.js +1 -1
- package/build/cjs/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.js.map +1 -1
- package/build/cjs/ocm/components/clusterConfiguration/operators/OperatorCheckbox.js +4 -4
- package/build/cjs/ocm/components/clusterConfiguration/operators/OperatorCheckbox.js.map +1 -1
- package/build/cjs/ocm/components/clusterConfiguration/review/ReviewOperatorsTable.js +1 -1
- package/build/cjs/ocm/components/clusterConfiguration/review/ReviewOperatorsTable.js.map +1 -1
- package/build/cjs/ocm/components/clusterDetail/ProgressBarAlerts.js +1 -1
- package/build/cjs/ocm/components/clusterDetail/ProgressBarAlerts.js.map +1 -1
- package/build/cjs/ocm/components/clusterWizard/OperatorsBundle.js +17 -18
- package/build/cjs/ocm/components/clusterWizard/OperatorsBundle.js.map +1 -1
- package/build/cjs/ocm/components/clusterWizard/OperatorsSelect.js +36 -20
- package/build/cjs/ocm/components/clusterWizard/OperatorsSelect.js.map +1 -1
- package/build/cjs/ocm/components/clusterWizard/OperatorsStep.js +13 -3
- package/build/cjs/ocm/components/clusterWizard/OperatorsStep.js.map +1 -1
- package/build/cjs/ocm/components/featureSupportLevels/featureStateUtils.js +5 -15
- package/build/cjs/ocm/components/featureSupportLevels/featureStateUtils.js.map +1 -1
- package/lib/common/components/clusterDetail/OperatorsProgressItem.tsx +1 -1
- package/lib/common/components/newFeatureSupportLevels/types.ts +1 -0
- package/lib/common/components/operators/operatorDescriptions.tsx +58 -0
- package/lib/common/components/operators/operatorSpecs.tsx +392 -264
- package/lib/common/components/operators/test.tsx +469 -0
- package/lib/ocm/components/clusterConfiguration/ControlPlaneNodesDropdown.tsx +26 -14
- package/lib/ocm/components/clusterConfiguration/OcmClusterDetailsFormFields.tsx +33 -1
- package/lib/ocm/components/clusterConfiguration/OcmOperatorProgressItem.tsx +1 -1
- package/lib/ocm/components/clusterConfiguration/manifestsConfiguration/components/FolderDropdown.tsx +1 -0
- package/lib/ocm/components/clusterConfiguration/operators/OperatorCheckbox.tsx +6 -3
- package/lib/ocm/components/clusterConfiguration/review/ReviewOperatorsTable.tsx +2 -1
- package/lib/ocm/components/clusterDetail/ProgressBarAlerts.tsx +1 -1
- package/lib/ocm/components/clusterWizard/OperatorsBundle.tsx +25 -23
- package/lib/ocm/components/clusterWizard/OperatorsSelect.tsx +67 -44
- package/lib/ocm/components/clusterWizard/OperatorsStep.tsx +30 -3
- package/lib/ocm/components/featureSupportLevels/featureStateUtils.ts +7 -18
- 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
|
-
|
|
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 = (
|
|
119
|
+
export const getOperatorSpecs = (
|
|
120
|
+
getFeatureSupportLevel: GetFeatureSupportLevel,
|
|
121
|
+
useLVMS?: boolean,
|
|
122
|
+
): { [category: string]: OperatorSpec[] } => {
|
|
80
123
|
return {
|
|
81
|
-
[
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
<>
|
|
246
|
-
|
|
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
|
-
|
|
332
|
-
<ExternalLink href={
|
|
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
|
-
|
|
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
|
-
|
|
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
|
};
|