github.com/operator-framework/operator-lifecycle-manager@v0.30.0/pkg/lib/clients/factory.go (about) 1 package clients 2 3 import ( 4 "k8s.io/client-go/dynamic" 5 "k8s.io/client-go/rest" 6 7 "github.com/operator-framework/operator-lifecycle-manager/pkg/api/client/clientset/versioned" 8 "github.com/operator-framework/operator-lifecycle-manager/pkg/lib/operatorclient" 9 ) 10 11 type ConfigTransformer interface { 12 // Applies a transformation to the provided Config and returns 13 // the resulting Config. The provided Config is safe to return 14 // directly (i.e., without making a copy) and will never be 15 // nil. Implementations must never return nil. 16 TransformConfig(config *rest.Config) *rest.Config 17 } 18 19 type ConfigTransformerFunc func(config *rest.Config) *rest.Config 20 21 func (t ConfigTransformerFunc) TransformConfig(config *rest.Config) *rest.Config { 22 return t(config) 23 } 24 25 type Factory interface { 26 WithConfigTransformer(ConfigTransformer) Factory 27 NewOperatorClient() (operatorclient.ClientInterface, error) 28 NewKubernetesClient() (versioned.Interface, error) 29 NewDynamicClient() (dynamic.Interface, error) 30 } 31 32 type factory struct { 33 config *rest.Config 34 } 35 36 func NewFactory(config *rest.Config) Factory { 37 return &factory{config: config} 38 } 39 40 // WithConfigTransformer returns a new factory that produces clients 41 // using a copy of the receiver's REST config that has been 42 // transformed by the given ConfigTransformer. 43 func (f *factory) WithConfigTransformer(t ConfigTransformer) Factory { 44 return &factory{config: t.TransformConfig(rest.CopyConfig(f.config))} 45 } 46 47 func (f *factory) NewOperatorClient() (operatorclient.ClientInterface, error) { 48 return operatorclient.NewClientFromRestConfig(f.config) 49 } 50 51 func (f *factory) NewKubernetesClient() (versioned.Interface, error) { 52 return versioned.NewForConfig(f.config) 53 } 54 55 func (f *factory) NewDynamicClient() (dynamic.Interface, error) { 56 return dynamic.NewForConfig(f.config) 57 }