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
006f80e3
Commit
006f80e3
authored
Aug 31, 2017
by
ymqytw
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update vendor kube-openapi
parent
82c7be51
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
770 additions
and
16 deletions
+770
-16
Godeps.json
Godeps/Godeps.json
+15
-6
LICENSES
Godeps/LICENSES
+0
-0
BUILD
vendor/github.com/vishvananda/netns/BUILD
+3
-9
BUILD
vendor/k8s.io/kube-openapi/pkg/util/BUILD
+4
-1
BUILD
vendor/k8s.io/kube-openapi/pkg/util/proto/BUILD
+32
-0
doc.go
vendor/k8s.io/kube-openapi/pkg/util/proto/doc.go
+19
-0
document.go
vendor/k8s.io/kube-openapi/pkg/util/proto/document.go
+275
-0
openapi.go
vendor/k8s.io/kube-openapi/pkg/util/proto/openapi.go
+229
-0
BUILD
vendor/k8s.io/kube-openapi/pkg/util/proto/testing/BUILD
+30
-0
gvk.go
vendor/k8s.io/kube-openapi/pkg/util/proto/testing/gvk.go
+74
-0
openapi.go
vendor/k8s.io/kube-openapi/pkg/util/proto/testing/openapi.go
+89
-0
swagger.json
...r/k8s.io/kube-openapi/pkg/util/proto/testing/swagger.json
+0
-0
No files found.
Godeps/Godeps.json
View file @
006f80e3
...
@@ -1062,6 +1062,7 @@
...
@@ -1062,6 +1062,7 @@
},
},
{
{
"ImportPath"
:
"github.com/docker/libnetwork/ipvs"
,
"ImportPath"
:
"github.com/docker/libnetwork/ipvs"
,
"Comment"
:
"v0.8.0-dev.2-840-gc3393f1d"
,
"Rev"
:
"c3393f1d3e1ba69b596eca45a9f1da9398e17ca5"
"Rev"
:
"c3393f1d3e1ba69b596eca45a9f1da9398e17ca5"
},
},
{
{
...
@@ -3099,27 +3100,35 @@
...
@@ -3099,27 +3100,35 @@
},
},
{
{
"ImportPath"
:
"k8s.io/kube-openapi/pkg/aggregator"
,
"ImportPath"
:
"k8s.io/kube-openapi/pkg/aggregator"
,
"Rev"
:
"
868f2f29720b192240e18284659231b440f9cda5
"
"Rev"
:
"
76a6671bcfb1d229fc7fd543aee23ddff6b5fc7e
"
},
},
{
{
"ImportPath"
:
"k8s.io/kube-openapi/pkg/builder"
,
"ImportPath"
:
"k8s.io/kube-openapi/pkg/builder"
,
"Rev"
:
"
868f2f29720b192240e18284659231b440f9cda5
"
"Rev"
:
"
76a6671bcfb1d229fc7fd543aee23ddff6b5fc7e
"
},
},
{
{
"ImportPath"
:
"k8s.io/kube-openapi/pkg/common"
,
"ImportPath"
:
"k8s.io/kube-openapi/pkg/common"
,
"Rev"
:
"
868f2f29720b192240e18284659231b440f9cda5
"
"Rev"
:
"
76a6671bcfb1d229fc7fd543aee23ddff6b5fc7e
"
},
},
{
{
"ImportPath"
:
"k8s.io/kube-openapi/pkg/generators"
,
"ImportPath"
:
"k8s.io/kube-openapi/pkg/generators"
,
"Rev"
:
"
868f2f29720b192240e18284659231b440f9cda5
"
"Rev"
:
"
76a6671bcfb1d229fc7fd543aee23ddff6b5fc7e
"
},
},
{
{
"ImportPath"
:
"k8s.io/kube-openapi/pkg/handler"
,
"ImportPath"
:
"k8s.io/kube-openapi/pkg/handler"
,
"Rev"
:
"
868f2f29720b192240e18284659231b440f9cda5
"
"Rev"
:
"
76a6671bcfb1d229fc7fd543aee23ddff6b5fc7e
"
},
},
{
{
"ImportPath"
:
"k8s.io/kube-openapi/pkg/util"
,
"ImportPath"
:
"k8s.io/kube-openapi/pkg/util"
,
"Rev"
:
"868f2f29720b192240e18284659231b440f9cda5"
"Rev"
:
"76a6671bcfb1d229fc7fd543aee23ddff6b5fc7e"
},
{
"ImportPath"
:
"k8s.io/kube-openapi/pkg/util/proto"
,
"Rev"
:
"76a6671bcfb1d229fc7fd543aee23ddff6b5fc7e"
},
{
"ImportPath"
:
"k8s.io/kube-openapi/pkg/util/proto/testing"
,
"Rev"
:
"76a6671bcfb1d229fc7fd543aee23ddff6b5fc7e"
},
},
{
{
"ImportPath"
:
"k8s.io/utils/exec"
,
"ImportPath"
:
"k8s.io/utils/exec"
,
...
...
Godeps/LICENSES
View file @
006f80e3
This diff is collapsed.
Click to expand it.
vendor/github.com/vishvananda/netns/BUILD
View file @
006f80e3
package(default_visibility = ["//visibility:public"])
load("@io_bazel_rules_go//go:def.bzl", "go_library")
licenses(["notice"])
load(
"@io_bazel_rules_go//go:def.bzl",
"go_library",
)
go_library(
go_library(
name = "go_default_library",
name = "go_default_library",
...
@@ -18,7 +11,7 @@ go_library(
...
@@ -18,7 +11,7 @@ go_library(
],
],
"//conditions:default": [],
"//conditions:default": [],
}),
}),
tags = ["automanaged
"],
visibility = ["//visibility:public
"],
)
)
filegroup(
filegroup(
...
@@ -32,4 +25,5 @@ filegroup(
...
@@ -32,4 +25,5 @@ filegroup(
name = "all-srcs",
name = "all-srcs",
srcs = [":package-srcs"],
srcs = [":package-srcs"],
tags = ["automanaged"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
)
vendor/k8s.io/kube-openapi/pkg/util/BUILD
View file @
006f80e3
...
@@ -15,7 +15,10 @@ filegroup(
...
@@ -15,7 +15,10 @@ filegroup(
filegroup(
filegroup(
name = "all-srcs",
name = "all-srcs",
srcs = [":package-srcs"],
srcs = [
":package-srcs",
"//vendor/k8s.io/kube-openapi/pkg/util/proto:all-srcs",
],
tags = ["automanaged"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
visibility = ["//visibility:public"],
)
)
vendor/k8s.io/kube-openapi/pkg/util/proto/BUILD
0 → 100644
View file @
006f80e3
load("@io_bazel_rules_go//go:def.bzl", "go_library")
go_library(
name = "go_default_library",
srcs = [
"doc.go",
"document.go",
"openapi.go",
],
visibility = ["//visibility:public"],
deps = [
"//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library",
"//vendor/gopkg.in/yaml.v2:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [
":package-srcs",
"//vendor/k8s.io/kube-openapi/pkg/util/proto/testing:all-srcs",
],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
vendor/k8s.io/kube-openapi/pkg/util/proto/doc.go
0 → 100644
View file @
006f80e3
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// Package proto is a collection of libraries for parsing and indexing the type definitions.
// The openapi spec contains the object model definitions and extensions metadata.
package
proto
vendor/k8s.io/kube-openapi/pkg/util/proto/document.go
0 → 100644
View file @
006f80e3
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
proto
import
(
"fmt"
"strings"
openapi_v2
"github.com/googleapis/gnostic/OpenAPIv2"
yaml
"gopkg.in/yaml.v2"
)
func
newSchemaError
(
path
*
Path
,
format
string
,
a
...
interface
{})
error
{
err
:=
fmt
.
Sprintf
(
format
,
a
...
)
if
path
.
Len
()
==
0
{
return
fmt
.
Errorf
(
"SchemaError: %v"
,
err
)
}
return
fmt
.
Errorf
(
"SchemaError(%v): %v"
,
path
,
err
)
}
// VendorExtensionToMap converts openapi VendorExtension to a map.
func
VendorExtensionToMap
(
e
[]
*
openapi_v2
.
NamedAny
)
map
[
string
]
interface
{}
{
values
:=
map
[
string
]
interface
{}{}
for
_
,
na
:=
range
e
{
if
na
.
GetName
()
==
""
||
na
.
GetValue
()
==
nil
{
continue
}
if
na
.
GetValue
()
.
GetYaml
()
==
""
{
continue
}
var
value
interface
{}
err
:=
yaml
.
Unmarshal
([]
byte
(
na
.
GetValue
()
.
GetYaml
()),
&
value
)
if
err
!=
nil
{
continue
}
values
[
na
.
GetName
()]
=
value
}
return
values
}
// Definitions is an implementation of `Resources`. It looks for
// resources in an openapi Schema.
type
Definitions
struct
{
models
map
[
string
]
Schema
resources
map
[
string
]
string
}
var
_
Resources
=
&
Definitions
{}
// NewOpenAPIData creates a new `Resources` out of the openapi document.
func
NewOpenAPIData
(
doc
*
openapi_v2
.
Document
,
getIdFromSchema
func
(
s
*
openapi_v2
.
Schema
)
string
)
(
Resources
,
error
)
{
definitions
:=
Definitions
{
models
:
map
[
string
]
Schema
{},
resources
:
map
[
string
]
string
{},
}
// Save the list of all models first. This will allow us to
// validate that we don't have any dangling reference.
for
_
,
namedSchema
:=
range
doc
.
GetDefinitions
()
.
GetAdditionalProperties
()
{
definitions
.
models
[
namedSchema
.
GetName
()]
=
nil
}
// Now, parse each model. We can validate that references exists.
for
_
,
namedSchema
:=
range
doc
.
GetDefinitions
()
.
GetAdditionalProperties
()
{
path
:=
NewPath
(
namedSchema
.
GetName
())
schema
,
err
:=
definitions
.
ParseSchema
(
namedSchema
.
GetValue
(),
&
path
)
if
err
!=
nil
{
return
nil
,
err
}
definitions
.
models
[
namedSchema
.
GetName
()]
=
schema
id
:=
getIdFromSchema
(
namedSchema
.
GetValue
())
definitions
.
resources
[
id
]
=
namedSchema
.
GetName
()
}
return
&
definitions
,
nil
}
// We believe the schema is a reference, verify that and returns a new
// Schema
func
(
d
*
Definitions
)
parseReference
(
s
*
openapi_v2
.
Schema
,
path
*
Path
)
(
Schema
,
error
)
{
if
len
(
s
.
GetProperties
()
.
GetAdditionalProperties
())
>
0
{
return
nil
,
newSchemaError
(
path
,
"unallowed embedded type definition"
)
}
if
len
(
s
.
GetType
()
.
GetValue
())
>
0
{
return
nil
,
newSchemaError
(
path
,
"definition reference can't have a type"
)
}
if
!
strings
.
HasPrefix
(
s
.
GetXRef
(),
"#/definitions/"
)
{
return
nil
,
newSchemaError
(
path
,
"unallowed reference to non-definition %q"
,
s
.
GetXRef
())
}
reference
:=
strings
.
TrimPrefix
(
s
.
GetXRef
(),
"#/definitions/"
)
if
_
,
ok
:=
d
.
models
[
reference
];
!
ok
{
return
nil
,
newSchemaError
(
path
,
"unknown model in reference: %q"
,
reference
)
}
return
&
Ref
{
BaseSchema
:
d
.
parseBaseSchema
(
s
,
path
),
reference
:
reference
,
definitions
:
d
,
},
nil
}
func
(
d
*
Definitions
)
parseBaseSchema
(
s
*
openapi_v2
.
Schema
,
path
*
Path
)
BaseSchema
{
return
BaseSchema
{
Description
:
s
.
GetDescription
(),
Extensions
:
VendorExtensionToMap
(
s
.
GetVendorExtension
()),
Path
:
*
path
,
}
}
// We believe the schema is a map, verify and return a new schema
func
(
d
*
Definitions
)
parseMap
(
s
*
openapi_v2
.
Schema
,
path
*
Path
)
(
Schema
,
error
)
{
if
len
(
s
.
GetType
()
.
GetValue
())
!=
0
&&
s
.
GetType
()
.
GetValue
()[
0
]
!=
object
{
return
nil
,
newSchemaError
(
path
,
"invalid object type"
)
}
if
s
.
GetAdditionalProperties
()
.
GetSchema
()
==
nil
{
return
nil
,
newSchemaError
(
path
,
"invalid object doesn't have additional properties"
)
}
sub
,
err
:=
d
.
ParseSchema
(
s
.
GetAdditionalProperties
()
.
GetSchema
(),
path
)
if
err
!=
nil
{
return
nil
,
err
}
return
&
Map
{
BaseSchema
:
d
.
parseBaseSchema
(
s
,
path
),
SubType
:
sub
,
},
nil
}
func
(
d
*
Definitions
)
parsePrimitive
(
s
*
openapi_v2
.
Schema
,
path
*
Path
)
(
Schema
,
error
)
{
var
t
string
if
len
(
s
.
GetType
()
.
GetValue
())
>
1
{
return
nil
,
newSchemaError
(
path
,
"primitive can't have more than 1 type"
)
}
if
len
(
s
.
GetType
()
.
GetValue
())
==
1
{
t
=
s
.
GetType
()
.
GetValue
()[
0
]
}
switch
t
{
case
String
:
case
Number
:
case
Integer
:
case
Boolean
:
case
""
:
// Some models are completely empty, and can be safely ignored.
// Do nothing
default
:
return
nil
,
newSchemaError
(
path
,
"Unknown primitive type: %q"
,
t
)
}
return
&
Primitive
{
BaseSchema
:
d
.
parseBaseSchema
(
s
,
path
),
Type
:
t
,
Format
:
s
.
GetFormat
(),
},
nil
}
func
(
d
*
Definitions
)
parseArray
(
s
*
openapi_v2
.
Schema
,
path
*
Path
)
(
Schema
,
error
)
{
if
len
(
s
.
GetType
()
.
GetValue
())
!=
1
{
return
nil
,
newSchemaError
(
path
,
"array should have exactly one type"
)
}
if
s
.
GetType
()
.
GetValue
()[
0
]
!=
array
{
return
nil
,
newSchemaError
(
path
,
`array should have type "array"`
)
}
if
len
(
s
.
GetItems
()
.
GetSchema
())
!=
1
{
return
nil
,
newSchemaError
(
path
,
"array should have exactly one sub-item"
)
}
sub
,
err
:=
d
.
ParseSchema
(
s
.
GetItems
()
.
GetSchema
()[
0
],
path
)
if
err
!=
nil
{
return
nil
,
err
}
return
&
Array
{
BaseSchema
:
d
.
parseBaseSchema
(
s
,
path
),
SubType
:
sub
,
},
nil
}
func
(
d
*
Definitions
)
parseKind
(
s
*
openapi_v2
.
Schema
,
path
*
Path
)
(
Schema
,
error
)
{
if
len
(
s
.
GetType
()
.
GetValue
())
!=
0
&&
s
.
GetType
()
.
GetValue
()[
0
]
!=
object
{
return
nil
,
newSchemaError
(
path
,
"invalid object type"
)
}
if
s
.
GetProperties
()
==
nil
{
return
nil
,
newSchemaError
(
path
,
"object doesn't have properties"
)
}
fields
:=
map
[
string
]
Schema
{}
for
_
,
namedSchema
:=
range
s
.
GetProperties
()
.
GetAdditionalProperties
()
{
var
err
error
path
:=
path
.
FieldPath
(
namedSchema
.
GetName
())
fields
[
namedSchema
.
GetName
()],
err
=
d
.
ParseSchema
(
namedSchema
.
GetValue
(),
&
path
)
if
err
!=
nil
{
return
nil
,
err
}
}
return
&
Kind
{
BaseSchema
:
d
.
parseBaseSchema
(
s
,
path
),
RequiredFields
:
s
.
GetRequired
(),
Fields
:
fields
,
},
nil
}
// ParseSchema creates a walkable Schema from an openapi schema. While
// this function is public, it doesn't leak through the interface.
func
(
d
*
Definitions
)
ParseSchema
(
s
*
openapi_v2
.
Schema
,
path
*
Path
)
(
Schema
,
error
)
{
if
len
(
s
.
GetType
()
.
GetValue
())
==
1
{
t
:=
s
.
GetType
()
.
GetValue
()[
0
]
switch
t
{
case
object
:
return
d
.
parseMap
(
s
,
path
)
case
array
:
return
d
.
parseArray
(
s
,
path
)
}
}
if
s
.
GetXRef
()
!=
""
{
return
d
.
parseReference
(
s
,
path
)
}
if
s
.
GetProperties
()
!=
nil
{
return
d
.
parseKind
(
s
,
path
)
}
return
d
.
parsePrimitive
(
s
,
path
)
}
// LookupResource is public through the interface of Resources. It
// returns a visitable schema from the given group-version-kind.
func
(
d
*
Definitions
)
LookupResource
(
gvk
string
)
Schema
{
modelName
,
found
:=
d
.
resources
[
gvk
]
if
!
found
{
return
nil
}
model
,
found
:=
d
.
models
[
modelName
]
if
!
found
{
return
nil
}
return
model
}
type
Ref
struct
{
BaseSchema
reference
string
definitions
*
Definitions
}
var
_
Reference
=
&
Ref
{}
func
(
r
*
Ref
)
Reference
()
string
{
return
r
.
reference
}
func
(
r
*
Ref
)
SubSchema
()
Schema
{
return
r
.
definitions
.
models
[
r
.
reference
]
}
func
(
r
*
Ref
)
Accept
(
v
SchemaVisitor
)
{
v
.
VisitReference
(
r
)
}
func
(
r
*
Ref
)
GetName
()
string
{
return
fmt
.
Sprintf
(
"Reference to %q"
,
r
.
reference
)
}
vendor/k8s.io/kube-openapi/pkg/util/proto/openapi.go
0 → 100644
View file @
006f80e3
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
proto
import
(
"fmt"
"strings"
)
// Defines openapi types.
const
(
Integer
=
"integer"
Number
=
"number"
String
=
"string"
Boolean
=
"boolean"
// These types are private as they should never leak, and are
// represented by actual structs.
array
=
"array"
object
=
"object"
)
// Resources interface describe a resources provider, that can give you
// resource based on group-version-kind.
type
Resources
interface
{
LookupResource
(
string
)
Schema
}
// SchemaVisitor is an interface that you need to implement if you want
// to "visit" an openapi schema. A dispatch on the Schema type will call
// the appropriate function based on its actual type:
// - Array is a list of one and only one given subtype
// - Map is a map of string to one and only one given subtype
// - Primitive can be string, integer, number and boolean.
// - Kind is an object with specific fields mapping to specific types.
// - Reference is a link to another definition.
type
SchemaVisitor
interface
{
VisitArray
(
*
Array
)
VisitMap
(
*
Map
)
VisitPrimitive
(
*
Primitive
)
VisitKind
(
*
Kind
)
VisitReference
(
Reference
)
}
// Schema is the base definition of an openapi type.
type
Schema
interface
{
// Giving a visitor here will let you visit the actual type.
Accept
(
SchemaVisitor
)
// Pretty print the name of the type.
GetName
()
string
// Describes how to access this field.
GetPath
()
*
Path
// Describes the field.
GetDescription
()
string
// Returns type extensions.
GetExtensions
()
map
[
string
]
interface
{}
}
// Path helps us keep track of type paths
type
Path
struct
{
parent
*
Path
key
string
}
func
NewPath
(
key
string
)
Path
{
return
Path
{
key
:
key
}
}
func
(
p
*
Path
)
Get
()
[]
string
{
if
p
==
nil
{
return
[]
string
{}
}
if
p
.
key
==
""
{
return
p
.
parent
.
Get
()
}
return
append
(
p
.
parent
.
Get
(),
p
.
key
)
}
func
(
p
*
Path
)
Len
()
int
{
return
len
(
p
.
Get
())
}
func
(
p
*
Path
)
String
()
string
{
return
strings
.
Join
(
p
.
Get
(),
""
)
}
// ArrayPath appends an array index and creates a new path
func
(
p
*
Path
)
ArrayPath
(
i
int
)
Path
{
return
Path
{
parent
:
p
,
key
:
fmt
.
Sprintf
(
"[%d]"
,
i
),
}
}
// FieldPath appends a field name and creates a new path
func
(
p
*
Path
)
FieldPath
(
field
string
)
Path
{
return
Path
{
parent
:
p
,
key
:
fmt
.
Sprintf
(
".%s"
,
field
),
}
}
// BaseSchema holds data used by each types of schema.
type
BaseSchema
struct
{
Description
string
Extensions
map
[
string
]
interface
{}
Path
Path
}
func
(
b
*
BaseSchema
)
GetDescription
()
string
{
return
b
.
Description
}
func
(
b
*
BaseSchema
)
GetExtensions
()
map
[
string
]
interface
{}
{
return
b
.
Extensions
}
func
(
b
*
BaseSchema
)
GetPath
()
*
Path
{
return
&
b
.
Path
}
// Array must have all its element of the same `SubType`.
type
Array
struct
{
BaseSchema
SubType
Schema
}
var
_
Schema
=
&
Array
{}
func
(
a
*
Array
)
Accept
(
v
SchemaVisitor
)
{
v
.
VisitArray
(
a
)
}
func
(
a
*
Array
)
GetName
()
string
{
return
fmt
.
Sprintf
(
"Array of %s"
,
a
.
SubType
.
GetName
())
}
// Kind is a complex object. It can have multiple different
// subtypes for each field, as defined in the `Fields` field. Mandatory
// fields are listed in `RequiredFields`. The key of the object is
// always of type `string`.
type
Kind
struct
{
BaseSchema
// Lists names of required fields.
RequiredFields
[]
string
// Maps field names to types.
Fields
map
[
string
]
Schema
}
var
_
Schema
=
&
Kind
{}
func
(
k
*
Kind
)
Accept
(
v
SchemaVisitor
)
{
v
.
VisitKind
(
k
)
}
func
(
k
*
Kind
)
GetName
()
string
{
properties
:=
[]
string
{}
for
key
:=
range
k
.
Fields
{
properties
=
append
(
properties
,
key
)
}
return
fmt
.
Sprintf
(
"Kind(%v)"
,
properties
)
}
// Map is an object who values must all be of the same `SubType`.
// The key of the object is always of type `string`.
type
Map
struct
{
BaseSchema
SubType
Schema
}
var
_
Schema
=
&
Map
{}
func
(
m
*
Map
)
Accept
(
v
SchemaVisitor
)
{
v
.
VisitMap
(
m
)
}
func
(
m
*
Map
)
GetName
()
string
{
return
fmt
.
Sprintf
(
"Map of %s"
,
m
.
SubType
.
GetName
())
}
// Primitive is a literal. There can be multiple types of primitives,
// and this subtype can be visited through the `subType` field.
type
Primitive
struct
{
BaseSchema
// Type of a primitive must be one of: integer, number, string, boolean.
Type
string
Format
string
}
var
_
Schema
=
&
Primitive
{}
func
(
p
*
Primitive
)
Accept
(
v
SchemaVisitor
)
{
v
.
VisitPrimitive
(
p
)
}
func
(
p
*
Primitive
)
GetName
()
string
{
if
p
.
Format
==
""
{
return
p
.
Type
}
return
fmt
.
Sprintf
(
"%s (%s)"
,
p
.
Type
,
p
.
Format
)
}
// Reference implementation depends on the type of document.
type
Reference
interface
{
Schema
Reference
()
string
SubSchema
()
Schema
}
vendor/k8s.io/kube-openapi/pkg/util/proto/testing/BUILD
0 → 100644
View file @
006f80e3
load("@io_bazel_rules_go//go:def.bzl", "go_library")
go_library(
name = "go_default_library",
srcs = [
"gvk.go",
"openapi.go",
],
visibility = ["//visibility:public"],
deps = [
"//vendor/github.com/googleapis/gnostic/OpenAPIv2:go_default_library",
"//vendor/github.com/googleapis/gnostic/compiler:go_default_library",
"//vendor/gopkg.in/yaml.v2:go_default_library",
"//vendor/k8s.io/kube-openapi/pkg/util/proto:go_default_library",
],
)
filegroup(
name = "package-srcs",
srcs = glob(["**"]),
tags = ["automanaged"],
visibility = ["//visibility:private"],
)
filegroup(
name = "all-srcs",
srcs = [":package-srcs"],
tags = ["automanaged"],
visibility = ["//visibility:public"],
)
vendor/k8s.io/kube-openapi/pkg/util/proto/testing/gvk.go
0 → 100644
View file @
006f80e3
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
testing
import
(
"github.com/googleapis/gnostic/OpenAPIv2"
"k8s.io/kube-openapi/pkg/util/proto"
)
// tesingExtensionKey is the key used only for testing.
// We use some kubernetes openapi spec for testing that has this key.
const
tesingExtensionKey
=
"x-kubernetes-group-version-kind"
// Get and parse GroupVersionKind from the extension. Returns empty if it doesn't have one.
func
ParseGroupVersionKind
(
s
*
openapi_v2
.
Schema
)
string
{
extensionMap
:=
proto
.
VendorExtensionToMap
(
s
.
GetVendorExtension
())
// Get the extensions
gvkExtension
,
ok
:=
extensionMap
[
tesingExtensionKey
]
if
!
ok
{
return
""
}
// gvk extension must be a list of 1 element.
gvkList
,
ok
:=
gvkExtension
.
([]
interface
{})
if
!
ok
{
return
""
}
if
len
(
gvkList
)
!=
1
{
return
""
}
gvk
:=
gvkList
[
0
]
// gvk extension list must be a map with group, version, and
// kind fields
gvkMap
,
ok
:=
gvk
.
(
map
[
interface
{}]
interface
{})
if
!
ok
{
return
""
}
group
,
ok
:=
gvkMap
[
"group"
]
.
(
string
)
if
!
ok
{
return
""
}
version
,
ok
:=
gvkMap
[
"version"
]
.
(
string
)
if
!
ok
{
return
""
}
kind
,
ok
:=
gvkMap
[
"kind"
]
.
(
string
)
if
!
ok
{
return
""
}
return
GvkString
(
group
,
version
,
kind
)
}
func
GvkString
(
group
,
version
,
kind
string
)
string
{
return
group
+
"/"
+
version
+
", Kind="
+
kind
}
vendor/k8s.io/kube-openapi/pkg/util/proto/testing/openapi.go
0 → 100644
View file @
006f80e3
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package
testing
import
(
"io/ioutil"
"os"
"sync"
yaml
"gopkg.in/yaml.v2"
"github.com/googleapis/gnostic/OpenAPIv2"
"github.com/googleapis/gnostic/compiler"
)
// Fake opens and returns a openapi swagger from a file Path. It will
// parse only once and then return the same copy everytime.
type
Fake
struct
{
Path
string
once
sync
.
Once
document
*
openapi_v2
.
Document
err
error
}
// OpenAPISchema returns the openapi document and a potential error.
func
(
f
*
Fake
)
OpenAPISchema
()
(
*
openapi_v2
.
Document
,
error
)
{
f
.
once
.
Do
(
func
()
{
_
,
err
:=
os
.
Stat
(
f
.
Path
)
if
err
!=
nil
{
f
.
err
=
err
return
}
spec
,
err
:=
ioutil
.
ReadFile
(
f
.
Path
)
if
err
!=
nil
{
f
.
err
=
err
return
}
var
info
yaml
.
MapSlice
err
=
yaml
.
Unmarshal
(
spec
,
&
info
)
if
err
!=
nil
{
f
.
err
=
err
return
}
f
.
document
,
f
.
err
=
openapi_v2
.
NewDocument
(
info
,
compiler
.
NewContext
(
"$root"
,
nil
))
})
return
f
.
document
,
f
.
err
}
// FakeClient implements a dummy OpenAPISchemaInterface that uses the
// fake OpenAPI schema given as a parameter, and count the number of
// call to the function.
type
FakeClient
struct
{
Calls
int
Err
error
fake
*
Fake
}
// NewFakeClient creates a new FakeClient from the given Fake.
func
NewFakeClient
(
f
*
Fake
)
*
FakeClient
{
return
&
FakeClient
{
fake
:
f
}
}
// OpenAPISchema returns a OpenAPI Document as returned by the fake, but
// it also counts the number of calls.
func
(
f
*
FakeClient
)
OpenAPISchema
()
(
*
openapi_v2
.
Document
,
error
)
{
f
.
Calls
=
f
.
Calls
+
1
if
f
.
Err
!=
nil
{
return
nil
,
f
.
Err
}
return
f
.
fake
.
OpenAPISchema
()
}
vendor/k8s.io/kube-openapi/pkg/util/proto/testing/swagger.json
0 → 100644
View file @
006f80e3
This source diff could not be displayed because it is too large. You can
view the blob
instead.
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