diff --git a/plugins/scheduler-k3s/subcommands.go b/plugins/scheduler-k3s/subcommands.go index 165591595..1a251a2bc 100644 --- a/plugins/scheduler-k3s/subcommands.go +++ b/plugins/scheduler-k3s/subcommands.go @@ -247,7 +247,7 @@ func CommandInitialize(taintScheduling bool) error { return fmt.Errorf("Unable to create kubernetes client: %w", err) } - err = clientset.LabelNode(context.Background(), LabelNodeInput{ + err = clientset.LabelNode(ctx, LabelNodeInput{ Name: nodeName, Key: key, Value: value, @@ -325,6 +325,17 @@ func CommandClusterAdd(role string, remoteHost string, allowUknownHosts bool, ta return fmt.Errorf(fmt.Sprintf("Unable to determine server ip address from network-interface %s", networkInterface)) } + ctx, cancel := context.WithCancel(context.Background()) + signals := make(chan os.Signal, 1) + signal.Notify(signals, os.Interrupt, syscall.SIGHUP, + syscall.SIGINT, + syscall.SIGQUIT, + syscall.SIGTERM) + go func() { + <-signals + cancel() + }() + // todo: check if k3s is installed on the remote host k3sVersionCmd, err := common.CallExecCommand(common.ExecCommandInput{ @@ -505,7 +516,7 @@ func CommandClusterAdd(role string, remoteHost string, allowUknownHosts bool, ta if joinCmd.ExitCode != 0 { return fmt.Errorf("Invalid exit code from k3s installer command over ssh: %d", joinCmd.ExitCode) } - ctx := context.Background() + clientset, err := NewKubernetesClient() if err != nil { return fmt.Errorf("Unable to create kubernetes client: %w", err) @@ -540,7 +551,7 @@ func CommandClusterAdd(role string, remoteHost string, allowUknownHosts bool, ta return fmt.Errorf("Unable to create kubernetes client: %w", err) } - err = clientset.LabelNode(context.Background(), LabelNodeInput{ + err = clientset.LabelNode(ctx, LabelNodeInput{ Name: nodeName, Key: key, Value: value, @@ -573,12 +584,23 @@ func CommandClusterList(format string) error { return fmt.Errorf("k3s not installed, cannot list cluster nodes") } + ctx, cancel := context.WithCancel(context.Background()) + signals := make(chan os.Signal, 1) + signal.Notify(signals, os.Interrupt, syscall.SIGHUP, + syscall.SIGINT, + syscall.SIGQUIT, + syscall.SIGTERM) + go func() { + <-signals + cancel() + }() + clientset, err := NewKubernetesClient() if err != nil { return fmt.Errorf("Unable to create kubernetes client: %w", err) } - nodes, err := clientset.ListNodes(context.Background(), ListNodesInput{}) + nodes, err := clientset.ListNodes(ctx, ListNodesInput{}) if err != nil { return fmt.Errorf("Unable to list nodes: %w", err) } @@ -614,6 +636,17 @@ func CommandClusterRemove(nodeName string) error { return fmt.Errorf("k3s not installed, cannot remove node") } + ctx, cancel := context.WithCancel(context.Background()) + signals := make(chan os.Signal, 1) + signal.Notify(signals, os.Interrupt, syscall.SIGHUP, + syscall.SIGINT, + syscall.SIGQUIT, + syscall.SIGTERM) + go func() { + <-signals + cancel() + }() + common.LogInfo1Quiet(fmt.Sprintf("Removing %s from k3s cluster", nodeName)) clientset, err := NewKubernetesClient() if err != nil { @@ -621,7 +654,6 @@ func CommandClusterRemove(nodeName string) error { } common.LogVerboseQuiet("Getting node remote connection information") - ctx := context.Background() node, err := clientset.GetNode(ctx, GetNodeInput{ Name: nodeName, }) diff --git a/plugins/scheduler-k3s/triggers.go b/plugins/scheduler-k3s/triggers.go index 7d94e52bd..0515747ba 100644 --- a/plugins/scheduler-k3s/triggers.go +++ b/plugins/scheduler-k3s/triggers.go @@ -121,13 +121,22 @@ func TriggerPostRegistryLogin(server string, username string) error { return fmt.Errorf("Unable to write registry configuration to file: %w", err) } - // todo: auth against all nodes in cluster + ctx, cancel := context.WithCancel(context.Background()) + signals := make(chan os.Signal, 1) + signal.Notify(signals, os.Interrupt, syscall.SIGHUP, + syscall.SIGINT, + syscall.SIGQUIT, + syscall.SIGTERM) + go func() { + <-signals + cancel() + }() + clientset, err := NewKubernetesClient() if err != nil { return fmt.Errorf("Error creating kubernetes client: %w", err) } - ctx := context.Background() nodes, err := clientset.ListNodes(ctx, ListNodesInput{}) if err != nil { return fmt.Errorf("Error listing nodes: %w", err) @@ -166,12 +175,14 @@ func TriggerSchedulerDeploy(scheduler string, appName string, imageTag string) e return err } - ctx := context.Background() - ctx, cancel := context.WithCancel(ctx) - cSignal := make(chan os.Signal, 2) - signal.Notify(cSignal, os.Interrupt, syscall.SIGTERM) + ctx, cancel := context.WithCancel(context.Background()) + signals := make(chan os.Signal, 1) + signal.Notify(signals, os.Interrupt, syscall.SIGHUP, + syscall.SIGINT, + syscall.SIGQUIT, + syscall.SIGTERM) go func() { - <-cSignal + <-signals common.LogWarn(fmt.Sprintf("Deployment of %s has been cancelled", appName)) cancel() }() @@ -505,11 +516,6 @@ func TriggerSchedulerEnter(scheduler string, appName string, processType string, return nil } - clientset, err := NewKubernetesClient() - if err != nil { - return fmt.Errorf("Error creating kubernetes client: %w", err) - } - ctx, cancel := context.WithCancel(context.Background()) signals := make(chan os.Signal, 1) signal.Notify(signals, os.Interrupt, syscall.SIGHUP, @@ -521,6 +527,11 @@ func TriggerSchedulerEnter(scheduler string, appName string, processType string, cancel() }() + clientset, err := NewKubernetesClient() + if err != nil { + return fmt.Errorf("Error creating kubernetes client: %w", err) + } + namespace := common.PropertyGetDefault("scheduler-k3s", appName, "namespace", "default") labelSelector := []string{fmt.Sprintf("app.kubernetes.io/part-of=%s", appName)} @@ -597,11 +608,6 @@ func TriggerSchedulerLogs(scheduler string, appName string, processType string, return nil } - clientset, err := NewKubernetesClient() - if err != nil { - return fmt.Errorf("Error creating kubernetes client: %w", err) - } - ctx, cancel := context.WithCancel(context.Background()) signals := make(chan os.Signal, 1) signal.Notify(signals, os.Interrupt, syscall.SIGHUP, @@ -613,6 +619,11 @@ func TriggerSchedulerLogs(scheduler string, appName string, processType string, cancel() }() + clientset, err := NewKubernetesClient() + if err != nil { + return fmt.Errorf("Error creating kubernetes client: %w", err) + } + labelSelector := []string{fmt.Sprintf("app.kubernetes.io/part-of=%s", appName)} processIndex := 0 if processType != "" { @@ -1017,6 +1028,17 @@ func TriggerSchedulerRunList(scheduler string, appName string, format string) er return nil } + ctx, cancel := context.WithCancel(context.Background()) + signals := make(chan os.Signal, 1) + signal.Notify(signals, os.Interrupt, syscall.SIGHUP, + syscall.SIGINT, + syscall.SIGQUIT, + syscall.SIGTERM) + go func() { + <-signals + cancel() + }() + clientset, err := NewKubernetesClient() if err != nil { return fmt.Errorf("Error creating kubernetes client: %w", err) @@ -1024,7 +1046,6 @@ func TriggerSchedulerRunList(scheduler string, appName string, format string) er namespace := common.PropertyGetDefault("scheduler-k3s", appName, "namespace", "default") - ctx := context.Background() cronJobs, err := clientset.ListCronJobs(ctx, ListCronJobsInput{ LabelSelector: fmt.Sprintf("app.kubernetes.io/part-of=%s", appName), Namespace: namespace, @@ -1104,11 +1125,6 @@ func TriggerSchedulerStop(scheduler string, appName string) error { return nil } - clientset, err := NewKubernetesClient() - if err != nil { - return fmt.Errorf("Error creating kubernetes client: %w", err) - } - ctx, cancel := context.WithCancel(context.Background()) signals := make(chan os.Signal, 1) signal.Notify(signals, os.Interrupt, syscall.SIGHUP, @@ -1120,6 +1136,11 @@ func TriggerSchedulerStop(scheduler string, appName string) error { cancel() }() + clientset, err := NewKubernetesClient() + if err != nil { + return fmt.Errorf("Error creating kubernetes client: %w", err) + } + namespace := common.PropertyGetDefault("scheduler-k3s", appName, "namespace", "default") deployments, err := clientset.ListDeployments(ctx, ListDeploymentsInput{ Namespace: namespace,