1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-04-08 18:15:48 +00:00

refactor: config package logger (#3683)

Signed-off-by: Charles-Edouard Brétéché <charled.breteche@gmail.com>
This commit is contained in:
Charles-Edouard Brétéché 2022-04-26 21:55:24 +02:00 committed by GitHub
parent d5f6167e56
commit c97af0094f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 26 additions and 40 deletions

View file

@ -69,7 +69,7 @@ func main() {
// os signal handler
stopCh := signal.SetupSignalHandler()
// create client config
clientConfig, err := config.CreateClientConfig(kubeconfig, clientRateLimitQPS, clientRateLimitBurst, log.Log)
clientConfig, err := config.CreateClientConfig(kubeconfig, clientRateLimitQPS, clientRateLimitBurst)
if err != nil {
setupLog.Error(err, "Failed to build kubeconfig")
os.Exit(1)

View file

@ -105,7 +105,7 @@ func main() {
version.PrintVersionInfo(log.Log)
cleanUp := make(chan struct{})
stopCh := signal.SetupSignalHandler()
clientConfig, err := config.CreateClientConfig(kubeconfig, clientRateLimitQPS, clientRateLimitBurst, log.Log)
clientConfig, err := config.CreateClientConfig(kubeconfig, clientRateLimitQPS, clientRateLimitBurst)
if err != nil {
setupLog.Error(err, "Failed to build kubeconfig")
os.Exit(1)
@ -251,13 +251,9 @@ func main() {
excludeUsername,
prgen.ReconcileCh,
webhookCfg.UpdateWebhookChan,
log.Log.WithName("ConfigData"),
)
metricsConfigData, err := config.NewMetricsConfigData(
kubeClient,
log.Log.WithName("MetricsConfigData"),
)
metricsConfigData, err := config.NewMetricsConfigData(kubeClient)
if err != nil {
setupLog.Error(err, "failed to fetch metrics config")
os.Exit(1)

View file

@ -4,7 +4,6 @@ import (
"fmt"
"math"
"github.com/go-logr/logr"
osutils "github.com/kyverno/kyverno/pkg/utils/os"
rest "k8s.io/client-go/rest"
clientcmd "k8s.io/client-go/tools/clientcmd"
@ -97,10 +96,8 @@ var (
)
//CreateClientConfig creates client config and applies rate limit QPS and burst
func CreateClientConfig(kubeconfig string, qps float64, burst int, log logr.Logger) (*rest.Config, error) {
logger := log.WithName("CreateClientConfig")
clientConfig, err := createClientConfig(kubeconfig, logger)
func CreateClientConfig(kubeconfig string, qps float64, burst int) (*rest.Config, error) {
clientConfig, err := createClientConfig(kubeconfig)
if err != nil {
return nil, err
}
@ -115,11 +112,11 @@ func CreateClientConfig(kubeconfig string, qps float64, burst int, log logr.Logg
}
// createClientConfig creates client config
func createClientConfig(kubeconfig string, log logr.Logger) (*rest.Config, error) {
func createClientConfig(kubeconfig string) (*rest.Config, error) {
if kubeconfig == "" {
log.Info("Using in-cluster configuration")
logger.Info("Using in-cluster configuration")
return rest.InClusterConfig()
}
log.V(4).Info("Using specified kubeconfig", "kubeconfig", kubeconfig)
logger.V(4).Info("Using specified kubeconfig", "kubeconfig", kubeconfig)
return clientcmd.BuildConfigFromFlags("", kubeconfig)
}

View file

@ -5,7 +5,6 @@ import (
"os"
"testing"
"github.com/go-logr/logr"
"gotest.tools/assert"
"k8s.io/apimachinery/pkg/runtime"
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
@ -17,7 +16,7 @@ import (
func Test_CreateClientConfig_WithKubeConfig(t *testing.T) {
cf := createMinimalKubeconfig(t)
defer os.Remove(cf)
_, err := config.CreateClientConfig(cf, 0, 0, logr.Discard())
_, err := config.CreateClientConfig(cf, 0, 0)
assert.NilError(t, err)
}
@ -29,7 +28,7 @@ func Test_CreateClientConfig_SetBurstQPS(t *testing.T) {
cf := createMinimalKubeconfig(t)
defer os.Remove(cf)
c, err := config.CreateClientConfig(cf, qps, burst, logr.Discard())
c, err := config.CreateClientConfig(cf, qps, burst)
assert.NilError(t, err)
assert.Equal(t, float32(qps), c.QPS)
assert.Equal(t, burst, c.Burst)
@ -40,7 +39,7 @@ func Test_CreateClientConfig_LimitQPStoFloat32(t *testing.T) {
cf := createMinimalKubeconfig(t)
defer os.Remove(cf)
_, err := config.CreateClientConfig(cf, qps, 0, logr.Discard())
_, err := config.CreateClientConfig(cf, qps, 0)
assert.ErrorContains(t, err, "QPS")
}

View file

@ -9,7 +9,6 @@ import (
"strings"
"sync"
"github.com/go-logr/logr"
wildcard "github.com/kyverno/go-wildcard"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@ -43,7 +42,6 @@ type ConfigData struct {
cmSycned cache.InformerSynced
reconcilePolicyReport chan<- bool
updateWebhookConfigurations chan<- bool
log logr.Logger
}
// ToFilter checks if the given resource is set to be filtered in the configuration
@ -130,10 +128,10 @@ type Interface interface {
}
// NewConfigData ...
func NewConfigData(rclient kubernetes.Interface, cmInformer informers.ConfigMapInformer, filterK8sResources, excludeGroupRole, excludeUsername string, reconcilePolicyReport, updateWebhookConfigurations chan<- bool, log logr.Logger) *ConfigData {
func NewConfigData(rclient kubernetes.Interface, cmInformer informers.ConfigMapInformer, filterK8sResources, excludeGroupRole, excludeUsername string, reconcilePolicyReport, updateWebhookConfigurations chan<- bool) *ConfigData {
// environment var is read at start only
if cmNameEnv == "" {
log.Info("ConfigMap name not defined in env:INIT_CONFIG: loading no default configuration")
logger.Info("ConfigMap name not defined in env:INIT_CONFIG: loading no default configuration")
}
cd := ConfigData{
@ -142,25 +140,24 @@ func NewConfigData(rclient kubernetes.Interface, cmInformer informers.ConfigMapI
cmSycned: cmInformer.Informer().HasSynced,
reconcilePolicyReport: reconcilePolicyReport,
updateWebhookConfigurations: updateWebhookConfigurations,
log: log,
}
cd.restrictDevelopmentUsername = []string{"minikube-user", "kubernetes-admin"}
if filterK8sResources != "" {
cd.log.Info("init configuration from commandline arguments for filterK8sResources")
logger.Info("init configuration from commandline arguments for filterK8sResources")
cd.initFilters(filterK8sResources)
}
if excludeGroupRole != "" {
cd.log.Info("init configuration from commandline arguments for excludeGroupRole")
logger.Info("init configuration from commandline arguments for excludeGroupRole")
cd.initRbac("excludeRoles", excludeGroupRole)
} else {
cd.initRbac("excludeRoles", "")
}
if excludeUsername != "" {
cd.log.Info("init configuration from commandline arguments for excludeUsername")
logger.Info("init configuration from commandline arguments for excludeUsername")
cd.initRbac("excludeUsername", excludeUsername)
}
@ -175,7 +172,6 @@ func NewConfigData(rclient kubernetes.Interface, cmInformer informers.ConfigMapI
// Run checks syncing
func (cd *ConfigData) Run(stopCh <-chan struct{}) {
logger := cd.log
// wait for cache to populate first time
if !cache.WaitForCacheSync(stopCh, cd.cmSycned) {
logger.Info("configuration: failed to sync informer cache")
@ -199,18 +195,17 @@ func (cd *ConfigData) updateCM(old, cur interface{}) {
reconcilePolicyReport, updateWebhook := cd.load(*cm)
if reconcilePolicyReport {
cd.log.Info("resource filters changed, sending reconcile signal to the policy controller")
logger.Info("resource filters changed, sending reconcile signal to the policy controller")
cd.reconcilePolicyReport <- true
}
if updateWebhook {
cd.log.Info("webhook configurations changed, updating webhook configurations")
logger.Info("webhook configurations changed, updating webhook configurations")
cd.updateWebhookConfigurations <- true
}
}
func (cd *ConfigData) deleteCM(obj interface{}) {
logger := cd.log
cm, ok := obj.(*v1.ConfigMap)
if !ok {
tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
@ -233,7 +228,7 @@ func (cd *ConfigData) deleteCM(obj interface{}) {
}
func (cd *ConfigData) load(cm v1.ConfigMap) (reconcilePolicyReport, updateWebhook bool) {
logger := cd.log.WithValues("name", cm.Name, "namespace", cm.Namespace)
logger := logger.WithValues("name", cm.Name, "namespace", cm.Namespace)
if cm.Data == nil {
logger.V(4).Info("configuration: No data defined in ConfigMap")
return
@ -328,7 +323,6 @@ func (cd *ConfigData) load(cm v1.ConfigMap) (reconcilePolicyReport, updateWebhoo
}
func (cd *ConfigData) initFilters(filters string) {
logger := cd.log
// parse and load the configuration
cd.mux.Lock()
defer cd.mux.Unlock()
@ -340,7 +334,6 @@ func (cd *ConfigData) initFilters(filters string) {
}
func (cd *ConfigData) initRbac(action, exclude string) {
logger := cd.log
// parse and load the configuration
cd.mux.Lock()
defer cd.mux.Unlock()
@ -357,7 +350,6 @@ func (cd *ConfigData) initRbac(action, exclude string) {
}
func (cd *ConfigData) unload(cm v1.ConfigMap) {
logger := cd.log
logger.Info("ConfigMap deleted, removing configuration filters", "name", cm.Name, "namespace", cm.Namespace)
cd.mux.Lock()
defer cd.mux.Unlock()

5
pkg/config/log.go Normal file
View file

@ -0,0 +1,5 @@
package config
import "sigs.k8s.io/controller-runtime/pkg/log"
var logger = log.Log.WithName("config")

View file

@ -7,7 +7,6 @@ import (
"os"
"time"
"github.com/go-logr/logr"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
)
@ -21,7 +20,6 @@ type MetricsConfigData struct {
client kubernetes.Interface
cmName string
metricsConfig MetricsConfig
log logr.Logger
}
// MetricsConfig stores the config for metrics
@ -56,13 +54,12 @@ func (mcd *MetricsConfigData) GetMetricsConfigMapName() string {
}
// NewMetricsConfigData ...
func NewMetricsConfigData(rclient kubernetes.Interface, log logr.Logger) (*MetricsConfigData, error) {
func NewMetricsConfigData(rclient kubernetes.Interface) (*MetricsConfigData, error) {
cmName := os.Getenv(metricsConfigEnvVar)
mcd := MetricsConfigData{
client: rclient,
cmName: cmName,
log: log,
metricsConfig: MetricsConfig{
metricsRefreshInterval: 0,
namespaces: namespacesConfig{
@ -93,7 +90,7 @@ func NewMetricsConfigData(rclient kubernetes.Interface, log logr.Logger) (*Metri
}
}
} else {
log.Info("ConfigMap name not defined in env:METRICS_CONFIG: loading no default configuration")
logger.Info("ConfigMap name not defined in env:METRICS_CONFIG: loading no default configuration")
}
return &mcd, nil