Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
1f764fcd
Commit
1f764fcd
authored
Oct 08, 2015
by
k8s-merge-robot
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #14726 from linzichang/validation-on-list
Auto commit by PR queue bot
parents
52ce36ea
755d740f
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
64 additions
and
0 deletions
+64
-0
schema.go
pkg/api/validation/schema.go
+64
-0
No files found.
pkg/api/validation/schema.go
View file @
1f764fcd
...
@@ -21,6 +21,7 @@ import (
...
@@ -21,6 +21,7 @@ import (
"fmt"
"fmt"
"reflect"
"reflect"
"regexp"
"regexp"
"strings"
"github.com/emicklei/go-restful/swagger"
"github.com/emicklei/go-restful/swagger"
"github.com/golang/glog"
"github.com/golang/glog"
...
@@ -66,6 +67,60 @@ func NewSwaggerSchemaFromBytes(data []byte) (Schema, error) {
...
@@ -66,6 +67,60 @@ func NewSwaggerSchemaFromBytes(data []byte) (Schema, error) {
return
schema
,
nil
return
schema
,
nil
}
}
// validateList unpack a list and validate every item in the list.
// It return nil if every item is ok.
// Otherwise it return an error list contain errors of every item.
func
(
s
*
SwaggerSchema
)
validateList
(
obj
map
[
string
]
interface
{})
errs
.
ValidationErrorList
{
allErrs
:=
errs
.
ValidationErrorList
{}
items
,
exists
:=
obj
[
"items"
]
if
!
exists
{
return
append
(
allErrs
,
fmt
.
Errorf
(
"no items field in %#v"
,
obj
))
}
itemList
,
ok
:=
items
.
([]
interface
{})
if
!
ok
{
return
append
(
allErrs
,
fmt
.
Errorf
(
"items isn't a slice"
))
}
for
i
,
item
:=
range
itemList
{
fields
,
ok
:=
item
.
(
map
[
string
]
interface
{})
if
!
ok
{
allErrs
=
append
(
allErrs
,
fmt
.
Errorf
(
"items[%d] isn't a map[string]interface{}"
,
i
))
continue
}
groupVersion
:=
fields
[
"apiVersion"
]
if
groupVersion
==
nil
{
allErrs
=
append
(
allErrs
,
fmt
.
Errorf
(
"items[%d].apiVersion not set"
,
i
))
continue
}
itemVersion
,
ok
:=
groupVersion
.
(
string
)
if
!
ok
{
allErrs
=
append
(
allErrs
,
fmt
.
Errorf
(
"items[%d].apiVersion isn't string type"
,
i
))
continue
}
if
len
(
itemVersion
)
==
0
{
allErrs
=
append
(
allErrs
,
fmt
.
Errorf
(
"items[%d].apiVersion is empty"
,
i
))
}
kind
:=
fields
[
"kind"
]
if
kind
==
nil
{
allErrs
=
append
(
allErrs
,
fmt
.
Errorf
(
"items[%d].kind not set"
,
i
))
continue
}
itemKind
,
ok
:=
kind
.
(
string
)
if
!
ok
{
allErrs
=
append
(
allErrs
,
fmt
.
Errorf
(
"items[%d].kind isn't string type"
,
i
))
continue
}
if
len
(
itemKind
)
==
0
{
allErrs
=
append
(
allErrs
,
fmt
.
Errorf
(
"items[%d].kind is empty"
,
i
))
}
version
:=
apiutil
.
GetVersion
(
itemVersion
)
errs
:=
s
.
ValidateObject
(
item
,
""
,
version
+
"."
+
itemKind
)
if
len
(
errs
)
>=
1
{
allErrs
=
append
(
allErrs
,
errs
...
)
}
}
return
allErrs
}
func
(
s
*
SwaggerSchema
)
ValidateBytes
(
data
[]
byte
)
error
{
func
(
s
*
SwaggerSchema
)
ValidateBytes
(
data
[]
byte
)
error
{
var
obj
interface
{}
var
obj
interface
{}
out
,
err
:=
yaml
.
ToJSON
(
data
)
out
,
err
:=
yaml
.
ToJSON
(
data
)
...
@@ -84,10 +139,19 @@ func (s *SwaggerSchema) ValidateBytes(data []byte) error {
...
@@ -84,10 +139,19 @@ func (s *SwaggerSchema) ValidateBytes(data []byte) error {
if
groupVersion
==
nil
{
if
groupVersion
==
nil
{
return
fmt
.
Errorf
(
"apiVersion not set"
)
return
fmt
.
Errorf
(
"apiVersion not set"
)
}
}
if
_
,
ok
:=
groupVersion
.
(
string
);
!
ok
{
return
fmt
.
Errorf
(
"apiVersion isn't string type"
)
}
kind
:=
fields
[
"kind"
]
kind
:=
fields
[
"kind"
]
if
kind
==
nil
{
if
kind
==
nil
{
return
fmt
.
Errorf
(
"kind not set"
)
return
fmt
.
Errorf
(
"kind not set"
)
}
}
if
_
,
ok
:=
kind
.
(
string
);
!
ok
{
return
fmt
.
Errorf
(
"kind isn't string type"
)
}
if
strings
.
HasSuffix
(
kind
.
(
string
),
"List"
)
{
return
errors
.
NewAggregate
(
s
.
validateList
(
fields
))
}
version
:=
apiutil
.
GetVersion
(
groupVersion
.
(
string
))
version
:=
apiutil
.
GetVersion
(
groupVersion
.
(
string
))
allErrs
:=
s
.
ValidateObject
(
obj
,
""
,
version
+
"."
+
kind
.
(
string
))
allErrs
:=
s
.
ValidateObject
(
obj
,
""
,
version
+
"."
+
kind
.
(
string
))
if
len
(
allErrs
)
==
1
{
if
len
(
allErrs
)
==
1
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment