diff --git a/drivers/amazonec2/amazonec2.go b/drivers/amazonec2/amazonec2.go index 18b9688141..7be314a824 100644 --- a/drivers/amazonec2/amazonec2.go +++ b/drivers/amazonec2/amazonec2.go @@ -748,16 +748,23 @@ func (d *Driver) Kill() error { } func (d *Driver) Remove() error { + multierr := mcnutils.MultiError{ + Errs: []error{}, + } + if err := d.terminate(); err != nil { - return fmt.Errorf("unable to terminate instance: %s", err) + multierr.Errs = append(multierr.Errs, err) } - // remove keypair if err := d.deleteKeyPair(); err != nil { - return fmt.Errorf("unable to remove key pair: %s", err) + multierr.Errs = append(multierr.Errs, err) } - return nil + if len(multierr.Errs) == 0 { + return nil + } + + return multierr } func (d *Driver) getInstance() (*ec2.Instance, error) { diff --git a/libmachine/mcnutils/utils.go b/libmachine/mcnutils/utils.go index b1965b069f..a3992ed164 100644 --- a/libmachine/mcnutils/utils.go +++ b/libmachine/mcnutils/utils.go @@ -11,6 +11,18 @@ import ( "time" ) +type MultiError struct { + Errs []error +} + +func (e MultiError) Error() string { + aggregate := "" + for _, err := range e.Errs { + aggregate += err.Error() + "\n" + } + return aggregate +} + // GetHomeDir returns the home directory // TODO: Having this here just strikes me as dangerous, but some of the drivers // depend on it ;_;