in code/function/function.go [212:238]
func computeInstances(project string, srv *compute.Service, filters []string) (*compute.InstanceList, error) {
instances := &compute.InstanceList{}
zoneListCall := srv.Zones.List(project)
zoneList, err := zoneListCall.Do()
if err != nil {
return nil, fmt.Errorf("error - cannot get Compute Engine zone list: %s", err)
}
var wg sync.WaitGroup
wg.Add(len(zoneList.Items))
for _, zone := range zoneList.Items {
go func(zone *compute.Zone) error {
defer wg.Done()
instanceListCall := srv.Instances.List(project, zone.Name)
instanceListCall.Filter(strings.Join(filters[:], " "))
instanceList, err := instanceListCall.Do()
if err != nil {
return fmt.Errorf("cannot get Compute Engine instance list: %s", err)
}
instances.Items = append(instances.Items, instanceList.Items...)
return nil
}(zone)
}
wg.Wait()
return instances, nil
}