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 }