File tree 1 file changed +23
-8
lines changed
1 file changed +23
-8
lines changed Original file line number Diff line number Diff line change @@ -443,16 +443,31 @@ func (d *Driver) Remove() error {
443
443
dom , err := conn .LookupDomainByName (d .MachineName )
444
444
if err != nil {
445
445
log .Warn ("Domain %s does not exist, nothing to clean up..." , d .MachineName )
446
+ return nil
446
447
}
447
- if dom != nil {
448
- log .Infof ("Domain %s exists, removing..." , d .MachineName )
449
- if err := dom . Destroy ( ); err != nil {
450
- return err
451
- }
452
- if err := dom . Undefine (); err != nil {
453
- return err
454
- }
448
+
449
+ log .Infof ("Domain %s exists, removing..." , d .MachineName )
450
+ if err := d . destroyRunningDomain ( dom ); err != nil {
451
+ return errors . Wrap ( err , "destroying running domain" )
452
+ }
453
+
454
+ if err := dom . Undefine (); err != nil {
455
+ return err
455
456
}
456
457
457
458
return nil
458
459
}
460
+
461
+ func (d * Driver ) destroyRunningDomain (dom * libvirt.Domain ) error {
462
+ state , reason , err := dom .GetState ()
463
+ if err != nil {
464
+ return err
465
+ }
466
+
467
+ if state == libvirt .DOMAIN_SHUTOFF && reason == int (libvirt .DOMAIN_SHUTOFF_DESTROYED ) {
468
+ log .Warnf ("Domain %s already destroyed, skipping..." , d .MachineName )
469
+ return nil
470
+ }
471
+
472
+ return dom .Destroy ()
473
+ }
You can’t perform that action at this time.
0 commit comments