...
1
16
17 package storage
18
19 import (
20 "time"
21
22 "k8s.io/apimachinery/pkg/runtime"
23 "k8s.io/apimachinery/pkg/util/sets"
24 "k8s.io/apiserver/pkg/authentication/authenticator"
25 "k8s.io/apiserver/pkg/registry/generic"
26 genericregistry "k8s.io/apiserver/pkg/registry/generic/registry"
27 "k8s.io/apiserver/pkg/registry/rest"
28 api "k8s.io/kubernetes/pkg/apis/core"
29 "k8s.io/kubernetes/pkg/printers"
30 printersinternal "k8s.io/kubernetes/pkg/printers/internalversion"
31 printerstorage "k8s.io/kubernetes/pkg/printers/storage"
32 "k8s.io/kubernetes/pkg/registry/core/serviceaccount"
33 token "k8s.io/kubernetes/pkg/serviceaccount"
34 )
35
36 type REST struct {
37 *genericregistry.Store
38 Token *TokenREST
39 }
40
41
42 func NewREST(optsGetter generic.RESTOptionsGetter, issuer token.TokenGenerator, auds authenticator.Audiences, max time.Duration, podStorage, secretStorage, nodeStorage rest.Getter, extendExpiration bool) (*REST, error) {
43 store := &genericregistry.Store{
44 NewFunc: func() runtime.Object { return &api.ServiceAccount{} },
45 NewListFunc: func() runtime.Object { return &api.ServiceAccountList{} },
46 DefaultQualifiedResource: api.Resource("serviceaccounts"),
47 SingularQualifiedResource: api.Resource("serviceaccount"),
48
49 CreateStrategy: serviceaccount.Strategy,
50 UpdateStrategy: serviceaccount.Strategy,
51 DeleteStrategy: serviceaccount.Strategy,
52 ReturnDeletedObject: true,
53
54 TableConvertor: printerstorage.TableConvertor{TableGenerator: printers.NewTableGenerator().With(printersinternal.AddHandlers)},
55 }
56 options := &generic.StoreOptions{RESTOptions: optsGetter}
57 if err := store.CompleteWithOptions(options); err != nil {
58 return nil, err
59 }
60
61 var trest *TokenREST
62 if issuer != nil && podStorage != nil && secretStorage != nil {
63 trest = &TokenREST{
64 svcaccts: store,
65 pods: podStorage,
66 secrets: secretStorage,
67 nodes: nodeStorage,
68 issuer: issuer,
69 auds: auds,
70 audsSet: sets.NewString(auds...),
71 maxExpirationSeconds: int64(max.Seconds()),
72 extendExpiration: extendExpiration,
73 }
74 }
75
76 return &REST{
77 Store: store,
78 Token: trest,
79 }, nil
80 }
81
82
83 var _ rest.ShortNamesProvider = &REST{}
84
85
86 func (r *REST) ShortNames() []string {
87 return []string{"sa"}
88 }
89
View as plain text