@@ -18,7 +18,6 @@ package webhook
18
18
19
19
import (
20
20
"fmt"
21
- "reflect"
22
21
23
22
volumegroupsnapshotv1alpha1 "github.com/kubernetes-csi/external-snapshotter/client/v7/apis/volumegroupsnapshot/v1alpha1"
24
23
groupsnapshotlisters "github.com/kubernetes-csi/external-snapshotter/client/v7/listers/volumegroupsnapshot/v1alpha1"
@@ -30,10 +29,6 @@ import (
30
29
)
31
30
32
31
var (
33
- // GroupSnapshotV1Alpha1GVR is GroupVersionResource for v1alpha1 VolumeGroupSnapshots
34
- GroupSnapshotV1Alpha1GVR = metav1.GroupVersionResource {Group : volumegroupsnapshotv1alpha1 .GroupName , Version : "v1alpha1" , Resource : "volumegroupsnapshots" }
35
- // GroupSnapshotContentV1Apha1GVR is GroupVersionResource for v1alpha1 VolumeGroupSnapshotContents
36
- GroupSnapshotContentV1Apha1GVR = metav1.GroupVersionResource {Group : volumegroupsnapshotv1alpha1 .GroupName , Version : "v1alpha1" , Resource : "volumegroupsnapshotcontents" }
37
32
// GroupSnapshotClassV1Apha1GVR is GroupVersionResource for v1alpha1 VolumeGroupSnapshotClasses
38
33
GroupSnapshotClassV1Apha1GVR = metav1.GroupVersionResource {Group : volumegroupsnapshotv1alpha1 .GroupName , Version : "v1alpha1" , Resource : "volumegroupsnapshotclasses" }
39
34
)
@@ -54,8 +49,7 @@ func NewGroupSnapshotAdmitter(lister groupsnapshotlisters.VolumeGroupSnapshotCla
54
49
55
50
// Add a label {"added-label": "yes"} to the object
56
51
func (a groupSnapshotAdmitter ) Admit (ar v1.AdmissionReview ) * v1.AdmissionResponse {
57
- klog .V (2 ).Info ("admitting volumegroupsnapshots volumegroupsnapshotcontents " +
58
- "or volumegroupsnapshotclasses" )
52
+ klog .V (2 ).Info ("admitting volumegroupsnapshotclasses" )
59
53
60
54
reviewResponse := & v1.AdmissionResponse {
61
55
Allowed : true ,
@@ -66,37 +60,12 @@ func (a groupSnapshotAdmitter) Admit(ar v1.AdmissionReview) *v1.AdmissionRespons
66
60
if ! (ar .Request .Operation == v1 .Update || ar .Request .Operation == v1 .Create ) {
67
61
return reviewResponse
68
62
}
69
- isUpdate := ar .Request .Operation == v1 .Update
70
63
71
64
raw := ar .Request .Object .Raw
72
65
oldRaw := ar .Request .OldObject .Raw
73
66
74
67
deserializer := codecs .UniversalDeserializer ()
75
68
switch ar .Request .Resource {
76
- case GroupSnapshotV1Alpha1GVR :
77
- groupSnapshot := & volumegroupsnapshotv1alpha1.VolumeGroupSnapshot {}
78
- if _ , _ , err := deserializer .Decode (raw , nil , groupSnapshot ); err != nil {
79
- klog .Error (err )
80
- return toV1AdmissionResponse (err )
81
- }
82
- oldGroupSnapshot := & volumegroupsnapshotv1alpha1.VolumeGroupSnapshot {}
83
- if _ , _ , err := deserializer .Decode (oldRaw , nil , oldGroupSnapshot ); err != nil {
84
- klog .Error (err )
85
- return toV1AdmissionResponse (err )
86
- }
87
- return decideGroupSnapshotV1Alpha1 (groupSnapshot , oldGroupSnapshot , isUpdate )
88
- case GroupSnapshotContentV1Apha1GVR :
89
- groupSnapContent := & volumegroupsnapshotv1alpha1.VolumeGroupSnapshotContent {}
90
- if _ , _ , err := deserializer .Decode (raw , nil , groupSnapContent ); err != nil {
91
- klog .Error (err )
92
- return toV1AdmissionResponse (err )
93
- }
94
- oldGroupSnapContent := & volumegroupsnapshotv1alpha1.VolumeGroupSnapshotContent {}
95
- if _ , _ , err := deserializer .Decode (oldRaw , nil , oldGroupSnapContent ); err != nil {
96
- klog .Error (err )
97
- return toV1AdmissionResponse (err )
98
- }
99
- return decideGroupSnapshotContentV1Alpha1 (groupSnapContent , oldGroupSnapContent , isUpdate )
100
69
case GroupSnapshotClassV1Apha1GVR :
101
70
groupSnapClass := & volumegroupsnapshotv1alpha1.VolumeGroupSnapshotClass {}
102
71
if _ , _ , err := deserializer .Decode (raw , nil , groupSnapClass ); err != nil {
@@ -110,60 +79,13 @@ func (a groupSnapshotAdmitter) Admit(ar v1.AdmissionReview) *v1.AdmissionRespons
110
79
}
111
80
return decideGroupSnapshotClassV1Alpha1 (groupSnapClass , oldGroupSnapClass , a .lister )
112
81
default :
113
- err := fmt .Errorf ("expect resource to be %s, %s, or %s, but found %v" ,
114
- GroupSnapshotV1Alpha1GVR , GroupSnapshotContentV1Apha1GVR ,
82
+ err := fmt .Errorf ("expect resource to be %s, but found %v" ,
115
83
GroupSnapshotClassV1Apha1GVR , ar .Request .Resource )
116
84
klog .Error (err )
117
85
return toV1AdmissionResponse (err )
118
86
}
119
87
}
120
88
121
- func decideGroupSnapshotV1Alpha1 (groupSnapshot , oldGroupSnapshot * volumegroupsnapshotv1alpha1.VolumeGroupSnapshot , isUpdate bool ) * v1.AdmissionResponse {
122
- reviewResponse := & v1.AdmissionResponse {
123
- Allowed : true ,
124
- Result : & metav1.Status {},
125
- }
126
-
127
- if isUpdate {
128
- // if it is an UPDATE and oldGroupSnapshot is valid, check immutable fields
129
- if err := checkGroupSnapshotImmutableFieldsV1Alpha1 (groupSnapshot , oldGroupSnapshot ); err != nil {
130
- reviewResponse .Allowed = false
131
- reviewResponse .Result .Message = err .Error ()
132
- return reviewResponse
133
- }
134
- }
135
- // Enforce strict validation for CREATE requests. Immutable checks don't apply for CREATE requests.
136
- // Enforce strict validation for UPDATE requests where old is valid and passes immutability check.
137
- if err := ValidateV1Alpha1GroupSnapshot (groupSnapshot ); err != nil {
138
- reviewResponse .Allowed = false
139
- reviewResponse .Result .Message = err .Error ()
140
- }
141
- return reviewResponse
142
- }
143
-
144
- func decideGroupSnapshotContentV1Alpha1 (groupSnapcontent , oldGroupSnapcontent * volumegroupsnapshotv1alpha1.VolumeGroupSnapshotContent , isUpdate bool ) * v1.AdmissionResponse {
145
- reviewResponse := & v1.AdmissionResponse {
146
- Allowed : true ,
147
- Result : & metav1.Status {},
148
- }
149
-
150
- if isUpdate {
151
- // if it is an UPDATE and oldGroupSnapcontent is valid, check immutable fields
152
- if err := checkGroupSnapshotContentImmutableFieldsV1Alpha1 (groupSnapcontent , oldGroupSnapcontent ); err != nil {
153
- reviewResponse .Allowed = false
154
- reviewResponse .Result .Message = err .Error ()
155
- return reviewResponse
156
- }
157
- }
158
- // Enforce strict validation for all CREATE requests. Immutable checks don't apply for CREATE requests.
159
- // Enforce strict validation for UPDATE requests where old is valid and passes immutability check.
160
- if err := ValidateV1Alpha1GroupSnapshotContent (groupSnapcontent ); err != nil {
161
- reviewResponse .Allowed = false
162
- reviewResponse .Result .Message = err .Error ()
163
- }
164
- return reviewResponse
165
- }
166
-
167
89
func decideGroupSnapshotClassV1Alpha1 (groupSnapClass , oldGroupSnapClass * volumegroupsnapshotv1alpha1.VolumeGroupSnapshotClass , lister groupsnapshotlisters.VolumeGroupSnapshotClassLister ) * v1.AdmissionResponse {
168
90
reviewResponse := & v1.AdmissionResponse {
169
91
Allowed : true ,
@@ -200,55 +122,3 @@ func decideGroupSnapshotClassV1Alpha1(groupSnapClass, oldGroupSnapClass *volumeg
200
122
201
123
return reviewResponse
202
124
}
203
-
204
- func checkGroupSnapshotImmutableFieldsV1Alpha1 (groupSnapshot , oldGroupSnapshot * volumegroupsnapshotv1alpha1.VolumeGroupSnapshot ) error {
205
- if groupSnapshot == nil {
206
- return fmt .Errorf ("VolumeGroupSnapshot is nil" )
207
- }
208
- if oldGroupSnapshot == nil {
209
- return fmt .Errorf ("old VolumeGroupSnapshot is nil" )
210
- }
211
-
212
- source := groupSnapshot .Spec .Source
213
- oldSource := oldGroupSnapshot .Spec .Source
214
-
215
- if ! reflect .DeepEqual (source .Selector , oldSource .Selector ) {
216
- return fmt .Errorf ("Spec.Source.Selector is immutable but was changed from %s to %s" , oldSource .Selector , source .Selector )
217
- }
218
- if ! reflect .DeepEqual (source .VolumeGroupSnapshotContentName , oldSource .VolumeGroupSnapshotContentName ) {
219
- return fmt .Errorf ("Spec.Source.VolumeGroupSnapshotContentName is immutable but was changed from %s to %s" , strPtrDereference (oldSource .VolumeGroupSnapshotContentName ), strPtrDereference (source .VolumeGroupSnapshotContentName ))
220
- }
221
-
222
- return nil
223
- }
224
-
225
- func checkGroupSnapshotContentImmutableFieldsV1Alpha1 (groupSnapcontent , oldGroupSnapcontent * volumegroupsnapshotv1alpha1.VolumeGroupSnapshotContent ) error {
226
- if groupSnapcontent == nil {
227
- return fmt .Errorf ("VolumeGroupSnapshotContent is nil" )
228
- }
229
- if oldGroupSnapcontent == nil {
230
- return fmt .Errorf ("old VolumeGroupSnapshotContent is nil" )
231
- }
232
-
233
- source := groupSnapcontent .Spec .Source
234
- oldSource := oldGroupSnapcontent .Spec .Source
235
-
236
- if ! reflect .DeepEqual (source .GroupSnapshotHandles , oldSource .GroupSnapshotHandles ) {
237
- return fmt .Errorf ("Spec.Source.GroupSnapshotHandles is immutable but was changed from %s to %s" , oldSource .GroupSnapshotHandles , source .GroupSnapshotHandles )
238
- }
239
- if ! reflect .DeepEqual (source .VolumeHandles , oldSource .VolumeHandles ) {
240
- return fmt .Errorf ("Spec.Source.VolumeHandles is immutable but was changed from %v to %v" , oldSource .VolumeHandles , source .VolumeHandles )
241
- }
242
-
243
- ref := groupSnapcontent .Spec .VolumeGroupSnapshotRef
244
- oldRef := oldGroupSnapcontent .Spec .VolumeGroupSnapshotRef
245
-
246
- if ref .Name != oldRef .Name {
247
- return fmt .Errorf ("Spec.VolumeGroupSnapshotRef.Name is immutable but was changed from %s to %s" , oldRef .Name , ref .Name )
248
- }
249
- if ref .Namespace != oldRef .Namespace {
250
- return fmt .Errorf ("Spec.VolumeGroupSnapshotRef.Namespace is immutable but was changed from %s to %s" , oldRef .Namespace , ref .Namespace )
251
- }
252
-
253
- return nil
254
- }
0 commit comments