@@ -18,7 +18,6 @@ package webhook
1818
1919import  (
2020	"fmt" 
21- 	"reflect" 
2221
2322	volumegroupsnapshotv1alpha1 "github.com/kubernetes-csi/external-snapshotter/client/v7/apis/volumegroupsnapshot/v1alpha1" 
2423	groupsnapshotlisters "github.com/kubernetes-csi/external-snapshotter/client/v7/listers/volumegroupsnapshot/v1alpha1" 
@@ -30,10 +29,6 @@ import (
3029)
3130
3231var  (
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" }
3732	// GroupSnapshotClassV1Apha1GVR is GroupVersionResource for v1alpha1 VolumeGroupSnapshotClasses 
3833	GroupSnapshotClassV1Apha1GVR  =  metav1.GroupVersionResource {Group : volumegroupsnapshotv1alpha1 .GroupName , Version : "v1alpha1" , Resource : "volumegroupsnapshotclasses" }
3934)
@@ -54,8 +49,7 @@ func NewGroupSnapshotAdmitter(lister groupsnapshotlisters.VolumeGroupSnapshotCla
5449
5550// Add a label {"added-label": "yes"} to the object 
5651func  (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" )
5953
6054	reviewResponse  :=  & v1.AdmissionResponse {
6155		Allowed : true ,
@@ -66,37 +60,12 @@ func (a groupSnapshotAdmitter) Admit(ar v1.AdmissionReview) *v1.AdmissionRespons
6660	if  ! (ar .Request .Operation  ==  v1 .Update  ||  ar .Request .Operation  ==  v1 .Create ) {
6761		return  reviewResponse 
6862	}
69- 	isUpdate  :=  ar .Request .Operation  ==  v1 .Update 
7063
7164	raw  :=  ar .Request .Object .Raw 
7265	oldRaw  :=  ar .Request .OldObject .Raw 
7366
7467	deserializer  :=  codecs .UniversalDeserializer ()
7568	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 )
10069	case  GroupSnapshotClassV1Apha1GVR :
10170		groupSnapClass  :=  & volumegroupsnapshotv1alpha1.VolumeGroupSnapshotClass {}
10271		if  _ , _ , err  :=  deserializer .Decode (raw , nil , groupSnapClass ); err  !=  nil  {
@@ -110,60 +79,13 @@ func (a groupSnapshotAdmitter) Admit(ar v1.AdmissionReview) *v1.AdmissionRespons
11079		}
11180		return  decideGroupSnapshotClassV1Alpha1 (groupSnapClass , oldGroupSnapClass , a .lister )
11281	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" ,
11583			GroupSnapshotClassV1Apha1GVR , ar .Request .Resource )
11684		klog .Error (err )
11785		return  toV1AdmissionResponse (err )
11886	}
11987}
12088
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- 
16789func  decideGroupSnapshotClassV1Alpha1 (groupSnapClass , oldGroupSnapClass  * volumegroupsnapshotv1alpha1.VolumeGroupSnapshotClass , lister  groupsnapshotlisters.VolumeGroupSnapshotClassLister ) * v1.AdmissionResponse  {
16890	reviewResponse  :=  & v1.AdmissionResponse {
16991		Allowed : true ,
@@ -200,55 +122,3 @@ func decideGroupSnapshotClassV1Alpha1(groupSnapClass, oldGroupSnapClass *volumeg
200122
201123	return  reviewResponse 
202124}
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