package validation import ( "fmt" kapi "github.com/GoogleCloudPlatform/kubernetes/pkg/api" "github.com/GoogleCloudPlatform/kubernetes/pkg/api/meta" "github.com/GoogleCloudPlatform/kubernetes/pkg/api/validation" "github.com/GoogleCloudPlatform/kubernetes/pkg/runtime" buildapi "github.com/openshift/origin/pkg/build/api" buildv "github.com/openshift/origin/pkg/build/api/validation" deployapi "github.com/openshift/origin/pkg/deploy/api" deployv "github.com/openshift/origin/pkg/deploy/api/validation" imageapi "github.com/openshift/origin/pkg/image/api" imagev "github.com/openshift/origin/pkg/image/api/validation" projectapi "github.com/openshift/origin/pkg/project/api" projectv "github.com/openshift/origin/pkg/project/api/validation" routeapi "github.com/openshift/origin/pkg/route/api" routev "github.com/openshift/origin/pkg/route/api/validation" templateapi "github.com/openshift/origin/pkg/template/api" templatev "github.com/openshift/origin/pkg/template/api/validation" ) // ValidateObject runs all known validations and returns the validation errors func ValidateObject(obj runtime.Object) (errors []error) { if m, err := meta.Accessor(obj); err == nil { if len(m.Namespace()) == 0 { m.SetNamespace(kapi.NamespaceDefault) } } switch t := obj.(type) { case *kapi.ReplicationController: errors = validation.ValidateReplicationController(t) case *kapi.Service: errors = validation.ValidateService(t) case *kapi.Pod: errors = validation.ValidatePod(t) case *kapi.Namespace: errors = validation.ValidateNamespace(t) case *kapi.Node: errors = validation.ValidateMinion(t) case *imageapi.Image: errors = imagev.ValidateImage(t) case *imageapi.ImageRepository: errors = imagev.ValidateImageRepository(t) case *imageapi.ImageRepositoryMapping: errors = imagev.ValidateImageRepositoryMapping(t) case *deployapi.DeploymentConfig: errors = deployv.ValidateDeploymentConfig(t) case *deployapi.Deployment: errors = deployv.ValidateDeployment(t) case *projectapi.Project: // this is a global resource that should not have a namespace t.Namespace = "" errors = projectv.ValidateProject(t) case *routeapi.Route: errors = routev.ValidateRoute(t) case *buildapi.BuildConfig: errors = buildv.ValidateBuildConfig(t) case *buildapi.Build: errors = buildv.ValidateBuild(t) case *templateapi.Template: errors = templatev.ValidateTemplate(t) default: if list, err := runtime.ExtractList(obj); err == nil { for i := range list { errs := ValidateObject(list[i]) errors = append(errors, errs...) } return } // TODO: This should not be an error return []error{fmt.Errorf("no validation defined for %#v", obj)} } return errors }