generated from kyma-project/template-repository
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathmodule-management.js
72 lines (67 loc) · 1.95 KB
/
module-management.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
const KYMA_PATH = '/apis/operator.kyma-project.io/v1beta2/namespaces/kyma-system/kymas/default'
async function installedManagers(modules, client) {
let paths = {}
for (let m of modules) {
for (let v of m.versions) {
paths[v.managerPath] = client.get(v.managerPath)
paths[v.crPath] = client.get(v.crPath)
}
}
await Promise.allSettled(Object.values(paths))
for (let m of modules) {
m.available = false
m.managerImage = undefined
m.actualVersion = undefined
for (let v of m.versions) {
let cr = await paths[v.crPath]
if (cr) {
m.config = cr
}
let manager = await paths[v.managerPath]
if (manager && manager.kind == 'Deployment') {
if (manager.spec.template.spec.containers.length == 1) {
m.managerImage = manager.spec.template.spec.containers[0].image
} else {
for (let c of manager.spec.template.spec.containers) {
if (!c.image.indexOf('proxy') >= 0) {
m.managerImage = c.image
}
}
}
if (m.managerImage == v.managerImage) {
m.actualVersion = v.version
}
if (manager.status && manager.status.conditions) {
let av = manager.status.conditions.find(c => c.type == 'Available')
if (av && av.status == "True") {
m.available = true
}
}
}
}
}
return modules
}
async function managedModules(modules, client) {
let kyma = await client.get(KYMA_PATH)
if (kyma) {
for (let m of modules) {
if (kyma.spec.modules) {
let mm = kyma.spec.modules.find((mod) => mod.name == m.name)
if (mm) {
m.managed = true
m.channel = mm.channel || kyma.spec.channel
} else {
m.managed = false
m.channel = undefined
}
}
}
} else {
for (let m of modules) {
m.manageable = false
}
}
return modules
}
export {installedManagers, managedModules}