in gke-windows-builder/builder/builder/gce.go [185:226]
func FindExistingInstance(ctx context.Context, bs *WindowsBuildServerConfig, projectID string) (*Server, error) {
s := &Server{projectID: projectID, zone: *bs.Zone}
var err error
if err = s.newGCEService(ctx); err != nil {
log.Printf("Failed to start GCE service to create servers: %+v", err)
return nil, err
}
instanceList, err := s.service.Instances.
List(projectID, *bs.Zone).
Filter(buildListInstancesFilter(bs.GetLabelsMap(), bs.InstanceNamePrefix)).
Do()
if err != nil {
log.Printf("Failed to list relevant instances: %v", err)
return nil, err
}
foundInstancesList := []*compute.Instance{}
// Filter by network and subnetwork
for instance := range instanceList.Items {
//log.Printf("Network %s", instanceList.Items[instance].NetworkInterfaces[0].Network)
//log.Printf("Subnetwork %s", instanceList.Items[instance].NetworkInterfaces[0].Subnetwork)
if instanceList.Items[instance].NetworkInterfaces[0].Network == ProjectNetworkUrl(bs.NetworkConfig) &&
instanceList.Items[instance].NetworkInterfaces[0].Subnetwork == InstanceSubnetworkUrl(bs.NetworkConfig) {
foundInstancesList = append(foundInstancesList, instanceList.Items[instance])
}
}
if len(foundInstancesList) == 0 {
log.Printf("Found no relevant instances")
return nil, nil
}
random.Seed(time.Now().Unix())
chosenInstance := foundInstancesList[random.Intn(len(foundInstancesList))]
log.Printf("Found %d relevant instances for version: %s, chose %s", len(foundInstancesList), *bs.ImageVersion, chosenInstance.Name)
return existingServer(ctx, *bs.Zone, projectID, chosenInstance.Name, bs.UseInternalIP)
}