Skip to content

Commit

Permalink
Deprecate the klog flags deprecated in Kubernetes 1.23
Browse files Browse the repository at this point in the history
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 <mael@vls.dev>
  • Loading branch information
maelvls committed Mar 23, 2023
1 parent 0c071f8 commit 5d89716
Show file tree
Hide file tree
Showing 8 changed files with 40 additions and 22 deletions.
3 changes: 2 additions & 1 deletion cmd/cainjector/main.go
Expand Up @@ -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() {
Expand All @@ -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)

Expand Down
9 changes: 4 additions & 5 deletions cmd/controller/main.go
Expand Up @@ -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)
Expand Down
5 changes: 2 additions & 3 deletions cmd/webhook/app/options/globalflags.go
Expand Up @@ -17,7 +17,6 @@ limitations under the License.
package options

import (
"flag"
"os"

"github.com/spf13/pflag"
Expand All @@ -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)
}
3 changes: 2 additions & 1 deletion cmd/webhook/main.go
Expand Up @@ -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)
Expand Down
6 changes: 3 additions & 3 deletions pkg/controller/test/context_builder.go
Expand Up @@ -18,7 +18,6 @@ package test

import (
"context"
"flag"
"fmt"
"reflect"
"testing"
Expand Down Expand Up @@ -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.
Expand Down
27 changes: 22 additions & 5 deletions pkg/logs/logs.go
Expand Up @@ -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"
Expand All @@ -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{}
Expand All @@ -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)
}
Expand Down
6 changes: 3 additions & 3 deletions test/acme/dns/fixture.go
Expand Up @@ -17,7 +17,6 @@ limitations under the License.
package dns

import (
"flag"
"fmt"
"sync"
"testing"
Expand All @@ -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")
}
}
Expand Down
3 changes: 2 additions & 1 deletion test/e2e/e2e_test.go
Expand Up @@ -25,14 +25,15 @@ 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"
_ "github.com/cert-manager/cert-manager/test/e2e/suite"
)

func init() {
logs.InitLogs(flag.CommandLine)
logs.InitLogs(pflag.CommandLine)
cfg.AddFlags(flag.CommandLine)

wait.ForeverTestTimeout = time.Second * 60
Expand Down

0 comments on commit 5d89716

Please sign in to comment.