kvm with containerd needs more time to stop
parent
838ea0c7fb
commit
10ecd0aeb1
|
@ -175,27 +175,26 @@ func (d *Driver) GetState() (st state.State, err error) {
|
||||||
|
|
||||||
// machineState converts libvirt state to libmachine state
|
// machineState converts libvirt state to libmachine state
|
||||||
func machineState(lvs libvirt.DomainState) state.State {
|
func machineState(lvs libvirt.DomainState) state.State {
|
||||||
// Possible States:
|
// Possible States (ref: https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainState):
|
||||||
//
|
// - VIR_DOMAIN_NOSTATE no state
|
||||||
// VIR_DOMAIN_NOSTATE no state
|
// - VIR_DOMAIN_RUNNING the domain is running
|
||||||
// VIR_DOMAIN_RUNNING the domain is running
|
// - VIR_DOMAIN_BLOCKED the domain is blocked on resource
|
||||||
// VIR_DOMAIN_BLOCKED the domain is blocked on resource
|
// - VIR_DOMAIN_PAUSED the domain is paused by user
|
||||||
// VIR_DOMAIN_PAUSED the domain is paused by user
|
// - VIR_DOMAIN_SHUTDOWN the domain is being shut down
|
||||||
// VIR_DOMAIN_SHUTDOWN the domain is being shut down
|
// - VIR_DOMAIN_SHUTOFF the domain is shut off
|
||||||
// VIR_DOMAIN_SHUTOFF the domain is shut off
|
// - VIR_DOMAIN_CRASHED the domain is crashed
|
||||||
// VIR_DOMAIN_CRASHED the domain is crashed
|
// - VIR_DOMAIN_PMSUSPENDED the domain is suspended by guest power management
|
||||||
// VIR_DOMAIN_PMSUSPENDED the domain is suspended by guest power management
|
// - VIR_DOMAIN_LAST this enum value will increase over time as new events are added to the libvirt API. It reflects the last state supported by this version of the libvirt API.
|
||||||
// VIR_DOMAIN_LAST this enum value will increase over time as new events are added to the libvirt API. It reflects the last state supported by this version of the libvirt API.
|
|
||||||
|
|
||||||
switch lvs {
|
switch lvs {
|
||||||
// DOMAIN_SHUTDOWN technically means the VM is still running, but in the
|
case libvirt.DOMAIN_RUNNING:
|
||||||
// process of being shutdown, so we return state.Running
|
|
||||||
case libvirt.DOMAIN_RUNNING, libvirt.DOMAIN_SHUTDOWN:
|
|
||||||
return state.Running
|
return state.Running
|
||||||
case libvirt.DOMAIN_BLOCKED, libvirt.DOMAIN_CRASHED:
|
case libvirt.DOMAIN_BLOCKED, libvirt.DOMAIN_CRASHED:
|
||||||
return state.Error
|
return state.Error
|
||||||
case libvirt.DOMAIN_PAUSED:
|
case libvirt.DOMAIN_PAUSED:
|
||||||
return state.Paused
|
return state.Paused
|
||||||
|
case libvirt.DOMAIN_SHUTDOWN:
|
||||||
|
return state.Stopping
|
||||||
case libvirt.DOMAIN_SHUTOFF:
|
case libvirt.DOMAIN_SHUTOFF:
|
||||||
return state.Stopped
|
return state.Stopped
|
||||||
case libvirt.DOMAIN_PMSUSPENDED:
|
case libvirt.DOMAIN_PMSUSPENDED:
|
||||||
|
@ -451,7 +450,8 @@ func (d *Driver) Stop() (err error) {
|
||||||
return errors.Wrap(err, "stopping vm")
|
return errors.Wrap(err, "stopping vm")
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < 60; i++ {
|
maxsec := 120
|
||||||
|
for i := 0; i < maxsec; i++ {
|
||||||
s, err := d.GetState()
|
s, err := d.GetState()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "error getting state of VM")
|
return errors.Wrap(err, "error getting state of VM")
|
||||||
|
@ -459,8 +459,8 @@ func (d *Driver) Stop() (err error) {
|
||||||
if s == state.Stopped {
|
if s == state.Stopped {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
log.Infof("Waiting for machine to stop %d/%d", i, 60)
|
log.Infof("Waiting for machine to stop %d/%d", i, maxsec)
|
||||||
time.Sleep(1 * time.Second)
|
time.Sleep(time.Second)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue