func CleanDisks()

in cleanerupper/cleanerupper.go [290:327]


func CleanDisks(clients Clients, project string, delete PolicyFunc, dryRun bool) ([]string, []error) {
	disks, err := clients.Daisy.AggregatedListDisks(project)
	if err != nil {
		return nil, []error{fmt.Errorf("error listing disks 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 _, d := range disks {
		if !delete(d) {
			continue
		}

		zone := path.Base(d.Zone)
		name := path.Base(d.SelfLink)
		partial := fmt.Sprintf("projects/%s/zones/%s/disks/%s", project, zone, name)
		wg.Add(1)
		go func() {
			defer wg.Done()
			if !dryRun {
				if err := clients.Daisy.DeleteDisk(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
}