Revert "Revert "Add optional validation to kubecfg/kubectl.""
This reverts commit 6590c66dd4
.
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
Reference in New Issue
Block a user