support for resize subresource in ResourceQuota admission.
Kubernetes-commit: 1b98fe6079059cb1d7bfda4f4b318f614449fee5
This commit is contained in:
		
							parent
							
								
									04fa4ade1a
								
							
						
					
					
						commit
						cb02f4a386
					
				|  | @ -155,10 +155,6 @@ func (a *QuotaAdmission) ValidateInitialization() error { | ||||||
| 
 | 
 | ||||||
| // Validate makes admission decisions while enforcing quota
 | // Validate makes admission decisions while enforcing quota
 | ||||||
| func (a *QuotaAdmission) Validate(ctx context.Context, attr admission.Attributes, o admission.ObjectInterfaces) (err error) { | func (a *QuotaAdmission) Validate(ctx context.Context, attr admission.Attributes, o admission.ObjectInterfaces) (err error) { | ||||||
| 	// ignore all operations that correspond to sub-resource actions
 |  | ||||||
| 	if attr.GetSubresource() != "" { |  | ||||||
| 		return nil |  | ||||||
| 	} |  | ||||||
| 	// ignore all operations that are not namespaced or creation of namespaces
 | 	// ignore all operations that are not namespaced or creation of namespaces
 | ||||||
| 	if attr.GetNamespace() == "" || isNamespaceCreation(attr) { | 	if attr.GetNamespace() == "" || isNamespaceCreation(attr) { | ||||||
| 		return nil | 		return nil | ||||||
|  |  | ||||||
|  | @ -143,10 +143,6 @@ func TestExcludedOperations(t *testing.T) { | ||||||
| 		desc string | 		desc string | ||||||
| 		attr admission.Attributes | 		attr admission.Attributes | ||||||
| 	}{ | 	}{ | ||||||
| 		{ |  | ||||||
| 			"subresource", |  | ||||||
| 			admission.NewAttributesRecord(nil, nil, schema.GroupVersionKind{}, "namespace", "name", schema.GroupVersionResource{}, "subresource", admission.Create, nil, false, nil), |  | ||||||
| 		}, |  | ||||||
| 		{ | 		{ | ||||||
| 			"non-namespaced resource", | 			"non-namespaced resource", | ||||||
| 			admission.NewAttributesRecord(nil, nil, schema.GroupVersionKind{}, "", "namespace", schema.GroupVersionResource{}, "", admission.Create, nil, false, nil), | 			admission.NewAttributesRecord(nil, nil, schema.GroupVersionKind{}, "", "namespace", schema.GroupVersionResource{}, "", admission.Create, nil, false, nil), | ||||||
|  |  | ||||||
|  | @ -250,6 +250,9 @@ func (o *objectCountEvaluator) Constraints(required []corev1.ResourceName, item | ||||||
| 
 | 
 | ||||||
| // Handles returns true if the object count evaluator needs to track this attributes.
 | // Handles returns true if the object count evaluator needs to track this attributes.
 | ||||||
| func (o *objectCountEvaluator) Handles(a admission.Attributes) bool { | func (o *objectCountEvaluator) Handles(a admission.Attributes) bool { | ||||||
|  | 	if a.GetSubresource() != "" { | ||||||
|  | 		return false | ||||||
|  | 	} | ||||||
| 	operation := a.GetOperation() | 	operation := a.GetOperation() | ||||||
| 	return operation == admission.Create | 	return operation == admission.Create | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -22,6 +22,8 @@ import ( | ||||||
| 
 | 
 | ||||||
| 	"k8s.io/apimachinery/pkg/labels" | 	"k8s.io/apimachinery/pkg/labels" | ||||||
| 	"k8s.io/apimachinery/pkg/runtime" | 	"k8s.io/apimachinery/pkg/runtime" | ||||||
|  | 	"k8s.io/apimachinery/pkg/runtime/schema" | ||||||
|  | 	"k8s.io/apiserver/pkg/admission" | ||||||
| 	"k8s.io/client-go/tools/cache" | 	"k8s.io/client-go/tools/cache" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -129,3 +131,52 @@ func (f *fakeLister) Get(name string) (runtime.Object, error) { | ||||||
| func (f *fakeLister) ByNamespace(namespace string) cache.GenericNamespaceLister { | func (f *fakeLister) ByNamespace(namespace string) cache.GenericNamespaceLister { | ||||||
| 	panic("not implemented") | 	panic("not implemented") | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | func TestObjectCountEvaluatorHandles(t *testing.T) { | ||||||
|  | 	evaluator := objectCountEvaluator{} | ||||||
|  | 	testCases := []struct { | ||||||
|  | 		name  string | ||||||
|  | 		attrs admission.Attributes | ||||||
|  | 		want  bool | ||||||
|  | 	}{ | ||||||
|  | 		{ | ||||||
|  | 			name:  "create", | ||||||
|  | 			attrs: admission.NewAttributesRecord(nil, nil, schema.GroupVersionKind{Group: "core", Version: "v1", Kind: "Pod"}, "", "", schema.GroupVersionResource{Group: "core", Version: "v1", Resource: "pods"}, "", admission.Create, nil, false, nil), | ||||||
|  | 			want:  true, | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name:  "update", | ||||||
|  | 			attrs: admission.NewAttributesRecord(nil, nil, schema.GroupVersionKind{Group: "core", Version: "v1", Kind: "Pod"}, "", "", schema.GroupVersionResource{Group: "core", Version: "v1", Resource: "pods"}, "", admission.Update, nil, false, nil), | ||||||
|  | 			want:  false, | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name:  "delete", | ||||||
|  | 			attrs: admission.NewAttributesRecord(nil, nil, schema.GroupVersionKind{Group: "core", Version: "v1", Kind: "Pod"}, "", "", schema.GroupVersionResource{Group: "core", Version: "v1", Resource: "pods"}, "", admission.Delete, nil, false, nil), | ||||||
|  | 			want:  false, | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name:  "connect", | ||||||
|  | 			attrs: admission.NewAttributesRecord(nil, nil, schema.GroupVersionKind{Group: "core", Version: "v1", Kind: "Pod"}, "", "", schema.GroupVersionResource{Group: "core", Version: "v1", Resource: "pods"}, "", admission.Connect, nil, false, nil), | ||||||
|  | 			want:  false, | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name:  "create-subresource", | ||||||
|  | 			attrs: admission.NewAttributesRecord(nil, nil, schema.GroupVersionKind{Group: "core", Version: "v1", Kind: "Pod"}, "", "", schema.GroupVersionResource{Group: "core", Version: "v1", Resource: "pods"}, "subresource", admission.Create, nil, false, nil), | ||||||
|  | 			want:  false, | ||||||
|  | 		}, | ||||||
|  | 		{ | ||||||
|  | 			name:  "update-subresource", | ||||||
|  | 			attrs: admission.NewAttributesRecord(nil, nil, schema.GroupVersionKind{Group: "core", Version: "v1", Kind: "Pod"}, "", "", schema.GroupVersionResource{Group: "core", Version: "v1", Resource: "pods"}, "subresource", admission.Update, nil, false, nil), | ||||||
|  | 			want:  false, | ||||||
|  | 		}, | ||||||
|  | 	} | ||||||
|  | 	for _, tc := range testCases { | ||||||
|  | 		t.Run(tc.name, func(t *testing.T) { | ||||||
|  | 			actual := evaluator.Handles(tc.attrs) | ||||||
|  | 
 | ||||||
|  | 			if tc.want != actual { | ||||||
|  | 				t.Errorf("%s expected:\n%v\n, actual:\n%v", tc.name, tc.want, actual) | ||||||
|  | 			} | ||||||
|  | 		}) | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue