diff --git a/pkg/apis/servicecatalog/validation/serviceclass.go b/pkg/apis/servicecatalog/validation/serviceclass.go index fba26e1a51dc..f62004623f94 100644 --- a/pkg/apis/servicecatalog/validation/serviceclass.go +++ b/pkg/apis/servicecatalog/validation/serviceclass.go @@ -81,6 +81,10 @@ func ValidateServiceClass(serviceclass *sc.ServiceClass) field.ErrorList { allErrs = append(allErrs, field.Invalid(field.NewPath("externalID"), serviceclass.ExternalID, msg)) } + if len(serviceclass.Plans) < 1 { + allErrs = append(allErrs, field.Invalid(field.NewPath("plans"), serviceclass.Plans, "at least one plan is required")) + } + planNames := sets.NewString() for i, plan := range serviceclass.Plans { planPath := field.NewPath("plans").Index(i) diff --git a/pkg/apis/servicecatalog/validation/serviceclass_test.go b/pkg/apis/servicecatalog/validation/serviceclass_test.go index 6113fc91ba83..5cfb13343afc 100644 --- a/pkg/apis/servicecatalog/validation/serviceclass_test.go +++ b/pkg/apis/servicecatalog/validation/serviceclass_test.go @@ -144,6 +144,15 @@ func TestValidateServiceClass(t *testing.T) { }(), valid: false, }, + { + name: "invalid serviceClass - no plans", + serviceClass: func() *servicecatalog.ServiceClass { + s := validServiceClass() + s.Plans = nil + return s + }(), + valid: false, + }, } for _, tc := range cases { diff --git a/test/integration/clientset_test.go b/test/integration/clientset_test.go index 2e6e12e549df..2adfa3a78a84 100644 --- a/test/integration/clientset_test.go +++ b/test/integration/clientset_test.go @@ -340,6 +340,13 @@ func testServiceClassClient(sType server.StorageType, client servicecatalogclien Bindable: true, ExternalID: "b8269ab4-7d2d-456d-8c8b-5aab63b321d1", Description: "test description", + Plans: []v1alpha1.ServicePlan{ + { + Name: "test-service-plan", + ExternalID: "test-service-plan-external-id", + Description: "test-description", + }, + }, } // start from scratch