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

refactor: add cli fix package (#8400)

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
This commit is contained in:
Charles-Edouard Brétéché 2023-09-14 21:36:32 +02:00 committed by GitHub
parent d8186ef4ab
commit 410f99f624
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
39 changed files with 533 additions and 483 deletions

View file

@ -6,8 +6,9 @@ import (
"io" "io"
"os" "os"
"path/filepath" "path/filepath"
"reflect"
testapi "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/apis/test" "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/fix"
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/test" "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/test"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )
@ -45,66 +46,24 @@ func (o options) execute(out io.Writer, dirs ...string) error {
fmt.Fprintln(out) fmt.Fprintln(out)
continue continue
} }
test := testCase.Test fixed := *testCase.Test
needsSave := false if fixed.Name == "" {
if test.Name == "" {
fmt.Fprintln(out, " WARNING: name is not set") fmt.Fprintln(out, " WARNING: name is not set")
test.Name = filepath.Base(testCase.Path) fixed.Name = filepath.Base(testCase.Path)
needsSave = true
} }
if len(test.Policies) == 0 { fixed, messages, err := fix.FixTest(fixed, o.compress)
fmt.Fprintln(out, " WARNING: test has no policies") for _, warning := range messages {
fmt.Fprintln(out, " WARNING:", warning)
} }
if len(test.Resources) == 0 { if err != nil {
fmt.Fprintln(out, " WARNING: test has no resources") fmt.Fprintln(out, " ERROR:", err)
} continue
for i := range test.Results {
result := &test.Results[i]
if result.Resource != "" && len(result.Resources) != 0 {
fmt.Fprintln(out, " WARNING: test result should not use both `resource` and `resources` fields")
}
if result.Resource != "" {
fmt.Fprintln(out, " WARNING: test result uses deprecated `resource` field, moving it into the `resources` field")
result.Resources = append(result.Resources, result.Resource)
result.Resource = ""
needsSave = true
}
if result.Namespace != "" {
fmt.Fprintln(out, " WARNING: test result uses deprecated `namespace` field, replacing `policy` with a `<namespace>/<name>` pattern")
result.Policy = fmt.Sprintf("%s/%s", result.Namespace, result.Policy)
result.Namespace = ""
needsSave = true
}
if result.Status != "" && result.Result != "" {
fmt.Fprintln(out, " ERROR: test result should not use both `status` and `result` fields")
}
if result.Status != "" && result.Result == "" {
fmt.Fprintln(out, " WARNING: test result uses deprecated `status` field, moving it into the `result` field")
result.Result = result.Status
result.Status = ""
needsSave = true
}
}
if o.compress {
compressed := map[testapi.TestResultBase][]string{}
for _, result := range test.Results {
compressed[result.TestResultBase] = append(compressed[result.TestResultBase], result.Resources...)
}
if len(compressed) != len(test.Results) {
needsSave = true
}
test.Results = nil
for k, v := range compressed {
test.Results = append(test.Results, testapi.TestResult{
TestResultBase: k,
Resources: v,
})
}
} }
needsSave := !reflect.DeepEqual(testCase.Test, &fixed)
if o.save && needsSave { if o.save && needsSave {
fmt.Fprintf(out, " Saving test file (%s)...", testCase.Path) fmt.Fprintf(out, " Saving test file (%s)...", testCase.Path)
fmt.Fprintln(out) fmt.Fprintln(out)
yamlBytes, err := yaml.Marshal(test) yamlBytes, err := yaml.Marshal(fixed)
if err != nil { if err != nil {
fmt.Fprintf(out, " ERROR: converting test to yaml: %s", err) fmt.Fprintf(out, " ERROR: converting test to yaml: %s", err)
fmt.Fprintln(out) fmt.Fprintln(out)

View file

@ -0,0 +1,101 @@
package fix
import (
"errors"
"fmt"
testapi "github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/apis/test"
"golang.org/x/exp/slices"
)
func FixTest(test testapi.Test, compress bool) (testapi.Test, []string, error) {
var messages []string
if test.Name == "" {
messages = append(messages, "name is not set")
}
if len(test.Policies) == 0 {
messages = append(messages, "test has no policies")
}
if len(test.Resources) == 0 {
messages = append(messages, "test has no resources")
}
var results []testapi.TestResult
for _, result := range test.Results {
if result.Resource != "" && len(result.Resources) != 0 {
messages = append(messages, "test result should not use both `resource` and `resources` fields")
}
if result.Resource != "" {
var resources []string
messages = append(messages, "test result uses deprecated `resource` field, moving it into the `resources` field")
resources = append(resources, result.Resources...)
resources = append(resources, result.Resource)
result.Resources = resources
result.Resource = ""
}
if result.Namespace != "" {
messages = append(messages, "test result uses deprecated `namespace` field, replacing `policy` with a `<namespace>/<name>` pattern")
result.Policy = fmt.Sprintf("%s/%s", result.Namespace, result.Policy)
result.Namespace = ""
}
if result.Status != "" && result.Result != "" {
return test, messages, errors.New("test result should not use both `status` and `result` fields")
}
if result.Status != "" && result.Result == "" {
messages = append(messages, "test result uses deprecated `status` field, moving it into the `result` field")
result.Result = result.Status
result.Status = ""
}
results = append(results, result)
}
if compress {
compressed := map[testapi.TestResultBase][]string{}
for _, result := range results {
compressed[result.TestResultBase] = append(compressed[result.TestResultBase], result.Resources...)
}
results = nil
for k, v := range compressed {
results = append(results, testapi.TestResult{
TestResultBase: k,
Resources: v,
})
}
}
slices.SortFunc(results, func(a, b testapi.TestResult) bool {
if a.Policy < b.Policy {
return true
}
if a.Rule < b.Rule {
return true
}
if a.Result < b.Result {
return true
}
if a.Kind < b.Kind {
return true
}
if a.PatchedResource < b.PatchedResource {
return true
}
if a.GeneratedResource < b.GeneratedResource {
return true
}
if a.CloneSourceResource < b.CloneSourceResource {
return true
}
slices.Sort(a.Resources)
slices.Sort(b.Resources)
if len(a.Resources) < len(b.Resources) {
return true
}
if len(a.Resources) == len(b.Resources) {
for i := range a.Resources {
if a.Resources[i] < b.Resources[i] {
return true
}
}
}
return false
})
test.Results = results
return test, messages, nil
}

View file

@ -4,6 +4,12 @@ policies:
resources: resources:
- resources.yaml - resources.yaml
results: results:
- kind: Pod
policy: check-image-base
resources:
- test-pod-with-trusted-registry
result: pass
rule: check-image-base-rule
- kind: Pod - kind: Pod
policy: images policy: images
resources: resources:
@ -11,9 +17,3 @@ results:
- test-pod-with-trusted-registry - test-pod-with-trusted-registry
result: pass result: pass
rule: only-allow-trusted-images rule: only-allow-trusted-images
- kind: Pod
policy: check-image-base
resources:
- test-pod-with-trusted-registry
result: pass
rule: check-image-base-rule

View file

@ -9,10 +9,10 @@ results:
resources: resources:
- probe - probe
result: pass result: pass
rule: check-readinessProbe-exists rule: check-livenessProbe-exists
- kind: Pod - kind: Pod
policy: check-probe-exists policy: check-probe-exists
resources: resources:
- probe - probe
result: pass result: pass
rule: check-livenessProbe-exists rule: check-readinessProbe-exists

View file

@ -4,13 +4,6 @@ policies:
resources: resources:
- resource.yaml - resource.yaml
results: results:
- generatedResource: generatedResourceQuota.yaml
kind: Namespace
policy: add-ns-quota
resources:
- hello-world-namespace
result: pass
rule: generate-resourcequota
- generatedResource: generatedLimitRange.yaml - generatedResource: generatedLimitRange.yaml
kind: Namespace kind: Namespace
policy: add-ns-quota policy: add-ns-quota
@ -18,3 +11,10 @@ results:
- hello-world-namespace - hello-world-namespace
result: pass result: pass
rule: generate-limitrange rule: generate-limitrange
- generatedResource: generatedResourceQuota.yaml
kind: Namespace
policy: add-ns-quota
resources:
- hello-world-namespace
result: pass
rule: generate-resourcequota

View file

@ -1,22 +1,22 @@
name: sync-controller-data name: sync-controller-data
policies: policies:
- policy.yaml - policy.yaml
resources: resources:
- deployment.yaml - deployment.yaml
results: results:
- policy: sync-controller-data - cloneSourceResource: cm.yaml
rule: sync-controller-secret generatedResource: gen-cm.yaml
resources: kind: Deployment
- kubernetes-cluster-controller policy: sync-controller-data
generatedResource: gen-secret.yaml resources:
cloneSourceResource: secret.yaml - kubernetes-cluster-controller
kind: Deployment result: pass
result: pass rule: sync-controller-configmap
- policy: sync-controller-data - cloneSourceResource: secret.yaml
rule: sync-controller-configmap generatedResource: gen-secret.yaml
resources: kind: Deployment
- kubernetes-cluster-controller policy: sync-controller-data
generatedResource: gen-cm.yaml resources:
cloneSourceResource: cm.yaml - kubernetes-cluster-controller
kind: Deployment result: pass
result: pass rule: sync-controller-secret

View file

@ -11,13 +11,6 @@ results:
- nginx-demo1 - nginx-demo1
result: pass result: pass
rule: add-default-requests rule: add-default-requests
- kind: Pod
patchedResource: patchedResource2.yaml
policy: add-default-resources
resources:
- nginx-demo2
result: skip
rule: add-default-requests
- kind: Pod - kind: Pod
patchedResource: patchedResource3.yaml patchedResource: patchedResource3.yaml
policy: add-default-resources policy: add-default-resources
@ -25,3 +18,10 @@ results:
- nginx-demo3 - nginx-demo3
result: pass result: pass
rule: add-default-requests rule: add-default-requests
- kind: Pod
patchedResource: patchedResource2.yaml
policy: add-default-resources
resources:
- nginx-demo2
result: skip
rule: add-default-requests

View file

@ -4,12 +4,6 @@ policies:
resources: resources:
- resource.yaml - resource.yaml
results: results:
- kind: Service
policy: disable-connection-draining
resources:
- nlb-aws-controller-no-attributes
result: skip
rule: clb
- kind: Service - kind: Service
patchedResource: patched.yaml patchedResource: patched.yaml
policy: disable-connection-draining policy: disable-connection-draining
@ -17,3 +11,9 @@ results:
- nlb-aws-controller-no-attributes - nlb-aws-controller-no-attributes
result: pass result: pass
rule: nlb-no-attributes rule: nlb-no-attributes
- kind: Service
policy: disable-connection-draining
resources:
- nlb-aws-controller-no-attributes
result: skip
rule: clb

View file

@ -4,13 +4,6 @@ policies:
resources: resources:
- resources.yaml - resources.yaml
results: results:
- kind: Pod
patchedResource: patched-resource.yaml
policy: foreach-json-patch
resources:
- nginx
result: pass
rule: add-security-context
- kind: Pod - kind: Pod
patchedResource: pod-updated-image.yaml patchedResource: pod-updated-image.yaml
policy: mutate-images policy: mutate-images
@ -18,4 +11,11 @@ results:
- mypod - mypod
result: pass result: pass
rule: test rule: test
- kind: Pod
patchedResource: patched-resource.yaml
policy: foreach-json-patch
resources:
- nginx
result: pass
rule: add-security-context
variables: values.yaml variables: values.yaml

View file

@ -4,6 +4,12 @@ policies:
resources: resources:
- resource.yaml - resource.yaml
results: results:
- kind: Pod
policy: karpenter-annotations-to-nodeselector
resources:
- soft-pod-antiaffinity-1-copy
result: pass
rule: hard-nodeselector-lifecycle-on-demand
- kind: Pod - kind: Pod
patchedResource: patched.yaml patchedResource: patched.yaml
policy: karpenter-annotations-to-nodeselector policy: karpenter-annotations-to-nodeselector
@ -11,9 +17,3 @@ results:
- soft-pod-antiaffinity-1 - soft-pod-antiaffinity-1
result: pass result: pass
rule: hard-nodeselector-lifecycle-on-demand rule: hard-nodeselector-lifecycle-on-demand
- kind: Pod
policy: karpenter-annotations-to-nodeselector
resources:
- soft-pod-antiaffinity-1-copy
result: pass
rule: hard-nodeselector-lifecycle-on-demand

View file

@ -5,12 +5,26 @@ resources:
- resource.yaml - resource.yaml
results: results:
- kind: Pod - kind: Pod
patchedResource: patchedResource3.yaml patchedResource: patchedResource2.yaml
policy: add-label policy: add-label
resources: resources:
- production/same-name-but-diff-namespace - testing/same-name-but-diff-namespace
result: pass result: pass
rule: add-label rule: add-label
- kind: Pod
patchedResource: patchedResource1.yaml
policy: add-label
resources:
- practice/resource-equal-to-patch-res-for-cp
result: skip
rule: add-label
- kind: Pod
patchedResource: patched-resource.yaml
policy: example
resources:
- example
result: pass
rule: object_from_lists
- kind: Deployment - kind: Deployment
patchedResource: patchedResource4.yaml patchedResource: patchedResource4.yaml
policy: add-label policy: add-label
@ -18,6 +32,13 @@ results:
- mydeploy - mydeploy
result: pass result: pass
rule: add-label rule: add-label
- kind: Pod
patchedResource: patchedResource3.yaml
policy: add-label
resources:
- production/same-name-but-diff-namespace
result: pass
rule: add-label
- kind: Pod - kind: Pod
patchedResource: patchedResource6.yaml patchedResource: patchedResource6.yaml
policy: add-label policy: add-label
@ -32,24 +53,3 @@ results:
- same-name-but-diff-namespace - same-name-but-diff-namespace
result: pass result: pass
rule: add-ndots rule: add-ndots
- kind: Pod
patchedResource: patched-resource.yaml
policy: example
resources:
- example
result: pass
rule: object_from_lists
- kind: Pod
patchedResource: patchedResource1.yaml
policy: add-label
resources:
- practice/resource-equal-to-patch-res-for-cp
result: skip
rule: add-label
- kind: Pod
patchedResource: patchedResource2.yaml
policy: add-label
resources:
- testing/same-name-but-diff-namespace
result: pass
rule: add-label

View file

@ -7,9 +7,8 @@ results:
- kind: Service - kind: Service
policy: validate-service-loadbalancer policy: validate-service-loadbalancer
resources: resources:
- service-public-pass - service-clusterip-skip
- service-public-2-pass result: skip
result: pass
rule: check-loadbalancer-public rule: check-loadbalancer-public
- kind: Service - kind: Service
policy: validate-service-loadbalancer policy: validate-service-loadbalancer
@ -20,6 +19,7 @@ results:
- kind: Service - kind: Service
policy: validate-service-loadbalancer policy: validate-service-loadbalancer
resources: resources:
- service-clusterip-skip - service-public-2-pass
result: skip - service-public-pass
result: pass
rule: check-loadbalancer-public rule: check-loadbalancer-public

View file

@ -1,19 +1,19 @@
name: test name: test
policies: policies:
- policy.yaml - policy.yaml
variables: values.yaml
resources: resources:
- resource.yaml - resource.yaml
results: results:
- policy: test-policy - kind: Deployment
rule: test-rule policy: test-policy
resources: resources:
- pod - deployment
kind: Pod result: pass
result: pass rule: test-rule
- policy: test-policy - kind: Pod
rule: test-rule policy: test-policy
resources: resources:
- deployment - pod
kind: Deployment result: pass
result: pass rule: test-rule
variables: values.yaml

View file

@ -4,51 +4,51 @@ policies:
resources: resources:
- resources.yaml - resources.yaml
results: results:
- kind: Pod
policy: require-common-labels
resources:
- pod-with-labels
result: pass
rule: check-for-labels
- kind: Pod
policy: require-common-labels
resources:
- pod-missing-labels
result: fail
rule: check-for-labels
- kind: Deployment
policy: require-common-labels
resources:
- deployment-with-labels
result: pass
rule: check-for-labels
- kind: Deployment
policy: require-common-labels
resources:
- deployment-missing-labels
result: fail
rule: check-for-labels
- kind: StatefulSet - kind: StatefulSet
policy: require-common-labels policy: require-common-labels
resources: resources:
- StatefulSet-with-labels - StatefulSet-with-labels
result: pass result: pass
rule: check-for-labels rule: check-for-labels
- kind: StatefulSet
policy: require-common-labels
resources:
- StatefulSet-without-labels
result: fail
rule: check-for-labels
- kind: CronJob
policy: require-common-labels
resources:
- cronjob-with-labels
result: pass
rule: check-for-labels
- kind: CronJob - kind: CronJob
policy: require-common-labels policy: require-common-labels
resources: resources:
- cronjob-without-labels - cronjob-without-labels
result: fail result: fail
rule: check-for-labels rule: check-for-labels
- kind: Deployment
policy: require-common-labels
resources:
- deployment-missing-labels
result: fail
rule: check-for-labels
- kind: Pod
policy: require-common-labels
resources:
- pod-missing-labels
result: fail
rule: check-for-labels
- kind: CronJob
policy: require-common-labels
resources:
- cronjob-with-labels
result: pass
rule: check-for-labels
- kind: Deployment
policy: require-common-labels
resources:
- deployment-with-labels
result: pass
rule: check-for-labels
- kind: Pod
policy: require-common-labels
resources:
- pod-with-labels
result: pass
rule: check-for-labels
- kind: StatefulSet
policy: require-common-labels
resources:
- StatefulSet-without-labels
result: fail
rule: check-for-labels

View file

@ -4,12 +4,6 @@ policies:
resources: resources:
- resources.yaml - resources.yaml
results: results:
- kind: Pod
policy: example
resources:
- example
result: pass
rule: defined-value
- kind: Pod - kind: Pod
policy: example policy: example
resources: resources:
@ -27,13 +21,13 @@ results:
resources: resources:
- example - example
result: pass result: pass
rule: defined-value-with-variable rule: defined-jmespath-with-default-variable
- kind: Pod - kind: Pod
policy: example policy: example
resources: resources:
- example - example
result: pass result: pass
rule: defined-jmespath-with-default-variable rule: defined-value
- kind: Pod - kind: Pod
policy: example policy: example
resources: resources:
@ -51,13 +45,7 @@ results:
resources: resources:
- example - example
result: pass result: pass
rule: value-override rule: defined-value-with-variable
- kind: Pod
policy: example
resources:
- example
result: pass
rule: wildcard-match
- kind: Pod - kind: Pod
policy: example policy: example
resources: resources:
@ -70,3 +58,15 @@ results:
- example - example
result: pass result: pass
rule: unused-var rule: unused-var
- kind: Pod
policy: example
resources:
- example
result: pass
rule: value-override
- kind: Pod
policy: example
resources:
- example
result: pass
rule: wildcard-match

View file

@ -7,13 +7,13 @@ results:
- kind: Pod - kind: Pod
policy: block-images policy: block-images
resources: resources:
- good-pod - bad-pod
result: pass result: fail
rule: block-images rule: block-images
- kind: Pod - kind: Pod
policy: block-images policy: block-images
resources: resources:
- bad-pod - good-pod
result: fail result: pass
rule: block-images rule: block-images
variables: values.yaml variables: values.yaml

View file

@ -4,54 +4,30 @@ policies:
resources: resources:
- resources.yaml - resources.yaml
results: results:
- kind: Secret
policy: base64
resources:
- base64-test-match
result: pass
rule: secret-value-must-match-label
- kind: Secret
policy: base64
resources:
- base64-test-no-match
result: fail
rule: secret-value-must-match-label
- kind: Namespace
policy: pattern-match
resources:
- pattern-match-test-match
result: pass
rule: label-must-match-pattern
- kind: Namespace
policy: pattern-match
resources:
- pattern-match-test-no-match
result: fail
rule: label-must-match-pattern
- kind: Pod - kind: Pod
policy: path-canonicalize policy: path-canonicalize
resources: resources:
- mount-containerd-sock - mount-containerd-sock
result: fail result: fail
rule: disallow-mount-containerd-sock rule: disallow-mount-containerd-sock
- kind: ConfigMap - kind: Secret
policy: test-parse-json policy: base64
resources: resources:
- valid-test - base64-test-no-match
result: fail
rule: secret-value-must-match-label
- kind: Secret
policy: base64
resources:
- base64-test-match
result: pass result: pass
rule: test-json-parsing-jmespath rule: secret-value-must-match-label
- kind: ConfigMap - kind: ConfigMap
policy: test-parse-json policy: test-parse-json
resources: resources:
- invalid-test - invalid-test
result: fail result: fail
rule: test-json-parsing-jmespath rule: test-json-parsing-jmespath
- kind: ConfigMap
policy: test-parse-yaml
resources:
- valid-yaml-test
result: pass
rule: test-yaml-parsing-jmespath
- kind: ConfigMap - kind: ConfigMap
policy: test-parse-yaml policy: test-parse-yaml
resources: resources:
@ -59,7 +35,13 @@ results:
result: fail result: fail
rule: test-yaml-parsing-jmespath rule: test-yaml-parsing-jmespath
- kind: ConfigMap - kind: ConfigMap
policy: test-parse-yaml-array policy: test-parse-json
resources:
- valid-test
result: pass
rule: test-json-parsing-jmespath
- kind: ConfigMap
policy: test-parse-yaml
resources: resources:
- valid-yaml-test - valid-yaml-test
result: pass result: pass
@ -76,3 +58,21 @@ results:
- test-x509-configmap - test-x509-configmap
result: fail result: fail
rule: test-x509-decode rule: test-x509-decode
- kind: ConfigMap
policy: test-parse-yaml-array
resources:
- valid-yaml-test
result: pass
rule: test-yaml-parsing-jmespath
- kind: Namespace
policy: pattern-match
resources:
- pattern-match-test-no-match
result: fail
rule: label-must-match-pattern
- kind: Namespace
policy: pattern-match
resources:
- pattern-match-test-match
result: pass
rule: label-must-match-pattern

View file

@ -13,8 +13,8 @@ results:
- kind: Role - kind: Role
policy: deny-modify-platform-label policy: deny-modify-platform-label
resources: resources:
- my-role-without-platform
- my-role-with-platform-false - my-role-with-platform-false
- my-role-without-platform
result: skip result: skip
rule: deny-modify-platform-role rule: deny-modify-platform-role
variables: variables.yaml variables: variables.yaml

View file

@ -1,16 +1,18 @@
name: disallow-service name: disallow-service
policies: policies:
- policy.yaml - policy.yaml
resources: resources:
- resource.yaml - resource.yaml
results: results:
- policy: disallow-service - kind: Service
rule: disallow-service policy: disallow-service
resources: [svc1] resources:
kind: Service - svc2
result: skip result: fail
- policy: disallow-service rule: disallow-service
rule: disallow-service - kind: Service
resources: [svc2] policy: disallow-service
kind: Service resources:
result: fail - svc1
result: skip
rule: disallow-service

View file

@ -5,17 +5,23 @@ resources:
- resources.yaml - resources.yaml
results: results:
- kind: Pod - kind: Pod
policy: validate-empty-dir-mountpath policy: validate-image-list
resources: resources:
- test-pod - test-pod
- test-pod2 - test-pod-ghcr
result: pass result: fail
rule: check-mount-paths rule: check-image
- kind: Pod
policy: validate-empty-dir-resources
resources:
- test-pod-with-gke-vol
result: skip
rule: check-resources
- kind: Pod - kind: Pod
policy: validate-empty-dir-resources policy: validate-empty-dir-resources
resources: resources:
- test-pod-bad-mount
- test-pod - test-pod
- test-pod-bad-mount
result: fail result: fail
rule: check-resources rule: check-resources
- kind: Pod - kind: Pod
@ -26,18 +32,12 @@ results:
result: pass result: pass
rule: check-resources rule: check-resources
- kind: Pod - kind: Pod
policy: validate-empty-dir-resources policy: validate-empty-dir-mountpath
resources:
- test-pod-with-gke-vol
result: skip
rule: check-resources
- kind: Pod
policy: validate-image-list
resources: resources:
- test-pod - test-pod
- test-pod-ghcr - test-pod2
result: fail result: pass
rule: check-image rule: check-mount-paths
- kind: Pod - kind: Pod
policy: validate-image-list-error policy: validate-image-list-error
resources: resources:

View file

@ -7,12 +7,12 @@ results:
- kind: Pod - kind: Pod
policy: verify-signature policy: verify-signature
resources: resources:
- signed - unsigned
result: pass result: fail
rule: check-static-key rule: check-static-key
- kind: Pod - kind: Pod
policy: verify-signature policy: verify-signature
resources: resources:
- unsigned - signed
result: fail result: pass
rule: check-static-key rule: check-static-key

View file

@ -10,10 +10,10 @@ results:
- signed - signed
result: pass result: pass
rule: verify-signature rule: verify-signature
- kind: Pod - kind: DataVolume
policy: check-image policy: check-data-volume-image
resources: resources:
- unsigned - unsigned-registry-image-datavolume
result: fail result: fail
rule: verify-signature rule: verify-signature
- kind: DataVolume - kind: DataVolume
@ -22,9 +22,9 @@ results:
- signed-registry-image-datavolume - signed-registry-image-datavolume
result: pass result: pass
rule: verify-signature rule: verify-signature
- kind: DataVolume - kind: Pod
policy: check-data-volume-image policy: check-image
resources: resources:
- unsigned-registry-image-datavolume - unsigned
result: fail result: fail
rule: verify-signature rule: verify-signature

View file

@ -4,20 +4,6 @@ policies:
resources: resources:
- resources.yaml - resources.yaml
results: results:
- kind: Pod
policy: default/test-jmespath
resources:
- test-valid1
- test-valid2
- test-valid3
result: pass
rule: test-jmespath
- kind: Pod
policy: default/test-jmespath
resources:
- test-invalid
result: fail
rule: test-jmespath
- kind: Namespace - kind: Namespace
policy: namespace-validation policy: namespace-validation
resources: resources:
@ -30,3 +16,17 @@ results:
- test-valid - test-valid
result: pass result: pass
rule: namespace-validation rule: namespace-validation
- kind: Pod
policy: default/test-jmespath
resources:
- test-invalid
result: fail
rule: test-jmespath
- kind: Pod
policy: default/test-jmespath
resources:
- test-valid1
- test-valid2
- test-valid3
result: pass
rule: test-jmespath

View file

@ -7,13 +7,13 @@ results:
- kind: ConfigMap - kind: ConfigMap
policy: limit-configmap-for-sa policy: limit-configmap-for-sa
resources: resources:
- any-namespace/any-configmap-name-good - any-namespace/any-configmap-name-bad
result: fail result: skip
rule: limit-configmap-for-sa-developer rule: limit-configmap-for-sa-developer
- kind: ConfigMap - kind: ConfigMap
policy: limit-configmap-for-sa policy: limit-configmap-for-sa
resources: resources:
- any-namespace/any-configmap-name-bad - any-namespace/any-configmap-name-good
result: skip result: fail
rule: limit-configmap-for-sa-developer rule: limit-configmap-for-sa-developer
variables: variables.yaml variables: variables.yaml

View file

@ -10,6 +10,12 @@ results:
- user-foo/nodeselector-without-labels-on-mutation - user-foo/nodeselector-without-labels-on-mutation
result: fail result: fail
rule: ondemand-managed_by rule: ondemand-managed_by
- kind: Pod
policy: ondemand
resources:
- user-space/nodeselector-with-labels-on-mutation
result: pass
rule: ondemand-managed_by
- kind: Pod - kind: Pod
patchedResource: patched-resource.yaml patchedResource: patched-resource.yaml
policy: ondemand policy: ondemand
@ -17,9 +23,3 @@ results:
- user-space/nodeselector-with-labels-on-mutation - user-space/nodeselector-with-labels-on-mutation
result: pass result: pass
rule: ondemand-nodeselector rule: ondemand-nodeselector
- kind: Pod
policy: ondemand
resources:
- user-space/nodeselector-with-labels-on-mutation
result: pass
rule: ondemand-managed_by

View file

@ -7,12 +7,12 @@ results:
- kind: Pod - kind: Pod
policy: test-multiple-key policy: test-multiple-key
resources: resources:
- test-resource-pass - test-resource-fail
result: pass result: fail
rule: test-multiple-key rule: test-multiple-key
- kind: Pod - kind: Pod
policy: test-multiple-key policy: test-multiple-key
resources: resources:
- test-resource-fail - test-resource-pass
result: fail result: pass
rule: test-multiple-key rule: test-multiple-key

View file

@ -1,23 +1,26 @@
name: mutate-keda-scaled-object name: mutate-keda-scaled-object
policies: policies:
- policy.yaml - policy.yaml
resources: resources:
- resources.yaml - resources.yaml
results: results:
- policy: keda-prometheus-serveraddress - kind: ScaledObject
rule: keda-prometheus-serveraddress patchedResource: patchedResource1.yaml
resources: [service-1] policy: keda-prometheus-serveraddress
patchedResource: patchedResource1.yaml resources:
kind: ScaledObject - service-1
result: pass result: pass
- policy: keda-prometheus-serveraddress rule: keda-prometheus-serveraddress
rule: keda-prometheus-serveraddress - kind: ScaledObject
resources: [service-2] policy: keda-prometheus-serveraddress
patchedResource: patchedResource2.yaml resources:
kind: ScaledObject - service-3
result: pass result: skip
- policy: keda-prometheus-serveraddress rule: keda-prometheus-serveraddress
rule: keda-prometheus-serveraddress - kind: ScaledObject
resources: [service-3] patchedResource: patchedResource2.yaml
kind: ScaledObject policy: keda-prometheus-serveraddress
result: skip resources:
- service-2
result: pass
rule: keda-prometheus-serveraddress

View file

@ -7,13 +7,13 @@ results:
- kind: Pod - kind: Pod
policy: exclude-namespaces-example policy: exclude-namespaces-example
resources: resources:
- bad-pod01 - bad-pod02
result: pass result: error
rule: exclude-namespaces-dynamically rule: exclude-namespaces-dynamically
- kind: Pod - kind: Pod
policy: exclude-namespaces-example policy: exclude-namespaces-example
resources: resources:
- bad-pod02 - bad-pod01
result: error result: pass
rule: exclude-namespaces-dynamically rule: exclude-namespaces-dynamically
variables: values.yaml variables: values.yaml

View file

@ -7,12 +7,12 @@ results:
- kind: Certificate - kind: Certificate
policy: cert-manager-limit-duration policy: cert-manager-limit-duration
resources: resources:
- letsencrypt-crt - acme-crt
result: skip result: error
rule: certificate-duration-max-100days rule: certificate-duration-max-100days
- kind: Certificate - kind: Certificate
policy: cert-manager-limit-duration policy: cert-manager-limit-duration
resources: resources:
- acme-crt - letsencrypt-crt
result: error result: skip
rule: certificate-duration-max-100days rule: certificate-duration-max-100days

View file

@ -7,13 +7,13 @@ results:
- kind: Pod - kind: Pod
policy: disallow-naked-pods policy: disallow-naked-pods
resources: resources:
- blank-skip - blank-fail
result: skip result: fail
rule: validate-naked-pods rule: validate-naked-pods
- kind: Pod - kind: Pod
policy: disallow-naked-pods policy: disallow-naked-pods
resources: resources:
- blank-fail - blank-skip
result: fail result: skip
rule: validate-naked-pods rule: validate-naked-pods
variables: values.yaml variables: values.yaml

View file

@ -7,12 +7,12 @@ results:
- kind: Pod - kind: Pod
policy: preconditions policy: preconditions
resources: resources:
- test-valid - test-invalid
result: pass result: fail
rule: any-rule rule: any-rule
- kind: Pod - kind: Pod
policy: preconditions policy: preconditions
resources: resources:
- test-invalid - test-valid
result: fail result: pass
rule: any-rule rule: any-rule

View file

@ -1,19 +1,19 @@
name: resource-lists name: resource-lists
policies: policies:
- policy.yaml - policy.yaml
resources: resources:
- resource.yaml - resource.yaml
results: results:
- policy: resource-lists - kind: Pod
rule: require-image-tag policy: resource-lists
resources: resources:
- myapp-pod1 - myapp-pod3
- myapp-pod2 result: pass
kind: Pod rule: validate-image-tag
result: pass - kind: Pod
- policy: resource-lists policy: resource-lists
rule: validate-image-tag resources:
resources: - myapp-pod1
- myapp-pod3 - myapp-pod2
kind: Pod result: pass
result: pass rule: require-image-tag

View file

@ -1,19 +1,18 @@
# Taken from https://github.com/kyverno/kyverno/issues/6463
name: repro-dups-bug name: repro-dups-bug
policies: policies:
- policy.yaml - policy.yaml
resources: resources:
- resources.yaml - resources.yaml
results: results:
- policy: restrict-something - kind: Pod
rule: validate-some-foo policy: restrict-something
resources: resources:
- nginx-foo - nginx-too
kind: Pod result: fail
result: pass rule: validate-some-non-foo
- policy: restrict-something - kind: Pod
rule: validate-some-non-foo policy: restrict-something
resources: resources:
- nginx-too - nginx-foo
kind: Pod result: pass
result: fail rule: validate-some-foo

View file

@ -4,12 +4,6 @@ policies:
resources: resources:
- resource.yaml - resource.yaml
results: results:
- kind: Ingress
policy: unique-ingress-host
resources:
- ingress-kyverno-host
result: fail
rule: check-single-host
- kind: Ingress - kind: Ingress
policy: unique-ingress-host policy: unique-ingress-host
resources: resources:
@ -20,12 +14,18 @@ results:
policy: unique-ingress-host policy: unique-ingress-host
resources: resources:
- ingress-kyverno-host - ingress-kyverno-host
result: skip result: fail
rule: check-single-host
- kind: Ingress
policy: unique-ingress-host
resources:
- ingress-foo-host
result: fail
rule: deny-multiple-hosts rule: deny-multiple-hosts
- kind: Ingress - kind: Ingress
policy: unique-ingress-host policy: unique-ingress-host
resources: resources:
- ingress-foo-host - ingress-kyverno-host
result: fail result: skip
rule: deny-multiple-hosts rule: deny-multiple-hosts
variables: values.yaml variables: values.yaml

View file

@ -4,13 +4,6 @@ policies:
resources: resources:
- resources.yaml - resources.yaml
results: results:
- kind: Secret
patchedResource: patched-resource.yaml
policy: add-maintainer
resources:
- example
result: pass
rule: add-maintainer
- kind: Secret - kind: Secret
patchedResource: patched-resource1.yaml patchedResource: patched-resource1.yaml
policy: add-maintainer policy: add-maintainer
@ -18,3 +11,10 @@ results:
- secrete-fail-example - secrete-fail-example
result: fail result: fail
rule: add-maintainer rule: add-maintainer
- kind: Secret
patchedResource: patched-resource.yaml
policy: add-maintainer
resources:
- example
result: pass
rule: add-maintainer

View file

@ -7,27 +7,9 @@ results:
- kind: Pod - kind: Pod
policy: disallow-latest-tag policy: disallow-latest-tag
resources: resources:
- test/test-validate-image-tag-fail - test/test-require-image-tag-fail
result: fail result: fail
rule: validate-image-tag rule: require-image-tag
- kind: Pod
policy: duration-test
resources:
- test/test-lifetime-fail
result: fail
rule: greater-than
- kind: Pod
policy: disallow-latest-tag
resources:
- test/test-validate-image-tag-pass
result: pass
rule: validate-image-tag
- kind: Pod
policy: duration-test
resources:
- test/test-lifetime-fail
result: pass
rule: less-equal-than
- kind: Pod - kind: Pod
policy: disallow-latest-tag policy: disallow-latest-tag
resources: resources:
@ -37,30 +19,48 @@ results:
- kind: Pod - kind: Pod
policy: disallow-latest-tag policy: disallow-latest-tag
resources: resources:
- test/test-require-image-tag-fail - test/test-validate-image-tag-fail
result: fail result: fail
rule: require-image-tag rule: validate-image-tag
- kind: Pod - kind: Pod
policy: duration-test policy: disallow-latest-tag
resources: resources:
- test/test-lifetime-fail - test/test-validate-image-tag-pass
result: pass result: pass
rule: less-than rule: validate-image-tag
- kind: Pod - kind: Pod
policy: duration-test policy: duration-test
resources: resources:
- test/test-lifetime-fail - test/test-lifetime-fail
result: fail result: fail
rule: greater-equal-than rule: greater-equal-than
- kind: Pod
policy: duration-test
resources:
- test/test-lifetime-fail
result: fail
rule: greater-than
- kind: Pod - kind: Pod
policy: restrict-pod-counts policy: restrict-pod-counts
resources: resources:
- myapp-pod - myapp-pod
- test-validate-image-tag-ignore - test-validate-image-tag-ignore
- test/test-require-image-tag-pass
- test/test-require-image-tag-fail - test/test-require-image-tag-fail
- test/test-require-image-tag-pass
- test/test-validate-image-tag-fail - test/test-validate-image-tag-fail
- test/test-validate-image-tag-pass - test/test-validate-image-tag-pass
result: fail result: fail
rule: restrict-pod-count rule: restrict-pod-count
- kind: Pod
policy: duration-test
resources:
- test/test-lifetime-fail
result: pass
rule: less-equal-than
- kind: Pod
policy: duration-test
resources:
- test/test-lifetime-fail
result: pass
rule: less-than
variables: values.yaml variables: values.yaml

View file

@ -8,11 +8,11 @@ results:
kind: Deployment kind: Deployment
policy: disallow-host-path policy: disallow-host-path
resources: resources:
- deployment-pass - deployment-fail
result: pass result: fail
- isValidatingAdmissionPolicy: true - isValidatingAdmissionPolicy: true
kind: Deployment kind: Deployment
policy: disallow-host-path policy: disallow-host-path
resources: resources:
- deployment-fail - deployment-pass
result: fail result: pass

View file

@ -10,30 +10,17 @@ resources:
- resources.yaml - resources.yaml
results: results:
- kind: Pod - kind: Pod
policy: images policy: cm-multiple-example
resources:
- test-pod-with-non-root-user-image
- test-pod-with-trusted-registry
result: pass
rule: only-allow-trusted-images
- kind: Pod
policy: cm-variable-example
resources:
- test-env-test
result: pass
rule: example-configmap-lookup
- kind: Pod
policy: cm-variable-example
resources: resources:
- test-env-dev - test-env-dev
result: fail result: fail
rule: example-configmap-lookup rule: example-configmap-lookup
- kind: Pod - kind: Pod
policy: cm-array-example policy: cm-multiple-example
resources: resources:
- test-web - test-env-test
result: fail result: pass
rule: validate-role-annotation rule: example-configmap-lookup
- kind: Pod - kind: Pod
policy: cm-array-example policy: cm-array-example
resources: resources:
@ -43,32 +30,20 @@ results:
- kind: Pod - kind: Pod
policy: cm-blk-scalar-example policy: cm-blk-scalar-example
resources: resources:
- test-blk-app - test-blk-web
result: pass result: fail
rule: validate-blk-role-annotation rule: validate-blk-role-annotation
- kind: Pod - kind: Pod
policy: images policy: cm-globalval-example
resources: resources:
- test-pod-with-non-trusted-registry - test-global-prod
result: fail result: fail
rule: only-allow-trusted-images rule: validate-mode
- kind: Pod
policy: cm-multiple-example
resources:
- test-env-test
result: pass
rule: example-configmap-lookup
- kind: Pod
policy: cm-multiple-example
resources:
- test-env-dev
result: fail
rule: example-configmap-lookup
- kind: Pod - kind: Pod
policy: cm-blk-scalar-example policy: cm-blk-scalar-example
resources: resources:
- test-blk-web - test-blk-app
result: fail result: pass
rule: validate-blk-role-annotation rule: validate-blk-role-annotation
- kind: Pod - kind: Pod
policy: cm-globalval-example policy: cm-globalval-example
@ -77,9 +52,34 @@ results:
result: pass result: pass
rule: validate-mode rule: validate-mode
- kind: Pod - kind: Pod
policy: cm-globalval-example policy: cm-array-example
resources: resources:
- test-global-prod - test-web
result: fail result: fail
rule: validate-mode rule: validate-role-annotation
- kind: Pod
policy: cm-variable-example
resources:
- test-env-dev
result: fail
rule: example-configmap-lookup
- kind: Pod
policy: images
resources:
- test-pod-with-non-trusted-registry
result: fail
rule: only-allow-trusted-images
- kind: Pod
policy: cm-variable-example
resources:
- test-env-test
result: pass
rule: example-configmap-lookup
- kind: Pod
policy: images
resources:
- test-pod-with-non-root-user-image
- test-pod-with-trusted-registry
result: pass
rule: only-allow-trusted-images
variables: variables.yaml variables: variables.yaml

View file

@ -4,35 +4,21 @@ policies:
resources: resources:
- resources.yaml - resources.yaml
results: results:
- kind: Pod
policy: wildcard-support-in-matchlabels
resources:
- my-service-1
result: pass
rule: wildcard-label
- kind: Pod - kind: Pod
policy: wildcard-support-in-matchlabels policy: wildcard-support-in-matchlabels
resources: resources:
- my-service-2 - my-service-2
result: pass result: pass
rule: label-end-with-test rule: label-end-with-test
# TODO CEB FIX
# - kind: Pod
# policy: wildcard-support-in-matchlabels
# resources:
# - my-service-3
# result: skip
# rule: label-end-with-test
- kind: Pod - kind: Pod
policy: wildcard-support-in-matchlabels policy: wildcard-support-in-matchlabels
resources: resources:
- my-service-4 - my-service-4
result: pass result: pass
rule: label-start-with-test rule: label-start-with-test
# TODO CEB FIX - kind: Pod
# - kind: Pod policy: wildcard-support-in-matchlabels
# policy: wildcard-support-in-matchlabels resources:
# resources: - my-service-1
# - my-service-5 result: pass
# result: skip rule: wildcard-label
# rule: label-start-with-test