github.com/solo-io/unik@v0.0.0-20190717152701-a58d3e8e33b7/pkg/providers/vsphere/delete_image.go (about)

     1  package vsphere
     2  
     3  import (
     4  	"github.com/sirupsen/logrus"
     5  	"github.com/emc-advanced-dev/pkg/errors"
     6  )
     7  
     8  func (p *VsphereProvider) DeleteImage(id string, force bool) error {
     9  	image, err := p.GetImage(id)
    10  	if err != nil {
    11  		return errors.New("retrieving image", err)
    12  	}
    13  	instances, err := p.ListInstances()
    14  	if err != nil {
    15  		return errors.New("retrieving list of instances", err)
    16  	}
    17  	for _, instance := range instances {
    18  		if instance.ImageId == image.Id {
    19  			if !force {
    20  				return errors.New("instance "+instance.Id+" found which uses image "+image.Id+"; try again with force=true", nil)
    21  			} else {
    22  				logrus.Warnf("deleting instance %s which belongs to image %s", instance.Id, image.Id)
    23  				err = p.DeleteInstance(instance.Id, true)
    24  				if err != nil {
    25  					return errors.New("failed to delete instance "+instance.Id+" which is using image "+image.Id, err)
    26  				}
    27  			}
    28  		}
    29  	}
    30  
    31  	imageDir := getImageDatastoreDir(image.Name)
    32  	logrus.Infof("deleting image file at %s", imageDir)
    33  	if err := p.getClient().Rmdir(imageDir); err != nil {
    34  		return errors.New("deleting image file at "+imageDir, err)
    35  	}
    36  	return p.state.RemoveImage(image)
    37  }