-
Notifications
You must be signed in to change notification settings - Fork 2.2k
/
patch-deployment-scale.ts
55 lines (51 loc) · 1.4 KB
/
patch-deployment-scale.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import chalk from 'chalk';
import wait from '../output/wait';
import joinWords from '../output/join-words';
import * as Errors from '../errors-ts';
import { Output } from '../output';
import Client from '../client';
type ScaleArgs = {
min: number;
max: number | 'auto';
};
export default async function patchDeploymentScale(
output: Output,
client: Client,
deploymentId: string,
scaleArgs: ScaleArgs,
url: string
) {
const cancelWait = wait(
`Setting scale rules for ${joinWords(
Object.keys(scaleArgs).map(dc => `${chalk.bold(dc)}`)
)}`
);
try {
await client.fetch(
`/v3/now/deployments/${encodeURIComponent(deploymentId)}/instances`,
{
method: 'PATCH',
body: scaleArgs
}
);
cancelWait();
} catch (error) {
cancelWait();
if (error.code === 'forbidden_min_instances') {
return new Errors.ForbiddenScaleMinInstances(url, error.max);
}
if (error.code === 'forbidden_max_instances') {
return new Errors.ForbiddenScaleMaxInstances(url, error.max);
}
if (error.code === 'wrong_min_max_relation') {
return new Errors.InvalidScaleMinMaxRelation(url);
}
if (error.code === 'not_supported_min_scale_slots') {
return new Errors.NotSupportedMinScaleSlots(url);
}
if (error.code === 'deployment_type_unsupported') {
return new Errors.DeploymentTypeUnsupported();
}
throw error;
}
}