forked from openshift/origin
-
Notifications
You must be signed in to change notification settings - Fork 1
/
client.go
133 lines (111 loc) · 3.97 KB
/
client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package client
import (
restclient "k8s.io/client-go/rest"
authclientv1 "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/authorization/v1"
kcoreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion"
"github.com/openshift/origin/pkg/cmd/util/clientcmd"
imageclientv1 "github.com/openshift/origin/pkg/image/generated/clientset/typed/image/v1"
userclientv1 "github.com/openshift/origin/pkg/user/generated/clientset/typed/user/v1"
)
// RegistryClient provides Origin and Kubernetes clients to Docker Registry.
type RegistryClient interface {
// Client returns the authenticated client to use with the server.
Client() (Interface, error)
// ClientFromToken returns a client based on the user bearer token.
ClientFromToken(token string) (Interface, error)
}
// Interface contains client methods that registry use to communicate with
// Origin or Kubernetes API.
type Interface interface {
ImageSignaturesInterfacer
ImagesInterfacer
ImageStreamImagesNamespacer
ImageStreamMappingsNamespacer
ImageStreamSecretsNamespacer
ImageStreamsNamespacer
ImageStreamTagsNamespacer
LimitRangesGetter
LocalSubjectAccessReviewsNamespacer
SelfSubjectAccessReviewsNamespacer
UsersInterfacer
}
type apiClient struct {
kube kcoreclient.CoreInterface
auth authclientv1.AuthorizationV1Interface
image imageclientv1.ImageV1Interface
user userclientv1.UserV1Interface
}
func newAPIClient(
kc kcoreclient.CoreInterface,
authClient authclientv1.AuthorizationV1Interface,
imageClient imageclientv1.ImageV1Interface,
userClient userclientv1.UserV1Interface,
) Interface {
return &apiClient{
kube: kc,
auth: authClient,
image: imageClient,
user: userClient,
}
}
func (c *apiClient) Users() UserInterface {
return c.user.Users()
}
func (c *apiClient) Images() ImageInterface {
return c.image.Images()
}
func (c *apiClient) ImageSignatures() ImageSignatureInterface {
return c.image.ImageSignatures()
}
func (c *apiClient) ImageStreams(namespace string) ImageStreamInterface {
return c.image.ImageStreams(namespace)
}
func (c *apiClient) ImageStreamImages(namespace string) ImageStreamImageInterface {
return c.image.ImageStreamImages(namespace)
}
func (c *apiClient) ImageStreamMappings(namespace string) ImageStreamMappingInterface {
return c.image.ImageStreamMappings(namespace)
}
func (c *apiClient) ImageStreamTags(namespace string) ImageStreamTagInterface {
return c.image.ImageStreamTags(namespace)
}
func (c *apiClient) ImageStreamSecrets(namespace string) ImageStreamSecretInterface {
return c.image.ImageStreams(namespace)
}
func (c *apiClient) LimitRanges(namespace string) LimitRangeInterface {
return c.kube.LimitRanges(namespace)
}
func (c *apiClient) LocalSubjectAccessReviews(namespace string) LocalSubjectAccessReviewInterface {
return c.auth.LocalSubjectAccessReviews(namespace)
}
func (c *apiClient) SelfSubjectAccessReviews() SelfSubjectAccessReviewInterface {
return c.auth.SelfSubjectAccessReviews()
}
type registryClient struct {
kubeConfig *restclient.Config
}
// NewRegistryClient provides a new registry client.
// TODO: Remove clientcmd dependency and move the parsing of required
// environemtn variable to registry.
func NewRegistryClient(config *clientcmd.Config) RegistryClient {
return ®istryClient{
kubeConfig: config.KubeConfig(),
}
}
// Client returns the authenticated client to use with the server.
func (c *registryClient) Client() (Interface, error) {
return newAPIClient(
kcoreclient.NewForConfigOrDie(c.kubeConfig),
authclientv1.NewForConfigOrDie(c.kubeConfig),
imageclientv1.NewForConfigOrDie(c.kubeConfig),
userclientv1.NewForConfigOrDie(c.kubeConfig),
), nil
}
// ClientFromToken returns the client based on the bearer token.
func (c *registryClient) ClientFromToken(token string) (Interface, error) {
newClient := *c
newKubeconfig := restclient.AnonymousClientConfig(newClient.kubeConfig)
newKubeconfig.BearerToken = token
newClient.kubeConfig = newKubeconfig
return newClient.Client()
}