Skip to content

Commit 80d02ad

Browse files
committed
Fix kvm remove when domain is not running
1 parent faf9496 commit 80d02ad

File tree

1 file changed

+27
-8
lines changed

1 file changed

+27
-8
lines changed

pkg/drivers/kvm/kvm.go

+27-8
Original file line numberDiff line numberDiff line change
@@ -443,15 +443,34 @@ func (d *Driver) Remove() error {
443443
dom, err := conn.LookupDomainByName(d.MachineName)
444444
if err != nil {
445445
log.Warn("Domain %s does not exist, nothing to clean up...", d.MachineName)
446+
return nil
446447
}
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")
455474
}
456475

457476
return nil

0 commit comments

Comments
 (0)