github.com/emc-advanced-dev/unik@v0.0.0-20190717152701-a58d3e8e33b7/pkg/providers/xen/delete_image.go (about) 1 package xen 2 3 import ( 4 "os" 5 6 "github.com/sirupsen/logrus" 7 "github.com/emc-advanced-dev/pkg/errors" 8 "path/filepath" 9 ) 10 11 func (p *XenProvider) DeleteImage(id string, force bool) error { 12 image, err := p.GetImage(id) 13 if err != nil { 14 return errors.New("retrieving image", err) 15 } 16 instances, err := p.ListInstances() 17 if err != nil { 18 return errors.New("retrieving list of instances", err) 19 } 20 for _, instance := range instances { 21 if instance.ImageId == image.Id { 22 if !force { 23 return errors.New("instance "+instance.Id+" found which uses image "+image.Id+"; try again with force=true", nil) 24 } else { 25 logrus.Warnf("deleting instance %s which belongs to image %s", instance.Id, image.Id) 26 err = p.DeleteInstance(instance.Id, true) 27 if err != nil { 28 return errors.New("failed to delete instance "+instance.Id+" which is using image "+image.Id, err) 29 } 30 } 31 } 32 } 33 34 imagePath := getImagePath(image.Name) 35 logrus.Warnf("deleting image file at %s", imagePath) 36 if err := os.RemoveAll(filepath.Dir(imagePath)); err != nil { 37 return errors.New("deleing image file at "+imagePath, err) 38 } 39 40 return p.state.RemoveImage(image) 41 }