kubetcl create --validate crashes when no apiVersion or kind is provided

This commit is contained in:
feihujiang 2015-06-07 21:02:27 +08:00
parent 0f1c4c25c3
commit 37abe11f8a
3 changed files with 13 additions and 7 deletions

View File

@ -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 {

View File

@ -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
}

View File

@ -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 {