mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 11:21:47 +00:00
Merge pull request #108750 from andrewsykim/agnhost-netexec-termination
agnhost: support --delay-shutdown flag for the net and netexec subcommands
This commit is contained in:
commit
6340b19dda
@ -24,7 +24,10 @@ import (
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/signal"
|
||||
"strings"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
@ -38,9 +41,10 @@ var (
|
||||
// flags for the command line. See usage args below for
|
||||
// descriptions.
|
||||
flags struct {
|
||||
Serve string
|
||||
Runner string
|
||||
Options string
|
||||
Serve string
|
||||
Runner string
|
||||
Options string
|
||||
DelayShutdown int
|
||||
}
|
||||
// runners is a map from runner name to runner instance.
|
||||
runners = makeRunnerMap()
|
||||
@ -79,6 +83,7 @@ func init() {
|
||||
"HTTP requests.")
|
||||
CmdNet.Flags().StringVar(&flags.Runner, "runner", "", "Runner to execute (available:"+legalRunners+")")
|
||||
CmdNet.Flags().StringVar(&flags.Options, "options", "", "JSON options to the Runner")
|
||||
CmdNet.Flags().IntVar(&flags.DelayShutdown, "delay-shutdown", 0, "Number of seconds to delay shutdown when receiving SIGTERM.")
|
||||
}
|
||||
|
||||
func main(cmd *cobra.Command, args []string) {
|
||||
@ -86,6 +91,17 @@ func main(cmd *cobra.Command, args []string) {
|
||||
log.Fatalf("Must set either --runner or --serve, see --help")
|
||||
}
|
||||
|
||||
if flags.DelayShutdown > 0 {
|
||||
termCh := make(chan os.Signal, 1)
|
||||
signal.Notify(termCh, syscall.SIGTERM)
|
||||
go func() {
|
||||
<-termCh
|
||||
log.Printf("Sleeping %d seconds before terminating...", flags.DelayShutdown)
|
||||
time.Sleep(time.Duration(flags.DelayShutdown) * time.Second)
|
||||
os.Exit(0)
|
||||
}()
|
||||
}
|
||||
|
||||
log.SetFlags(log.Flags() | log.Lshortfile)
|
||||
|
||||
if flags.Serve == "" {
|
||||
|
@ -28,9 +28,11 @@ import (
|
||||
"net/url"
|
||||
"os"
|
||||
"os/exec"
|
||||
"os/signal"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/ishidawataru/sctp"
|
||||
@ -51,6 +53,7 @@ var (
|
||||
privKeyFile = ""
|
||||
httpOverride = ""
|
||||
udpListenAddresses = ""
|
||||
delayShutdown = 0
|
||||
)
|
||||
|
||||
const bindToAny = ""
|
||||
@ -134,6 +137,7 @@ func init() {
|
||||
CmdNetexec.Flags().IntVar(&sctpPort, "sctp-port", -1, "SCTP Listen Port")
|
||||
CmdNetexec.Flags().StringVar(&httpOverride, "http-override", "", "Override the HTTP handler to always respond as if it were a GET with this path & params")
|
||||
CmdNetexec.Flags().StringVar(&udpListenAddresses, "udp-listen-addresses", "", "A comma separated list of ip addresses the udp servers listen from")
|
||||
CmdNetexec.Flags().IntVar(&delayShutdown, "delay-shutdown", 0, "Number of seconds to delay shutdown when receiving SIGTERM.")
|
||||
}
|
||||
|
||||
// atomicBool uses load/store operations on an int32 to simulate an atomic boolean.
|
||||
@ -157,6 +161,18 @@ func (a *atomicBool) get() bool {
|
||||
|
||||
func main(cmd *cobra.Command, args []string) {
|
||||
exitCh := make(chan shutdownRequest)
|
||||
|
||||
if delayShutdown > 0 {
|
||||
termCh := make(chan os.Signal, 1)
|
||||
signal.Notify(termCh, syscall.SIGTERM)
|
||||
go func() {
|
||||
<-termCh
|
||||
log.Printf("Sleeping %d seconds before terminating...", delayShutdown)
|
||||
time.Sleep(time.Duration(delayShutdown) * time.Second)
|
||||
os.Exit(0)
|
||||
}()
|
||||
}
|
||||
|
||||
if httpOverride != "" {
|
||||
mux := http.NewServeMux()
|
||||
addRoutes(mux, exitCh)
|
||||
|
Loading…
Reference in New Issue
Block a user