Skip to content

Commit 8f9a3f4

Browse files
authored
Merge pull request #4344 from josedonizetti/fix-kvm-remove-when-domain-is-not-running
Fix kvm remove when domain is not running
2 parents bb56fd2 + 48237d9 commit 8f9a3f4

File tree

1 file changed

+20
-9
lines changed

1 file changed

+20
-9
lines changed

pkg/drivers/kvm/kvm.go

+20-9
Original file line numberDiff line numberDiff line change
@@ -443,16 +443,27 @@ func (d *Driver) Remove() error {
443443
dom, err := conn.LookupDomainByName(d.MachineName)
444444
if err != nil {
445445
log.Warnf("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")
455452
}
456453

457-
return nil
454+
return dom.Undefine()
455+
}
456+
457+
func (d *Driver) destroyRunningDomain(dom *libvirt.Domain) error {
458+
state, reason, err := dom.GetState()
459+
if err != nil {
460+
return errors.Wrap(err, "getting domain state")
461+
}
462+
463+
if state == libvirt.DOMAIN_SHUTOFF && reason == int(libvirt.DOMAIN_SHUTOFF_DESTROYED) {
464+
log.Warnf("Domain %s already destroyed, skipping...", d.MachineName)
465+
return nil
466+
}
467+
468+
return dom.Destroy()
458469
}

0 commit comments

Comments
 (0)