Skip to content

Commit

Permalink
client-go: factor the dynamic client similarly to others
Browse files Browse the repository at this point in the history
All other clients:

 - expose a New() method that takes a rest.Interface
 - expose their RESTClient()
 - return pointers to the type, not instances of an interface that the
   type implements

For code that is generic over all Kubernetes clients, and for general
developer experience, it's best to make sure that this client adheres to
these common practices.

Signed-off-by: Steve Kuznetsov <skuznets@redhat.com>
  • Loading branch information
stevekuznetsov committed Sep 28, 2022
1 parent 827c77a commit 74af6f1
Showing 1 changed file with 15 additions and 10 deletions.
25 changes: 15 additions & 10 deletions staging/src/k8s.io/client-go/dynamic/simple.go
Expand Up @@ -31,11 +31,11 @@ import (
"k8s.io/client-go/rest"
)

type dynamicClient struct {
client *rest.RESTClient
type DynamicClient struct {
client rest.Interface
}

var _ Interface = &dynamicClient{}
var _ Interface = &DynamicClient{}

// ConfigFor returns a copy of the provided config with the
// appropriate dynamic client defaults set.
Expand All @@ -50,9 +50,14 @@ func ConfigFor(inConfig *rest.Config) *rest.Config {
return config
}

// NewForConfigOrDie creates a new Interface for the given config and
// New creates a new DynamicClient for the given RESTClient.
func New(c rest.Interface) *DynamicClient {
return &DynamicClient{client: c}
}

// NewForConfigOrDie creates a new DynamicClient for the given config and
// panics if there is an error in the config.
func NewForConfigOrDie(c *rest.Config) Interface {
func NewForConfigOrDie(c *rest.Config) *DynamicClient {
ret, err := NewForConfig(c)
if err != nil {
panic(err)
Expand All @@ -63,7 +68,7 @@ func NewForConfigOrDie(c *rest.Config) Interface {
// NewForConfig creates a new dynamic client or returns an error.
// NewForConfig is equivalent to NewForConfigAndClient(c, httpClient),
// where httpClient was generated with rest.HTTPClientFor(c).
func NewForConfig(inConfig *rest.Config) (Interface, error) {
func NewForConfig(inConfig *rest.Config) (*DynamicClient, error) {
config := ConfigFor(inConfig)

httpClient, err := rest.HTTPClientFor(config)
Expand All @@ -75,7 +80,7 @@ func NewForConfig(inConfig *rest.Config) (Interface, error) {

// NewForConfigAndClient creates a new dynamic client for the given config and http client.
// Note the http client provided takes precedence over the configured transport values.
func NewForConfigAndClient(inConfig *rest.Config, h *http.Client) (Interface, error) {
func NewForConfigAndClient(inConfig *rest.Config, h *http.Client) (*DynamicClient, error) {
config := ConfigFor(inConfig)
// for serializing the options
config.GroupVersion = &schema.GroupVersion{}
Expand All @@ -85,16 +90,16 @@ func NewForConfigAndClient(inConfig *rest.Config, h *http.Client) (Interface, er
if err != nil {
return nil, err
}
return &dynamicClient{client: restClient}, nil
return &DynamicClient{client: restClient}, nil
}

type dynamicResourceClient struct {
client *dynamicClient
client *DynamicClient
namespace string
resource schema.GroupVersionResource
}

func (c *dynamicClient) Resource(resource schema.GroupVersionResource) NamespaceableResourceInterface {
func (c *DynamicClient) Resource(resource schema.GroupVersionResource) NamespaceableResourceInterface {
return &dynamicResourceClient{client: c, resource: resource}
}

Expand Down

0 comments on commit 74af6f1

Please sign in to comment.