-
Notifications
You must be signed in to change notification settings - Fork 36
/
Copy pathcreator.ts
98 lines (95 loc) · 3.84 KB
/
creator.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
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
import api = require('./typescript/api');
import aci = require('./aci');
import azureResource = require('azure-arm-resource');
export async function ContainerCreator(client: api.Core_v1Api, startDate: Date, rsrcClient: azureResource.ResourceManagementClient, keepRunning: () => boolean) {
console.log('k8s pod creater/updater');
try {
if (!keepRunning()) {
return;
}
let groups = await aci.ListContainerGroups(rsrcClient);
for (let containerGroup of groups) {
console.log(containerGroup['name']);
if (!containerGroup['tags'] || containerGroup['tags']['orchestrator'] != 'kubernetes') {
continue;
}
let exists = true;
try {
let pod = await client.readNamespacedPod(containerGroup['name'], "default");
} catch (Exception) {
console.log(Exception);
exists = false;
}
let pod = {
apiVersion: 'v1',
metadata: {
name: containerGroup['name'],
namespace: 'default'
} as api.V1ObjectMeta,
spec: {
nodeName: 'aci-connector'
} as api.V1PodSpec,
status: {
podIP: containerGroup['properties']['ipAddress'] ? containerGroup['properties']['ipAddress']['ip'] : null,
phase: "Running",
startTime: startDate,
conditions: [
{
lastTransitionTime: startDate,
status: "True",
type: "Initialized"
} as api.V1PodCondition,
{
lastTransitionTime: startDate,
status: "True",
type: "PodScheduled"
} as api.V1PodCondition,
{
lastTransitionTime: startDate,
status: "True",
type: "Ready"
} as api.V1PodCondition
] as Array<api.V1PodCondition>
} as api.V1PodStatus
} as api.V1Pod;
let containers = new Array<api.V1Container>();
let containerStatuses = new Array<api.V1ContainerStatus>();
for (let container of containerGroup['properties']['containers']) {
containers.push(
{
name: container['name'],
image: container['properties']['image']
} as api.V1Container
);
containerStatuses.push(
{
name: container['name'],
image: container['properties']['image'],
ready: true,
state: {
running: {
startedAt: startDate
} as api.V1ContainerStateRunning
} as api.V1ContainerState
} as api.V1ContainerStatus
);
}
pod.spec.containers = containers;
pod.status.containerStatuses = containerStatuses;
try {
if (!exists) {
await client.createNamespacedPod("default", pod);
} else {
await client.replaceNamespacedPodStatus(pod.metadata.name, "default", pod);
}
} catch (Exception) {
console.log(Exception);
}
}
} catch (Exception) {
console.log(Exception);
}
setTimeout(() => {
ContainerCreator(client, startDate, rsrcClient, keepRunning);
}, 5000);
}