Documentation

Overview

    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

    Index

    Constants

    This section is empty.

    Variables

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

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

      Functions

      func AuditEventFrom

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

        AuditEventFrom returns the audit event struct on the ctx

        func NamespaceFrom

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

          NamespaceFrom returns the value of the namespace key on the ctx

          func NamespaceValue

          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

            func NewContext() context.Context

              NewContext instantiates a base context object for request flows.

              func NewDefaultContext

              func NewDefaultContext() context.Context

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

                func UserFrom

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

                  UserFrom returns the value of the user key on the ctx

                  func WithAuditEvent

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

                    WithAuditEvent returns set audit event struct.

                    func WithNamespace

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

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

                      func WithRequestInfo

                      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

                        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

                          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.

                            Types

                            type LongRunningRequestCheck

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

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

                              type RequestInfo

                              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

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

                                  RequestInfoFrom returns the value of the RequestInfo key on the ctx

                                  type RequestInfoFactory

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

                                  func (*RequestInfoFactory) NewRequestInfo

                                  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

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