1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-20 22:09:41 +02:00
portainer/app/react/kubernetes/cluster/ConfigureView/ConfigureForm/validation.ts
Chaim Lev-Ari 27aaf322b2
Some checks are pending
ci / build_images (map[arch:amd64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
ci / build_images (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
ci / build_images (map[arch:arm platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:arm64 platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:ppc64le platform:linux version:]) (push) Waiting to run
ci / build_images (map[arch:s390x platform:linux version:]) (push) Waiting to run
ci / build_manifests (push) Blocked by required conditions
/ triage (push) Waiting to run
Lint / Run linters (push) Waiting to run
Test / test-client (push) Waiting to run
Test / test-server (map[arch:amd64 platform:linux]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:1809]) (push) Waiting to run
Test / test-server (map[arch:amd64 platform:windows version:ltsc2022]) (push) Waiting to run
Test / test-server (map[arch:arm64 platform:linux]) (push) Waiting to run
fix(kube/config): validate change window start [EE-6830] (#11329)
2024-03-10 09:42:33 +02:00

80 lines
2.7 KiB
TypeScript

import { object, string, boolean, array, number, SchemaOf } from 'yup';
import { isBE } from '@/react/portainer/feature-flags/feature-flags.service';
import { IngressControllerClassMap } from '../../ingressClass/types';
import { ConfigureFormValues } from './types';
// Define Yup schema for AccessMode
const accessModeSchema = object().shape({
Description: string().required(),
Name: string().required(),
selected: boolean().required(),
});
// Define Yup schema for StorageClassFormValues
const storageClassFormValuesSchema = array()
.of(
object().shape({
Name: string().required(),
AccessModes: array().of(accessModeSchema).required(),
Provisioner: string().required(),
AllowVolumeExpansion: boolean().required(),
selected: boolean().required(),
})
)
.test(
// invalid if any storage class is not selected or
// if it's selected and at least one access mode is selected
'accessModes',
'Shared access policy configuration required.',
(storageClasses) => {
const isValid = storageClasses?.every(
(value) =>
!value.selected ||
(value.AccessModes && value.AccessModes?.length > 0)
);
return isValid || false;
}
);
// Define Yup schema for EndpointChangeWindow
const endpointChangeWindowSchema = object().shape({
Enabled: boolean().required(),
StartTime: string().test(
'startTime should not be the same as endTime',
'The chosen time configuration is invalid.',
(value, context) => {
const { EndTime, Enabled } = context.parent;
return !Enabled || value !== EndTime;
}
),
EndTime: string(),
});
// Define Yup schema for IngressControllerClassMap
const ingressControllerClassMapSchema: SchemaOf<IngressControllerClassMap> =
object().shape({
Name: string().required(),
ClassName: string().required(),
Type: string().required(),
Availability: boolean().required(),
New: boolean().required(),
Used: boolean().required(),
});
// Define Yup schema for ConfigureFormValues
export const configureValidationSchema: SchemaOf<ConfigureFormValues> = object({
useLoadBalancer: boolean().required(),
useServerMetrics: boolean().required(),
enableResourceOverCommit: boolean().required(),
resourceOverCommitPercentage: number().required(),
restrictDefaultNamespace: boolean().required(),
restrictStandardUserIngressW: boolean().required(),
ingressAvailabilityPerNamespace: boolean().required(),
allowNoneIngressClass: boolean().required(),
changeWindow: isBE ? endpointChangeWindowSchema.required() : undefined,
storageClasses: storageClassFormValuesSchema.required(),
ingressClasses: array().of(ingressControllerClassMapSchema).required(),
});