mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-05 15:37:19 +00:00
Remove resourceCache from engine (#3013)
* update log messages Signed-off-by: ShutingZhao <shuting@nirmata.com> * remove resourceCache from the background controller when: - register resource scope - list resources per namespace Signed-off-by: ShutingZhao <shuting@nirmata.com> * - use client call for configmap lookup; - remove resourceCache from policy controller, webhook server and generate controller Signed-off-by: ShutingZhao <shuting@nirmata.com>
This commit is contained in:
parent
8ea7a62cad
commit
b6447e0649
17 changed files with 32 additions and 127 deletions
|
@ -312,7 +312,6 @@ func main() {
|
||||||
prgen,
|
prgen,
|
||||||
kubeInformer.Core().V1().Namespaces(),
|
kubeInformer.Core().V1().Namespaces(),
|
||||||
log.Log.WithName("PolicyController"),
|
log.Log.WithName("PolicyController"),
|
||||||
rCache,
|
|
||||||
policyControllerResyncPeriod,
|
policyControllerResyncPeriod,
|
||||||
promConfig,
|
promConfig,
|
||||||
)
|
)
|
||||||
|
@ -337,7 +336,6 @@ func main() {
|
||||||
kubedynamicInformer,
|
kubedynamicInformer,
|
||||||
log.Log.WithName("GenerateController"),
|
log.Log.WithName("GenerateController"),
|
||||||
configData,
|
configData,
|
||||||
rCache,
|
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
setupLog.Error(err, "Failed to create generate controller")
|
setupLog.Error(err, "Failed to create generate controller")
|
||||||
|
@ -375,7 +373,6 @@ func main() {
|
||||||
kubeInformer.Core().V1().Namespaces(),
|
kubeInformer.Core().V1().Namespaces(),
|
||||||
log.Log.WithName("ValidateAuditHandler"),
|
log.Log.WithName("ValidateAuditHandler"),
|
||||||
configData,
|
configData,
|
||||||
rCache,
|
|
||||||
client,
|
client,
|
||||||
promConfig,
|
promConfig,
|
||||||
)
|
)
|
||||||
|
@ -471,7 +468,6 @@ func main() {
|
||||||
cleanUp,
|
cleanUp,
|
||||||
log.Log.WithName("WebhookServer"),
|
log.Log.WithName("WebhookServer"),
|
||||||
openAPIController,
|
openAPIController,
|
||||||
rCache,
|
|
||||||
grc,
|
grc,
|
||||||
promConfig,
|
promConfig,
|
||||||
)
|
)
|
||||||
|
|
|
@ -70,7 +70,6 @@ func filterRule(rule kyverno.Rule, policyContext *PolicyContext) *response.RuleR
|
||||||
oldResource := policyContext.OldResource
|
oldResource := policyContext.OldResource
|
||||||
admissionInfo := policyContext.AdmissionInfo
|
admissionInfo := policyContext.AdmissionInfo
|
||||||
ctx := policyContext.JSONContext
|
ctx := policyContext.JSONContext
|
||||||
resCache := policyContext.ResourceCache
|
|
||||||
excludeGroupRole := policyContext.ExcludeGroupRole
|
excludeGroupRole := policyContext.ExcludeGroupRole
|
||||||
namespaceLabels := policyContext.NamespaceLabels
|
namespaceLabels := policyContext.NamespaceLabels
|
||||||
|
|
||||||
|
@ -98,7 +97,7 @@ func filterRule(rule kyverno.Rule, policyContext *PolicyContext) *response.RuleR
|
||||||
policyContext.JSONContext.Checkpoint()
|
policyContext.JSONContext.Checkpoint()
|
||||||
defer policyContext.JSONContext.Restore()
|
defer policyContext.JSONContext.Restore()
|
||||||
|
|
||||||
if err = LoadContext(logger, rule.Context, resCache, policyContext, rule.Name); err != nil {
|
if err = LoadContext(logger, rule.Context, policyContext, rule.Name); err != nil {
|
||||||
logger.V(4).Info("cannot add external data to the context", "reason", err.Error())
|
logger.V(4).Info("cannot add external data to the context", "reason", err.Error())
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,7 @@ func VerifyAndPatchImages(policyContext *PolicyContext) (resp *response.EngineRe
|
||||||
|
|
||||||
policyContext.JSONContext.Restore()
|
policyContext.JSONContext.Restore()
|
||||||
|
|
||||||
if err := LoadContext(logger, rule.Context, policyContext.ResourceCache, policyContext, rule.Name); err != nil {
|
if err := LoadContext(logger, rule.Context, policyContext, rule.Name); err != nil {
|
||||||
appendError(resp, rule, fmt.Sprintf("failed to load context: %s", err.Error()), response.RuleStatusError)
|
appendError(resp, rule, fmt.Sprintf("failed to load context: %s", err.Error()), response.RuleStatusError)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,6 @@ package engine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
@ -11,17 +10,14 @@ import (
|
||||||
"github.com/google/go-containerregistry/pkg/v1/remote"
|
"github.com/google/go-containerregistry/pkg/v1/remote"
|
||||||
kyverno "github.com/kyverno/kyverno/api/kyverno/v1"
|
kyverno "github.com/kyverno/kyverno/api/kyverno/v1"
|
||||||
pkgcommon "github.com/kyverno/kyverno/pkg/common"
|
pkgcommon "github.com/kyverno/kyverno/pkg/common"
|
||||||
"github.com/kyverno/kyverno/pkg/engine/context"
|
|
||||||
jmespath "github.com/kyverno/kyverno/pkg/engine/jmespath"
|
jmespath "github.com/kyverno/kyverno/pkg/engine/jmespath"
|
||||||
"github.com/kyverno/kyverno/pkg/engine/variables"
|
"github.com/kyverno/kyverno/pkg/engine/variables"
|
||||||
"github.com/kyverno/kyverno/pkg/kyverno/store"
|
"github.com/kyverno/kyverno/pkg/kyverno/store"
|
||||||
"github.com/kyverno/kyverno/pkg/registryclient"
|
"github.com/kyverno/kyverno/pkg/registryclient"
|
||||||
"github.com/kyverno/kyverno/pkg/resourcecache"
|
|
||||||
"k8s.io/client-go/dynamic/dynamiclister"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// LoadContext - Fetches and adds external data to the Context.
|
// LoadContext - Fetches and adds external data to the Context.
|
||||||
func LoadContext(logger logr.Logger, contextEntries []kyverno.ContextEntry, resCache resourcecache.ResourceCache, ctx *PolicyContext, ruleName string) error {
|
func LoadContext(logger logr.Logger, contextEntries []kyverno.ContextEntry, ctx *PolicyContext, ruleName string) error {
|
||||||
if len(contextEntries) == 0 {
|
if len(contextEntries) == 0 {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -49,18 +45,9 @@ func LoadContext(logger logr.Logger, contextEntries []kyverno.ContextEntry, resC
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// get GVR Cache for "configmaps"
|
|
||||||
// can get cache for other resources if the informers are enabled in resource cache
|
|
||||||
gvrC, ok := resCache.GetGVRCache("ConfigMap")
|
|
||||||
if !ok {
|
|
||||||
return errors.New("configmaps GVR Cache not found")
|
|
||||||
}
|
|
||||||
|
|
||||||
lister := gvrC.Lister()
|
|
||||||
|
|
||||||
for _, entry := range contextEntries {
|
for _, entry := range contextEntries {
|
||||||
if entry.ConfigMap != nil {
|
if entry.ConfigMap != nil {
|
||||||
if err := loadConfigMap(logger, entry, lister, ctx.JSONContext); err != nil {
|
if err := loadConfigMap(logger, entry, ctx); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else if entry.APICall != nil {
|
} else if entry.APICall != nil {
|
||||||
|
@ -286,13 +273,13 @@ func loadResource(ctx *PolicyContext, p *APIPath) ([]byte, error) {
|
||||||
return r.MarshalJSON()
|
return r.MarshalJSON()
|
||||||
}
|
}
|
||||||
|
|
||||||
func loadConfigMap(logger logr.Logger, entry kyverno.ContextEntry, lister dynamiclister.Lister, ctx *context.Context) error {
|
func loadConfigMap(logger logr.Logger, entry kyverno.ContextEntry, ctx *PolicyContext) error {
|
||||||
data, err := fetchConfigMap(logger, entry, lister, ctx)
|
data, err := fetchConfigMap(logger, entry, ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to retrieve config map for context entry %s: %v", entry.Name, err)
|
return fmt.Errorf("failed to retrieve config map for context entry %s: %v", entry.Name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = ctx.AddJSON(data)
|
err = ctx.JSONContext.AddJSON(data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to add config map for context entry %s: %v", entry.Name, err)
|
return fmt.Errorf("failed to add config map for context entry %s: %v", entry.Name, err)
|
||||||
}
|
}
|
||||||
|
@ -300,15 +287,15 @@ func loadConfigMap(logger logr.Logger, entry kyverno.ContextEntry, lister dynami
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetchConfigMap(logger logr.Logger, entry kyverno.ContextEntry, lister dynamiclister.Lister, jsonContext *context.Context) ([]byte, error) {
|
func fetchConfigMap(logger logr.Logger, entry kyverno.ContextEntry, ctx *PolicyContext) ([]byte, error) {
|
||||||
contextData := make(map[string]interface{})
|
contextData := make(map[string]interface{})
|
||||||
|
|
||||||
name, err := variables.SubstituteAll(logger, jsonContext, entry.ConfigMap.Name)
|
name, err := variables.SubstituteAll(logger, ctx.JSONContext, entry.ConfigMap.Name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to substitute variables in context %s configMap.name %s: %v", entry.Name, entry.ConfigMap.Name, err)
|
return nil, fmt.Errorf("failed to substitute variables in context %s configMap.name %s: %v", entry.Name, entry.ConfigMap.Name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace, err := variables.SubstituteAll(logger, jsonContext, entry.ConfigMap.Namespace)
|
namespace, err := variables.SubstituteAll(logger, ctx.JSONContext, entry.ConfigMap.Namespace)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to substitute variables in context %s configMap.namespace %s: %v", entry.Name, entry.ConfigMap.Namespace, err)
|
return nil, fmt.Errorf("failed to substitute variables in context %s configMap.namespace %s: %v", entry.Name, entry.ConfigMap.Namespace, err)
|
||||||
}
|
}
|
||||||
|
@ -317,10 +304,9 @@ func fetchConfigMap(logger logr.Logger, entry kyverno.ContextEntry, lister dynam
|
||||||
namespace = "default"
|
namespace = "default"
|
||||||
}
|
}
|
||||||
|
|
||||||
key := fmt.Sprintf("%s/%s", namespace, name)
|
obj, err := ctx.Client.GetResource("v1", "ConfigMap", namespace.(string), name.(string))
|
||||||
obj, err := lister.Get(key)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to read configmap %s/%s from cache: %v", namespace, name, err)
|
return nil, fmt.Errorf("failed to get configmap %s/%s : %v", namespace, name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
unstructuredObj := obj.DeepCopy().Object
|
unstructuredObj := obj.DeepCopy().Object
|
||||||
|
|
|
@ -35,7 +35,6 @@ func Mutate(policyContext *PolicyContext) (resp *response.EngineResponse) {
|
||||||
ctx := policyContext.JSONContext
|
ctx := policyContext.JSONContext
|
||||||
var name []string
|
var name []string
|
||||||
|
|
||||||
resCache := policyContext.ResourceCache
|
|
||||||
logger := log.Log.WithName("EngineMutate").WithValues("policy", policy.Name, "kind", patchedResource.GetKind(),
|
logger := log.Log.WithName("EngineMutate").WithValues("policy", policy.Name, "kind", patchedResource.GetKind(),
|
||||||
"namespace", patchedResource.GetNamespace(), "name", patchedResource.GetName())
|
"namespace", patchedResource.GetNamespace(), "name", patchedResource.GetName())
|
||||||
|
|
||||||
|
@ -78,7 +77,7 @@ func Mutate(policyContext *PolicyContext) (resp *response.EngineResponse) {
|
||||||
logger.Error(err, "failed to query resource object")
|
logger.Error(err, "failed to query resource object")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := LoadContext(logger, rule.Context, resCache, policyContext, rule.Name); err != nil {
|
if err := LoadContext(logger, rule.Context, policyContext, rule.Name); err != nil {
|
||||||
if _, ok := err.(gojmespath.NotFoundError); ok {
|
if _, ok := err.(gojmespath.NotFoundError); ok {
|
||||||
logger.V(3).Info("failed to load context", "reason", err.Error())
|
logger.V(3).Info("failed to load context", "reason", err.Error())
|
||||||
} else {
|
} else {
|
||||||
|
@ -144,7 +143,7 @@ func mutateForEach(rule *kyverno.Rule, ctx *PolicyContext, resource unstructured
|
||||||
allPatches := make([][]byte, 0)
|
allPatches := make([][]byte, 0)
|
||||||
|
|
||||||
for _, foreach := range foreachList {
|
for _, foreach := range foreachList {
|
||||||
if err := LoadContext(logger, rule.Context, ctx.ResourceCache, ctx, rule.Name); err != nil {
|
if err := LoadContext(logger, rule.Context, ctx, rule.Name); err != nil {
|
||||||
logger.Error(err, "failed to load context")
|
logger.Error(err, "failed to load context")
|
||||||
return ruleError(rule, utils.Mutation, "failed to load context", err), resource
|
return ruleError(rule, utils.Mutation, "failed to load context", err), resource
|
||||||
}
|
}
|
||||||
|
@ -202,7 +201,7 @@ func mutateElements(name string, foreach *kyverno.ForEachMutation, ctx *PolicyCo
|
||||||
return mutateError(err, fmt.Sprintf("failed to add element to mutate.foreach[%d].context", i))
|
return mutateError(err, fmt.Sprintf("failed to add element to mutate.foreach[%d].context", i))
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := LoadContext(logger, foreach.Context, ctx.ResourceCache, ctx, name); err != nil {
|
if err := LoadContext(logger, foreach.Context, ctx, name); err != nil {
|
||||||
return mutateError(err, fmt.Sprintf("failed to load to mutate.foreach[%d].context", i))
|
return mutateError(err, fmt.Sprintf("failed to load to mutate.foreach[%d].context", i))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ import (
|
||||||
kyverno "github.com/kyverno/kyverno/api/kyverno/v1"
|
kyverno "github.com/kyverno/kyverno/api/kyverno/v1"
|
||||||
client "github.com/kyverno/kyverno/pkg/dclient"
|
client "github.com/kyverno/kyverno/pkg/dclient"
|
||||||
"github.com/kyverno/kyverno/pkg/engine/context"
|
"github.com/kyverno/kyverno/pkg/engine/context"
|
||||||
"github.com/kyverno/kyverno/pkg/resourcecache"
|
|
||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -34,9 +33,6 @@ type PolicyContext struct {
|
||||||
|
|
||||||
ExcludeResourceFunc func(kind, namespace, name string) bool
|
ExcludeResourceFunc func(kind, namespace, name string) bool
|
||||||
|
|
||||||
// ResourceCache provides listers to resources. Currently Supports Configmap
|
|
||||||
ResourceCache resourcecache.ResourceCache
|
|
||||||
|
|
||||||
// JSONContext is the variable context
|
// JSONContext is the variable context
|
||||||
JSONContext *context.Context
|
JSONContext *context.Context
|
||||||
|
|
||||||
|
@ -53,7 +49,6 @@ func (pc *PolicyContext) Copy() *PolicyContext {
|
||||||
Client: pc.Client,
|
Client: pc.Client,
|
||||||
ExcludeGroupRole: pc.ExcludeGroupRole,
|
ExcludeGroupRole: pc.ExcludeGroupRole,
|
||||||
ExcludeResourceFunc: pc.ExcludeResourceFunc,
|
ExcludeResourceFunc: pc.ExcludeResourceFunc,
|
||||||
ResourceCache: pc.ResourceCache,
|
|
||||||
JSONContext: pc.JSONContext,
|
JSONContext: pc.JSONContext,
|
||||||
NamespaceLabels: pc.NamespaceLabels,
|
NamespaceLabels: pc.NamespaceLabels,
|
||||||
}
|
}
|
||||||
|
|
|
@ -307,7 +307,7 @@ func addElementToContext(ctx *PolicyContext, e interface{}, elementIndex int, el
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *validator) loadContext() error {
|
func (v *validator) loadContext() error {
|
||||||
if err := LoadContext(v.log, v.contextEntries, v.ctx.ResourceCache, v.ctx, v.rule.Name); err != nil {
|
if err := LoadContext(v.log, v.contextEntries, v.ctx, v.rule.Name); err != nil {
|
||||||
if _, ok := err.(gojmespath.NotFoundError); ok {
|
if _, ok := err.(gojmespath.NotFoundError); ok {
|
||||||
v.log.V(3).Info("failed to load context", "reason", err.Error())
|
v.log.V(3).Info("failed to load context", "reason", err.Error())
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -194,7 +194,6 @@ func (c *Controller) applyGenerate(resource unstructured.Unstructured, gr kyvern
|
||||||
AdmissionInfo: gr.Spec.Context.UserRequestInfo,
|
AdmissionInfo: gr.Spec.Context.UserRequestInfo,
|
||||||
ExcludeGroupRole: c.Config.GetExcludeGroupRole(),
|
ExcludeGroupRole: c.Config.GetExcludeGroupRole(),
|
||||||
ExcludeResourceFunc: c.Config.ToFilter,
|
ExcludeResourceFunc: c.Config.ToFilter,
|
||||||
ResourceCache: c.resCache,
|
|
||||||
JSONContext: ctx,
|
JSONContext: ctx,
|
||||||
NamespaceLabels: namespaceLabels,
|
NamespaceLabels: namespaceLabels,
|
||||||
Client: c.client,
|
Client: c.client,
|
||||||
|
@ -256,7 +255,6 @@ func (c *Controller) applyGeneratePolicy(log logr.Logger, policyContext *engine.
|
||||||
policy := policyContext.Policy
|
policy := policyContext.Policy
|
||||||
resource := policyContext.NewResource
|
resource := policyContext.NewResource
|
||||||
|
|
||||||
resCache := policyContext.ResourceCache
|
|
||||||
jsonContext := policyContext.JSONContext
|
jsonContext := policyContext.JSONContext
|
||||||
// To manage existing resources, we compare the creation time for the default resource to be generated and policy creation time
|
// To manage existing resources, we compare the creation time for the default resource to be generated and policy creation time
|
||||||
|
|
||||||
|
@ -284,7 +282,7 @@ func (c *Controller) applyGeneratePolicy(log logr.Logger, policyContext *engine.
|
||||||
}
|
}
|
||||||
|
|
||||||
// add configmap json data to context
|
// add configmap json data to context
|
||||||
if err := engine.LoadContext(log, rule.Context, resCache, policyContext, rule.Name); err != nil {
|
if err := engine.LoadContext(log, rule.Context, policyContext, rule.Name); err != nil {
|
||||||
log.Error(err, "cannot add configmaps to context")
|
log.Error(err, "cannot add configmaps to context")
|
||||||
return nil, processExisting, err
|
return nil, processExisting, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@ import (
|
||||||
"github.com/kyverno/kyverno/pkg/config"
|
"github.com/kyverno/kyverno/pkg/config"
|
||||||
dclient "github.com/kyverno/kyverno/pkg/dclient"
|
dclient "github.com/kyverno/kyverno/pkg/dclient"
|
||||||
"github.com/kyverno/kyverno/pkg/event"
|
"github.com/kyverno/kyverno/pkg/event"
|
||||||
"github.com/kyverno/kyverno/pkg/resourcecache"
|
|
||||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
|
@ -68,8 +67,7 @@ type Controller struct {
|
||||||
nsInformer informers.GenericInformer
|
nsInformer informers.GenericInformer
|
||||||
log logr.Logger
|
log logr.Logger
|
||||||
|
|
||||||
Config config.Interface
|
Config config.Interface
|
||||||
resCache resourcecache.ResourceCache
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//NewController returns an instance of the Generate-Request Controller
|
//NewController returns an instance of the Generate-Request Controller
|
||||||
|
@ -83,7 +81,6 @@ func NewController(
|
||||||
dynamicInformer dynamicinformer.DynamicSharedInformerFactory,
|
dynamicInformer dynamicinformer.DynamicSharedInformerFactory,
|
||||||
log logr.Logger,
|
log logr.Logger,
|
||||||
dynamicConfig config.Interface,
|
dynamicConfig config.Interface,
|
||||||
resourceCache resourcecache.ResourceCache,
|
|
||||||
) (*Controller, error) {
|
) (*Controller, error) {
|
||||||
|
|
||||||
c := Controller{
|
c := Controller{
|
||||||
|
@ -95,7 +92,6 @@ func NewController(
|
||||||
dynamicInformer: dynamicInformer,
|
dynamicInformer: dynamicInformer,
|
||||||
log: log,
|
log: log,
|
||||||
Config: dynamicConfig,
|
Config: dynamicConfig,
|
||||||
resCache: resourceCache,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
c.statusControl = StatusControl{client: kyvernoClient}
|
c.statusControl = StatusControl{client: kyvernoClient}
|
||||||
|
|
|
@ -14,14 +14,13 @@ import (
|
||||||
"github.com/kyverno/kyverno/pkg/engine"
|
"github.com/kyverno/kyverno/pkg/engine"
|
||||||
"github.com/kyverno/kyverno/pkg/engine/context"
|
"github.com/kyverno/kyverno/pkg/engine/context"
|
||||||
"github.com/kyverno/kyverno/pkg/engine/response"
|
"github.com/kyverno/kyverno/pkg/engine/response"
|
||||||
"github.com/kyverno/kyverno/pkg/resourcecache"
|
|
||||||
"github.com/kyverno/kyverno/pkg/utils"
|
"github.com/kyverno/kyverno/pkg/utils"
|
||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
)
|
)
|
||||||
|
|
||||||
// applyPolicy applies policy on a resource
|
// applyPolicy applies policy on a resource
|
||||||
func applyPolicy(policy kyverno.ClusterPolicy, resource unstructured.Unstructured,
|
func applyPolicy(policy kyverno.ClusterPolicy, resource unstructured.Unstructured,
|
||||||
logger logr.Logger, excludeGroupRole []string, resCache resourcecache.ResourceCache,
|
logger logr.Logger, excludeGroupRole []string,
|
||||||
client *client.Client, namespaceLabels map[string]string) (responses []*response.EngineResponse) {
|
client *client.Client, namespaceLabels map[string]string) (responses []*response.EngineResponse) {
|
||||||
|
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
|
@ -54,7 +53,7 @@ func applyPolicy(policy kyverno.ClusterPolicy, resource unstructured.Unstructure
|
||||||
logger.Error(err, "unable to add image info to variables context")
|
logger.Error(err, "unable to add image info to variables context")
|
||||||
}
|
}
|
||||||
|
|
||||||
engineResponseMutation, err = mutation(policy, resource, logger, resCache, ctx, namespaceLabels)
|
engineResponseMutation, err = mutation(policy, resource, logger, ctx, namespaceLabels)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error(err, "failed to process mutation rule")
|
logger.Error(err, "failed to process mutation rule")
|
||||||
}
|
}
|
||||||
|
@ -63,7 +62,6 @@ func applyPolicy(policy kyverno.ClusterPolicy, resource unstructured.Unstructure
|
||||||
Policy: policy,
|
Policy: policy,
|
||||||
NewResource: resource,
|
NewResource: resource,
|
||||||
ExcludeGroupRole: excludeGroupRole,
|
ExcludeGroupRole: excludeGroupRole,
|
||||||
ResourceCache: resCache,
|
|
||||||
JSONContext: ctx,
|
JSONContext: ctx,
|
||||||
Client: client,
|
Client: client,
|
||||||
NamespaceLabels: namespaceLabels,
|
NamespaceLabels: namespaceLabels,
|
||||||
|
@ -75,12 +73,11 @@ func applyPolicy(policy kyverno.ClusterPolicy, resource unstructured.Unstructure
|
||||||
return engineResponses
|
return engineResponses
|
||||||
}
|
}
|
||||||
|
|
||||||
func mutation(policy kyverno.ClusterPolicy, resource unstructured.Unstructured, log logr.Logger, resCache resourcecache.ResourceCache, jsonContext *context.Context, namespaceLabels map[string]string) (*response.EngineResponse, error) {
|
func mutation(policy kyverno.ClusterPolicy, resource unstructured.Unstructured, log logr.Logger, jsonContext *context.Context, namespaceLabels map[string]string) (*response.EngineResponse, error) {
|
||||||
|
|
||||||
policyContext := &engine.PolicyContext{
|
policyContext := &engine.PolicyContext{
|
||||||
Policy: policy,
|
Policy: policy,
|
||||||
NewResource: resource,
|
NewResource: resource,
|
||||||
ResourceCache: resCache,
|
|
||||||
JSONContext: jsonContext,
|
JSONContext: jsonContext,
|
||||||
NamespaceLabels: namespaceLabels,
|
NamespaceLabels: namespaceLabels,
|
||||||
}
|
}
|
||||||
|
|
|
@ -144,32 +144,6 @@ func GetAllNamespaces(nslister listerv1.NamespaceLister, log logr.Logger) []stri
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pc *PolicyController) getResourceList(kind, namespace string, labelSelector *metav1.LabelSelector, log logr.Logger) interface{} {
|
func (pc *PolicyController) getResourceList(kind, namespace string, labelSelector *metav1.LabelSelector, log logr.Logger) interface{} {
|
||||||
list, err := func() (list []*unstructured.Unstructured, err error) {
|
|
||||||
var selector labels.Selector
|
|
||||||
if labelSelector == nil {
|
|
||||||
selector = labels.Everything()
|
|
||||||
} else {
|
|
||||||
if selector, err = metav1.LabelSelectorAsSelector(labelSelector); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
genericCache, _ := pc.resCache.GetGVRCache(kind)
|
|
||||||
|
|
||||||
if namespace != "" {
|
|
||||||
list, err = genericCache.NamespacedLister(namespace).List(selector)
|
|
||||||
} else {
|
|
||||||
list, err = genericCache.Lister().List(selector)
|
|
||||||
}
|
|
||||||
return list, err
|
|
||||||
}()
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
log.V(3).Info("failed to list resource using lister, try to query from the API server", "err", err.Error())
|
|
||||||
} else {
|
|
||||||
return list
|
|
||||||
}
|
|
||||||
|
|
||||||
resourceList, err := pc.client.ListResource("", kind, namespace, labelSelector)
|
resourceList, err := pc.client.ListResource("", kind, namespace, labelSelector)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error(err, "failed to list resources", "kind", kind, "namespace", namespace)
|
log.Error(err, "failed to list resources", "kind", kind, "namespace", namespace)
|
||||||
|
|
|
@ -2,7 +2,6 @@ package policy
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
@ -34,17 +33,6 @@ func (pc *PolicyController) processExistingResources(policy *kyverno.ClusterPoli
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pc *PolicyController) registerResource(gvk string) (err error) {
|
|
||||||
genericCache, ok := pc.resCache.GetGVRCache(gvk)
|
|
||||||
if !ok {
|
|
||||||
if genericCache, err = pc.resCache.CreateGVKInformer(gvk); err != nil {
|
|
||||||
return fmt.Errorf("failed to create informer for %s: %v", gvk, err)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
pc.rm.RegisterScope(gvk, genericCache.IsNamespaced())
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (pc *PolicyController) applyAndReportPerNamespace(policy *kyverno.ClusterPolicy, kind string, ns string, rule kyverno.Rule, logger logr.Logger, metricAlreadyRegistered *bool) {
|
func (pc *PolicyController) applyAndReportPerNamespace(policy *kyverno.ClusterPolicy, kind string, ns string, rule kyverno.Rule, logger logr.Logger, metricAlreadyRegistered *bool) {
|
||||||
rMap := pc.getResourcesPerNamespace(kind, ns, rule, logger)
|
rMap := pc.getResourcesPerNamespace(kind, ns, rule, logger)
|
||||||
excludeAutoGenResources(*policy, rMap, logger)
|
excludeAutoGenResources(*policy, rMap, logger)
|
||||||
|
@ -90,7 +78,7 @@ func (pc *PolicyController) applyPolicy(policy *kyverno.ClusterPolicy, resource
|
||||||
}
|
}
|
||||||
|
|
||||||
namespaceLabels := common.GetNamespaceSelectorsFromNamespaceLister(resource.GetKind(), resource.GetNamespace(), pc.nsLister, logger)
|
namespaceLabels := common.GetNamespaceSelectorsFromNamespaceLister(resource.GetKind(), resource.GetNamespace(), pc.nsLister, logger)
|
||||||
engineResponse := applyPolicy(*policy, resource, logger, pc.configHandler.GetExcludeGroupRole(), pc.resCache, pc.client, namespaceLabels)
|
engineResponse := applyPolicy(*policy, resource, logger, pc.configHandler.GetExcludeGroupRole(), pc.client, namespaceLabels)
|
||||||
engineResponses = append(engineResponses, engineResponse...)
|
engineResponses = append(engineResponses, engineResponse...)
|
||||||
|
|
||||||
// post-processing, register the resource as processed
|
// post-processing, register the resource as processed
|
||||||
|
@ -217,11 +205,13 @@ func (pc *PolicyController) processExistingKinds(kind []string, policy *kyverno.
|
||||||
logger = logger.WithValues("rule", rule.Name, "kind", k)
|
logger = logger.WithValues("rule", rule.Name, "kind", k)
|
||||||
namespaced, err := pc.rm.GetScope(k)
|
namespaced, err := pc.rm.GetScope(k)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err := pc.registerResource(k); err != nil {
|
resourceSchema, _, err := pc.client.DiscoveryClient.FindResource("", k)
|
||||||
|
if err != nil {
|
||||||
logger.Error(err, "failed to find resource", "kind", k)
|
logger.Error(err, "failed to find resource", "kind", k)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
namespaced, _ = pc.rm.GetScope(k)
|
namespaced = resourceSchema.Namespaced
|
||||||
|
pc.rm.RegisterScope(k, namespaced)
|
||||||
}
|
}
|
||||||
|
|
||||||
// this tracker would help to ensure that even for multiple namespaces, duplicate metric are not generated
|
// this tracker would help to ensure that even for multiple namespaces, duplicate metric are not generated
|
||||||
|
@ -231,6 +221,7 @@ func (pc *PolicyController) processExistingKinds(kind []string, policy *kyverno.
|
||||||
pc.applyAndReportPerNamespace(policy, k, "", rule, logger.WithValues("kind", k), &metricRegisteredTracker)
|
pc.applyAndReportPerNamespace(policy, k, "", rule, logger.WithValues("kind", k), &metricRegisteredTracker)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
namespaces := pc.getNamespacesForRule(&rule, logger.WithValues("kind", k))
|
namespaces := pc.getNamespacesForRule(&rule, logger.WithValues("kind", k))
|
||||||
for _, ns := range namespaces {
|
for _, ns := range namespaces {
|
||||||
// for kind: Policy, consider only the namespace which the policy belongs to.
|
// for kind: Policy, consider only the namespace which the policy belongs to.
|
||||||
|
|
|
@ -89,7 +89,7 @@ func (g *Generate) validateClone(c kyverno.CloneFrom, kind string) (string, erro
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
if !ok {
|
if !ok {
|
||||||
return "", fmt.Errorf("kyverno does not have permissions to 'get' resource %s/%s. Update permissions in ClusterRole 'kyverno:generatecontroller'", kind, namespace)
|
return "", fmt.Errorf("kyverno does not have permissions to 'get' resource %s/%s. Update permissions in ClusterRole 'kyverno:generate'", kind, namespace)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
g.log.V(4).Info("name & namespace uses variables, so cannot be resolved. Skipping Auth Checks.")
|
g.log.V(4).Info("name & namespace uses variables, so cannot be resolved. Skipping Auth Checks.")
|
||||||
|
@ -109,7 +109,7 @@ func (g *Generate) canIGenerate(kind, namespace string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("kyverno does not have permissions to 'create' resource %s/%s. Update permissions in ClusterRole 'kyverno:generatecontroller'", kind, namespace)
|
return fmt.Errorf("kyverno does not have permissions to 'create' resource %s/%s. Update permissions in ClusterRole 'kyverno:generate'", kind, namespace)
|
||||||
}
|
}
|
||||||
// UPDATE
|
// UPDATE
|
||||||
ok, err = authCheck.CanIUpdate(kind, namespace)
|
ok, err = authCheck.CanIUpdate(kind, namespace)
|
||||||
|
@ -118,7 +118,7 @@ func (g *Generate) canIGenerate(kind, namespace string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("kyverno does not have permissions to 'update' resource %s/%s. Update permissions in ClusterRole 'kyverno:generatecontroller'", kind, namespace)
|
return fmt.Errorf("kyverno does not have permissions to 'update' resource %s/%s. Update permissions in ClusterRole 'kyverno:generate'", kind, namespace)
|
||||||
}
|
}
|
||||||
// GET
|
// GET
|
||||||
ok, err = authCheck.CanIGet(kind, namespace)
|
ok, err = authCheck.CanIGet(kind, namespace)
|
||||||
|
@ -127,7 +127,7 @@ func (g *Generate) canIGenerate(kind, namespace string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("kyverno does not have permissions to 'get' resource %s/%s. Update permissions in ClusterRole 'kyverno:generatecontroller'", kind, namespace)
|
return fmt.Errorf("kyverno does not have permissions to 'get' resource %s/%s. Update permissions in ClusterRole 'kyverno:generate'", kind, namespace)
|
||||||
}
|
}
|
||||||
|
|
||||||
// DELETE
|
// DELETE
|
||||||
|
@ -137,7 +137,7 @@ func (g *Generate) canIGenerate(kind, namespace string) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if !ok {
|
if !ok {
|
||||||
return fmt.Errorf("kyverno does not have permissions to 'delete' resource %s/%s. Update permissions in ClusterRole 'kyverno:generatecontroller'", kind, namespace)
|
return fmt.Errorf("kyverno does not have permissions to 'delete' resource %s/%s. Update permissions in ClusterRole 'kyverno:generate'", kind, namespace)
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -23,7 +23,6 @@ import (
|
||||||
"github.com/kyverno/kyverno/pkg/metrics"
|
"github.com/kyverno/kyverno/pkg/metrics"
|
||||||
pm "github.com/kyverno/kyverno/pkg/policymutation"
|
pm "github.com/kyverno/kyverno/pkg/policymutation"
|
||||||
"github.com/kyverno/kyverno/pkg/policyreport"
|
"github.com/kyverno/kyverno/pkg/policyreport"
|
||||||
"github.com/kyverno/kyverno/pkg/resourcecache"
|
|
||||||
"github.com/kyverno/kyverno/pkg/utils"
|
"github.com/kyverno/kyverno/pkg/utils"
|
||||||
v1 "k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
|
@ -82,12 +81,6 @@ type PolicyController struct {
|
||||||
// npListerSynced returns true if the namespace policy store has been synced at least once
|
// npListerSynced returns true if the namespace policy store has been synced at least once
|
||||||
npListerSynced cache.InformerSynced
|
npListerSynced cache.InformerSynced
|
||||||
|
|
||||||
// pvListerSynced returns true if the cluster policy violation store has been synced at least once
|
|
||||||
cpvListerSynced cache.InformerSynced
|
|
||||||
|
|
||||||
// pvListerSynced returns true if the policy violation store has been synced at least once
|
|
||||||
nspvListerSynced cache.InformerSynced
|
|
||||||
|
|
||||||
// nsListerSynced returns true if the namespace store has been synced at least once
|
// nsListerSynced returns true if the namespace store has been synced at least once
|
||||||
nsListerSynced cache.InformerSynced
|
nsListerSynced cache.InformerSynced
|
||||||
|
|
||||||
|
@ -105,9 +98,6 @@ type PolicyController struct {
|
||||||
|
|
||||||
policyReportEraser policyreport.PolicyReportEraser
|
policyReportEraser policyreport.PolicyReportEraser
|
||||||
|
|
||||||
// resCache - controls creation and fetching of resource informer cache
|
|
||||||
resCache resourcecache.ResourceCache
|
|
||||||
|
|
||||||
reconcilePeriod time.Duration
|
reconcilePeriod time.Duration
|
||||||
|
|
||||||
log logr.Logger
|
log logr.Logger
|
||||||
|
@ -129,7 +119,6 @@ func NewPolicyController(
|
||||||
policyReportEraser policyreport.PolicyReportEraser,
|
policyReportEraser policyreport.PolicyReportEraser,
|
||||||
namespaces informers.NamespaceInformer,
|
namespaces informers.NamespaceInformer,
|
||||||
log logr.Logger,
|
log logr.Logger,
|
||||||
resCache resourcecache.ResourceCache,
|
|
||||||
reconcilePeriod time.Duration,
|
reconcilePeriod time.Duration,
|
||||||
promConfig *metrics.PromConfig) (*PolicyController, error) {
|
promConfig *metrics.PromConfig) (*PolicyController, error) {
|
||||||
|
|
||||||
|
@ -153,7 +142,6 @@ func NewPolicyController(
|
||||||
configHandler: configHandler,
|
configHandler: configHandler,
|
||||||
prGenerator: prGenerator,
|
prGenerator: prGenerator,
|
||||||
policyReportEraser: policyReportEraser,
|
policyReportEraser: policyReportEraser,
|
||||||
resCache: resCache,
|
|
||||||
reconcilePeriod: reconcilePeriod,
|
reconcilePeriod: reconcilePeriod,
|
||||||
promConfig: promConfig,
|
promConfig: promConfig,
|
||||||
log: log,
|
log: log,
|
||||||
|
|
|
@ -73,7 +73,6 @@ func (ws *WebhookServer) handleGenerate(
|
||||||
AdmissionInfo: userRequestInfo,
|
AdmissionInfo: userRequestInfo,
|
||||||
ExcludeGroupRole: dynamicConfig.GetExcludeGroupRole(),
|
ExcludeGroupRole: dynamicConfig.GetExcludeGroupRole(),
|
||||||
ExcludeResourceFunc: ws.configHandler.ToFilter,
|
ExcludeResourceFunc: ws.configHandler.ToFilter,
|
||||||
ResourceCache: ws.resCache,
|
|
||||||
JSONContext: ctx,
|
JSONContext: ctx,
|
||||||
Client: ws.client,
|
Client: ws.client,
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,6 @@ import (
|
||||||
"github.com/kyverno/kyverno/pkg/openapi"
|
"github.com/kyverno/kyverno/pkg/openapi"
|
||||||
"github.com/kyverno/kyverno/pkg/policycache"
|
"github.com/kyverno/kyverno/pkg/policycache"
|
||||||
"github.com/kyverno/kyverno/pkg/policyreport"
|
"github.com/kyverno/kyverno/pkg/policyreport"
|
||||||
"github.com/kyverno/kyverno/pkg/resourcecache"
|
|
||||||
tlsutils "github.com/kyverno/kyverno/pkg/tls"
|
tlsutils "github.com/kyverno/kyverno/pkg/tls"
|
||||||
"github.com/kyverno/kyverno/pkg/userinfo"
|
"github.com/kyverno/kyverno/pkg/userinfo"
|
||||||
"github.com/kyverno/kyverno/pkg/utils"
|
"github.com/kyverno/kyverno/pkg/utils"
|
||||||
|
@ -122,9 +121,6 @@ type WebhookServer struct {
|
||||||
|
|
||||||
openAPIController *openapi.Controller
|
openAPIController *openapi.Controller
|
||||||
|
|
||||||
// resCache - controls creation and fetching of resource informer cache
|
|
||||||
resCache resourcecache.ResourceCache
|
|
||||||
|
|
||||||
grController *generate.Controller
|
grController *generate.Controller
|
||||||
|
|
||||||
promConfig *metrics.PromConfig
|
promConfig *metrics.PromConfig
|
||||||
|
@ -154,7 +150,6 @@ func NewWebhookServer(
|
||||||
cleanUp chan<- struct{},
|
cleanUp chan<- struct{},
|
||||||
log logr.Logger,
|
log logr.Logger,
|
||||||
openAPIController *openapi.Controller,
|
openAPIController *openapi.Controller,
|
||||||
resCache resourcecache.ResourceCache,
|
|
||||||
grc *generate.Controller,
|
grc *generate.Controller,
|
||||||
promConfig *metrics.PromConfig,
|
promConfig *metrics.PromConfig,
|
||||||
) (*WebhookServer, error) {
|
) (*WebhookServer, error) {
|
||||||
|
@ -200,7 +195,6 @@ func NewWebhookServer(
|
||||||
auditHandler: auditHandler,
|
auditHandler: auditHandler,
|
||||||
log: log,
|
log: log,
|
||||||
openAPIController: openAPIController,
|
openAPIController: openAPIController,
|
||||||
resCache: resCache,
|
|
||||||
promConfig: promConfig,
|
promConfig: promConfig,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -385,7 +379,6 @@ func (ws *WebhookServer) buildPolicyContext(request *v1beta1.AdmissionRequest, a
|
||||||
AdmissionInfo: userRequestInfo,
|
AdmissionInfo: userRequestInfo,
|
||||||
ExcludeGroupRole: ws.configHandler.GetExcludeGroupRole(),
|
ExcludeGroupRole: ws.configHandler.GetExcludeGroupRole(),
|
||||||
ExcludeResourceFunc: ws.configHandler.ToFilter,
|
ExcludeResourceFunc: ws.configHandler.ToFilter,
|
||||||
ResourceCache: ws.resCache,
|
|
||||||
JSONContext: ctx,
|
JSONContext: ctx,
|
||||||
Client: ws.client,
|
Client: ws.client,
|
||||||
}
|
}
|
||||||
|
@ -551,7 +544,6 @@ func (ws *WebhookServer) resourceValidation(request *v1beta1.AdmissionRequest) *
|
||||||
AdmissionInfo: userRequestInfo,
|
AdmissionInfo: userRequestInfo,
|
||||||
ExcludeGroupRole: ws.configHandler.GetExcludeGroupRole(),
|
ExcludeGroupRole: ws.configHandler.GetExcludeGroupRole(),
|
||||||
ExcludeResourceFunc: ws.configHandler.ToFilter,
|
ExcludeResourceFunc: ws.configHandler.ToFilter,
|
||||||
ResourceCache: ws.resCache,
|
|
||||||
JSONContext: ctx,
|
JSONContext: ctx,
|
||||||
Client: ws.client,
|
Client: ws.client,
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,6 @@ import (
|
||||||
"github.com/kyverno/kyverno/pkg/metrics"
|
"github.com/kyverno/kyverno/pkg/metrics"
|
||||||
"github.com/kyverno/kyverno/pkg/policycache"
|
"github.com/kyverno/kyverno/pkg/policycache"
|
||||||
"github.com/kyverno/kyverno/pkg/policyreport"
|
"github.com/kyverno/kyverno/pkg/policyreport"
|
||||||
"github.com/kyverno/kyverno/pkg/resourcecache"
|
|
||||||
"github.com/kyverno/kyverno/pkg/userinfo"
|
"github.com/kyverno/kyverno/pkg/userinfo"
|
||||||
"k8s.io/api/admission/v1beta1"
|
"k8s.io/api/admission/v1beta1"
|
||||||
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
|
||||||
|
@ -62,7 +61,6 @@ type auditHandler struct {
|
||||||
|
|
||||||
log logr.Logger
|
log logr.Logger
|
||||||
configHandler config.Interface
|
configHandler config.Interface
|
||||||
resCache resourcecache.ResourceCache
|
|
||||||
promConfig *metrics.PromConfig
|
promConfig *metrics.PromConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,7 +73,6 @@ func NewValidateAuditHandler(pCache policycache.Interface,
|
||||||
namespaces informers.NamespaceInformer,
|
namespaces informers.NamespaceInformer,
|
||||||
log logr.Logger,
|
log logr.Logger,
|
||||||
dynamicConfig config.Interface,
|
dynamicConfig config.Interface,
|
||||||
resCache resourcecache.ResourceCache,
|
|
||||||
client *client.Client,
|
client *client.Client,
|
||||||
promConfig *metrics.PromConfig) AuditHandler {
|
promConfig *metrics.PromConfig) AuditHandler {
|
||||||
|
|
||||||
|
@ -92,7 +89,6 @@ func NewValidateAuditHandler(pCache policycache.Interface,
|
||||||
log: log,
|
log: log,
|
||||||
prGenerator: prGenerator,
|
prGenerator: prGenerator,
|
||||||
configHandler: dynamicConfig,
|
configHandler: dynamicConfig,
|
||||||
resCache: resCache,
|
|
||||||
client: client,
|
client: client,
|
||||||
promConfig: promConfig,
|
promConfig: promConfig,
|
||||||
}
|
}
|
||||||
|
@ -195,7 +191,6 @@ func (h *auditHandler) process(request *v1beta1.AdmissionRequest) error {
|
||||||
AdmissionInfo: userRequestInfo,
|
AdmissionInfo: userRequestInfo,
|
||||||
ExcludeGroupRole: h.configHandler.GetExcludeGroupRole(),
|
ExcludeGroupRole: h.configHandler.GetExcludeGroupRole(),
|
||||||
ExcludeResourceFunc: h.configHandler.ToFilter,
|
ExcludeResourceFunc: h.configHandler.ToFilter,
|
||||||
ResourceCache: h.resCache,
|
|
||||||
JSONContext: ctx,
|
JSONContext: ctx,
|
||||||
Client: h.client,
|
Client: h.client,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue