Skip to content

Commit f5f750d

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

File tree

1 file changed

+23
-8
lines changed

1 file changed

+23
-8
lines changed

pkg/drivers/kvm/kvm.go

+23-8
Original file line numberDiff line numberDiff line change
@@ -443,16 +443,31 @@ 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 errors.Wrap(err, "destroying running domain")
452+
}
453+
454+
if err := dom.Undefine(); err != nil {
455+
return err
455456
}
456457

457458
return nil
458459
}
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+
}

0 commit comments

Comments
 (0)