schema

package
v0.31.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 12, 2024 License: Apache-2.0 Imports: 11 Imported by: 49

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func ValidateStructural

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.

func ValidateStructuralWithOptions added in v0.31.0

func ValidateStructuralWithOptions(fldPath *field.Path, s *Structural, opts ValidationOptions) field.ErrorList

Types

type Extensions

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

func (in *Extensions) DeepCopy() *Extensions

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

func (*Extensions) DeepCopyInto

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

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
	Nullable bool
}

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

func (*Generic) DeepCopy

func (in *Generic) DeepCopy() *Generic

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

func (*Generic) DeepCopyInto

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

type JSON struct {
	Object interface{}
}

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

func (JSON) DeepCopy

func (j JSON) DeepCopy() JSON

DeepCopy creates a deep copy of the wrapped JSON value.

func (JSON) DeepCopyInto

func (j JSON) DeepCopyInto(into *JSON)

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

type NestedValueValidation

type NestedValueValidation struct {
	ValueValidation
	ValidationExtensions

	Items                *NestedValueValidation
	Properties           map[string]NestedValueValidation
	AdditionalProperties *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

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

func (*NestedValueValidation) DeepCopyInto

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

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

	Generic
	Extensions
	ValidationExtensions

	ValueValidation *ValueValidation
}

Structural represents a structural schema.

func NewStructural

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

func (in *Structural) DeepCopy() *Structural

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

func (*Structural) DeepCopyInto

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) StripNullable added in v0.17.0

func (s *Structural) StripNullable() *Structural

StripNullable returns a copy without nullable.

func (*Structural) StripValueValidations added in v0.16.4

func (s *Structural) StripValueValidations() *Structural

StripValueValidations returns a copy without value validations.

func (*Structural) ToKubeOpenAPI added in v0.20.0

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

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

func (*Structural) Unfold

func (s *Structural) Unfold() *Structural

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

type StructuralOrBool

type StructuralOrBool struct {
	Structural *Structural
	Bool       bool
}

StructuralOrBool is either a structural schema or a boolean.

func (*StructuralOrBool) DeepCopy

func (in *StructuralOrBool) DeepCopy() *StructuralOrBool

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

func (*StructuralOrBool) DeepCopyInto

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

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

type UnknownFieldPathOptions added in v0.25.0

type UnknownFieldPathOptions struct {
	// TrackUnknownFieldPaths determines whether or not unknown field
	// paths should be stored or not.
	TrackUnknownFieldPaths bool
	// ParentPath builds the path to unknown fields as the object
	// is recursively traversed.
	ParentPath []string
	// UnknownFieldPaths is the list of all unknown fields identified.
	UnknownFieldPaths []string
}

UnknownFieldPathOptions allow for tracking paths to unknown fields.

func (*UnknownFieldPathOptions) AppendIndex added in v0.25.0

func (o *UnknownFieldPathOptions) AppendIndex(index int)

AppendIndex adds an index to the most recent field of the current parent path, if TrackUnknownFieldPaths is true.

func (*UnknownFieldPathOptions) AppendKey added in v0.25.0

func (o *UnknownFieldPathOptions) AppendKey(key string)

AppendKey adds a key (i.e. field) to the current parent path, if TrackUnknownFieldPaths is true.

func (*UnknownFieldPathOptions) RecordUnknownField added in v0.25.0

func (o *UnknownFieldPathOptions) RecordUnknownField(field string)

RecordUnknownFields adds a path to an unknown field to the record of UnknownFieldPaths, if TrackUnknownFieldPaths is true

type ValidationExtensions added in v0.31.0

type ValidationExtensions struct {
	// x-kubernetes-validations describes a list of validation rules for expression validation.
	// Use the v1 struct since this gets serialized as an extension.
	XValidations apiextensionsv1.ValidationRules
}

ValidationExtensions contains the Kubernetes OpenAPI v3 extensions that are used for validation rather than structure.

func (*ValidationExtensions) DeepCopy added in v0.31.0

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

func (*ValidationExtensions) DeepCopyInto added in v0.31.0

func (in *ValidationExtensions) DeepCopyInto(out *ValidationExtensions)

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

type ValidationOptions added in v0.31.0

type ValidationOptions struct {
	// AllowNestedAdditionalProperties allows additionalProperties to be specified in
	// nested contexts (allOf, anyOf, oneOf, not).
	AllowNestedAdditionalProperties bool

	// AllowNestedXValidations allows x-kubernetes-validations to be specified in
	// nested contexts (allOf, anyOf, oneOf, not).
	AllowNestedXValidations bool

	// AllowValidationPropertiesWithAdditionalProperties allows
	// value validations on specific properties that are structually
	// defined by additionalProperties. i.e. additionalProperties in main structural
	// schema, but properties within an allOf.
	AllowValidationPropertiesWithAdditionalProperties bool
}

type ValueValidation

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

func (in *ValueValidation) DeepCopy() *ValueValidation

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

func (*ValueValidation) DeepCopyInto

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

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

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

Path Synopsis
cel

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL