func CleanInstances()

in cleanerupper/cleanerupper.go [248:285]


func CleanInstances(clients Clients, project string, delete PolicyFunc, dryRun bool) ([]string, []error) {
	instances, err := clients.Daisy.AggregatedListInstances(project)
	if err != nil {
		return nil, []error{fmt.Errorf("error listing instance in project %q: %v", project, err)}
	}

	var deletedMu sync.Mutex
	var deleted []string
	var errsMu sync.Mutex
	var errs []error
	var wg sync.WaitGroup
	for _, i := range instances {
		if !delete(i) {
			continue
		}

		zone := path.Base(i.Zone)
		name := path.Base(i.SelfLink)
		partial := fmt.Sprintf("projects/%s/zones/%s/instances/%s", project, zone, name)
		wg.Add(1)
		go func() {
			defer wg.Done()
			if !dryRun {
				if err := clients.Daisy.DeleteInstance(project, zone, name); err != nil {
					errsMu.Lock()
					defer errsMu.Unlock()
					errs = append(errs, err)
					return
				}
			}
			deletedMu.Lock()
			defer deletedMu.Unlock()
			deleted = append(deleted, partial)
		}()
	}
	wg.Wait()
	return deleted, errs
}