apiextensions-apiserver: k8s.io/apiextensions-apiserver/pkg/apiserver/schema Index | Files | Directories

package schema

import "k8s.io/apiextensions-apiserver/pkg/apiserver/schema"

Index

Package Files

complete.go convert.go goopenapi.go skeleton.go structural.go unfold.go validation.go visitor.go zz_generated.deepcopy.go

func ValidateStructural Uses

func ValidateStructural(fldPath *field.Path, s *Structural) field.ErrorList

ValidateStructural checks that s is a structural schema with the invariants:

* structurality: both `ForbiddenGenerics` and `ForbiddenExtensions` only have zero values, with the two exceptions for IntOrString. * RawExtension: for every schema with `x-kubernetes-embedded-resource: true`, `x-kubernetes-preserve-unknown-fields: true` and `type: object` are set * IntOrString: for `x-kubernetes-int-or-string: true` either `type` is empty under `anyOf` and `allOf` or the schema structure is one of these:

	 1) anyOf:
     - type: integer
	    - type: string
	 2) allOf:
	    - anyOf:
	      - type: integer
	      - type: string
	    - ... zero or more

* every specified field or array in s is also specified outside of value validation. * metadata at the root can only restrict the name and generateName, and not be specified at all in nested contexts. * additionalProperties at the root is not allowed.

type Extensions Uses

type Extensions struct {
    // 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.
    // False means that the pruning behaviour is inherited from the parent.
    // False does not mean to activate pruning.
    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 lists 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 a list 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 (or another atomic type).
    // 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
}

Extensions contains the Kubernetes OpenAPI v3 vendor extensions.

func (*Extensions) DeepCopy Uses

func (in *Extensions) DeepCopy() *Extensions

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Extensions.

func (*Extensions) DeepCopyInto Uses

func (in *Extensions) DeepCopyInto(out *Extensions)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Generic Uses

type Generic struct {
    Description string
    // type specifies the type of a value.
    // It can be object, array, number, integer, boolean, string.
    // It is optional only if x-kubernetes-preserve-unknown-fields
    // or x-kubernetes-int-or-string is true.
    Type                 string
    Title                string
    Default              JSON
    AdditionalProperties *StructuralOrBool
    Nullable             bool
}

Generic contains the generic schema fields not allowed in value validation.

func (*Generic) DeepCopy Uses

func (in *Generic) DeepCopy() *Generic

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Generic.

func (*Generic) DeepCopyInto Uses

func (in *Generic) DeepCopyInto(out *Generic)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type JSON Uses

type JSON struct {
    Object interface{}
}

JSON wraps an arbitrary JSON value to be able to implement deepcopy.

func (JSON) DeepCopy Uses

func (j JSON) DeepCopy() JSON

DeepCopy creates a deep copy of the wrapped JSON value.

func (JSON) DeepCopyInto Uses

func (j JSON) DeepCopyInto(into *JSON)

DeepCopyInto creates a deep copy of the wrapped JSON value and stores it in into.

type NestedValueValidation Uses

type NestedValueValidation struct {
    ValueValidation

    Items      *NestedValueValidation
    Properties map[string]NestedValueValidation

    // Anything set in the following will make the scheme
    // non-structural, with the exception of these two patterns if
    // x-kubernetes-int-or-string is true:
    //
    // 1) anyOf:
    //    - type: integer
    //    - type: string
    // 2) allOf:
    //    - anyOf:
    //      - type: integer
    //      - type: string
    //    - ... zero or more
    ForbiddenGenerics   Generic
    ForbiddenExtensions Extensions
}

NestedValueValidation contains value validations, items and properties usable when nested under a logical junctor, and catch all structs for generic and vendor extensions schema fields.

func (*NestedValueValidation) DeepCopy Uses

func (in *NestedValueValidation) DeepCopy() *NestedValueValidation

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NestedValueValidation.

func (*NestedValueValidation) DeepCopyInto Uses

func (in *NestedValueValidation) DeepCopyInto(out *NestedValueValidation)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Structural Uses

type Structural struct {
    Items      *Structural
    Properties map[string]Structural

    Generic
    Extensions

    ValueValidation *ValueValidation
}

Structural represents a structural schema.

func NewStructural Uses

func NewStructural(s *apiextensions.JSONSchemaProps) (*Structural, error)

NewStructural converts an OpenAPI v3 schema into a structural schema. A pre-validated JSONSchemaProps will not fail on NewStructural. This means that we require that:

- items is not an array of schemas - the following fields are not set:

- id
- schema
- $ref
- patternProperties
- dependencies
- additionalItems
- definitions.

The follow fields are not preserved: - externalDocs - example.

func (*Structural) DeepCopy Uses

func (in *Structural) DeepCopy() *Structural

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Structural.

func (*Structural) DeepCopyInto Uses

func (in *Structural) DeepCopyInto(out *Structural)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

func (*Structural) StripDefaults Uses

func (s *Structural) StripDefaults() *Structural

StripDefaults returns a copy without defaults.

func (*Structural) StripNullable Uses

func (s *Structural) StripNullable() *Structural

StripNullable returns a copy without nullable.

func (*Structural) StripValueValidations Uses

func (s *Structural) StripValueValidations() *Structural

StripValueValidations returns a copy without value validations.

func (*Structural) ToGoOpenAPI Uses

func (s *Structural) ToGoOpenAPI() *spec.Schema

ToGoOpenAPI converts a structural schema to go-openapi schema. It is faithful and roundtrippable.

func (*Structural) Unfold Uses

func (s *Structural) Unfold() *Structural

Unfold expands vendor extensions of a structural schema. It mutates the receiver.

type StructuralOrBool Uses

type StructuralOrBool struct {
    Structural *Structural
    Bool       bool
}

StructuralOrBool is either a structural schema or a boolean.

func (*StructuralOrBool) DeepCopy Uses

func (in *StructuralOrBool) DeepCopy() *StructuralOrBool

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StructuralOrBool.

func (*StructuralOrBool) DeepCopyInto Uses

func (in *StructuralOrBool) DeepCopyInto(out *StructuralOrBool)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type ValueValidation Uses

type ValueValidation struct {
    Format           string
    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
    AllOf            []NestedValueValidation
    OneOf            []NestedValueValidation
    AnyOf            []NestedValueValidation
    Not              *NestedValueValidation
}

ValueValidation contains all schema fields not contributing to the structure of the schema.

func (*ValueValidation) DeepCopy Uses

func (in *ValueValidation) DeepCopy() *ValueValidation

DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ValueValidation.

func (*ValueValidation) DeepCopyInto Uses

func (in *ValueValidation) DeepCopyInto(out *ValueValidation)

DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.

type Visitor Uses

type Visitor struct {
    // Structural is called on each Structural node in the schema, before recursing into
    // the subtrees. It is allowed to mutate s. Return true if something has been changed.
    // +optional
    Structural func(s *Structural) bool
    // NestedValueValidation is called on each NestedValueValidation node in the schema,
    // before recursing into subtrees. It is allowed to mutate vv. Return true if something
    // has been changed.
    // +optional
    NestedValueValidation func(vv *NestedValueValidation) bool
}

Visitor recursively walks through a structural schema.

func (*Visitor) Visit Uses

func (m *Visitor) Visit(s *Structural)

Visit recursively walks through the structural schema and calls the given callbacks at each node of those types.

Directories

PathSynopsis
defaulting
objectmeta
pruning

Package schema imports 8 packages (graph) and is imported by 10 packages. Updated 2019-11-19. Refresh now. Tools for package owners.