query

package
v1.18.0-beta34 Latest Latest
Warning

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

Go to latest
Published: Nov 13, 2024 License: Apache-2.0 Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const (
	HttpRouteTargetField    = "http-route-target"
	TcpRouteTargetField     = "tcp-route-target"
	ReferenceGrantFromField = "ref-grant-from"
)

Variables

View Source
var (
	ErrMissingReferenceGrant      = fmt.Errorf("missing reference grant")
	ErrUnknownBackendKind         = fmt.Errorf("unknown backend kind")
	ErrNoMatchingListenerHostname = fmt.Errorf("no matching listener hostname")
	ErrNoMatchingParent           = fmt.Errorf("no matching parent")
	ErrNotAllowedByListeners      = fmt.Errorf("not allowed by listeners")
	ErrLocalObjRefMissingKind     = fmt.Errorf("localObjRef provided with empty kind")
	ErrCyclicReference            = fmt.Errorf("cyclic reference detected while evaluating delegated routes")
	ErrUnresolvedReference        = fmt.Errorf("unresolved reference")
)

Functions

func AllNamespace

func AllNamespace() func(string) bool

func IndexerByObjType

func IndexerByObjType(obj client.Object) []string

IndexerByObjType indexes objects based on the provided object type. The following object types are supported:

  • HTTPRoute
  • TCPRoute
  • ReferenceGrant

func IterateIndices

func IterateIndices(f func(client.Object, string, client.IndexerFunc) error) error

IterateIndices calls the provided function for each indexable object with the appropriate indexer function.

func ProcessBackendError

func ProcessBackendError(err error, reporter reports.ParentRefReporter)

func ProcessBackendRef

func ProcessBackendRef(obj client.Object, err error, reporter reports.ParentRefReporter, backendRef gwv1.BackendObjectReference) *string

ProcessBackendRef is meant to take the result of a call to `GetBackendForRef` as well as a reporter and the original ref. The return value is a pointer to a string which is the cluster_name of the upstream that the ref resolved to. This function will return nil if the ref is not valid. This function will also set the appropriate condition on the parent via the reporter.

func ReferenceAllowed

func ReferenceAllowed(ctx context.Context, fromgk metav1.GroupKind, fromns string, togk metav1.GroupKind, toname string, grantsInToNs []apiv1beta1.ReferenceGrant) bool

func SameNamespace

func SameNamespace(ns string) func(string) bool

Types

type BackendMap

type BackendMap[T any] struct {
	// contains filtered or unexported fields
}

BackendMap is a generic type used to manage mappings of backends for Gateway API configurations. It's designed to store and manage backend references, like services, and to associate those references with either data (of a generic type T) or errors.

func NewBackendMap

func NewBackendMap[T any]() BackendMap[T]

func (BackendMap[T]) Add

func (bm BackendMap[T]) Add(backendRef gwv1.BackendObjectReference, value T)

func (BackendMap[T]) AddError

func (bm BackendMap[T]) AddError(backendRef gwv1.BackendObjectReference, err error)

type BackendRefResolver

type BackendRefResolver interface {
	// GetBackendForRef resolves a custom reference. When the bool return is false,
	// indicates that the resolver is not responsible for the given ref.
	GetBackendForRef(ctx context.Context, obj From, backend *apiv1.BackendObjectReference) (client.Object, error, bool)
}

BackendRefResolver allows resolution of backendRefs with a custom format.

type Error

type Error struct {
	Reason apiv1.RouteConditionReason
	E      error
}

func (*Error) Error

func (e *Error) Error() string

Error implements error.

func (*Error) Unwrap

func (e *Error) Unwrap() error

type From

type From interface {
	GroupKind() (metav1.GroupKind, error)
	Namespace() string
}

type FromGkNs

type FromGkNs struct {
	Gk metav1.GroupKind
	Ns string
}

TODO(Law): remove this type entirely?

func (FromGkNs) GroupKind

func (f FromGkNs) GroupKind() (metav1.GroupKind, error)

func (FromGkNs) Namespace

func (f FromGkNs) Namespace() string

type FromObject

type FromObject struct {
	client.Object
	Scheme *runtime.Scheme
}

func (FromObject) GroupKind

func (f FromObject) GroupKind() (metav1.GroupKind, error)

func (FromObject) Namespace

func (f FromObject) Namespace() string

type GatewayQueries

