Skip to content

Commit 2b84d85

Browse files
committed
update script
1 parent 3ecd0ba commit 2b84d85

File tree

1 file changed

+25
-106
lines changed

1 file changed

+25
-106
lines changed

svc/cycler.ts

Lines changed: 25 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -4,121 +4,40 @@ import { shuffle } from "../util/utility";
44

55
const projectId = config.GOOGLE_CLOUD_PROJECT_ID;
66
const lifetime = 600;
7-
// const template = 'retriever-20';
7+
const template = 'retriever-20250324';
88

99
async function getToken() {
10-
const tokenResponse = await axios.get("http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token", {headers: {"Metadata-Flavor": "Google"}});
11-
const token = tokenResponse.data.access_token;
12-
return token;
10+
const tokenResponse = await axios.get("http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token", {headers: {"Metadata-Flavor": "Google"}});
11+
const token = tokenResponse.data.access_token;
12+
return token;
1313
}
1414

1515
async function cycle() {
16+
while (true) {
1617
const zonesResponse = await axios.get(`https://compute.googleapis.com/compute/v1/projects/${projectId}/zones`, { headers: { "Authorization": "Bearer " + await getToken() }});
1718
const zones = zonesResponse.data.items.map((zone: any) => zone.name);
1819
console.log(zones, zones.length);
19-
while (true) {
20-
shuffle(zones);
21-
for (let i = 0; i < 3; i++) {
22-
const zone = zones[i % zones.length];
23-
const region = zone.slice(0, -2);
24-
const config = {
25-
"canIpForward": false,
26-
"confidentialInstanceConfig": {
27-
"enableConfidentialCompute": false
28-
},
29-
"deletionProtection": false,
30-
"description": "",
31-
"disks": [
32-
{
33-
"autoDelete": true,
34-
"boot": true,
35-
"deviceName": "retriever-14",
36-
"initializeParams": {
37-
"diskSizeGb": "10",
38-
"diskType": `projects/${projectId}/zones/${zone}/diskTypes/pd-standard`,
39-
"labels": {},
40-
"sourceImage": "projects/cos-cloud/global/images/cos-101-17162-336-35"
41-
},
42-
"mode": "READ_WRITE",
43-
"type": "PERSISTENT"
44-
}
45-
],
46-
"displayDevice": {
47-
"enableDisplay": false
48-
},
49-
"guestAccelerators": [],
50-
"instanceEncryptionKey": {},
51-
"keyRevocationActionType": "NONE",
52-
"labels": {
53-
"goog-ec-src": "vm_add-rest"
54-
},
55-
"machineType": `projects/${projectId}/zones/${zone}/machineTypes/e2-micro`,
56-
"metadata": {
57-
"items": [
58-
{
59-
"key": "startup-script",
60-
"value": "#!/bin/bash\nsudo iptables -w -A INPUT -p tcp --dport 80 -j ACCEPT\n\n# Secrets don't need to be set since they're read from GCE metadata\nsudo docker run -d --name=retriever --net=host --log-opt max-size=1g -e PROVIDER=gce -e NODE_ENV=production -e RETRIEVER_PORT=80 -e ROLE=retriever odota/retriever:latest\n\n# If already initialized\nsudo docker start retriever\n\n# We can set a time limit for termination on GCE, but it's cancelled if we shut down manually\nsudo docker logs -f retriever\n# && sleep 5 && sudo shutdown -h now"
61-
}
62-
]
63-
},
64-
"name": "retriever-" + process.hrtime.bigint(),
65-
"networkInterfaces": [
66-
{
67-
"accessConfigs": [
68-
{
69-
"name": "External NAT",
70-
"networkTier": "PREMIUM"
71-
}
72-
],
73-
"stackType": "IPV4_ONLY",
74-
"subnetwork": `projects/${projectId}/regions/${region}/subnetworks/global`
75-
}
76-
],
77-
"params": {
78-
"resourceManagerTags": {}
79-
},
80-
"reservationAffinity": {
81-
"consumeReservationType": "ANY_RESERVATION"
82-
},
83-
"scheduling": {
84-
"automaticRestart": false,
85-
"instanceTerminationAction": "DELETE",
86-
"maxRunDuration": {
87-
"seconds": lifetime.toString(),
88-
},
89-
"onHostMaintenance": "TERMINATE",
90-
"provisioningModel": "SPOT"
91-
},
92-
"serviceAccounts": [
93-
{
94-
"email": "[email protected]",
95-
"scopes": [
96-
"https://www.googleapis.com/auth/devstorage.read_only",
97-
"https://www.googleapis.com/auth/logging.write",
98-
"https://www.googleapis.com/auth/monitoring.write",
99-
"https://www.googleapis.com/auth/service.management.readonly",
100-
"https://www.googleapis.com/auth/servicecontrol",
101-
"https://www.googleapis.com/auth/trace.append"
102-
]
103-
}
104-
],
105-
"shieldedInstanceConfig": {
106-
"enableIntegrityMonitoring": true,
107-
"enableSecureBoot": false,
108-
"enableVtpm": true
109-
},
110-
"tags": {
111-
"items": [
112-
"http-server"
113-
]
114-
},
115-
"zone": `projects/${projectId}/zones/` + zone,
116-
};
117-
const resp = await axios.post(`https://compute.googleapis.com/compute/v1/projects/${projectId}/zones/${zone}/instances`, config, { headers: { "Authorization": "Bearer " + await getToken() } });
118-
console.log(resp.data);
119-
}
120-
await new Promise(resolve => setTimeout(resolve, lifetime * 1000 * 0.95));
20+
shuffle(zones);
21+
for (let i = 0; i < 3; i++) {
22+
const zone = zones[i % zones.length];
23+
const config = {
24+
"name": "retriever-" + process.hrtime.bigint(),
25+
"scheduling": {
26+
"automaticRestart": false,
27+
"instanceTerminationAction": "DELETE",
28+
"maxRunDuration": {
29+
"seconds": lifetime.toString(),
30+
},
31+
"onHostMaintenance": "TERMINATE",
32+
"provisioningModel": "SPOT"
33+
},
34+
"zone": `projects/${projectId}/zones/` + zone,
35+
};
36+
const resp = await axios.post(`https://compute.googleapis.com/compute/v1/projects/${projectId}/zones/${zone}/instances?sourceInstanceTemplate=global/instanceTemplates/${template}`, config, { headers: { "Authorization": "Bearer " + await getToken() } });
37+
console.log(resp.data);
12138
}
39+
await new Promise(resolve => setTimeout(resolve, (lifetime - 45) * 1000));
40+
}
12241
}
12342

12443
cycle();

0 commit comments

Comments
 (0)