Skip to content

Commit

Permalink
fixes #1238
Browse files Browse the repository at this point in the history
  • Loading branch information
realshuting committed Nov 18, 2020
1 parent 50c72e8 commit 2d8092d
Show file tree
Hide file tree
Showing 12 changed files with 28 additions and 23 deletions.
2 changes: 1 addition & 1 deletion charts/kyverno/crds/crds.yaml
Expand Up @@ -1286,7 +1286,7 @@ spec:
type: string
- jsonPath: .metadata.creationTimestamp
name: Age
type: string
type: date
name: v1
schema:
openAPIV3Schema:
Expand Down
2 changes: 1 addition & 1 deletion definitions/crds/kyverno.io_generaterequests.yaml
Expand Up @@ -36,7 +36,7 @@ spec:
type: string
- jsonPath: .metadata.creationTimestamp
name: Age
type: string
type: date
name: v1
schema:
openAPIV3Schema:
Expand Down
2 changes: 1 addition & 1 deletion definitions/install.yaml
Expand Up @@ -1291,7 +1291,7 @@ spec:
type: string
- jsonPath: .metadata.creationTimestamp
name: Age
type: string
type: date
name: v1
schema:
openAPIV3Schema:
Expand Down
2 changes: 1 addition & 1 deletion definitions/install_debug.yaml
Expand Up @@ -1291,7 +1291,7 @@ spec:
type: string
- jsonPath: .metadata.creationTimestamp
name: Age
type: string
type: date
name: v1
schema:
openAPIV3Schema:
Expand Down
2 changes: 1 addition & 1 deletion pkg/api/kyverno/v1/generaterequest_types.go
Expand Up @@ -15,7 +15,7 @@ import (
// +kubebuilder:printcolumn:name="ResourceName",type="string",JSONPath=".spec.resource.name"
// +kubebuilder:printcolumn:name="ResourceNamespace",type="string",JSONPath=".spec.resource.namespace"
// +kubebuilder:printcolumn:name="status",type="string",JSONPath=".status.state"
// +kubebuilder:printcolumn:name="Age",type="string",JSONPath=".metadata.creationTimestamp"
// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp"
// +kubebuilder:resource:shortName=gr
type GenerateRequest struct {
metav1.TypeMeta `json:",inline" yaml:",inline"`
Expand Down
2 changes: 1 addition & 1 deletion pkg/engine/mutation.go
Expand Up @@ -2,6 +2,7 @@ package engine

import (
"time"

"github.com/go-logr/logr"
kyverno "github.com/kyverno/kyverno/pkg/api/kyverno/v1"
"github.com/kyverno/kyverno/pkg/engine/mutate"
Expand Down Expand Up @@ -109,7 +110,6 @@ func startMutateResultResponse(resp *response.EngineResponse, policy kyverno.Clu
resp.PolicyResponse.Resource.Namespace = resource.GetNamespace()
resp.PolicyResponse.Resource.Kind = resource.GetKind()
resp.PolicyResponse.Resource.APIVersion = resource.GetAPIVersion()
// TODO(shuting): set response with mutationFailureAction
}

func endMutateResultResponse(logger logr.Logger, resp *response.EngineResponse, startTime time.Time) {
Expand Down
2 changes: 1 addition & 1 deletion pkg/policymutation/policymutation.go
Expand Up @@ -352,7 +352,7 @@ func generateRulePatches(policy kyverno.ClusterPolicy, controllers string, log l
// when serilizing data, we would expect to drop the omitempty key
// otherwise (without the pointer), it will be set to empty value
// - an empty struct in this case, some may fail the schema validation
// TODO(shuting) may related to:
// may related to:
// https://github.com/kyverno/kyverno/pull/549#discussion_r360088556
// https://github.com/kyverno/kyverno/issues/568

Expand Down
24 changes: 15 additions & 9 deletions pkg/policyreport/builder.go
Expand Up @@ -21,6 +21,10 @@ import (

const (
clusterreportchangerequest string = "clusterreportchangerequest"
resourceLabelName string = "kyverno.io/resource.name"
resourceLabelKind string = "kyverno.io/resource.kind"
resourceLabelNamespace string = "kyverno.io/resource.namespace"
policyLabel string = "kyverno.io/policy"
deletedLabelResource string = "kyverno.io/delete.resource"
deletedLabelResourceKind string = "kyverno.io/delete.resource.kind"
deletedLabelPolicy string = "kyverno.io/delete.policy"
Expand Down Expand Up @@ -111,7 +115,7 @@ func (builder *requestBuilder) build(info Info) (req *unstructured.Unstructured,
}

req = &unstructured.Unstructured{Object: obj}
set(req, fmt.Sprintf("reportchangerequest-%s-%s-%s", info.PolicyName, info.Resource.GetNamespace(), info.Resource.GetName()), info)
set(req, info)
} else {
rr := &request.ClusterReportChangeRequest{
Summary: calculateSummary(results),
Expand All @@ -123,7 +127,7 @@ func (builder *requestBuilder) build(info Info) (req *unstructured.Unstructured,
return nil, err
}
req = &unstructured.Unstructured{Object: obj}
set(req, fmt.Sprintf("%s-%s", clusterreportchangerequest, info.Resource.GetName()), info)
set(req, info)
}

// deletion of a result entry
Expand All @@ -135,7 +139,7 @@ func (builder *requestBuilder) build(info Info) (req *unstructured.Unstructured,
// - set label delete.policy=policyName
if len(info.Rules) == 0 && info.PolicyName == "" {
req.SetLabels(map[string]string{
"namespace": info.Resource.GetNamespace(),
resourceLabelNamespace: info.Resource.GetNamespace(),
deletedLabelResource: info.Resource.GetName(),
deletedLabelResourceKind: info.Resource.GetKind()})
} else if info.PolicyName != "" && reflect.DeepEqual(info.Resource, unstructured.Unstructured{}) {
Expand All @@ -160,21 +164,23 @@ func (builder *requestBuilder) build(info Info) (req *unstructured.Unstructured,
return req, nil
}

func set(obj *unstructured.Unstructured, name string, info Info) {
func set(obj *unstructured.Unstructured, info Info) {
resource := info.Resource
obj.SetName(name)
obj.SetNamespace(config.KubePolicyNamespace)
obj.SetAPIVersion(request.SchemeGroupVersion.Group + "/" + request.SchemeGroupVersion.Version)
if resource.GetNamespace() == "" {
obj.SetGenerateName(clusterreportchangerequest + "-")
obj.SetKind("ClusterReportChangeRequest")
} else {
obj.SetGenerateName("reportchangerequest-")
obj.SetKind("ReportChangeRequest")
}

obj.SetLabels(map[string]string{
"namespace": resource.GetNamespace(),
"policy": info.PolicyName,
"resource": resource.GetKind() + "-" + resource.GetNamespace() + "-" + resource.GetName(),
resourceLabelNamespace: resource.GetNamespace(),
resourceLabelName: resource.GetName(),
resourceLabelKind: resource.GetKind(),
policyLabel: info.PolicyName,
})

if info.FromSync {
Expand Down Expand Up @@ -243,7 +249,7 @@ func (builder *requestBuilder) fetchCategory(policy, ns string) string {
}
}

pol, err := builder.polLister.Policies("").Get(policy)
pol, err := builder.polLister.Policies(ns).Get(policy)
if err == nil {
if ann := pol.GetAnnotations(); ann != nil {
return ann[categoryLabel]
Expand Down
6 changes: 3 additions & 3 deletions pkg/policyreport/policyreport.go
Expand Up @@ -22,7 +22,7 @@ func getDeletedResources(aggregatedRequests interface{}) (resources []deletedRes
dr := deletedResource{
kind: labels[deletedLabelResourceKind],
name: labels[deletedLabelResource],
ns: labels["namespace"],
ns: labels[resourceLabelNamespace],
}

resources = append(resources, dr)
Expand All @@ -33,7 +33,7 @@ func getDeletedResources(aggregatedRequests interface{}) (resources []deletedRes
dr := deletedResource{
kind: labels[deletedLabelResourceKind],
name: labels[deletedLabelResource],
ns: labels["namespace"],
ns: labels[resourceLabelNamespace],
}
resources = append(resources, dr)
}
Expand Down Expand Up @@ -124,7 +124,7 @@ func generateHashKey(result map[string]interface{}, dr deletedResource) (string,
"%s-%s-%s-%s-%s",
result["policy"],
result["rule"],
resource["name"],
resource["kind"],
resource["namespace"],
resource["name"]), true
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/policyreport/reportcontroller.go
Expand Up @@ -116,7 +116,7 @@ func generateCacheKey(changeRequest interface{}) string {
return strings.Join([]string{deletedPolicyKey, policy, rule}, "/")
}

ns := label["namespace"]
ns := label[resourceLabelNamespace]
if ns == "" {
ns = "default"
}
Expand Down Expand Up @@ -398,7 +398,7 @@ func (g *ReportGenerator) aggregateReports(namespace string) (
}
}

selector := labels.SelectorFromSet(labels.Set(map[string]string{"namespace": namespace}))
selector := labels.SelectorFromSet(labels.Set(map[string]string{resourceLabelNamespace: namespace}))
requests, err := g.reportChangeRequestLister.ReportChangeRequests(config.KubePolicyNamespace).List(selector)
if err != nil {
return nil, nil, fmt.Errorf("unable to list reportChangeRequests within namespace %s: %v", ns, err)
Expand Down
2 changes: 1 addition & 1 deletion pkg/policyreport/reportrequest.go
Expand Up @@ -332,7 +332,7 @@ func updateReportChangeRequest(dClient *client.Client, old interface{}, new *uns
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(), config.KubePolicyNamespace, new, false); err != nil {
return fmt.Errorf("failed to update report request: %v", err)
}
Expand Down
1 change: 0 additions & 1 deletion pkg/webhooks/server.go
Expand Up @@ -293,7 +293,6 @@ func (ws *WebhookServer) ResourceMutation(request *v1beta1.AdmissionRequest) *v1
if containRBACinfo(mutatePolicies, validatePolicies, generatePolicies) {
roles, clusterRoles, err = userinfo.GetRoleRef(ws.rbLister, ws.crbLister, request, ws.configHandler)
if err != nil {
// TODO(shuting): continue apply policy if error getting roleRef?
logger.Error(err, "failed to get RBAC information for request")
}
}
Expand Down

0 comments on commit 2d8092d

Please sign in to comment.