mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-06 07:57:07 +00:00
- set tag optional in generaterequest; - fix generate controller error log
This commit is contained in:
parent
943935ee1b
commit
2ff9d03b3f
8 changed files with 39 additions and 17 deletions
|
@ -48,11 +48,13 @@ spec:
|
||||||
send the request
|
send the request
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
|
nullable: true
|
||||||
type: array
|
type: array
|
||||||
roles:
|
roles:
|
||||||
description: Roles is a list of possible role send the request
|
description: Roles is a list of possible role send the request
|
||||||
items:
|
items:
|
||||||
type: string
|
type: string
|
||||||
|
nullable: true
|
||||||
type: array
|
type: array
|
||||||
userInfo:
|
userInfo:
|
||||||
description: UserInfo is the userInfo carried in the admission
|
description: UserInfo is the userInfo carried in the admission
|
||||||
|
@ -84,10 +86,6 @@ spec:
|
||||||
among all active users.
|
among all active users.
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
required:
|
|
||||||
- clusterRoles
|
|
||||||
- roles
|
|
||||||
- userInfo
|
|
||||||
type: object
|
type: object
|
||||||
type: object
|
type: object
|
||||||
policy:
|
policy:
|
||||||
|
|
|
@ -30,16 +30,24 @@ type GenerateRequestSpec struct {
|
||||||
|
|
||||||
//GenerateRequestContext stores the context to be shared
|
//GenerateRequestContext stores the context to be shared
|
||||||
type GenerateRequestContext struct {
|
type GenerateRequestContext struct {
|
||||||
|
// +optional
|
||||||
UserRequestInfo RequestInfo `json:"userInfo,omitempty" yaml:"userInfo,omitempty"`
|
UserRequestInfo RequestInfo `json:"userInfo,omitempty" yaml:"userInfo,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// RequestInfo contains permission info carried in an admission request
|
// RequestInfo contains permission info carried in an admission request
|
||||||
type RequestInfo struct {
|
type RequestInfo struct {
|
||||||
// Roles is a list of possible role send the request
|
// Roles is a list of possible role send the request
|
||||||
|
// +nullable
|
||||||
|
// +optional
|
||||||
Roles []string `json:"roles" yaml:"roles"`
|
Roles []string `json:"roles" yaml:"roles"`
|
||||||
|
|
||||||
// ClusterRoles is a list of possible clusterRoles send the request
|
// ClusterRoles is a list of possible clusterRoles send the request
|
||||||
|
// +nullable
|
||||||
|
// +optional
|
||||||
ClusterRoles []string `json:"clusterRoles" yaml:"clusterRoles"`
|
ClusterRoles []string `json:"clusterRoles" yaml:"clusterRoles"`
|
||||||
|
|
||||||
// UserInfo is the userInfo carried in the admission request
|
// UserInfo is the userInfo carried in the admission request
|
||||||
|
// +optional
|
||||||
AdmissionUserInfo authenticationv1.UserInfo `json:"userInfo" yaml:"userInfo"`
|
AdmissionUserInfo authenticationv1.UserInfo `json:"userInfo" yaml:"userInfo"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -246,6 +246,12 @@ func (c *Controller) handleErr(err error, key interface{}) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if errors.IsNotFound(err) {
|
||||||
|
c.queue.Forget(key)
|
||||||
|
logger.V(4).Info("Dropping generate request from the queue", "key", key, "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if c.queue.NumRequeues(key) < maxRetries {
|
if c.queue.NumRequeues(key) < maxRetries {
|
||||||
logger.Error(err, "failed to sync generate request", "key", key)
|
logger.Error(err, "failed to sync generate request", "key", key)
|
||||||
c.queue.AddRateLimited(key)
|
c.queue.AddRateLimited(key)
|
||||||
|
@ -260,7 +266,7 @@ func (c *Controller) syncGenerateRequest(key string) error {
|
||||||
logger := c.log.WithValues("key", key)
|
logger := c.log.WithValues("key", key)
|
||||||
var err error
|
var err error
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
logger.Info("started syncing generate request", "startTime", startTime)
|
logger.V(4).Info("started syncing generate request", "startTime", startTime)
|
||||||
defer func() {
|
defer func() {
|
||||||
logger.V(4).Info("finished syncying generate request", "processingTIme", time.Since(startTime).String())
|
logger.V(4).Info("finished syncying generate request", "processingTIme", time.Since(startTime).String())
|
||||||
}()
|
}()
|
||||||
|
|
|
@ -14,6 +14,7 @@ import (
|
||||||
"github.com/kyverno/kyverno/pkg/event"
|
"github.com/kyverno/kyverno/pkg/event"
|
||||||
"github.com/kyverno/kyverno/pkg/policystatus"
|
"github.com/kyverno/kyverno/pkg/policystatus"
|
||||||
"github.com/kyverno/kyverno/pkg/resourcecache"
|
"github.com/kyverno/kyverno/pkg/resourcecache"
|
||||||
|
"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"
|
||||||
"k8s.io/apimachinery/pkg/util/wait"
|
"k8s.io/apimachinery/pkg/util/wait"
|
||||||
|
@ -230,7 +231,7 @@ func (c *Controller) deleteGR(obj interface{}) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
logger.Info("deleting generate request", "name", gr.Name)
|
logger.V(3).Info("deleting generate request", "name", gr.Name)
|
||||||
// sync Handler will remove it from the queue
|
// sync Handler will remove it from the queue
|
||||||
c.enqueueGR(gr)
|
c.enqueueGR(gr)
|
||||||
}
|
}
|
||||||
|
@ -280,6 +281,12 @@ func (c *Controller) handleErr(err error, key interface{}) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if errors.IsNotFound(err) {
|
||||||
|
c.queue.Forget(key)
|
||||||
|
logger.V(4).Info("Dropping generate request from the queue", "key", key, "error", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if c.queue.NumRequeues(key) < maxRetries {
|
if c.queue.NumRequeues(key) < maxRetries {
|
||||||
logger.Error(err, "failed to sync generate request", "key", key)
|
logger.Error(err, "failed to sync generate request", "key", key)
|
||||||
c.queue.AddRateLimited(key)
|
c.queue.AddRateLimited(key)
|
||||||
|
@ -294,7 +301,7 @@ func (c *Controller) syncGenerateRequest(key string) error {
|
||||||
logger := c.log
|
logger := c.log
|
||||||
var err error
|
var err error
|
||||||
startTime := time.Now()
|
startTime := time.Now()
|
||||||
logger.Info("started sync", "key", key, "startTime", startTime)
|
logger.V(4).Info("started sync", "key", key, "startTime", startTime)
|
||||||
defer func() {
|
defer func() {
|
||||||
logger.V(4).Info("finished sync", "key", key, "processingTime", time.Since(startTime).String())
|
logger.V(4).Info("finished sync", "key", key, "processingTime", time.Since(startTime).String())
|
||||||
}()
|
}()
|
||||||
|
@ -305,6 +312,10 @@ func (c *Controller) syncGenerateRequest(key string) error {
|
||||||
|
|
||||||
gr, err := c.grLister.Get(grName)
|
gr, err := c.grLister.Get(grName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
if errors.IsNotFound(err) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
logger.Error(err, "failed to list generate requests")
|
logger.Error(err, "failed to list generate requests")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -182,7 +182,6 @@ func (c *Controller) applyGeneratePolicy(log logr.Logger, policyContext engine.P
|
||||||
}
|
}
|
||||||
|
|
||||||
genResource, err := applyRule(log, c.client, rule, resource, ctx, policy.Name, gr, processExisting)
|
genResource, err := applyRule(log, c.client, rule, resource, ctx, policy.Name, gr, processExisting)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -346,7 +345,7 @@ func applyRule(log logr.Logger, client *dclient.Client, rule kyverno.Rule, resou
|
||||||
// Failed to create resource
|
// Failed to create resource
|
||||||
return noGenResource, err
|
return noGenResource, err
|
||||||
}
|
}
|
||||||
logger.V(4).Info("created new resource")
|
logger.V(2).Info("created generated resource")
|
||||||
|
|
||||||
} else if mode == Update {
|
} else if mode == Update {
|
||||||
var isUpdate bool
|
var isUpdate bool
|
||||||
|
@ -374,7 +373,7 @@ func applyRule(log logr.Logger, client *dclient.Client, rule kyverno.Rule, resou
|
||||||
logger.Error(err, "updating existing resource")
|
logger.Error(err, "updating existing resource")
|
||||||
return noGenResource, err
|
return noGenResource, err
|
||||||
}
|
}
|
||||||
logger.V(4).Info("updated new resource")
|
logger.V(4).Info("updated generated resource")
|
||||||
} else {
|
} else {
|
||||||
resource := &unstructured.Unstructured{}
|
resource := &unstructured.Unstructured{}
|
||||||
resource.SetUnstructuredContent(rdata)
|
resource.SetUnstructuredContent(rdata)
|
||||||
|
@ -384,7 +383,7 @@ func applyRule(log logr.Logger, client *dclient.Client, rule kyverno.Rule, resou
|
||||||
logger.Error(err, "updating existing resource")
|
logger.Error(err, "updating existing resource")
|
||||||
return noGenResource, err
|
return noGenResource, err
|
||||||
}
|
}
|
||||||
logger.V(4).Info("updated new resource")
|
logger.V(4).Info("updated geneated resource")
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.V(4).Info("Synchronize resource is disabled")
|
logger.V(4).Info("Synchronize resource is disabled")
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
kyverno "github.com/kyverno/kyverno/pkg/api/kyverno/v1"
|
kyverno "github.com/kyverno/kyverno/pkg/api/kyverno/v1"
|
||||||
kyvernoclient "github.com/kyverno/kyverno/pkg/client/clientset/versioned"
|
kyvernoclient "github.com/kyverno/kyverno/pkg/client/clientset/versioned"
|
||||||
"github.com/kyverno/kyverno/pkg/config"
|
"github.com/kyverno/kyverno/pkg/config"
|
||||||
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"sigs.k8s.io/controller-runtime/pkg/log"
|
"sigs.k8s.io/controller-runtime/pkg/log"
|
||||||
)
|
)
|
||||||
|
@ -28,11 +29,11 @@ func (sc StatusControl) Failed(gr kyverno.GenerateRequest, message string, genRe
|
||||||
// Update Generated Resources
|
// Update Generated Resources
|
||||||
gr.Status.GeneratedResources = genResources
|
gr.Status.GeneratedResources = genResources
|
||||||
_, err := sc.client.KyvernoV1().GenerateRequests(config.KubePolicyNamespace).UpdateStatus(context.TODO(), &gr, v1.UpdateOptions{})
|
_, err := sc.client.KyvernoV1().GenerateRequests(config.KubePolicyNamespace).UpdateStatus(context.TODO(), &gr, v1.UpdateOptions{})
|
||||||
if err != nil {
|
if err != nil && !errors.IsNotFound(err) {
|
||||||
log.Log.Error(err, "failed to update generate request status", "name", gr.Name)
|
log.Log.Error(err, "failed to update generate request status", "name", gr.Name)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
log.Log.Info("updated generate request status", "name", gr.Name, "status", string(kyverno.Failed))
|
log.Log.V(3).Info("updated generate request status", "name", gr.Name, "status", string(kyverno.Failed))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,10 +45,10 @@ func (sc StatusControl) Success(gr kyverno.GenerateRequest, genResources []kyver
|
||||||
gr.Status.GeneratedResources = genResources
|
gr.Status.GeneratedResources = genResources
|
||||||
|
|
||||||
_, err := sc.client.KyvernoV1().GenerateRequests(config.KubePolicyNamespace).UpdateStatus(context.TODO(), &gr, v1.UpdateOptions{})
|
_, err := sc.client.KyvernoV1().GenerateRequests(config.KubePolicyNamespace).UpdateStatus(context.TODO(), &gr, v1.UpdateOptions{})
|
||||||
if err != nil {
|
if err != nil && !errors.IsNotFound(err) {
|
||||||
log.Log.Error(err, "failed to update generate request status", "name", gr.Name)
|
log.Log.Error(err, "failed to update generate request status", "name", gr.Name)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
log.Log.Info("updated generate request status", "name", gr.Name, "status", string(kyverno.Completed))
|
log.Log.V(3).Info("updated generate request status", "name", gr.Name, "status", string(kyverno.Completed))
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -415,7 +415,6 @@ func createFileOrFolder(mutateLogPath string, mutateLogPathIsDir bool) error {
|
||||||
if len(s) > 1 {
|
if len(s) > 1 {
|
||||||
folderPath = mutateLogPath[:len(mutateLogPath)-len(s[len(s)-1])-1]
|
folderPath = mutateLogPath[:len(mutateLogPath)-len(s[len(s)-1])-1]
|
||||||
_, err := os.Stat(folderPath)
|
_, err := os.Stat(folderPath)
|
||||||
fmt.Println(err)
|
|
||||||
if os.IsNotExist(err) {
|
if os.IsNotExist(err) {
|
||||||
errDir := os.MkdirAll(folderPath, 0755)
|
errDir := os.MkdirAll(folderPath, 0755)
|
||||||
if errDir != nil {
|
if errDir != nil {
|
||||||
|
|
|
@ -419,7 +419,7 @@ func (pc *PolicyController) syncPolicy(key string) error {
|
||||||
for _, v := range grList {
|
for _, v := range grList {
|
||||||
if key == v.Spec.Policy {
|
if key == v.Spec.Policy {
|
||||||
err := pc.kyvernoClient.KyvernoV1().GenerateRequests(config.KubePolicyNamespace).Delete(context.TODO(), v.GetName(), metav1.DeleteOptions{})
|
err := pc.kyvernoClient.KyvernoV1().GenerateRequests(config.KubePolicyNamespace).Delete(context.TODO(), v.GetName(), metav1.DeleteOptions{})
|
||||||
if err != nil {
|
if err != nil && !errors.IsNotFound(err) {
|
||||||
logger.Error(err, "failed to delete gr")
|
logger.Error(err, "failed to delete gr")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue