mirror of
https://github.com/kyverno/kyverno.git
synced 2025-03-31 03:45:17 +00:00
fix latest version check (#7263)
Signed-off-by: ShutingZhao <shuting@nirmata.com>
This commit is contained in:
parent
f372adfa1a
commit
67cf3e1c96
2 changed files with 56 additions and 7 deletions
|
@ -15,19 +15,35 @@ import (
|
||||||
// Evaluate Pod's specified containers only and get PSSCheckResults
|
// Evaluate Pod's specified containers only and get PSSCheckResults
|
||||||
func evaluatePSS(level *api.LevelVersion, pod corev1.Pod) (results []pssutils.PSSCheckResult) {
|
func evaluatePSS(level *api.LevelVersion, pod corev1.Pod) (results []pssutils.PSSCheckResult) {
|
||||||
checks := policy.DefaultChecks()
|
checks := policy.DefaultChecks()
|
||||||
|
var latestVersionCheck policy.VersionedCheck
|
||||||
for _, check := range checks {
|
for _, check := range checks {
|
||||||
if level.Level == api.LevelBaseline && check.Level != level.Level {
|
if level.Level == api.LevelBaseline && check.Level != level.Level {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
// check version
|
|
||||||
appliedOnce := true
|
latestVersionCheck = check.Versions[0]
|
||||||
|
for i := 1; i < len(check.Versions); i++ {
|
||||||
|
vc := check.Versions[i]
|
||||||
|
if !vc.MinimumVersion.Older(latestVersionCheck.MinimumVersion) {
|
||||||
|
latestVersionCheck = vc
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if level.Version == api.LatestVersion() {
|
||||||
|
checkResult := latestVersionCheck.CheckPod(&pod.ObjectMeta, &pod.Spec)
|
||||||
|
if !checkResult.Allowed {
|
||||||
|
results = append(results, pssutils.PSSCheckResult{
|
||||||
|
ID: string(check.ID),
|
||||||
|
CheckResult: checkResult,
|
||||||
|
RestrictedFields: GetRestrictedFields(check),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for _, versionCheck := range check.Versions {
|
for _, versionCheck := range check.Versions {
|
||||||
// the latest check returned twice, skip duplicate application
|
// the latest check returned twice, skip duplicate application
|
||||||
if level.Version == api.LatestVersion() {
|
if level.Version == api.LatestVersion() {
|
||||||
if !appliedOnce {
|
continue
|
||||||
continue
|
|
||||||
}
|
|
||||||
} else if level.Version != api.LatestVersion() && level.Version.Older(versionCheck.MinimumVersion) {
|
} else if level.Version != api.LatestVersion() && level.Version.Older(versionCheck.MinimumVersion) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -40,7 +56,6 @@ func evaluatePSS(level *api.LevelVersion, pod corev1.Pod) (results []pssutils.PS
|
||||||
RestrictedFields: GetRestrictedFields(check),
|
RestrictedFields: GetRestrictedFields(check),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
appliedOnce = false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return results
|
return results
|
||||||
|
|
|
@ -2115,6 +2115,40 @@ var baseline_procMount = []testCase{
|
||||||
}
|
}
|
||||||
|
|
||||||
var baseline_seccompProfile = []testCase{
|
var baseline_seccompProfile = []testCase{
|
||||||
|
{
|
||||||
|
name: "baseline_seccompProfile_no_exclusion",
|
||||||
|
rawRule: []byte(`
|
||||||
|
{
|
||||||
|
"level": "baseline",
|
||||||
|
"version": "latest"
|
||||||
|
}`),
|
||||||
|
rawPod: []byte(`
|
||||||
|
{
|
||||||
|
"kind": "Pod",
|
||||||
|
"metadata": {
|
||||||
|
"name": "test"
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"securityContext": {
|
||||||
|
"seccompProfile": {
|
||||||
|
"type": "Unconfined"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"containers": [
|
||||||
|
{
|
||||||
|
"name": "nginx",
|
||||||
|
"image": "nginx",
|
||||||
|
"securityContext": {
|
||||||
|
"seccompProfile": {
|
||||||
|
"type": "Unconfined"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}`),
|
||||||
|
allowed: false,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "baseline_seccompProfile_defines_all_violate_true_1",
|
name: "baseline_seccompProfile_defines_all_violate_true_1",
|
||||||
rawRule: []byte(`
|
rawRule: []byte(`
|
||||||
|
|
Loading…
Add table
Reference in a new issue