From 7a5461a17c8e055708ed895a82c3f99fd9102f3d Mon Sep 17 00:00:00 2001 From: Jordan Liggitt Date: Thu, 17 Nov 2016 10:12:37 -0500 Subject: [PATCH] Require at least one version in ThirdPartyResource objects --- pkg/apis/extensions/types.go | 2 -- pkg/apis/extensions/validation/validation.go | 3 +++ pkg/generated/openapi/zz_generated.openapi.go | 2 ++ pkg/master/thirdparty/thirdparty.go | 3 +++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/pkg/apis/extensions/types.go b/pkg/apis/extensions/types.go index ded03596dcc..3010ae3544f 100644 --- a/pkg/apis/extensions/types.go +++ b/pkg/apis/extensions/types.go @@ -124,7 +124,6 @@ type ThirdPartyResource struct { Description string `json:"description,omitempty"` // Versions are versions for this third party object - // +optional Versions []APIVersion `json:"versions,omitempty"` } @@ -143,7 +142,6 @@ type ThirdPartyResourceList struct { // TODO: we should consider merge this struct with GroupVersion in unversioned.go type APIVersion struct { // Name of this version (e.g. 'v1'). - // +optional Name string `json:"name,omitempty"` } diff --git a/pkg/apis/extensions/validation/validation.go b/pkg/apis/extensions/validation/validation.go index 8ac12827c07..bb5224f1329 100644 --- a/pkg/apis/extensions/validation/validation.go +++ b/pkg/apis/extensions/validation/validation.go @@ -68,6 +68,9 @@ func ValidateThirdPartyResource(obj *extensions.ThirdPartyResource) field.ErrorL allErrs = append(allErrs, apivalidation.ValidateObjectMeta(&obj.ObjectMeta, false, ValidateThirdPartyResourceName, field.NewPath("metadata"))...) versions := sets.String{} + if len(obj.Versions) == 0 { + allErrs = append(allErrs, field.Required(field.NewPath("versions"), "must specify at least one version")) + } for ix := range obj.Versions { version := &obj.Versions[ix] if len(version.Name) == 0 { diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index 2401d9fd8ae..245c859b4de 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -3245,6 +3245,7 @@ var OpenAPIDefinitions *common.OpenAPIDefinitions = &common.OpenAPIDefinitions{ }, }, }, + Required: []string{"name"}, }, }, Dependencies: []string{}, @@ -4899,6 +4900,7 @@ var OpenAPIDefinitions *common.OpenAPIDefinitions = &common.OpenAPIDefinitions{ }, }, }, + Required: []string{"versions"}, }, }, Dependencies: []string{ diff --git a/pkg/master/thirdparty/thirdparty.go b/pkg/master/thirdparty/thirdparty.go index 54e0a673514..55d8c7acef3 100644 --- a/pkg/master/thirdparty/thirdparty.go +++ b/pkg/master/thirdparty/thirdparty.go @@ -246,6 +246,9 @@ func (m *ThirdPartyResourceServer) InstallThirdPartyResource(rsrc *extensions.Th if err != nil { return err } + if len(rsrc.Versions) == 0 { + return fmt.Errorf("ThirdPartyResource %s has no defined versions", rsrc.Name) + } plural, _ := meta.KindToResource(unversioned.GroupVersionKind{ Group: group, Version: rsrc.Versions[0].Name,