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 v1beta1
// JSONSchemaProps is a JSON-Schema following Specification Draft 4 (http://json-schema.org/).
type JSONSchemaProps struct {
2021-05-15 10:08:31 +00:00
ID string ` json:"id,omitempty" protobuf:"bytes,1,opt,name=id" `
Schema JSONSchemaURL ` json:"$schema,omitempty" protobuf:"bytes,2,opt,name=schema" `
Ref * string ` json:"$ref,omitempty" protobuf:"bytes,3,opt,name=ref" `
Description string ` json:"description,omitempty" protobuf:"bytes,4,opt,name=description" `
Type string ` json:"type,omitempty" protobuf:"bytes,5,opt,name=type" `
// format is an OpenAPI v3 format string. Unknown formats are ignored. The following formats are validated:
//
// - bsonobjectid: a bson object ID, i.e. a 24 characters hex string
// - uri: an URI as parsed by Golang net/url.ParseRequestURI
// - email: an email address as parsed by Golang net/mail.ParseAddress
// - hostname: a valid representation for an Internet host name, as defined by RFC 1034, section 3.1 [RFC1034].
// - ipv4: an IPv4 IP as parsed by Golang net.ParseIP
// - ipv6: an IPv6 IP as parsed by Golang net.ParseIP
// - cidr: a CIDR as parsed by Golang net.ParseCIDR
// - mac: a MAC address as parsed by Golang net.ParseMAC
// - uuid: an UUID that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{4}-?[0-9a-f]{12}$
// - uuid3: an UUID3 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?3[0-9a-f]{3}-?[0-9a-f]{4}-?[0-9a-f]{12}$
// - uuid4: an UUID4 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?4[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
// - uuid5: an UUID5 that allows uppercase defined by the regex (?i)^[0-9a-f]{8}-?[0-9a-f]{4}-?5[0-9a-f]{3}-?[89ab][0-9a-f]{3}-?[0-9a-f]{12}$
// - isbn: an ISBN10 or ISBN13 number string like "0321751043" or "978-0321751041"
// - isbn10: an ISBN10 number string like "0321751043"
// - isbn13: an ISBN13 number string like "978-0321751041"
// - creditcard: a credit card number defined by the regex ^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})$ with any non digit characters mixed in
// - ssn: a U.S. social security number following the regex ^\\d{3}[- ]?\\d{2}[- ]?\\d{4}$
// - hexcolor: an hexadecimal color code like "#FFFFFF: following the regex ^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$
// - rgbcolor: an RGB color code like rgb like "rgb(255,255,2559"
// - byte: base64 encoded binary data
// - password: any kind of string
// - date: a date string like "2006-01-02" as defined by full-date in RFC3339
// - duration: a duration string like "22 ns" as parsed by Golang time.ParseDuration or compatible with Scala duration format
// - datetime: a date time string like "2014-12-15T19:30:20.000Z" as defined by date-time in RFC3339.
Format string ` json:"format,omitempty" protobuf:"bytes,6,opt,name=format" `
Title string ` json:"title,omitempty" protobuf:"bytes,7,opt,name=title" `
// default is a default value for undefined object fields.
// Defaulting is a beta feature under the CustomResourceDefaulting feature gate.
// CustomResourceDefinitions with defaults must be created using the v1 (or newer) CustomResourceDefinition API.
2019-05-03 10:50:21 +00:00
Default * JSON ` json:"default,omitempty" protobuf:"bytes,8,opt,name=default" `
Maximum * float64 ` json:"maximum,omitempty" protobuf:"bytes,9,opt,name=maximum" `
ExclusiveMaximum bool ` json:"exclusiveMaximum,omitempty" protobuf:"bytes,10,opt,name=exclusiveMaximum" `
Minimum * float64 ` json:"minimum,omitempty" protobuf:"bytes,11,opt,name=minimum" `
ExclusiveMinimum bool ` json:"exclusiveMinimum,omitempty" protobuf:"bytes,12,opt,name=exclusiveMinimum" `
MaxLength * int64 ` json:"maxLength,omitempty" protobuf:"bytes,13,opt,name=maxLength" `
MinLength * int64 ` json:"minLength,omitempty" protobuf:"bytes,14,opt,name=minLength" `
Pattern string ` json:"pattern,omitempty" protobuf:"bytes,15,opt,name=pattern" `
MaxItems * int64 ` json:"maxItems,omitempty" protobuf:"bytes,16,opt,name=maxItems" `
MinItems * int64 ` json:"minItems,omitempty" protobuf:"bytes,17,opt,name=minItems" `
UniqueItems bool ` json:"uniqueItems,omitempty" protobuf:"bytes,18,opt,name=uniqueItems" `
MultipleOf * float64 ` json:"multipleOf,omitempty" protobuf:"bytes,19,opt,name=multipleOf" `
Enum [ ] JSON ` json:"enum,omitempty" protobuf:"bytes,20,rep,name=enum" `
MaxProperties * int64 ` json:"maxProperties,omitempty" protobuf:"bytes,21,opt,name=maxProperties" `
MinProperties * int64 ` json:"minProperties,omitempty" protobuf:"bytes,22,opt,name=minProperties" `
Required [ ] string ` json:"required,omitempty" protobuf:"bytes,23,rep,name=required" `
Items * JSONSchemaPropsOrArray ` json:"items,omitempty" protobuf:"bytes,24,opt,name=items" `
AllOf [ ] JSONSchemaProps ` json:"allOf,omitempty" protobuf:"bytes,25,rep,name=allOf" `
OneOf [ ] JSONSchemaProps ` json:"oneOf,omitempty" protobuf:"bytes,26,rep,name=oneOf" `
AnyOf [ ] JSONSchemaProps ` json:"anyOf,omitempty" protobuf:"bytes,27,rep,name=anyOf" `
Not * JSONSchemaProps ` json:"not,omitempty" protobuf:"bytes,28,opt,name=not" `
Properties map [ string ] JSONSchemaProps ` json:"properties,omitempty" protobuf:"bytes,29,rep,name=properties" `
AdditionalProperties * JSONSchemaPropsOrBool ` json:"additionalProperties,omitempty" protobuf:"bytes,30,opt,name=additionalProperties" `
PatternProperties map [ string ] JSONSchemaProps ` json:"patternProperties,omitempty" protobuf:"bytes,31,rep,name=patternProperties" `
Dependencies JSONSchemaDependencies ` json:"dependencies,omitempty" protobuf:"bytes,32,opt,name=dependencies" `
AdditionalItems * JSONSchemaPropsOrBool ` json:"additionalItems,omitempty" protobuf:"bytes,33,opt,name=additionalItems" `
Definitions JSONSchemaDefinitions ` json:"definitions,omitempty" protobuf:"bytes,34,opt,name=definitions" `
ExternalDocs * ExternalDocumentation ` json:"externalDocs,omitempty" protobuf:"bytes,35,opt,name=externalDocs" `
Example * JSON ` json:"example,omitempty" protobuf:"bytes,36,opt,name=example" `
Nullable bool ` json:"nullable,omitempty" protobuf:"bytes,37,opt,name=nullable" `
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 ` json:"x-kubernetes-preserve-unknown-fields,omitempty" protobuf:"bytes,38,opt,name=xKubernetesPreserveUnknownFields" `
// 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. kind, apiVersion and metadata
// are validated automatically. x-kubernetes-preserve-unknown-fields
// is allowed to be true, but does not have to be if the object
// is fully specified (up to kind, apiVersion, metadata).
XEmbeddedResource bool ` json:"x-kubernetes-embedded-resource,omitempty" protobuf:"bytes,39,opt,name=xKubernetesEmbeddedResource" `
// 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 ` json:"x-kubernetes-int-or-string,omitempty" protobuf:"bytes,40,opt,name=xKubernetesIntOrString" `
// 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).
//
// The properties specified must either be required or have a default value,
// to ensure those properties are present for all list items.
//
// +optional
XListMapKeys [ ] string ` json:"x-kubernetes-list-map-keys,omitempty" protobuf:"bytes,41,rep,name=xKubernetesListMapKeys" `
// 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.
// Defaults to atomic for arrays.
// +optional
XListType * string ` json:"x-kubernetes-list-type,omitempty" protobuf:"bytes,42,opt,name=xKubernetesListType" `
// 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 ` json:"x-kubernetes-map-type,omitempty" protobuf:"bytes,43,opt,name=xKubernetesMapType" `
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 struct {
Raw [ ] byte ` protobuf:"bytes,1,opt,name=raw" `
}
// OpenAPISchemaType is used by the kube-openapi generator when constructing
// the OpenAPI spec of this type.
//
// See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators
func ( _ JSON ) OpenAPISchemaType ( ) [ ] string {
// TODO: return actual types when anyOf is supported
return nil
}
// OpenAPISchemaFormat is used by the kube-openapi generator when constructing
// the OpenAPI spec of this type.
func ( _ JSON ) OpenAPISchemaFormat ( ) string { return "" }
// 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 ` protobuf:"bytes,1,opt,name=schema" `
JSONSchemas [ ] JSONSchemaProps ` protobuf:"bytes,2,rep,name=jSONSchemas" `
}
// OpenAPISchemaType is used by the kube-openapi generator when constructing
// the OpenAPI spec of this type.
//
// See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators
func ( _ JSONSchemaPropsOrArray ) OpenAPISchemaType ( ) [ ] string {
// TODO: return actual types when anyOf is supported
return nil
}
// OpenAPISchemaFormat is used by the kube-openapi generator when constructing
// the OpenAPI spec of this type.
func ( _ JSONSchemaPropsOrArray ) OpenAPISchemaFormat ( ) string { return "" }
// JSONSchemaPropsOrBool represents JSONSchemaProps or a boolean value.
// Defaults to true for the boolean property.
type JSONSchemaPropsOrBool struct {
Allows bool ` protobuf:"varint,1,opt,name=allows" `
Schema * JSONSchemaProps ` protobuf:"bytes,2,opt,name=schema" `
}
// OpenAPISchemaType is used by the kube-openapi generator when constructing
// the OpenAPI spec of this type.
//
// See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators
func ( _ JSONSchemaPropsOrBool ) OpenAPISchemaType ( ) [ ] string {
// TODO: return actual types when anyOf is supported
return nil
}
// OpenAPISchemaFormat is used by the kube-openapi generator when constructing
// the OpenAPI spec of this type.
func ( _ JSONSchemaPropsOrBool ) OpenAPISchemaFormat ( ) string { return "" }
// JSONSchemaDependencies represent a dependencies property.
type JSONSchemaDependencies map [ string ] JSONSchemaPropsOrStringArray
// JSONSchemaPropsOrStringArray represents a JSONSchemaProps or a string array.
type JSONSchemaPropsOrStringArray struct {
Schema * JSONSchemaProps ` protobuf:"bytes,1,opt,name=schema" `
Property [ ] string ` protobuf:"bytes,2,rep,name=property" `
}
// OpenAPISchemaType is used by the kube-openapi generator when constructing
// the OpenAPI spec of this type.
//
// See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators
func ( _ JSONSchemaPropsOrStringArray ) OpenAPISchemaType ( ) [ ] string {
// TODO: return actual types when anyOf is supported
return nil
}
// OpenAPISchemaFormat is used by the kube-openapi generator when constructing
// the OpenAPI spec of this type.
func ( _ JSONSchemaPropsOrStringArray ) OpenAPISchemaFormat ( ) string { return "" }
// 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 ` json:"description,omitempty" protobuf:"bytes,1,opt,name=description" `
URL string ` json:"url,omitempty" protobuf:"bytes,2,opt,name=url" `
}