-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathclean_env.js
executable file
·135 lines (111 loc) · 4.11 KB
/
clean_env.js
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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
const Client = require('kubernetes-client').Client;
const cf = require('kubernetes-client').config;
const async = require('async');
let client;
if (process.env.TELEPRESENCE_ROOT) {
client = new Client({
config: cf.fromKubeconfig(),
version: '1.9'
})
} else {
client = new Client({
config: cf.getInCluster(),
version: '1.9'
});
}
// test only
// process.env.TARGET_DEPLOY = "jupyter-py36-server";
// process.env.KILL_AGE = "2"
// process.env.TARGET_NAMESPACE = "zen"
if (!process.env.TARGET_DEPLOY) {
console.log("TARGET_DEPLOY is not in ENV, use default spss-modeler-server, zeppelin-server, dods-processor-server, wex-server, shaper-server, rstudio-server, jupyter-server, jupyter-py36-server, jupyter-py35-server");
process.env.TARGET_DEPLOY = "spss-modeler-server, zeppelin-server, dods-processor-server, wex-server, shaper-server, rstudio-server, jupyter-server, jupyter-py36-server, jupyter-py35-server";
}
// the array of target Deployments prefix, we will kill all the deploment with this prefix
let targetDeploy = process.env.TARGET_DEPLOY.split(",").map(target => target.trim());
console.log("targetDeploy: ", targetDeploy);
if (!process.env.KILL_AGE) {
console.log("KILL_AGE is not in ENV, use default 1 day");
// s m h
process.env.KILL_AGE = 60 * 60 * 24;
}
// We will only kill all the target deployment lived longer than this age in second
let killAge = Number(process.env.KILL_AGE) * 1000;
console.log("killAge: ", killAge + ' ms');
if (!process.env.TARGET_NAMESPACE) {
console.log("TARGET_NAMESPACE is not in ENV, use default zen");
process.env.TARGET_NAMESPACE = "zen";
}
// We will only kill the deployment in this namespace
let targetNamespace = process.env.TARGET_NAMESPACE;
console.log("targetNamespace: ", targetNamespace);
function startKill() {
async.waterfall([
getAllDeploymentToKill,
deleteAllTargetDeployment
], function (err, result) {
if (err) {
console.log(`Error in startKill function,${err}`);
return 1;
} else {
console.log("deployment deleted:");
result.forEach(deploy => {
if(deploy.body && deploy.body.details && deploy.body.details.name)
console.log(deploy.body.details.name);
});
return 0;
}
});
};
function getAllDeploymentToKill(callback) {
client.apis.apps.v1.namespaces(targetNamespace).deployments.get()
.then(result => {
if (result && result.body && result.body.items) {
let resultDeployment = [];
result.body.items.map(deploy => {
if (deploy.metadata && deploy.metadata.name && deploy.metadata.creationTimestamp) {
let name = deploy.metadata.name;
let creationTimestamp = new Date(deploy.metadata.creationTimestamp).getTime();
let currentTimeStamp = new Date().getTime();
for (let targetName of targetDeploy) {
if (name.includes(targetName) && (currentTimeStamp - creationTimestamp) > killAge) {
resultDeployment.push(name);
}
}
} else {
let err = new Error("Can not find deploy.metadata.name or deploy.metadata.creationTimestamp in the deploy");
console.log(err);
}
});
return callback(null, resultDeployment);
} else {
let err = new Error("Can not find result.body.items in the result");
return callback(err);
}
}).catch(err => {
console.log(err);
return callback(err);
});
}
function deleteAllTargetDeployment(deploymentToKill, callback) {
async.map(deploymentToKill, deleteDeployment, function(err, results) {
if( err ) {
console.log("err from deleteAllTargetDeployment: ", err);
return callback(err);
} else {
//console.log(results);
return callback(null, results);
}
});
}
function deleteDeployment(deployName, callback) {
client.apis.apps.v1.namespaces(targetNamespace).deployments(deployName).delete()
.then(result => {
//console.log(result);
return callback(null, result);
}).catch(err => {
console.log(err);
return callback(err);
});
}
startKill();