func computeInstances()

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
}