metropolis/cli/pkg/context: replace with signal.NotifyContext
Change-Id: I457ccb83c7e25988755bb9463a8c83fc328a722b
Reviewed-on: https://review.monogon.dev/c/monogon/+/3081
Tested-by: Jenkins CI
Reviewed-by: Serge Bazanski <serge@monogon.tech>
diff --git a/metropolis/cli/metroctl/BUILD.bazel b/metropolis/cli/metroctl/BUILD.bazel
index a84ae03..9eb0aa4 100644
--- a/metropolis/cli/metroctl/BUILD.bazel
+++ b/metropolis/cli/metroctl/BUILD.bazel
@@ -43,7 +43,6 @@
deps = [
"//go/clitable",
"//metropolis/cli/metroctl/core",
- "//metropolis/cli/pkg/context",
"//metropolis/node/core/identity",
"//metropolis/node/core/rpc",
"//metropolis/node/core/rpc/resolver",
diff --git a/metropolis/cli/metroctl/cmd_install.go b/metropolis/cli/metroctl/cmd_install.go
index fdc51b0..fc463b4 100644
--- a/metropolis/cli/metroctl/cmd_install.go
+++ b/metropolis/cli/metroctl/cmd_install.go
@@ -7,6 +7,7 @@
_ "embed"
"log"
"os"
+ "os/signal"
"strings"
"github.com/bazelbuild/rules_go/go/runfiles"
@@ -16,7 +17,6 @@
cpb "source.monogon.dev/metropolis/proto/common"
"source.monogon.dev/metropolis/cli/metroctl/core"
- clicontext "source.monogon.dev/metropolis/cli/pkg/context"
"source.monogon.dev/metropolis/pkg/blkio"
"source.monogon.dev/metropolis/pkg/fat32"
)
@@ -63,7 +63,7 @@
log.Fatalf("Invalid --bootstrap-storage-security (must be one of: permissive, needs-encryption, needs-encryption-and-authentication, needs-insecure)")
}
- ctx := clicontext.WithInterrupt(context.Background())
+ ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
if err := os.MkdirAll(flags.configPath, 0700); err != nil && !os.IsExist(err) {
log.Fatalf("Failed to create config directory: %v", err)
diff --git a/metropolis/cli/metroctl/cmd_k8s_configure.go b/metropolis/cli/metroctl/cmd_k8s_configure.go
index 7e8d771..c238cdf 100644
--- a/metropolis/cli/metroctl/cmd_k8s_configure.go
+++ b/metropolis/cli/metroctl/cmd_k8s_configure.go
@@ -5,11 +5,11 @@
"log"
"os"
"os/exec"
+ "os/signal"
"github.com/spf13/cobra"
"source.monogon.dev/metropolis/cli/metroctl/core"
- clicontext "source.monogon.dev/metropolis/cli/pkg/context"
)
var k8sCommand = &cobra.Command{
@@ -28,7 +28,7 @@
}
func doK8sConfigure(cmd *cobra.Command, _ []string) {
- ctx := clicontext.WithInterrupt(context.Background())
+ ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
if len(flags.clusterEndpoints) < 1 {
log.Fatalf("k8s configure requires at least one cluster endpoint to be provided with the --endpoints parameter.")
}
diff --git a/metropolis/cli/metroctl/cmd_node.go b/metropolis/cli/metroctl/cmd_node.go
index ebfaa25..19440b6 100644
--- a/metropolis/cli/metroctl/cmd_node.go
+++ b/metropolis/cli/metroctl/cmd_node.go
@@ -7,6 +7,7 @@
"io"
"log"
"os"
+ "os/signal"
"strings"
"sync"
"time"
@@ -16,7 +17,6 @@
"source.monogon.dev/go/clitable"
"source.monogon.dev/metropolis/cli/metroctl/core"
- clicontext "source.monogon.dev/metropolis/cli/pkg/context"
"source.monogon.dev/metropolis/node/core/identity"
"source.monogon.dev/version"
@@ -33,7 +33,7 @@
Use: "describe [node-id] [--filter] [--output] [--format]",
Example: "metroctl node describe metropolis-c556e31c3fa2bf0a36e9ccb9fd5d6056",
Run: func(cmd *cobra.Command, args []string) {
- ctx := clicontext.WithInterrupt(context.Background())
+ ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
cc := dialAuthenticated(ctx)
mgmt := apb.NewManagementClient(cc)
@@ -52,7 +52,7 @@
Use: "list [node-id] [--filter] [--output] [--format]",
Example: "metroctl node list --filter node.status.external_address==\"10.8.0.2\"",
Run: func(cmd *cobra.Command, args []string) {
- ctx := clicontext.WithInterrupt(context.Background())
+ ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
cc := dialAuthenticated(ctx)
mgmt := apb.NewManagementClient(cc)
@@ -106,7 +106,7 @@
}
unavailableSemaphore := semaphore.NewWeighted(int64(maxUnavailable))
- ctx := clicontext.WithInterrupt(context.Background())
+ ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
cacert, err := core.GetClusterCAWithTOFU(ctx, connectOptions())
if err != nil {
@@ -234,7 +234,7 @@
return err
}
- ctx := clicontext.WithInterrupt(context.Background())
+ ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
mgmt := apb.NewManagementClient(dialAuthenticated(ctx))
nodes, err := core.GetNodes(ctx, mgmt, fmt.Sprintf("node.id==%q", args[0]))
diff --git a/metropolis/cli/metroctl/cmd_node_approve.go b/metropolis/cli/metroctl/cmd_node_approve.go
index 41c6f24..62ab7bd 100644
--- a/metropolis/cli/metroctl/cmd_node_approve.go
+++ b/metropolis/cli/metroctl/cmd_node_approve.go
@@ -4,11 +4,12 @@
"context"
"fmt"
"log"
+ "os"
+ "os/signal"
"github.com/spf13/cobra"
"source.monogon.dev/metropolis/cli/metroctl/core"
- clicontext "source.monogon.dev/metropolis/cli/pkg/context"
"source.monogon.dev/metropolis/node/core/identity"
"source.monogon.dev/metropolis/proto/api"
)
@@ -35,7 +36,7 @@
}
func doApprove(cmd *cobra.Command, args []string) {
- ctx := clicontext.WithInterrupt(context.Background())
+ ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
cc := dialAuthenticated(ctx)
mgmt := api.NewManagementClient(cc)
diff --git a/metropolis/cli/metroctl/cmd_node_set.go b/metropolis/cli/metroctl/cmd_node_set.go
index b0bfaf5..5d465f5 100644
--- a/metropolis/cli/metroctl/cmd_node_set.go
+++ b/metropolis/cli/metroctl/cmd_node_set.go
@@ -3,11 +3,12 @@
import (
"context"
"log"
+ "os"
+ "os/signal"
"strings"
"github.com/spf13/cobra"
- clicontext "source.monogon.dev/metropolis/cli/pkg/context"
"source.monogon.dev/metropolis/proto/api"
)
@@ -46,7 +47,7 @@
}
func doAdd(cmd *cobra.Command, args []string) {
- ctx := clicontext.WithInterrupt(context.Background())
+ ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
cc := dialAuthenticated(ctx)
mgmt := api.NewManagementClient(cc)
@@ -84,7 +85,7 @@
}
func doRemove(cmd *cobra.Command, args []string) {
- ctx := clicontext.WithInterrupt(context.Background())
+ ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
cc := dialAuthenticated(ctx)
mgmt := api.NewManagementClient(cc)
diff --git a/metropolis/cli/metroctl/cmd_takeownership.go b/metropolis/cli/metroctl/cmd_takeownership.go
index 5161dc9..30b9f08 100644
--- a/metropolis/cli/metroctl/cmd_takeownership.go
+++ b/metropolis/cli/metroctl/cmd_takeownership.go
@@ -6,12 +6,12 @@
"log"
"os"
"os/exec"
+ "os/signal"
"github.com/spf13/cobra"
"google.golang.org/grpc"
"source.monogon.dev/metropolis/cli/metroctl/core"
- clicontext "source.monogon.dev/metropolis/cli/pkg/context"
"source.monogon.dev/metropolis/node/core/rpc"
"source.monogon.dev/metropolis/node/core/rpc/resolver"
apb "source.monogon.dev/metropolis/proto/api"
@@ -29,7 +29,7 @@
}
func doTakeOwnership(cmd *cobra.Command, _ []string) {
- ctx := clicontext.WithInterrupt(context.Background())
+ ctx, _ := signal.NotifyContext(context.Background(), os.Interrupt)
if len(flags.clusterEndpoints) != 1 {
log.Fatalf("takeownership requires a single cluster endpoint to be provided with the --endpoints parameter.")
}
diff --git a/metropolis/cli/pkg/context/BUILD.bazel b/metropolis/cli/pkg/context/BUILD.bazel
deleted file mode 100644
index 2418a82..0000000
--- a/metropolis/cli/pkg/context/BUILD.bazel
+++ /dev/null
@@ -1,8 +0,0 @@
-load("@io_bazel_rules_go//go:def.bzl", "go_library")
-
-go_library(
- name = "context",
- srcs = ["context.go"],
- importpath = "source.monogon.dev/metropolis/cli/pkg/context",
- visibility = ["//visibility:public"],
-)
diff --git a/metropolis/cli/pkg/context/context.go b/metropolis/cli/pkg/context/context.go
deleted file mode 100644
index bad24ea..0000000
--- a/metropolis/cli/pkg/context/context.go
+++ /dev/null
@@ -1,21 +0,0 @@
-package clicontext
-
-import (
- "context"
- "os"
- "os/signal"
-)
-
-// WithInterrupt returns a context for use in a command-line utility. It gets
-// cancelled if the user interrupts the command, for example by pressing
-// Ctrl+C.
-func WithInterrupt(parent context.Context) context.Context {
- ctx, cancel := context.WithCancel(parent)
- c := make(chan os.Signal, 1)
- signal.Notify(c, os.Interrupt)
- go func() {
- <-c
- cancel()
- }()
- return ctx
-}