diff --git a/cmd/watchdog/main.go b/cmd/watchdog/main.go index 312b22f..58208c4 100755 --- a/cmd/watchdog/main.go +++ b/cmd/watchdog/main.go @@ -67,17 +67,22 @@ func doWatch(watches []*watchdog) { fmt.Println("in ping tick") + needReconnect := false for _, w := range watches { - doWatch0(w) + needReconnect = doWatch0(w) || needReconnect + } + + if needReconnect { + return } } } -func doWatch0(w *watchdog) bool { +func doWatch0(w *watchdog) (needReconnect bool) { pinger, err := ping.NewPinger(w.addr) if err != nil { _, _ = fmt.Fprintf(os.Stderr, "ping to target failed: %s\n", err) - return false + return } pinger.Timeout = time.Second * 15 @@ -87,21 +92,21 @@ func doWatch0(w *watchdog) bool { err = pinger.Run() if err != nil { _, _ = fmt.Fprintf(os.Stderr, "ping to target failed: %s\n", err) - return false + return } fmt.Printf("finished ping to %s\n", w.addr) statistics := pinger.Statistics() if statistics.PacketsRecv != 0 { w.life = 3 - return false + return } w.life-- fmt.Printf("ping vm %s(%s) failed, left %d life", w.addr, w.vm.Name(), w.life) if w.life > 0 { - return false + return } fmt.Printf("restarting vm %s(%s)", w.addr, w.vm.Name()) @@ -111,7 +116,7 @@ func doWatch0(w *watchdog) bool { return true } - return false + return } func reset(vm *vmomi.VirtualMachine) error {