1
16
17 package prioritylevelconfiguration
18
19 import (
20 "context"
21
22 apiequality "k8s.io/apimachinery/pkg/api/equality"
23 "k8s.io/apimachinery/pkg/runtime"
24 "k8s.io/apimachinery/pkg/runtime/schema"
25 "k8s.io/apimachinery/pkg/util/validation/field"
26 genericapirequest "k8s.io/apiserver/pkg/endpoints/request"
27 "k8s.io/apiserver/pkg/storage/names"
28 "k8s.io/kubernetes/pkg/api/legacyscheme"
29 "k8s.io/kubernetes/pkg/apis/flowcontrol"
30 "k8s.io/kubernetes/pkg/apis/flowcontrol/validation"
31 "sigs.k8s.io/structured-merge-diff/v4/fieldpath"
32 )
33
34
35 type priorityLevelConfigurationStrategy struct {
36 runtime.ObjectTyper
37 names.NameGenerator
38 }
39
40
41 var Strategy = priorityLevelConfigurationStrategy{legacyscheme.Scheme, names.SimpleNameGenerator}
42
43
44 func (priorityLevelConfigurationStrategy) NamespaceScoped() bool {
45 return false
46 }
47
48
49
50 func (priorityLevelConfigurationStrategy) GetResetFields() map[fieldpath.APIVersion]*fieldpath.Set {
51 fields := map[fieldpath.APIVersion]*fieldpath.Set{
52 "flowcontrol.apiserver.k8s.io/v1beta1": fieldpath.NewSet(
53 fieldpath.MakePathOrDie("status"),
54 ),
55 "flowcontrol.apiserver.k8s.io/v1beta2": fieldpath.NewSet(
56 fieldpath.MakePathOrDie("status"),
57 ),
58 "flowcontrol.apiserver.k8s.io/v1beta3": fieldpath.NewSet(
59 fieldpath.MakePathOrDie("status"),
60 ),
61 "flowcontrol.apiserver.k8s.io/v1": fieldpath.NewSet(
62 fieldpath.MakePathOrDie("status"),
63 ),
64 }
65
66 return fields
67 }
68
69
70 func (priorityLevelConfigurationStrategy) PrepareForCreate(ctx context.Context, obj runtime.Object) {
71 pl := obj.(*flowcontrol.PriorityLevelConfiguration)
72 pl.Status = flowcontrol.PriorityLevelConfigurationStatus{}
73 pl.Generation = 1
74 }
75
76
77 func (priorityLevelConfigurationStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) {
78 newPriorityLevelConfiguration := obj.(*flowcontrol.PriorityLevelConfiguration)
79 oldPriorityLevelConfiguration := old.(*flowcontrol.PriorityLevelConfiguration)
80
81
82 if !apiequality.Semantic.DeepEqual(newPriorityLevelConfiguration.Spec, oldPriorityLevelConfiguration.Spec) {
83 newPriorityLevelConfiguration.Generation = oldPriorityLevelConfiguration.Generation + 1
84 }
85 newPriorityLevelConfiguration.Status = oldPriorityLevelConfiguration.Status
86 }
87
88
89 func (priorityLevelConfigurationStrategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList {
90
91
92
93
94
95
96
97
98
99
100
101
102 opts := validation.PriorityLevelValidationOptions{
103 AllowZeroLimitedNominalConcurrencyShares: true,
104 }
105 return validation.ValidatePriorityLevelConfiguration(obj.(*flowcontrol.PriorityLevelConfiguration), getRequestGroupVersion(ctx), opts)
106 }
107
108
109 func (priorityLevelConfigurationStrategy) WarningsOnCreate(ctx context.Context, obj runtime.Object) []string {
110 return nil
111 }
112
113
114 func (priorityLevelConfigurationStrategy) Canonicalize(obj runtime.Object) {
115 }
116
117 func (priorityLevelConfigurationStrategy) AllowUnconditionalUpdate() bool {
118 return true
119 }
120
121
122 func (priorityLevelConfigurationStrategy) AllowCreateOnUpdate() bool {
123 return false
124 }
125
126
127 func (priorityLevelConfigurationStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList {
128 newPL := obj.(*flowcontrol.PriorityLevelConfiguration)
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143 opts := validation.PriorityLevelValidationOptions{
144 AllowZeroLimitedNominalConcurrencyShares: true,
145 }
146 return validation.ValidatePriorityLevelConfiguration(newPL, getRequestGroupVersion(ctx), opts)
147 }
148
149
150 func (priorityLevelConfigurationStrategy) WarningsOnUpdate(ctx context.Context, obj, old runtime.Object) []string {
151 return nil
152 }
153
154 type priorityLevelConfigurationStatusStrategy struct {
155 priorityLevelConfigurationStrategy
156 }
157
158
159 var StatusStrategy = priorityLevelConfigurationStatusStrategy{Strategy}
160
161
162
163 func (priorityLevelConfigurationStatusStrategy) GetResetFields() map[fieldpath.APIVersion]*fieldpath.Set {
164 fields := map[fieldpath.APIVersion]*fieldpath.Set{
165 "flowcontrol.apiserver.k8s.io/v1beta1": fieldpath.NewSet(
166 fieldpath.MakePathOrDie("spec"),
167 fieldpath.MakePathOrDie("metadata"),
168 ),
169 "flowcontrol.apiserver.k8s.io/v1beta2": fieldpath.NewSet(
170 fieldpath.MakePathOrDie("spec"),
171 fieldpath.MakePathOrDie("metadata"),
172 ),
173 "flowcontrol.apiserver.k8s.io/v1beta3": fieldpath.NewSet(
174 fieldpath.MakePathOrDie("spec"),
175 fieldpath.MakePathOrDie("metadata"),
176 ),
177 "flowcontrol.apiserver.k8s.io/v1": fieldpath.NewSet(
178 fieldpath.MakePathOrDie("spec"),
179 fieldpath.MakePathOrDie("metadata"),
180 ),
181 }
182
183 return fields
184 }
185
186 func (priorityLevelConfigurationStatusStrategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) {
187 newPriorityLevelConfiguration := obj.(*flowcontrol.PriorityLevelConfiguration)
188 oldPriorityLevelConfiguration := old.(*flowcontrol.PriorityLevelConfiguration)
189
190
191
192 managedFields := newPriorityLevelConfiguration.ManagedFields
193 newPriorityLevelConfiguration.ObjectMeta = oldPriorityLevelConfiguration.ObjectMeta
194 newPriorityLevelConfiguration.ManagedFields = managedFields
195 newPriorityLevelConfiguration.Spec = oldPriorityLevelConfiguration.Spec
196 }
197
198 func (priorityLevelConfigurationStatusStrategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList {
199 return validation.ValidatePriorityLevelConfigurationStatusUpdate(old.(*flowcontrol.PriorityLevelConfiguration), obj.(*flowcontrol.PriorityLevelConfiguration))
200 }
201
202
203 func (priorityLevelConfigurationStatusStrategy) WarningsOnUpdate(ctx context.Context, obj, old runtime.Object) []string {
204 return nil
205 }
206
207 func getRequestGroupVersion(ctx context.Context) schema.GroupVersion {
208 if requestInfo, exists := genericapirequest.RequestInfoFrom(ctx); exists {
209 return schema.GroupVersion{Group: requestInfo.APIGroup, Version: requestInfo.APIVersion}
210 }
211 return schema.GroupVersion{}
212 }
213
View as plain text