Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

issue-5100:added logic to check nsPolicies #18

Open
wants to merge 5 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions api/kyverno/v1beta1/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,8 @@ const (
URGenerateResourceNSLabel = "generate.kyverno.io/resource-namespace"
URGenerateResourceKindLabel = "generate.kyverno.io/resource-kind"
URGenerateRetryCountAnnotation = "generate.kyverno.io/retry-count"
URGenerateClonePolicyKindLabel = "generate.kyverno.io/clone-policy-kind"

PolicyKindNamespace = "Namespace"
PolicyKindCluster = "Cluster"
)
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ require (
k8s.io/klog/v2 v2.80.1
k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280
k8s.io/pod-security-admission v0.25.2
k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85
sigs.k8s.io/controller-runtime v0.13.0
sigs.k8s.io/kustomize/api v0.12.1
sigs.k8s.io/kustomize/kyaml v0.13.9
Expand Down Expand Up @@ -361,7 +362,6 @@ require (
gopkg.in/warnings.v0 v0.1.2 // indirect
k8s.io/component-base v0.25.2 // indirect
k8s.io/kubectl v0.25.2 // indirect
k8s.io/utils v0.0.0-20221012122500-cfd413dd9e85 // indirect
sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect
sigs.k8s.io/release-utils v0.7.3 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
Expand Down
12 changes: 8 additions & 4 deletions pkg/background/generate/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -278,10 +278,8 @@ func (c *GenerateController) getPolicySpec(ur kyvernov1beta1.UpdateRequest) (kyv
return policy, err
}
return kyvernov1.ClusterPolicy{
ObjectMeta: metav1.ObjectMeta{
Name: pName,
},
Spec: npolicyObj.Spec,
ObjectMeta: npolicyObj.ObjectMeta,
Spec: npolicyObj.Spec,
}, nil
}

Expand Down Expand Up @@ -493,6 +491,12 @@ func applyRule(log logr.Logger, client dclient.Interface, rule kyvernov1.Rule, r
}

label["policy.kyverno.io/policy-name"] = policy.GetName()
if policy.IsNamespaced() {
label["policy.kyverno.io/policy-kind"] = kyvernov1beta1.PolicyKindNamespace
} else {
label["policy.kyverno.io/policy-kind"] = kyvernov1beta1.PolicyKindCluster
}

label["policy.kyverno.io/gr-name"] = ur.Name
if rdata.Action == Create {
if rule.Generation.Synchronize {
Expand Down
3 changes: 2 additions & 1 deletion pkg/common/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (

"github.com/go-logr/logr"
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
kyvernov1beta1 "github.com/kyverno/kyverno/api/kyverno/v1beta1"
shahpratikr marked this conversation as resolved.
Show resolved Hide resolved
"github.com/kyverno/kyverno/pkg/client/clientset/versioned"
kyvernov1beta1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v1beta1"
"github.com/kyverno/kyverno/pkg/clients/dclient"
Expand Down Expand Up @@ -136,7 +137,7 @@ func removePolicyFromLabels(pName string, labels map[string]string) (bool, map[s
if strings.Contains(policyNames, pName) {
desiredLabels := make(map[string]string, len(labels)-1)
for k, v := range labels {
if k != "generate.kyverno.io/clone-policy-name" {
if k != "generate.kyverno.io/clone-policy-name" && k != kyvernov1beta1.URGenerateClonePolicyKindLabel {
desiredLabels[k] = v
}
}
Expand Down
17 changes: 15 additions & 2 deletions pkg/webhooks/resource/generation/generation.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,7 @@ func (h *generationHandler) HandleUpdatesForGenerateRules(request *admissionv1.A
resource, err := enginutils.ConvertToUnstructured(request.OldObject.Raw)
if err != nil {
h.log.Error(err, "failed to convert object resource to unstructured format")
return
}

resLabels := resource.GetLabels()
Expand Down Expand Up @@ -185,13 +186,24 @@ func (h *generationHandler) handleUpdateGenerateTargetResource(request *admissio
newRes, err := enginutils.ConvertToUnstructured(request.Object.Raw)
if err != nil {
h.log.Error(err, "failed to convert object resource to unstructured format")
return
}

policyKind := kyvernov1beta1.PolicyKindCluster
policyName := resLabels["policy.kyverno.io/policy-name"]

if resLabels["policy.kyverno.io/policy-kind"] == kyvernov1beta1.PolicyKindNamespace {
policyKind = kyvernov1beta1.PolicyKindNamespace
}

targetSourceName := newRes.GetName()
targetSourceKind := newRes.GetKind()
var policy kyvernov1.PolicyInterface
if policyKind == kyvernov1beta1.PolicyKindCluster {
policy, err = h.kyvernoClient.KyvernoV1().ClusterPolicies().Get(context.TODO(), policyName, metav1.GetOptions{})
} else {
policy, err = h.kyvernoClient.KyvernoV1().Policies(newRes.GetNamespace()).Get(context.TODO(), policyName, metav1.GetOptions{})
}

policy, err := h.kyvernoClient.KyvernoV1().ClusterPolicies().Get(context.TODO(), policyName, metav1.GetOptions{})
if err != nil {
h.log.Error(err, "failed to get policy from kyverno client.", "policy name", policyName)
return
Expand All @@ -202,6 +214,7 @@ func (h *generationHandler) handleUpdateGenerateTargetResource(request *admissio
updatedRule, err := getGeneratedByResource(newRes, resLabels, h.client, rule, h.log)
if err != nil {
h.log.V(4).Info("skipping generate policy and resource pattern validaton", "error", err)
continue
} else {
data := updatedRule.Generation.DeepCopy().GetData()
if data != nil {
Expand Down
Loading