func CleanMachineImages()

in cleanerupper/cleanerupper.go [373:409]


func CleanMachineImages(clients Clients, project string, delete PolicyFunc, dryRun bool) ([]string, []error) {
	images, err := clients.Daisy.ListMachineImages(project)
	if err != nil {
		return nil, []error{fmt.Errorf("error listing machine 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/machineImages/%s", project, name)
		wg.Add(1)
		go func() {
			defer wg.Done()
			if !dryRun {
				if err := clients.Daisy.DeleteMachineImage(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
}