mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-31 03:45:17 +00:00
feat: improve background scan reports enqueue logic (#5810)
* feat: improve background scan reports enqueue logic Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * delay Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * delay Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * aggregation delay Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * kuttl Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * kuttl timeout Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * delay Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * kuttl timeout Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
This commit is contained in:
parent
ffb204cdaa
commit
aaab55a036
14 changed files with 37 additions and 32 deletions
|
@ -36,6 +36,7 @@ const (
|
||||||
ControllerName = "aggregate-report-controller"
|
ControllerName = "aggregate-report-controller"
|
||||||
maxRetries = 10
|
maxRetries = 10
|
||||||
mergeLimit = 1000
|
mergeLimit = 1000
|
||||||
|
enqueueDelay = 30 * time.Second
|
||||||
)
|
)
|
||||||
|
|
||||||
type controller struct {
|
type controller struct {
|
||||||
|
@ -94,15 +95,14 @@ func NewController(
|
||||||
metadataCache: metadataCache,
|
metadataCache: metadataCache,
|
||||||
chunkSize: chunkSize,
|
chunkSize: chunkSize,
|
||||||
}
|
}
|
||||||
delay := 15 * time.Second
|
controllerutils.AddDelayedExplicitEventHandlers(logger, polrInformer.Informer(), c.queue, enqueueDelay, keyFunc)
|
||||||
controllerutils.AddDelayedExplicitEventHandlers(logger, polrInformer.Informer(), c.queue, delay, keyFunc)
|
controllerutils.AddDelayedExplicitEventHandlers(logger, cpolrInformer.Informer(), c.queue, enqueueDelay, keyFunc)
|
||||||
controllerutils.AddDelayedExplicitEventHandlers(logger, cpolrInformer.Informer(), c.queue, delay, keyFunc)
|
controllerutils.AddDelayedExplicitEventHandlers(logger, bgscanrInformer.Informer(), c.queue, enqueueDelay, keyFunc)
|
||||||
controllerutils.AddDelayedExplicitEventHandlers(logger, bgscanrInformer.Informer(), c.queue, delay, keyFunc)
|
controllerutils.AddDelayedExplicitEventHandlers(logger, cbgscanrInformer.Informer(), c.queue, enqueueDelay, keyFunc)
|
||||||
controllerutils.AddDelayedExplicitEventHandlers(logger, cbgscanrInformer.Informer(), c.queue, delay, keyFunc)
|
|
||||||
enqueueFromAdmr := func(obj metav1.Object) {
|
enqueueFromAdmr := func(obj metav1.Object) {
|
||||||
// no need to consider non aggregated reports
|
// no need to consider non aggregated reports
|
||||||
if controllerutils.HasLabel(obj, reportutils.LabelAggregatedReport) {
|
if controllerutils.HasLabel(obj, reportutils.LabelAggregatedReport) {
|
||||||
c.queue.AddAfter(keyFunc(obj), delay)
|
c.queue.AddAfter(keyFunc(obj), enqueueDelay)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
controllerutils.AddEventHandlersT(
|
controllerutils.AddEventHandlersT(
|
||||||
|
|
|
@ -39,6 +39,7 @@ const (
|
||||||
ControllerName = "background-scan-controller"
|
ControllerName = "background-scan-controller"
|
||||||
maxRetries = 10
|
maxRetries = 10
|
||||||
annotationLastScanTime = "audit.kyverno.io/last-scan-time"
|
annotationLastScanTime = "audit.kyverno.io/last-scan-time"
|
||||||
|
enqueueDelay = 30 * time.Second
|
||||||
)
|
)
|
||||||
|
|
||||||
type controller struct {
|
type controller struct {
|
||||||
|
@ -107,17 +108,10 @@ func NewController(
|
||||||
if eventType == resource.Deleted {
|
if eventType == resource.Deleted {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
selector, err := reportutils.SelectorResourceUidEquals(uid)
|
|
||||||
if err != nil {
|
|
||||||
logger.Error(err, "failed to create label selector")
|
|
||||||
}
|
|
||||||
if err := c.enqueue(selector); err != nil {
|
|
||||||
logger.Error(err, "failed to enqueue")
|
|
||||||
}
|
|
||||||
if res.Namespace == "" {
|
if res.Namespace == "" {
|
||||||
c.queue.Add(string(uid))
|
c.queue.AddAfter(string(uid), enqueueDelay)
|
||||||
} else {
|
} else {
|
||||||
c.queue.Add(res.Namespace + "/" + string(uid))
|
c.queue.AddAfter(res.Namespace+"/"+string(uid), enqueueDelay)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return &c
|
return &c
|
||||||
|
@ -390,7 +384,7 @@ func (c *controller) getMeta(namespace, name string) (metav1.Object, error) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *controller) reconcile(ctx context.Context, logger logr.Logger, key, namespace, name string) error {
|
func (c *controller) reconcile(ctx context.Context, logger logr.Logger, _, namespace, name string) error {
|
||||||
// try to find resource from the cache
|
// try to find resource from the cache
|
||||||
uid := types.UID(name)
|
uid := types.UID(name)
|
||||||
resource, gvk, exists := c.metadataCache.GetResourceHash(uid)
|
resource, gvk, exists := c.metadataCache.GetResourceHash(uid)
|
||||||
|
|
|
@ -59,15 +59,7 @@ func ReportsAreIdentical(before, after kyvernov1alpha2.ReportInterface) bool {
|
||||||
if !reflect.DeepEqual(before.GetAnnotations(), after.GetAnnotations()) {
|
if !reflect.DeepEqual(before.GetAnnotations(), after.GetAnnotations()) {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
bLabels := sets.New[string]()
|
if !reflect.DeepEqual(before.GetLabels(), after.GetLabels()) {
|
||||||
aLabels := sets.New[string]()
|
|
||||||
for key := range before.GetLabels() {
|
|
||||||
bLabels.Insert(key)
|
|
||||||
}
|
|
||||||
for key := range after.GetLabels() {
|
|
||||||
aLabels.Insert(key)
|
|
||||||
}
|
|
||||||
if !aLabels.Equal(bLabels) {
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
b := before.GetResults()
|
b := before.GetResults()
|
||||||
|
|
|
@ -3,7 +3,7 @@ kind: TestSuite
|
||||||
testDirs:
|
testDirs:
|
||||||
- ./test/conformance/kuttl
|
- ./test/conformance/kuttl
|
||||||
startKIND: false
|
startKIND: false
|
||||||
# timeout: 15
|
timeout: 90
|
||||||
parallel: 1
|
parallel: 1
|
||||||
fullName: true
|
fullName: true
|
||||||
skipTestRegex: '_.+'
|
skipTestRegex: '_.+'
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
apiVersion: kuttl.dev/v1beta1
|
||||||
|
kind: TestStep
|
||||||
|
apply:
|
||||||
|
- pod.yaml
|
||||||
|
assert:
|
||||||
|
- pod-assert.yaml
|
|
@ -0,0 +1,6 @@
|
||||||
|
apiVersion: kuttl.dev/v1beta1
|
||||||
|
kind: TestStep
|
||||||
|
apply:
|
||||||
|
- policy.yaml
|
||||||
|
assert:
|
||||||
|
- policy-assert.yaml
|
|
@ -0,0 +1,4 @@
|
||||||
|
apiVersion: kuttl.dev/v1beta1
|
||||||
|
kind: TestStep
|
||||||
|
assert:
|
||||||
|
- report-assert.yaml
|
|
@ -1,4 +0,0 @@
|
||||||
apiVersion: kuttl.dev/v1beta1
|
|
||||||
kind: TestStep
|
|
||||||
commands:
|
|
||||||
- command: kubectl delete -f 01-manifests.yaml,02-cpol.yaml --force --wait=true --ignore-not-found=true
|
|
|
@ -1,3 +1,10 @@
|
||||||
# Title
|
# Title
|
||||||
|
|
||||||
This test checks that a Policy Report is created with an entry that is as expected.
|
This test checks that a Policy Report is created with an entry that is as expected.
|
||||||
|
|
||||||
|
## Steps
|
||||||
|
|
||||||
|
1. - Create a pod
|
||||||
|
1. - Create a cluster policy
|
||||||
|
- Assert the policy becomes ready
|
||||||
|
1. - Assert a report is created for the pod/policy
|
||||||
|
|
Loading…
Add table
Reference in a new issue