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  }