func hyperHandlePodEvent(vmResponse *types.VmResponse, data interface{}, mypod *hypervisor.PodStatus, vm *hypervisor.Vm) bool { daemon := data.(*Daemon) if vmResponse.Code == types.E_POD_FINISHED { if vm.Keep != types.VM_KEEP_NONE { vm.Status = types.S_VM_IDLE return false } stopLogger(mypod) mypod.SetPodContainerStatus(vmResponse.Data.([]uint32)) vm.Status = types.S_VM_IDLE if mypod.Autoremove == true { daemon.CleanPod(mypod.Id) return false } } else if vmResponse.Code == types.E_VM_SHUTDOWN { if mypod.Status == types.S_POD_RUNNING { stopLogger(mypod) mypod.Status = types.S_POD_SUCCEEDED mypod.SetContainerStatus(types.S_POD_SUCCEEDED) } mypod.Vm = "" daemon.PodStopped(mypod.Id) if mypod.Type == "kubernetes" { cleanup := false switch mypod.Status { case types.S_POD_SUCCEEDED: if mypod.RestartPolicy == "always" { daemon.RestartPod(mypod) break } cleanup = true case types.S_POD_FAILED: if mypod.RestartPolicy != "never" { daemon.RestartPod(mypod) break } cleanup = true default: break } if cleanup { daemon.CleanUpContainer(mypod) daemon.DeleteVolumeId(mypod.Id) } } return true } return false }
func hyperHandlePodEvent(vmResponse *types.VmResponse, data interface{}, mypod *hypervisor.PodStatus, vm *hypervisor.Vm) bool { daemon := data.(*Daemon) if vmResponse.Code == types.E_POD_FINISHED { if vm.Keep != types.VM_KEEP_NONE { mypod.Vm = "" vm.Status = types.S_VM_IDLE return false } mypod.SetPodContainerStatus(vmResponse.Data.([]uint32)) mypod.Vm = "" vm.Status = types.S_VM_IDLE if mypod.Autoremove == true { daemon.CleanPod(mypod.Id) return false } } else if vmResponse.Code == types.E_VM_SHUTDOWN { if mypod.Status == types.S_POD_RUNNING { mypod.Status = types.S_POD_SUCCEEDED mypod.SetContainerStatus(types.S_POD_SUCCEEDED) } mypod.Vm = "" daemon.RemoveVm(vm.Id) if mypod.Type == "kubernetes" { switch mypod.Status { case types.S_POD_SUCCEEDED: if mypod.RestartPolicy == "always" { daemon.RestartPod(mypod) break } daemon.DeletePodFromDB(mypod.Id) for _, c := range mypod.Containers { glog.V(1).Infof("Ready to rm container: %s", c.Id) if _, _, err := daemon.DockerCli.SendCmdDelete(c.Id); err != nil { glog.V(1).Infof("Error to rm container: %s", err.Error()) } } daemon.DeletePodContainerFromDB(mypod.Id) daemon.DeleteVolumeId(mypod.Id) break case types.S_POD_FAILED: if mypod.RestartPolicy != "never" { daemon.RestartPod(mypod) break } daemon.DeletePodFromDB(mypod.Id) for _, c := range mypod.Containers { glog.V(1).Infof("Ready to rm container: %s", c.Id) if _, _, err := daemon.DockerCli.SendCmdDelete(c.Id); err != nil { glog.V(1).Infof("Error to rm container: %s", err.Error()) } } daemon.DeletePodContainerFromDB(mypod.Id) daemon.DeleteVolumeId(mypod.Id) break default: break } } return true } return false }