// Run contains all the necessary functionality for the OpenShift cli prune images command. func (o PruneImagesOptions) Run() error { w := tabwriter.NewWriter(o.Out, 10, 4, 3, ' ', 0) defer w.Flush() imageDeleter := &describingImageDeleter{w: w} imageStreamDeleter := &describingImageStreamDeleter{w: w} layerDeleter := &describingLayerDeleter{w: w} blobDeleter := &describingBlobDeleter{w: w} manifestDeleter := &describingManifestDeleter{w: w} if o.Confirm { imageDeleter.delegate = prune.NewImageDeleter(o.Client.Images()) imageStreamDeleter.delegate = prune.NewImageStreamDeleter(o.Client) layerDeleter.delegate = prune.NewLayerDeleter() blobDeleter.delegate = prune.NewBlobDeleter() manifestDeleter.delegate = prune.NewManifestDeleter() } else { fmt.Fprintln(os.Stderr, "Dry run enabled - no modifications will be made. Add --confirm to remove images") } return o.Pruner.Prune(imageDeleter, imageStreamDeleter, layerDeleter, blobDeleter, manifestDeleter) }
// Run contains all the necessary functionality for the OpenShift cli prune images command. func (o PruneImagesOptions) Run() error { allImages, err := o.OSClient.Images().List(kapi.ListOptions{}) if err != nil { return err } allStreams, err := o.OSClient.ImageStreams(o.Namespace).List(kapi.ListOptions{}) if err != nil { return err } allPods, err := o.KClient.Core().Pods(o.Namespace).List(kapi.ListOptions{}) if err != nil { return err } allRCs, err := o.KClient.Core().ReplicationControllers(o.Namespace).List(kapi.ListOptions{}) if err != nil { return err } allBCs, err := o.OSClient.BuildConfigs(o.Namespace).List(kapi.ListOptions{}) // We need to tolerate 'not found' errors for buildConfigs since they may be disabled in Atomic err = oserrors.TolerateNotFoundError(err) if err != nil { return err } allBuilds, err := o.OSClient.Builds(o.Namespace).List(kapi.ListOptions{}) // We need to tolerate 'not found' errors for builds since they may be disabled in Atomic err = oserrors.TolerateNotFoundError(err) if err != nil { return err } allDCs, err := o.OSClient.DeploymentConfigs(o.Namespace).List(kapi.ListOptions{}) if err != nil { return err } limitRangesList, err := o.KClient.Core().LimitRanges(o.Namespace).List(kapi.ListOptions{}) if err != nil { return err } limitRangesMap := make(map[string][]*kapi.LimitRange) for i := range limitRangesList.Items { limit := limitRangesList.Items[i] limits, ok := limitRangesMap[limit.Namespace] if !ok { limits = []*kapi.LimitRange{} } limits = append(limits, &limit) limitRangesMap[limit.Namespace] = limits } options := prune.PrunerOptions{ KeepYoungerThan: o.KeepYoungerThan, KeepTagRevisions: o.KeepTagRevisions, PruneOverSizeLimit: o.PruneOverSizeLimit, AllImages: o.AllImages, Images: allImages, Streams: allStreams, Pods: allPods, RCs: allRCs, BCs: allBCs, Builds: allBuilds, DCs: allDCs, LimitRanges: limitRangesMap, DryRun: o.Confirm == false, RegistryClient: o.RegistryClient, RegistryURL: o.RegistryUrlOverride, } if o.Namespace != kapi.NamespaceAll { options.Namespace = o.Namespace } pruner := prune.NewPruner(options) w := tabwriter.NewWriter(o.Out, 10, 4, 3, ' ', 0) defer w.Flush() imageDeleter := &describingImageDeleter{w: w} imageStreamDeleter := &describingImageStreamDeleter{w: w} layerLinkDeleter := &describingLayerLinkDeleter{w: w} blobDeleter := &describingBlobDeleter{w: w} manifestDeleter := &describingManifestDeleter{w: w} if o.Confirm { imageDeleter.delegate = prune.NewImageDeleter(o.OSClient.Images()) imageStreamDeleter.delegate = prune.NewImageStreamDeleter(o.OSClient) layerLinkDeleter.delegate = prune.NewLayerLinkDeleter() blobDeleter.delegate = prune.NewBlobDeleter() manifestDeleter.delegate = prune.NewManifestDeleter() } else { fmt.Fprintln(os.Stderr, "Dry run enabled - no modifications will be made. Add --confirm to remove images") } return pruner.Prune(imageDeleter, imageStreamDeleter, layerLinkDeleter, blobDeleter, manifestDeleter) }