From 37abe11f8af74e34f0e7cee2f2658f659b10595c Mon Sep 17 00:00:00 2001 From: feihujiang Date: Sun, 7 Jun 2015 21:02:27 +0800 Subject: [PATCH] kubetcl create --validate crashes when no apiVersion or kind is provided --- pkg/api/validation/schema.go | 12 +++++++++--- pkg/kubectl/cmd/util/factory.go | 2 +- pkg/kubectl/resource/visitor.go | 6 +++--- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/pkg/api/validation/schema.go b/pkg/api/validation/schema.go index 005991d1896..1e5ef6d80ae 100644 --- a/pkg/api/validation/schema.go +++ b/pkg/api/validation/schema.go @@ -77,9 +77,15 @@ func (s *SwaggerSchema) ValidateBytes(data []byte) error { if !ok { return fmt.Errorf("error in unmarshaling data %s", string(data)) } - apiVersion := fields["apiVersion"].(string) - kind := fields["kind"].(string) - return s.ValidateObject(obj, apiVersion, "", apiVersion+"."+kind) + apiVersion := fields["apiVersion"] + if apiVersion == nil { + fmt.Errorf("apiVersion not set") + } + kind := fields["kind"] + if kind == nil { + fmt.Errorf("kind not set") + } + return s.ValidateObject(obj, apiVersion.(string), "", apiVersion.(string)+"."+kind.(string)) } func (s *SwaggerSchema) ValidateObject(obj interface{}, apiVersion, fieldName, typeName string) error { diff --git a/pkg/kubectl/cmd/util/factory.go b/pkg/kubectl/cmd/util/factory.go index c598d21d241..1a3486047e6 100644 --- a/pkg/kubectl/cmd/util/factory.go +++ b/pkg/kubectl/cmd/util/factory.go @@ -266,7 +266,7 @@ type clientSwaggerSchema struct { } func (c *clientSwaggerSchema) ValidateBytes(data []byte) error { - version, _, err := c.t.DataVersionAndKind(data) + version, _, err := runtime.UnstructuredJSONScheme.DataVersionAndKind(data) if err != nil { return err } diff --git a/pkg/kubectl/resource/visitor.go b/pkg/kubectl/resource/visitor.go index 953564da3ad..a7f1e7bf81c 100644 --- a/pkg/kubectl/resource/visitor.go +++ b/pkg/kubectl/resource/visitor.go @@ -213,7 +213,7 @@ func (v *PathVisitor) Visit(fn VisitorFunc) error { return fmt.Errorf("unable to read %q: %v", v.Path, err) } if err := ValidateSchema(data, v.Schema); err != nil { - return err + return fmt.Errorf("error validating %q: %v", v.Path, err) } info, err := v.Mapper.InfoForData(data, v.Path) if err != nil { @@ -276,7 +276,7 @@ func (v *DirectoryVisitor) Visit(fn VisitorFunc) error { return fmt.Errorf("unable to read %q: %v", path, err) } if err := ValidateSchema(data, v.Schema); err != nil { - return err + return fmt.Errorf("error validating %q: %v", path, err) } info, err := v.Mapper.InfoForData(data, path) if err != nil { @@ -312,7 +312,7 @@ func (v *URLVisitor) Visit(fn VisitorFunc) error { return fmt.Errorf("unable to read URL %q: %v\n", v.URL, err) } if err := ValidateSchema(data, v.Schema); err != nil { - return err + return fmt.Errorf("error validating %q: %v", v.URL, err) } info, err := v.Mapper.InfoForData(data, v.URL.String()) if err != nil {