@@ -49,12 +49,41 @@ func need[V any](v V, err error) V {
4949 return v
5050}
5151
52+ func initClient () (* rest.Config , error ) {
53+ config , err := runtime .GetConfig ()
54+
55+ if err == nil && userAgent == "" {
56+ err = errors .New ("call initVersion first" )
57+ }
58+ if err == nil {
59+ config .UserAgent = userAgent
60+ config .Wrap (otelTransportWrapper ())
61+
62+ // Log Kubernetes API warnings encountered by client-go at a high verbosity.
63+ // See [rest.WarningLogger].
64+ handler := runtime .WarningHandler (func (ctx context.Context , code int , _ string , message string ) {
65+ if code == 299 && len (message ) != 0 {
66+ logging .FromContext (ctx ).V (2 ).WithName ("client-go" ).Info (message )
67+ }
68+ })
69+ config .WarningHandler = handler
70+ config .WarningHandlerWithContext = handler
71+ }
72+
73+ return config , err
74+ }
75+
5276func initLogging () {
53- // Configure a singleton that treats logging.Logger.V(1) as logrus.DebugLevel.
77+ debug := strings .TrimSpace (os .Getenv ("CRUNCHY_DEBUG" ))
78+
5479 var verbosity int
55- if strings .EqualFold (os . Getenv ( "CRUNCHY_DEBUG" ) , "true" ) {
80+ if strings .EqualFold (debug , "true" ) {
5681 verbosity = 1
82+ } else if i , err := strconv .Atoi (debug ); err == nil && i > 0 {
83+ verbosity = i
5784 }
85+
86+ // Configure a singleton that treats logging.Logger.V(1) as logrus.DebugLevel.
5887 logging .SetLogSink (logging .Logrus (os .Stdout , versionString , 1 , verbosity ))
5988
6089 global := logging .FromContext (context .Background ())
@@ -190,19 +219,10 @@ func main() {
190219
191220 tracing .SetDefaultTracer (tracing .New ("github.com/CrunchyData/postgres-operator" ))
192221
193- cfg := need (runtime .GetConfig ())
194- cfg .UserAgent = userAgent
195- cfg .Wrap (otelTransportWrapper ())
196-
197- // TODO(controller-runtime): Set config.WarningHandler instead after v0.19.0.
198- // Configure client-go to suppress warnings when warning headers are encountered. This prevents
199- // warnings from being logged over and over again during reconciliation (e.g. this will suppress
200- // deprecation warnings when using an older version of a resource for backwards compatibility).
201- rest .SetDefaultWarningHandler (rest.NoWarnings {})
202-
203- k8s := need (kubernetes .NewDiscoveryRunner (cfg ))
222+ // Load Kubernetes client configuration and ensure it works.
223+ config := need (initClient ())
224+ k8s := need (kubernetes .NewDiscoveryRunner (config ))
204225 must (k8s .Read (running ))
205-
206226 log .Info ("connected to Kubernetes" , "api" , k8s .Version ().String (), "openshift" , k8s .IsOpenShift ())
207227
208228 options := need (initManager (running ))
@@ -216,7 +236,7 @@ func main() {
216236 return ctx
217237 }
218238
219- manager := need (runtime .NewManager (cfg , options ))
239+ manager := need (runtime .NewManager (config , options ))
220240 must (manager .Add (k8s ))
221241
222242 registrar := need (registration .NewRunner (os .Getenv ("RSA_KEY" ), os .Getenv ("TOKEN_PATH" ), stopRunning ))
0 commit comments