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 <akihiro.suda.cz@hco.ntt.co.jp>
This commit is contained in:
Akihiro Suda 2024-02-13 02:30:05 +09:00
parent 2c7520d6eb
commit 468bee9a79
No known key found for this signature in database
GPG Key ID: 49524C6F9F638F1A
2 changed files with 23 additions and 0 deletions

View File

@ -18,10 +18,13 @@ package commands
import ( import (
gocontext "context" gocontext "context"
"os"
"strconv"
containerd "github.com/containerd/containerd/v2/client" containerd "github.com/containerd/containerd/v2/client"
"github.com/containerd/containerd/v2/pkg/epoch" "github.com/containerd/containerd/v2/pkg/epoch"
"github.com/containerd/containerd/v2/pkg/namespaces" "github.com/containerd/containerd/v2/pkg/namespaces"
ptypes "github.com/containerd/containerd/v2/protobuf/types"
"github.com/containerd/log" "github.com/containerd/log"
"github.com/urfave/cli" "github.com/urfave/cli"
) )
@ -62,5 +65,22 @@ func NewClient(context *cli.Context, opts ...containerd.Opt) (*containerd.Client
return nil, nil, nil, err return nil, nil, nil, err
} }
ctx, cancel := AppContext(context) 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 return client, ctx, cancel, nil
} }

View File

@ -47,6 +47,9 @@ var listCommand = cli.Command{
}, },
}, },
Action: func(context *cli.Context) error { 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) client, ctx, cancel, err := commands.NewClient(context)
if err != nil { if err != nil {
return err return err