1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-09 01:16:55 +00:00
kyverno/pkg/utils/generator/updaterequests.go

54 lines
1.6 KiB
Go
Raw Normal View History

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
}