1
0
Fork 0
mirror of https://github.com/portainer/portainer.git synced 2025-07-19 21:39:40 +02:00
portainer/app/react/kubernetes/applications/components/AutoScalingFormSection/autoScalingValidation.ts
Ali 8856bae5c6
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-server (map[arch:arm64 platform:linux]) (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
fix(app): NaN validation for autoscaling [EE-6714] (#11237)
2024-02-22 17:36:44 +13:00

70 lines
2.5 KiB
TypeScript

import { SchemaOf, boolean, number, object } from 'yup';
import { nanNumberSchema } from '@/react-tools/yup-schemas';
import { AutoScalingFormValues } from './types';
type ValidationData = {
autoScalerOverflow: boolean;
};
export function autoScalingValidation(
validationData?: ValidationData
): SchemaOf<AutoScalingFormValues> {
const { autoScalerOverflow } = validationData || {};
return object({
isUsed: boolean().required(),
minReplicas: number().when('isUsed', (isUsed: boolean) =>
isUsed
? nanNumberSchema('Minimum instances is required.')
.required('Minimum instances is required.')
.min(1, 'Minimum instances must be greater than 0.')
.test(
'maxReplicas',
'Minimum instances must be less than maximum instances.',
// eslint-disable-next-line func-names
function (this, value?: number): boolean {
if (!value) {
return true;
}
const { maxReplicas } = this.parent as AutoScalingFormValues;
return !maxReplicas || value < maxReplicas;
}
)
: number()
),
maxReplicas: number().when('isUsed', (isUsed: boolean) =>
isUsed
? nanNumberSchema('Maximum instances is required.')
.required('Maximum instances is required.')
.test(
'minReplicas',
'Maximum instances must be greater than minimum instances.',
// eslint-disable-next-line func-names
function (this, value?: number): boolean {
if (!value) {
return false;
}
const { minReplicas } = this.parent as AutoScalingFormValues;
return !minReplicas || value > minReplicas;
}
)
.test(
'overflow',
'This application would exceed available resources. Please reduce the maximum instances or the resource reservations.',
() => !autoScalerOverflow
)
: number()
),
targetCpuUtilizationPercentage: number().when(
'isUsed',
(isUsed: boolean) =>
isUsed
? nanNumberSchema('Target CPU utilization percentage is required.')
.min(0, 'Target CPU usage must be greater than 0.')
.max(100, 'Target CPU usage must be smaller than 100.')
.required('Target CPU utilization percentage is required.')
: number()
),
});
}