summaryrefslogtreecommitdiff
path: root/vendor/k8s.io/kube-openapi/pkg/util
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/k8s.io/kube-openapi/pkg/util')
-rw-r--r--vendor/k8s.io/kube-openapi/pkg/util/proto/doc.go19
-rw-r--r--vendor/k8s.io/kube-openapi/pkg/util/proto/document.go285
-rw-r--r--vendor/k8s.io/kube-openapi/pkg/util/proto/openapi.go276
3 files changed, 0 insertions, 580 deletions
diff --git a/vendor/k8s.io/kube-openapi/pkg/util/proto/doc.go b/vendor/k8s.io/kube-openapi/pkg/util/proto/doc.go
deleted file mode 100644
index 11ed8a6b7..000000000
--- a/vendor/k8s.io/kube-openapi/pkg/util/proto/doc.go
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
-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
diff --git a/vendor/k8s.io/kube-openapi/pkg/util/proto/document.go b/vendor/k8s.io/kube-openapi/pkg/util/proto/document.go
deleted file mode 100644
index 61dbf4fc0..000000000
--- a/vendor/k8s.io/kube-openapi/pkg/util/proto/document.go
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
-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"
- "sort"
- "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 `Models`. It looks for
-// models in an openapi Schema.
-type Definitions struct {
- models map[string]Schema
-}
-
-var _ Models = &Definitions{}
-
-// NewOpenAPIData creates a new `Models` out of the openapi document.
-func NewOpenAPIData(doc *openapi_v2.Document) (Models, error) {
- definitions := Definitions{
- models: map[string]Schema{},
- }
-
- // 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
- }
-
- 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
-}
-
-func (d *Definitions) parseArbitrary(s *openapi_v2.Schema, path *Path) (Schema, error) {
- return &Arbitrary{
- BaseSchema: d.parseBaseSchema(s, path),
- }, 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) {
- objectTypes := s.GetType().GetValue()
- if len(objectTypes) == 1 {
- t := objectTypes[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)
- }
- if len(objectTypes) == 0 || (len(objectTypes) == 1 && objectTypes[0] == "") {
- return d.parseArbitrary(s, path)
- }
- return d.parsePrimitive(s, path)
-}
-
-// LookupModel is public through the interface of Models. It
-// returns a visitable schema from the given model name.
-func (d *Definitions) LookupModel(model string) Schema {
- return d.models[model]
-}
-
-func (d *Definitions) ListModels() []string {
- models := []string{}
-
- for model := range d.models {
- models = append(models, model)
- }
-
- sort.Strings(models)
- return models
-}
-
-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)
-}
diff --git a/vendor/k8s.io/kube-openapi/pkg/util/proto/openapi.go b/vendor/k8s.io/kube-openapi/pkg/util/proto/openapi.go
deleted file mode 100644
index b48e62c3b..000000000
--- a/vendor/k8s.io/kube-openapi/pkg/util/proto/openapi.go
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
-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"
- "sort"
- "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"
-)
-
-// Models interface describe a model provider. They can give you the
-// schema for a specific model.
-type Models interface {
- LookupModel(string) Schema
- ListModels() []string
-}
-
-// 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)
-}
-
-// SchemaVisitorArbitrary is an additional visitor interface which handles
-// arbitrary types. For backwards compatability, it's a separate interface
-// which is checked for at runtime.
-type SchemaVisitorArbitrary interface {
- SchemaVisitor
- VisitArbitrary(*Arbitrary)
-}
-
-// 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)
-}
-
-// IsRequired returns true if `field` is a required field for this type.
-func (k *Kind) IsRequired(field string) bool {
- for _, f := range k.RequiredFields {
- if f == field {
- return true
- }
- }
- return false
-}
-
-// Keys returns a alphabetically sorted list of keys.
-func (k *Kind) Keys() []string {
- keys := make([]string, 0)
- for key := range k.Fields {
- keys = append(keys, key)
- }
- sort.Strings(keys)
- return keys
-}
-
-// 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)
-}
-
-// Arbitrary is a value of any type (primitive, object or array)
-type Arbitrary struct {
- BaseSchema
-}
-
-var _ Schema = &Arbitrary{}
-
-func (a *Arbitrary) Accept(v SchemaVisitor) {
- if visitor, ok := v.(SchemaVisitorArbitrary); ok {
- visitor.VisitArbitrary(a)
- }
-}
-
-func (a *Arbitrary) GetName() string {
- return "Arbitrary value (primitive, object or array)"
-}
-
-// Reference implementation depends on the type of document.
-type Reference interface {
- Schema
-
- Reference() string
- SubSchema() Schema
-}