From 0f385fda4dc3e6228e45f18f48d3a7496fb4ca50 Mon Sep 17 00:00:00 2001 From: Pavel Okhlopkov <36456348+ldmonster@users.noreply.github.com> Date: Thu, 7 Nov 2024 11:35:23 +0300 Subject: [PATCH] [kube-client] replace info with debug (#19) Signed-off-by: Pavel Okhlopkov Co-authored-by: Pavel Okhlopkov --- .golangci.yaml | 28 ++++++++++++++++++++++++++++ client/client.go | 41 ++++++++++++++++++++++++++++++++--------- go.mod | 2 +- go.sum | 4 ++-- 4 files changed, 63 insertions(+), 12 deletions(-) diff --git a/.golangci.yaml b/.golangci.yaml index 4fd7a1a..687deb3 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -23,6 +23,7 @@ linters: - nolintlint - prealloc - revive + - sloglint - staticcheck - stylecheck - unconvert @@ -44,6 +45,33 @@ linters-settings: deny: - pkg: github.com/evanphx/json-patch desc: "The 'github.com/evanphx/json-patch' package is superseded. Use pkg/utils/jsonpatch.go instead." + sloglint: + # Enforce not mixing key-value pairs and attributes. + no-mixed-args: true + # Enforce using key-value pairs only (overrides no-mixed-args, incompatible with attr-only). + kv-only: false + # Enforce using attributes only (overrides no-mixed-args, incompatible with kv-only). + attr-only: false + # Enforce not using global loggers. + no-global: "" + # Enforce using methods that accept a context. + context: "" + # Enforce using static values for log messages. + static-msg: false + # Enforce using constants instead of raw keys. + no-raw-keys: false + # Enforce a single key naming convention. + key-naming-case: "" + # Enforce not using specific keys. + forbidden-keys: + - level + - msg + - logger + - source + - stacktrace + - time + # Enforce putting arguments on separate lines. + args-on-sep-lines: false issues: exclude: # Using underscores is a common practice, refactor in the future diff --git a/client/client.go b/client/client.go index cffa57e..7b77637 100644 --- a/client/client.go +++ b/client/client.go @@ -2,6 +2,7 @@ package client import ( "fmt" + "log/slog" "os" "strings" "time" @@ -35,8 +36,27 @@ const ( kubeNamespaceFilePath = "/var/run/secrets/kubernetes.io/serviceaccount/namespace" ) -func New() *Client { - return &Client{} +type Option func(client *Client) + +func WithLogger(logger *log.Logger) Option { + return func(client *Client) { + client.logger = logger.With("operator.component", "KubernetesAPIClient") + } +} + +// TODO: refactor all "with" methods +func New(opts ...Option) *Client { + c := &Client{} + + for _, fn := range opts { + fn(c) + } + + if c.logger == nil { + c.logger = log.NewLogger(log.Options{}).Named("kubernetes-api-client").With("operator.component", "KubernetesAPIClient") + } + + return c } func NewFake(gvr map[schema.GroupVersionResource]string) *Client { @@ -47,6 +67,7 @@ func NewFake(gvr map[schema.GroupVersionResource]string) *Client { dynamicClient: fakedynamic.NewSimpleDynamicClientWithCustomListKinds(sc, gvr), metadataClient: fakemetadata.NewSimpleMetadataClient(sc), schema: sc, + logger: log.NewNop(), } } @@ -67,6 +88,7 @@ type Client struct { metricLabels map[string]string schema *runtime.Scheme restConfig *rest.Config + logger *log.Logger } // ReloadDynamic creates new dynamic client with the new set of CRDs. @@ -125,8 +147,9 @@ func (c *Client) RestConfig() *rest.Config { } func (c *Client) Init() error { - logger := log.NewLogger(log.Options{}) - logger = logger.With("operator.component", "KubernetesAPIClient") + if c.logger == nil { + c.logger = log.NewLogger(log.Options{}).Named("kubernetes-api-client").With("operator.component", "KubernetesAPIClient") + } var err error var config *rest.Config @@ -146,18 +169,18 @@ func (c *Client) Init() error { if c.configPath != "" || c.contextName != "" { if outOfClusterErr != nil { err = fmt.Errorf("out-of-cluster config error: %v, in-cluster config error: %v", outOfClusterErr, err) - logger.Errorf("configuration problems: %s", err) + c.logger.Error("configuration problems", slog.String("error", err.Error())) return err } return fmt.Errorf("in-cluster config is not found") } - logger.Errorf("in-cluster problem: %s", err) + c.logger.Error("in-cluster problem", slog.String("error", err.Error())) return err } } else { // if not in cluster return outOfCluster error if outOfClusterErr != nil { - logger.Errorf("out-of-cluster problem: %s", outOfClusterErr) + c.logger.Error("out-of-cluster problem", slog.String("error", outOfClusterErr.Error())) return outOfClusterErr } return fmt.Errorf("no kubernetes client config found") @@ -183,7 +206,7 @@ func (c *Client) Init() error { c.Interface, err = kubernetes.NewForConfig(config) if err != nil { - logger.Errorf("configuration problem: %s", err) + c.logger.Error("configuration problem", slog.String("error", err.Error())) return err } @@ -227,7 +250,7 @@ func (c *Client) Init() error { } c.restConfig = config - logger.Infof("Kubernetes client is configured successfully with '%s' config", configType) + c.logger.Debug("Kubernetes client is configured successfully with config", slog.String("config", configType)) return nil } diff --git a/go.mod b/go.mod index a2b69bd..2f897da 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.22.8 toolchain go1.23.1 require ( - github.com/deckhouse/deckhouse/pkg/log v0.0.0-20241102110904-83c5e473e0ca + github.com/deckhouse/deckhouse/pkg/log v0.0.0-20241106140903-258b93b3334e github.com/onsi/gomega v1.29.0 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.16.0 diff --git a/go.sum b/go.sum index e345bd6..7c583a2 100644 --- a/go.sum +++ b/go.sum @@ -8,8 +8,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/deckhouse/deckhouse/pkg/log v0.0.0-20241102110904-83c5e473e0ca h1:qbVHWHa4sDRW55Xbui4vpL1XgJbrrdVr6iQARARiFWQ= -github.com/deckhouse/deckhouse/pkg/log v0.0.0-20241102110904-83c5e473e0ca/go.mod h1:Mk5HRzkc5pIcDIZ2JJ6DPuuqnwhXVkb3you8M8Mg+4w= +github.com/deckhouse/deckhouse/pkg/log v0.0.0-20241106140903-258b93b3334e h1:QUQy+5Bv7/UzhfrytiG3c5gfLGhPppepVbRpbMisVIw= +github.com/deckhouse/deckhouse/pkg/log v0.0.0-20241106140903-258b93b3334e/go.mod h1:Mk5HRzkc5pIcDIZ2JJ6DPuuqnwhXVkb3you8M8Mg+4w= github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84=