Skip to content

Commit 5a4444c

Browse files
committed
(feat) create scoped client from bearer token
Add support to spin up scoped client that is bound to a bearer token specified. We do the following to create a scoped client: - Design a client factory that holds on to the default config ( rest.Config ) that is bound to OLM operator. This will used to create new instance(s) of scoped client. - Make an 'anonymous' copy of the default config and use the bearer token specified to create a new scoped client instance.
1 parent 6420b82 commit 5a4444c

File tree

2 files changed

+72
-0
lines changed

2 files changed

+72
-0
lines changed

pkg/lib/operatorclient/client.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,31 @@ func NewClientFromConfig(kubeconfig string, logger *logrus.Logger) ClientInterfa
157157
return &Client{kubernetes.NewForConfigOrDie(config), apiextensions.NewForConfigOrDie(config), apiregistration.NewForConfigOrDie(config)}
158158
}
159159

160+
func NewClientFromRestConfig(config *rest.Config) (client ClientInterface, err error) {
161+
kubernetes, err := kubernetes.NewForConfig(config)
162+
if err != nil {
163+
return
164+
}
165+
166+
apiextensions, err := apiextensions.NewForConfig(config)
167+
if err != nil {
168+
return
169+
}
170+
171+
apiregistration, err := apiregistration.NewForConfig(config)
172+
if err != nil {
173+
return
174+
}
175+
176+
client = &Client{
177+
kubernetes,
178+
apiextensions,
179+
apiregistration,
180+
}
181+
182+
return
183+
}
184+
160185
// NewClient creates a kubernetes client
161186
func NewClient(k8sClient kubernetes.Interface, extclient apiextensions.Interface, regclient apiregistration.Interface) ClientInterface {
162187
return &Client{k8sClient, extclient, regclient}

pkg/lib/scopedclient/clientfactory.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package scopedclient
2+
3+
import (
4+
"k8s.io/client-go/rest"
5+
6+
"github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned"
7+
"github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient"
8+
)
9+
10+
// NewFactory returns a new instance of Factory.
11+
func NewFactory(config *rest.Config) *Factory {
12+
return &Factory{
13+
config: config,
14+
}
15+
}
16+
17+
// Factory holds on to a default config and can create a new client instance(s)
18+
// bound to any bearer token specified.
19+
type Factory struct {
20+
// default config object from which new client instance(s) will be created.
21+
config *rest.Config
22+
}
23+
24+
// NewOperatorClient return a new instance of operator client from the bearer
25+
// token specified.
26+
func (f *Factory) NewOperatorClient(token string) (client operatorclient.ClientInterface, err error) {
27+
scoped := copy(f.config, token)
28+
client, err = operatorclient.NewClientFromRestConfig(scoped)
29+
30+
return
31+
}
32+
33+
// NewKubernetesClient return a new instance of CR client from the bearer
34+
// token specified.
35+
func (f *Factory) NewKubernetesClient(token string) (client versioned.Interface, err error) {
36+
scoped := copy(f.config, token)
37+
client, err = versioned.NewForConfig(scoped)
38+
39+
return
40+
}
41+
42+
func copy(config *rest.Config, token string) *rest.Config {
43+
copied := rest.AnonymousClientConfig(config)
44+
copied.BearerToken = token
45+
46+
return copied
47+
}

0 commit comments

Comments
 (0)