forked from solo-io/unik
/
delete_image.go
33 lines (30 loc) · 941 Bytes
/
delete_image.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package gcloud
import (
"github.com/emc-advanced-dev/pkg/errors"
)
func (p *GcloudProvider) DeleteImage(id string, force bool) error {
image, err := p.GetImage(id)
if err != nil {
return errors.New("retrieving image", err)
}
instances, err := p.ListInstances()
if err != nil {
return errors.New("retrieving list of instances", err)
}
for _, instance := range instances {
if instance.ImageId == image.Id {
if !force {
return errors.New("instance "+instance.Id+" found which uses image "+image.Id+"; try again with force=true", nil)
} else {
err = p.DeleteInstance(instance.Id, true)
if err != nil {
return errors.New("failed to delete instance "+instance.Id+" which is using image "+image.Id, err)
}
}
}
}
if _, err := p.compute().Images.Delete(p.config.ProjectID, image.Name).Do(); err != nil {
return errors.New("deleting image from gcloud", err)
}
return p.state.RemoveImage(image)
}