Allow handlers earlier in a request flow to inject a UID for an object

This commit is contained in:
derekwaynecarr
2016-05-07 09:23:15 -04:00
parent 5e16101aab
commit 029acfc8aa
3 changed files with 37 additions and 5 deletions

View File

@@ -22,6 +22,7 @@ import (
"golang.org/x/net/context"
"k8s.io/kubernetes/pkg/auth/user"
"k8s.io/kubernetes/pkg/types"
)
// Context carries values across API boundaries.
@@ -49,11 +50,16 @@ type Context interface {
// The key type is unexported to prevent collisions
type key int
// namespaceKey is the context key for the request namespace.
const namespaceKey key = 0
const (
// namespaceKey is the context key for the request namespace.
namespaceKey key = iota
// userKey is the context key for the request user.
const userKey key = 1
// userKey is the context key for the request user.
userKey
// uidKey is the context key for the uid to assign to an object on create.
uidKey
)
// NewContext instantiates a base context object for request flows.
func NewContext() Context {
@@ -119,3 +125,14 @@ func UserFrom(ctx Context) (user.Info, bool) {
user, ok := ctx.Value(userKey).(user.Info)
return user, ok
}
// WithUID returns a copy of parent in which the uid value is set
func WithUID(parent Context, uid types.UID) Context {
return WithValue(parent, uidKey, uid)
}
// UIDFrom returns the value of the uid key on the ctx
func UIDFrom(ctx Context) (types.UID, bool) {
uid, ok := ctx.Value(uidKey).(types.UID)
return uid, ok
}