in cleanerupper/cleanerupper.go [332:368]
func CleanImages(clients Clients, project string, delete PolicyFunc, dryRun bool) ([]string, []error) {
images, err := clients.Daisy.ListImages(project)
if err != nil {
return nil, []error{fmt.Errorf("error listing images 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 images {
if !delete(d) {
continue
}
name := path.Base(d.SelfLink)
partial := fmt.Sprintf("projects/%s/global/images/%s", project, name)
wg.Add(1)
go func() {
defer wg.Done()
if !dryRun {
if err := clients.Daisy.DeleteImage(project, 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
}