mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-06 07:57:07 +00:00
chore: move celexceptions to the new group (#12143)
Signed-off-by: Mariam Fahmy <mariam.fahmy@nirmata.com>
This commit is contained in:
parent
a660088775
commit
7d5750a717
94 changed files with 3742 additions and 316 deletions
20
Makefile
20
Makefile
|
@ -517,6 +517,14 @@ codegen-crds-kyverno: $(CONTROLLER_GEN)
|
||||||
@rm -rf $(CRDS_PATH)/kyverno && mkdir -p $(CRDS_PATH)/kyverno
|
@rm -rf $(CRDS_PATH)/kyverno && mkdir -p $(CRDS_PATH)/kyverno
|
||||||
@GOPATH=$(GOPATH_SHIM) $(CONTROLLER_GEN) paths=./api/kyverno/v1/... paths=./api/kyverno/v1beta1/... paths=./api/kyverno/v2/... paths=./api/kyverno/v2alpha1/... paths=./api/kyverno/v2beta1/... crd:crdVersions=v1,ignoreUnexportedFields=true,generateEmbeddedObjectMeta=false output:dir=$(CRDS_PATH)/kyverno
|
@GOPATH=$(GOPATH_SHIM) $(CONTROLLER_GEN) paths=./api/kyverno/v1/... paths=./api/kyverno/v1beta1/... paths=./api/kyverno/v2/... paths=./api/kyverno/v2alpha1/... paths=./api/kyverno/v2beta1/... crd:crdVersions=v1,ignoreUnexportedFields=true,generateEmbeddedObjectMeta=false output:dir=$(CRDS_PATH)/kyverno
|
||||||
|
|
||||||
|
.PHONY: codegen-crds-policies
|
||||||
|
codegen-crds-policies: ## Generate policies CRDs
|
||||||
|
codegen-crds-policies: $(PACKAGE_SHIM)
|
||||||
|
codegen-crds-policies: $(CONTROLLER_GEN)
|
||||||
|
@echo Generate policies crds... >&2
|
||||||
|
@rm -rf $(CRDS_PATH)/policies.kyverno.io && mkdir -p $(CRDS_PATH)/policies.kyverno.io
|
||||||
|
@GOPATH=$(GOPATH_SHIM) $(CONTROLLER_GEN) paths=./api/policies.kyverno.io/v1alpha1/... crd:crdVersions=v1,ignoreUnexportedFields=true,generateEmbeddedObjectMeta=false output:dir=$(CRDS_PATH)/policies.kyverno.io
|
||||||
|
|
||||||
.PHONY: codegen-crds-policyreport
|
.PHONY: codegen-crds-policyreport
|
||||||
codegen-crds-policyreport: ## Generate policy reports CRDs
|
codegen-crds-policyreport: ## Generate policy reports CRDs
|
||||||
codegen-crds-policyreport: $(PACKAGE_SHIM)
|
codegen-crds-policyreport: $(PACKAGE_SHIM)
|
||||||
|
@ -542,7 +550,7 @@ codegen-crds-cli: $(CONTROLLER_GEN)
|
||||||
@GOPATH=$(GOPATH_SHIM) $(CONTROLLER_GEN) paths=./cmd/cli/kubectl-kyverno/apis/... crd:crdVersions=v1,ignoreUnexportedFields=true,generateEmbeddedObjectMeta=false output:dir=${PWD}/cmd/cli/kubectl-kyverno/config/crds
|
@GOPATH=$(GOPATH_SHIM) $(CONTROLLER_GEN) paths=./cmd/cli/kubectl-kyverno/apis/... crd:crdVersions=v1,ignoreUnexportedFields=true,generateEmbeddedObjectMeta=false output:dir=${PWD}/cmd/cli/kubectl-kyverno/config/crds
|
||||||
|
|
||||||
.PHONY: codegen-crds-all
|
.PHONY: codegen-crds-all
|
||||||
codegen-crds-all: codegen-crds-kyverno codegen-crds-policyreport codegen-crds-reports codegen-cli-crds ## Generate all CRDs
|
codegen-crds-all: codegen-crds-kyverno codegen-crds-policyreport codegen-crds-reports codegen-crds-policies codegen-cli-crds ## Generate all CRDs
|
||||||
|
|
||||||
.PHONY: codegen-helm-docs
|
.PHONY: codegen-helm-docs
|
||||||
codegen-helm-docs: ## Generate helm docs
|
codegen-helm-docs: ## Generate helm docs
|
||||||
|
@ -586,14 +594,15 @@ codegen-cli-docs: $(CLI_BIN) ## Generate CLI docs
|
||||||
.PHONY: codegen-cli-crds
|
.PHONY: codegen-cli-crds
|
||||||
codegen-cli-crds: ## Copy generated CRDs to embed in the CLI
|
codegen-cli-crds: ## Copy generated CRDs to embed in the CLI
|
||||||
codegen-cli-crds: codegen-crds-kyverno
|
codegen-cli-crds: codegen-crds-kyverno
|
||||||
|
codegen-cli-crds: codegen-crds-policies
|
||||||
codegen-cli-crds: codegen-crds-cli
|
codegen-cli-crds: codegen-crds-cli
|
||||||
@echo Copy generated CRDs to embed in the CLI... >&2
|
@echo Copy generated CRDs to embed in the CLI... >&2
|
||||||
@rm -rf cmd/cli/kubectl-kyverno/data/crds && mkdir -p cmd/cli/kubectl-kyverno/data/crds
|
@rm -rf cmd/cli/kubectl-kyverno/data/crds && mkdir -p cmd/cli/kubectl-kyverno/data/crds
|
||||||
@cp config/crds/kyverno/kyverno.io_clusterpolicies.yaml cmd/cli/kubectl-kyverno/data/crds
|
@cp config/crds/kyverno/kyverno.io_clusterpolicies.yaml cmd/cli/kubectl-kyverno/data/crds
|
||||||
@cp config/crds/kyverno/kyverno.io_policies.yaml cmd/cli/kubectl-kyverno/data/crds
|
@cp config/crds/kyverno/kyverno.io_policies.yaml cmd/cli/kubectl-kyverno/data/crds
|
||||||
@cp config/crds/kyverno/kyverno.io_policyexceptions.yaml cmd/cli/kubectl-kyverno/data/crds
|
@cp config/crds/kyverno/kyverno.io_policyexceptions.yaml cmd/cli/kubectl-kyverno/data/crds
|
||||||
@cp config/crds/kyverno/kyverno.io_celpolicyexceptions.yaml cmd/cli/kubectl-kyverno/data/crds
|
@cp config/crds/policies.kyverno.io/policies.kyverno.io_celpolicyexceptions.yaml cmd/cli/kubectl-kyverno/data/crds
|
||||||
@cp config/crds/kyverno/kyverno.io_validatingpolicies.yaml cmd/cli/kubectl-kyverno/data/crds
|
@cp config/crds/policies.kyverno.io/policies.kyverno.io_validatingpolicies.yaml cmd/cli/kubectl-kyverno/data/crds
|
||||||
@cp cmd/cli/kubectl-kyverno/config/crds/* cmd/cli/kubectl-kyverno/data/crds
|
@cp cmd/cli/kubectl-kyverno/config/crds/* cmd/cli/kubectl-kyverno/data/crds
|
||||||
|
|
||||||
.PHONY: codegen-docs-all
|
.PHONY: codegen-docs-all
|
||||||
|
@ -631,15 +640,16 @@ codegen-helm-crds: codegen-crds-all ## Generate helm CRDs
|
||||||
@rm -rf ./charts/kyverno/charts/crds/templates/kyverno.io && mkdir -p ./charts/kyverno/charts/crds/templates/kyverno.io
|
@rm -rf ./charts/kyverno/charts/crds/templates/kyverno.io && mkdir -p ./charts/kyverno/charts/crds/templates/kyverno.io
|
||||||
@rm -rf ./charts/kyverno/charts/crds/templates/reports.kyverno.io && mkdir -p ./charts/kyverno/charts/crds/templates/reports.kyverno.io
|
@rm -rf ./charts/kyverno/charts/crds/templates/reports.kyverno.io && mkdir -p ./charts/kyverno/charts/crds/templates/reports.kyverno.io
|
||||||
@rm -rf ./charts/kyverno/charts/crds/templates/wgpolicyk8s.io && mkdir -p ./charts/kyverno/charts/crds/templates/wgpolicyk8s.io
|
@rm -rf ./charts/kyverno/charts/crds/templates/wgpolicyk8s.io && mkdir -p ./charts/kyverno/charts/crds/templates/wgpolicyk8s.io
|
||||||
|
@rm -rf ./charts/kyverno/charts/crds/templates/policies.kyverno.io && mkdir -p ./charts/kyverno/charts/crds/templates/policies.kyverno.io
|
||||||
$(call generate_crd,kyverno.io_cleanuppolicies.yaml,kyverno,kyverno.io,kyverno,cleanuppolicies)
|
$(call generate_crd,kyverno.io_cleanuppolicies.yaml,kyverno,kyverno.io,kyverno,cleanuppolicies)
|
||||||
$(call generate_crd,kyverno.io_clustercleanuppolicies.yaml,kyverno,kyverno.io,kyverno,clustercleanuppolicies)
|
$(call generate_crd,kyverno.io_clustercleanuppolicies.yaml,kyverno,kyverno.io,kyverno,clustercleanuppolicies)
|
||||||
$(call generate_crd,kyverno.io_clusterpolicies.yaml,kyverno,kyverno.io,kyverno,clusterpolicies)
|
$(call generate_crd,kyverno.io_clusterpolicies.yaml,kyverno,kyverno.io,kyverno,clusterpolicies)
|
||||||
$(call generate_crd,kyverno.io_globalcontextentries.yaml,kyverno,kyverno.io,kyverno,globalcontextentries)
|
$(call generate_crd,kyverno.io_globalcontextentries.yaml,kyverno,kyverno.io,kyverno,globalcontextentries)
|
||||||
$(call generate_crd,kyverno.io_policies.yaml,kyverno,kyverno.io,kyverno,policies)
|
$(call generate_crd,kyverno.io_policies.yaml,kyverno,kyverno.io,kyverno,policies)
|
||||||
$(call generate_crd,kyverno.io_policyexceptions.yaml,kyverno,kyverno.io,kyverno,policyexceptions)
|
$(call generate_crd,kyverno.io_policyexceptions.yaml,kyverno,kyverno.io,kyverno,policyexceptions)
|
||||||
$(call generate_crd,kyverno.io_celpolicyexceptions.yaml,kyverno,kyverno.io,kyverno,celpolicyexceptions)
|
|
||||||
$(call generate_crd,kyverno.io_updaterequests.yaml,kyverno,kyverno.io,kyverno,updaterequests)
|
$(call generate_crd,kyverno.io_updaterequests.yaml,kyverno,kyverno.io,kyverno,updaterequests)
|
||||||
$(call generate_crd,kyverno.io_validatingpolicies.yaml,kyverno,kyverno.io,kyverno,validatingpolicies)
|
$(call generate_crd,policies.kyverno.io_celpolicyexceptions.yaml,policies.kyverno.io,policies.kyverno.io,policies,celpolicyexceptions)
|
||||||
|
$(call generate_crd,policies.kyverno.io_validatingpolicies.yaml,policies.kyverno.io,policies.kyverno.io,policies,validatingpolicies)
|
||||||
$(call generate_crd,reports.kyverno.io_clusterephemeralreports.yaml,reports,reports.kyverno.io,reports,clusterephemeralreports)
|
$(call generate_crd,reports.kyverno.io_clusterephemeralreports.yaml,reports,reports.kyverno.io,reports,clusterephemeralreports)
|
||||||
$(call generate_crd,reports.kyverno.io_ephemeralreports.yaml,reports,reports.kyverno.io,reports,ephemeralreports)
|
$(call generate_crd,reports.kyverno.io_ephemeralreports.yaml,reports,reports.kyverno.io,reports,ephemeralreports)
|
||||||
$(call generate_crd,wgpolicyk8s.io_clusterpolicyreports.yaml,policyreport,wgpolicyk8s.io,wgpolicyk8s,clusterpolicyreports)
|
$(call generate_crd,wgpolicyk8s.io_clusterpolicyreports.yaml,policyreport,wgpolicyk8s.io,wgpolicyk8s,clusterpolicyreports)
|
||||||
|
|
80
api/policies.kyverno.io/v1alpha1/policy_exception.go
Normal file
80
api/policies.kyverno.io/v1alpha1/policy_exception.go
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
"k8s.io/apimachinery/pkg/util/validation/field"
|
||||||
|
)
|
||||||
|
|
||||||
|
// +genclient
|
||||||
|
// +kubebuilder:object:root=true
|
||||||
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
|
|
||||||
|
// PolicyException declares resources to be excluded from specified policies.
|
||||||
|
type CELPolicyException struct {
|
||||||
|
metav1.TypeMeta `json:",inline,omitempty"`
|
||||||
|
metav1.ObjectMeta `json:"metadata,omitempty"`
|
||||||
|
|
||||||
|
// Spec declares policy exception behaviors.
|
||||||
|
Spec CELPolicyExceptionSpec `json:"spec"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *CELPolicyException) GetKind() string {
|
||||||
|
return "CELPolicyException"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate implements programmatic validation
|
||||||
|
func (p *CELPolicyException) Validate() (errs field.ErrorList) {
|
||||||
|
errs = append(errs, p.Spec.Validate(field.NewPath("spec"))...)
|
||||||
|
return errs
|
||||||
|
}
|
||||||
|
|
||||||
|
// PolicyExceptionSpec stores policy exception spec
|
||||||
|
type CELPolicyExceptionSpec struct {
|
||||||
|
// PolicyRefs identifies the policies to which the exception is applied.
|
||||||
|
PolicyRefs []PolicyRef `json:"policyRefs"`
|
||||||
|
|
||||||
|
// MatchConditions is a list of CEL expressions that must be met for a resource to be excluded.
|
||||||
|
// +optional
|
||||||
|
MatchConditions []admissionregistrationv1.MatchCondition `json:"matchConditions,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validate implements programmatic validation
|
||||||
|
func (p *CELPolicyExceptionSpec) Validate(path *field.Path) (errs field.ErrorList) {
|
||||||
|
if len(p.PolicyRefs) == 0 {
|
||||||
|
errs = append(errs, field.Invalid(path.Child("policyRefs"), p.PolicyRefs, "must specify at least one policy ref"))
|
||||||
|
} else {
|
||||||
|
for i, policyRef := range p.PolicyRefs {
|
||||||
|
errs = append(errs, policyRef.Validate(path.Child("policyRefs").Index(i))...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return errs
|
||||||
|
}
|
||||||
|
|
||||||
|
type PolicyRef struct {
|
||||||
|
// Name is the name of the policy
|
||||||
|
Name string `json:"name"`
|
||||||
|
|
||||||
|
// Kind is the kind of the policy
|
||||||
|
Kind string `json:"kind"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *PolicyRef) Validate(path *field.Path) (errs field.ErrorList) {
|
||||||
|
if p.Name == "" {
|
||||||
|
errs = append(errs, field.Invalid(path.Child("name"), p.Name, "must specify policy name"))
|
||||||
|
}
|
||||||
|
if p.Kind == "" {
|
||||||
|
errs = append(errs, field.Invalid(path.Child("kind"), p.Kind, "must specify policy kind"))
|
||||||
|
}
|
||||||
|
return errs
|
||||||
|
}
|
||||||
|
|
||||||
|
// +kubebuilder:object:root=true
|
||||||
|
// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object
|
||||||
|
|
||||||
|
// CELPolicyExceptionList is a list of Policy Exceptions
|
||||||
|
type CELPolicyExceptionList struct {
|
||||||
|
metav1.TypeMeta `json:",inline"`
|
||||||
|
metav1.ListMeta `json:"metadata"`
|
||||||
|
Items []CELPolicyException `json:"items"`
|
||||||
|
}
|
18
api/policies.kyverno.io/v1alpha1/policy_interface.go
Normal file
18
api/policies.kyverno.io/v1alpha1/policy_interface.go
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
// +kubebuilder:object:generate=false
|
||||||
|
type GenericPolicy interface {
|
||||||
|
metav1.Object
|
||||||
|
GetMatchConstraints() admissionregistrationv1.MatchResources
|
||||||
|
GetMatchConditions() []admissionregistrationv1.MatchCondition
|
||||||
|
GetFailurePolicy() admissionregistrationv1.FailurePolicyType
|
||||||
|
GetWebhookConfiguration() *WebhookConfiguration
|
||||||
|
GetVariables() []admissionregistrationv1.Variable
|
||||||
|
GetSpec() *ValidatingPolicySpec
|
||||||
|
GetStatus() *PolicyStatus
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/meta"
|
"k8s.io/apimachinery/pkg/api/meta"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
)
|
)
|
||||||
|
@ -21,6 +22,23 @@ type PolicyStatus struct {
|
||||||
|
|
||||||
// +optional
|
// +optional
|
||||||
Conditions []metav1.Condition `json:"conditions,omitempty"`
|
Conditions []metav1.Condition `json:"conditions,omitempty"`
|
||||||
|
|
||||||
|
// +optional
|
||||||
|
Autogen AutogenStatus `json:"autogen"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AutogenStatus contains autogen status information.
|
||||||
|
type AutogenStatus struct {
|
||||||
|
// Rules is a list of Rule instances. It contains auto generated rules added for pod controllers
|
||||||
|
Rules []AutogenRule `json:"rules,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type AutogenRule struct {
|
||||||
|
MatchConstraints *admissionregistrationv1.MatchResources `json:"matchConstraints,omitempty"`
|
||||||
|
MatchConditions []admissionregistrationv1.MatchCondition `json:"matchConditions,omitempty"`
|
||||||
|
Validations []admissionregistrationv1.Validation `json:"validations,omitempty"`
|
||||||
|
AuditAnnotation []admissionregistrationv1.AuditAnnotation `json:"auditAnnotations,omitempty"`
|
||||||
|
Variables []admissionregistrationv1.Variable `json:"variables,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (status *PolicyStatus) SetReadyByCondition(c PolicyConditionType, s metav1.ConditionStatus, message string) {
|
func (status *PolicyStatus) SetReadyByCondition(c PolicyConditionType, s metav1.ConditionStatus, message string) {
|
||||||
|
|
|
@ -45,6 +45,10 @@ func (s *ValidatingPolicy) GetVariables() []admissionregistrationv1.Variable {
|
||||||
return s.Spec.Variables
|
return s.Spec.Variables
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *ValidatingPolicy) GetSpec() *ValidatingPolicySpec {
|
||||||
|
return &s.Spec
|
||||||
|
}
|
||||||
|
|
||||||
func (s *ValidatingPolicy) GetStatus() *PolicyStatus {
|
func (s *ValidatingPolicy) GetStatus() *PolicyStatus {
|
||||||
return &s.Status
|
return &s.Status
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,21 +22,190 @@ limitations under the License.
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
import (
|
import (
|
||||||
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
v1 "k8s.io/api/admissionregistration/v1"
|
||||||
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
runtime "k8s.io/apimachinery/pkg/runtime"
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *AutogenRule) DeepCopyInto(out *AutogenRule) {
|
||||||
|
*out = *in
|
||||||
|
if in.MatchConstraints != nil {
|
||||||
|
in, out := &in.MatchConstraints, &out.MatchConstraints
|
||||||
|
*out = new(v1.MatchResources)
|
||||||
|
(*in).DeepCopyInto(*out)
|
||||||
|
}
|
||||||
|
if in.MatchConditions != nil {
|
||||||
|
in, out := &in.MatchConditions, &out.MatchConditions
|
||||||
|
*out = make([]v1.MatchCondition, len(*in))
|
||||||
|
copy(*out, *in)
|
||||||
|
}
|
||||||
|
if in.Validations != nil {
|
||||||
|
in, out := &in.Validations, &out.Validations
|
||||||
|
*out = make([]v1.Validation, len(*in))
|
||||||
|
for i := range *in {
|
||||||
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if in.AuditAnnotation != nil {
|
||||||
|
in, out := &in.AuditAnnotation, &out.AuditAnnotation
|
||||||
|
*out = make([]v1.AuditAnnotation, len(*in))
|
||||||
|
copy(*out, *in)
|
||||||
|
}
|
||||||
|
if in.Variables != nil {
|
||||||
|
in, out := &in.Variables, &out.Variables
|
||||||
|
*out = make([]v1.Variable, len(*in))
|
||||||
|
copy(*out, *in)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AutogenRule.
|
||||||
|
func (in *AutogenRule) DeepCopy() *AutogenRule {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(AutogenRule)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *AutogenStatus) DeepCopyInto(out *AutogenStatus) {
|
||||||
|
*out = *in
|
||||||
|
if in.Rules != nil {
|
||||||
|
in, out := &in.Rules, &out.Rules
|
||||||
|
*out = make([]AutogenRule, len(*in))
|
||||||
|
for i := range *in {
|
||||||
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AutogenStatus.
|
||||||
|
func (in *AutogenStatus) DeepCopy() *AutogenStatus {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(AutogenStatus)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *CELPolicyException) DeepCopyInto(out *CELPolicyException) {
|
||||||
|
*out = *in
|
||||||
|
out.TypeMeta = in.TypeMeta
|
||||||
|
in.ObjectMeta.DeepCopyInto(&out.ObjectMeta)
|
||||||
|
in.Spec.DeepCopyInto(&out.Spec)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CELPolicyException.
|
||||||
|
func (in *CELPolicyException) DeepCopy() *CELPolicyException {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(CELPolicyException)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||||
|
func (in *CELPolicyException) DeepCopyObject() runtime.Object {
|
||||||
|
if c := in.DeepCopy(); c != nil {
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *CELPolicyExceptionList) DeepCopyInto(out *CELPolicyExceptionList) {
|
||||||
|
*out = *in
|
||||||
|
out.TypeMeta = in.TypeMeta
|
||||||
|
in.ListMeta.DeepCopyInto(&out.ListMeta)
|
||||||
|
if in.Items != nil {
|
||||||
|
in, out := &in.Items, &out.Items
|
||||||
|
*out = make([]CELPolicyException, len(*in))
|
||||||
|
for i := range *in {
|
||||||
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CELPolicyExceptionList.
|
||||||
|
func (in *CELPolicyExceptionList) DeepCopy() *CELPolicyExceptionList {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(CELPolicyExceptionList)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
|
||||||
|
func (in *CELPolicyExceptionList) DeepCopyObject() runtime.Object {
|
||||||
|
if c := in.DeepCopy(); c != nil {
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *CELPolicyExceptionSpec) DeepCopyInto(out *CELPolicyExceptionSpec) {
|
||||||
|
*out = *in
|
||||||
|
if in.PolicyRefs != nil {
|
||||||
|
in, out := &in.PolicyRefs, &out.PolicyRefs
|
||||||
|
*out = make([]PolicyRef, len(*in))
|
||||||
|
copy(*out, *in)
|
||||||
|
}
|
||||||
|
if in.MatchConditions != nil {
|
||||||
|
in, out := &in.MatchConditions, &out.MatchConditions
|
||||||
|
*out = make([]v1.MatchCondition, len(*in))
|
||||||
|
copy(*out, *in)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CELPolicyExceptionSpec.
|
||||||
|
func (in *CELPolicyExceptionSpec) DeepCopy() *CELPolicyExceptionSpec {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(CELPolicyExceptionSpec)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
|
func (in *PolicyRef) DeepCopyInto(out *PolicyRef) {
|
||||||
|
*out = *in
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PolicyRef.
|
||||||
|
func (in *PolicyRef) DeepCopy() *PolicyRef {
|
||||||
|
if in == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
out := new(PolicyRef)
|
||||||
|
in.DeepCopyInto(out)
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
|
||||||
func (in *PolicyStatus) DeepCopyInto(out *PolicyStatus) {
|
func (in *PolicyStatus) DeepCopyInto(out *PolicyStatus) {
|
||||||
*out = *in
|
*out = *in
|
||||||
if in.Conditions != nil {
|
if in.Conditions != nil {
|
||||||
in, out := &in.Conditions, &out.Conditions
|
in, out := &in.Conditions, &out.Conditions
|
||||||
*out = make([]v1.Condition, len(*in))
|
*out = make([]metav1.Condition, len(*in))
|
||||||
for i := range *in {
|
for i := range *in {
|
||||||
(*in)[i].DeepCopyInto(&(*out)[i])
|
(*in)[i].DeepCopyInto(&(*out)[i])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
in.Autogen.DeepCopyInto(&out.Autogen)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -117,7 +286,7 @@ func (in *ValidatingPolicySpec) DeepCopyInto(out *ValidatingPolicySpec) {
|
||||||
in.ValidatingAdmissionPolicySpec.DeepCopyInto(&out.ValidatingAdmissionPolicySpec)
|
in.ValidatingAdmissionPolicySpec.DeepCopyInto(&out.ValidatingAdmissionPolicySpec)
|
||||||
if in.ValidationAction != nil {
|
if in.ValidationAction != nil {
|
||||||
in, out := &in.ValidationAction, &out.ValidationAction
|
in, out := &in.ValidationAction, &out.ValidationAction
|
||||||
*out = make([]admissionregistrationv1.ValidationAction, len(*in))
|
*out = make([]v1.ValidationAction, len(*in))
|
||||||
copy(*out, *in)
|
copy(*out, *in)
|
||||||
}
|
}
|
||||||
if in.WebhookConfiguration != nil {
|
if in.WebhookConfiguration != nil {
|
||||||
|
|
|
@ -58,6 +58,8 @@ func init() {
|
||||||
// Adds the list of known types to Scheme.
|
// Adds the list of known types to Scheme.
|
||||||
func addKnownTypes(scheme *runtime.Scheme) error {
|
func addKnownTypes(scheme *runtime.Scheme) error {
|
||||||
scheme.AddKnownTypes(SchemeGroupVersion,
|
scheme.AddKnownTypes(SchemeGroupVersion,
|
||||||
|
&CELPolicyException{},
|
||||||
|
&CELPolicyExceptionList{},
|
||||||
&ValidatingPolicy{},
|
&ValidatingPolicy{},
|
||||||
&ValidatingPolicyList{},
|
&ValidatingPolicyList{},
|
||||||
)
|
)
|
||||||
|
|
|
@ -258,6 +258,8 @@ The chart values are organised per component.
|
||||||
|-----|------|---------|-------------|
|
|-----|------|---------|-------------|
|
||||||
| crds.install | bool | `true` | Whether to have Helm install the Kyverno CRDs, if the CRDs are not installed by Helm, they must be added before policies can be created |
|
| crds.install | bool | `true` | Whether to have Helm install the Kyverno CRDs, if the CRDs are not installed by Helm, they must be added before policies can be created |
|
||||||
| crds.groups.kyverno | object | `{"celpolicyexceptions":true,"cleanuppolicies":true,"clustercleanuppolicies":true,"clusterpolicies":true,"globalcontextentries":true,"policies":true,"policyexceptions":true,"updaterequests":true,"validatingpolicies":true}` | Install CRDs in group `kyverno.io` |
|
| crds.groups.kyverno | object | `{"celpolicyexceptions":true,"cleanuppolicies":true,"clustercleanuppolicies":true,"clusterpolicies":true,"globalcontextentries":true,"policies":true,"policyexceptions":true,"updaterequests":true,"validatingpolicies":true}` | Install CRDs in group `kyverno.io` |
|
||||||
|
| crds.groups.policies.validatingpolicies | bool | `true` | |
|
||||||
|
| crds.groups.policies.celpolicyexceptions | bool | `true` | |
|
||||||
| crds.groups.reports | object | `{"clusterephemeralreports":true,"ephemeralreports":true}` | Install CRDs in group `reports.kyverno.io` |
|
| crds.groups.reports | object | `{"clusterephemeralreports":true,"ephemeralreports":true}` | Install CRDs in group `reports.kyverno.io` |
|
||||||
| crds.groups.wgpolicyk8s | object | `{"clusterpolicyreports":true,"policyreports":true}` | Install CRDs in group `wgpolicyk8s.io` |
|
| crds.groups.wgpolicyk8s | object | `{"clusterpolicyreports":true,"policyreports":true}` | Install CRDs in group `wgpolicyk8s.io` |
|
||||||
| crds.annotations | object | `{}` | Additional CRDs annotations |
|
| crds.annotations | object | `{}` | Additional CRDs annotations |
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
| Key | Type | Default | Description |
|
| Key | Type | Default | Description |
|
||||||
|-----|------|---------|-------------|
|
|-----|------|---------|-------------|
|
||||||
| groups.kyverno | object | `{"cleanuppolicies":true,"clustercleanuppolicies":true,"clusterpolicies":true,"globalcontextentries":true,"policies":true,"policyexceptions":true,"updaterequests":true,"validatingpolicies":true}` | This field can be overwritten by setting crds.labels in the parent chart |
|
| groups.kyverno | object | `{"cleanuppolicies":true,"clustercleanuppolicies":true,"clusterpolicies":true,"globalcontextentries":true,"policies":true,"policyexceptions":true,"updaterequests":true,"validatingpolicies":true}` | This field can be overwritten by setting crds.labels in the parent chart |
|
||||||
|
| groups.policies.validatingpolicies | bool | `true` | |
|
||||||
|
| groups.policies.celpolicyexceptions | bool | `true` | |
|
||||||
| groups.reports | object | `{"clusterephemeralreports":true,"ephemeralreports":true}` | This field can be overwritten by setting crds.labels in the parent chart |
|
| groups.reports | object | `{"clusterephemeralreports":true,"ephemeralreports":true}` | This field can be overwritten by setting crds.labels in the parent chart |
|
||||||
| groups.wgpolicyk8s | object | `{"clusterpolicyreports":true,"policyreports":true}` | This field can be overwritten by setting crds.labels in the parent chart |
|
| groups.wgpolicyk8s | object | `{"clusterpolicyreports":true,"policyreports":true}` | This field can be overwritten by setting crds.labels in the parent chart |
|
||||||
| annotations | object | `{}` | This field can be overwritten by setting crds.annotations in the parent chart |
|
| annotations | object | `{}` | This field can be overwritten by setting crds.annotations in the parent chart |
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{{- if .Values.groups.kyverno.celpolicyexceptions }}
|
{{- if .Values.groups.policies.celpolicyexceptions }}
|
||||||
---
|
---
|
||||||
apiVersion: apiextensions.k8s.io/v1
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
|
@ -10,9 +10,9 @@ metadata:
|
||||||
{{- toYaml . | nindent 4 }}
|
{{- toYaml . | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
controller-gen.kubebuilder.io/version: v0.16.1
|
controller-gen.kubebuilder.io/version: v0.16.1
|
||||||
name: celpolicyexceptions.kyverno.io
|
name: celpolicyexceptions.policies.kyverno.io
|
||||||
spec:
|
spec:
|
||||||
group: kyverno.io
|
group: policies.kyverno.io
|
||||||
names:
|
names:
|
||||||
kind: CELPolicyException
|
kind: CELPolicyException
|
||||||
listKind: CELPolicyExceptionList
|
listKind: CELPolicyExceptionList
|
||||||
|
@ -20,7 +20,7 @@ spec:
|
||||||
singular: celpolicyexception
|
singular: celpolicyexception
|
||||||
scope: Namespaced
|
scope: Namespaced
|
||||||
versions:
|
versions:
|
||||||
- name: v2alpha1
|
- name: v1alpha1
|
||||||
schema:
|
schema:
|
||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
description: PolicyException declares resources to be excluded from specified
|
description: PolicyException declares resources to be excluded from specified
|
|
@ -1,4 +1,4 @@
|
||||||
{{- if .Values.groups.kyverno.validatingpolicies }}
|
{{- if .Values.groups.policies.validatingpolicies }}
|
||||||
---
|
---
|
||||||
apiVersion: apiextensions.k8s.io/v1
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
|
@ -10,9 +10,9 @@ metadata:
|
||||||
{{- toYaml . | nindent 4 }}
|
{{- toYaml . | nindent 4 }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
controller-gen.kubebuilder.io/version: v0.16.1
|
controller-gen.kubebuilder.io/version: v0.16.1
|
||||||
name: validatingpolicies.kyverno.io
|
name: validatingpolicies.policies.kyverno.io
|
||||||
spec:
|
spec:
|
||||||
group: kyverno.io
|
group: policies.kyverno.io
|
||||||
names:
|
names:
|
||||||
categories:
|
categories:
|
||||||
- kyverno
|
- kyverno
|
||||||
|
@ -28,7 +28,7 @@ spec:
|
||||||
- jsonPath: .metadata.creationTimestamp
|
- jsonPath: .metadata.creationTimestamp
|
||||||
name: AGE
|
name: AGE
|
||||||
type: date
|
type: date
|
||||||
name: v2alpha1
|
name: v1alpha1
|
||||||
schema:
|
schema:
|
||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
properties:
|
properties:
|
|
@ -19,6 +19,10 @@ groups:
|
||||||
updaterequests: true
|
updaterequests: true
|
||||||
validatingpolicies: true
|
validatingpolicies: true
|
||||||
|
|
||||||
|
policies:
|
||||||
|
validatingpolicies: true
|
||||||
|
celpolicyexceptions: true
|
||||||
|
|
||||||
# -- Install CRDs in group `reports.kyverno.io`
|
# -- Install CRDs in group `reports.kyverno.io`
|
||||||
# -- This field can be overwritten by setting crds.labels in the parent chart
|
# -- This field can be overwritten by setting crds.labels in the parent chart
|
||||||
reports:
|
reports:
|
||||||
|
|
|
@ -73,6 +73,18 @@ rules:
|
||||||
- globalcontextentries
|
- globalcontextentries
|
||||||
- globalcontextentries/status
|
- globalcontextentries/status
|
||||||
- policyexceptions
|
- policyexceptions
|
||||||
|
verbs:
|
||||||
|
- create
|
||||||
|
- delete
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- patch
|
||||||
|
- update
|
||||||
|
- watch
|
||||||
|
- deletecollection
|
||||||
|
- apiGroups:
|
||||||
|
- policies.kyverno.io
|
||||||
|
resources:
|
||||||
- validatingpolicies
|
- validatingpolicies
|
||||||
- validatingpolicies/status
|
- validatingpolicies/status
|
||||||
- celpolicyexceptions
|
- celpolicyexceptions
|
||||||
|
|
|
@ -43,6 +43,18 @@ rules:
|
||||||
- policyexceptions
|
- policyexceptions
|
||||||
- policies
|
- policies
|
||||||
- clusterpolicies
|
- clusterpolicies
|
||||||
|
verbs:
|
||||||
|
- create
|
||||||
|
- delete
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- patch
|
||||||
|
- update
|
||||||
|
- watch
|
||||||
|
- deletecollection
|
||||||
|
- apiGroups:
|
||||||
|
- policies.kyverno.io
|
||||||
|
resources:
|
||||||
- validatingpolicies
|
- validatingpolicies
|
||||||
- validatingpolicies/status
|
- validatingpolicies/status
|
||||||
verbs:
|
verbs:
|
||||||
|
|
|
@ -85,6 +85,10 @@ crds:
|
||||||
validatingpolicies: true
|
validatingpolicies: true
|
||||||
celpolicyexceptions: true
|
celpolicyexceptions: true
|
||||||
|
|
||||||
|
policies:
|
||||||
|
validatingpolicies: true
|
||||||
|
celpolicyexceptions: true
|
||||||
|
|
||||||
# -- Install CRDs in group `reports.kyverno.io`
|
# -- Install CRDs in group `reports.kyverno.io`
|
||||||
reports:
|
reports:
|
||||||
clusterephemeralreports: true
|
clusterephemeralreports: true
|
||||||
|
|
|
@ -13,7 +13,7 @@ import (
|
||||||
"github.com/go-git/go-billy/v5/memfs"
|
"github.com/go-git/go-billy/v5/memfs"
|
||||||
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
||||||
kyvernov2 "github.com/kyverno/kyverno/api/kyverno/v2"
|
kyvernov2 "github.com/kyverno/kyverno/api/kyverno/v2"
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/command"
|
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/command"
|
||||||
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/deprecations"
|
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/deprecations"
|
||||||
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/exception"
|
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/exception"
|
||||||
|
@ -314,7 +314,7 @@ func (c *ApplyCommandConfig) applyValidatingAdmissionPolicies(
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ApplyCommandConfig) applyValidatingPolicies(
|
func (c *ApplyCommandConfig) applyValidatingPolicies(
|
||||||
vps []kyvernov2alpha1.ValidatingPolicy,
|
vps []policiesv1alpha1.ValidatingPolicy,
|
||||||
resources []*unstructured.Unstructured,
|
resources []*unstructured.Unstructured,
|
||||||
namespaceProvider func(string) *corev1.Namespace,
|
namespaceProvider func(string) *corev1.Namespace,
|
||||||
_ *processor.ResultCounts,
|
_ *processor.ResultCounts,
|
||||||
|
@ -464,14 +464,14 @@ func (c *ApplyCommandConfig) loadPolicies() (
|
||||||
[]kyvernov1.PolicyInterface,
|
[]kyvernov1.PolicyInterface,
|
||||||
[]admissionregistrationv1.ValidatingAdmissionPolicy,
|
[]admissionregistrationv1.ValidatingAdmissionPolicy,
|
||||||
[]admissionregistrationv1.ValidatingAdmissionPolicyBinding,
|
[]admissionregistrationv1.ValidatingAdmissionPolicyBinding,
|
||||||
[]kyvernov2alpha1.ValidatingPolicy,
|
[]policiesv1alpha1.ValidatingPolicy,
|
||||||
error,
|
error,
|
||||||
) {
|
) {
|
||||||
// load policies
|
// load policies
|
||||||
var policies []kyvernov1.PolicyInterface
|
var policies []kyvernov1.PolicyInterface
|
||||||
var vaps []admissionregistrationv1.ValidatingAdmissionPolicy
|
var vaps []admissionregistrationv1.ValidatingAdmissionPolicy
|
||||||
var vapBindings []admissionregistrationv1.ValidatingAdmissionPolicyBinding
|
var vapBindings []admissionregistrationv1.ValidatingAdmissionPolicyBinding
|
||||||
var vps []kyvernov2alpha1.ValidatingPolicy
|
var vps []policiesv1alpha1.ValidatingPolicy
|
||||||
|
|
||||||
for _, path := range c.PolicyPaths {
|
for _, path := range c.PolicyPaths {
|
||||||
isGit := source.IsGit(path)
|
isGit := source.IsGit(path)
|
||||||
|
|
|
@ -4,9 +4,9 @@ kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
controller-gen.kubebuilder.io/version: (devel)
|
controller-gen.kubebuilder.io/version: (devel)
|
||||||
name: celpolicyexceptions.kyverno.io
|
name: celpolicyexceptions.policies.kyverno.io
|
||||||
spec:
|
spec:
|
||||||
group: kyverno.io
|
group: policies.kyverno.io
|
||||||
names:
|
names:
|
||||||
kind: CELPolicyException
|
kind: CELPolicyException
|
||||||
listKind: CELPolicyExceptionList
|
listKind: CELPolicyExceptionList
|
||||||
|
@ -14,7 +14,7 @@ spec:
|
||||||
singular: celpolicyexception
|
singular: celpolicyexception
|
||||||
scope: Namespaced
|
scope: Namespaced
|
||||||
versions:
|
versions:
|
||||||
- name: v2alpha1
|
- name: v1alpha1
|
||||||
schema:
|
schema:
|
||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
description: PolicyException declares resources to be excluded from specified
|
description: PolicyException declares resources to be excluded from specified
|
|
@ -4,9 +4,9 @@ kind: CustomResourceDefinition
|
||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
controller-gen.kubebuilder.io/version: (devel)
|
controller-gen.kubebuilder.io/version: (devel)
|
||||||
name: validatingpolicies.kyverno.io
|
name: validatingpolicies.policies.kyverno.io
|
||||||
spec:
|
spec:
|
||||||
group: kyverno.io
|
group: policies.kyverno.io
|
||||||
names:
|
names:
|
||||||
categories:
|
categories:
|
||||||
- kyverno
|
- kyverno
|
||||||
|
@ -22,7 +22,7 @@ spec:
|
||||||
- jsonPath: .metadata.creationTimestamp
|
- jsonPath: .metadata.creationTimestamp
|
||||||
name: AGE
|
name: AGE
|
||||||
type: date
|
type: date
|
||||||
name: v2alpha1
|
name: v1alpha1
|
||||||
schema:
|
schema:
|
||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
properties:
|
properties:
|
|
@ -12,8 +12,8 @@ import (
|
||||||
|
|
||||||
"github.com/go-git/go-billy/v5"
|
"github.com/go-git/go-billy/v5"
|
||||||
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
|
||||||
kyvernov2beta1 "github.com/kyverno/kyverno/api/kyverno/v2beta1"
|
kyvernov2beta1 "github.com/kyverno/kyverno/api/kyverno/v2beta1"
|
||||||
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/data"
|
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/data"
|
||||||
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/experimental"
|
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/experimental"
|
||||||
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/source"
|
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/source"
|
||||||
|
@ -33,7 +33,7 @@ var (
|
||||||
clusterPolicyV2 = kyvernov2beta1.SchemeGroupVersion.WithKind("ClusterPolicy")
|
clusterPolicyV2 = kyvernov2beta1.SchemeGroupVersion.WithKind("ClusterPolicy")
|
||||||
vapV1 = admissionregistrationv1.SchemeGroupVersion.WithKind("ValidatingAdmissionPolicy")
|
vapV1 = admissionregistrationv1.SchemeGroupVersion.WithKind("ValidatingAdmissionPolicy")
|
||||||
vapBindingV1 = admissionregistrationv1.SchemeGroupVersion.WithKind("ValidatingAdmissionPolicyBinding")
|
vapBindingV1 = admissionregistrationv1.SchemeGroupVersion.WithKind("ValidatingAdmissionPolicyBinding")
|
||||||
vpV2alpha1 = kyvernov2alpha1.SchemeGroupVersion.WithKind("ValidatingPolicy")
|
vpV2alpha1 = policiesv1alpha1.SchemeGroupVersion.WithKind("ValidatingPolicy")
|
||||||
LegacyLoader = legacyLoader
|
LegacyLoader = legacyLoader
|
||||||
KubectlValidateLoader = kubectlValidateLoader
|
KubectlValidateLoader = kubectlValidateLoader
|
||||||
defaultLoader = func(path string, bytes []byte) (*LoaderResults, error) {
|
defaultLoader = func(path string, bytes []byte) (*LoaderResults, error) {
|
||||||
|
@ -54,7 +54,7 @@ type LoaderResults struct {
|
||||||
Policies []kyvernov1.PolicyInterface
|
Policies []kyvernov1.PolicyInterface
|
||||||
VAPs []admissionregistrationv1.ValidatingAdmissionPolicy
|
VAPs []admissionregistrationv1.ValidatingAdmissionPolicy
|
||||||
VAPBindings []admissionregistrationv1.ValidatingAdmissionPolicyBinding
|
VAPBindings []admissionregistrationv1.ValidatingAdmissionPolicyBinding
|
||||||
ValidatingPolicies []kyvernov2alpha1.ValidatingPolicy
|
ValidatingPolicies []policiesv1alpha1.ValidatingPolicy
|
||||||
NonFatalErrors []LoaderError
|
NonFatalErrors []LoaderError
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,7 +166,7 @@ func kubectlValidateLoader(path string, content []byte) (*LoaderResults, error)
|
||||||
}
|
}
|
||||||
results.VAPBindings = append(results.VAPBindings, *typed)
|
results.VAPBindings = append(results.VAPBindings, *typed)
|
||||||
case vpV2alpha1:
|
case vpV2alpha1:
|
||||||
typed, err := convert.To[kyvernov2alpha1.ValidatingPolicy](untyped)
|
typed, err := convert.To[policiesv1alpha1.ValidatingPolicy](untyped)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-logr/logr"
|
"github.com/go-logr/logr"
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
"github.com/kyverno/kyverno/cmd/internal"
|
"github.com/kyverno/kyverno/cmd/internal"
|
||||||
"github.com/kyverno/kyverno/pkg/auth/checker"
|
"github.com/kyverno/kyverno/pkg/auth/checker"
|
||||||
"github.com/kyverno/kyverno/pkg/breaker"
|
"github.com/kyverno/kyverno/pkg/breaker"
|
||||||
|
@ -154,7 +154,7 @@ func createrLeaderControllers(
|
||||||
kubeInformer.Admissionregistration().V1().ValidatingWebhookConfigurations(),
|
kubeInformer.Admissionregistration().V1().ValidatingWebhookConfigurations(),
|
||||||
kyvernoInformer.Kyverno().V1().ClusterPolicies(),
|
kyvernoInformer.Kyverno().V1().ClusterPolicies(),
|
||||||
kyvernoInformer.Kyverno().V1().Policies(),
|
kyvernoInformer.Kyverno().V1().Policies(),
|
||||||
kyvernoInformer.Kyverno().V2alpha1().ValidatingPolicies(),
|
kyvernoInformer.Policies().V1alpha1().ValidatingPolicies(),
|
||||||
deploymentInformer,
|
deploymentInformer,
|
||||||
caInformer,
|
caInformer,
|
||||||
kubeKyvernoInformer.Coordination().V1().Leases(),
|
kubeKyvernoInformer.Coordination().V1().Leases(),
|
||||||
|
@ -219,8 +219,8 @@ func createrLeaderControllers(
|
||||||
nil,
|
nil,
|
||||||
[]admissionregistrationv1.RuleWithOperations{{
|
[]admissionregistrationv1.RuleWithOperations{{
|
||||||
Rule: admissionregistrationv1.Rule{
|
Rule: admissionregistrationv1.Rule{
|
||||||
APIGroups: []string{"kyverno.io"},
|
APIGroups: []string{"policies.kyverno.io"},
|
||||||
APIVersions: []string{"v2alpha1"},
|
APIVersions: []string{"v1alpha1"},
|
||||||
Resources: []string{"celpolicyexceptions"},
|
Resources: []string{"celpolicyexceptions"},
|
||||||
},
|
},
|
||||||
Operations: []admissionregistrationv1.OperationType{
|
Operations: []admissionregistrationv1.OperationType{
|
||||||
|
@ -594,7 +594,7 @@ func main() {
|
||||||
{
|
{
|
||||||
// create a controller manager
|
// create a controller manager
|
||||||
scheme := kruntime.NewScheme()
|
scheme := kruntime.NewScheme()
|
||||||
if err := kyvernov2alpha1.Install(scheme); err != nil {
|
if err := policiesv1alpha1.Install(scheme); err != nil {
|
||||||
setup.Logger.Error(err, "failed to initialize scheme")
|
setup.Logger.Error(err, "failed to initialize scheme")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
@ -608,7 +608,7 @@ func main() {
|
||||||
// create compiler
|
// create compiler
|
||||||
compiler := celpolicy.NewCompiler()
|
compiler := celpolicy.NewCompiler()
|
||||||
// create provider
|
// create provider
|
||||||
provider, err := celengine.NewKubeProvider(compiler, mgr, kyvernoInformer.Kyverno().V2alpha1().CELPolicyExceptions().Lister())
|
provider, err := celengine.NewKubeProvider(compiler, mgr, kyvernoInformer.Policies().V1alpha1().CELPolicyExceptions().Lister())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
setup.Logger.Error(err, "failed to create policy provider")
|
setup.Logger.Error(err, "failed to create policy provider")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
|
|
|
@ -76,13 +76,13 @@ func createReportControllers(
|
||||||
}
|
}
|
||||||
kyvernoV1 := kyvernoInformer.Kyverno().V1()
|
kyvernoV1 := kyvernoInformer.Kyverno().V1()
|
||||||
kyvernoV2 := kyvernoInformer.Kyverno().V2()
|
kyvernoV2 := kyvernoInformer.Kyverno().V2()
|
||||||
kyvernoV2alpha1 := kyvernoInformer.Kyverno().V2alpha1()
|
policiesV1alpha1 := kyvernoInformer.Policies().V1alpha1()
|
||||||
if backgroundScan || admissionReports {
|
if backgroundScan || admissionReports {
|
||||||
resourceReportController := resourcereportcontroller.NewController(
|
resourceReportController := resourcereportcontroller.NewController(
|
||||||
client,
|
client,
|
||||||
kyvernoV1.Policies(),
|
kyvernoV1.Policies(),
|
||||||
kyvernoV1.ClusterPolicies(),
|
kyvernoV1.ClusterPolicies(),
|
||||||
kyvernoV2alpha1.ValidatingPolicies(),
|
policiesV1alpha1.ValidatingPolicies(),
|
||||||
vapInformer,
|
vapInformer,
|
||||||
)
|
)
|
||||||
warmups = append(warmups, func(ctx context.Context) error {
|
warmups = append(warmups, func(ctx context.Context) error {
|
||||||
|
@ -102,7 +102,7 @@ func createReportControllers(
|
||||||
metadataFactory,
|
metadataFactory,
|
||||||
kyvernoV1.Policies(),
|
kyvernoV1.Policies(),
|
||||||
kyvernoV1.ClusterPolicies(),
|
kyvernoV1.ClusterPolicies(),
|
||||||
kyvernoV2alpha1.ValidatingPolicies(),
|
policiesV1alpha1.ValidatingPolicies(),
|
||||||
vapInformer,
|
vapInformer,
|
||||||
),
|
),
|
||||||
aggregationWorkers,
|
aggregationWorkers,
|
||||||
|
@ -116,7 +116,7 @@ func createReportControllers(
|
||||||
metadataFactory,
|
metadataFactory,
|
||||||
kyvernoV1.Policies(),
|
kyvernoV1.Policies(),
|
||||||
kyvernoV1.ClusterPolicies(),
|
kyvernoV1.ClusterPolicies(),
|
||||||
kyvernoV2alpha1.ValidatingPolicies(),
|
policiesV1alpha1.ValidatingPolicies(),
|
||||||
kyvernoV2.PolicyExceptions(),
|
kyvernoV2.PolicyExceptions(),
|
||||||
vapInformer,
|
vapInformer,
|
||||||
vapBindingInformer,
|
vapBindingInformer,
|
||||||
|
|
|
@ -0,0 +1,106 @@
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: (devel)
|
||||||
|
name: celpolicyexceptions.policies.kyverno.io
|
||||||
|
spec:
|
||||||
|
group: policies.kyverno.io
|
||||||
|
names:
|
||||||
|
kind: CELPolicyException
|
||||||
|
listKind: CELPolicyExceptionList
|
||||||
|
plural: celpolicyexceptions
|
||||||
|
singular: celpolicyexception
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: PolicyException declares resources to be excluded from specified
|
||||||
|
policies.
|
||||||
|
properties:
|
||||||
|
apiVersion:
|
||||||
|
description: |-
|
||||||
|
APIVersion defines the versioned schema of this representation of an object.
|
||||||
|
Servers should convert recognized schemas to the latest internal value, and
|
||||||
|
may reject unrecognized values.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: |-
|
||||||
|
Kind is a string value representing the REST resource this object represents.
|
||||||
|
Servers may infer this from the endpoint the client submits requests to.
|
||||||
|
Cannot be updated.
|
||||||
|
In CamelCase.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
||||||
|
type: string
|
||||||
|
metadata:
|
||||||
|
type: object
|
||||||
|
spec:
|
||||||
|
description: Spec declares policy exception behaviors.
|
||||||
|
properties:
|
||||||
|
matchConditions:
|
||||||
|
description: MatchConditions is a list of CEL expressions that must
|
||||||
|
be met for a resource to be excluded.
|
||||||
|
items:
|
||||||
|
description: MatchCondition represents a condition which must by
|
||||||
|
fulfilled for a request to be sent to a webhook.
|
||||||
|
properties:
|
||||||
|
expression:
|
||||||
|
description: |-
|
||||||
|
Expression represents the expression which will be evaluated by CEL. Must evaluate to bool.
|
||||||
|
CEL expressions have access to the contents of the AdmissionRequest and Authorizer, organized into CEL variables:
|
||||||
|
|
||||||
|
'object' - The object from the incoming request. The value is null for DELETE requests.
|
||||||
|
'oldObject' - The existing object. The value is null for CREATE requests.
|
||||||
|
'request' - Attributes of the admission request(/pkg/apis/admission/types.go#AdmissionRequest).
|
||||||
|
'authorizer' - A CEL Authorizer. May be used to perform authorization checks for the principal (user or service account) of the request.
|
||||||
|
See https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz
|
||||||
|
'authorizer.requestResource' - A CEL ResourceCheck constructed from the 'authorizer' and configured with the
|
||||||
|
request resource.
|
||||||
|
Documentation on CEL: https://kubernetes.io/docs/reference/using-api/cel/
|
||||||
|
|
||||||
|
Required.
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name is an identifier for this match condition, used for strategic merging of MatchConditions,
|
||||||
|
as well as providing an identifier for logging purposes. A good name should be descriptive of
|
||||||
|
the associated expression.
|
||||||
|
Name must be a qualified name consisting of alphanumeric characters, '-', '_' or '.', and
|
||||||
|
must start and end with an alphanumeric character (e.g. 'MyName', or 'my.name', or
|
||||||
|
'123-abc', regex used for validation is '([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]') with an
|
||||||
|
optional DNS subdomain prefix and '/' (e.g. 'example.com/MyName')
|
||||||
|
|
||||||
|
Required.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- expression
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
policyRefs:
|
||||||
|
description: PolicyRefs identifies the policies to which the exception
|
||||||
|
is applied.
|
||||||
|
items:
|
||||||
|
properties:
|
||||||
|
kind:
|
||||||
|
description: Kind is the kind of the policy
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: Name is the name of the policy
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- kind
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- policyRefs
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
File diff suppressed because it is too large
Load diff
|
@ -195,119 +195,6 @@ data:
|
||||||
---
|
---
|
||||||
apiVersion: apiextensions.k8s.io/v1
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
kind: CustomResourceDefinition
|
kind: CustomResourceDefinition
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app.kubernetes.io/component: crds
|
|
||||||
app.kubernetes.io/instance: kyverno
|
|
||||||
app.kubernetes.io/managed-by: Helm
|
|
||||||
app.kubernetes.io/part-of: kyverno-crds
|
|
||||||
app.kubernetes.io/version: v0.0.0
|
|
||||||
helm.sh/chart: crds-v0.0.0
|
|
||||||
annotations:
|
|
||||||
controller-gen.kubebuilder.io/version: v0.16.1
|
|
||||||
name: celpolicyexceptions.kyverno.io
|
|
||||||
spec:
|
|
||||||
group: kyverno.io
|
|
||||||
names:
|
|
||||||
kind: CELPolicyException
|
|
||||||
listKind: CELPolicyExceptionList
|
|
||||||
plural: celpolicyexceptions
|
|
||||||
singular: celpolicyexception
|
|
||||||
scope: Namespaced
|
|
||||||
versions:
|
|
||||||
- name: v2alpha1
|
|
||||||
schema:
|
|
||||||
openAPIV3Schema:
|
|
||||||
description: PolicyException declares resources to be excluded from specified
|
|
||||||
policies.
|
|
||||||
properties:
|
|
||||||
apiVersion:
|
|
||||||
description: |-
|
|
||||||
APIVersion defines the versioned schema of this representation of an object.
|
|
||||||
Servers should convert recognized schemas to the latest internal value, and
|
|
||||||
may reject unrecognized values.
|
|
||||||
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
|
|
||||||
type: string
|
|
||||||
kind:
|
|
||||||
description: |-
|
|
||||||
Kind is a string value representing the REST resource this object represents.
|
|
||||||
Servers may infer this from the endpoint the client submits requests to.
|
|
||||||
Cannot be updated.
|
|
||||||
In CamelCase.
|
|
||||||
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
|
||||||
type: string
|
|
||||||
metadata:
|
|
||||||
type: object
|
|
||||||
spec:
|
|
||||||
description: Spec declares policy exception behaviors.
|
|
||||||
properties:
|
|
||||||
matchConditions:
|
|
||||||
description: MatchConditions is a list of CEL expressions that must
|
|
||||||
be met for a resource to be excluded.
|
|
||||||
items:
|
|
||||||
description: MatchCondition represents a condition which must by
|
|
||||||
fulfilled for a request to be sent to a webhook.
|
|
||||||
properties:
|
|
||||||
expression:
|
|
||||||
description: |-
|
|
||||||
Expression represents the expression which will be evaluated by CEL. Must evaluate to bool.
|
|
||||||
CEL expressions have access to the contents of the AdmissionRequest and Authorizer, organized into CEL variables:
|
|
||||||
|
|
||||||
'object' - The object from the incoming request. The value is null for DELETE requests.
|
|
||||||
'oldObject' - The existing object. The value is null for CREATE requests.
|
|
||||||
'request' - Attributes of the admission request(/pkg/apis/admission/types.go#AdmissionRequest).
|
|
||||||
'authorizer' - A CEL Authorizer. May be used to perform authorization checks for the principal (user or service account) of the request.
|
|
||||||
See https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz
|
|
||||||
'authorizer.requestResource' - A CEL ResourceCheck constructed from the 'authorizer' and configured with the
|
|
||||||
request resource.
|
|
||||||
Documentation on CEL: https://kubernetes.io/docs/reference/using-api/cel/
|
|
||||||
|
|
||||||
Required.
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
description: |-
|
|
||||||
Name is an identifier for this match condition, used for strategic merging of MatchConditions,
|
|
||||||
as well as providing an identifier for logging purposes. A good name should be descriptive of
|
|
||||||
the associated expression.
|
|
||||||
Name must be a qualified name consisting of alphanumeric characters, '-', '_' or '.', and
|
|
||||||
must start and end with an alphanumeric character (e.g. 'MyName', or 'my.name', or
|
|
||||||
'123-abc', regex used for validation is '([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]') with an
|
|
||||||
optional DNS subdomain prefix and '/' (e.g. 'example.com/MyName')
|
|
||||||
|
|
||||||
Required.
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- expression
|
|
||||||
- name
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
policyRefs:
|
|
||||||
description: PolicyRefs identifies the policies to which the exception
|
|
||||||
is applied.
|
|
||||||
items:
|
|
||||||
properties:
|
|
||||||
kind:
|
|
||||||
description: Kind is the kind of the policy
|
|
||||||
type: string
|
|
||||||
name:
|
|
||||||
description: Name is the name of the policy
|
|
||||||
type: string
|
|
||||||
required:
|
|
||||||
- kind
|
|
||||||
- name
|
|
||||||
type: object
|
|
||||||
type: array
|
|
||||||
required:
|
|
||||||
- policyRefs
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- spec
|
|
||||||
type: object
|
|
||||||
served: true
|
|
||||||
storage: true
|
|
||||||
---
|
|
||||||
apiVersion: apiextensions.k8s.io/v1
|
|
||||||
kind: CustomResourceDefinition
|
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
app.kubernetes.io/component: crds
|
app.kubernetes.io/component: crds
|
||||||
|
@ -48537,9 +48424,122 @@ metadata:
|
||||||
helm.sh/chart: crds-v0.0.0
|
helm.sh/chart: crds-v0.0.0
|
||||||
annotations:
|
annotations:
|
||||||
controller-gen.kubebuilder.io/version: v0.16.1
|
controller-gen.kubebuilder.io/version: v0.16.1
|
||||||
name: validatingpolicies.kyverno.io
|
name: celpolicyexceptions.policies.kyverno.io
|
||||||
spec:
|
spec:
|
||||||
group: kyverno.io
|
group: policies.kyverno.io
|
||||||
|
names:
|
||||||
|
kind: CELPolicyException
|
||||||
|
listKind: CELPolicyExceptionList
|
||||||
|
plural: celpolicyexceptions
|
||||||
|
singular: celpolicyexception
|
||||||
|
scope: Namespaced
|
||||||
|
versions:
|
||||||
|
- name: v1alpha1
|
||||||
|
schema:
|
||||||
|
openAPIV3Schema:
|
||||||
|
description: PolicyException declares resources to be excluded from specified
|
||||||
|
policies.
|
||||||
|
properties:
|
||||||
|
apiVersion:
|
||||||
|
description: |-
|
||||||
|
APIVersion defines the versioned schema of this representation of an object.
|
||||||
|
Servers should convert recognized schemas to the latest internal value, and
|
||||||
|
may reject unrecognized values.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
description: |-
|
||||||
|
Kind is a string value representing the REST resource this object represents.
|
||||||
|
Servers may infer this from the endpoint the client submits requests to.
|
||||||
|
Cannot be updated.
|
||||||
|
In CamelCase.
|
||||||
|
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
|
||||||
|
type: string
|
||||||
|
metadata:
|
||||||
|
type: object
|
||||||
|
spec:
|
||||||
|
description: Spec declares policy exception behaviors.
|
||||||
|
properties:
|
||||||
|
matchConditions:
|
||||||
|
description: MatchConditions is a list of CEL expressions that must
|
||||||
|
be met for a resource to be excluded.
|
||||||
|
items:
|
||||||
|
description: MatchCondition represents a condition which must by
|
||||||
|
fulfilled for a request to be sent to a webhook.
|
||||||
|
properties:
|
||||||
|
expression:
|
||||||
|
description: |-
|
||||||
|
Expression represents the expression which will be evaluated by CEL. Must evaluate to bool.
|
||||||
|
CEL expressions have access to the contents of the AdmissionRequest and Authorizer, organized into CEL variables:
|
||||||
|
|
||||||
|
'object' - The object from the incoming request. The value is null for DELETE requests.
|
||||||
|
'oldObject' - The existing object. The value is null for CREATE requests.
|
||||||
|
'request' - Attributes of the admission request(/pkg/apis/admission/types.go#AdmissionRequest).
|
||||||
|
'authorizer' - A CEL Authorizer. May be used to perform authorization checks for the principal (user or service account) of the request.
|
||||||
|
See https://pkg.go.dev/k8s.io/apiserver/pkg/cel/library#Authz
|
||||||
|
'authorizer.requestResource' - A CEL ResourceCheck constructed from the 'authorizer' and configured with the
|
||||||
|
request resource.
|
||||||
|
Documentation on CEL: https://kubernetes.io/docs/reference/using-api/cel/
|
||||||
|
|
||||||
|
Required.
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: |-
|
||||||
|
Name is an identifier for this match condition, used for strategic merging of MatchConditions,
|
||||||
|
as well as providing an identifier for logging purposes. A good name should be descriptive of
|
||||||
|
the associated expression.
|
||||||
|
Name must be a qualified name consisting of alphanumeric characters, '-', '_' or '.', and
|
||||||
|
must start and end with an alphanumeric character (e.g. 'MyName', or 'my.name', or
|
||||||
|
'123-abc', regex used for validation is '([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]') with an
|
||||||
|
optional DNS subdomain prefix and '/' (e.g. 'example.com/MyName')
|
||||||
|
|
||||||
|
Required.
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- expression
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
policyRefs:
|
||||||
|
description: PolicyRefs identifies the policies to which the exception
|
||||||
|
is applied.
|
||||||
|
items:
|
||||||
|
properties:
|
||||||
|
kind:
|
||||||
|
description: Kind is the kind of the policy
|
||||||
|
type: string
|
||||||
|
name:
|
||||||
|
description: Name is the name of the policy
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- kind
|
||||||
|
- name
|
||||||
|
type: object
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- policyRefs
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- spec
|
||||||
|
type: object
|
||||||
|
served: true
|
||||||
|
storage: true
|
||||||
|
---
|
||||||
|
apiVersion: apiextensions.k8s.io/v1
|
||||||
|
kind: CustomResourceDefinition
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/component: crds
|
||||||
|
app.kubernetes.io/instance: kyverno
|
||||||
|
app.kubernetes.io/managed-by: Helm
|
||||||
|
app.kubernetes.io/part-of: kyverno-crds
|
||||||
|
app.kubernetes.io/version: v0.0.0
|
||||||
|
helm.sh/chart: crds-v0.0.0
|
||||||
|
annotations:
|
||||||
|
controller-gen.kubebuilder.io/version: v0.16.1
|
||||||
|
name: validatingpolicies.policies.kyverno.io
|
||||||
|
spec:
|
||||||
|
group: policies.kyverno.io
|
||||||
names:
|
names:
|
||||||
categories:
|
categories:
|
||||||
- kyverno
|
- kyverno
|
||||||
|
@ -48555,7 +48555,7 @@ spec:
|
||||||
- jsonPath: .metadata.creationTimestamp
|
- jsonPath: .metadata.creationTimestamp
|
||||||
name: AGE
|
name: AGE
|
||||||
type: date
|
type: date
|
||||||
name: v2alpha1
|
name: v1alpha1
|
||||||
schema:
|
schema:
|
||||||
openAPIV3Schema:
|
openAPIV3Schema:
|
||||||
properties:
|
properties:
|
||||||
|
@ -51328,6 +51328,18 @@ rules:
|
||||||
- globalcontextentries
|
- globalcontextentries
|
||||||
- globalcontextentries/status
|
- globalcontextentries/status
|
||||||
- policyexceptions
|
- policyexceptions
|
||||||
|
verbs:
|
||||||
|
- create
|
||||||
|
- delete
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- patch
|
||||||
|
- update
|
||||||
|
- watch
|
||||||
|
- deletecollection
|
||||||
|
- apiGroups:
|
||||||
|
- policies.kyverno.io
|
||||||
|
resources:
|
||||||
- validatingpolicies
|
- validatingpolicies
|
||||||
- validatingpolicies/status
|
- validatingpolicies/status
|
||||||
- celpolicyexceptions
|
- celpolicyexceptions
|
||||||
|
@ -51872,6 +51884,18 @@ rules:
|
||||||
- policyexceptions
|
- policyexceptions
|
||||||
- policies
|
- policies
|
||||||
- clusterpolicies
|
- clusterpolicies
|
||||||
|
verbs:
|
||||||
|
- create
|
||||||
|
- delete
|
||||||
|
- get
|
||||||
|
- list
|
||||||
|
- patch
|
||||||
|
- update
|
||||||
|
- watch
|
||||||
|
- deletecollection
|
||||||
|
- apiGroups:
|
||||||
|
- policies.kyverno.io
|
||||||
|
resources:
|
||||||
- validatingpolicies
|
- validatingpolicies
|
||||||
- validatingpolicies/status
|
- validatingpolicies/status
|
||||||
verbs:
|
verbs:
|
||||||
|
|
|
@ -10656,9 +10656,102 @@ github.com/kyverno/kyverno-json/pkg/apis/policy/v1alpha1.Any
|
||||||
</p>
|
</p>
|
||||||
Resource Types:
|
Resource Types:
|
||||||
<ul><li>
|
<ul><li>
|
||||||
|
<a href="#policies.kyverno.io/v1alpha1.CELPolicyException">CELPolicyException</a>
|
||||||
|
</li><li>
|
||||||
<a href="#policies.kyverno.io/v1alpha1.ValidatingPolicy">ValidatingPolicy</a>
|
<a href="#policies.kyverno.io/v1alpha1.ValidatingPolicy">ValidatingPolicy</a>
|
||||||
</li></ul>
|
</li></ul>
|
||||||
<hr />
|
<hr />
|
||||||
|
<h3 id="policies.kyverno.io/v1alpha1.CELPolicyException">CELPolicyException
|
||||||
|
</h3>
|
||||||
|
<p>
|
||||||
|
<p>PolicyException declares resources to be excluded from specified policies.</p>
|
||||||
|
</p>
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead class="thead-dark">
|
||||||
|
<tr>
|
||||||
|
<th>Field</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>apiVersion</code><br/>
|
||||||
|
string</td>
|
||||||
|
<td>
|
||||||
|
<code>
|
||||||
|
policies.kyverno.io/v1alpha1
|
||||||
|
</code>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>kind</code><br/>
|
||||||
|
string
|
||||||
|
</td>
|
||||||
|
<td><code>CELPolicyException</code></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>metadata</code><br/>
|
||||||
|
<em>
|
||||||
|
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#objectmeta-v1-meta">
|
||||||
|
Kubernetes meta/v1.ObjectMeta
|
||||||
|
</a>
|
||||||
|
</em>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
Refer to the Kubernetes API documentation for the fields of the
|
||||||
|
<code>metadata</code> field.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>spec</code><br/>
|
||||||
|
<em>
|
||||||
|
<a href="#policies.kyverno.io/v1alpha1.CELPolicyExceptionSpec">
|
||||||
|
CELPolicyExceptionSpec
|
||||||
|
</a>
|
||||||
|
</em>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Spec declares policy exception behaviors.</p>
|
||||||
|
<br/>
|
||||||
|
<br/>
|
||||||
|
<table class="table table-striped">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>policyRefs</code><br/>
|
||||||
|
<em>
|
||||||
|
<a href="#policies.kyverno.io/v1alpha1.PolicyRef">
|
||||||
|
[]PolicyRef
|
||||||
|
</a>
|
||||||
|
</em>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>PolicyRefs identifies the policies to which the exception is applied.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>matchConditions</code><br/>
|
||||||
|
<em>
|
||||||
|
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#matchcondition-v1-admissionregistration">
|
||||||
|
[]Kubernetes admissionregistration/v1.MatchCondition
|
||||||
|
</a>
|
||||||
|
</em>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<em>(Optional)</em>
|
||||||
|
<p>MatchConditions is a list of CEL expressions that must be met for a resource to be excluded.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<hr />
|
||||||
<h3 id="policies.kyverno.io/v1alpha1.ValidatingPolicy">ValidatingPolicy
|
<h3 id="policies.kyverno.io/v1alpha1.ValidatingPolicy">ValidatingPolicy
|
||||||
</h3>
|
</h3>
|
||||||
<p>
|
<p>
|
||||||
|
@ -10778,10 +10871,214 @@ PolicyStatus
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<hr />
|
<hr />
|
||||||
|
<h3 id="policies.kyverno.io/v1alpha1.AutogenRule">AutogenRule
|
||||||
|
</h3>
|
||||||
|
<p>
|
||||||
|
(<em>Appears on:</em>
|
||||||
|
<a href="#policies.kyverno.io/v1alpha1.AutogenStatus">AutogenStatus</a>)
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead class="thead-dark">
|
||||||
|
<tr>
|
||||||
|
<th>Field</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>matchConstraints</code><br/>
|
||||||
|
<em>
|
||||||
|
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#matchresources-v1-admissionregistration">
|
||||||
|
Kubernetes admissionregistration/v1.MatchResources
|
||||||
|
</a>
|
||||||
|
</em>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>matchConditions</code><br/>
|
||||||
|
<em>
|
||||||
|
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#matchcondition-v1-admissionregistration">
|
||||||
|
[]Kubernetes admissionregistration/v1.MatchCondition
|
||||||
|
</a>
|
||||||
|
</em>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>validations</code><br/>
|
||||||
|
<em>
|
||||||
|
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#validation-v1-admissionregistration">
|
||||||
|
[]Kubernetes admissionregistration/v1.Validation
|
||||||
|
</a>
|
||||||
|
</em>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>auditAnnotations</code><br/>
|
||||||
|
<em>
|
||||||
|
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#auditannotation-v1-admissionregistration">
|
||||||
|
[]Kubernetes admissionregistration/v1.AuditAnnotation
|
||||||
|
</a>
|
||||||
|
</em>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>variables</code><br/>
|
||||||
|
<em>
|
||||||
|
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#variable-v1-admissionregistration">
|
||||||
|
[]Kubernetes admissionregistration/v1.Variable
|
||||||
|
</a>
|
||||||
|
</em>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<hr />
|
||||||
|
<h3 id="policies.kyverno.io/v1alpha1.AutogenStatus">AutogenStatus
|
||||||
|
</h3>
|
||||||
|
<p>
|
||||||
|
(<em>Appears on:</em>
|
||||||
|
<a href="#policies.kyverno.io/v1alpha1.PolicyStatus">PolicyStatus</a>)
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<p>AutogenStatus contains autogen status information.</p>
|
||||||
|
</p>
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead class="thead-dark">
|
||||||
|
<tr>
|
||||||
|
<th>Field</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>rules</code><br/>
|
||||||
|
<em>
|
||||||
|
<a href="#policies.kyverno.io/v1alpha1.AutogenRule">
|
||||||
|
[]AutogenRule
|
||||||
|
</a>
|
||||||
|
</em>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Rules is a list of Rule instances. It contains auto generated rules added for pod controllers</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<hr />
|
||||||
|
<h3 id="policies.kyverno.io/v1alpha1.CELPolicyExceptionSpec">CELPolicyExceptionSpec
|
||||||
|
</h3>
|
||||||
|
<p>
|
||||||
|
(<em>Appears on:</em>
|
||||||
|
<a href="#policies.kyverno.io/v1alpha1.CELPolicyException">CELPolicyException</a>)
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<p>PolicyExceptionSpec stores policy exception spec</p>
|
||||||
|
</p>
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead class="thead-dark">
|
||||||
|
<tr>
|
||||||
|
<th>Field</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>policyRefs</code><br/>
|
||||||
|
<em>
|
||||||
|
<a href="#policies.kyverno.io/v1alpha1.PolicyRef">
|
||||||
|
[]PolicyRef
|
||||||
|
</a>
|
||||||
|
</em>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>PolicyRefs identifies the policies to which the exception is applied.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>matchConditions</code><br/>
|
||||||
|
<em>
|
||||||
|
<a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#matchcondition-v1-admissionregistration">
|
||||||
|
[]Kubernetes admissionregistration/v1.MatchCondition
|
||||||
|
</a>
|
||||||
|
</em>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<em>(Optional)</em>
|
||||||
|
<p>MatchConditions is a list of CEL expressions that must be met for a resource to be excluded.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<hr />
|
||||||
|
<h3 id="policies.kyverno.io/v1alpha1.GenericPolicy">GenericPolicy
|
||||||
|
</h3>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
<h3 id="policies.kyverno.io/v1alpha1.PolicyConditionType">PolicyConditionType
|
<h3 id="policies.kyverno.io/v1alpha1.PolicyConditionType">PolicyConditionType
|
||||||
(<code>string</code> alias)</p></h3>
|
(<code>string</code> alias)</p></h3>
|
||||||
<p>
|
<p>
|
||||||
</p>
|
</p>
|
||||||
|
<h3 id="policies.kyverno.io/v1alpha1.PolicyRef">PolicyRef
|
||||||
|
</h3>
|
||||||
|
<p>
|
||||||
|
(<em>Appears on:</em>
|
||||||
|
<a href="#policies.kyverno.io/v1alpha1.CELPolicyExceptionSpec">CELPolicyExceptionSpec</a>)
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
</p>
|
||||||
|
<table class="table table-striped">
|
||||||
|
<thead class="thead-dark">
|
||||||
|
<tr>
|
||||||
|
<th>Field</th>
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>name</code><br/>
|
||||||
|
<em>
|
||||||
|
string
|
||||||
|
</em>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Name is the name of the policy</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>kind</code><br/>
|
||||||
|
<em>
|
||||||
|
string
|
||||||
|
</em>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Kind is the kind of the policy</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<hr />
|
||||||
<h3 id="policies.kyverno.io/v1alpha1.PolicyStatus">PolicyStatus
|
<h3 id="policies.kyverno.io/v1alpha1.PolicyStatus">PolicyStatus
|
||||||
</h3>
|
</h3>
|
||||||
<p>
|
<p>
|
||||||
|
@ -10824,6 +11121,19 @@ The conditions array, the reason and message fields contain more detail about th
|
||||||
<em>(Optional)</em>
|
<em>(Optional)</em>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<code>autogen</code><br/>
|
||||||
|
<em>
|
||||||
|
<a href="#policies.kyverno.io/v1alpha1.AutogenStatus">
|
||||||
|
AutogenStatus
|
||||||
|
</a>
|
||||||
|
</em>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<em>(Optional)</em>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/kyverno/kyverno/api/kyverno"
|
"github.com/kyverno/kyverno/api/kyverno"
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ var podControllers = sets.New("daemonsets", "deployments", "jobs", "statefulsets
|
||||||
// - Pod is not defined
|
// - Pod is not defined
|
||||||
//
|
//
|
||||||
// Otherwise it returns all pod controllers
|
// Otherwise it returns all pod controllers
|
||||||
func canAutoGen(spec *kyvernov2alpha1.ValidatingPolicySpec) (bool, sets.Set[string]) {
|
func canAutoGen(spec *policiesv1alpha1.ValidatingPolicySpec) (bool, sets.Set[string]) {
|
||||||
match := spec.MatchConstraints
|
match := spec.MatchConstraints
|
||||||
if match.NamespaceSelector != nil {
|
if match.NamespaceSelector != nil {
|
||||||
if len(match.NamespaceSelector.MatchLabels) > 0 || len(match.NamespaceSelector.MatchExpressions) > 0 {
|
if len(match.NamespaceSelector.MatchLabels) > 0 || len(match.NamespaceSelector.MatchExpressions) > 0 {
|
||||||
|
@ -45,8 +45,8 @@ func canAutoGen(spec *kyvernov2alpha1.ValidatingPolicySpec) (bool, sets.Set[stri
|
||||||
return true, podControllers
|
return true, podControllers
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateRules(spec *kyvernov2alpha1.ValidatingPolicySpec, controllers string) []kyvernov2alpha1.AutogenRule {
|
func generateRules(spec *policiesv1alpha1.ValidatingPolicySpec, controllers string) []policiesv1alpha1.AutogenRule {
|
||||||
var genRules []kyvernov2alpha1.AutogenRule
|
var genRules []policiesv1alpha1.AutogenRule
|
||||||
// strip cronjobs from controllers if exist
|
// strip cronjobs from controllers if exist
|
||||||
isRemoved, controllers := stripCronJob(controllers)
|
isRemoved, controllers := stripCronJob(controllers)
|
||||||
// generate rule for pod controllers
|
// generate rule for pod controllers
|
||||||
|
@ -82,10 +82,10 @@ func stripCronJob(controllers string) (bool, string) {
|
||||||
return isRemoved, strings.Join(newControllers, ",")
|
return isRemoved, strings.Join(newControllers, ",")
|
||||||
}
|
}
|
||||||
|
|
||||||
func ComputeRules(policy kyvernov2alpha1.GenericPolicy) []kyvernov2alpha1.AutogenRule {
|
func ComputeRules(policy policiesv1alpha1.GenericPolicy) []policiesv1alpha1.AutogenRule {
|
||||||
applyAutoGen, desiredControllers := canAutoGen(policy.GetSpec())
|
applyAutoGen, desiredControllers := canAutoGen(policy.GetSpec())
|
||||||
if !applyAutoGen {
|
if !applyAutoGen {
|
||||||
return []kyvernov2alpha1.AutogenRule{}
|
return []policiesv1alpha1.AutogenRule{}
|
||||||
}
|
}
|
||||||
|
|
||||||
var actualControllers sets.Set[string]
|
var actualControllers sets.Set[string]
|
||||||
|
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
"gotest.tools/assert"
|
"gotest.tools/assert"
|
||||||
"k8s.io/apimachinery/pkg/util/sets"
|
"k8s.io/apimachinery/pkg/util/sets"
|
||||||
)
|
)
|
||||||
|
@ -19,7 +19,7 @@ func Test_CanAutoGen(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "policy-with-match-name",
|
name: "policy-with-match-name",
|
||||||
policy: []byte(`{
|
policy: []byte(`{
|
||||||
"apiVersion": "kyverno.io/v2alpha1",
|
"apiVersion": "policies.kyverno.io/v1alpha1",
|
||||||
"kind": "ValidatingPolicy",
|
"kind": "ValidatingPolicy",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"name": "chech-labels"
|
"name": "chech-labels"
|
||||||
|
@ -66,7 +66,7 @@ func Test_CanAutoGen(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "policy-with-match-object-selector",
|
name: "policy-with-match-object-selector",
|
||||||
policy: []byte(`{
|
policy: []byte(`{
|
||||||
"apiVersion": "kyverno.io/v2alpha1",
|
"apiVersion": "policies.kyverno.io/v1alpha1",
|
||||||
"kind": "ValidatingPolicy",
|
"kind": "ValidatingPolicy",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"name": "chech-labels"
|
"name": "chech-labels"
|
||||||
|
@ -115,7 +115,7 @@ func Test_CanAutoGen(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "policy-with-match-namespace-selector",
|
name: "policy-with-match-namespace-selector",
|
||||||
policy: []byte(`{
|
policy: []byte(`{
|
||||||
"apiVersion": "kyverno.io/v2alpha1",
|
"apiVersion": "policies.kyverno.io/v1alpha1",
|
||||||
"kind": "ValidatingPolicy",
|
"kind": "ValidatingPolicy",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"name": "chech-labels"
|
"name": "chech-labels"
|
||||||
|
@ -164,7 +164,7 @@ func Test_CanAutoGen(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "policy-with-match-mixed-kinds-pod-podcontrollers",
|
name: "policy-with-match-mixed-kinds-pod-podcontrollers",
|
||||||
policy: []byte(`{
|
policy: []byte(`{
|
||||||
"apiVersion": "kyverno.io/v2alpha1",
|
"apiVersion": "policies.kyverno.io/v1alpha1",
|
||||||
"kind": "ValidatingPolicy",
|
"kind": "ValidatingPolicy",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"name": "chech-labels"
|
"name": "chech-labels"
|
||||||
|
@ -223,7 +223,7 @@ func Test_CanAutoGen(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "policy-with-match-kinds-pod-only",
|
name: "policy-with-match-kinds-pod-only",
|
||||||
policy: []byte(`{
|
policy: []byte(`{
|
||||||
"apiVersion": "kyverno.io/v2alpha1",
|
"apiVersion": "policies.kyverno.io/v1alpha1",
|
||||||
"kind": "ValidatingPolicy",
|
"kind": "ValidatingPolicy",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"name": "chech-labels"
|
"name": "chech-labels"
|
||||||
|
@ -268,7 +268,7 @@ func Test_CanAutoGen(t *testing.T) {
|
||||||
|
|
||||||
for _, test := range testCases {
|
for _, test := range testCases {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
var policy *kyvernov2alpha1.ValidatingPolicy
|
var policy *policiesv1alpha1.ValidatingPolicy
|
||||||
err := json.Unmarshal(test.policy, &policy)
|
err := json.Unmarshal(test.policy, &policy)
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
|
|
||||||
|
|
|
@ -6,11 +6,11 @@ import (
|
||||||
"slices"
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func generateCronJobRule(spec *kyvernov2alpha1.ValidatingPolicySpec, controllers string) (*kyvernov2alpha1.AutogenRule, error) {
|
func generateCronJobRule(spec *policiesv1alpha1.ValidatingPolicySpec, controllers string) (*policiesv1alpha1.AutogenRule, error) {
|
||||||
operations := spec.MatchConstraints.ResourceRules[0].Operations
|
operations := spec.MatchConstraints.ResourceRules[0].Operations
|
||||||
// create a resource rule for the cronjob resource
|
// create a resource rule for the cronjob resource
|
||||||
matchConstraints := createMatchConstraints(controllers, operations)
|
matchConstraints := createMatchConstraints(controllers, operations)
|
||||||
|
@ -61,7 +61,7 @@ func generateCronJobRule(spec *kyvernov2alpha1.ValidatingPolicySpec, controllers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &kyvernov2alpha1.AutogenRule{
|
return &policiesv1alpha1.AutogenRule{
|
||||||
MatchConstraints: matchConstraints,
|
MatchConstraints: matchConstraints,
|
||||||
MatchConditions: matchConditions,
|
MatchConditions: matchConditions,
|
||||||
Validations: validations,
|
Validations: validations,
|
||||||
|
@ -70,7 +70,7 @@ func generateCronJobRule(spec *kyvernov2alpha1.ValidatingPolicySpec, controllers
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateRuleForControllers(spec *kyvernov2alpha1.ValidatingPolicySpec, controllers string) (*kyvernov2alpha1.AutogenRule, error) {
|
func generateRuleForControllers(spec *policiesv1alpha1.ValidatingPolicySpec, controllers string) (*policiesv1alpha1.AutogenRule, error) {
|
||||||
operations := spec.MatchConstraints.ResourceRules[0].Operations
|
operations := spec.MatchConstraints.ResourceRules[0].Operations
|
||||||
// create a resource rule for pod controllers
|
// create a resource rule for pod controllers
|
||||||
matchConstraints := createMatchConstraints(controllers, operations)
|
matchConstraints := createMatchConstraints(controllers, operations)
|
||||||
|
@ -119,7 +119,7 @@ func generateRuleForControllers(spec *kyvernov2alpha1.ValidatingPolicySpec, cont
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return &kyvernov2alpha1.AutogenRule{
|
return &policiesv1alpha1.AutogenRule{
|
||||||
MatchConstraints: matchConstraints,
|
MatchConstraints: matchConstraints,
|
||||||
MatchConditions: matchConditions,
|
MatchConditions: matchConditions,
|
||||||
Validations: validations,
|
Validations: validations,
|
||||||
|
|
|
@ -5,7 +5,7 @@ import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
"gotest.tools/assert"
|
"gotest.tools/assert"
|
||||||
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
||||||
)
|
)
|
||||||
|
@ -15,7 +15,7 @@ func TestGenerateRuleForControllers(t *testing.T) {
|
||||||
name string
|
name string
|
||||||
controllers string
|
controllers string
|
||||||
policySpec []byte
|
policySpec []byte
|
||||||
generatedRule kyvernov2alpha1.AutogenRule
|
generatedRule policiesv1alpha1.AutogenRule
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "autogen rule for deployments",
|
name: "autogen rule for deployments",
|
||||||
|
@ -46,7 +46,7 @@ func TestGenerateRuleForControllers(t *testing.T) {
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}`),
|
}`),
|
||||||
generatedRule: kyvernov2alpha1.AutogenRule{
|
generatedRule: policiesv1alpha1.AutogenRule{
|
||||||
MatchConstraints: &admissionregistrationv1.MatchResources{
|
MatchConstraints: &admissionregistrationv1.MatchResources{
|
||||||
ResourceRules: []admissionregistrationv1.NamedRuleWithOperations{
|
ResourceRules: []admissionregistrationv1.NamedRuleWithOperations{
|
||||||
{
|
{
|
||||||
|
@ -100,7 +100,7 @@ func TestGenerateRuleForControllers(t *testing.T) {
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}`),
|
}`),
|
||||||
generatedRule: kyvernov2alpha1.AutogenRule{
|
generatedRule: policiesv1alpha1.AutogenRule{
|
||||||
MatchConstraints: &admissionregistrationv1.MatchResources{
|
MatchConstraints: &admissionregistrationv1.MatchResources{
|
||||||
ResourceRules: []admissionregistrationv1.NamedRuleWithOperations{
|
ResourceRules: []admissionregistrationv1.NamedRuleWithOperations{
|
||||||
{
|
{
|
||||||
|
@ -160,7 +160,7 @@ func TestGenerateRuleForControllers(t *testing.T) {
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}`),
|
}`),
|
||||||
generatedRule: kyvernov2alpha1.AutogenRule{
|
generatedRule: policiesv1alpha1.AutogenRule{
|
||||||
MatchConstraints: &admissionregistrationv1.MatchResources{
|
MatchConstraints: &admissionregistrationv1.MatchResources{
|
||||||
ResourceRules: []admissionregistrationv1.NamedRuleWithOperations{
|
ResourceRules: []admissionregistrationv1.NamedRuleWithOperations{
|
||||||
{
|
{
|
||||||
|
@ -195,7 +195,7 @@ func TestGenerateRuleForControllers(t *testing.T) {
|
||||||
|
|
||||||
for _, test := range tests {
|
for _, test := range tests {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
var spec *kyvernov2alpha1.ValidatingPolicySpec
|
var spec *policiesv1alpha1.ValidatingPolicySpec
|
||||||
err := json.Unmarshal(test.policySpec, &spec)
|
err := json.Unmarshal(test.policySpec, &spec)
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ func TestGenerateRuleForControllers(t *testing.T) {
|
||||||
func TestGenerateCronJobRule(t *testing.T) {
|
func TestGenerateCronJobRule(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
policySpec []byte
|
policySpec []byte
|
||||||
generatedRule kyvernov2alpha1.AutogenRule
|
generatedRule policiesv1alpha1.AutogenRule
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
policySpec: []byte(`{
|
policySpec: []byte(`{
|
||||||
|
@ -241,7 +241,7 @@ func TestGenerateCronJobRule(t *testing.T) {
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}`),
|
}`),
|
||||||
generatedRule: kyvernov2alpha1.AutogenRule{
|
generatedRule: policiesv1alpha1.AutogenRule{
|
||||||
MatchConstraints: &admissionregistrationv1.MatchResources{
|
MatchConstraints: &admissionregistrationv1.MatchResources{
|
||||||
ResourceRules: []admissionregistrationv1.NamedRuleWithOperations{
|
ResourceRules: []admissionregistrationv1.NamedRuleWithOperations{
|
||||||
{
|
{
|
||||||
|
@ -299,7 +299,7 @@ func TestGenerateCronJobRule(t *testing.T) {
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}`),
|
}`),
|
||||||
generatedRule: kyvernov2alpha1.AutogenRule{
|
generatedRule: policiesv1alpha1.AutogenRule{
|
||||||
MatchConstraints: &admissionregistrationv1.MatchResources{
|
MatchConstraints: &admissionregistrationv1.MatchResources{
|
||||||
ResourceRules: []admissionregistrationv1.NamedRuleWithOperations{
|
ResourceRules: []admissionregistrationv1.NamedRuleWithOperations{
|
||||||
{
|
{
|
||||||
|
@ -364,7 +364,7 @@ func TestGenerateCronJobRule(t *testing.T) {
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}`),
|
}`),
|
||||||
generatedRule: kyvernov2alpha1.AutogenRule{
|
generatedRule: policiesv1alpha1.AutogenRule{
|
||||||
MatchConstraints: &admissionregistrationv1.MatchResources{
|
MatchConstraints: &admissionregistrationv1.MatchResources{
|
||||||
ResourceRules: []admissionregistrationv1.NamedRuleWithOperations{
|
ResourceRules: []admissionregistrationv1.NamedRuleWithOperations{
|
||||||
{
|
{
|
||||||
|
@ -398,7 +398,7 @@ func TestGenerateCronJobRule(t *testing.T) {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
var spec *kyvernov2alpha1.ValidatingPolicySpec
|
var spec *policiesv1alpha1.ValidatingPolicySpec
|
||||||
err := json.Unmarshal(tt.policySpec, &spec)
|
err := json.Unmarshal(tt.policySpec, &spec)
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
contextlib "github.com/kyverno/kyverno/pkg/cel/libs/context"
|
contextlib "github.com/kyverno/kyverno/pkg/cel/libs/context"
|
||||||
"github.com/kyverno/kyverno/pkg/cel/matching"
|
"github.com/kyverno/kyverno/pkg/cel/matching"
|
||||||
"github.com/kyverno/kyverno/pkg/cel/utils"
|
"github.com/kyverno/kyverno/pkg/cel/utils"
|
||||||
|
@ -79,7 +79,7 @@ type EngineResponse struct {
|
||||||
|
|
||||||
type PolicyResponse struct {
|
type PolicyResponse struct {
|
||||||
Actions sets.Set[admissionregistrationv1.ValidationAction]
|
Actions sets.Set[admissionregistrationv1.ValidationAction]
|
||||||
Policy kyvernov2alpha1.ValidatingPolicy
|
Policy policiesv1alpha1.ValidatingPolicy
|
||||||
Rules []engineapi.RuleResponse
|
Rules []engineapi.RuleResponse
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,9 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
"github.com/kyverno/kyverno/pkg/cel/policy"
|
"github.com/kyverno/kyverno/pkg/cel/policy"
|
||||||
kyvernov2alpha1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v2alpha1"
|
policiesv1alpha1listers "github.com/kyverno/kyverno/pkg/client/listers/policies.kyverno.io/v1alpha1"
|
||||||
"golang.org/x/exp/maps"
|
"golang.org/x/exp/maps"
|
||||||
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
|
@ -23,7 +23,7 @@ import (
|
||||||
|
|
||||||
type CompiledPolicy struct {
|
type CompiledPolicy struct {
|
||||||
Actions sets.Set[admissionregistrationv1.ValidationAction]
|
Actions sets.Set[admissionregistrationv1.ValidationAction]
|
||||||
Policy kyvernov2alpha1.ValidatingPolicy
|
Policy policiesv1alpha1.ValidatingPolicy
|
||||||
CompiledPolicy policy.CompiledPolicy
|
CompiledPolicy policy.CompiledPolicy
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ func (f ProviderFunc) CompiledPolicies(ctx context.Context) ([]CompiledPolicy, e
|
||||||
return f(ctx)
|
return f(ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewProvider(compiler policy.Compiler, policies ...kyvernov2alpha1.ValidatingPolicy) (ProviderFunc, error) {
|
func NewProvider(compiler policy.Compiler, policies ...policiesv1alpha1.ValidatingPolicy) (ProviderFunc, error) {
|
||||||
compiled := make([]CompiledPolicy, 0, len(policies))
|
compiled := make([]CompiledPolicy, 0, len(policies))
|
||||||
for _, vp := range policies {
|
for _, vp := range policies {
|
||||||
policy, err := compiler.Compile(&vp, nil)
|
policy, err := compiler.Compile(&vp, nil)
|
||||||
|
@ -63,18 +63,18 @@ func NewProvider(compiler policy.Compiler, policies ...kyvernov2alpha1.Validatin
|
||||||
func NewKubeProvider(
|
func NewKubeProvider(
|
||||||
compiler policy.Compiler,
|
compiler policy.Compiler,
|
||||||
mgr ctrl.Manager,
|
mgr ctrl.Manager,
|
||||||
polexLister kyvernov2alpha1listers.CELPolicyExceptionLister,
|
polexLister policiesv1alpha1listers.CELPolicyExceptionLister,
|
||||||
) (Provider, error) {
|
) (Provider, error) {
|
||||||
r := newPolicyReconciler(compiler, mgr.GetClient(), polexLister)
|
r := newPolicyReconciler(compiler, mgr.GetClient(), polexLister)
|
||||||
err := ctrl.NewControllerManagedBy(mgr).
|
err := ctrl.NewControllerManagedBy(mgr).
|
||||||
For(&kyvernov2alpha1.ValidatingPolicy{}).
|
For(&policiesv1alpha1.ValidatingPolicy{}).
|
||||||
Watches(&kyvernov2alpha1.CELPolicyException{}, &handler.Funcs{
|
Watches(&policiesv1alpha1.CELPolicyException{}, &handler.Funcs{
|
||||||
CreateFunc: func(
|
CreateFunc: func(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
tce event.TypedCreateEvent[client.Object],
|
tce event.TypedCreateEvent[client.Object],
|
||||||
trli workqueue.TypedRateLimitingInterface[reconcile.Request],
|
trli workqueue.TypedRateLimitingInterface[reconcile.Request],
|
||||||
) {
|
) {
|
||||||
polex := tce.Object.(*kyvernov2alpha1.CELPolicyException)
|
polex := tce.Object.(*policiesv1alpha1.CELPolicyException)
|
||||||
for _, ref := range polex.Spec.PolicyRefs {
|
for _, ref := range polex.Spec.PolicyRefs {
|
||||||
trli.Add(reconcile.Request{
|
trli.Add(reconcile.Request{
|
||||||
NamespacedName: client.ObjectKey{
|
NamespacedName: client.ObjectKey{
|
||||||
|
@ -88,7 +88,7 @@ func NewKubeProvider(
|
||||||
tue event.TypedUpdateEvent[client.Object],
|
tue event.TypedUpdateEvent[client.Object],
|
||||||
trli workqueue.TypedRateLimitingInterface[reconcile.Request],
|
trli workqueue.TypedRateLimitingInterface[reconcile.Request],
|
||||||
) {
|
) {
|
||||||
polex := tue.ObjectNew.(*kyvernov2alpha1.CELPolicyException)
|
polex := tue.ObjectNew.(*policiesv1alpha1.CELPolicyException)
|
||||||
for _, ref := range polex.Spec.PolicyRefs {
|
for _, ref := range polex.Spec.PolicyRefs {
|
||||||
trli.Add(reconcile.Request{
|
trli.Add(reconcile.Request{
|
||||||
NamespacedName: client.ObjectKey{
|
NamespacedName: client.ObjectKey{
|
||||||
|
@ -102,7 +102,7 @@ func NewKubeProvider(
|
||||||
tde event.TypedDeleteEvent[client.Object],
|
tde event.TypedDeleteEvent[client.Object],
|
||||||
trli workqueue.TypedRateLimitingInterface[reconcile.Request],
|
trli workqueue.TypedRateLimitingInterface[reconcile.Request],
|
||||||
) {
|
) {
|
||||||
polex := tde.Object.(*kyvernov2alpha1.CELPolicyException)
|
polex := tde.Object.(*policiesv1alpha1.CELPolicyException)
|
||||||
for _, ref := range polex.Spec.PolicyRefs {
|
for _, ref := range polex.Spec.PolicyRefs {
|
||||||
trli.Add(reconcile.Request{
|
trli.Add(reconcile.Request{
|
||||||
NamespacedName: client.ObjectKey{
|
NamespacedName: client.ObjectKey{
|
||||||
|
@ -124,13 +124,13 @@ type policyReconciler struct {
|
||||||
compiler policy.Compiler
|
compiler policy.Compiler
|
||||||
lock *sync.RWMutex
|
lock *sync.RWMutex
|
||||||
policies map[string]CompiledPolicy
|
policies map[string]CompiledPolicy
|
||||||
polexLister kyvernov2alpha1listers.CELPolicyExceptionLister
|
polexLister policiesv1alpha1listers.CELPolicyExceptionLister
|
||||||
}
|
}
|
||||||
|
|
||||||
func newPolicyReconciler(
|
func newPolicyReconciler(
|
||||||
compiler policy.Compiler,
|
compiler policy.Compiler,
|
||||||
client client.Client,
|
client client.Client,
|
||||||
polexLister kyvernov2alpha1listers.CELPolicyExceptionLister,
|
polexLister policiesv1alpha1listers.CELPolicyExceptionLister,
|
||||||
) *policyReconciler {
|
) *policyReconciler {
|
||||||
return &policyReconciler{
|
return &policyReconciler{
|
||||||
client: client,
|
client: client,
|
||||||
|
@ -142,7 +142,7 @@ func newPolicyReconciler(
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *policyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
|
func (r *policyReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
|
||||||
var policy kyvernov2alpha1.ValidatingPolicy
|
var policy policiesv1alpha1.ValidatingPolicy
|
||||||
err := r.client.Get(ctx, req.NamespacedName, &policy)
|
err := r.client.Get(ctx, req.NamespacedName, &policy)
|
||||||
if errors.IsNotFound(err) {
|
if errors.IsNotFound(err) {
|
||||||
r.lock.Lock()
|
r.lock.Lock()
|
||||||
|
@ -184,12 +184,12 @@ func (r *policyReconciler) CompiledPolicies(ctx context.Context) ([]CompiledPoli
|
||||||
return maps.Values(r.policies), nil
|
return maps.Values(r.policies), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *policyReconciler) ListExceptions(policyName string) ([]kyvernov2alpha1.CELPolicyException, error) {
|
func (r *policyReconciler) ListExceptions(policyName string) ([]policiesv1alpha1.CELPolicyException, error) {
|
||||||
polexList, err := r.polexLister.List(labels.Everything())
|
polexList, err := r.polexLister.List(labels.Everything())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var exceptions []kyvernov2alpha1.CELPolicyException
|
var exceptions []policiesv1alpha1.CELPolicyException
|
||||||
for _, polex := range polexList {
|
for _, polex := range polexList {
|
||||||
for _, ref := range polex.Spec.PolicyRefs {
|
for _, ref := range polex.Spec.PolicyRefs {
|
||||||
if ref.Name == policyName {
|
if ref.Name == policyName {
|
||||||
|
|
|
@ -5,7 +5,7 @@ import (
|
||||||
|
|
||||||
"github.com/google/cel-go/cel"
|
"github.com/google/cel-go/cel"
|
||||||
"github.com/google/cel-go/common/types"
|
"github.com/google/cel-go/common/types"
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
engine "github.com/kyverno/kyverno/pkg/cel"
|
engine "github.com/kyverno/kyverno/pkg/cel"
|
||||||
"github.com/kyverno/kyverno/pkg/cel/libs/context"
|
"github.com/kyverno/kyverno/pkg/cel/libs/context"
|
||||||
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
||||||
|
@ -23,7 +23,7 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
type Compiler interface {
|
type Compiler interface {
|
||||||
Compile(*kyvernov2alpha1.ValidatingPolicy, []kyvernov2alpha1.CELPolicyException) (CompiledPolicy, field.ErrorList)
|
Compile(*policiesv1alpha1.ValidatingPolicy, []policiesv1alpha1.CELPolicyException) (CompiledPolicy, field.ErrorList)
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewCompiler() Compiler {
|
func NewCompiler() Compiler {
|
||||||
|
@ -32,7 +32,7 @@ func NewCompiler() Compiler {
|
||||||
|
|
||||||
type compiler struct{}
|
type compiler struct{}
|
||||||
|
|
||||||
func (c *compiler) Compile(policy *kyvernov2alpha1.ValidatingPolicy, exceptions []kyvernov2alpha1.CELPolicyException) (CompiledPolicy, field.ErrorList) {
|
func (c *compiler) Compile(policy *policiesv1alpha1.ValidatingPolicy, exceptions []policiesv1alpha1.CELPolicyException) (CompiledPolicy, field.ErrorList) {
|
||||||
var allErrs field.ErrorList
|
var allErrs field.ErrorList
|
||||||
base, err := engine.NewEnv()
|
base, err := engine.NewEnv()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -3,7 +3,7 @@ package policy
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
@ -12,19 +12,19 @@ import (
|
||||||
func Test_compiler_Compile(t *testing.T) {
|
func Test_compiler_Compile(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
policy *kyvernov2alpha1.ValidatingPolicy
|
policy *policiesv1alpha1.ValidatingPolicy
|
||||||
wantErr bool
|
wantErr bool
|
||||||
}{{
|
}{{
|
||||||
name: "simple",
|
name: "simple",
|
||||||
policy: &kyvernov2alpha1.ValidatingPolicy{
|
policy: &policiesv1alpha1.ValidatingPolicy{
|
||||||
TypeMeta: metav1.TypeMeta{
|
TypeMeta: metav1.TypeMeta{
|
||||||
APIVersion: kyvernov2alpha1.GroupVersion.String(),
|
APIVersion: policiesv1alpha1.GroupVersion.String(),
|
||||||
Kind: "ValidatingPolicy",
|
Kind: "ValidatingPolicy",
|
||||||
},
|
},
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
},
|
},
|
||||||
Spec: kyvernov2alpha1.ValidatingPolicySpec{
|
Spec: policiesv1alpha1.ValidatingPolicySpec{
|
||||||
ValidatingAdmissionPolicySpec: admissionregistrationv1.ValidatingAdmissionPolicySpec{
|
ValidatingAdmissionPolicySpec: admissionregistrationv1.ValidatingAdmissionPolicySpec{
|
||||||
Variables: []admissionregistrationv1.Variable{{
|
Variables: []admissionregistrationv1.Variable{{
|
||||||
Name: "environment",
|
Name: "environment",
|
||||||
|
@ -38,15 +38,15 @@ func Test_compiler_Compile(t *testing.T) {
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
name: "with configmap",
|
name: "with configmap",
|
||||||
policy: &kyvernov2alpha1.ValidatingPolicy{
|
policy: &policiesv1alpha1.ValidatingPolicy{
|
||||||
TypeMeta: metav1.TypeMeta{
|
TypeMeta: metav1.TypeMeta{
|
||||||
APIVersion: kyvernov2alpha1.GroupVersion.String(),
|
APIVersion: policiesv1alpha1.GroupVersion.String(),
|
||||||
Kind: "ValidatingPolicy",
|
Kind: "ValidatingPolicy",
|
||||||
},
|
},
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
},
|
},
|
||||||
Spec: kyvernov2alpha1.ValidatingPolicySpec{
|
Spec: policiesv1alpha1.ValidatingPolicySpec{
|
||||||
ValidatingAdmissionPolicySpec: admissionregistrationv1.ValidatingAdmissionPolicySpec{
|
ValidatingAdmissionPolicySpec: admissionregistrationv1.ValidatingAdmissionPolicySpec{
|
||||||
Variables: []admissionregistrationv1.Variable{{
|
Variables: []admissionregistrationv1.Variable{{
|
||||||
Name: "cm",
|
Name: "cm",
|
||||||
|
|
|
@ -0,0 +1,87 @@
|
||||||
|
/*
|
||||||
|
Copyright The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
v1 "k8s.io/api/admissionregistration/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
// AutogenRuleApplyConfiguration represents an declarative configuration of the AutogenRule type for use
|
||||||
|
// with apply.
|
||||||
|
type AutogenRuleApplyConfiguration struct {
|
||||||
|
MatchConstraints *v1.MatchResources `json:"matchConstraints,omitempty"`
|
||||||
|
MatchConditions []v1.MatchCondition `json:"matchConditions,omitempty"`
|
||||||
|
Validations []v1.Validation `json:"validations,omitempty"`
|
||||||
|
AuditAnnotation []v1.AuditAnnotation `json:"auditAnnotations,omitempty"`
|
||||||
|
Variables []v1.Variable `json:"variables,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AutogenRuleApplyConfiguration constructs an declarative configuration of the AutogenRule type for use with
|
||||||
|
// apply.
|
||||||
|
func AutogenRule() *AutogenRuleApplyConfiguration {
|
||||||
|
return &AutogenRuleApplyConfiguration{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMatchConstraints sets the MatchConstraints field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the MatchConstraints field is set to the value of the last call.
|
||||||
|
func (b *AutogenRuleApplyConfiguration) WithMatchConstraints(value v1.MatchResources) *AutogenRuleApplyConfiguration {
|
||||||
|
b.MatchConstraints = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMatchConditions adds the given value to the MatchConditions field in the declarative configuration
|
||||||
|
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
||||||
|
// If called multiple times, values provided by each call will be appended to the MatchConditions field.
|
||||||
|
func (b *AutogenRuleApplyConfiguration) WithMatchConditions(values ...v1.MatchCondition) *AutogenRuleApplyConfiguration {
|
||||||
|
for i := range values {
|
||||||
|
b.MatchConditions = append(b.MatchConditions, values[i])
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithValidations adds the given value to the Validations field in the declarative configuration
|
||||||
|
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
||||||
|
// If called multiple times, values provided by each call will be appended to the Validations field.
|
||||||
|
func (b *AutogenRuleApplyConfiguration) WithValidations(values ...v1.Validation) *AutogenRuleApplyConfiguration {
|
||||||
|
for i := range values {
|
||||||
|
b.Validations = append(b.Validations, values[i])
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithAuditAnnotation adds the given value to the AuditAnnotation field in the declarative configuration
|
||||||
|
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
||||||
|
// If called multiple times, values provided by each call will be appended to the AuditAnnotation field.
|
||||||
|
func (b *AutogenRuleApplyConfiguration) WithAuditAnnotation(values ...v1.AuditAnnotation) *AutogenRuleApplyConfiguration {
|
||||||
|
for i := range values {
|
||||||
|
b.AuditAnnotation = append(b.AuditAnnotation, values[i])
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithVariables adds the given value to the Variables field in the declarative configuration
|
||||||
|
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
||||||
|
// If called multiple times, values provided by each call will be appended to the Variables field.
|
||||||
|
func (b *AutogenRuleApplyConfiguration) WithVariables(values ...v1.Variable) *AutogenRuleApplyConfiguration {
|
||||||
|
for i := range values {
|
||||||
|
b.Variables = append(b.Variables, values[i])
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
/*
|
||||||
|
Copyright The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
// AutogenStatusApplyConfiguration represents an declarative configuration of the AutogenStatus type for use
|
||||||
|
// with apply.
|
||||||
|
type AutogenStatusApplyConfiguration struct {
|
||||||
|
Rules []AutogenRuleApplyConfiguration `json:"rules,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AutogenStatusApplyConfiguration constructs an declarative configuration of the AutogenStatus type for use with
|
||||||
|
// apply.
|
||||||
|
func AutogenStatus() *AutogenStatusApplyConfiguration {
|
||||||
|
return &AutogenStatusApplyConfiguration{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithRules adds the given value to the Rules field in the declarative configuration
|
||||||
|
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
||||||
|
// If called multiple times, values provided by each call will be appended to the Rules field.
|
||||||
|
func (b *AutogenStatusApplyConfiguration) WithRules(values ...*AutogenRuleApplyConfiguration) *AutogenStatusApplyConfiguration {
|
||||||
|
for i := range values {
|
||||||
|
if values[i] == nil {
|
||||||
|
panic("nil value passed to WithRules")
|
||||||
|
}
|
||||||
|
b.Rules = append(b.Rules, *values[i])
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
|
@ -0,0 +1,210 @@
|
||||||
|
/*
|
||||||
|
Copyright The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
types "k8s.io/apimachinery/pkg/types"
|
||||||
|
v1 "k8s.io/client-go/applyconfigurations/meta/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CELPolicyExceptionApplyConfiguration represents an declarative configuration of the CELPolicyException type for use
|
||||||
|
// with apply.
|
||||||
|
type CELPolicyExceptionApplyConfiguration struct {
|
||||||
|
v1.TypeMetaApplyConfiguration `json:",omitempty,inline"`
|
||||||
|
*v1.ObjectMetaApplyConfiguration `json:"metadata,omitempty"`
|
||||||
|
Spec *CELPolicyExceptionSpecApplyConfiguration `json:"spec,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CELPolicyException constructs an declarative configuration of the CELPolicyException type for use with
|
||||||
|
// apply.
|
||||||
|
func CELPolicyException(name, namespace string) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b := &CELPolicyExceptionApplyConfiguration{}
|
||||||
|
b.WithName(name)
|
||||||
|
b.WithNamespace(namespace)
|
||||||
|
b.WithKind("CELPolicyException")
|
||||||
|
b.WithAPIVersion("policies.kyverno.io/v1alpha1")
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithKind sets the Kind field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the Kind field is set to the value of the last call.
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) WithKind(value string) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b.Kind = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithAPIVersion sets the APIVersion field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the APIVersion field is set to the value of the last call.
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) WithAPIVersion(value string) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b.APIVersion = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithName sets the Name field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the Name field is set to the value of the last call.
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) WithName(value string) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.Name = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithGenerateName sets the GenerateName field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the GenerateName field is set to the value of the last call.
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) WithGenerateName(value string) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.GenerateName = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithNamespace sets the Namespace field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the Namespace field is set to the value of the last call.
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) WithNamespace(value string) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.Namespace = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithUID sets the UID field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the UID field is set to the value of the last call.
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) WithUID(value types.UID) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.UID = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithResourceVersion sets the ResourceVersion field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the ResourceVersion field is set to the value of the last call.
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) WithResourceVersion(value string) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.ResourceVersion = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithGeneration sets the Generation field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the Generation field is set to the value of the last call.
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) WithGeneration(value int64) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.Generation = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithCreationTimestamp sets the CreationTimestamp field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the CreationTimestamp field is set to the value of the last call.
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) WithCreationTimestamp(value metav1.Time) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.CreationTimestamp = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithDeletionTimestamp sets the DeletionTimestamp field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the DeletionTimestamp field is set to the value of the last call.
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) WithDeletionTimestamp(value metav1.Time) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.DeletionTimestamp = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithDeletionGracePeriodSeconds sets the DeletionGracePeriodSeconds field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the DeletionGracePeriodSeconds field is set to the value of the last call.
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) WithDeletionGracePeriodSeconds(value int64) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
b.DeletionGracePeriodSeconds = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithLabels puts the entries into the Labels field in the declarative configuration
|
||||||
|
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the entries provided by each call will be put on the Labels field,
|
||||||
|
// overwriting an existing map entries in Labels field with the same key.
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) WithLabels(entries map[string]string) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
if b.Labels == nil && len(entries) > 0 {
|
||||||
|
b.Labels = make(map[string]string, len(entries))
|
||||||
|
}
|
||||||
|
for k, v := range entries {
|
||||||
|
b.Labels[k] = v
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithAnnotations puts the entries into the Annotations field in the declarative configuration
|
||||||
|
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the entries provided by each call will be put on the Annotations field,
|
||||||
|
// overwriting an existing map entries in Annotations field with the same key.
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) WithAnnotations(entries map[string]string) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
if b.Annotations == nil && len(entries) > 0 {
|
||||||
|
b.Annotations = make(map[string]string, len(entries))
|
||||||
|
}
|
||||||
|
for k, v := range entries {
|
||||||
|
b.Annotations[k] = v
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithOwnerReferences adds the given value to the OwnerReferences field in the declarative configuration
|
||||||
|
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
||||||
|
// If called multiple times, values provided by each call will be appended to the OwnerReferences field.
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) WithOwnerReferences(values ...*v1.OwnerReferenceApplyConfiguration) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
for i := range values {
|
||||||
|
if values[i] == nil {
|
||||||
|
panic("nil value passed to WithOwnerReferences")
|
||||||
|
}
|
||||||
|
b.OwnerReferences = append(b.OwnerReferences, *values[i])
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithFinalizers adds the given value to the Finalizers field in the declarative configuration
|
||||||
|
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
||||||
|
// If called multiple times, values provided by each call will be appended to the Finalizers field.
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) WithFinalizers(values ...string) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b.ensureObjectMetaApplyConfigurationExists()
|
||||||
|
for i := range values {
|
||||||
|
b.Finalizers = append(b.Finalizers, values[i])
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) ensureObjectMetaApplyConfigurationExists() {
|
||||||
|
if b.ObjectMetaApplyConfiguration == nil {
|
||||||
|
b.ObjectMetaApplyConfiguration = &v1.ObjectMetaApplyConfiguration{}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithSpec sets the Spec field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the Spec field is set to the value of the last call.
|
||||||
|
func (b *CELPolicyExceptionApplyConfiguration) WithSpec(value *CELPolicyExceptionSpecApplyConfiguration) *CELPolicyExceptionApplyConfiguration {
|
||||||
|
b.Spec = value
|
||||||
|
return b
|
||||||
|
}
|
|
@ -0,0 +1,59 @@
|
||||||
|
/*
|
||||||
|
Copyright The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
v1 "k8s.io/api/admissionregistration/v1"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CELPolicyExceptionSpecApplyConfiguration represents an declarative configuration of the CELPolicyExceptionSpec type for use
|
||||||
|
// with apply.
|
||||||
|
type CELPolicyExceptionSpecApplyConfiguration struct {
|
||||||
|
PolicyRefs []PolicyRefApplyConfiguration `json:"policyRefs,omitempty"`
|
||||||
|
MatchConditions []v1.MatchCondition `json:"matchConditions,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CELPolicyExceptionSpecApplyConfiguration constructs an declarative configuration of the CELPolicyExceptionSpec type for use with
|
||||||
|
// apply.
|
||||||
|
func CELPolicyExceptionSpec() *CELPolicyExceptionSpecApplyConfiguration {
|
||||||
|
return &CELPolicyExceptionSpecApplyConfiguration{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithPolicyRefs adds the given value to the PolicyRefs field in the declarative configuration
|
||||||
|
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
||||||
|
// If called multiple times, values provided by each call will be appended to the PolicyRefs field.
|
||||||
|
func (b *CELPolicyExceptionSpecApplyConfiguration) WithPolicyRefs(values ...*PolicyRefApplyConfiguration) *CELPolicyExceptionSpecApplyConfiguration {
|
||||||
|
for i := range values {
|
||||||
|
if values[i] == nil {
|
||||||
|
panic("nil value passed to WithPolicyRefs")
|
||||||
|
}
|
||||||
|
b.PolicyRefs = append(b.PolicyRefs, *values[i])
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithMatchConditions adds the given value to the MatchConditions field in the declarative configuration
|
||||||
|
// and returns the receiver, so that objects can be build by chaining "With" function invocations.
|
||||||
|
// If called multiple times, values provided by each call will be appended to the MatchConditions field.
|
||||||
|
func (b *CELPolicyExceptionSpecApplyConfiguration) WithMatchConditions(values ...v1.MatchCondition) *CELPolicyExceptionSpecApplyConfiguration {
|
||||||
|
for i := range values {
|
||||||
|
b.MatchConditions = append(b.MatchConditions, values[i])
|
||||||
|
}
|
||||||
|
return b
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
Copyright The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by applyconfiguration-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
// PolicyRefApplyConfiguration represents an declarative configuration of the PolicyRef type for use
|
||||||
|
// with apply.
|
||||||
|
type PolicyRefApplyConfiguration struct {
|
||||||
|
Name *string `json:"name,omitempty"`
|
||||||
|
Kind *string `json:"kind,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// PolicyRefApplyConfiguration constructs an declarative configuration of the PolicyRef type for use with
|
||||||
|
// apply.
|
||||||
|
func PolicyRef() *PolicyRefApplyConfiguration {
|
||||||
|
return &PolicyRefApplyConfiguration{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithName sets the Name field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the Name field is set to the value of the last call.
|
||||||
|
func (b *PolicyRefApplyConfiguration) WithName(value string) *PolicyRefApplyConfiguration {
|
||||||
|
b.Name = &value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithKind sets the Kind field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the Kind field is set to the value of the last call.
|
||||||
|
func (b *PolicyRefApplyConfiguration) WithKind(value string) *PolicyRefApplyConfiguration {
|
||||||
|
b.Kind = &value
|
||||||
|
return b
|
||||||
|
}
|
|
@ -25,8 +25,9 @@ import (
|
||||||
// PolicyStatusApplyConfiguration represents an declarative configuration of the PolicyStatus type for use
|
// PolicyStatusApplyConfiguration represents an declarative configuration of the PolicyStatus type for use
|
||||||
// with apply.
|
// with apply.
|
||||||
type PolicyStatusApplyConfiguration struct {
|
type PolicyStatusApplyConfiguration struct {
|
||||||
Ready *bool `json:"ready,omitempty"`
|
Ready *bool `json:"ready,omitempty"`
|
||||||
Conditions []v1.Condition `json:"conditions,omitempty"`
|
Conditions []v1.Condition `json:"conditions,omitempty"`
|
||||||
|
Autogen *AutogenStatusApplyConfiguration `json:"autogen,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// PolicyStatusApplyConfiguration constructs an declarative configuration of the PolicyStatus type for use with
|
// PolicyStatusApplyConfiguration constructs an declarative configuration of the PolicyStatus type for use with
|
||||||
|
@ -52,3 +53,11 @@ func (b *PolicyStatusApplyConfiguration) WithConditions(values ...v1.Condition)
|
||||||
}
|
}
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// WithAutogen sets the Autogen field in the declarative configuration to the given value
|
||||||
|
// and returns the receiver, so that objects can be built by chaining "With" function invocations.
|
||||||
|
// If called multiple times, the Autogen field is set to the value of the last call.
|
||||||
|
func (b *PolicyStatusApplyConfiguration) WithAutogen(value *AutogenStatusApplyConfiguration) *PolicyStatusApplyConfiguration {
|
||||||
|
b.Autogen = value
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
|
|
@ -273,6 +273,16 @@ func ForKind(kind schema.GroupVersionKind) interface{} {
|
||||||
return &kyvernov2beta1.ValidationApplyConfiguration{}
|
return &kyvernov2beta1.ValidationApplyConfiguration{}
|
||||||
|
|
||||||
// Group=policies.kyverno.io, Version=v1alpha1
|
// Group=policies.kyverno.io, Version=v1alpha1
|
||||||
|
case v1alpha1.SchemeGroupVersion.WithKind("AutogenRule"):
|
||||||
|
return &policieskyvernoiov1alpha1.AutogenRuleApplyConfiguration{}
|
||||||
|
case v1alpha1.SchemeGroupVersion.WithKind("AutogenStatus"):
|
||||||
|
return &policieskyvernoiov1alpha1.AutogenStatusApplyConfiguration{}
|
||||||
|
case v1alpha1.SchemeGroupVersion.WithKind("CELPolicyException"):
|
||||||
|
return &policieskyvernoiov1alpha1.CELPolicyExceptionApplyConfiguration{}
|
||||||
|
case v1alpha1.SchemeGroupVersion.WithKind("CELPolicyExceptionSpec"):
|
||||||
|
return &policieskyvernoiov1alpha1.CELPolicyExceptionSpecApplyConfiguration{}
|
||||||
|
case v1alpha1.SchemeGroupVersion.WithKind("PolicyRef"):
|
||||||
|
return &policieskyvernoiov1alpha1.PolicyRefApplyConfiguration{}
|
||||||
case v1alpha1.SchemeGroupVersion.WithKind("PolicyStatus"):
|
case v1alpha1.SchemeGroupVersion.WithKind("PolicyStatus"):
|
||||||
return &policieskyvernoiov1alpha1.PolicyStatusApplyConfiguration{}
|
return &policieskyvernoiov1alpha1.PolicyStatusApplyConfiguration{}
|
||||||
case v1alpha1.SchemeGroupVersion.WithKind("ValidatingPolicy"):
|
case v1alpha1.SchemeGroupVersion.WithKind("ValidatingPolicy"):
|
||||||
|
|
|
@ -0,0 +1,178 @@
|
||||||
|
/*
|
||||||
|
Copyright The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by client-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
v1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
|
scheme "github.com/kyverno/kyverno/pkg/client/clientset/versioned/scheme"
|
||||||
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
types "k8s.io/apimachinery/pkg/types"
|
||||||
|
watch "k8s.io/apimachinery/pkg/watch"
|
||||||
|
rest "k8s.io/client-go/rest"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CELPolicyExceptionsGetter has a method to return a CELPolicyExceptionInterface.
|
||||||
|
// A group's client should implement this interface.
|
||||||
|
type CELPolicyExceptionsGetter interface {
|
||||||
|
CELPolicyExceptions(namespace string) CELPolicyExceptionInterface
|
||||||
|
}
|
||||||
|
|
||||||
|
// CELPolicyExceptionInterface has methods to work with CELPolicyException resources.
|
||||||
|
type CELPolicyExceptionInterface interface {
|
||||||
|
Create(ctx context.Context, cELPolicyException *v1alpha1.CELPolicyException, opts v1.CreateOptions) (*v1alpha1.CELPolicyException, error)
|
||||||
|
Update(ctx context.Context, cELPolicyException *v1alpha1.CELPolicyException, opts v1.UpdateOptions) (*v1alpha1.CELPolicyException, error)
|
||||||
|
Delete(ctx context.Context, name string, opts v1.DeleteOptions) error
|
||||||
|
DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error
|
||||||
|
Get(ctx context.Context, name string, opts v1.GetOptions) (*v1alpha1.CELPolicyException, error)
|
||||||
|
List(ctx context.Context, opts v1.ListOptions) (*v1alpha1.CELPolicyExceptionList, error)
|
||||||
|
Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error)
|
||||||
|
Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.CELPolicyException, err error)
|
||||||
|
CELPolicyExceptionExpansion
|
||||||
|
}
|
||||||
|
|
||||||
|
// cELPolicyExceptions implements CELPolicyExceptionInterface
|
||||||
|
type cELPolicyExceptions struct {
|
||||||
|
client rest.Interface
|
||||||
|
ns string
|
||||||
|
}
|
||||||
|
|
||||||
|
// newCELPolicyExceptions returns a CELPolicyExceptions
|
||||||
|
func newCELPolicyExceptions(c *PoliciesV1alpha1Client, namespace string) *cELPolicyExceptions {
|
||||||
|
return &cELPolicyExceptions{
|
||||||
|
client: c.RESTClient(),
|
||||||
|
ns: namespace,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get takes name of the cELPolicyException, and returns the corresponding cELPolicyException object, and an error if there is any.
|
||||||
|
func (c *cELPolicyExceptions) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.CELPolicyException, err error) {
|
||||||
|
result = &v1alpha1.CELPolicyException{}
|
||||||
|
err = c.client.Get().
|
||||||
|
Namespace(c.ns).
|
||||||
|
Resource("celpolicyexceptions").
|
||||||
|
Name(name).
|
||||||
|
VersionedParams(&options, scheme.ParameterCodec).
|
||||||
|
Do(ctx).
|
||||||
|
Into(result)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// List takes label and field selectors, and returns the list of CELPolicyExceptions that match those selectors.
|
||||||
|
func (c *cELPolicyExceptions) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.CELPolicyExceptionList, err error) {
|
||||||
|
var timeout time.Duration
|
||||||
|
if opts.TimeoutSeconds != nil {
|
||||||
|
timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
|
||||||
|
}
|
||||||
|
result = &v1alpha1.CELPolicyExceptionList{}
|
||||||
|
err = c.client.Get().
|
||||||
|
Namespace(c.ns).
|
||||||
|
Resource("celpolicyexceptions").
|
||||||
|
VersionedParams(&opts, scheme.ParameterCodec).
|
||||||
|
Timeout(timeout).
|
||||||
|
Do(ctx).
|
||||||
|
Into(result)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Watch returns a watch.Interface that watches the requested cELPolicyExceptions.
|
||||||
|
func (c *cELPolicyExceptions) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
|
||||||
|
var timeout time.Duration
|
||||||
|
if opts.TimeoutSeconds != nil {
|
||||||
|
timeout = time.Duration(*opts.TimeoutSeconds) * time.Second
|
||||||
|
}
|
||||||
|
opts.Watch = true
|
||||||
|
return c.client.Get().
|
||||||
|
Namespace(c.ns).
|
||||||
|
Resource("celpolicyexceptions").
|
||||||
|
VersionedParams(&opts, scheme.ParameterCodec).
|
||||||
|
Timeout(timeout).
|
||||||
|
Watch(ctx)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create takes the representation of a cELPolicyException and creates it. Returns the server's representation of the cELPolicyException, and an error, if there is any.
|
||||||
|
func (c *cELPolicyExceptions) Create(ctx context.Context, cELPolicyException *v1alpha1.CELPolicyException, opts v1.CreateOptions) (result *v1alpha1.CELPolicyException, err error) {
|
||||||
|
result = &v1alpha1.CELPolicyException{}
|
||||||
|
err = c.client.Post().
|
||||||
|
Namespace(c.ns).
|
||||||
|
Resource("celpolicyexceptions").
|
||||||
|
VersionedParams(&opts, scheme.ParameterCodec).
|
||||||
|
Body(cELPolicyException).
|
||||||
|
Do(ctx).
|
||||||
|
Into(result)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update takes the representation of a cELPolicyException and updates it. Returns the server's representation of the cELPolicyException, and an error, if there is any.
|
||||||
|
func (c *cELPolicyExceptions) Update(ctx context.Context, cELPolicyException *v1alpha1.CELPolicyException, opts v1.UpdateOptions) (result *v1alpha1.CELPolicyException, err error) {
|
||||||
|
result = &v1alpha1.CELPolicyException{}
|
||||||
|
err = c.client.Put().
|
||||||
|
Namespace(c.ns).
|
||||||
|
Resource("celpolicyexceptions").
|
||||||
|
Name(cELPolicyException.Name).
|
||||||
|
VersionedParams(&opts, scheme.ParameterCodec).
|
||||||
|
Body(cELPolicyException).
|
||||||
|
Do(ctx).
|
||||||
|
Into(result)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete takes name of the cELPolicyException and deletes it. Returns an error if one occurs.
|
||||||
|
func (c *cELPolicyExceptions) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
|
||||||
|
return c.client.Delete().
|
||||||
|
Namespace(c.ns).
|
||||||
|
Resource("celpolicyexceptions").
|
||||||
|
Name(name).
|
||||||
|
Body(&opts).
|
||||||
|
Do(ctx).
|
||||||
|
Error()
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteCollection deletes a collection of objects.
|
||||||
|
func (c *cELPolicyExceptions) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
|
||||||
|
var timeout time.Duration
|
||||||
|
if listOpts.TimeoutSeconds != nil {
|
||||||
|
timeout = time.Duration(*listOpts.TimeoutSeconds) * time.Second
|
||||||
|
}
|
||||||
|
return c.client.Delete().
|
||||||
|
Namespace(c.ns).
|
||||||
|
Resource("celpolicyexceptions").
|
||||||
|
VersionedParams(&listOpts, scheme.ParameterCodec).
|
||||||
|
Timeout(timeout).
|
||||||
|
Body(&opts).
|
||||||
|
Do(ctx).
|
||||||
|
Error()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Patch applies the patch and returns the patched cELPolicyException.
|
||||||
|
func (c *cELPolicyExceptions) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.CELPolicyException, err error) {
|
||||||
|
result = &v1alpha1.CELPolicyException{}
|
||||||
|
err = c.client.Patch(pt).
|
||||||
|
Namespace(c.ns).
|
||||||
|
Resource("celpolicyexceptions").
|
||||||
|
Name(name).
|
||||||
|
SubResource(subresources...).
|
||||||
|
VersionedParams(&opts, scheme.ParameterCodec).
|
||||||
|
Body(data).
|
||||||
|
Do(ctx).
|
||||||
|
Into(result)
|
||||||
|
return
|
||||||
|
}
|
|
@ -0,0 +1,129 @@
|
||||||
|
/*
|
||||||
|
Copyright The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by client-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package fake
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
v1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
labels "k8s.io/apimachinery/pkg/labels"
|
||||||
|
types "k8s.io/apimachinery/pkg/types"
|
||||||
|
watch "k8s.io/apimachinery/pkg/watch"
|
||||||
|
testing "k8s.io/client-go/testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
// FakeCELPolicyExceptions implements CELPolicyExceptionInterface
|
||||||
|
type FakeCELPolicyExceptions struct {
|
||||||
|
Fake *FakePoliciesV1alpha1
|
||||||
|
ns string
|
||||||
|
}
|
||||||
|
|
||||||
|
var celpolicyexceptionsResource = v1alpha1.SchemeGroupVersion.WithResource("celpolicyexceptions")
|
||||||
|
|
||||||
|
var celpolicyexceptionsKind = v1alpha1.SchemeGroupVersion.WithKind("CELPolicyException")
|
||||||
|
|
||||||
|
// Get takes name of the cELPolicyException, and returns the corresponding cELPolicyException object, and an error if there is any.
|
||||||
|
func (c *FakeCELPolicyExceptions) Get(ctx context.Context, name string, options v1.GetOptions) (result *v1alpha1.CELPolicyException, err error) {
|
||||||
|
obj, err := c.Fake.
|
||||||
|
Invokes(testing.NewGetAction(celpolicyexceptionsResource, c.ns, name), &v1alpha1.CELPolicyException{})
|
||||||
|
|
||||||
|
if obj == nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return obj.(*v1alpha1.CELPolicyException), err
|
||||||
|
}
|
||||||
|
|
||||||
|
// List takes label and field selectors, and returns the list of CELPolicyExceptions that match those selectors.
|
||||||
|
func (c *FakeCELPolicyExceptions) List(ctx context.Context, opts v1.ListOptions) (result *v1alpha1.CELPolicyExceptionList, err error) {
|
||||||
|
obj, err := c.Fake.
|
||||||
|
Invokes(testing.NewListAction(celpolicyexceptionsResource, celpolicyexceptionsKind, c.ns, opts), &v1alpha1.CELPolicyExceptionList{})
|
||||||
|
|
||||||
|
if obj == nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
label, _, _ := testing.ExtractFromListOptions(opts)
|
||||||
|
if label == nil {
|
||||||
|
label = labels.Everything()
|
||||||
|
}
|
||||||
|
list := &v1alpha1.CELPolicyExceptionList{ListMeta: obj.(*v1alpha1.CELPolicyExceptionList).ListMeta}
|
||||||
|
for _, item := range obj.(*v1alpha1.CELPolicyExceptionList).Items {
|
||||||
|
if label.Matches(labels.Set(item.Labels)) {
|
||||||
|
list.Items = append(list.Items, item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Watch returns a watch.Interface that watches the requested cELPolicyExceptions.
|
||||||
|
func (c *FakeCELPolicyExceptions) Watch(ctx context.Context, opts v1.ListOptions) (watch.Interface, error) {
|
||||||
|
return c.Fake.
|
||||||
|
InvokesWatch(testing.NewWatchAction(celpolicyexceptionsResource, c.ns, opts))
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create takes the representation of a cELPolicyException and creates it. Returns the server's representation of the cELPolicyException, and an error, if there is any.
|
||||||
|
func (c *FakeCELPolicyExceptions) Create(ctx context.Context, cELPolicyException *v1alpha1.CELPolicyException, opts v1.CreateOptions) (result *v1alpha1.CELPolicyException, err error) {
|
||||||
|
obj, err := c.Fake.
|
||||||
|
Invokes(testing.NewCreateAction(celpolicyexceptionsResource, c.ns, cELPolicyException), &v1alpha1.CELPolicyException{})
|
||||||
|
|
||||||
|
if obj == nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return obj.(*v1alpha1.CELPolicyException), err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update takes the representation of a cELPolicyException and updates it. Returns the server's representation of the cELPolicyException, and an error, if there is any.
|
||||||
|
func (c *FakeCELPolicyExceptions) Update(ctx context.Context, cELPolicyException *v1alpha1.CELPolicyException, opts v1.UpdateOptions) (result *v1alpha1.CELPolicyException, err error) {
|
||||||
|
obj, err := c.Fake.
|
||||||
|
Invokes(testing.NewUpdateAction(celpolicyexceptionsResource, c.ns, cELPolicyException), &v1alpha1.CELPolicyException{})
|
||||||
|
|
||||||
|
if obj == nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return obj.(*v1alpha1.CELPolicyException), err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete takes name of the cELPolicyException and deletes it. Returns an error if one occurs.
|
||||||
|
func (c *FakeCELPolicyExceptions) Delete(ctx context.Context, name string, opts v1.DeleteOptions) error {
|
||||||
|
_, err := c.Fake.
|
||||||
|
Invokes(testing.NewDeleteActionWithOptions(celpolicyexceptionsResource, c.ns, name, opts), &v1alpha1.CELPolicyException{})
|
||||||
|
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteCollection deletes a collection of objects.
|
||||||
|
func (c *FakeCELPolicyExceptions) DeleteCollection(ctx context.Context, opts v1.DeleteOptions, listOpts v1.ListOptions) error {
|
||||||
|
action := testing.NewDeleteCollectionAction(celpolicyexceptionsResource, c.ns, listOpts)
|
||||||
|
|
||||||
|
_, err := c.Fake.Invokes(action, &v1alpha1.CELPolicyExceptionList{})
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Patch applies the patch and returns the patched cELPolicyException.
|
||||||
|
func (c *FakeCELPolicyExceptions) Patch(ctx context.Context, name string, pt types.PatchType, data []byte, opts v1.PatchOptions, subresources ...string) (result *v1alpha1.CELPolicyException, err error) {
|
||||||
|
obj, err := c.Fake.
|
||||||
|
Invokes(testing.NewPatchSubresourceAction(celpolicyexceptionsResource, c.ns, name, pt, data, subresources...), &v1alpha1.CELPolicyException{})
|
||||||
|
|
||||||
|
if obj == nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return obj.(*v1alpha1.CELPolicyException), err
|
||||||
|
}
|
|
@ -28,6 +28,10 @@ type FakePoliciesV1alpha1 struct {
|
||||||
*testing.Fake
|
*testing.Fake
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *FakePoliciesV1alpha1) CELPolicyExceptions(namespace string) v1alpha1.CELPolicyExceptionInterface {
|
||||||
|
return &FakeCELPolicyExceptions{c, namespace}
|
||||||
|
}
|
||||||
|
|
||||||
func (c *FakePoliciesV1alpha1) ValidatingPolicies() v1alpha1.ValidatingPolicyInterface {
|
func (c *FakePoliciesV1alpha1) ValidatingPolicies() v1alpha1.ValidatingPolicyInterface {
|
||||||
return &FakeValidatingPolicies{c}
|
return &FakeValidatingPolicies{c}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,4 +18,6 @@ limitations under the License.
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
|
type CELPolicyExceptionExpansion interface{}
|
||||||
|
|
||||||
type ValidatingPolicyExpansion interface{}
|
type ValidatingPolicyExpansion interface{}
|
||||||
|
|
|
@ -28,6 +28,7 @@ import (
|
||||||
|
|
||||||
type PoliciesV1alpha1Interface interface {
|
type PoliciesV1alpha1Interface interface {
|
||||||
RESTClient() rest.Interface
|
RESTClient() rest.Interface
|
||||||
|
CELPolicyExceptionsGetter
|
||||||
ValidatingPoliciesGetter
|
ValidatingPoliciesGetter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,6 +37,10 @@ type PoliciesV1alpha1Client struct {
|
||||||
restClient rest.Interface
|
restClient rest.Interface
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *PoliciesV1alpha1Client) CELPolicyExceptions(namespace string) CELPolicyExceptionInterface {
|
||||||
|
return newCELPolicyExceptions(c, namespace)
|
||||||
|
}
|
||||||
|
|
||||||
func (c *PoliciesV1alpha1Client) ValidatingPolicies() ValidatingPolicyInterface {
|
func (c *PoliciesV1alpha1Client) ValidatingPolicies() ValidatingPolicyInterface {
|
||||||
return newValidatingPolicies(c)
|
return newValidatingPolicies(c)
|
||||||
}
|
}
|
||||||
|
|
|
@ -82,6 +82,8 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource
|
||||||
return &genericInformer{resource: resource.GroupResource(), informer: f.Kyverno().V2alpha1().ValidatingPolicies().Informer()}, nil
|
return &genericInformer{resource: resource.GroupResource(), informer: f.Kyverno().V2alpha1().ValidatingPolicies().Informer()}, nil
|
||||||
|
|
||||||
// Group=policies.kyverno.io, Version=v1alpha1
|
// Group=policies.kyverno.io, Version=v1alpha1
|
||||||
|
case v1alpha1.SchemeGroupVersion.WithResource("celpolicyexceptions"):
|
||||||
|
return &genericInformer{resource: resource.GroupResource(), informer: f.Policies().V1alpha1().CELPolicyExceptions().Informer()}, nil
|
||||||
case v1alpha1.SchemeGroupVersion.WithResource("validatingpolicies"):
|
case v1alpha1.SchemeGroupVersion.WithResource("validatingpolicies"):
|
||||||
return &genericInformer{resource: resource.GroupResource(), informer: f.Policies().V1alpha1().ValidatingPolicies().Informer()}, nil
|
return &genericInformer{resource: resource.GroupResource(), informer: f.Policies().V1alpha1().ValidatingPolicies().Informer()}, nil
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,90 @@
|
||||||
|
/*
|
||||||
|
Copyright The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by informer-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
time "time"
|
||||||
|
|
||||||
|
policieskyvernoiov1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
|
versioned "github.com/kyverno/kyverno/pkg/client/clientset/versioned"
|
||||||
|
internalinterfaces "github.com/kyverno/kyverno/pkg/client/informers/externalversions/internalinterfaces"
|
||||||
|
v1alpha1 "github.com/kyverno/kyverno/pkg/client/listers/policies.kyverno.io/v1alpha1"
|
||||||
|
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
runtime "k8s.io/apimachinery/pkg/runtime"
|
||||||
|
watch "k8s.io/apimachinery/pkg/watch"
|
||||||
|
cache "k8s.io/client-go/tools/cache"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CELPolicyExceptionInformer provides access to a shared informer and lister for
|
||||||
|
// CELPolicyExceptions.
|
||||||
|
type CELPolicyExceptionInformer interface {
|
||||||
|
Informer() cache.SharedIndexInformer
|
||||||
|
Lister() v1alpha1.CELPolicyExceptionLister
|
||||||
|
}
|
||||||
|
|
||||||
|
type cELPolicyExceptionInformer struct {
|
||||||
|
factory internalinterfaces.SharedInformerFactory
|
||||||
|
tweakListOptions internalinterfaces.TweakListOptionsFunc
|
||||||
|
namespace string
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCELPolicyExceptionInformer constructs a new informer for CELPolicyException type.
|
||||||
|
// Always prefer using an informer factory to get a shared informer instead of getting an independent
|
||||||
|
// one. This reduces memory footprint and number of connections to the server.
|
||||||
|
func NewCELPolicyExceptionInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer {
|
||||||
|
return NewFilteredCELPolicyExceptionInformer(client, namespace, resyncPeriod, indexers, nil)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewFilteredCELPolicyExceptionInformer constructs a new informer for CELPolicyException type.
|
||||||
|
// Always prefer using an informer factory to get a shared informer instead of getting an independent
|
||||||
|
// one. This reduces memory footprint and number of connections to the server.
|
||||||
|
func NewFilteredCELPolicyExceptionInformer(client versioned.Interface, namespace string, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer {
|
||||||
|
return cache.NewSharedIndexInformer(
|
||||||
|
&cache.ListWatch{
|
||||||
|
ListFunc: func(options v1.ListOptions) (runtime.Object, error) {
|
||||||
|
if tweakListOptions != nil {
|
||||||
|
tweakListOptions(&options)
|
||||||
|
}
|
||||||
|
return client.PoliciesV1alpha1().CELPolicyExceptions(namespace).List(context.TODO(), options)
|
||||||
|
},
|
||||||
|
WatchFunc: func(options v1.ListOptions) (watch.Interface, error) {
|
||||||
|
if tweakListOptions != nil {
|
||||||
|
tweakListOptions(&options)
|
||||||
|
}
|
||||||
|
return client.PoliciesV1alpha1().CELPolicyExceptions(namespace).Watch(context.TODO(), options)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
&policieskyvernoiov1alpha1.CELPolicyException{},
|
||||||
|
resyncPeriod,
|
||||||
|
indexers,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *cELPolicyExceptionInformer) defaultInformer(client versioned.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
|
||||||
|
return NewFilteredCELPolicyExceptionInformer(client, f.namespace, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *cELPolicyExceptionInformer) Informer() cache.SharedIndexInformer {
|
||||||
|
return f.factory.InformerFor(&policieskyvernoiov1alpha1.CELPolicyException{}, f.defaultInformer)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *cELPolicyExceptionInformer) Lister() v1alpha1.CELPolicyExceptionLister {
|
||||||
|
return v1alpha1.NewCELPolicyExceptionLister(f.Informer().GetIndexer())
|
||||||
|
}
|
|
@ -24,6 +24,8 @@ import (
|
||||||
|
|
||||||
// Interface provides access to all the informers in this group version.
|
// Interface provides access to all the informers in this group version.
|
||||||
type Interface interface {
|
type Interface interface {
|
||||||
|
// CELPolicyExceptions returns a CELPolicyExceptionInformer.
|
||||||
|
CELPolicyExceptions() CELPolicyExceptionInformer
|
||||||
// ValidatingPolicies returns a ValidatingPolicyInformer.
|
// ValidatingPolicies returns a ValidatingPolicyInformer.
|
||||||
ValidatingPolicies() ValidatingPolicyInformer
|
ValidatingPolicies() ValidatingPolicyInformer
|
||||||
}
|
}
|
||||||
|
@ -39,6 +41,11 @@ func New(f internalinterfaces.SharedInformerFactory, namespace string, tweakList
|
||||||
return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
|
return &version{factory: f, namespace: namespace, tweakListOptions: tweakListOptions}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CELPolicyExceptions returns a CELPolicyExceptionInformer.
|
||||||
|
func (v *version) CELPolicyExceptions() CELPolicyExceptionInformer {
|
||||||
|
return &cELPolicyExceptionInformer{factory: v.factory, namespace: v.namespace, tweakListOptions: v.tweakListOptions}
|
||||||
|
}
|
||||||
|
|
||||||
// ValidatingPolicies returns a ValidatingPolicyInformer.
|
// ValidatingPolicies returns a ValidatingPolicyInformer.
|
||||||
func (v *version) ValidatingPolicies() ValidatingPolicyInformer {
|
func (v *version) ValidatingPolicies() ValidatingPolicyInformer {
|
||||||
return &validatingPolicyInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
|
return &validatingPolicyInformer{factory: v.factory, tweakListOptions: v.tweakListOptions}
|
||||||
|
|
|
@ -0,0 +1,99 @@
|
||||||
|
/*
|
||||||
|
Copyright The Kubernetes Authors.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by lister-gen. DO NOT EDIT.
|
||||||
|
|
||||||
|
package v1alpha1
|
||||||
|
|
||||||
|
import (
|
||||||
|
v1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
|
"k8s.io/client-go/tools/cache"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CELPolicyExceptionLister helps list CELPolicyExceptions.
|
||||||
|
// All objects returned here must be treated as read-only.
|
||||||
|
type CELPolicyExceptionLister interface {
|
||||||
|
// List lists all CELPolicyExceptions in the indexer.
|
||||||
|
// Objects returned here must be treated as read-only.
|
||||||
|
List(selector labels.Selector) (ret []*v1alpha1.CELPolicyException, err error)
|
||||||
|
// CELPolicyExceptions returns an object that can list and get CELPolicyExceptions.
|
||||||
|
CELPolicyExceptions(namespace string) CELPolicyExceptionNamespaceLister
|
||||||
|
CELPolicyExceptionListerExpansion
|
||||||
|
}
|
||||||
|
|
||||||
|
// cELPolicyExceptionLister implements the CELPolicyExceptionLister interface.
|
||||||
|
type cELPolicyExceptionLister struct {
|
||||||
|
indexer cache.Indexer
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewCELPolicyExceptionLister returns a new CELPolicyExceptionLister.
|
||||||
|
func NewCELPolicyExceptionLister(indexer cache.Indexer) CELPolicyExceptionLister {
|
||||||
|
return &cELPolicyExceptionLister{indexer: indexer}
|
||||||
|
}
|
||||||
|
|
||||||
|
// List lists all CELPolicyExceptions in the indexer.
|
||||||
|
func (s *cELPolicyExceptionLister) List(selector labels.Selector) (ret []*v1alpha1.CELPolicyException, err error) {
|
||||||
|
err = cache.ListAll(s.indexer, selector, func(m interface{}) {
|
||||||
|
ret = append(ret, m.(*v1alpha1.CELPolicyException))
|
||||||
|
})
|
||||||
|
return ret, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// CELPolicyExceptions returns an object that can list and get CELPolicyExceptions.
|
||||||
|
func (s *cELPolicyExceptionLister) CELPolicyExceptions(namespace string) CELPolicyExceptionNamespaceLister {
|
||||||
|
return cELPolicyExceptionNamespaceLister{indexer: s.indexer, namespace: namespace}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CELPolicyExceptionNamespaceLister helps list and get CELPolicyExceptions.
|
||||||
|
// All objects returned here must be treated as read-only.
|
||||||
|
type CELPolicyExceptionNamespaceLister interface {
|
||||||
|
// List lists all CELPolicyExceptions in the indexer for a given namespace.
|
||||||
|
// Objects returned here must be treated as read-only.
|
||||||
|
List(selector labels.Selector) (ret []*v1alpha1.CELPolicyException, err error)
|
||||||
|
// Get retrieves the CELPolicyException from the indexer for a given namespace and name.
|
||||||
|
// Objects returned here must be treated as read-only.
|
||||||
|
Get(name string) (*v1alpha1.CELPolicyException, error)
|
||||||
|
CELPolicyExceptionNamespaceListerExpansion
|
||||||
|
}
|
||||||
|
|
||||||
|
// cELPolicyExceptionNamespaceLister implements the CELPolicyExceptionNamespaceLister
|
||||||
|
// interface.
|
||||||
|
type cELPolicyExceptionNamespaceLister struct {
|
||||||
|
indexer cache.Indexer
|
||||||
|
namespace string
|
||||||
|
}
|
||||||
|
|
||||||
|
// List lists all CELPolicyExceptions in the indexer for a given namespace.
|
||||||
|
func (s cELPolicyExceptionNamespaceLister) List(selector labels.Selector) (ret []*v1alpha1.CELPolicyException, err error) {
|
||||||
|
err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) {
|
||||||
|
ret = append(ret, m.(*v1alpha1.CELPolicyException))
|
||||||
|
})
|
||||||
|
return ret, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get retrieves the CELPolicyException from the indexer for a given namespace and name.
|
||||||
|
func (s cELPolicyExceptionNamespaceLister) Get(name string) (*v1alpha1.CELPolicyException, error) {
|
||||||
|
obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if !exists {
|
||||||
|
return nil, errors.NewNotFound(v1alpha1.Resource("celpolicyexception"), name)
|
||||||
|
}
|
||||||
|
return obj.(*v1alpha1.CELPolicyException), nil
|
||||||
|
}
|
|
@ -18,6 +18,14 @@ limitations under the License.
|
||||||
|
|
||||||
package v1alpha1
|
package v1alpha1
|
||||||
|
|
||||||
|
// CELPolicyExceptionListerExpansion allows custom methods to be added to
|
||||||
|
// CELPolicyExceptionLister.
|
||||||
|
type CELPolicyExceptionListerExpansion interface{}
|
||||||
|
|
||||||
|
// CELPolicyExceptionNamespaceListerExpansion allows custom methods to be added to
|
||||||
|
// CELPolicyExceptionNamespaceLister.
|
||||||
|
type CELPolicyExceptionNamespaceListerExpansion interface{}
|
||||||
|
|
||||||
// ValidatingPolicyListerExpansion allows custom methods to be added to
|
// ValidatingPolicyListerExpansion allows custom methods to be added to
|
||||||
// ValidatingPolicyLister.
|
// ValidatingPolicyLister.
|
||||||
type ValidatingPolicyListerExpansion interface{}
|
type ValidatingPolicyListerExpansion interface{}
|
||||||
|
|
|
@ -0,0 +1,337 @@
|
||||||
|
package resource
|
||||||
|
|
||||||
|
import (
|
||||||
|
context "context"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/go-logr/logr"
|
||||||
|
github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
|
github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1 "github.com/kyverno/kyverno/pkg/client/clientset/versioned/typed/policies.kyverno.io/v1alpha1"
|
||||||
|
"github.com/kyverno/kyverno/pkg/metrics"
|
||||||
|
"github.com/kyverno/kyverno/pkg/tracing"
|
||||||
|
"go.opentelemetry.io/otel/trace"
|
||||||
|
"go.uber.org/multierr"
|
||||||
|
k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
k8s_io_apimachinery_pkg_types "k8s.io/apimachinery/pkg/types"
|
||||||
|
k8s_io_apimachinery_pkg_watch "k8s.io/apimachinery/pkg/watch"
|
||||||
|
)
|
||||||
|
|
||||||
|
func WithLogging(inner github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.CELPolicyExceptionInterface, logger logr.Logger) github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.CELPolicyExceptionInterface {
|
||||||
|
return &withLogging{inner, logger}
|
||||||
|
}
|
||||||
|
|
||||||
|
func WithMetrics(inner github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.CELPolicyExceptionInterface, recorder metrics.Recorder) github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.CELPolicyExceptionInterface {
|
||||||
|
return &withMetrics{inner, recorder}
|
||||||
|
}
|
||||||
|
|
||||||
|
func WithTracing(inner github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.CELPolicyExceptionInterface, client, kind string) github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.CELPolicyExceptionInterface {
|
||||||
|
return &withTracing{inner, client, kind}
|
||||||
|
}
|
||||||
|
|
||||||
|
type withLogging struct {
|
||||||
|
inner github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.CELPolicyExceptionInterface
|
||||||
|
logger logr.Logger
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *withLogging) Create(arg0 context.Context, arg1 *github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, arg2 k8s_io_apimachinery_pkg_apis_meta_v1.CreateOptions) (*github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, error) {
|
||||||
|
start := time.Now()
|
||||||
|
logger := c.logger.WithValues("operation", "Create")
|
||||||
|
ret0, ret1 := c.inner.Create(arg0, arg1, arg2)
|
||||||
|
if err := multierr.Combine(ret1); err != nil {
|
||||||
|
logger.Error(err, "Create failed", "duration", time.Since(start))
|
||||||
|
} else {
|
||||||
|
logger.Info("Create done", "duration", time.Since(start))
|
||||||
|
}
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
func (c *withLogging) Delete(arg0 context.Context, arg1 string, arg2 k8s_io_apimachinery_pkg_apis_meta_v1.DeleteOptions) error {
|
||||||
|
start := time.Now()
|
||||||
|
logger := c.logger.WithValues("operation", "Delete")
|
||||||
|
ret0 := c.inner.Delete(arg0, arg1, arg2)
|
||||||
|
if err := multierr.Combine(ret0); err != nil {
|
||||||
|
logger.Error(err, "Delete failed", "duration", time.Since(start))
|
||||||
|
} else {
|
||||||
|
logger.Info("Delete done", "duration", time.Since(start))
|
||||||
|
}
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
func (c *withLogging) DeleteCollection(arg0 context.Context, arg1 k8s_io_apimachinery_pkg_apis_meta_v1.DeleteOptions, arg2 k8s_io_apimachinery_pkg_apis_meta_v1.ListOptions) error {
|
||||||
|
start := time.Now()
|
||||||
|
logger := c.logger.WithValues("operation", "DeleteCollection")
|
||||||
|
ret0 := c.inner.DeleteCollection(arg0, arg1, arg2)
|
||||||
|
if err := multierr.Combine(ret0); err != nil {
|
||||||
|
logger.Error(err, "DeleteCollection failed", "duration", time.Since(start))
|
||||||
|
} else {
|
||||||
|
logger.Info("DeleteCollection done", "duration", time.Since(start))
|
||||||
|
}
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
func (c *withLogging) Get(arg0 context.Context, arg1 string, arg2 k8s_io_apimachinery_pkg_apis_meta_v1.GetOptions) (*github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, error) {
|
||||||
|
start := time.Now()
|
||||||
|
logger := c.logger.WithValues("operation", "Get")
|
||||||
|
ret0, ret1 := c.inner.Get(arg0, arg1, arg2)
|
||||||
|
if err := multierr.Combine(ret1); err != nil {
|
||||||
|
logger.Error(err, "Get failed", "duration", time.Since(start))
|
||||||
|
} else {
|
||||||
|
logger.Info("Get done", "duration", time.Since(start))
|
||||||
|
}
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
func (c *withLogging) List(arg0 context.Context, arg1 k8s_io_apimachinery_pkg_apis_meta_v1.ListOptions) (*github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyExceptionList, error) {
|
||||||
|
start := time.Now()
|
||||||
|
logger := c.logger.WithValues("operation", "List")
|
||||||
|
ret0, ret1 := c.inner.List(arg0, arg1)
|
||||||
|
if err := multierr.Combine(ret1); err != nil {
|
||||||
|
logger.Error(err, "List failed", "duration", time.Since(start))
|
||||||
|
} else {
|
||||||
|
logger.Info("List done", "duration", time.Since(start))
|
||||||
|
}
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
func (c *withLogging) Patch(arg0 context.Context, arg1 string, arg2 k8s_io_apimachinery_pkg_types.PatchType, arg3 []uint8, arg4 k8s_io_apimachinery_pkg_apis_meta_v1.PatchOptions, arg5 ...string) (*github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, error) {
|
||||||
|
start := time.Now()
|
||||||
|
logger := c.logger.WithValues("operation", "Patch")
|
||||||
|
ret0, ret1 := c.inner.Patch(arg0, arg1, arg2, arg3, arg4, arg5...)
|
||||||
|
if err := multierr.Combine(ret1); err != nil {
|
||||||
|
logger.Error(err, "Patch failed", "duration", time.Since(start))
|
||||||
|
} else {
|
||||||
|
logger.Info("Patch done", "duration", time.Since(start))
|
||||||
|
}
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
func (c *withLogging) Update(arg0 context.Context, arg1 *github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, arg2 k8s_io_apimachinery_pkg_apis_meta_v1.UpdateOptions) (*github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, error) {
|
||||||
|
start := time.Now()
|
||||||
|
logger := c.logger.WithValues("operation", "Update")
|
||||||
|
ret0, ret1 := c.inner.Update(arg0, arg1, arg2)
|
||||||
|
if err := multierr.Combine(ret1); err != nil {
|
||||||
|
logger.Error(err, "Update failed", "duration", time.Since(start))
|
||||||
|
} else {
|
||||||
|
logger.Info("Update done", "duration", time.Since(start))
|
||||||
|
}
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
func (c *withLogging) Watch(arg0 context.Context, arg1 k8s_io_apimachinery_pkg_apis_meta_v1.ListOptions) (k8s_io_apimachinery_pkg_watch.Interface, error) {
|
||||||
|
start := time.Now()
|
||||||
|
logger := c.logger.WithValues("operation", "Watch")
|
||||||
|
ret0, ret1 := c.inner.Watch(arg0, arg1)
|
||||||
|
if err := multierr.Combine(ret1); err != nil {
|
||||||
|
logger.Error(err, "Watch failed", "duration", time.Since(start))
|
||||||
|
} else {
|
||||||
|
logger.Info("Watch done", "duration", time.Since(start))
|
||||||
|
}
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
|
||||||
|
type withMetrics struct {
|
||||||
|
inner github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.CELPolicyExceptionInterface
|
||||||
|
recorder metrics.Recorder
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *withMetrics) Create(arg0 context.Context, arg1 *github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, arg2 k8s_io_apimachinery_pkg_apis_meta_v1.CreateOptions) (*github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, error) {
|
||||||
|
defer c.recorder.RecordWithContext(arg0, "create")
|
||||||
|
return c.inner.Create(arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
func (c *withMetrics) Delete(arg0 context.Context, arg1 string, arg2 k8s_io_apimachinery_pkg_apis_meta_v1.DeleteOptions) error {
|
||||||
|
defer c.recorder.RecordWithContext(arg0, "delete")
|
||||||
|
return c.inner.Delete(arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
func (c *withMetrics) DeleteCollection(arg0 context.Context, arg1 k8s_io_apimachinery_pkg_apis_meta_v1.DeleteOptions, arg2 k8s_io_apimachinery_pkg_apis_meta_v1.ListOptions) error {
|
||||||
|
defer c.recorder.RecordWithContext(arg0, "delete_collection")
|
||||||
|
return c.inner.DeleteCollection(arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
func (c *withMetrics) Get(arg0 context.Context, arg1 string, arg2 k8s_io_apimachinery_pkg_apis_meta_v1.GetOptions) (*github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, error) {
|
||||||
|
defer c.recorder.RecordWithContext(arg0, "get")
|
||||||
|
return c.inner.Get(arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
func (c *withMetrics) List(arg0 context.Context, arg1 k8s_io_apimachinery_pkg_apis_meta_v1.ListOptions) (*github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyExceptionList, error) {
|
||||||
|
defer c.recorder.RecordWithContext(arg0, "list")
|
||||||
|
return c.inner.List(arg0, arg1)
|
||||||
|
}
|
||||||
|
func (c *withMetrics) Patch(arg0 context.Context, arg1 string, arg2 k8s_io_apimachinery_pkg_types.PatchType, arg3 []uint8, arg4 k8s_io_apimachinery_pkg_apis_meta_v1.PatchOptions, arg5 ...string) (*github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, error) {
|
||||||
|
defer c.recorder.RecordWithContext(arg0, "patch")
|
||||||
|
return c.inner.Patch(arg0, arg1, arg2, arg3, arg4, arg5...)
|
||||||
|
}
|
||||||
|
func (c *withMetrics) Update(arg0 context.Context, arg1 *github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, arg2 k8s_io_apimachinery_pkg_apis_meta_v1.UpdateOptions) (*github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, error) {
|
||||||
|
defer c.recorder.RecordWithContext(arg0, "update")
|
||||||
|
return c.inner.Update(arg0, arg1, arg2)
|
||||||
|
}
|
||||||
|
func (c *withMetrics) Watch(arg0 context.Context, arg1 k8s_io_apimachinery_pkg_apis_meta_v1.ListOptions) (k8s_io_apimachinery_pkg_watch.Interface, error) {
|
||||||
|
defer c.recorder.RecordWithContext(arg0, "watch")
|
||||||
|
return c.inner.Watch(arg0, arg1)
|
||||||
|
}
|
||||||
|
|
||||||
|
type withTracing struct {
|
||||||
|
inner github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.CELPolicyExceptionInterface
|
||||||
|
client string
|
||||||
|
kind string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *withTracing) Create(arg0 context.Context, arg1 *github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, arg2 k8s_io_apimachinery_pkg_apis_meta_v1.CreateOptions) (*github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, error) {
|
||||||
|
var span trace.Span
|
||||||
|
if tracing.IsInSpan(arg0) {
|
||||||
|
arg0, span = tracing.StartChildSpan(
|
||||||
|
arg0,
|
||||||
|
"",
|
||||||
|
fmt.Sprintf("KUBE %s/%s/%s", c.client, c.kind, "Create"),
|
||||||
|
trace.WithAttributes(
|
||||||
|
tracing.KubeClientGroupKey.String(c.client),
|
||||||
|
tracing.KubeClientKindKey.String(c.kind),
|
||||||
|
tracing.KubeClientOperationKey.String("Create"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
defer span.End()
|
||||||
|
}
|
||||||
|
ret0, ret1 := c.inner.Create(arg0, arg1, arg2)
|
||||||
|
if span != nil {
|
||||||
|
tracing.SetSpanStatus(span, ret1)
|
||||||
|
}
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
func (c *withTracing) Delete(arg0 context.Context, arg1 string, arg2 k8s_io_apimachinery_pkg_apis_meta_v1.DeleteOptions) error {
|
||||||
|
var span trace.Span
|
||||||
|
if tracing.IsInSpan(arg0) {
|
||||||
|
arg0, span = tracing.StartChildSpan(
|
||||||
|
arg0,
|
||||||
|
"",
|
||||||
|
fmt.Sprintf("KUBE %s/%s/%s", c.client, c.kind, "Delete"),
|
||||||
|
trace.WithAttributes(
|
||||||
|
tracing.KubeClientGroupKey.String(c.client),
|
||||||
|
tracing.KubeClientKindKey.String(c.kind),
|
||||||
|
tracing.KubeClientOperationKey.String("Delete"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
defer span.End()
|
||||||
|
}
|
||||||
|
ret0 := c.inner.Delete(arg0, arg1, arg2)
|
||||||
|
if span != nil {
|
||||||
|
tracing.SetSpanStatus(span, ret0)
|
||||||
|
}
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
func (c *withTracing) DeleteCollection(arg0 context.Context, arg1 k8s_io_apimachinery_pkg_apis_meta_v1.DeleteOptions, arg2 k8s_io_apimachinery_pkg_apis_meta_v1.ListOptions) error {
|
||||||
|
var span trace.Span
|
||||||
|
if tracing.IsInSpan(arg0) {
|
||||||
|
arg0, span = tracing.StartChildSpan(
|
||||||
|
arg0,
|
||||||
|
"",
|
||||||
|
fmt.Sprintf("KUBE %s/%s/%s", c.client, c.kind, "DeleteCollection"),
|
||||||
|
trace.WithAttributes(
|
||||||
|
tracing.KubeClientGroupKey.String(c.client),
|
||||||
|
tracing.KubeClientKindKey.String(c.kind),
|
||||||
|
tracing.KubeClientOperationKey.String("DeleteCollection"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
defer span.End()
|
||||||
|
}
|
||||||
|
ret0 := c.inner.DeleteCollection(arg0, arg1, arg2)
|
||||||
|
if span != nil {
|
||||||
|
tracing.SetSpanStatus(span, ret0)
|
||||||
|
}
|
||||||
|
return ret0
|
||||||
|
}
|
||||||
|
func (c *withTracing) Get(arg0 context.Context, arg1 string, arg2 k8s_io_apimachinery_pkg_apis_meta_v1.GetOptions) (*github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, error) {
|
||||||
|
var span trace.Span
|
||||||
|
if tracing.IsInSpan(arg0) {
|
||||||
|
arg0, span = tracing.StartChildSpan(
|
||||||
|
arg0,
|
||||||
|
"",
|
||||||
|
fmt.Sprintf("KUBE %s/%s/%s", c.client, c.kind, "Get"),
|
||||||
|
trace.WithAttributes(
|
||||||
|
tracing.KubeClientGroupKey.String(c.client),
|
||||||
|
tracing.KubeClientKindKey.String(c.kind),
|
||||||
|
tracing.KubeClientOperationKey.String("Get"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
defer span.End()
|
||||||
|
}
|
||||||
|
ret0, ret1 := c.inner.Get(arg0, arg1, arg2)
|
||||||
|
if span != nil {
|
||||||
|
tracing.SetSpanStatus(span, ret1)
|
||||||
|
}
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
func (c *withTracing) List(arg0 context.Context, arg1 k8s_io_apimachinery_pkg_apis_meta_v1.ListOptions) (*github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyExceptionList, error) {
|
||||||
|
var span trace.Span
|
||||||
|
if tracing.IsInSpan(arg0) {
|
||||||
|
arg0, span = tracing.StartChildSpan(
|
||||||
|
arg0,
|
||||||
|
"",
|
||||||
|
fmt.Sprintf("KUBE %s/%s/%s", c.client, c.kind, "List"),
|
||||||
|
trace.WithAttributes(
|
||||||
|
tracing.KubeClientGroupKey.String(c.client),
|
||||||
|
tracing.KubeClientKindKey.String(c.kind),
|
||||||
|
tracing.KubeClientOperationKey.String("List"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
defer span.End()
|
||||||
|
}
|
||||||
|
ret0, ret1 := c.inner.List(arg0, arg1)
|
||||||
|
if span != nil {
|
||||||
|
tracing.SetSpanStatus(span, ret1)
|
||||||
|
}
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
func (c *withTracing) Patch(arg0 context.Context, arg1 string, arg2 k8s_io_apimachinery_pkg_types.PatchType, arg3 []uint8, arg4 k8s_io_apimachinery_pkg_apis_meta_v1.PatchOptions, arg5 ...string) (*github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, error) {
|
||||||
|
var span trace.Span
|
||||||
|
if tracing.IsInSpan(arg0) {
|
||||||
|
arg0, span = tracing.StartChildSpan(
|
||||||
|
arg0,
|
||||||
|
"",
|
||||||
|
fmt.Sprintf("KUBE %s/%s/%s", c.client, c.kind, "Patch"),
|
||||||
|
trace.WithAttributes(
|
||||||
|
tracing.KubeClientGroupKey.String(c.client),
|
||||||
|
tracing.KubeClientKindKey.String(c.kind),
|
||||||
|
tracing.KubeClientOperationKey.String("Patch"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
defer span.End()
|
||||||
|
}
|
||||||
|
ret0, ret1 := c.inner.Patch(arg0, arg1, arg2, arg3, arg4, arg5...)
|
||||||
|
if span != nil {
|
||||||
|
tracing.SetSpanStatus(span, ret1)
|
||||||
|
}
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
func (c *withTracing) Update(arg0 context.Context, arg1 *github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, arg2 k8s_io_apimachinery_pkg_apis_meta_v1.UpdateOptions) (*github_com_kyverno_kyverno_api_policies_kyverno_io_v1alpha1.CELPolicyException, error) {
|
||||||
|
var span trace.Span
|
||||||
|
if tracing.IsInSpan(arg0) {
|
||||||
|
arg0, span = tracing.StartChildSpan(
|
||||||
|
arg0,
|
||||||
|
"",
|
||||||
|
fmt.Sprintf("KUBE %s/%s/%s", c.client, c.kind, "Update"),
|
||||||
|
trace.WithAttributes(
|
||||||
|
tracing.KubeClientGroupKey.String(c.client),
|
||||||
|
tracing.KubeClientKindKey.String(c.kind),
|
||||||
|
tracing.KubeClientOperationKey.String("Update"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
defer span.End()
|
||||||
|
}
|
||||||
|
ret0, ret1 := c.inner.Update(arg0, arg1, arg2)
|
||||||
|
if span != nil {
|
||||||
|
tracing.SetSpanStatus(span, ret1)
|
||||||
|
}
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
||||||
|
func (c *withTracing) Watch(arg0 context.Context, arg1 k8s_io_apimachinery_pkg_apis_meta_v1.ListOptions) (k8s_io_apimachinery_pkg_watch.Interface, error) {
|
||||||
|
var span trace.Span
|
||||||
|
if tracing.IsInSpan(arg0) {
|
||||||
|
arg0, span = tracing.StartChildSpan(
|
||||||
|
arg0,
|
||||||
|
"",
|
||||||
|
fmt.Sprintf("KUBE %s/%s/%s", c.client, c.kind, "Watch"),
|
||||||
|
trace.WithAttributes(
|
||||||
|
tracing.KubeClientGroupKey.String(c.client),
|
||||||
|
tracing.KubeClientKindKey.String(c.kind),
|
||||||
|
tracing.KubeClientOperationKey.String("Watch"),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
defer span.End()
|
||||||
|
}
|
||||||
|
ret0, ret1 := c.inner.Watch(arg0, arg1)
|
||||||
|
if span != nil {
|
||||||
|
tracing.SetSpanStatus(span, ret1)
|
||||||
|
}
|
||||||
|
return ret0, ret1
|
||||||
|
}
|
|
@ -3,6 +3,7 @@ package client
|
||||||
import (
|
import (
|
||||||
"github.com/go-logr/logr"
|
"github.com/go-logr/logr"
|
||||||
github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1 "github.com/kyverno/kyverno/pkg/client/clientset/versioned/typed/policies.kyverno.io/v1alpha1"
|
github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1 "github.com/kyverno/kyverno/pkg/client/clientset/versioned/typed/policies.kyverno.io/v1alpha1"
|
||||||
|
celpolicyexceptions "github.com/kyverno/kyverno/pkg/clients/kyverno/policiesv1alpha1/celpolicyexceptions"
|
||||||
validatingpolicies "github.com/kyverno/kyverno/pkg/clients/kyverno/policiesv1alpha1/validatingpolicies"
|
validatingpolicies "github.com/kyverno/kyverno/pkg/clients/kyverno/policiesv1alpha1/validatingpolicies"
|
||||||
"github.com/kyverno/kyverno/pkg/metrics"
|
"github.com/kyverno/kyverno/pkg/metrics"
|
||||||
"k8s.io/client-go/rest"
|
"k8s.io/client-go/rest"
|
||||||
|
@ -29,6 +30,10 @@ type withMetrics struct {
|
||||||
func (c *withMetrics) RESTClient() rest.Interface {
|
func (c *withMetrics) RESTClient() rest.Interface {
|
||||||
return c.inner.RESTClient()
|
return c.inner.RESTClient()
|
||||||
}
|
}
|
||||||
|
func (c *withMetrics) CELPolicyExceptions(namespace string) github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.CELPolicyExceptionInterface {
|
||||||
|
recorder := metrics.NamespacedClientQueryRecorder(c.metrics, namespace, "CELPolicyException", c.clientType)
|
||||||
|
return celpolicyexceptions.WithMetrics(c.inner.CELPolicyExceptions(namespace), recorder)
|
||||||
|
}
|
||||||
func (c *withMetrics) ValidatingPolicies() github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.ValidatingPolicyInterface {
|
func (c *withMetrics) ValidatingPolicies() github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.ValidatingPolicyInterface {
|
||||||
recorder := metrics.ClusteredClientQueryRecorder(c.metrics, "ValidatingPolicy", c.clientType)
|
recorder := metrics.ClusteredClientQueryRecorder(c.metrics, "ValidatingPolicy", c.clientType)
|
||||||
return validatingpolicies.WithMetrics(c.inner.ValidatingPolicies(), recorder)
|
return validatingpolicies.WithMetrics(c.inner.ValidatingPolicies(), recorder)
|
||||||
|
@ -42,6 +47,9 @@ type withTracing struct {
|
||||||
func (c *withTracing) RESTClient() rest.Interface {
|
func (c *withTracing) RESTClient() rest.Interface {
|
||||||
return c.inner.RESTClient()
|
return c.inner.RESTClient()
|
||||||
}
|
}
|
||||||
|
func (c *withTracing) CELPolicyExceptions(namespace string) github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.CELPolicyExceptionInterface {
|
||||||
|
return celpolicyexceptions.WithTracing(c.inner.CELPolicyExceptions(namespace), c.client, "CELPolicyException")
|
||||||
|
}
|
||||||
func (c *withTracing) ValidatingPolicies() github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.ValidatingPolicyInterface {
|
func (c *withTracing) ValidatingPolicies() github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.ValidatingPolicyInterface {
|
||||||
return validatingpolicies.WithTracing(c.inner.ValidatingPolicies(), c.client, "ValidatingPolicy")
|
return validatingpolicies.WithTracing(c.inner.ValidatingPolicies(), c.client, "ValidatingPolicy")
|
||||||
}
|
}
|
||||||
|
@ -54,6 +62,9 @@ type withLogging struct {
|
||||||
func (c *withLogging) RESTClient() rest.Interface {
|
func (c *withLogging) RESTClient() rest.Interface {
|
||||||
return c.inner.RESTClient()
|
return c.inner.RESTClient()
|
||||||
}
|
}
|
||||||
|
func (c *withLogging) CELPolicyExceptions(namespace string) github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.CELPolicyExceptionInterface {
|
||||||
|
return celpolicyexceptions.WithLogging(c.inner.CELPolicyExceptions(namespace), c.logger.WithValues("resource", "CELPolicyExceptions").WithValues("namespace", namespace))
|
||||||
|
}
|
||||||
func (c *withLogging) ValidatingPolicies() github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.ValidatingPolicyInterface {
|
func (c *withLogging) ValidatingPolicies() github_com_kyverno_kyverno_pkg_client_clientset_versioned_typed_policies_kyverno_io_v1alpha1.ValidatingPolicyInterface {
|
||||||
return validatingpolicies.WithLogging(c.inner.ValidatingPolicies(), c.logger.WithValues("resource", "ValidatingPolicies"))
|
return validatingpolicies.WithLogging(c.inner.ValidatingPolicies(), c.logger.WithValues("resource", "ValidatingPolicies"))
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,9 +12,9 @@ import (
|
||||||
"github.com/kyverno/kyverno/pkg/autogen"
|
"github.com/kyverno/kyverno/pkg/autogen"
|
||||||
"github.com/kyverno/kyverno/pkg/client/clientset/versioned"
|
"github.com/kyverno/kyverno/pkg/client/clientset/versioned"
|
||||||
kyvernov1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v1"
|
kyvernov1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v1"
|
||||||
kyvernov2alpha1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v2alpha1"
|
policiesv1alpha1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/policies.kyverno.io/v1alpha1"
|
||||||
kyvernov1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v1"
|
kyvernov1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v1"
|
||||||
kyvernov2alpha1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v2alpha1"
|
policiesv1alpha1listers "github.com/kyverno/kyverno/pkg/client/listers/policies.kyverno.io/v1alpha1"
|
||||||
"github.com/kyverno/kyverno/pkg/clients/dclient"
|
"github.com/kyverno/kyverno/pkg/clients/dclient"
|
||||||
"github.com/kyverno/kyverno/pkg/controllers"
|
"github.com/kyverno/kyverno/pkg/controllers"
|
||||||
controllerutils "github.com/kyverno/kyverno/pkg/utils/controller"
|
controllerutils "github.com/kyverno/kyverno/pkg/utils/controller"
|
||||||
|
@ -52,7 +52,7 @@ type controller struct {
|
||||||
// listers
|
// listers
|
||||||
polLister kyvernov1listers.PolicyLister
|
polLister kyvernov1listers.PolicyLister
|
||||||
cpolLister kyvernov1listers.ClusterPolicyLister
|
cpolLister kyvernov1listers.ClusterPolicyLister
|
||||||
vpolLister kyvernov2alpha1listers.ValidatingPolicyLister
|
vpolLister policiesv1alpha1listers.ValidatingPolicyLister
|
||||||
vapLister admissionregistrationv1listers.ValidatingAdmissionPolicyLister
|
vapLister admissionregistrationv1listers.ValidatingAdmissionPolicyLister
|
||||||
ephrLister cache.GenericLister
|
ephrLister cache.GenericLister
|
||||||
cephrLister cache.GenericLister
|
cephrLister cache.GenericLister
|
||||||
|
@ -73,7 +73,7 @@ func NewController(
|
||||||
metadataFactory metadatainformers.SharedInformerFactory,
|
metadataFactory metadatainformers.SharedInformerFactory,
|
||||||
polInformer kyvernov1informers.PolicyInformer,
|
polInformer kyvernov1informers.PolicyInformer,
|
||||||
cpolInformer kyvernov1informers.ClusterPolicyInformer,
|
cpolInformer kyvernov1informers.ClusterPolicyInformer,
|
||||||
vpolInformer kyvernov2alpha1informers.ValidatingPolicyInformer,
|
vpolInformer policiesv1alpha1informers.ValidatingPolicyInformer,
|
||||||
vapInformer admissionregistrationv1informers.ValidatingAdmissionPolicyInformer,
|
vapInformer admissionregistrationv1informers.ValidatingAdmissionPolicyInformer,
|
||||||
) controllers.Controller {
|
) controllers.Controller {
|
||||||
ephrInformer := metadataFactory.ForResource(reportsv1.SchemeGroupVersion.WithResource("ephemeralreports"))
|
ephrInformer := metadataFactory.ForResource(reportsv1.SchemeGroupVersion.WithResource("ephemeralreports"))
|
||||||
|
|
|
@ -8,17 +8,17 @@ import (
|
||||||
"github.com/go-logr/logr"
|
"github.com/go-logr/logr"
|
||||||
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
||||||
kyvernov2 "github.com/kyverno/kyverno/api/kyverno/v2"
|
kyvernov2 "github.com/kyverno/kyverno/api/kyverno/v2"
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
policyreportv1alpha2 "github.com/kyverno/kyverno/api/policyreport/v1alpha2"
|
policyreportv1alpha2 "github.com/kyverno/kyverno/api/policyreport/v1alpha2"
|
||||||
reportsv1 "github.com/kyverno/kyverno/api/reports/v1"
|
reportsv1 "github.com/kyverno/kyverno/api/reports/v1"
|
||||||
"github.com/kyverno/kyverno/pkg/breaker"
|
"github.com/kyverno/kyverno/pkg/breaker"
|
||||||
"github.com/kyverno/kyverno/pkg/client/clientset/versioned"
|
"github.com/kyverno/kyverno/pkg/client/clientset/versioned"
|
||||||
kyvernov1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v1"
|
kyvernov1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v1"
|
||||||
kyvernov2informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v2"
|
kyvernov2informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v2"
|
||||||
kyvernov2alpha1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v2alpha1"
|
policiesv1alpha1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/policies.kyverno.io/v1alpha1"
|
||||||
kyvernov1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v1"
|
kyvernov1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v1"
|
||||||
kyvernov2listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v2"
|
kyvernov2listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v2"
|
||||||
kyvernov2alpha1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v2alpha1"
|
policiesv1alpha1listers "github.com/kyverno/kyverno/pkg/client/listers/policies.kyverno.io/v1alpha1"
|
||||||
"github.com/kyverno/kyverno/pkg/clients/dclient"
|
"github.com/kyverno/kyverno/pkg/clients/dclient"
|
||||||
"github.com/kyverno/kyverno/pkg/config"
|
"github.com/kyverno/kyverno/pkg/config"
|
||||||
"github.com/kyverno/kyverno/pkg/controllers"
|
"github.com/kyverno/kyverno/pkg/controllers"
|
||||||
|
@ -63,7 +63,7 @@ type controller struct {
|
||||||
// listers
|
// listers
|
||||||
polLister kyvernov1listers.PolicyLister
|
polLister kyvernov1listers.PolicyLister
|
||||||
cpolLister kyvernov1listers.ClusterPolicyLister
|
cpolLister kyvernov1listers.ClusterPolicyLister
|
||||||
vpolLister kyvernov2alpha1listers.ValidatingPolicyLister
|
vpolLister policiesv1alpha1listers.ValidatingPolicyLister
|
||||||
polexLister kyvernov2listers.PolicyExceptionLister
|
polexLister kyvernov2listers.PolicyExceptionLister
|
||||||
vapLister admissionregistrationv1listers.ValidatingAdmissionPolicyLister
|
vapLister admissionregistrationv1listers.ValidatingAdmissionPolicyLister
|
||||||
vapBindingLister admissionregistrationv1listers.ValidatingAdmissionPolicyBindingLister
|
vapBindingLister admissionregistrationv1listers.ValidatingAdmissionPolicyBindingLister
|
||||||
|
@ -94,7 +94,7 @@ func NewController(
|
||||||
metadataFactory metadatainformers.SharedInformerFactory,
|
metadataFactory metadatainformers.SharedInformerFactory,
|
||||||
polInformer kyvernov1informers.PolicyInformer,
|
polInformer kyvernov1informers.PolicyInformer,
|
||||||
cpolInformer kyvernov1informers.ClusterPolicyInformer,
|
cpolInformer kyvernov1informers.ClusterPolicyInformer,
|
||||||
vpolInformer kyvernov2alpha1informers.ValidatingPolicyInformer,
|
vpolInformer policiesv1alpha1informers.ValidatingPolicyInformer,
|
||||||
polexInformer kyvernov2informers.PolicyExceptionInformer,
|
polexInformer kyvernov2informers.PolicyExceptionInformer,
|
||||||
vapInformer admissionregistrationv1informers.ValidatingAdmissionPolicyInformer,
|
vapInformer admissionregistrationv1informers.ValidatingAdmissionPolicyInformer,
|
||||||
vapBindingInformer admissionregistrationv1informers.ValidatingAdmissionPolicyBindingInformer,
|
vapBindingInformer admissionregistrationv1informers.ValidatingAdmissionPolicyBindingInformer,
|
||||||
|
@ -208,17 +208,17 @@ func (c *controller) deleteException(obj *kyvernov2.PolicyException) {
|
||||||
c.enqueueResources()
|
c.enqueueResources()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *controller) addVP(obj *kyvernov2alpha1.ValidatingPolicy) {
|
func (c *controller) addVP(obj *policiesv1alpha1.ValidatingPolicy) {
|
||||||
c.enqueueResources()
|
c.enqueueResources()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *controller) updateVP(old, obj *kyvernov2alpha1.ValidatingPolicy) {
|
func (c *controller) updateVP(old, obj *policiesv1alpha1.ValidatingPolicy) {
|
||||||
if old.GetResourceVersion() != obj.GetResourceVersion() {
|
if old.GetResourceVersion() != obj.GetResourceVersion() {
|
||||||
c.enqueueResources()
|
c.enqueueResources()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *controller) deleteVP(obj *kyvernov2alpha1.ValidatingPolicy) {
|
func (c *controller) deleteVP(obj *policiesv1alpha1.ValidatingPolicy) {
|
||||||
c.enqueueResources()
|
c.enqueueResources()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,9 +10,9 @@ import (
|
||||||
"github.com/go-logr/logr"
|
"github.com/go-logr/logr"
|
||||||
"github.com/kyverno/kyverno/pkg/admissionpolicy"
|
"github.com/kyverno/kyverno/pkg/admissionpolicy"
|
||||||
kyvernov1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v1"
|
kyvernov1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v1"
|
||||||
kyvernov2alpha1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v2alpha1"
|
policiesv1alpha1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/policies.kyverno.io/v1alpha1"
|
||||||
kyvernov1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v1"
|
kyvernov1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v1"
|
||||||
kyvernov2alpha1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v2alpha1"
|
policiesv1alpha1listers "github.com/kyverno/kyverno/pkg/client/listers/policies.kyverno.io/v1alpha1"
|
||||||
"github.com/kyverno/kyverno/pkg/clients/dclient"
|
"github.com/kyverno/kyverno/pkg/clients/dclient"
|
||||||
"github.com/kyverno/kyverno/pkg/controllers"
|
"github.com/kyverno/kyverno/pkg/controllers"
|
||||||
"github.com/kyverno/kyverno/pkg/controllers/report/utils"
|
"github.com/kyverno/kyverno/pkg/controllers/report/utils"
|
||||||
|
@ -81,7 +81,7 @@ type controller struct {
|
||||||
// listers
|
// listers
|
||||||
polLister kyvernov1listers.PolicyLister
|
polLister kyvernov1listers.PolicyLister
|
||||||
cpolLister kyvernov1listers.ClusterPolicyLister
|
cpolLister kyvernov1listers.ClusterPolicyLister
|
||||||
vpolLister kyvernov2alpha1listers.ValidatingPolicyLister
|
vpolLister policiesv1alpha1listers.ValidatingPolicyLister
|
||||||
vapLister admissionregistrationv1listers.ValidatingAdmissionPolicyLister
|
vapLister admissionregistrationv1listers.ValidatingAdmissionPolicyLister
|
||||||
|
|
||||||
// queue
|
// queue
|
||||||
|
@ -96,7 +96,7 @@ func NewController(
|
||||||
client dclient.Interface,
|
client dclient.Interface,
|
||||||
polInformer kyvernov1informers.PolicyInformer,
|
polInformer kyvernov1informers.PolicyInformer,
|
||||||
cpolInformer kyvernov1informers.ClusterPolicyInformer,
|
cpolInformer kyvernov1informers.ClusterPolicyInformer,
|
||||||
vpolInformer kyvernov2alpha1informers.ValidatingPolicyInformer,
|
vpolInformer policiesv1alpha1informers.ValidatingPolicyInformer,
|
||||||
vapInformer admissionregistrationv1informers.ValidatingAdmissionPolicyInformer,
|
vapInformer admissionregistrationv1informers.ValidatingAdmissionPolicyInformer,
|
||||||
) Controller {
|
) Controller {
|
||||||
c := controller{
|
c := controller{
|
||||||
|
|
|
@ -4,12 +4,12 @@ import (
|
||||||
"github.com/go-logr/logr"
|
"github.com/go-logr/logr"
|
||||||
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
||||||
kyvernov2 "github.com/kyverno/kyverno/api/kyverno/v2"
|
kyvernov2 "github.com/kyverno/kyverno/api/kyverno/v2"
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
reportsv1 "github.com/kyverno/kyverno/api/reports/v1"
|
reportsv1 "github.com/kyverno/kyverno/api/reports/v1"
|
||||||
"github.com/kyverno/kyverno/pkg/autogen"
|
"github.com/kyverno/kyverno/pkg/autogen"
|
||||||
kyvernov1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v1"
|
kyvernov1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v1"
|
||||||
kyvernov2listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v2"
|
kyvernov2listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v2"
|
||||||
kyvernov2alpha1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v2alpha1"
|
policiesv1alpha1listers "github.com/kyverno/kyverno/pkg/client/listers/policies.kyverno.io/v1alpha1"
|
||||||
datautils "github.com/kyverno/kyverno/pkg/utils/data"
|
datautils "github.com/kyverno/kyverno/pkg/utils/data"
|
||||||
policyvalidation "github.com/kyverno/kyverno/pkg/validation/policy"
|
policyvalidation "github.com/kyverno/kyverno/pkg/validation/policy"
|
||||||
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
||||||
|
@ -151,8 +151,8 @@ func FetchValidatingAdmissionPolicyBindings(vapBindingLister admissionregistrati
|
||||||
return bindings, nil
|
return bindings, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func FetchValidatingPolicies(vpolLister kyvernov2alpha1listers.ValidatingPolicyLister) ([]kyvernov2alpha1.ValidatingPolicy, error) {
|
func FetchValidatingPolicies(vpolLister policiesv1alpha1listers.ValidatingPolicyLister) ([]policiesv1alpha1.ValidatingPolicy, error) {
|
||||||
var policies []kyvernov2alpha1.ValidatingPolicy
|
var policies []policiesv1alpha1.ValidatingPolicy
|
||||||
if pols, err := vpolLister.List(labels.Everything()); err != nil {
|
if pols, err := vpolLister.List(labels.Everything()); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -11,14 +11,17 @@ import (
|
||||||
"github.com/kyverno/kyverno/api/kyverno"
|
"github.com/kyverno/kyverno/api/kyverno"
|
||||||
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
||||||
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
"github.com/kyverno/kyverno/ext/wildcard"
|
"github.com/kyverno/kyverno/ext/wildcard"
|
||||||
"github.com/kyverno/kyverno/pkg/autogen"
|
"github.com/kyverno/kyverno/pkg/autogen"
|
||||||
vpolautogen "github.com/kyverno/kyverno/pkg/cel/autogen"
|
vpolautogen "github.com/kyverno/kyverno/pkg/cel/autogen"
|
||||||
"github.com/kyverno/kyverno/pkg/client/clientset/versioned"
|
"github.com/kyverno/kyverno/pkg/client/clientset/versioned"
|
||||||
kyvernov1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v1"
|
kyvernov1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v1"
|
||||||
kyvernov2alpha1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v2alpha1"
|
kyvernov2alpha1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/kyverno/v2alpha1"
|
||||||
|
policiesv1alpha1informers "github.com/kyverno/kyverno/pkg/client/informers/externalversions/policies.kyverno.io/v1alpha1"
|
||||||
kyvernov1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v1"
|
kyvernov1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v1"
|
||||||
kyvernov2alpha1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v2alpha1"
|
kyvernov2alpha1listers "github.com/kyverno/kyverno/pkg/client/listers/kyverno/v2alpha1"
|
||||||
|
policiesv1alpha1listers "github.com/kyverno/kyverno/pkg/client/listers/policies.kyverno.io/v1alpha1"
|
||||||
"github.com/kyverno/kyverno/pkg/clients/dclient"
|
"github.com/kyverno/kyverno/pkg/clients/dclient"
|
||||||
"github.com/kyverno/kyverno/pkg/config"
|
"github.com/kyverno/kyverno/pkg/config"
|
||||||
"github.com/kyverno/kyverno/pkg/controllers"
|
"github.com/kyverno/kyverno/pkg/controllers"
|
||||||
|
@ -100,7 +103,7 @@ type controller struct {
|
||||||
vwcLister admissionregistrationv1listers.ValidatingWebhookConfigurationLister
|
vwcLister admissionregistrationv1listers.ValidatingWebhookConfigurationLister
|
||||||
cpolLister kyvernov1listers.ClusterPolicyLister
|
cpolLister kyvernov1listers.ClusterPolicyLister
|
||||||
polLister kyvernov1listers.PolicyLister
|
polLister kyvernov1listers.PolicyLister
|
||||||
vpolLister kyvernov2alpha1listers.ValidatingPolicyLister
|
vpolLister policiesv1alpha1listers.ValidatingPolicyLister
|
||||||
deploymentLister appsv1listers.DeploymentLister
|
deploymentLister appsv1listers.DeploymentLister
|
||||||
secretLister corev1listers.SecretLister
|
secretLister corev1listers.SecretLister
|
||||||
leaseLister coordinationv1listers.LeaseLister
|
leaseLister coordinationv1listers.LeaseLister
|
||||||
|
@ -143,7 +146,7 @@ func NewController(
|
||||||
vwcInformer admissionregistrationv1informers.ValidatingWebhookConfigurationInformer,
|
vwcInformer admissionregistrationv1informers.ValidatingWebhookConfigurationInformer,
|
||||||
cpolInformer kyvernov1informers.ClusterPolicyInformer,
|
cpolInformer kyvernov1informers.ClusterPolicyInformer,
|
||||||
polInformer kyvernov1informers.PolicyInformer,
|
polInformer kyvernov1informers.PolicyInformer,
|
||||||
vpolInformer kyvernov2alpha1informers.ValidatingPolicyInformer,
|
vpolInformer policiesv1alpha1informers.ValidatingPolicyInformer,
|
||||||
deploymentInformer appsv1informers.DeploymentInformer,
|
deploymentInformer appsv1informers.DeploymentInformer,
|
||||||
secretInformer corev1informers.SecretInformer,
|
secretInformer corev1informers.SecretInformer,
|
||||||
leaseInformer coordinationv1informers.LeaseInformer,
|
leaseInformer coordinationv1informers.LeaseInformer,
|
||||||
|
@ -382,7 +385,7 @@ func (c *controller) recordPolicyState(webhookConfigurationName string, policies
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *controller) recordValidatingPolicyState(validatingpolicies ...kyvernov2alpha1.GenericPolicy) {
|
func (c *controller) recordValidatingPolicyState(validatingpolicies ...policiesv1alpha1.GenericPolicy) {
|
||||||
c.vpolState = make(map[string]bool)
|
c.vpolState = make(map[string]bool)
|
||||||
for _, policy := range validatingpolicies {
|
for _, policy := range validatingpolicies {
|
||||||
c.vpolState[policy.GetName()] = true
|
c.vpolState[policy.GetName()] = true
|
||||||
|
@ -661,9 +664,9 @@ func (c *controller) updateValidatingPolicyStatuses(ctx context.Context) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
updateStatusFunc := func(vpol kyvernov2alpha1.GenericPolicy) error {
|
updateStatusFunc := func(vpol policiesv1alpha1.GenericPolicy) error {
|
||||||
status := vpol.GetStatus()
|
status := vpol.GetStatus()
|
||||||
status.SetReadyByCondition(kyvernov2alpha1.PolicyConditionTypeWebhookConfigured, metav1.ConditionTrue, "Webhook configured")
|
status.SetReadyByCondition(policiesv1alpha1.PolicyConditionTypeWebhookConfigured, metav1.ConditionTrue, "Webhook configured")
|
||||||
status.Autogen.Rules = nil
|
status.Autogen.Rules = nil
|
||||||
rules := vpolautogen.ComputeRules(vpol)
|
rules := vpolautogen.ComputeRules(vpol)
|
||||||
status.Autogen.Rules = append(status.Autogen.Rules, rules...)
|
status.Autogen.Rules = append(status.Autogen.Rules, rules...)
|
||||||
|
@ -677,12 +680,12 @@ func (c *controller) updateValidatingPolicyStatuses(ctx context.Context) error {
|
||||||
}
|
}
|
||||||
err := controllerutils.UpdateStatus(
|
err := controllerutils.UpdateStatus(
|
||||||
ctx,
|
ctx,
|
||||||
vpol.(*kyvernov2alpha1.ValidatingPolicy),
|
vpol.(*policiesv1alpha1.ValidatingPolicy),
|
||||||
c.kyvernoClient.KyvernoV2alpha1().ValidatingPolicies(),
|
c.kyvernoClient.PoliciesV1alpha1().ValidatingPolicies(),
|
||||||
func(vpol *kyvernov2alpha1.ValidatingPolicy) error {
|
func(vpol *policiesv1alpha1.ValidatingPolicy) error {
|
||||||
return updateStatusFunc(vpol)
|
return updateStatusFunc(vpol)
|
||||||
},
|
},
|
||||||
func(a *kyvernov2alpha1.ValidatingPolicy, b *kyvernov2alpha1.ValidatingPolicy) bool {
|
func(a *policiesv1alpha1.ValidatingPolicy, b *policiesv1alpha1.ValidatingPolicy) bool {
|
||||||
return datautils.DeepEqual(a.Status, b.Status)
|
return datautils.DeepEqual(a.Status, b.Status)
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -1136,13 +1139,13 @@ func (c *controller) getAllPolicies() ([]kyvernov1.PolicyInterface, error) {
|
||||||
return policies, nil
|
return policies, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *controller) getValidatingPolicies() ([]kyvernov2alpha1.GenericPolicy, error) {
|
func (c *controller) getValidatingPolicies() ([]policiesv1alpha1.GenericPolicy, error) {
|
||||||
validatingpolicies, err := c.vpolLister.List(labels.Everything())
|
validatingpolicies, err := c.vpolLister.List(labels.Everything())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
vpols := make([]kyvernov2alpha1.GenericPolicy, 0)
|
vpols := make([]policiesv1alpha1.GenericPolicy, 0)
|
||||||
for _, vpol := range validatingpolicies {
|
for _, vpol := range validatingpolicies {
|
||||||
vpols = append(vpols, vpol)
|
vpols = append(vpols, vpol)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
package webhook
|
package webhook
|
||||||
|
|
||||||
import (
|
import (
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
"github.com/kyverno/kyverno/pkg/cel/autogen"
|
"github.com/kyverno/kyverno/pkg/cel/autogen"
|
||||||
"github.com/kyverno/kyverno/pkg/config"
|
"github.com/kyverno/kyverno/pkg/config"
|
||||||
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
||||||
"k8s.io/utils/ptr"
|
"k8s.io/utils/ptr"
|
||||||
)
|
)
|
||||||
|
|
||||||
func buildWebhookRules(cfg config.Configuration, server string, servicePort int32, caBundle []byte, vpols []kyvernov2alpha1.GenericPolicy) (webhooks []admissionregistrationv1.ValidatingWebhook) {
|
func buildWebhookRules(cfg config.Configuration, server string, servicePort int32, caBundle []byte, vpols []policiesv1alpha1.GenericPolicy) (webhooks []admissionregistrationv1.ValidatingWebhook) {
|
||||||
var (
|
var (
|
||||||
webhookIgnoreList []admissionregistrationv1.ValidatingWebhook
|
webhookIgnoreList []admissionregistrationv1.ValidatingWebhook
|
||||||
webhookFailList []admissionregistrationv1.ValidatingWebhook
|
webhookFailList []admissionregistrationv1.ValidatingWebhook
|
||||||
|
@ -49,7 +49,7 @@ func buildWebhookRules(cfg config.Configuration, server string, servicePort int3
|
||||||
webhook.Rules = append(webhook.Rules, match.RuleWithOperations)
|
webhook.Rules = append(webhook.Rules, match.RuleWithOperations)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, rule := range autogen.ComputeRules(vpol.(*kyvernov2alpha1.ValidatingPolicy)) {
|
for _, rule := range autogen.ComputeRules(vpol.(*policiesv1alpha1.ValidatingPolicy)) {
|
||||||
for _, match := range rule.MatchConstraints.ResourceRules {
|
for _, match := range rule.MatchConstraints.ResourceRules {
|
||||||
webhook.Rules = append(webhook.Rules, match.RuleWithOperations)
|
webhook.Rules = append(webhook.Rules, match.RuleWithOperations)
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@ package webhook
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
"github.com/kyverno/kyverno/pkg/config"
|
"github.com/kyverno/kyverno/pkg/config"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
||||||
|
@ -14,14 +14,14 @@ import (
|
||||||
func TestBuildWebhookRules(t *testing.T) {
|
func TestBuildWebhookRules(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
vpols []*kyvernov2alpha1.ValidatingPolicy
|
vpols []*policiesv1alpha1.ValidatingPolicy
|
||||||
expectedWebhooks []admissionregistrationv1.ValidatingWebhook
|
expectedWebhooks []admissionregistrationv1.ValidatingWebhook
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
name: "Single Ignore Policy",
|
name: "Single Ignore Policy",
|
||||||
vpols: []*kyvernov2alpha1.ValidatingPolicy{
|
vpols: []*policiesv1alpha1.ValidatingPolicy{
|
||||||
{
|
{
|
||||||
Spec: kyvernov2alpha1.ValidatingPolicySpec{
|
Spec: policiesv1alpha1.ValidatingPolicySpec{
|
||||||
ValidatingAdmissionPolicySpec: admissionregistrationv1.ValidatingAdmissionPolicySpec{
|
ValidatingAdmissionPolicySpec: admissionregistrationv1.ValidatingAdmissionPolicySpec{
|
||||||
FailurePolicy: ptr.To(admissionregistrationv1.Ignore),
|
FailurePolicy: ptr.To(admissionregistrationv1.Ignore),
|
||||||
MatchConstraints: &admissionregistrationv1.MatchResources{
|
MatchConstraints: &admissionregistrationv1.MatchResources{
|
||||||
|
@ -63,9 +63,9 @@ func TestBuildWebhookRules(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Single Fail Policy",
|
name: "Single Fail Policy",
|
||||||
vpols: []*kyvernov2alpha1.ValidatingPolicy{
|
vpols: []*policiesv1alpha1.ValidatingPolicy{
|
||||||
{
|
{
|
||||||
Spec: kyvernov2alpha1.ValidatingPolicySpec{
|
Spec: policiesv1alpha1.ValidatingPolicySpec{
|
||||||
ValidatingAdmissionPolicySpec: admissionregistrationv1.ValidatingAdmissionPolicySpec{
|
ValidatingAdmissionPolicySpec: admissionregistrationv1.ValidatingAdmissionPolicySpec{
|
||||||
FailurePolicy: ptr.To(admissionregistrationv1.Fail),
|
FailurePolicy: ptr.To(admissionregistrationv1.Fail),
|
||||||
MatchConstraints: &admissionregistrationv1.MatchResources{
|
MatchConstraints: &admissionregistrationv1.MatchResources{
|
||||||
|
@ -107,13 +107,13 @@ func TestBuildWebhookRules(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Fine-Grained Ignore Policy",
|
name: "Fine-Grained Ignore Policy",
|
||||||
vpols: []*kyvernov2alpha1.ValidatingPolicy{
|
vpols: []*policiesv1alpha1.ValidatingPolicy{
|
||||||
{
|
{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "test-fine-grained-ignore",
|
Name: "test-fine-grained-ignore",
|
||||||
},
|
},
|
||||||
Spec: kyvernov2alpha1.ValidatingPolicySpec{
|
Spec: policiesv1alpha1.ValidatingPolicySpec{
|
||||||
WebhookConfiguration: &kyvernov2alpha1.WebhookConfiguration{
|
WebhookConfiguration: &policiesv1alpha1.WebhookConfiguration{
|
||||||
TimeoutSeconds: ptr.To(int32(30)),
|
TimeoutSeconds: ptr.To(int32(30)),
|
||||||
},
|
},
|
||||||
ValidatingAdmissionPolicySpec: admissionregistrationv1.ValidatingAdmissionPolicySpec{
|
ValidatingAdmissionPolicySpec: admissionregistrationv1.ValidatingAdmissionPolicySpec{
|
||||||
|
@ -161,13 +161,13 @@ func TestBuildWebhookRules(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "Fine-Grained Fail Policy",
|
name: "Fine-Grained Fail Policy",
|
||||||
vpols: []*kyvernov2alpha1.ValidatingPolicy{
|
vpols: []*policiesv1alpha1.ValidatingPolicy{
|
||||||
{
|
{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
Name: "test-fine-grained-fail",
|
Name: "test-fine-grained-fail",
|
||||||
},
|
},
|
||||||
Spec: kyvernov2alpha1.ValidatingPolicySpec{
|
Spec: policiesv1alpha1.ValidatingPolicySpec{
|
||||||
WebhookConfiguration: &kyvernov2alpha1.WebhookConfiguration{
|
WebhookConfiguration: &policiesv1alpha1.WebhookConfiguration{
|
||||||
TimeoutSeconds: ptr.To(int32(20)),
|
TimeoutSeconds: ptr.To(int32(20)),
|
||||||
},
|
},
|
||||||
ValidatingAdmissionPolicySpec: admissionregistrationv1.ValidatingAdmissionPolicySpec{
|
ValidatingAdmissionPolicySpec: admissionregistrationv1.ValidatingAdmissionPolicySpec{
|
||||||
|
@ -229,7 +229,7 @@ func TestBuildWebhookRules(t *testing.T) {
|
||||||
|
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
var vpols []kyvernov2alpha1.GenericPolicy
|
var vpols []policiesv1alpha1.GenericPolicy
|
||||||
for _, vpol := range tt.vpols {
|
for _, vpol := range tt.vpols {
|
||||||
vpols = append(vpols, vpol)
|
vpols = append(vpols, vpol)
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,7 @@ package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
||||||
admissionregistrationv1alpha1 "k8s.io/api/admissionregistration/v1alpha1"
|
admissionregistrationv1alpha1 "k8s.io/api/admissionregistration/v1alpha1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
|
@ -25,7 +25,7 @@ type GenericPolicy interface {
|
||||||
// AsValidatingAdmissionPolicy returns the validating admission policy
|
// AsValidatingAdmissionPolicy returns the validating admission policy
|
||||||
AsValidatingAdmissionPolicy() *admissionregistrationv1.ValidatingAdmissionPolicy
|
AsValidatingAdmissionPolicy() *admissionregistrationv1.ValidatingAdmissionPolicy
|
||||||
// AsValidatingPolicy returns the validating policy
|
// AsValidatingPolicy returns the validating policy
|
||||||
AsValidatingPolicy() *kyvernov2alpha1.ValidatingPolicy
|
AsValidatingPolicy() *policiesv1alpha1.ValidatingPolicy
|
||||||
}
|
}
|
||||||
|
|
||||||
type genericPolicy struct {
|
type genericPolicy struct {
|
||||||
|
@ -33,7 +33,7 @@ type genericPolicy struct {
|
||||||
PolicyInterface kyvernov1.PolicyInterface
|
PolicyInterface kyvernov1.PolicyInterface
|
||||||
ValidatingAdmissionPolicy *admissionregistrationv1.ValidatingAdmissionPolicy
|
ValidatingAdmissionPolicy *admissionregistrationv1.ValidatingAdmissionPolicy
|
||||||
MutatingAdmissionPolicy *admissionregistrationv1alpha1.MutatingAdmissionPolicy
|
MutatingAdmissionPolicy *admissionregistrationv1alpha1.MutatingAdmissionPolicy
|
||||||
ValidatingPolicy *kyvernov2alpha1.ValidatingPolicy
|
ValidatingPolicy *policiesv1alpha1.ValidatingPolicy
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *genericPolicy) AsObject() any {
|
func (p *genericPolicy) AsObject() any {
|
||||||
|
@ -48,7 +48,7 @@ func (p *genericPolicy) AsValidatingAdmissionPolicy() *admissionregistrationv1.V
|
||||||
return p.ValidatingAdmissionPolicy
|
return p.ValidatingAdmissionPolicy
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *genericPolicy) AsValidatingPolicy() *kyvernov2alpha1.ValidatingPolicy {
|
func (p *genericPolicy) AsValidatingPolicy() *policiesv1alpha1.ValidatingPolicy {
|
||||||
return p.ValidatingPolicy
|
return p.ValidatingPolicy
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ func (p *genericPolicy) GetAPIVersion() string {
|
||||||
case p.MutatingAdmissionPolicy != nil:
|
case p.MutatingAdmissionPolicy != nil:
|
||||||
return admissionregistrationv1alpha1.SchemeGroupVersion.String()
|
return admissionregistrationv1alpha1.SchemeGroupVersion.String()
|
||||||
case p.ValidatingPolicy != nil:
|
case p.ValidatingPolicy != nil:
|
||||||
return kyvernov2alpha1.GroupVersion.String()
|
return policiesv1alpha1.GroupVersion.String()
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
@ -109,7 +109,7 @@ func NewMutatingAdmissionPolicy(pol *admissionregistrationv1alpha1.MutatingAdmis
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewValidatingPolicy(pol *kyvernov2alpha1.ValidatingPolicy) GenericPolicy {
|
func NewValidatingPolicy(pol *policiesv1alpha1.ValidatingPolicy) GenericPolicy {
|
||||||
return &genericPolicy{
|
return &genericPolicy{
|
||||||
Object: pol,
|
Object: pol,
|
||||||
ValidatingPolicy: pol,
|
ValidatingPolicy: pol,
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
package admission
|
package admission
|
||||||
|
|
||||||
import (
|
import (
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
admissionv1 "k8s.io/api/admission/v1"
|
admissionv1 "k8s.io/api/admission/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/json"
|
"k8s.io/apimachinery/pkg/util/json"
|
||||||
)
|
)
|
||||||
|
|
||||||
func UnmarshalCELPolicyException(raw []byte) (*kyvernov2alpha1.CELPolicyException, error) {
|
func UnmarshalCELPolicyException(raw []byte) (*policiesv1alpha1.CELPolicyException, error) {
|
||||||
var exception *kyvernov2alpha1.CELPolicyException
|
var exception *policiesv1alpha1.CELPolicyException
|
||||||
if err := json.Unmarshal(raw, &exception); err != nil {
|
if err := json.Unmarshal(raw, &exception); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return exception, nil
|
return exception, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetCELPolicyExceptions(request admissionv1.AdmissionRequest) (*kyvernov2alpha1.CELPolicyException, *kyvernov2alpha1.CELPolicyException, error) {
|
func GetCELPolicyExceptions(request admissionv1.AdmissionRequest) (*policiesv1alpha1.CELPolicyException, *policiesv1alpha1.CELPolicyException, error) {
|
||||||
var empty *kyvernov2alpha1.CELPolicyException
|
var empty *policiesv1alpha1.CELPolicyException
|
||||||
exception, err := UnmarshalCELPolicyException(request.Object.Raw)
|
exception, err := UnmarshalCELPolicyException(request.Object.Raw)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return exception, empty, err
|
return exception, empty, err
|
||||||
|
|
|
@ -6,7 +6,7 @@ import (
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/util/json"
|
"k8s.io/apimachinery/pkg/util/json"
|
||||||
|
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
admissionv1 "k8s.io/api/admission/v1"
|
admissionv1 "k8s.io/api/admission/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
)
|
)
|
||||||
|
@ -56,7 +56,7 @@ func Test_UnmarshalCELPolicyException(t *testing.T) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Unexpected error: %v", err)
|
t.Errorf("Unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
var exception *kyvernov2alpha1.CELPolicyException
|
var exception *policiesv1alpha1.CELPolicyException
|
||||||
json.Unmarshal(test.raw, &exception)
|
json.Unmarshal(test.raw, &exception)
|
||||||
if !reflect.DeepEqual(result, exception) {
|
if !reflect.DeepEqual(result, exception) {
|
||||||
t.Errorf("Expected %+v, got %+v", exception, result)
|
t.Errorf("Expected %+v, got %+v", exception, result)
|
||||||
|
@ -155,7 +155,7 @@ func TestGetCELPolicyExceptions(t *testing.T) {
|
||||||
for _, test := range testCases {
|
for _, test := range testCases {
|
||||||
t.Run(test.name, func(t *testing.T) {
|
t.Run(test.name, func(t *testing.T) {
|
||||||
p1, p2, _ := GetCELPolicyExceptions(test.args.request)
|
p1, p2, _ := GetCELPolicyExceptions(test.args.request)
|
||||||
var empty *kyvernov2alpha1.CELPolicyException
|
var empty *policiesv1alpha1.CELPolicyException
|
||||||
expectedP1, err := UnmarshalCELPolicyException(test.args.request.Object.Raw)
|
expectedP1, err := UnmarshalCELPolicyException(test.args.request.Object.Raw)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
expectedP2 := empty
|
expectedP2 := empty
|
||||||
|
|
|
@ -4,7 +4,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
|
||||||
kyvernov2alpha1 "github.com/kyverno/kyverno/api/kyverno/v2alpha1"
|
policiesv1alpha1 "github.com/kyverno/kyverno/api/policies.kyverno.io/v1alpha1"
|
||||||
extyaml "github.com/kyverno/kyverno/ext/yaml"
|
extyaml "github.com/kyverno/kyverno/ext/yaml"
|
||||||
log "github.com/kyverno/kyverno/pkg/logging"
|
log "github.com/kyverno/kyverno/pkg/logging"
|
||||||
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
admissionregistrationv1 "k8s.io/api/admissionregistration/v1"
|
||||||
|
@ -18,7 +18,7 @@ func GetPolicy(bytes []byte) (
|
||||||
policies []kyvernov1.PolicyInterface,
|
policies []kyvernov1.PolicyInterface,
|
||||||
validatingAdmissionPolicies []admissionregistrationv1.ValidatingAdmissionPolicy,
|
validatingAdmissionPolicies []admissionregistrationv1.ValidatingAdmissionPolicy,
|
||||||
validatingAdmissionPolicyBindings []admissionregistrationv1.ValidatingAdmissionPolicyBinding,
|
validatingAdmissionPolicyBindings []admissionregistrationv1.ValidatingAdmissionPolicyBinding,
|
||||||
validatingPolicies []kyvernov2alpha1.ValidatingPolicy,
|
validatingPolicies []policiesv1alpha1.ValidatingPolicy,
|
||||||
err error,
|
err error,
|
||||||
) {
|
) {
|
||||||
documents, err := extyaml.SplitDocuments(bytes)
|
documents, err := extyaml.SplitDocuments(bytes)
|
||||||
|
@ -84,7 +84,7 @@ func parse(obj unstructured.Unstructured) (
|
||||||
*admissionregistrationv1.ValidatingAdmissionPolicy,
|
*admissionregistrationv1.ValidatingAdmissionPolicy,
|
||||||
*admissionregistrationv1.ValidatingAdmissionPolicyBinding,
|
*admissionregistrationv1.ValidatingAdmissionPolicyBinding,
|
||||||
kyvernov1.PolicyInterface,
|
kyvernov1.PolicyInterface,
|
||||||
*kyvernov2alpha1.ValidatingPolicy,
|
*policiesv1alpha1.ValidatingPolicy,
|
||||||
error,
|
error,
|
||||||
) {
|
) {
|
||||||
switch obj.GetKind() {
|
switch obj.GetKind() {
|
||||||
|
@ -159,8 +159,8 @@ func parseClusterPolicy(obj unstructured.Unstructured) (*kyvernov1.ClusterPolicy
|
||||||
return &out, nil
|
return &out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseValidatingPolicy(obj unstructured.Unstructured) (*kyvernov2alpha1.ValidatingPolicy, error) {
|
func parseValidatingPolicy(obj unstructured.Unstructured) (*policiesv1alpha1.ValidatingPolicy, error) {
|
||||||
var out kyvernov2alpha1.ValidatingPolicy
|
var out policiesv1alpha1.ValidatingPolicy
|
||||||
if err := runtime.DefaultUnstructuredConverter.FromUnstructuredWithValidation(obj.Object, &out, true); err != nil {
|
if err := runtime.DefaultUnstructuredConverter.FromUnstructuredWithValidation(obj.Object, &out, true); err != nil {
|
||||||
return nil, fmt.Errorf("failed to decode policy: %v", err)
|
return nil, fmt.Errorf("failed to decode policy: %v", err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,7 +71,7 @@ func Test_Validate(t *testing.T) {
|
||||||
Namespace: "kyverno",
|
Namespace: "kyverno",
|
||||||
},
|
},
|
||||||
resource: []byte(`{
|
resource: []byte(`{
|
||||||
"apiVersion": "kyverno.io/v2alpha1",
|
"apiVersion": "policies.kyverno.io/v1alpha1",
|
||||||
"kind": "CELPolicyException",
|
"kind": "CELPolicyException",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"name": "pod-security-exception",
|
"name": "pod-security-exception",
|
||||||
|
@ -102,7 +102,7 @@ func Test_Validate(t *testing.T) {
|
||||||
Namespace: "kyverno",
|
Namespace: "kyverno",
|
||||||
},
|
},
|
||||||
resource: []byte(`{
|
resource: []byte(`{
|
||||||
"apiVersion": "kyverno.io/v2alpha1",
|
"apiVersion": "policies.kyverno.io/v1alpha1",
|
||||||
"kind": "CELPolicyException",
|
"kind": "CELPolicyException",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"name": "pod-security-exception",
|
"name": "pod-security-exception",
|
||||||
|
@ -133,7 +133,7 @@ func Test_Validate(t *testing.T) {
|
||||||
Namespace: "delta",
|
Namespace: "delta",
|
||||||
},
|
},
|
||||||
resource: []byte(`{
|
resource: []byte(`{
|
||||||
"apiVersion": "kyverno.io/v2alpha1",
|
"apiVersion": "policies.kyverno.io/v1alpha1",
|
||||||
"kind": "CELPolicyException",
|
"kind": "CELPolicyException",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"name": "pod-security-exception",
|
"name": "pod-security-exception",
|
||||||
|
@ -164,7 +164,7 @@ func Test_Validate(t *testing.T) {
|
||||||
Namespace: "*",
|
Namespace: "*",
|
||||||
},
|
},
|
||||||
resource: []byte(`{
|
resource: []byte(`{
|
||||||
"apiVersion": "kyverno.io/v2alpha1",
|
"apiVersion": "policies.kyverno.io/v1alpha1",
|
||||||
"kind": "CELPolicyException",
|
"kind": "CELPolicyException",
|
||||||
"metadata": {
|
"metadata": {
|
||||||
"name": "pod-security-exception",
|
"name": "pod-security-exception",
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-labels
|
name: check-deployment-labels
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-replicas
|
name: check-deployment-replicas
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: disallow-host-path
|
name: disallow-host-path
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: CELPolicyException
|
kind: CELPolicyException
|
||||||
metadata:
|
metadata:
|
||||||
name: pod-security-exception
|
name: pod-security-exception
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: CELPolicyException
|
kind: CELPolicyException
|
||||||
metadata:
|
metadata:
|
||||||
name: pod-security-exception
|
name: pod-security-exception
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-labels
|
name: check-deployment-labels
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: disallow-privilege-escalation
|
name: disallow-privilege-escalation
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: disallow-privilege-escalation
|
name: disallow-privilege-escalation
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: disallow-privilege-escalation
|
name: disallow-privilege-escalation
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: disallow-privilege-escalation
|
name: disallow-privilege-escalation
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: disallow-privilege-escalation
|
name: disallow-privilege-escalation
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: disallow-privilege-escalation
|
name: disallow-privilege-escalation
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: disallow-privilege-escalation
|
name: disallow-privilege-escalation
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: disallow-privilege-escalation
|
name: disallow-privilege-escalation
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: disallow-privilege-escalation
|
name: disallow-privilege-escalation
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: disallow-privilege-escalation
|
name: disallow-privilege-escalation
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-labels
|
name: check-deployment-labels
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-labels
|
name: check-deployment-labels
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-labels
|
name: check-deployment-labels
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-labels
|
name: check-deployment-labels
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-labels
|
name: check-deployment-labels
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-labels
|
name: check-deployment-labels
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-labels
|
name: check-deployment-labels
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-labels
|
name: check-deployment-labels
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-labels
|
name: check-deployment-labels
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-labels
|
name: check-deployment-labels
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-labels
|
name: check-deployment-labels
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-labels
|
name: check-deployment-labels
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-labels
|
name: check-deployment-labels
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
apiVersion: kyverno.io/v2alpha1
|
apiVersion: policies.kyverno.io/v1alpha1
|
||||||
kind: ValidatingPolicy
|
kind: ValidatingPolicy
|
||||||
metadata:
|
metadata:
|
||||||
name: check-deployment-labels
|
name: check-deployment-labels
|
||||||
|
|
Loading…
Add table
Reference in a new issue