@@ -5,6 +5,7 @@ import { shuffle } from "../util/utility";
55const projectId = config . GOOGLE_CLOUD_PROJECT_ID ;
66const lifetime = 600 ;
77const template = 'retriever-20250324' ;
8+ const count = 3 ;
89
910async function getToken ( ) {
1011 const tokenResponse = await axios . get ( "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" , { headers : { "Metadata-Flavor" : "Google" } } ) ;
@@ -13,30 +14,28 @@ async function getToken() {
1314}
1415
1516async function cycle ( ) {
17+ const zonesResponse = await axios . get ( `https://compute.googleapis.com/compute/v1/projects/${ projectId } /zones` , { headers : { "Authorization" : "Bearer " + await getToken ( ) } } ) ;
18+ const zones = zonesResponse . data . items . map ( ( zone : any ) => zone . name ) ;
19+ console . log ( zones , zones . length ) ;
1620 while ( true ) {
17- const zonesResponse = await axios . get ( `https://compute.googleapis.com/compute/v1/projects/${ projectId } /zones` , { headers : { "Authorization" : "Bearer " + await getToken ( ) } } ) ;
18- const zones = zonesResponse . data . items . map ( ( zone : any ) => zone . name ) ;
19- console . log ( zones , zones . length ) ;
2021 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 ) ;
38- }
39- await new Promise ( resolve => setTimeout ( resolve , ( lifetime - 45 ) * 1000 ) ) ;
22+ const zone = zones [ 0 ] ;
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 ) ;
38+ await new Promise ( resolve => setTimeout ( resolve , lifetime * 1000 / count ) ) ;
4039 }
4140}
4241
0 commit comments