From 2a97d4aececbbf229fb3acf4e54b46adaa68405a Mon Sep 17 00:00:00 2001 From: Maciej Szulik Date: Tue, 18 Sep 2018 19:48:53 +0200 Subject: [PATCH] Fix image quota evaluators to support both internal and external resources --- pkg/quota/image/imagestreamimport_evaluator.go | 12 +++++++++++- pkg/quota/image/imagestreamtag_evaluator.go | 12 +++++++++++- test/cmd/quota.sh | 1 + 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/pkg/quota/image/imagestreamimport_evaluator.go b/pkg/quota/image/imagestreamimport_evaluator.go index 49c375c03d3c..8a324f865ee7 100644 --- a/pkg/quota/image/imagestreamimport_evaluator.go +++ b/pkg/quota/image/imagestreamimport_evaluator.go @@ -17,6 +17,7 @@ import ( imagev1 "github.com/openshift/api/image/v1" imagev1lister "github.com/openshift/client-go/image/listers/image/v1" imageapi "github.com/openshift/origin/pkg/image/apis/image" + imagev1conversions "github.com/openshift/origin/pkg/image/apis/image/v1" ) var imageStreamImportResources = []kapi.ResourceName{ @@ -38,7 +39,9 @@ func NewImageStreamImportEvaluator(store imagev1lister.ImageStreamLister) kquota // Constraints checks that given object is an image stream import. func (i *imageStreamImportEvaluator) Constraints(required []kapi.ResourceName, object runtime.Object) error { - if _, ok := object.(*imagev1.ImageStreamImport); !ok { + _, okInt := object.(*imageapi.ImageStreamImport) + _, okExt := object.(*imagev1.ImageStreamImport) + if !okInt && !okExt { return fmt.Errorf("unexpected input object %v", object) } return nil @@ -70,6 +73,13 @@ func (i *imageStreamImportEvaluator) MatchingResources(input []kapi.ResourceName } func (i *imageStreamImportEvaluator) Usage(item runtime.Object) (kapi.ResourceList, error) { + if isiInternal, ok := item.(*imageapi.ImageStreamImport); ok { + out := &imagev1.ImageStreamImport{} + if err := imagev1conversions.Convert_image_ImageStreamImport_To_v1_ImageStreamImport(isiInternal, out, nil); err != nil { + return kapi.ResourceList{}, fmt.Errorf("error converting ImageStreamImport: %v", err) + } + item = out + } isi, ok := item.(*imagev1.ImageStreamImport) if !ok { return kapi.ResourceList{}, fmt.Errorf("item is not an ImageStreamImport: %T", item) diff --git a/pkg/quota/image/imagestreamtag_evaluator.go b/pkg/quota/image/imagestreamtag_evaluator.go index 03dd839f146f..7715b2a670b8 100644 --- a/pkg/quota/image/imagestreamtag_evaluator.go +++ b/pkg/quota/image/imagestreamtag_evaluator.go @@ -18,6 +18,7 @@ import ( imagev1typedclient "github.com/openshift/client-go/image/clientset/versioned/typed/image/v1" imagev1lister "github.com/openshift/client-go/image/listers/image/v1" imageapi "github.com/openshift/origin/pkg/image/apis/image" + imagev1conversions "github.com/openshift/origin/pkg/image/apis/image/v1" ) var imageStreamTagResources = []kapi.ResourceName{ @@ -40,7 +41,9 @@ func NewImageStreamTagEvaluator(store imagev1lister.ImageStreamLister, istGetter // Constraints checks that given object is an image stream tag func (i *imageStreamTagEvaluator) Constraints(required []kapi.ResourceName, object runtime.Object) error { - if _, ok := object.(*imagev1.ImageStreamTag); !ok { + _, okInt := object.(*imageapi.ImageStreamTag) + _, okExt := object.(*imagev1.ImageStreamTag) + if !okInt && !okExt { return fmt.Errorf("unexpected input object %v", object) } return nil @@ -73,6 +76,13 @@ func (i *imageStreamTagEvaluator) MatchingResources(input []kapi.ResourceName) [ } func (i *imageStreamTagEvaluator) Usage(item runtime.Object) (kapi.ResourceList, error) { + if istInternal, ok := item.(*imageapi.ImageStreamTag); ok { + out := &imagev1.ImageStreamTag{} + if err := imagev1conversions.Convert_image_ImageStreamTag_To_v1_ImageStreamTag(istInternal, out, nil); err != nil { + return kapi.ResourceList{}, fmt.Errorf("error converting ImageStreamImport: %v", err) + } + item = out + } ist, ok := item.(*imagev1.ImageStreamTag) if !ok { return kapi.ResourceList{}, nil diff --git a/test/cmd/quota.sh b/test/cmd/quota.sh index 8893169e6f8f..f6d1edf9480b 100755 --- a/test/cmd/quota.sh +++ b/test/cmd/quota.sh @@ -50,6 +50,7 @@ os::cmd::expect_success 'oc new-project quota-images --as=deads --as-group=syst os::cmd::expect_success 'oc create quota -n quota-images is-quota --hard openshift.io/imagestreams=1' os::cmd::try_until_success 'oc tag -n quota-images openshift/hello-openshift myis2:v2' os::cmd::expect_failure_and_text 'oc tag -n quota-images busybox mybox:v1' "exceeded quota" +os::cmd::expect_failure_and_text 'oc import-image centos -n quota-images --from=docker.io/centos:latest --confirm=true' "exceeded quota" os::cmd::expect_success 'oc delete project quota-images' echo "imagestreams: ok"