File tree 1 file changed +27
-8
lines changed
1 file changed +27
-8
lines changed Original file line number Diff line number Diff line change @@ -443,15 +443,34 @@ 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 err
452
+ }
453
+
454
+ if err := dom .Undefine (); err != nil {
455
+ return err
456
+ }
457
+
458
+ return nil
459
+ }
460
+
461
+ func (d * Driver ) destroyRunningDomain (dom * libvirt.Domain ) error {
462
+ state , reason , err := dom .GetState ()
463
+ if err != nil {
464
+ return errors .Wrap (err , "getting domain state" )
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
+ if err := dom .Destroy (); err != nil {
473
+ return errors .Wrap (err , "destroying running domain" )
455
474
}
456
475
457
476
return nil
You can’t perform that action at this time.
0 commit comments