From 468bee9a7909de0c2a8d5aec58dc37755c85c871 Mon Sep 17 00:00:00 2001 From: Akihiro Suda Date: Tue, 13 Feb 2024 02:30:05 +0900 Subject: [PATCH] ctr: print deprecation warnings on every invocation Print deprecation warnings on any ctr command, as users won't notice the deprecations until we actually remove the deprecated features. The warnings can be suppressed by setting `CONTAINERD_SUPPRESS_DEPRECATION_WARNINGS=1`. Signed-off-by: Akihiro Suda --- cmd/ctr/commands/client.go | 20 +++++++++++++++++++ cmd/ctr/commands/deprecations/deprecations.go | 3 +++ 2 files changed, 23 insertions(+) diff --git a/cmd/ctr/commands/client.go b/cmd/ctr/commands/client.go index b78efab0e..fcc894a7e 100644 --- a/cmd/ctr/commands/client.go +++ b/cmd/ctr/commands/client.go @@ -18,10 +18,13 @@ package commands import ( gocontext "context" + "os" + "strconv" containerd "github.com/containerd/containerd/v2/client" "github.com/containerd/containerd/v2/pkg/epoch" "github.com/containerd/containerd/v2/pkg/namespaces" + ptypes "github.com/containerd/containerd/v2/protobuf/types" "github.com/containerd/log" "github.com/urfave/cli" ) @@ -62,5 +65,22 @@ func NewClient(context *cli.Context, opts ...containerd.Opt) (*containerd.Client return nil, nil, nil, err } ctx, cancel := AppContext(context) + var suppressDeprecationWarnings bool + if s := os.Getenv("CONTAINERD_SUPPRESS_DEPRECATION_WARNINGS"); s != "" { + suppressDeprecationWarnings, err = strconv.ParseBool(s) + if err != nil { + log.L.WithError(err).Warn("Failed to parse CONTAINERD_SUPPRESS_DEPRECATION_WARNINGS=" + s) + } + } + if !suppressDeprecationWarnings { + resp, err := client.IntrospectionService().Server(ctx, &ptypes.Empty{}) + if err != nil { + log.L.WithError(err).Warn("Failed to check deprecations") + } else { + for _, d := range resp.Deprecations { + log.L.Warn("DEPRECATION: " + d.Message) + } + } + } return client, ctx, cancel, nil } diff --git a/cmd/ctr/commands/deprecations/deprecations.go b/cmd/ctr/commands/deprecations/deprecations.go index 63256f781..3aaf54880 100644 --- a/cmd/ctr/commands/deprecations/deprecations.go +++ b/cmd/ctr/commands/deprecations/deprecations.go @@ -47,6 +47,9 @@ var listCommand = cli.Command{ }, }, Action: func(context *cli.Context) error { + // Suppress automatic warnings, since we print the warnings by ourselves. + os.Setenv("CONTAINERD_SUPPRESS_DEPRECATION_WARNINGS", "1") + client, ctx, cancel, err := commands.NewClient(context) if err != nil { return err