apiserver: k8s.io/apiserver/pkg/endpoints/request Index | Files

package request

import "k8s.io/apiserver/pkg/endpoints/request"

Package request contains everything around extracting info from a http request object. TODO: this package is temporary. Handlers must move into pkg/apiserver/handlers to avoid dependency cycle


Package Files

context.go doc.go received_time.go requestinfo.go


var NamespaceSubResourcesForTest = sets.NewString(namespaceSubresources.List()...)

NamespaceSubResourcesForTest exports namespaceSubresources for testing in pkg/controlplane/master_test.go, so we never drift

func AuditEventFrom Uses

func AuditEventFrom(ctx context.Context) *audit.Event

AuditEventFrom returns the audit event struct on the ctx

func NamespaceFrom Uses

func NamespaceFrom(ctx context.Context) (string, bool)

NamespaceFrom returns the value of the namespace key on the ctx

func NamespaceValue Uses

func NamespaceValue(ctx context.Context) string

NamespaceValue returns the value of the namespace key on the ctx, or the empty string if none

func NewContext Uses

func NewContext() context.Context

NewContext instantiates a base context object for request flows.

func NewDefaultContext Uses

func NewDefaultContext() context.Context

NewDefaultContext instantiates a base context object for request flows in the default namespace

func ReceivedTimestampFrom Uses

func ReceivedTimestampFrom(ctx context.Context) (time.Time, bool)

ReceivedTimestampFrom returns the value of the ReceivedTimestamp key from the specified context.

func UserFrom Uses

func UserFrom(ctx context.Context) (user.Info, bool)

UserFrom returns the value of the user key on the ctx

func WithAuditEvent Uses

func WithAuditEvent(parent context.Context, ev *audit.Event) context.Context

WithAuditEvent returns set audit event struct.

func WithNamespace Uses

func WithNamespace(parent context.Context, namespace string) context.Context

WithNamespace returns a copy of parent in which the namespace value is set

func WithReceivedTimestamp Uses

func WithReceivedTimestamp(parent context.Context, receivedTimestamp time.Time) context.Context

WithReceivedTimestamp returns a copy of parent context in which the ReceivedTimestamp (the time the request reached the apiserver) is set.

If the specified ReceivedTimestamp is zero, no value is set and the parent context is returned as is.

func WithRequestInfo Uses

func WithRequestInfo(parent context.Context, info *RequestInfo) context.Context

WithRequestInfo returns a copy of parent in which the request info value is set

func WithUser Uses

func WithUser(parent context.Context, user user.Info) context.Context

WithUser returns a copy of parent in which the user value is set

func WithValue Uses

func WithValue(parent context.Context, key interface{}, val interface{}) context.Context

WithValue returns a copy of parent in which the value associated with key is val.

type LongRunningRequestCheck Uses

type LongRunningRequestCheck func(r *http.Request, requestInfo *RequestInfo) bool

LongRunningRequestCheck is a predicate which is true for long-running http requests.

type RequestInfo Uses

type RequestInfo struct {
    // IsResourceRequest indicates whether or not the request is for an API resource or subresource
    IsResourceRequest bool
    // Path is the URL path of the request
    Path string
    // Verb is the kube verb associated with the request for API requests, not the http verb.  This includes things like list and watch.
    // for non-resource requests, this is the lowercase http verb
    Verb string

    APIPrefix  string
    APIGroup   string
    APIVersion string
    Namespace  string
    // Resource is the name of the resource being requested.  This is not the kind.  For example: pods
    Resource string
    // Subresource is the name of the subresource being requested.  This is a different resource, scoped to the parent resource, but it may have a different kind.
    // For instance, /pods has the resource "pods" and the kind "Pod", while /pods/foo/status has the resource "pods", the sub resource "status", and the kind "Pod"
    // (because status operates on pods). The binding resource for a pod though may be /pods/foo/binding, which has resource "pods", subresource "binding", and kind "Binding".
    Subresource string
    // Name is empty for some verbs, but if the request directly indicates a name (not in body content) then this field is filled in.
    Name string
    // Parts are the path parts for the request, always starting with /{resource}/{name}
    Parts []string

RequestInfo holds information parsed from the http.Request

func RequestInfoFrom Uses

func RequestInfoFrom(ctx context.Context) (*RequestInfo, bool)

RequestInfoFrom returns the value of the RequestInfo key on the ctx

type RequestInfoFactory Uses

type RequestInfoFactory struct {
    APIPrefixes          sets.String // without leading and trailing slashes
    GrouplessAPIPrefixes sets.String // without leading and trailing slashes

func (*RequestInfoFactory) NewRequestInfo Uses

func (r *RequestInfoFactory) NewRequestInfo(req *http.Request) (*RequestInfo, error)

TODO write an integration test against the swagger doc to test the RequestInfo and match up behavior to responses NewRequestInfo returns the information from the http request. If error is not nil, RequestInfo holds the information as best it is known before the failure It handles both resource and non-resource requests and fills in all the pertinent information for each. Valid Inputs: Resource paths /apis/{api-group}/{version}/namespaces /api/{version}/namespaces /api/{version}/namespaces/{namespace} /api/{version}/namespaces/{namespace}/{resource} /api/{version}/namespaces/{namespace}/{resource}/{resourceName} /api/{version}/{resource} /api/{version}/{resource}/{resourceName}

Special verbs without subresources: /api/{version}/proxy/{resource}/{resourceName} /api/{version}/proxy/namespaces/{namespace}/{resource}/{resourceName}

Special verbs with subresources: /api/{version}/watch/{resource} /api/{version}/watch/namespaces/{namespace}/{resource}

NonResource paths /apis/{api-group}/{version} /apis/{api-group} /apis /api/{version} /api /healthz /

type RequestInfoResolver Uses

type RequestInfoResolver interface {
    NewRequestInfo(req *http.Request) (*RequestInfo, error)

Package request imports 13 packages (graph) and is imported by 672 packages. Updated 2020-09-25. Refresh now. Tools for package owners.