@spotinst/spinnaker-deck
Version:
Spinnaker-Deck service, forked with support to Spotinst
42 lines (34 loc) • 1.72 kB
text/typescript
import { get, isNumber } from 'lodash';
import { IValidator } from '@spinnaker/core';
import { ITargetGroup } from 'amazon/domain';
export const isNameInUse = (
existingNames: { [account: string]: { [region: string]: string[] } },
credentials: string,
region: string,
): IValidator => (name: string) =>
get(existingNames, [credentials, region], []).includes(name.toLowerCase())
? `There is already a target group in ${credentials}:${region} with that name.`
: null;
export const isNameLong = (appNameLength: number): IValidator => (name: string) =>
name.length < 32 - appNameLength
? null
: 'Target group names are automatically prefixed with their application name and cannot exceed 32 characters in length.';
export const isValidTimeout = (targetGroup: ITargetGroup): IValidator => (value: number | string) => {
const num = isNumber(value) ? value : Number.parseInt(value, 10);
const { protocol, healthCheckProtocol } = targetGroup;
if (protocol === 'TCP' || protocol === 'TLS') {
if (healthCheckProtocol === 'HTTP' && num !== 6) {
return 'HTTP health check timeouts for TCP/TLS target groups must be 6s';
}
if ((healthCheckProtocol === 'HTTPS' || healthCheckProtocol === 'TLS') && num !== 10) {
return 'HTTPS/TLS health check timeouts for TCP/TLS target groups must be 10s';
}
}
return null;
};
export const isValidHealthCheckInterval = (targetGroup: ITargetGroup): IValidator => (value: string) =>
targetGroup.healthCheckProtocol !== 'TCP' ||
(targetGroup.healthCheckProtocol === 'TCP' &&
(Number.parseInt(value, 10) === 10 || Number.parseInt(value, 10) === 30))
? null
: 'TCP health checks only support 10s and 30s intervals';