mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	make dynamic client slightly easier to use
This commit is contained in:
		@@ -342,7 +342,7 @@ func (d *namespacedResourcesDeleter) deleteCollection(gvr schema.GroupVersionRes
 | 
				
			|||||||
	// namespace itself.
 | 
						// namespace itself.
 | 
				
			||||||
	background := metav1.DeletePropagationBackground
 | 
						background := metav1.DeletePropagationBackground
 | 
				
			||||||
	opts := &metav1.DeleteOptions{PropagationPolicy: &background}
 | 
						opts := &metav1.DeleteOptions{PropagationPolicy: &background}
 | 
				
			||||||
	err := d.dynamicClient.NamespacedResource(gvr, namespace).DeleteCollection(opts, metav1.ListOptions{})
 | 
						err := d.dynamicClient.Resource(gvr).Namespace(namespace).DeleteCollection(opts, metav1.ListOptions{})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if err == nil {
 | 
						if err == nil {
 | 
				
			||||||
		return true, nil
 | 
							return true, nil
 | 
				
			||||||
@@ -378,7 +378,7 @@ func (d *namespacedResourcesDeleter) listCollection(gvr schema.GroupVersionResou
 | 
				
			|||||||
		return nil, false, nil
 | 
							return nil, false, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	unstructuredList, err := d.dynamicClient.NamespacedResource(gvr, namespace).List(metav1.ListOptions{IncludeUninitialized: true})
 | 
						unstructuredList, err := d.dynamicClient.Resource(gvr).Namespace(namespace).List(metav1.ListOptions{IncludeUninitialized: true})
 | 
				
			||||||
	if err == nil {
 | 
						if err == nil {
 | 
				
			||||||
		return unstructuredList, true, nil
 | 
							return unstructuredList, true, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -412,7 +412,7 @@ func (d *namespacedResourcesDeleter) deleteEachItem(gvr schema.GroupVersionResou
 | 
				
			|||||||
	for _, item := range unstructuredList.Items {
 | 
						for _, item := range unstructuredList.Items {
 | 
				
			||||||
		background := metav1.DeletePropagationBackground
 | 
							background := metav1.DeletePropagationBackground
 | 
				
			||||||
		opts := &metav1.DeleteOptions{PropagationPolicy: &background}
 | 
							opts := &metav1.DeleteOptions{PropagationPolicy: &background}
 | 
				
			||||||
		if err = d.dynamicClient.NamespacedResource(gvr, namespace).Delete(item.GetName(), opts); err != nil && !errors.IsNotFound(err) && !errors.IsMethodNotSupported(err) {
 | 
							if err = d.dynamicClient.Resource(gvr).Namespace(namespace).Delete(item.GetName(), opts); err != nil && !errors.IsNotFound(err) && !errors.IsMethodNotSupported(err) {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -72,9 +72,9 @@ func NewNamespacedCustomResourceClient(ns string, client dynamic.DynamicInterfac
 | 
				
			|||||||
	gvr := schema.GroupVersionResource{Group: crd.Spec.Group, Version: crd.Spec.Version, Resource: crd.Spec.Names.Plural}
 | 
						gvr := schema.GroupVersionResource{Group: crd.Spec.Group, Version: crd.Spec.Version, Resource: crd.Spec.Names.Plural}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if crd.Spec.Scope != apiextensionsv1beta1.ClusterScoped {
 | 
						if crd.Spec.Scope != apiextensionsv1beta1.ClusterScoped {
 | 
				
			||||||
		return client.NamespacedResource(gvr, ns)
 | 
							return client.Resource(gvr).Namespace(ns)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return client.ClusterResource(gvr)
 | 
						return client.Resource(gvr)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func NewNamespacedCustomResourceStatusClient(ns string, client dynamic.DynamicInterface, crd *apiextensionsv1beta1.CustomResourceDefinition) dynamic.DynamicResourceInterface {
 | 
					func NewNamespacedCustomResourceStatusClient(ns string, client dynamic.DynamicInterface, crd *apiextensionsv1beta1.CustomResourceDefinition) dynamic.DynamicResourceInterface {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -217,9 +217,9 @@ func checkForWatchCachePrimed(crd *apiextensionsv1beta1.CustomResourceDefinition
 | 
				
			|||||||
	gvr := schema.GroupVersionResource{Group: crd.Spec.Group, Version: crd.Spec.Version, Resource: crd.Spec.Names.Plural}
 | 
						gvr := schema.GroupVersionResource{Group: crd.Spec.Group, Version: crd.Spec.Version, Resource: crd.Spec.Names.Plural}
 | 
				
			||||||
	var resourceClient dynamic.DynamicResourceInterface
 | 
						var resourceClient dynamic.DynamicResourceInterface
 | 
				
			||||||
	if crd.Spec.Scope != apiextensionsv1beta1.ClusterScoped {
 | 
						if crd.Spec.Scope != apiextensionsv1beta1.ClusterScoped {
 | 
				
			||||||
		resourceClient = dynamicClientSet.NamespacedResource(gvr, ns)
 | 
							resourceClient = dynamicClientSet.Resource(gvr).Namespace(ns)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		resourceClient = dynamicClientSet.ClusterResource(gvr)
 | 
							resourceClient = dynamicClientSet.Resource(gvr)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	initialList, err := resourceClient.List(metav1.ListOptions{})
 | 
						initialList, err := resourceClient.List(metav1.ListOptions{})
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,8 +32,7 @@ import (
 | 
				
			|||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type DynamicInterface interface {
 | 
					type DynamicInterface interface {
 | 
				
			||||||
	ClusterResource(resource schema.GroupVersionResource) DynamicResourceInterface
 | 
						Resource(resource schema.GroupVersionResource) NamespaceableDynamicResourceInterface
 | 
				
			||||||
	NamespacedResource(resource schema.GroupVersionResource, namespace string) DynamicResourceInterface
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Deprecated, this isn't how we want to do it
 | 
						// Deprecated, this isn't how we want to do it
 | 
				
			||||||
	ClusterSubresource(resource schema.GroupVersionResource, subresource string) DynamicResourceInterface
 | 
						ClusterSubresource(resource schema.GroupVersionResource, subresource string) DynamicResourceInterface
 | 
				
			||||||
@@ -53,6 +52,11 @@ type DynamicResourceInterface interface {
 | 
				
			|||||||
	Patch(name string, pt types.PatchType, data []byte, subresources ...string) (*unstructured.Unstructured, error)
 | 
						Patch(name string, pt types.PatchType, data []byte, subresources ...string) (*unstructured.Unstructured, error)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type NamespaceableDynamicResourceInterface interface {
 | 
				
			||||||
 | 
						Namespace(string) DynamicResourceInterface
 | 
				
			||||||
 | 
						DynamicResourceInterface
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type dynamicClient struct {
 | 
					type dynamicClient struct {
 | 
				
			||||||
	client *rest.RESTClient
 | 
						client *rest.RESTClient
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -86,12 +90,9 @@ type dynamicResourceClient struct {
 | 
				
			|||||||
	subresource string
 | 
						subresource string
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *dynamicClient) ClusterResource(resource schema.GroupVersionResource) DynamicResourceInterface {
 | 
					func (c *dynamicClient) Resource(resource schema.GroupVersionResource) NamespaceableDynamicResourceInterface {
 | 
				
			||||||
	return &dynamicResourceClient{client: c, resource: resource}
 | 
						return &dynamicResourceClient{client: c, resource: resource}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
func (c *dynamicClient) NamespacedResource(resource schema.GroupVersionResource, namespace string) DynamicResourceInterface {
 | 
					 | 
				
			||||||
	return &dynamicResourceClient{client: c, resource: resource, namespace: namespace}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *dynamicClient) ClusterSubresource(resource schema.GroupVersionResource, subresource string) DynamicResourceInterface {
 | 
					func (c *dynamicClient) ClusterSubresource(resource schema.GroupVersionResource, subresource string) DynamicResourceInterface {
 | 
				
			||||||
	return &dynamicResourceClient{client: c, resource: resource, subresource: subresource}
 | 
						return &dynamicResourceClient{client: c, resource: resource, subresource: subresource}
 | 
				
			||||||
@@ -100,6 +101,12 @@ func (c *dynamicClient) NamespacedSubresource(resource schema.GroupVersionResour
 | 
				
			|||||||
	return &dynamicResourceClient{client: c, resource: resource, namespace: namespace, subresource: subresource}
 | 
						return &dynamicResourceClient{client: c, resource: resource, namespace: namespace, subresource: subresource}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (c *dynamicResourceClient) Namespace(ns string) DynamicResourceInterface {
 | 
				
			||||||
 | 
						ret := *c
 | 
				
			||||||
 | 
						ret.namespace = ns
 | 
				
			||||||
 | 
						return &ret
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *dynamicResourceClient) Create(obj *unstructured.Unstructured) (*unstructured.Unstructured, error) {
 | 
					func (c *dynamicResourceClient) Create(obj *unstructured.Unstructured) (*unstructured.Unstructured, error) {
 | 
				
			||||||
	if len(c.subresource) > 0 {
 | 
						if len(c.subresource) > 0 {
 | 
				
			||||||
		return nil, fmt.Errorf("create not supported for subresources")
 | 
							return nil, fmt.Errorf("create not supported for subresources")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -391,7 +391,7 @@ func TestSampleAPIServer(f *framework.Framework, image string) {
 | 
				
			|||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		framework.Failf("could not find group version resource for dynamic client and wardle/flunders.")
 | 
							framework.Failf("could not find group version resource for dynamic client and wardle/flunders.")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	dynamicClient := f.DynamicClient.NamespacedResource(gvr, namespace)
 | 
						dynamicClient := f.DynamicClient.Resource(gvr).Namespace(namespace)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// kubectl create -f flunders-1.yaml
 | 
						// kubectl create -f flunders-1.yaml
 | 
				
			||||||
	// Request Body: {"apiVersion":"wardle.k8s.io/v1alpha1","kind":"Flunder","metadata":{"labels":{"sample-label":"true"},"name":"test-flunder","namespace":"default"}}
 | 
						// Request Body: {"apiVersion":"wardle.k8s.io/v1alpha1","kind":"Flunder","metadata":{"labels":{"sample-label":"true"},"name":"test-flunder","namespace":"default"}}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -158,9 +158,9 @@ func newNamespacedCustomResourceClient(ns string, client dynamic.DynamicInterfac
 | 
				
			|||||||
	gvr := schema.GroupVersionResource{Group: crd.Spec.Group, Version: crd.Spec.Version, Resource: crd.Spec.Names.Plural}
 | 
						gvr := schema.GroupVersionResource{Group: crd.Spec.Group, Version: crd.Spec.Version, Resource: crd.Spec.Names.Plural}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if crd.Spec.Scope != apiextensionsv1beta1.ClusterScoped {
 | 
						if crd.Spec.Scope != apiextensionsv1beta1.ClusterScoped {
 | 
				
			||||||
		return client.NamespacedResource(gvr, ns)
 | 
							return client.Resource(gvr).Namespace(ns)
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		return client.ClusterResource(gvr)
 | 
							return client.Resource(gvr)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -924,7 +924,7 @@ var _ = SIGDescribe("Garbage collector", func() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		// Get a client for the custom resource.
 | 
							// Get a client for the custom resource.
 | 
				
			||||||
		gvr := schema.GroupVersionResource{Group: definition.Spec.Group, Version: definition.Spec.Version, Resource: definition.Spec.Names.Plural}
 | 
							gvr := schema.GroupVersionResource{Group: definition.Spec.Group, Version: definition.Spec.Version, Resource: definition.Spec.Names.Plural}
 | 
				
			||||||
		resourceClient := f.DynamicClient.ClusterResource(gvr)
 | 
							resourceClient := f.DynamicClient.Resource(gvr)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		apiVersion := definition.Spec.Group + "/" + definition.Spec.Version
 | 
							apiVersion := definition.Spec.Group + "/" + definition.Spec.Version
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -83,7 +83,7 @@ func CreateTestCRD(f *Framework) (*TestCrd, error) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	gvr := schema.GroupVersionResource{Group: crd.Spec.Group, Version: crd.Spec.Version, Resource: crd.Spec.Names.Plural}
 | 
						gvr := schema.GroupVersionResource{Group: crd.Spec.Group, Version: crd.Spec.Version, Resource: crd.Spec.Names.Plural}
 | 
				
			||||||
	resourceClient := dynamicClient.NamespacedResource(gvr, f.Namespace.Name)
 | 
						resourceClient := dynamicClient.Resource(gvr).Namespace(f.Namespace.Name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	testcrd.ApiExtensionClient = apiExtensionClient
 | 
						testcrd.ApiExtensionClient = apiExtensionClient
 | 
				
			||||||
	testcrd.Crd = crd
 | 
						testcrd.Crd = crd
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -508,7 +508,7 @@ func SkipUnlessServerVersionGTE(v *utilversion.Version, c discovery.ServerVersio
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func SkipIfMissingResource(dynamicClient dynamic.DynamicInterface, gvr schema.GroupVersionResource, namespace string) {
 | 
					func SkipIfMissingResource(dynamicClient dynamic.DynamicInterface, gvr schema.GroupVersionResource, namespace string) {
 | 
				
			||||||
	resourceClient := dynamicClient.NamespacedResource(gvr, namespace)
 | 
						resourceClient := dynamicClient.Resource(gvr).Namespace(namespace)
 | 
				
			||||||
	_, err := resourceClient.List(metav1.ListOptions{})
 | 
						_, err := resourceClient.List(metav1.ListOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		// not all resources support list, so we ignore those
 | 
							// not all resources support list, so we ignore those
 | 
				
			||||||
@@ -1258,7 +1258,7 @@ func hasRemainingContent(c clientset.Interface, dynamicClient dynamic.DynamicInt
 | 
				
			|||||||
	// dump how many of resource type is on the server in a log.
 | 
						// dump how many of resource type is on the server in a log.
 | 
				
			||||||
	for gvr := range groupVersionResources {
 | 
						for gvr := range groupVersionResources {
 | 
				
			||||||
		// get a client for this group version...
 | 
							// get a client for this group version...
 | 
				
			||||||
		dynamicClient := dynamicClient.NamespacedResource(gvr, namespace)
 | 
							dynamicClient := dynamicClient.Resource(gvr).Namespace(namespace)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			// not all resource types support list, so some errors here are normal depending on the resource type.
 | 
								// not all resource types support list, so some errors here are normal depending on the resource type.
 | 
				
			||||||
			Logf("namespace: %s, unable to get client - gvr: %v, error: %v", namespace, gvr, err)
 | 
								Logf("namespace: %s, unable to get client - gvr: %v, error: %v", namespace, gvr, err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -183,7 +183,7 @@ func createRandomCustomResourceDefinition(
 | 
				
			|||||||
	// Get a client for the custom resource.
 | 
						// Get a client for the custom resource.
 | 
				
			||||||
	gvr := schema.GroupVersionResource{Group: definition.Spec.Group, Version: definition.Spec.Version, Resource: definition.Spec.Names.Plural}
 | 
						gvr := schema.GroupVersionResource{Group: definition.Spec.Group, Version: definition.Spec.Version, Resource: definition.Spec.Names.Plural}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	resourceClient := dynamicClient.NamespacedResource(gvr, namespace)
 | 
						resourceClient := dynamicClient.Resource(gvr).Namespace(namespace)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return definition, resourceClient
 | 
						return definition, resourceClient
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user