• 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
..
bootstrap Loading commit data...
certificates Loading commit data...
cloud Loading commit data...
clusterroleaggregation Loading commit data...
cronjob Loading commit data...
daemon Loading commit data...
deployment Loading commit data...
disruption Loading commit data...
endpoint Loading commit data...
garbagecollector Loading commit data...
history Loading commit data...
job Loading commit data...
namespace Loading commit data...
nodeipam Loading commit data...
nodelifecycle Loading commit data...
podautoscaler Loading commit data...
podgc Loading commit data...
replicaset Loading commit data...
replication Loading commit data...
resourcequota Loading commit data...
route Loading commit data...
service Loading commit data...
serviceaccount Loading commit data...
statefulset Loading commit data...
testutil Loading commit data...
ttl Loading commit data...
util/node Loading commit data...
volume Loading commit data...
.import-restrictions Loading commit data...
BUILD Loading commit data...
OWNERS Loading commit data...
client_builder.go Loading commit data...
controller_ref_manager.go Loading commit data...
controller_ref_manager_test.go Loading commit data...
controller_utils.go Loading commit data...
controller_utils_test.go Loading commit data...
doc.go Loading commit data...
lookup_cache.go Loading commit data...