github.com/scaleway/scaleway-cli@v1.11.1/pkg/commands/rmi.go (about)

     1  // Copyright (C) 2015 Scaleway. All rights reserved.
     2  // Use of this source code is governed by a MIT-style
     3  // license that can be found in the LICENSE.md file.
     4  
     5  package commands
     6  
     7  import (
     8  	"fmt"
     9  
    10  	"github.com/Sirupsen/logrus"
    11  )
    12  
    13  // RmiArgs are flags for the `RunRmi` function
    14  type RmiArgs struct {
    15  	Identifier []string // images/volumes/snapshots
    16  }
    17  
    18  // RunRmi is the handler for 'scw rmi'
    19  func RunRmi(ctx CommandContext, args RmiArgs) error {
    20  	hasError := false
    21  	for _, needle := range args.Identifier {
    22  		if image, err := ctx.API.GetImageID(needle, "*"); err == nil {
    23  			if err = ctx.API.DeleteImage(image.Identifier); err != nil {
    24  				logrus.Errorf("failed to delete image %s: %s", image.Identifier, err)
    25  				hasError = true
    26  			} else {
    27  				fmt.Fprintln(ctx.Stdout, needle)
    28  			}
    29  			continue
    30  		}
    31  		if snapshotID, err := ctx.API.GetSnapshotID(needle); err == nil {
    32  			if err = ctx.API.DeleteSnapshot(snapshotID); err != nil {
    33  				logrus.Errorf("failed to delete snapshot %s: %s", snapshotID, err)
    34  				hasError = true
    35  			} else {
    36  				fmt.Fprintln(ctx.Stdout, needle)
    37  			}
    38  			continue
    39  		}
    40  		if volumeID, err := ctx.API.GetVolumeID(needle); err == nil {
    41  			if err = ctx.API.DeleteVolume(volumeID); err != nil {
    42  				logrus.Errorf("failed to delete volume %s: %s", volumeID, err)
    43  				hasError = true
    44  			} else {
    45  				fmt.Fprintln(ctx.Stdout, needle)
    46  			}
    47  			continue
    48  		}
    49  		hasError = true
    50  	}
    51  	if hasError {
    52  		return fmt.Errorf("at least 1 image/snapshot/volume failed to be removed")
    53  	}
    54  	return nil
    55  }