mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-06 16:06:56 +00:00
* feat: bump update request api version Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * use v2 Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * codegen Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * codegen Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * fix linter Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> * fix linter Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com> --------- Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
53 lines
1.6 KiB
Go
53 lines
1.6 KiB
Go
package generator
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
|
|
"github.com/go-logr/logr"
|
|
kyvernov2 "github.com/kyverno/kyverno/api/kyverno/v2"
|
|
"github.com/kyverno/kyverno/pkg/client/clientset/versioned"
|
|
configutils "github.com/kyverno/kyverno/pkg/config"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
"k8s.io/client-go/metadata"
|
|
)
|
|
|
|
type UpdateRequestGenerator = Generator[*kyvernov2.UpdateRequest]
|
|
|
|
type updaterequestsgenerator struct {
|
|
config configutils.Configuration
|
|
metaClient metadata.Interface
|
|
}
|
|
|
|
func NewUpdateRequestGenerator(config configutils.Configuration, metaClient metadata.Interface) UpdateRequestGenerator {
|
|
return &updaterequestsgenerator{
|
|
config: config,
|
|
metaClient: metaClient,
|
|
}
|
|
}
|
|
|
|
func (g *updaterequestsgenerator) Generate(ctx context.Context, client versioned.Interface, resource *kyvernov2.UpdateRequest, log logr.Logger) (*kyvernov2.UpdateRequest, error) {
|
|
objects, err := g.metaClient.Resource(
|
|
schema.GroupVersionResource{
|
|
Group: "kyverno.io",
|
|
Version: "v2",
|
|
Resource: "updaterequests",
|
|
},
|
|
).List(ctx, metav1.ListOptions{})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
count := len(objects.Items)
|
|
threshold := g.config.GetUpdateRequestThreshold()
|
|
if int64(count) >= threshold {
|
|
log.Error(errors.New("UpdateRequest creation skipped"),
|
|
"the number of updaterequests exceeds the threshold, please adjust updateRequestThreshold in the Kyverno configmap",
|
|
"current count", count, "threshold", threshold)
|
|
return nil, nil
|
|
}
|
|
|
|
created, err := client.KyvernoV2().UpdateRequests(configutils.KyvernoNamespace()).Create(ctx, resource, metav1.CreateOptions{})
|
|
return created, err
|
|
}
|