From 5d89716d22c2ed1749c87e5dae3059fc50671eb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ma=C3=ABl=20Valais?= Date: Tue, 21 Mar 2023 16:42:48 +0100 Subject: [PATCH] Deprecate the klog flags deprecated in Kubernetes 1.23 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In order to display deprecation warnings, I swapped "flag" with "pflag". We already import pflag, so I thought it would not be an issue. Signed-off-by: Maƫl Valais --- cmd/cainjector/main.go | 3 ++- cmd/controller/main.go | 9 ++++----- cmd/webhook/app/options/globalflags.go | 5 ++--- cmd/webhook/main.go | 3 ++- pkg/controller/test/context_builder.go | 6 +++--- pkg/logs/logs.go | 27 +++++++++++++++++++++----- test/acme/dns/fixture.go | 6 +++--- test/e2e/e2e_test.go | 3 ++- 8 files changed, 40 insertions(+), 22 deletions(-) diff --git a/cmd/cainjector/main.go b/cmd/cainjector/main.go index 2544daedbef..e97f64b0d55 100644 --- a/cmd/cainjector/main.go +++ b/cmd/cainjector/main.go @@ -27,6 +27,7 @@ import ( "github.com/cert-manager/cert-manager/cmd/cainjector/app" "github.com/cert-manager/cert-manager/internal/cmd/util" logf "github.com/cert-manager/cert-manager/pkg/logs" + "github.com/spf13/pflag" ) func main() { @@ -35,7 +36,7 @@ func main() { stopCh, exit := util.SetupExitHandler(util.GracefulShutdown) defer exit() // This function might call os.Exit, so defer last - logf.InitLogs(flag.CommandLine) + logf.InitLogs(pflag.CommandLine) defer logf.FlushLogs() ctrl.SetLogger(logf.Log) diff --git a/cmd/controller/main.go b/cmd/controller/main.go index 6f80cdf429d..f03c4e60bdd 100644 --- a/cmd/controller/main.go +++ b/cmd/controller/main.go @@ -17,24 +17,23 @@ limitations under the License. package main import ( - "flag" - "github.com/cert-manager/cert-manager/cmd/controller/app" "github.com/cert-manager/cert-manager/internal/cmd/util" logf "github.com/cert-manager/cert-manager/pkg/logs" + "github.com/spf13/pflag" ) func main() { stopCh, exit := util.SetupExitHandler(util.GracefulShutdown) defer exit() // This function might call os.Exit, so defer last - logf.InitLogs(flag.CommandLine) + logf.InitLogs(pflag.CommandLine) defer logf.FlushLogs() cmd := app.NewCommandStartCertManagerController(stopCh) - cmd.Flags().AddGoFlagSet(flag.CommandLine) + cmd.Flags().AddFlagSet(pflag.CommandLine) - flag.CommandLine.Parse([]string{}) + pflag.CommandLine.Parse([]string{}) if err := cmd.Execute(); err != nil { logf.Log.Error(err, "error while executing") util.SetExitCode(err) diff --git a/cmd/webhook/app/options/globalflags.go b/cmd/webhook/app/options/globalflags.go index 5498e3b01aa..2ead7cf8dc2 100644 --- a/cmd/webhook/app/options/globalflags.go +++ b/cmd/webhook/app/options/globalflags.go @@ -17,7 +17,6 @@ limitations under the License. package options import ( - "flag" "os" "github.com/spf13/pflag" @@ -30,7 +29,7 @@ func AddGlobalFlags(fs *pflag.FlagSet) { } func addKlogFlags(fs *pflag.FlagSet) { - local := flag.NewFlagSet(os.Args[0], flag.ExitOnError) + local := pflag.NewFlagSet(os.Args[0], pflag.ExitOnError) logs.InitLogs(local) - fs.AddGoFlagSet(local) + fs.AddFlagSet(local) } diff --git a/cmd/webhook/main.go b/cmd/webhook/main.go index 5438fb6f33a..9778ea4da58 100644 --- a/cmd/webhook/main.go +++ b/cmd/webhook/main.go @@ -22,13 +22,14 @@ import ( "github.com/cert-manager/cert-manager/cmd/webhook/app" "github.com/cert-manager/cert-manager/internal/cmd/util" logf "github.com/cert-manager/cert-manager/pkg/logs" + "github.com/spf13/pflag" ) func main() { stopCh, exit := util.SetupExitHandler(util.GracefulShutdown) defer exit() // This function might call os.Exit, so defer last - logf.InitLogs(flag.CommandLine) + logf.InitLogs(pflag.CommandLine) defer logf.FlushLogs() cmd := app.NewServerCommand(stopCh) diff --git a/pkg/controller/test/context_builder.go b/pkg/controller/test/context_builder.go index 2ae2e7d09e7..c1b6237bb3b 100644 --- a/pkg/controller/test/context_builder.go +++ b/pkg/controller/test/context_builder.go @@ -18,7 +18,6 @@ package test import ( "context" - "flag" "fmt" "reflect" "testing" @@ -46,12 +45,13 @@ import ( "github.com/cert-manager/cert-manager/pkg/metrics" "github.com/cert-manager/cert-manager/pkg/util" discoveryfake "github.com/cert-manager/cert-manager/test/unit/discovery" + "github.com/spf13/pflag" ) func init() { logs.InitLogs(nil) - _ = flag.Set("alsologtostderr", fmt.Sprintf("%t", true)) - _ = flag.Lookup("v").Value.Set("4") + _ = pflag.Set("alsologtostderr", fmt.Sprintf("%t", true)) + _ = pflag.Lookup("v").Value.Set("4") } // Builder is a structure used to construct new Contexts for use during tests. diff --git a/pkg/logs/logs.go b/pkg/logs/logs.go index 4aeb09d22a1..ca3ec241d9a 100644 --- a/pkg/logs/logs.go +++ b/pkg/logs/logs.go @@ -24,6 +24,7 @@ import ( "time" "github.com/go-logr/logr" + "github.com/spf13/pflag" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -49,7 +50,7 @@ const ( TraceLevel = 5 ) -var logFlushFreq = flag.Duration("log-flush-frequency", 5*time.Second, "Maximum number of seconds between log flushes") +var logFlushFreq = pflag.Duration("log-flush-frequency", 5*time.Second, "Maximum number of seconds between log flushes") // GlogWriter serves as a bridge between the standard log package and the glog package. type GlogWriter struct{} @@ -61,16 +62,32 @@ func (writer GlogWriter) Write(data []byte) (n int, err error) { } // InitLogs initializes logs the way we want for kubernetes. -func InitLogs(fs *flag.FlagSet) { +func InitLogs(fs *pflag.FlagSet) { if fs == nil { - fs = flag.CommandLine + fs = pflag.CommandLine } - klog.InitFlags(fs) - _ = fs.Set("logtostderr", "true") log.SetOutput(GlogWriter{}) log.SetFlags(0) + _ = fs.Set("logtostderr", "true") + + // Add the klog flags by converting them to pflags, and mark deprecated + // flags. + klogflags := flag.NewFlagSet("", flag.ContinueOnError) + klog.InitFlags(klogflags) + klogflags.VisitAll(func(f *flag.Flag) { + pf := pflag.PFlagFromGoFlag(f) + switch f.Name { + case "v", "vmodule": + // Unchanged. + default: + // Deprecated. + pf.Deprecated = fmt.Sprintf("this flag will be removed in cert-manager 1.15") + } + fs.AddFlag(pf) + }) + // The default glog flush interval is 30 seconds, which is frighteningly long. go wait.Until(klog.Flush, *logFlushFreq, wait.NeverStop) } diff --git a/test/acme/dns/fixture.go b/test/acme/dns/fixture.go index 8e2a7b30cd4..94b80102034 100644 --- a/test/acme/dns/fixture.go +++ b/test/acme/dns/fixture.go @@ -17,7 +17,6 @@ limitations under the License. package dns import ( - "flag" "fmt" "sync" "testing" @@ -29,12 +28,13 @@ import ( "github.com/cert-manager/cert-manager/pkg/acme/webhook" "github.com/cert-manager/cert-manager/test/internal/apiserver" + "github.com/spf13/pflag" ) func init() { - vFlag := flag.Lookup("v") + vFlag := pflag.Lookup("v") if vFlag != nil { - flag.Set("alsologtostderr", fmt.Sprintf("%t", true)) + pflag.Set("alsologtostderr", fmt.Sprintf("%t", true)) vFlag.Value.Set("12") } } diff --git a/test/e2e/e2e_test.go b/test/e2e/e2e_test.go index 438d2f1f88f..f540f9a3ea2 100644 --- a/test/e2e/e2e_test.go +++ b/test/e2e/e2e_test.go @@ -25,6 +25,7 @@ import ( "github.com/onsi/ginkgo/v2" "github.com/onsi/gomega" + "github.com/spf13/pflag" "k8s.io/apimachinery/pkg/util/wait" "github.com/cert-manager/cert-manager/pkg/logs" @@ -32,7 +33,7 @@ import ( ) func init() { - logs.InitLogs(flag.CommandLine) + logs.InitLogs(pflag.CommandLine) cfg.AddFlags(flag.CommandLine) wait.ForeverTestTimeout = time.Second * 60