2019-05-03 10:50:21 +00:00
|
|
|
/*
|
|
|
|
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 apiextensions
|
|
|
|
|
|
|
|
// JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/).
|
|
|
|
type JSONSchemaProps struct {
|
|
|
|
ID string
|
|
|
|
Schema JSONSchemaURL
|
|
|
|
Ref *string
|
|
|
|
Description string
|
|
|
|
Type string
|
|
|
|
Nullable bool
|
|
|
|
Format string
|
|
|
|
Title string
|
|
|
|
Default *JSON
|
|
|
|
Maximum *float64
|
|
|
|
ExclusiveMaximum bool
|
|
|
|
Minimum *float64
|
|
|
|
ExclusiveMinimum bool
|
|
|
|
MaxLength *int64
|
|
|
|
MinLength *int64
|
|
|
|
Pattern string
|
|
|
|
MaxItems *int64
|
|
|
|
MinItems *int64
|
|
|
|
UniqueItems bool
|
|
|
|
MultipleOf *float64
|
|
|
|
Enum []JSON
|
|
|
|
MaxProperties *int64
|
|
|
|
MinProperties *int64
|
|
|
|
Required []string
|
|
|
|
Items *JSONSchemaPropsOrArray
|
|
|
|
AllOf []JSONSchemaProps
|
|
|
|
OneOf []JSONSchemaProps
|
|
|
|
AnyOf []JSONSchemaProps
|
|
|
|
Not *JSONSchemaProps
|
|
|
|
Properties map[string]JSONSchemaProps
|
|
|
|
AdditionalProperties *JSONSchemaPropsOrBool
|
|
|
|
PatternProperties map[string]JSONSchemaProps
|
|
|
|
Dependencies JSONSchemaDependencies
|
|
|
|
AdditionalItems *JSONSchemaPropsOrBool
|
|
|
|
Definitions JSONSchemaDefinitions
|
|
|
|
ExternalDocs *ExternalDocumentation
|
|
|
|
Example *JSON
|
2021-05-15 10:08:31 +00:00
|
|
|
|
|
|
|
// x-kubernetes-preserve-unknown-fields stops the API server
|
|
|
|
// decoding step from pruning fields which are not specified
|
|
|
|
// in the validation schema. This affects fields recursively,
|
|
|
|
// but switches back to normal pruning behaviour if nested
|
|
|
|
// properties or additionalProperties are specified in the schema.
|
|
|
|
// This can either be true or undefined. False is forbidden.
|
|
|
|
XPreserveUnknownFields *bool
|
|
|
|
|
|
|
|
// x-kubernetes-embedded-resource defines that the value is an
|
|
|
|
// embedded Kubernetes runtime.Object, with TypeMeta and
|
|
|
|
// ObjectMeta. The type must be object. It is allowed to further
|
|
|
|
// restrict the embedded object. Both ObjectMeta and TypeMeta
|
|
|
|
// are validated automatically. x-kubernetes-preserve-unknown-fields
|
|
|
|
// must be true.
|
|
|
|
XEmbeddedResource bool
|
|
|
|
|
|
|
|
// x-kubernetes-int-or-string specifies that this value is
|
|
|
|
// either an integer or a string. If this is true, an empty
|
|
|
|
// type is allowed and type as child of anyOf is permitted
|
|
|
|
// if following one of the following patterns:
|
|
|
|
//
|
|
|
|
// 1) anyOf:
|
|
|
|
// - type: integer
|
|
|
|
// - type: string
|
|
|
|
// 2) allOf:
|
|
|
|
// - anyOf:
|
|
|
|
// - type: integer
|
|
|
|
// - type: string
|
|
|
|
// - ... zero or more
|
|
|
|
XIntOrString bool
|
|
|
|
|
|
|
|
// x-kubernetes-list-map-keys annotates an array with the x-kubernetes-list-type `map` by specifying the keys used
|
|
|
|
// as the index of the map.
|
|
|
|
//
|
|
|
|
// This tag MUST only be used on lists that have the "x-kubernetes-list-type"
|
|
|
|
// extension set to "map". Also, the values specified for this attribute must
|
|
|
|
// be a scalar typed field of the child structure (no nesting is supported).
|
|
|
|
XListMapKeys []string
|
|
|
|
|
|
|
|
// x-kubernetes-list-type annotates an array to further describe its topology.
|
|
|
|
// This extension must only be used on lists and may have 3 possible values:
|
|
|
|
//
|
|
|
|
// 1) `atomic`: the list is treated as a single entity, like a scalar.
|
|
|
|
// Atomic lists will be entirely replaced when updated. This extension
|
|
|
|
// may be used on any type of list (struct, scalar, ...).
|
|
|
|
// 2) `set`:
|
|
|
|
// Sets are lists that must not have multiple items with the same value. Each
|
|
|
|
// value must be a scalar, an object with x-kubernetes-map-type `atomic` or an
|
|
|
|
// array with x-kubernetes-list-type `atomic`.
|
|
|
|
// 3) `map`:
|
|
|
|
// These lists are like maps in that their elements have a non-index key
|
|
|
|
// used to identify them. Order is preserved upon merge. The map tag
|
|
|
|
// must only be used on a list with elements of type object.
|
|
|
|
XListType *string
|
|
|
|
|
|
|
|
// x-kubernetes-map-type annotates an object to further describe its topology.
|
|
|
|
// This extension must only be used when type is object and may have 2 possible values:
|
|
|
|
//
|
|
|
|
// 1) `granular`:
|
|
|
|
// These maps are actual maps (key-value pairs) and each fields are independent
|
|
|
|
// from each other (they can each be manipulated by separate actors). This is
|
|
|
|
// the default behaviour for all maps.
|
|
|
|
// 2) `atomic`: the list is treated as a single entity, like a scalar.
|
|
|
|
// Atomic maps will be entirely replaced when updated.
|
|
|
|
// +optional
|
|
|
|
XMapType *string
|
2019-05-03 10:50:21 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// JSON represents any valid JSON value.
|
|
|
|
// These types are supported: bool, int64, float64, string, []interface{}, map[string]interface{} and nil.
|
|
|
|
type JSON interface{}
|
|
|
|
|
|
|
|
// JSONSchemaURL represents a schema url.
|
|
|
|
type JSONSchemaURL string
|
|
|
|
|
|
|
|
// JSONSchemaPropsOrArray represents a value that can either be a JSONSchemaProps
|
|
|
|
// or an array of JSONSchemaProps. Mainly here for serialization purposes.
|
|
|
|
type JSONSchemaPropsOrArray struct {
|
|
|
|
Schema *JSONSchemaProps
|
|
|
|
JSONSchemas []JSONSchemaProps
|
|
|
|
}
|
|
|
|
|
|
|
|
// JSONSchemaPropsOrBool represents JSONSchemaProps or a boolean value.
|
|
|
|
// Defaults to true for the boolean property.
|
|
|
|
type JSONSchemaPropsOrBool struct {
|
|
|
|
Allows bool
|
|
|
|
Schema *JSONSchemaProps
|
|
|
|
}
|
|
|
|
|
|
|
|
// JSONSchemaDependencies represent a dependencies property.
|
|
|
|
type JSONSchemaDependencies map[string]JSONSchemaPropsOrStringArray
|
|
|
|
|
|
|
|
// JSONSchemaPropsOrStringArray represents a JSONSchemaProps or a string array.
|
|
|
|
type JSONSchemaPropsOrStringArray struct {
|
|
|
|
Schema *JSONSchemaProps
|
|
|
|
Property []string
|
|
|
|
}
|
|
|
|
|
|
|
|
// JSONSchemaDefinitions contains the models explicitly defined in this spec.
|
|
|
|
type JSONSchemaDefinitions map[string]JSONSchemaProps
|
|
|
|
|
|
|
|
// ExternalDocumentation allows referencing an external resource for extended documentation.
|
|
|
|
type ExternalDocumentation struct {
|
|
|
|
Description string
|
|
|
|
URL string
|
|
|
|
}
|