1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 16:06:56 +00:00

generate reportRequest in kyverno namespace

This commit is contained in:
Shuting Zhao 2020-10-28 14:52:08 -07:00
parent f499c1ebb7
commit ca3704eb7d
3 changed files with 24 additions and 18 deletions

View file

@ -9,6 +9,7 @@ import (
kyverno "github.com/kyverno/kyverno/pkg/api/kyverno/v1"
report "github.com/kyverno/kyverno/pkg/api/policyreport/v1alpha1"
"github.com/kyverno/kyverno/pkg/common"
"github.com/kyverno/kyverno/pkg/config"
"github.com/kyverno/kyverno/pkg/engine/response"
"github.com/kyverno/kyverno/pkg/engine/utils"
v1 "k8s.io/api/core/v1"
@ -98,7 +99,7 @@ func (pvb *requestBuilder) build(info Info) (req *unstructured.Unstructured, err
}
req = &unstructured.Unstructured{Object: obj}
set(req, fmt.Sprintf("reportrequest-%s-%s", info.PolicyName, info.Resource.GetName()), info)
set(req, fmt.Sprintf("reportrequest-%s-%s-%s", info.PolicyName, info.Resource.GetNamespace(), info.Resource.GetName()), info)
} else {
rr := &report.ClusterReportRequest{
Summary: calculateSummary(results),
@ -115,7 +116,8 @@ func (pvb *requestBuilder) build(info Info) (req *unstructured.Unstructured, err
if len(info.Rules) == 0 && info.PolicyName == "" {
req.SetLabels(map[string]string{
"delete": generatedDeletedResourceLabel(info.Resource.GetKind(), info.Resource.GetNamespace(), info.Resource.GetName())})
"namespace": info.Resource.GetNamespace(),
"delete": generatedDeletedResourceLabel(info.Resource.GetKind(), info.Resource.GetNamespace(), info.Resource.GetName())})
}
return req, nil
}
@ -123,7 +125,7 @@ func (pvb *requestBuilder) build(info Info) (req *unstructured.Unstructured, err
func set(obj *unstructured.Unstructured, name string, info Info) {
resource := info.Resource
obj.SetName(name)
obj.SetNamespace(resource.GetNamespace())
obj.SetNamespace(config.KubePolicyNamespace)
obj.SetAPIVersion("policy.kubernetes.io/v1alpha1")
if resource.GetNamespace() == "" {
obj.SetKind("ClusterReportRequest")
@ -132,8 +134,9 @@ func set(obj *unstructured.Unstructured, name string, info Info) {
}
obj.SetLabels(map[string]string{
"policy": info.PolicyName,
"resource": resource.GetKind() + "-" + resource.GetName(),
"namespace": resource.GetNamespace(),
"policy": info.PolicyName,
"resource": resource.GetKind() + "-" + resource.GetNamespace() + "-" + resource.GetName(),
})
if info.FromSync {

View file

@ -8,6 +8,7 @@ import (
report "github.com/kyverno/kyverno/pkg/api/policyreport/v1alpha1"
policyreportinformer "github.com/kyverno/kyverno/pkg/client/informers/externalversions/policyreport/v1alpha1"
policyreport "github.com/kyverno/kyverno/pkg/client/listers/policyreport/v1alpha1"
"github.com/kyverno/kyverno/pkg/config"
"github.com/kyverno/kyverno/pkg/constant"
dclient "github.com/kyverno/kyverno/pkg/dclient"
v1 "k8s.io/api/core/v1"
@ -99,7 +100,7 @@ func NewReportGenerator(
func (g *ReportGenerator) addReportRequest(obj interface{}) {
r := obj.(*report.ReportRequest)
ns := r.GetNamespace()
ns := r.GetLabels()["namespace"]
if ns == "" {
ns = "default"
}
@ -114,7 +115,7 @@ func (g *ReportGenerator) updateReportRequest(old interface{}, cur interface{})
return
}
ns := curReq.GetNamespace()
ns := curReq.GetLabels()["namespace"]
if ns == "" {
ns = "default"
}
@ -270,7 +271,8 @@ func (g *ReportGenerator) aggregateReports(namespace string) (
return nil, nil, fmt.Errorf("unable to get namespace %s: %v", ns.GetName(), err)
}
requests, err := g.reportRequestLister.ReportRequests(ns.GetName()).List(labels.Everything())
selector := labels.SelectorFromSet(labels.Set(map[string]string{"namespace": namespace}))
requests, err := g.reportRequestLister.ReportRequests(config.KubePolicyNamespace).List(selector)
if err != nil {
return nil, nil, fmt.Errorf("unable to list reportRequests within namespace %s: %v", ns, err)
}
@ -425,7 +427,7 @@ func (g *ReportGenerator) cleanupReportRequets(requestsGeneral interface{}) {
defer g.log.V(5).Info("successfully cleaned up report requests")
if requests, ok := requestsGeneral.([]*report.ReportRequest); ok {
for _, request := range requests {
if err := g.dclient.DeleteResource(request.APIVersion, "ReportRequest", request.Namespace, request.Name, false); err != nil {
if err := g.dclient.DeleteResource(request.APIVersion, "ReportRequest", config.KubePolicyNamespace, request.Name, false); err != nil {
if !apierrors.IsNotFound(err) {
g.log.Error(err, "failed to delete report request")
}
@ -435,7 +437,7 @@ func (g *ReportGenerator) cleanupReportRequets(requestsGeneral interface{}) {
if requests, ok := requestsGeneral.([]*report.ClusterReportRequest); ok {
for _, request := range requests {
if err := g.dclient.DeleteResource(request.APIVersion, "ClusterReportRequest", request.Namespace, request.Name, false); err != nil {
if err := g.dclient.DeleteResource(request.APIVersion, "ClusterReportRequest", "", request.Name, false); err != nil {
if !apierrors.IsNotFound(err) {
g.log.Error(err, "failed to delete clusterReportRequest")
}

View file

@ -14,6 +14,7 @@ import (
reportrequest "github.com/kyverno/kyverno/pkg/client/clientset/versioned/typed/policyreport/v1alpha1"
policyreportinformer "github.com/kyverno/kyverno/pkg/client/informers/externalversions/policyreport/v1alpha1"
policyreport "github.com/kyverno/kyverno/pkg/client/listers/policyreport/v1alpha1"
"github.com/kyverno/kyverno/pkg/config"
"github.com/kyverno/kyverno/pkg/constant"
client "github.com/kyverno/kyverno/pkg/dclient"
dclient "github.com/kyverno/kyverno/pkg/dclient"
@ -254,11 +255,11 @@ func (gen *Generator) sync(reportReq *unstructured.Unstructured, info Info) erro
old, err := gen.clusterReportRequestLister.Get(reportReq.GetName())
if err != nil {
if apierrors.IsNotFound(err) {
if _, err = gen.dclient.CreateResource(reportReq.GetAPIVersion(), reportReq.GetKind(), reportReq.GetNamespace(), reportReq, false); err != nil {
if _, err = gen.dclient.CreateResource(reportReq.GetAPIVersion(), reportReq.GetKind(), "", reportReq, false); err != nil {
return fmt.Errorf("failed to create clusterReportRequest: %v", err)
}
logger.V(3).Info("successfully created clusterReportRequest", "namespace", reportReq.GetNamespace(), "name", reportReq.GetName())
logger.V(3).Info("successfully created clusterReportRequest", "name", reportReq.GetName())
return nil
}
return fmt.Errorf("unable to get %s: %v", reportReq.GetKind(), err)
@ -267,14 +268,14 @@ func (gen *Generator) sync(reportReq *unstructured.Unstructured, info Info) erro
return updateReportRequest(gen.dclient, old, reportReq, logger)
}
old, err := gen.reportRequestLister.ReportRequests(reportReq.GetNamespace()).Get(reportReq.GetName())
old, err := gen.reportRequestLister.ReportRequests(config.KubePolicyNamespace).Get(reportReq.GetName())
if err != nil {
if apierrors.IsNotFound(err) {
if _, err = gen.dclient.CreateResource(reportReq.GetAPIVersion(), reportReq.GetKind(), reportReq.GetNamespace(), reportReq, false); err != nil {
if _, err = gen.dclient.CreateResource(reportReq.GetAPIVersion(), reportReq.GetKind(), config.KubePolicyNamespace, reportReq, false); err != nil {
return fmt.Errorf("failed to create %s: %v", reportReq.GetKind(), err)
}
logger.V(3).Info("successfully created reportRequest", "namespace", reportReq.GetNamespace, "name", reportReq.GetName())
logger.V(3).Info("successfully created reportRequest", "name", reportReq.GetName())
return nil
}
return fmt.Errorf("unable to get existing reportRequest %v", err)
@ -301,15 +302,15 @@ func updateReportRequest(dClient *client.Client, old interface{}, new *unstructu
}
if !hasResultsChanged(oldUnstructed, new.UnstructuredContent()) {
log.V(4).Info("unchanged report request", "namespace", new.GetNamespace(), "name", new.GetName())
log.V(4).Info("unchanged report request", "name", new.GetName())
return nil
}
// TODO(shuting): set annotation / label
if _, err = dClient.UpdateResource(new.GetAPIVersion(), new.GetKind(), new.GetNamespace(), new, false); err != nil {
if _, err = dClient.UpdateResource(new.GetAPIVersion(), new.GetKind(), config.KubePolicyNamespace, new, false); err != nil {
return fmt.Errorf("failed to update report request: %v", err)
}
log.V(4).Info("successfully updated report request", "kind", new.GetKind(), "namespace", new.GetNamespace(), "name", new.GetName())
log.V(4).Info("successfully updated report request", "kind", new.GetKind(), "name", new.GetName())
return
}