• Kubernetes Submit Queue's avatar
    Merge pull request #62913 from deads2k/client-04-dynamic · 5d7569d6
    Kubernetes Submit Queue authored
    Automatic merge from submit-queue (batch tested with PRs 63137, 62913). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>.
    
    make a simple dynamic client that is easy to use
    
    The dynamic client has annoyed me for the last time!  The existing one takes arguments at odd levels, requires lots of information to instantiate, does some weird pool thing, and uses unusual types.  This creates an interface like this:
    
    ```go
    
    type DynamicInterface interface {
    	ClusterResource(resource schema.GroupVersionResource) DynamicResourceInterface
    	NamespacedResource(resource schema.GroupVersionResource, namespace string) DynamicResourceInterface
    }
    
    type DynamicResourceInterface interface {
    	Create(obj *unstructured.Unstructured) (*unstructured.Unstructured, error)
    	Update(obj *unstructured.Unstructured) (*unstructured.Unstructured, error)
    	UpdateStatus(obj *unstructured.Unstructured) (*unstructured.Unstructured, error)
    	Delete(name string, options *metav1.DeleteOptions) error
    	DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error
    	Get(name string, options metav1.GetOptions) (*unstructured.Unstructured, error)
    	List(opts metav1.ListOptions) (*unstructured.UnstructuredList, error)
    	Watch(opts metav1.ListOptions) (watch.Interface, error)
    	Patch(name string, pt types.PatchType, data []byte, subresources ...string) (*unstructured.Unstructured, error)
    }
    ```
    
    You create it from just a `rest.Config`, no mapper, no path resolving func, no trying to set up codecs ahead of time, no unnecessary pool.  It just works.
    
    I updated the namespace controller to use it and I updated the existing dynamic client to leverage it so that I get all their tests for "free".
    
    @kubernetes/sig-api-machinery-pr-reviews 
    @liggitt @smarterclayton @bparees @sttts @ironcladlou I know each of us has struggled with the dynamic client in our time.
    @lavalamp @caesarxuchao This is vastly simplifying.  I'm eager to drop the old `ClientPool`.  client-go will technically have another incompatible semver this release.  I'm up for changing it in tree.
    
    
    ```release-note
    client-go developers: the new dynamic client is easier to use and the old is deprecated, you must switch.
    ```
    5d7569d6
Name
Last commit
Last update
..
src/k8s.io Loading commit data...
BUILD Loading commit data...
OWNERS Loading commit data...
README.md Loading commit data...