type GatewayQueries interface {
	ObjToFrom(obj client.Object) From

	// Given a backendRef that resides in namespace obj, return the service that backs it.
	// This will error with `ErrMissingReferenceGrant` if there is no reference grant allowing the reference
	// return value depends on the group/kind in the backendRef.
	GetBackendForRef(ctx context.Context, obj From, backendRef *apiv1.BackendObjectReference) (client.Object, error)

	GetSecretForRef(ctx context.Context, obj From, secretRef apiv1.SecretObjectReference) (client.Object, error)

	GetLocalObjRef(ctx context.Context, from From, localObjRef apiv1.LocalObjectReference) (client.Object, error)

	// GetRoutesForGateway finds the top level xRoutes attached to the provided Gateway
	GetRoutesForGateway(ctx context.Context, gw *apiv1.Gateway) (*RoutesForGwResult, error)
	// GetRouteChain resolves backends and delegated routes for a the provided xRoute object
	GetRouteChain(ctx context.Context, obj client.Object, hostnames []string, parentRef apiv1.ParentReference) *RouteInfo
}

func NewData

func NewData(
	c client.Client,
	scheme *runtime.Scheme,
	opts ...Option,
) GatewayQueries

type GroupKindNs

type GroupKindNs struct {
	// contains filtered or unexported fields
}

func NewGroupKindNs

func NewGroupKindNs(gk metav1.GroupKind, ns string) *GroupKindNs

func (*GroupKindNs) GroupKind

func (g *GroupKindNs) GroupKind() (metav1.GroupKind, error)

func (*GroupKindNs) Namespace

func (g *GroupKindNs) Namespace() string

type ListenerResult

type ListenerResult struct {
	Error  error
	Routes []*RouteInfo
}

type Namespaced

type Namespaced interface {
	GetName() string
	GetNamespace() string
}

type Option

type Option func(*options)

func WithBackendRefResolvers

func WithBackendRefResolvers(
	customBackendResolvers ...BackendRefResolver,
) Option

type RouteError

type RouteError struct {
	Route     client.Object
	ParentRef apiv1.ParentReference
	Error     Error
}

type RouteInfo

type RouteInfo struct {
	// Object is the generic route object which could be HTTPRoute, TCPRoute, etc.
	Object client.Object

	// ParentRef points to the Gateway (and optionally Listener) or HTTPRoute.
	ParentRef gwv1.ParentReference

	// hostnameOverrides can replace the HTTPRoute hostnames with those that intersect
	// the attached listener's hostname(s).
	HostnameOverrides []string

	// Backends are pre-resolved here. This list will not contain delegates.
	// Map values are either client.Object or error (errors can be passed to ProcessBackendRef).
	// TODO should we ProcessBackendRef early and put cluster names here?)
	Backends BackendMap[client.Object]

	// Children contains all delegate HTTPRoutes referenced in any rule of this
	// HTTPRoute, keyed by the backend ref for easy lookup.
	// This tree structure can have cyclic references. Check them when recursing through the tree.
	Children BackendMap[[]*RouteInfo]
}

RouteInfo contains pre-resolved backends (Services, Upstreams and delegated xRoutes) This allows all querying to happen upfront, and detailed logic for delegation to happen as part of translation.

func (*RouteInfo) Clone

func (r *RouteInfo) Clone() *RouteInfo

Clone creates a deep copy of the RouteInfo object.

func (*RouteInfo) GetBackendForRef

func (r *RouteInfo) GetBackendForRef(backendRef gwv1.BackendObjectReference) (client.Object, error)

GetBackendForRef fetches a backend for a given BackendObjectReference.

func (*RouteInfo) GetChildrenForRef

func (r *RouteInfo) GetChildrenForRef(backendRef gwv1.BackendObjectReference) ([]*RouteInfo, error)

GetChildrenForRef fetches child routes for a given BackendObjectReference.

func (RouteInfo) GetKind

func (r RouteInfo) GetKind() string

GetKind returns the kind of the route.

func (RouteInfo) GetName

func (r RouteInfo) GetName() string

GetName returns the name of the route.

func (RouteInfo) GetNamespace

func (r RouteInfo) GetNamespace() string

GetNamespace returns the namespace of the route.

func (*RouteInfo) Hostnames

func (r *RouteInfo) Hostnames() []string

Hostnames returns the hostname overrides if they exist, otherwise it returns the hostnames specified in the HTTPRoute.

func (*RouteInfo) UniqueRouteName

func (r *RouteInfo) UniqueRouteName(ruleIdx, matchIdx int) string

UniqueRouteName returns a unique name for the route based on the route kind, name, namespace, and the given indexes.

type RoutesForGwResult

type RoutesForGwResult struct {
	// key is listener name
	ListenerResults map[string]*ListenerResult
	RouteErrors     []*RouteError
}

func NewRoutesForGwResult

func NewRoutesForGwResult() *RoutesForGwResult

NewRoutesForGwResult creates and returns a new RoutesForGwResult with initialized fields.

Jump to

Keyboard shortcuts

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