...
1
16
17 package validation
18
19 import (
20 "fmt"
21 "strings"
22
23 apimachineryvalidation "k8s.io/apimachinery/pkg/api/validation"
24 "k8s.io/apimachinery/pkg/util/validation/field"
25 apivalidation "k8s.io/kubernetes/pkg/apis/core/validation"
26 "k8s.io/kubernetes/pkg/apis/scheduling"
27 schedulingapiv1 "k8s.io/kubernetes/pkg/apis/scheduling/v1"
28 )
29
30
31
32 func ValidatePriorityClass(pc *scheduling.PriorityClass) field.ErrorList {
33 allErrs := field.ErrorList{}
34 allErrs = append(allErrs, apivalidation.ValidateObjectMeta(&pc.ObjectMeta, false, apimachineryvalidation.NameIsDNSSubdomain, field.NewPath("metadata"))...)
35
36
37 if strings.HasPrefix(pc.Name, scheduling.SystemPriorityClassPrefix) {
38 if is, err := schedulingapiv1.IsKnownSystemPriorityClass(pc.Name, pc.Value, pc.GlobalDefault); !is {
39 allErrs = append(allErrs, field.Forbidden(field.NewPath("metadata", "name"), "priority class names with '"+scheduling.SystemPriorityClassPrefix+"' prefix are reserved for system use only. error: "+err.Error()))
40 }
41 } else if pc.Value > scheduling.HighestUserDefinablePriority {
42
43 allErrs = append(allErrs, field.Forbidden(field.NewPath("value"), fmt.Sprintf("maximum allowed value of a user defined priority is %v", scheduling.HighestUserDefinablePriority)))
44 }
45 if pc.PreemptionPolicy != nil {
46 allErrs = append(allErrs, apivalidation.ValidatePreemptionPolicy(pc.PreemptionPolicy, field.NewPath("preemptionPolicy"))...)
47 }
48 return allErrs
49 }
50
51
52
53 func ValidatePriorityClassUpdate(pc, oldPc *scheduling.PriorityClass) field.ErrorList {
54
55 allErrs := apivalidation.ValidateObjectMetaUpdate(&pc.ObjectMeta, &oldPc.ObjectMeta, field.NewPath("metadata"))
56
57 if pc.Value != oldPc.Value {
58 allErrs = append(allErrs, field.Forbidden(field.NewPath("value"), "may not be changed in an update."))
59 }
60
61 allErrs = append(allErrs, apivalidation.ValidateImmutableField(pc.PreemptionPolicy, oldPc.PreemptionPolicy, field.NewPath("preemptionPolicy"))...)
62 return allErrs
63 }
64
View as plain text