mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-11 10:26:54 +00:00
247 lines
11 KiB
Go
247 lines
11 KiB
Go
package report
|
|
|
|
import (
|
|
"context"
|
|
|
|
kyvernov1alpha2 "github.com/kyverno/kyverno/api/kyverno/v1alpha2"
|
|
reportsv1 "github.com/kyverno/kyverno/api/reports/v1"
|
|
"github.com/kyverno/kyverno/pkg/client/clientset/versioned"
|
|
engineapi "github.com/kyverno/kyverno/pkg/engine/api"
|
|
admissionv1 "k8s.io/api/admission/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
|
"k8s.io/apimachinery/pkg/runtime"
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
"k8s.io/apimachinery/pkg/types"
|
|
"k8s.io/client-go/informers"
|
|
metadatainformers "k8s.io/client-go/metadata/metadatainformer"
|
|
)
|
|
|
|
type reportManager struct {
|
|
storeInDB bool
|
|
client versioned.Interface
|
|
}
|
|
|
|
type Interface interface {
|
|
CreateReport(ctx context.Context, report kyvernov1alpha2.ReportInterface) (kyvernov1alpha2.ReportInterface, error)
|
|
UpdateReport(ctx context.Context, report kyvernov1alpha2.ReportInterface) (kyvernov1alpha2.ReportInterface, error)
|
|
DeleteReport(ctx context.Context, report kyvernov1alpha2.ReportInterface) error
|
|
|
|
NewAdmissionReport(namespace, name string, gvr schema.GroupVersionResource, resource unstructured.Unstructured) kyvernov1alpha2.ReportInterface
|
|
BuildAdmissionReport(resource unstructured.Unstructured, request admissionv1.AdmissionRequest, responses ...engineapi.EngineResponse) kyvernov1alpha2.ReportInterface
|
|
NewBackgroundScanReport(namespace, name string, gvk schema.GroupVersionKind, owner string, uid types.UID) kyvernov1alpha2.ReportInterface
|
|
|
|
GetAdmissionReports(ctx context.Context, name string, namespace string, opts metav1.GetOptions) (kyvernov1alpha2.ReportInterface, error)
|
|
ListAdmissionReports(ctx context.Context, namespace string, opts metav1.ListOptions) (runtime.Object, error)
|
|
DeleteAdmissionReports(ctx context.Context, name, namespace string, opts metav1.DeleteOptions) error
|
|
|
|
GetBackgroundScanReports(ctx context.Context, name string, namespace string, opts metav1.GetOptions) (kyvernov1alpha2.ReportInterface, error)
|
|
ListBackgroundScanReports(ctx context.Context, namespace string, opts metav1.ListOptions) (runtime.Object, error)
|
|
DeleteBackgroundScanReports(ctx context.Context, name, namespace string, opts metav1.DeleteOptions) error
|
|
|
|
GetClusterAdmissionReports(ctx context.Context, name string, opts metav1.GetOptions) (kyvernov1alpha2.ReportInterface, error)
|
|
ListClusterAdmissionReports(ctx context.Context, opts metav1.ListOptions) (runtime.Object, error)
|
|
DeleteClusterAdmissionReports(ctx context.Context, namespace string, opts metav1.DeleteOptions) error
|
|
|
|
GetClusterBackgroundScanReports(ctx context.Context, name string, opts metav1.GetOptions) (kyvernov1alpha2.ReportInterface, error)
|
|
ListClusterBackgroundScanReports(ctx context.Context, opts metav1.ListOptions) (runtime.Object, error)
|
|
DeleteClusterBackgroundScanReports(ctx context.Context, namespace string, opts metav1.DeleteOptions) error
|
|
|
|
AdmissionReportInformer(metadataFactory metadatainformers.SharedInformerFactory) informers.GenericInformer
|
|
ClusterAdmissionReportInformer(metadataFactory metadatainformers.SharedInformerFactory) informers.GenericInformer
|
|
BackgroundScanReportInformer(metadataFactory metadatainformers.SharedInformerFactory) informers.GenericInformer
|
|
ClusterBackgroundScanReportInformer(metadataFactory metadatainformers.SharedInformerFactory) informers.GenericInformer
|
|
|
|
DeepCopy(report kyvernov1alpha2.ReportInterface) kyvernov1alpha2.ReportInterface
|
|
}
|
|
|
|
func NewReportManager(storeInDB bool, client versioned.Interface) Interface {
|
|
return &reportManager{
|
|
storeInDB: storeInDB,
|
|
client: client,
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) CreateReport(ctx context.Context, report kyvernov1alpha2.ReportInterface) (kyvernov1alpha2.ReportInterface, error) {
|
|
if r.storeInDB {
|
|
return createReportV1Report(ctx, report, r.client)
|
|
} else {
|
|
return createV1Alpha1Report(ctx, report, r.client)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) UpdateReport(ctx context.Context, report kyvernov1alpha2.ReportInterface) (kyvernov1alpha2.ReportInterface, error) {
|
|
if r.storeInDB {
|
|
return updateReportsV1Report(ctx, report, r.client)
|
|
} else {
|
|
return updateV1Alpha1Report(ctx, report, r.client)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) DeleteReport(ctx context.Context, report kyvernov1alpha2.ReportInterface) error {
|
|
if r.storeInDB {
|
|
return deleteReportV1Reports(ctx, report, r.client)
|
|
} else {
|
|
return deleteV1Alpha1Reports(ctx, report, r.client)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) GetAdmissionReports(ctx context.Context, name string, namespace string, opts metav1.GetOptions) (kyvernov1alpha2.ReportInterface, error) {
|
|
if r.storeInDB {
|
|
return r.client.ReportsV1().AdmissionReports(namespace).Get(ctx, name, opts)
|
|
} else {
|
|
return r.client.KyvernoV1alpha2().AdmissionReports(namespace).Get(ctx, name, opts)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) ListAdmissionReports(ctx context.Context, namespace string, opts metav1.ListOptions) (runtime.Object, error) {
|
|
if r.storeInDB {
|
|
return r.client.ReportsV1().AdmissionReports(namespace).List(ctx, opts)
|
|
} else {
|
|
return r.client.KyvernoV1alpha2().AdmissionReports(namespace).List(ctx, opts)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) DeleteAdmissionReports(ctx context.Context, name, namespace string, opts metav1.DeleteOptions) error {
|
|
if r.storeInDB {
|
|
return r.client.ReportsV1().AdmissionReports(namespace).Delete(ctx, name, opts)
|
|
} else {
|
|
return r.client.KyvernoV1alpha2().AdmissionReports(namespace).Delete(ctx, name, opts)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) GetBackgroundScanReports(ctx context.Context, name string, namespace string, opts metav1.GetOptions) (kyvernov1alpha2.ReportInterface, error) {
|
|
if r.storeInDB {
|
|
return r.client.ReportsV1().BackgroundScanReports(namespace).Get(ctx, name, opts)
|
|
} else {
|
|
return r.client.KyvernoV1alpha2().BackgroundScanReports(namespace).Get(ctx, name, opts)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) ListBackgroundScanReports(ctx context.Context, namespace string, opts metav1.ListOptions) (runtime.Object, error) {
|
|
if r.storeInDB {
|
|
return r.client.ReportsV1().BackgroundScanReports(namespace).List(ctx, opts)
|
|
} else {
|
|
return r.client.KyvernoV1alpha2().BackgroundScanReports(namespace).List(ctx, opts)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) DeleteBackgroundScanReports(ctx context.Context, name, namespace string, opts metav1.DeleteOptions) error {
|
|
if r.storeInDB {
|
|
return r.client.ReportsV1().BackgroundScanReports(namespace).Delete(ctx, name, opts)
|
|
} else {
|
|
return r.client.KyvernoV1alpha2().BackgroundScanReports(namespace).Delete(ctx, name, opts)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) GetClusterAdmissionReports(ctx context.Context, name string, opts metav1.GetOptions) (kyvernov1alpha2.ReportInterface, error) {
|
|
if r.storeInDB {
|
|
return r.client.ReportsV1().ClusterAdmissionReports().Get(ctx, name, opts)
|
|
} else {
|
|
return r.client.KyvernoV1alpha2().ClusterAdmissionReports().Get(ctx, name, opts)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) ListClusterAdmissionReports(ctx context.Context, opts metav1.ListOptions) (runtime.Object, error) {
|
|
if r.storeInDB {
|
|
return r.client.ReportsV1().ClusterAdmissionReports().List(ctx, opts)
|
|
} else {
|
|
return r.client.KyvernoV1alpha2().ClusterAdmissionReports().List(ctx, opts)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) DeleteClusterAdmissionReports(ctx context.Context, name string, opts metav1.DeleteOptions) error {
|
|
if r.storeInDB {
|
|
return r.client.ReportsV1().ClusterAdmissionReports().Delete(ctx, name, opts)
|
|
} else {
|
|
return r.client.KyvernoV1alpha2().ClusterAdmissionReports().Delete(ctx, name, opts)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) GetClusterBackgroundScanReports(ctx context.Context, name string, opts metav1.GetOptions) (kyvernov1alpha2.ReportInterface, error) {
|
|
if r.storeInDB {
|
|
return r.client.ReportsV1().ClusterBackgroundScanReports().Get(ctx, name, opts)
|
|
} else {
|
|
return r.client.KyvernoV1alpha2().ClusterBackgroundScanReports().Get(ctx, name, opts)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) ListClusterBackgroundScanReports(ctx context.Context, opts metav1.ListOptions) (runtime.Object, error) {
|
|
if r.storeInDB {
|
|
return r.client.ReportsV1().ClusterBackgroundScanReports().List(ctx, opts)
|
|
} else {
|
|
return r.client.KyvernoV1alpha2().ClusterBackgroundScanReports().List(ctx, opts)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) DeleteClusterBackgroundScanReports(ctx context.Context, name string, opts metav1.DeleteOptions) error {
|
|
if r.storeInDB {
|
|
return r.client.ReportsV1().ClusterBackgroundScanReports().Delete(ctx, name, opts)
|
|
} else {
|
|
return r.client.KyvernoV1alpha2().ClusterBackgroundScanReports().Delete(ctx, name, opts)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) NewAdmissionReport(namespace, name string, gvr schema.GroupVersionResource, resource unstructured.Unstructured) kyvernov1alpha2.ReportInterface {
|
|
if r.storeInDB {
|
|
return newAdmissionReportReportV1(namespace, name, gvr, resource)
|
|
} else {
|
|
return newAdmissionReportV1Alpha1(namespace, name, gvr, resource)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) BuildAdmissionReport(resource unstructured.Unstructured, request admissionv1.AdmissionRequest, responses ...engineapi.EngineResponse) kyvernov1alpha2.ReportInterface {
|
|
if r.storeInDB {
|
|
return buildAdmissionReportReportV1(resource, request, responses...)
|
|
} else {
|
|
return buildAdmissionReportV1Alpha1(resource, request, responses...)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) NewBackgroundScanReport(namespace, name string, gvk schema.GroupVersionKind, owner string, uid types.UID) kyvernov1alpha2.ReportInterface {
|
|
if r.storeInDB {
|
|
return newBackgroundScanReportReportsV1(namespace, name, gvk, owner, uid)
|
|
} else {
|
|
return newBackgroundScanReportV1Alpha1(namespace, name, gvk, owner, uid)
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) AdmissionReportInformer(metadataFactory metadatainformers.SharedInformerFactory) informers.GenericInformer {
|
|
if r.storeInDB {
|
|
return metadataFactory.ForResource(reportsv1.SchemeGroupVersion.WithResource("admissionreports"))
|
|
} else {
|
|
return metadataFactory.ForResource(kyvernov1alpha2.SchemeGroupVersion.WithResource("admissionreports"))
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) ClusterAdmissionReportInformer(metadataFactory metadatainformers.SharedInformerFactory) informers.GenericInformer {
|
|
if r.storeInDB {
|
|
return metadataFactory.ForResource(reportsv1.SchemeGroupVersion.WithResource("clusteradmissionreports"))
|
|
} else {
|
|
return metadataFactory.ForResource(kyvernov1alpha2.SchemeGroupVersion.WithResource("clusteradmissionreports"))
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) BackgroundScanReportInformer(metadataFactory metadatainformers.SharedInformerFactory) informers.GenericInformer {
|
|
if r.storeInDB {
|
|
return metadataFactory.ForResource(reportsv1.SchemeGroupVersion.WithResource("backgroundscanreports"))
|
|
} else {
|
|
return metadataFactory.ForResource(kyvernov1alpha2.SchemeGroupVersion.WithResource("backgroundscanreports"))
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) ClusterBackgroundScanReportInformer(metadataFactory metadatainformers.SharedInformerFactory) informers.GenericInformer {
|
|
if r.storeInDB {
|
|
return metadataFactory.ForResource(reportsv1.SchemeGroupVersion.WithResource("clusterbackgroundscanreports"))
|
|
} else {
|
|
return metadataFactory.ForResource(kyvernov1alpha2.SchemeGroupVersion.WithResource("clusterbackgroundscanreports"))
|
|
}
|
|
}
|
|
|
|
func (r *reportManager) DeepCopy(report kyvernov1alpha2.ReportInterface) kyvernov1alpha2.ReportInterface {
|
|
if r.storeInDB {
|
|
return deepCopyReportV1(report)
|
|
} else {
|
|
return deepCopyV1Alpha2(report)
|
|
}
|
|
}
|