func handleSigterm(lbc *controller.LoadBalancerController, deleteAll bool) { // Multiple SIGTERMs will get dropped signalChan := make(chan os.Signal, 1) signal.Notify(signalChan, syscall.SIGTERM) <-signalChan glog.Infof("Received SIGTERM, shutting down") // TODO: Better retires than relying on restartPolicy. exitCode := 0 if err := lbc.Stop(deleteAll); err != nil { glog.Infof("Error during shutdown %v", err) exitCode = 1 } glog.Infof("Exiting with %v", exitCode) os.Exit(exitCode) }
func registerHandlers(lbc *controller.LoadBalancerController) { http.HandleFunc("/healthz", func(w http.ResponseWriter, r *http.Request) { if err := lbc.CloudClusterManager.IsHealthy(); err != nil { w.WriteHeader(500) w.Write([]byte(fmt.Sprintf("Cluster unhealthy: %v", err))) return } w.WriteHeader(200) w.Write([]byte("ok")) }) http.HandleFunc("/delete-all-and-quit", func(w http.ResponseWriter, r *http.Request) { // TODO: Retry failures during shutdown. lbc.Stop(true) }) glog.Fatal(http.ListenAndServe(fmt.Sprintf(":%v", lbApiPort), nil)) }