Revert "Revert "Add optional validation to kubecfg/kubectl.""

This reverts commit 6590c66dd4.
This commit is contained in:
Brendan Burns
2014-11-25 19:50:31 -08:00
parent 7f2d0c0f71
commit c29f5db81c
9 changed files with 106 additions and 19 deletions

View File

@@ -40,12 +40,21 @@ func NewInvalidTypeError(expected reflect.Kind, observed reflect.Kind, fieldName
return &InvalidTypeError{expected, observed, fieldName}
}
type Schema struct {
// Schema is an interface that knows how to validate an API object serialized to a byte array.
type Schema interface {
ValidateBytes(data []byte) error
}
type NullSchema struct{}
func (NullSchema) ValidateBytes(data []byte) error { return nil }
type SwaggerSchema struct {
api swagger.ApiDeclaration
}
func NewSchemaFromBytes(data []byte) (*Schema, error) {
schema := &Schema{}
func NewSwaggerSchemaFromBytes(data []byte) (Schema, error) {
schema := &SwaggerSchema{}
err := json.Unmarshal(data, &schema.api)
if err != nil {
return nil, err
@@ -53,7 +62,7 @@ func NewSchemaFromBytes(data []byte) (*Schema, error) {
return schema, nil
}
func (s *Schema) ValidateBytes(data []byte) error {
func (s *SwaggerSchema) ValidateBytes(data []byte) error {
var obj interface{}
err := json.Unmarshal(data, &obj)
if err != nil {
@@ -65,7 +74,7 @@ func (s *Schema) ValidateBytes(data []byte) error {
return s.ValidateObject(obj, apiVersion, "", apiVersion+"."+kind)
}
func (s *Schema) ValidateObject(obj interface{}, apiVersion, fieldName, typeName string) error {
func (s *SwaggerSchema) ValidateObject(obj interface{}, apiVersion, fieldName, typeName string) error {
models := s.api.Models
// TODO: handle required fields here too.
model, ok := models[typeName]
@@ -98,7 +107,7 @@ func (s *Schema) ValidateObject(obj interface{}, apiVersion, fieldName, typeName
return nil
}
func (s *Schema) validateField(value interface{}, apiVersion, fieldName, fieldType string, fieldDetails *swagger.ModelProperty) error {
func (s *SwaggerSchema) validateField(value interface{}, apiVersion, fieldName, fieldType string, fieldDetails *swagger.ModelProperty) error {
if strings.HasPrefix(fieldType, apiVersion) {
return s.ValidateObject(value, apiVersion, fieldName, fieldType)
}