mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	dry-run: Update DynamicClient to pass Create/Update options
This commit is contained in:
		@@ -73,7 +73,7 @@ func (gc *GarbageCollector) updateObject(item objectReference, obj *unstructured
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return gc.dynamicClient.Resource(resource).Namespace(resourceDefaultNamespace(namespaced, item.Namespace)).Update(obj)
 | 
						return gc.dynamicClient.Resource(resource).Namespace(resourceDefaultNamespace(namespaced, item.Namespace)).Update(obj, metav1.UpdateOptions{})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (gc *GarbageCollector) patchObject(item objectReference, patch []byte, pt types.PatchType) (*unstructured.Unstructured, error) {
 | 
					func (gc *GarbageCollector) patchObject(item objectReference, patch []byte, pt types.PatchType) (*unstructured.Unstructured, error) {
 | 
				
			||||||
@@ -81,7 +81,7 @@ func (gc *GarbageCollector) patchObject(item objectReference, patch []byte, pt t
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return gc.dynamicClient.Resource(resource).Namespace(resourceDefaultNamespace(namespaced, item.Namespace)).Patch(item.Name, pt, patch)
 | 
						return gc.dynamicClient.Resource(resource).Namespace(resourceDefaultNamespace(namespaced, item.Namespace)).Patch(item.Name, pt, patch, metav1.UpdateOptions{})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// TODO: Using Patch when strategicmerge supports deleting an entry from a
 | 
					// TODO: Using Patch when strategicmerge supports deleting an entry from a
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,6 +28,7 @@ import (
 | 
				
			|||||||
	"github.com/spf13/cobra"
 | 
						"github.com/spf13/cobra"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/api/meta"
 | 
						"k8s.io/apimachinery/pkg/api/meta"
 | 
				
			||||||
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
						"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
				
			||||||
	kruntime "k8s.io/apimachinery/pkg/runtime"
 | 
						kruntime "k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
						"k8s.io/apimachinery/pkg/runtime/schema"
 | 
				
			||||||
@@ -434,7 +435,7 @@ func (o *CreateSubcommandOptions) Run() error {
 | 
				
			|||||||
		if mapping.Scope.Name() == meta.RESTScopeNameRoot {
 | 
							if mapping.Scope.Name() == meta.RESTScopeNameRoot {
 | 
				
			||||||
			o.Namespace = ""
 | 
								o.Namespace = ""
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		actualObject, err := o.DynamicClient.Resource(mapping.Resource).Namespace(o.Namespace).Create(asUnstructured)
 | 
							actualObject, err := o.DynamicClient.Resource(mapping.Resource).Namespace(o.Namespace).Create(asUnstructured, metav1.CreateOptions{})
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,6 +24,7 @@ import (
 | 
				
			|||||||
	"github.com/spf13/cobra"
 | 
						"github.com/spf13/cobra"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/api/meta"
 | 
						"k8s.io/apimachinery/pkg/api/meta"
 | 
				
			||||||
 | 
						metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
						"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructuredscheme"
 | 
						"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructuredscheme"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/runtime"
 | 
						"k8s.io/apimachinery/pkg/runtime"
 | 
				
			||||||
@@ -341,7 +342,7 @@ func (o *ExposeServiceOptions) RunExpose(cmd *cobra.Command, args []string) erro
 | 
				
			|||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		// Serialize the object with the annotation applied.
 | 
							// Serialize the object with the annotation applied.
 | 
				
			||||||
		actualObject, err := o.DynamicClient.Resource(objMapping.Resource).Namespace(o.Namespace).Create(asUnstructured)
 | 
							actualObject, err := o.DynamicClient.Resource(objMapping.Resource).Namespace(o.Namespace).Create(asUnstructured, metav1.CreateOptions{})
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return err
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -213,7 +213,7 @@ func testSimpleCRUD(t *testing.T, ns string, noxuDefinition *apiextensionsv1beta
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			gottenNoxuInstance.Object["updated"] = version2
 | 
								gottenNoxuInstance.Object["updated"] = version2
 | 
				
			||||||
			updatedNoxuInstance, err := noxuResourceClient2.Update(gottenNoxuInstance)
 | 
								updatedNoxuInstance, err := noxuResourceClient2.Update(gottenNoxuInstance, metav1.UpdateOptions{})
 | 
				
			||||||
			if disabledVersions[version2] {
 | 
								if disabledVersions[version2] {
 | 
				
			||||||
				if !errors.IsNotFound(err) {
 | 
									if !errors.IsNotFound(err) {
 | 
				
			||||||
					t.Errorf("expected the update operation fail with NotFound for disabled version %s, got error: %v", version2, err)
 | 
										t.Errorf("expected the update operation fail with NotFound for disabled version %s, got error: %v", version2, err)
 | 
				
			||||||
@@ -580,7 +580,7 @@ func TestSelfLink(t *testing.T) {
 | 
				
			|||||||
	noxuNamespacedResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition)
 | 
						noxuNamespacedResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	noxuInstanceToCreate := fixtures.NewNoxuInstance(ns, "foo")
 | 
						noxuInstanceToCreate := fixtures.NewNoxuInstance(ns, "foo")
 | 
				
			||||||
	createdNoxuInstance, err := noxuNamespacedResourceClient.Create(noxuInstanceToCreate)
 | 
						createdNoxuInstance, err := noxuNamespacedResourceClient.Create(noxuInstanceToCreate, metav1.CreateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatal(err)
 | 
							t.Fatal(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -599,7 +599,7 @@ func TestSelfLink(t *testing.T) {
 | 
				
			|||||||
	curletResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, curletDefinition)
 | 
						curletResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, curletDefinition)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	curletInstanceToCreate := fixtures.NewCurletInstance(ns, "foo")
 | 
						curletInstanceToCreate := fixtures.NewCurletInstance(ns, "foo")
 | 
				
			||||||
	createdCurletInstance, err := curletResourceClient.Create(curletInstanceToCreate)
 | 
						createdCurletInstance, err := curletResourceClient.Create(curletInstanceToCreate, metav1.CreateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatal(err)
 | 
							t.Fatal(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -626,7 +626,7 @@ func TestPreserveInt(t *testing.T) {
 | 
				
			|||||||
	noxuNamespacedResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition)
 | 
						noxuNamespacedResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	noxuInstanceToCreate := fixtures.NewNoxuInstance(ns, "foo")
 | 
						noxuInstanceToCreate := fixtures.NewNoxuInstance(ns, "foo")
 | 
				
			||||||
	createdNoxuInstance, err := noxuNamespacedResourceClient.Create(noxuInstanceToCreate)
 | 
						createdNoxuInstance, err := noxuNamespacedResourceClient.Create(noxuInstanceToCreate, metav1.CreateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatal(err)
 | 
							t.Fatal(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -668,25 +668,25 @@ func TestPatch(t *testing.T) {
 | 
				
			|||||||
	noxuNamespacedResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition)
 | 
						noxuNamespacedResourceClient := newNamespacedCustomResourceClient(ns, dynamicClient, noxuDefinition)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	noxuInstanceToCreate := fixtures.NewNoxuInstance(ns, "foo")
 | 
						noxuInstanceToCreate := fixtures.NewNoxuInstance(ns, "foo")
 | 
				
			||||||
	createdNoxuInstance, err := noxuNamespacedResourceClient.Create(noxuInstanceToCreate)
 | 
						createdNoxuInstance, err := noxuNamespacedResourceClient.Create(noxuInstanceToCreate, metav1.CreateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatal(err)
 | 
							t.Fatal(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	patch := []byte(`{"num": {"num2":999}}`)
 | 
						patch := []byte(`{"num": {"num2":999}}`)
 | 
				
			||||||
	createdNoxuInstance, err = noxuNamespacedResourceClient.Patch("foo", types.MergePatchType, patch)
 | 
						createdNoxuInstance, err = noxuNamespacedResourceClient.Patch("foo", types.MergePatchType, patch, metav1.UpdateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// a patch with no change
 | 
						// a patch with no change
 | 
				
			||||||
	createdNoxuInstance, err = noxuNamespacedResourceClient.Patch("foo", types.MergePatchType, patch)
 | 
						createdNoxuInstance, err = noxuNamespacedResourceClient.Patch("foo", types.MergePatchType, patch, metav1.UpdateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// an empty patch
 | 
						// an empty patch
 | 
				
			||||||
	createdNoxuInstance, err = noxuNamespacedResourceClient.Patch("foo", types.MergePatchType, []byte(`{}`))
 | 
						createdNoxuInstance, err = noxuNamespacedResourceClient.Patch("foo", types.MergePatchType, []byte(`{}`), metav1.UpdateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -76,7 +76,7 @@ func TestFinalization(t *testing.T) {
 | 
				
			|||||||
	// object will be deleted as part of the finalizer update.
 | 
						// object will be deleted as part of the finalizer update.
 | 
				
			||||||
	for {
 | 
						for {
 | 
				
			||||||
		gottenNoxuInstance.SetFinalizers(nil)
 | 
							gottenNoxuInstance.SetFinalizers(nil)
 | 
				
			||||||
		_, err = noxuResourceClient.Update(gottenNoxuInstance)
 | 
							_, err = noxuResourceClient.Update(gottenNoxuInstance, metav1.UpdateOptions{})
 | 
				
			||||||
		if err == nil {
 | 
							if err == nil {
 | 
				
			||||||
			break
 | 
								break
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -137,7 +137,7 @@ func TestFinalizationAndDeletion(t *testing.T) {
 | 
				
			|||||||
	// Update the CR to remove the finalizer.
 | 
						// Update the CR to remove the finalizer.
 | 
				
			||||||
	for {
 | 
						for {
 | 
				
			||||||
		gottenNoxuInstance.SetFinalizers(nil)
 | 
							gottenNoxuInstance.SetFinalizers(nil)
 | 
				
			||||||
		_, err = noxuResourceClient.Update(gottenNoxuInstance)
 | 
							_, err = noxuResourceClient.Update(gottenNoxuInstance, metav1.UpdateOptions{})
 | 
				
			||||||
		if err == nil {
 | 
							if err == nil {
 | 
				
			||||||
			break
 | 
								break
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -313,7 +313,7 @@ func isWatchCachePrimed(crd *apiextensionsv1beta1.CustomResourceDefinition, dyna
 | 
				
			|||||||
			"spec":    map[string]interface{}{},
 | 
								"spec":    map[string]interface{}{},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	createdInstance, err := resourceClient.Create(instance)
 | 
						createdInstance, err := resourceClient.Create(instance, metav1.CreateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return false, err
 | 
							return false, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,7 +35,7 @@ func instantiateCustomResource(t *testing.T, instanceToCreate *unstructured.Unst
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func instantiateVersionedCustomResource(t *testing.T, instanceToCreate *unstructured.Unstructured, client dynamic.ResourceInterface, definition *apiextensionsv1beta1.CustomResourceDefinition, version string) (*unstructured.Unstructured, error) {
 | 
					func instantiateVersionedCustomResource(t *testing.T, instanceToCreate *unstructured.Unstructured, client dynamic.ResourceInterface, definition *apiextensionsv1beta1.CustomResourceDefinition, version string) (*unstructured.Unstructured, error) {
 | 
				
			||||||
	createdInstance, err := client.Create(instanceToCreate)
 | 
						createdInstance, err := client.Create(instanceToCreate, metav1.CreateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Logf("%#v", createdInstance)
 | 
							t.Logf("%#v", createdInstance)
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -128,7 +128,7 @@ func TestStatusSubresource(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// UpdateStatus should not update spec.
 | 
						// UpdateStatus should not update spec.
 | 
				
			||||||
	// Check that .spec.num = 10 and .status.num = 20
 | 
						// Check that .spec.num = 10 and .status.num = 20
 | 
				
			||||||
	updatedStatusInstance, err := noxuResourceClient.UpdateStatus(gottenNoxuInstance)
 | 
						updatedStatusInstance, err := noxuResourceClient.UpdateStatus(gottenNoxuInstance, metav1.UpdateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unable to update status: %v", err)
 | 
							t.Fatalf("unable to update status: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -168,7 +168,7 @@ func TestStatusSubresource(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Update should not update status.
 | 
						// Update should not update status.
 | 
				
			||||||
	// Check that .spec.num = 40 and .status.num = 20
 | 
						// Check that .spec.num = 40 and .status.num = 20
 | 
				
			||||||
	updatedInstance, err := noxuResourceClient.Update(gottenNoxuInstance)
 | 
						updatedInstance, err := noxuResourceClient.Update(gottenNoxuInstance, metav1.UpdateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unable to update instance: %v", err)
 | 
							t.Fatalf("unable to update instance: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -247,7 +247,7 @@ func TestScaleSubresource(t *testing.T) {
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, err = noxuResourceClient.UpdateStatus(gottenNoxuInstance)
 | 
						_, err = noxuResourceClient.UpdateStatus(gottenNoxuInstance, metav1.UpdateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unable to update status: %v", err)
 | 
							t.Fatalf("unable to update status: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -315,7 +315,7 @@ func TestScaleSubresource(t *testing.T) {
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, err = noxuResourceClient.Update(gottenNoxuInstance)
 | 
						_, err = noxuResourceClient.Update(gottenNoxuInstance, metav1.UpdateOptions{})
 | 
				
			||||||
	if err == nil {
 | 
						if err == nil {
 | 
				
			||||||
		t.Fatalf("unexpected non-error: .spec.replicas should be less than 2147483647")
 | 
							t.Fatalf("unexpected non-error: .spec.replicas should be less than 2147483647")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -432,7 +432,7 @@ func TestValidateOnlyStatus(t *testing.T) {
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error setting .spec.num: %v", err)
 | 
							t.Fatalf("unexpected error setting .spec.num: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	createdNoxuInstance, err = noxuResourceClient.UpdateStatus(createdNoxuInstance)
 | 
						createdNoxuInstance, err = noxuResourceClient.UpdateStatus(createdNoxuInstance, metav1.UpdateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Errorf("unexpected error: %v", err)
 | 
							t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -442,7 +442,7 @@ func TestValidateOnlyStatus(t *testing.T) {
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error setting .status.num: %v", err)
 | 
							t.Fatalf("unexpected error setting .status.num: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	createdNoxuInstance, err = noxuResourceClient.UpdateStatus(createdNoxuInstance)
 | 
						createdNoxuInstance, err = noxuResourceClient.UpdateStatus(createdNoxuInstance, metav1.UpdateOptions{})
 | 
				
			||||||
	if err == nil {
 | 
						if err == nil {
 | 
				
			||||||
		t.Fatal("expected error, but got none")
 | 
							t.Fatal("expected error, but got none")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -575,7 +575,7 @@ func TestGeneration(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// UpdateStatus does not increment generation
 | 
						// UpdateStatus does not increment generation
 | 
				
			||||||
	updatedStatusInstance, err := noxuResourceClient.UpdateStatus(gottenNoxuInstance)
 | 
						updatedStatusInstance, err := noxuResourceClient.UpdateStatus(gottenNoxuInstance, metav1.UpdateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unable to update status: %v", err)
 | 
							t.Fatalf("unable to update status: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -595,7 +595,7 @@ func TestGeneration(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Update increments generation
 | 
						// Update increments generation
 | 
				
			||||||
	updatedInstance, err := noxuResourceClient.Update(gottenNoxuInstance)
 | 
						updatedInstance, err := noxuResourceClient.Update(gottenNoxuInstance, metav1.UpdateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unable to update instance: %v", err)
 | 
							t.Fatalf("unable to update instance: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -644,7 +644,7 @@ func TestSubresourcePatch(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	patch := []byte(`{"spec": {"num":999}, "status": {"num":999}}`)
 | 
						patch := []byte(`{"spec": {"num":999}, "status": {"num":999}}`)
 | 
				
			||||||
	patchedNoxuInstance, err := noxuResourceClient.Patch("foo", types.MergePatchType, patch, "status")
 | 
						patchedNoxuInstance, err := noxuResourceClient.Patch("foo", types.MergePatchType, patch, metav1.UpdateOptions{}, "status")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -679,19 +679,19 @@ func TestSubresourcePatch(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// no-op patch
 | 
						// no-op patch
 | 
				
			||||||
	_, err = noxuResourceClient.Patch("foo", types.MergePatchType, patch, "status")
 | 
						_, err = noxuResourceClient.Patch("foo", types.MergePatchType, patch, metav1.UpdateOptions{}, "status")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// empty patch
 | 
						// empty patch
 | 
				
			||||||
	_, err = noxuResourceClient.Patch("foo", types.MergePatchType, []byte(`{}`), "status")
 | 
						_, err = noxuResourceClient.Patch("foo", types.MergePatchType, []byte(`{}`), metav1.UpdateOptions{}, "status")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	patch = []byte(`{"spec": {"replicas":7}, "status": {"replicas":7}}`)
 | 
						patch = []byte(`{"spec": {"replicas":7}, "status": {"replicas":7}}`)
 | 
				
			||||||
	patchedNoxuInstance, err = noxuResourceClient.Patch("foo", types.MergePatchType, patch, "scale")
 | 
						patchedNoxuInstance, err = noxuResourceClient.Patch("foo", types.MergePatchType, patch, metav1.UpdateOptions{}, "scale")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -720,24 +720,24 @@ func TestSubresourcePatch(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// no-op patch
 | 
						// no-op patch
 | 
				
			||||||
	_, err = noxuResourceClient.Patch("foo", types.MergePatchType, patch, "scale")
 | 
						_, err = noxuResourceClient.Patch("foo", types.MergePatchType, patch, metav1.UpdateOptions{}, "scale")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// empty patch
 | 
						// empty patch
 | 
				
			||||||
	_, err = noxuResourceClient.Patch("foo", types.MergePatchType, []byte(`{}`), "scale")
 | 
						_, err = noxuResourceClient.Patch("foo", types.MergePatchType, []byte(`{}`), metav1.UpdateOptions{}, "scale")
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unexpected error: %v", err)
 | 
							t.Fatalf("unexpected error: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// make sure strategic merge patch is not supported for both status and scale
 | 
						// make sure strategic merge patch is not supported for both status and scale
 | 
				
			||||||
	_, err = noxuResourceClient.Patch("foo", types.StrategicMergePatchType, patch, "status")
 | 
						_, err = noxuResourceClient.Patch("foo", types.StrategicMergePatchType, patch, metav1.UpdateOptions{}, "status")
 | 
				
			||||||
	if err == nil {
 | 
						if err == nil {
 | 
				
			||||||
		t.Fatalf("unexpected non-error: strategic merge patch is not supported for custom resources")
 | 
							t.Fatalf("unexpected non-error: strategic merge patch is not supported for custom resources")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, err = noxuResourceClient.Patch("foo", types.StrategicMergePatchType, patch, "scale")
 | 
						_, err = noxuResourceClient.Patch("foo", types.StrategicMergePatchType, patch, metav1.UpdateOptions{}, "scale")
 | 
				
			||||||
	if err == nil {
 | 
						if err == nil {
 | 
				
			||||||
		t.Fatalf("unexpected non-error: strategic merge patch is not supported for custom resources")
 | 
							t.Fatalf("unexpected non-error: strategic merge patch is not supported for custom resources")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -108,7 +108,7 @@ func TestTableGet(t *testing.T) {
 | 
				
			|||||||
	t.Logf("table crd created: %#v", crd)
 | 
						t.Logf("table crd created: %#v", crd)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	crClient := newNamespacedCustomResourceClient("", dynamicClient, crd)
 | 
						crClient := newNamespacedCustomResourceClient("", dynamicClient, crd)
 | 
				
			||||||
	foo, err := crClient.Create(newTableInstance("foo"))
 | 
						foo, err := crClient.Create(newTableInstance("foo"), metav1.CreateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("unable to create noxu instance: %v", err)
 | 
							t.Fatalf("unable to create noxu instance: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -71,7 +71,7 @@ func TestForProperValidationErrors(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, tc := range tests {
 | 
						for _, tc := range tests {
 | 
				
			||||||
		_, err := noxuResourceClient.Create(tc.instanceFn())
 | 
							_, err := noxuResourceClient.Create(tc.instanceFn(), metav1.CreateOptions{})
 | 
				
			||||||
		if err == nil {
 | 
							if err == nil {
 | 
				
			||||||
			t.Errorf("%v: expected %v", tc.name, tc.expectedError)
 | 
								t.Errorf("%v: expected %v", tc.name, tc.expectedError)
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
@@ -225,7 +225,7 @@ func TestCustomResourceUpdateValidation(t *testing.T) {
 | 
				
			|||||||
		"delta": "hello",
 | 
							"delta": "hello",
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	_, err = noxuResourceClient.Update(gottenNoxuInstance)
 | 
						_, err = noxuResourceClient.Update(gottenNoxuInstance, metav1.UpdateOptions{})
 | 
				
			||||||
	if err == nil {
 | 
						if err == nil {
 | 
				
			||||||
		t.Fatalf("unexpected non-error: alpha and beta should be present while updating %v", gottenNoxuInstance)
 | 
							t.Fatalf("unexpected non-error: alpha and beta should be present while updating %v", gottenNoxuInstance)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -309,7 +309,7 @@ func TestCustomResourceValidationErrors(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	for _, tc := range tests {
 | 
						for _, tc := range tests {
 | 
				
			||||||
		_, err := noxuResourceClient.Create(tc.instanceFn())
 | 
							_, err := noxuResourceClient.Create(tc.instanceFn(), metav1.CreateOptions{})
 | 
				
			||||||
		if err == nil {
 | 
							if err == nil {
 | 
				
			||||||
			t.Errorf("%v: expected %v", tc.name, tc.expectedError)
 | 
								t.Errorf("%v: expected %v", tc.name, tc.expectedError)
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
@@ -357,7 +357,7 @@ func TestCRValidationOnCRDUpdate(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// CR is now accepted
 | 
						// CR is now accepted
 | 
				
			||||||
	err = wait.Poll(500*time.Millisecond, wait.ForeverTestTimeout, func() (bool, error) {
 | 
						err = wait.Poll(500*time.Millisecond, wait.ForeverTestTimeout, func() (bool, error) {
 | 
				
			||||||
		_, err := noxuResourceClient.Create(newNoxuValidationInstance(ns, "foo"))
 | 
							_, err := noxuResourceClient.Create(newNoxuValidationInstance(ns, "foo"), metav1.CreateOptions{})
 | 
				
			||||||
		if statusError, isStatus := err.(*apierrors.StatusError); isStatus {
 | 
							if statusError, isStatus := err.(*apierrors.StatusError); isStatus {
 | 
				
			||||||
			if strings.Contains(statusError.Error(), "is invalid") {
 | 
								if strings.Contains(statusError.Error(), "is invalid") {
 | 
				
			||||||
				return false, nil
 | 
									return false, nil
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -107,11 +107,11 @@ type oldResourceShimType struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s oldResourceShimType) Create(obj *unstructured.Unstructured) (*unstructured.Unstructured, error) {
 | 
					func (s oldResourceShimType) Create(obj *unstructured.Unstructured) (*unstructured.Unstructured, error) {
 | 
				
			||||||
	return s.ResourceInterface.Create(obj, s.subresources...)
 | 
						return s.ResourceInterface.Create(obj, metav1.CreateOptions{}, s.subresources...)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s oldResourceShimType) Update(obj *unstructured.Unstructured) (*unstructured.Unstructured, error) {
 | 
					func (s oldResourceShimType) Update(obj *unstructured.Unstructured) (*unstructured.Unstructured, error) {
 | 
				
			||||||
	return s.ResourceInterface.Update(obj, s.subresources...)
 | 
						return s.ResourceInterface.Update(obj, metav1.UpdateOptions{}, s.subresources...)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s oldResourceShimType) Delete(name string, opts *metav1.DeleteOptions) error {
 | 
					func (s oldResourceShimType) Delete(name string, opts *metav1.DeleteOptions) error {
 | 
				
			||||||
@@ -127,5 +127,5 @@ func (s oldResourceShimType) List(opts metav1.ListOptions) (runtime.Object, erro
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (s oldResourceShimType) Patch(name string, pt types.PatchType, data []byte) (*unstructured.Unstructured, error) {
 | 
					func (s oldResourceShimType) Patch(name string, pt types.PatchType, data []byte) (*unstructured.Unstructured, error) {
 | 
				
			||||||
	return s.ResourceInterface.Patch(name, pt, data, s.subresources...)
 | 
						return s.ResourceInterface.Patch(name, pt, data, metav1.UpdateOptions{}, s.subresources...)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -404,7 +404,7 @@ func TestCreate(t *testing.T) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		defer srv.Close()
 | 
							defer srv.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		got, err := cl.Resource(resource).Namespace(tc.namespace).Create(tc.obj, tc.subresource...)
 | 
							got, err := cl.Resource(resource).Namespace(tc.namespace).Create(tc.obj, metav1.CreateOptions{}, tc.subresource...)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			t.Errorf("unexpected error when creating %q: %v", tc.name, err)
 | 
								t.Errorf("unexpected error when creating %q: %v", tc.name, err)
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
@@ -481,7 +481,7 @@ func TestUpdate(t *testing.T) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		defer srv.Close()
 | 
							defer srv.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		got, err := cl.Resource(resource).Namespace(tc.namespace).Update(tc.obj, tc.subresource...)
 | 
							got, err := cl.Resource(resource).Namespace(tc.namespace).Update(tc.obj, metav1.UpdateOptions{}, tc.subresource...)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			t.Errorf("unexpected error when updating %q: %v", tc.name, err)
 | 
								t.Errorf("unexpected error when updating %q: %v", tc.name, err)
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
@@ -638,7 +638,7 @@ func TestPatch(t *testing.T) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		defer srv.Close()
 | 
							defer srv.Close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		got, err := cl.Resource(resource).Namespace(tc.namespace).Patch(tc.name, types.StrategicMergePatchType, tc.patch, tc.subresource...)
 | 
							got, err := cl.Resource(resource).Namespace(tc.namespace).Patch(tc.name, types.StrategicMergePatchType, tc.patch, metav1.UpdateOptions{}, tc.subresource...)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			t.Errorf("unexpected error when patching %q: %v", tc.name, err)
 | 
								t.Errorf("unexpected error when patching %q: %v", tc.name, err)
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -86,7 +86,7 @@ func (c *dynamicResourceClient) Namespace(ns string) dynamic.ResourceInterface {
 | 
				
			|||||||
	return &ret
 | 
						return &ret
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *dynamicResourceClient) Create(obj *unstructured.Unstructured, subresources ...string) (*unstructured.Unstructured, error) {
 | 
					func (c *dynamicResourceClient) Create(obj *unstructured.Unstructured, opts metav1.CreateOptions, subresources ...string) (*unstructured.Unstructured, error) {
 | 
				
			||||||
	var uncastRet runtime.Object
 | 
						var uncastRet runtime.Object
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
	switch {
 | 
						switch {
 | 
				
			||||||
@@ -132,7 +132,7 @@ func (c *dynamicResourceClient) Create(obj *unstructured.Unstructured, subresour
 | 
				
			|||||||
	return ret, err
 | 
						return ret, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *dynamicResourceClient) Update(obj *unstructured.Unstructured, subresources ...string) (*unstructured.Unstructured, error) {
 | 
					func (c *dynamicResourceClient) Update(obj *unstructured.Unstructured, opts metav1.UpdateOptions, subresources ...string) (*unstructured.Unstructured, error) {
 | 
				
			||||||
	var uncastRet runtime.Object
 | 
						var uncastRet runtime.Object
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
	switch {
 | 
						switch {
 | 
				
			||||||
@@ -168,7 +168,7 @@ func (c *dynamicResourceClient) Update(obj *unstructured.Unstructured, subresour
 | 
				
			|||||||
	return ret, err
 | 
						return ret, err
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *dynamicResourceClient) UpdateStatus(obj *unstructured.Unstructured) (*unstructured.Unstructured, error) {
 | 
					func (c *dynamicResourceClient) UpdateStatus(obj *unstructured.Unstructured, opts metav1.UpdateOptions) (*unstructured.Unstructured, error) {
 | 
				
			||||||
	var uncastRet runtime.Object
 | 
						var uncastRet runtime.Object
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
	switch {
 | 
						switch {
 | 
				
			||||||
@@ -331,7 +331,7 @@ func (c *dynamicResourceClient) Watch(opts metav1.ListOptions) (watch.Interface,
 | 
				
			|||||||
	panic("math broke")
 | 
						panic("math broke")
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *dynamicResourceClient) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (*unstructured.Unstructured, error) {
 | 
					func (c *dynamicResourceClient) Patch(name string, pt types.PatchType, data []byte, opts metav1.UpdateOptions, subresources ...string) (*unstructured.Unstructured, error) {
 | 
				
			||||||
	var uncastRet runtime.Object
 | 
						var uncastRet runtime.Object
 | 
				
			||||||
	var err error
 | 
						var err error
 | 
				
			||||||
	switch {
 | 
						switch {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,15 +29,15 @@ type Interface interface {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type ResourceInterface interface {
 | 
					type ResourceInterface interface {
 | 
				
			||||||
	Create(obj *unstructured.Unstructured, subresources ...string) (*unstructured.Unstructured, error)
 | 
						Create(obj *unstructured.Unstructured, options metav1.CreateOptions, subresources ...string) (*unstructured.Unstructured, error)
 | 
				
			||||||
	Update(obj *unstructured.Unstructured, subresources ...string) (*unstructured.Unstructured, error)
 | 
						Update(obj *unstructured.Unstructured, options metav1.UpdateOptions, subresources ...string) (*unstructured.Unstructured, error)
 | 
				
			||||||
	UpdateStatus(obj *unstructured.Unstructured) (*unstructured.Unstructured, error)
 | 
						UpdateStatus(obj *unstructured.Unstructured, options metav1.UpdateOptions) (*unstructured.Unstructured, error)
 | 
				
			||||||
	Delete(name string, options *metav1.DeleteOptions, subresources ...string) error
 | 
						Delete(name string, options *metav1.DeleteOptions, subresources ...string) error
 | 
				
			||||||
	DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error
 | 
						DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error
 | 
				
			||||||
	Get(name string, options metav1.GetOptions, subresources ...string) (*unstructured.Unstructured, error)
 | 
						Get(name string, options metav1.GetOptions, subresources ...string) (*unstructured.Unstructured, error)
 | 
				
			||||||
	List(opts metav1.ListOptions) (*unstructured.UnstructuredList, error)
 | 
						List(opts metav1.ListOptions) (*unstructured.UnstructuredList, error)
 | 
				
			||||||
	Watch(opts metav1.ListOptions) (watch.Interface, error)
 | 
						Watch(opts metav1.ListOptions) (watch.Interface, error)
 | 
				
			||||||
	Patch(name string, pt types.PatchType, data []byte, subresources ...string) (*unstructured.Unstructured, error)
 | 
						Patch(name string, pt types.PatchType, data []byte, options metav1.UpdateOptions, subresources ...string) (*unstructured.Unstructured, error)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type NamespaceableResourceInterface interface {
 | 
					type NamespaceableResourceInterface interface {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -82,7 +82,7 @@ func (c *dynamicResourceClient) Namespace(ns string) ResourceInterface {
 | 
				
			|||||||
	return &ret
 | 
						return &ret
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *dynamicResourceClient) Create(obj *unstructured.Unstructured, subresources ...string) (*unstructured.Unstructured, error) {
 | 
					func (c *dynamicResourceClient) Create(obj *unstructured.Unstructured, opts metav1.CreateOptions, subresources ...string) (*unstructured.Unstructured, error) {
 | 
				
			||||||
	outBytes, err := runtime.Encode(unstructured.UnstructuredJSONScheme, obj)
 | 
						outBytes, err := runtime.Encode(unstructured.UnstructuredJSONScheme, obj)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
@@ -96,7 +96,12 @@ func (c *dynamicResourceClient) Create(obj *unstructured.Unstructured, subresour
 | 
				
			|||||||
		name = accessor.GetName()
 | 
							name = accessor.GetName()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	result := c.client.client.Post().AbsPath(append(c.makeURLSegments(name), subresources...)...).Body(outBytes).Do()
 | 
						result := c.client.client.
 | 
				
			||||||
 | 
							Post().
 | 
				
			||||||
 | 
							AbsPath(append(c.makeURLSegments(name), subresources...)...).
 | 
				
			||||||
 | 
							Body(outBytes).
 | 
				
			||||||
 | 
							SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1).
 | 
				
			||||||
 | 
							Do()
 | 
				
			||||||
	if err := result.Error(); err != nil {
 | 
						if err := result.Error(); err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -112,7 +117,7 @@ func (c *dynamicResourceClient) Create(obj *unstructured.Unstructured, subresour
 | 
				
			|||||||
	return uncastObj.(*unstructured.Unstructured), nil
 | 
						return uncastObj.(*unstructured.Unstructured), nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *dynamicResourceClient) Update(obj *unstructured.Unstructured, subresources ...string) (*unstructured.Unstructured, error) {
 | 
					func (c *dynamicResourceClient) Update(obj *unstructured.Unstructured, opts metav1.UpdateOptions, subresources ...string) (*unstructured.Unstructured, error) {
 | 
				
			||||||
	accessor, err := meta.Accessor(obj)
 | 
						accessor, err := meta.Accessor(obj)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
@@ -122,7 +127,12 @@ func (c *dynamicResourceClient) Update(obj *unstructured.Unstructured, subresour
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	result := c.client.client.Put().AbsPath(append(c.makeURLSegments(accessor.GetName()), subresources...)...).Body(outBytes).Do()
 | 
						result := c.client.client.
 | 
				
			||||||
 | 
							Put().
 | 
				
			||||||
 | 
							AbsPath(append(c.makeURLSegments(accessor.GetName()), subresources...)...).
 | 
				
			||||||
 | 
							Body(outBytes).
 | 
				
			||||||
 | 
							SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1).
 | 
				
			||||||
 | 
							Do()
 | 
				
			||||||
	if err := result.Error(); err != nil {
 | 
						if err := result.Error(); err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -138,7 +148,7 @@ func (c *dynamicResourceClient) Update(obj *unstructured.Unstructured, subresour
 | 
				
			|||||||
	return uncastObj.(*unstructured.Unstructured), nil
 | 
						return uncastObj.(*unstructured.Unstructured), nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *dynamicResourceClient) UpdateStatus(obj *unstructured.Unstructured) (*unstructured.Unstructured, error) {
 | 
					func (c *dynamicResourceClient) UpdateStatus(obj *unstructured.Unstructured, opts metav1.UpdateOptions) (*unstructured.Unstructured, error) {
 | 
				
			||||||
	accessor, err := meta.Accessor(obj)
 | 
						accessor, err := meta.Accessor(obj)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
@@ -149,7 +159,12 @@ func (c *dynamicResourceClient) UpdateStatus(obj *unstructured.Unstructured) (*u
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	result := c.client.client.Put().AbsPath(append(c.makeURLSegments(accessor.GetName()), "status")...).Body(outBytes).Do()
 | 
						result := c.client.client.
 | 
				
			||||||
 | 
							Put().
 | 
				
			||||||
 | 
							AbsPath(append(c.makeURLSegments(accessor.GetName()), "status")...).
 | 
				
			||||||
 | 
							Body(outBytes).
 | 
				
			||||||
 | 
							SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1).
 | 
				
			||||||
 | 
							Do()
 | 
				
			||||||
	if err := result.Error(); err != nil {
 | 
						if err := result.Error(); err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -174,7 +189,11 @@ func (c *dynamicResourceClient) Delete(name string, opts *metav1.DeleteOptions,
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	result := c.client.client.Delete().AbsPath(append(c.makeURLSegments(name), subresources...)...).Body(deleteOptionsByte).Do()
 | 
						result := c.client.client.
 | 
				
			||||||
 | 
							Delete().
 | 
				
			||||||
 | 
							AbsPath(append(c.makeURLSegments(name), subresources...)...).
 | 
				
			||||||
 | 
							Body(deleteOptionsByte).
 | 
				
			||||||
 | 
							Do()
 | 
				
			||||||
	return result.Error()
 | 
						return result.Error()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -187,7 +206,12 @@ func (c *dynamicResourceClient) DeleteCollection(opts *metav1.DeleteOptions, lis
 | 
				
			|||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	result := c.client.client.Delete().AbsPath(c.makeURLSegments("")...).Body(deleteOptionsByte).SpecificallyVersionedParams(&listOptions, dynamicParameterCodec, versionV1).Do()
 | 
						result := c.client.client.
 | 
				
			||||||
 | 
							Delete().
 | 
				
			||||||
 | 
							AbsPath(c.makeURLSegments("")...).
 | 
				
			||||||
 | 
							Body(deleteOptionsByte).
 | 
				
			||||||
 | 
							SpecificallyVersionedParams(&listOptions, dynamicParameterCodec, versionV1).
 | 
				
			||||||
 | 
							Do()
 | 
				
			||||||
	return result.Error()
 | 
						return result.Error()
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -259,8 +283,13 @@ func (c *dynamicResourceClient) Watch(opts metav1.ListOptions) (watch.Interface,
 | 
				
			|||||||
		WatchWithSpecificDecoders(wrappedDecoderFn, unstructured.UnstructuredJSONScheme)
 | 
							WatchWithSpecificDecoders(wrappedDecoderFn, unstructured.UnstructuredJSONScheme)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *dynamicResourceClient) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (*unstructured.Unstructured, error) {
 | 
					func (c *dynamicResourceClient) Patch(name string, pt types.PatchType, data []byte, opts metav1.UpdateOptions, subresources ...string) (*unstructured.Unstructured, error) {
 | 
				
			||||||
	result := c.client.client.Patch(pt).AbsPath(append(c.makeURLSegments(name), subresources...)...).Body(data).Do()
 | 
						result := c.client.client.
 | 
				
			||||||
 | 
							Patch(pt).
 | 
				
			||||||
 | 
							AbsPath(append(c.makeURLSegments(name), subresources...)...).
 | 
				
			||||||
 | 
							Body(data).
 | 
				
			||||||
 | 
							SpecificallyVersionedParams(&opts, dynamicParameterCodec, versionV1).
 | 
				
			||||||
 | 
							Do()
 | 
				
			||||||
	if err := result.Error(); err != nil {
 | 
						if err := result.Error(); err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -436,7 +436,7 @@ func TestSampleAPIServer(f *framework.Framework, image string) {
 | 
				
			|||||||
	unstruct := &unstructuredv1.Unstructured{}
 | 
						unstruct := &unstructuredv1.Unstructured{}
 | 
				
			||||||
	err = unstruct.UnmarshalJSON(jsonFlunder)
 | 
						err = unstruct.UnmarshalJSON(jsonFlunder)
 | 
				
			||||||
	framework.ExpectNoError(err, "unmarshalling test-flunder as unstructured for create using dynamic client")
 | 
						framework.ExpectNoError(err, "unmarshalling test-flunder as unstructured for create using dynamic client")
 | 
				
			||||||
	unstruct, err = dynamicClient.Create(unstruct)
 | 
						unstruct, err = dynamicClient.Create(unstruct, metav1.CreateOptions{})
 | 
				
			||||||
	framework.ExpectNoError(err, "listing flunders using dynamic client")
 | 
						framework.ExpectNoError(err, "listing flunders using dynamic client")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// kubectl get flunders
 | 
						// kubectl get flunders
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -125,7 +125,7 @@ func watchCRWithName(crdResourceClient dynamic.ResourceInterface, name string) (
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func instantiateCustomResource(instanceToCreate *unstructured.Unstructured, client dynamic.ResourceInterface, definition *apiextensionsv1beta1.CustomResourceDefinition) (*unstructured.Unstructured, error) {
 | 
					func instantiateCustomResource(instanceToCreate *unstructured.Unstructured, client dynamic.ResourceInterface, definition *apiextensionsv1beta1.CustomResourceDefinition) (*unstructured.Unstructured, error) {
 | 
				
			||||||
	createdInstance, err := client.Create(instanceToCreate)
 | 
						createdInstance, err := client.Create(instanceToCreate, metav1.CreateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -935,7 +935,7 @@ var _ = SIGDescribe("Garbage collector", func() {
 | 
				
			|||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		persistedOwner, err := resourceClient.Create(owner)
 | 
							persistedOwner, err := resourceClient.Create(owner, metav1.CreateOptions{})
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			framework.Failf("failed to create owner resource %q: %v", ownerName, err)
 | 
								framework.Failf("failed to create owner resource %q: %v", ownerName, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -960,7 +960,7 @@ var _ = SIGDescribe("Garbage collector", func() {
 | 
				
			|||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		persistedDependent, err := resourceClient.Create(dependent)
 | 
							persistedDependent, err := resourceClient.Create(dependent, metav1.CreateOptions{})
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			framework.Failf("failed to create dependent resource %q: %v", dependentName, err)
 | 
								framework.Failf("failed to create dependent resource %q: %v", dependentName, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -1036,7 +1036,7 @@ var _ = SIGDescribe("Garbage collector", func() {
 | 
				
			|||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		persistedOwner, err := resourceClient.Create(owner)
 | 
							persistedOwner, err := resourceClient.Create(owner, metav1.CreateOptions{})
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			framework.Failf("failed to create owner resource %q: %v", ownerName, err)
 | 
								framework.Failf("failed to create owner resource %q: %v", ownerName, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -1061,7 +1061,7 @@ var _ = SIGDescribe("Garbage collector", func() {
 | 
				
			|||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		_, err = resourceClient.Create(dependent)
 | 
							_, err = resourceClient.Create(dependent, metav1.CreateOptions{})
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			framework.Failf("failed to create dependent resource %q: %v", dependentName, err)
 | 
								framework.Failf("failed to create dependent resource %q: %v", dependentName, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1100,7 +1100,7 @@ func testCustomResourceWebhook(f *framework.Framework, crd *apiextensionsv1beta1
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, err := customResourceClient.Create(crInstance)
 | 
						_, err := customResourceClient.Create(crInstance, metav1.CreateOptions{})
 | 
				
			||||||
	Expect(err).NotTo(BeNil())
 | 
						Expect(err).NotTo(BeNil())
 | 
				
			||||||
	expectedErrMsg := "the custom resource contains unwanted data"
 | 
						expectedErrMsg := "the custom resource contains unwanted data"
 | 
				
			||||||
	if !strings.Contains(err.Error(), expectedErrMsg) {
 | 
						if !strings.Contains(err.Error(), expectedErrMsg) {
 | 
				
			||||||
@@ -1123,7 +1123,7 @@ func testMutatingCustomResourceWebhook(f *framework.Framework, crd *apiextension
 | 
				
			|||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	mutatedCR, err := customResourceClient.Create(cr)
 | 
						mutatedCR, err := customResourceClient.Create(cr, metav1.CreateOptions{})
 | 
				
			||||||
	Expect(err).To(BeNil())
 | 
						Expect(err).To(BeNil())
 | 
				
			||||||
	expectedCRData := map[string]interface{}{
 | 
						expectedCRData := map[string]interface{}{
 | 
				
			||||||
		"mutation-start":   "yes",
 | 
							"mutation-start":   "yes",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -810,7 +810,7 @@ func (c *allClient) create(stub, ns string, mapping *meta.RESTMapping, all *[]cl
 | 
				
			|||||||
		ns = ""
 | 
							ns = ""
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	obj := &unstructured.Unstructured{Object: typeMetaAdder}
 | 
						obj := &unstructured.Unstructured{Object: typeMetaAdder}
 | 
				
			||||||
	actual, err := c.dynamicClient.Resource(mapping.Resource).Namespace(ns).Create(obj)
 | 
						actual, err := c.dynamicClient.Resource(mapping.Resource).Namespace(ns).Create(obj, metav1.CreateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return err
 | 
							return err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -812,7 +812,7 @@ func TestCustomResourceCascadingDeletion(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// Create a custom owner resource.
 | 
						// Create a custom owner resource.
 | 
				
			||||||
	owner := newCRDInstance(definition, ns.Name, names.SimpleNameGenerator.GenerateName("owner"))
 | 
						owner := newCRDInstance(definition, ns.Name, names.SimpleNameGenerator.GenerateName("owner"))
 | 
				
			||||||
	owner, err := resourceClient.Create(owner)
 | 
						owner, err := resourceClient.Create(owner, metav1.CreateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("failed to create owner resource %q: %v", owner.GetName(), err)
 | 
							t.Fatalf("failed to create owner resource %q: %v", owner.GetName(), err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -822,7 +822,7 @@ func TestCustomResourceCascadingDeletion(t *testing.T) {
 | 
				
			|||||||
	dependent := newCRDInstance(definition, ns.Name, names.SimpleNameGenerator.GenerateName("dependent"))
 | 
						dependent := newCRDInstance(definition, ns.Name, names.SimpleNameGenerator.GenerateName("dependent"))
 | 
				
			||||||
	link(t, owner, dependent)
 | 
						link(t, owner, dependent)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	dependent, err = resourceClient.Create(dependent)
 | 
						dependent, err = resourceClient.Create(dependent, metav1.CreateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("failed to create dependent resource %q: %v", dependent.GetName(), err)
 | 
							t.Fatalf("failed to create dependent resource %q: %v", dependent.GetName(), err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -873,7 +873,7 @@ func TestMixedRelationships(t *testing.T) {
 | 
				
			|||||||
	definition, resourceClient := createRandomCustomResourceDefinition(t, apiExtensionClient, dynamicClient, ns.Name)
 | 
						definition, resourceClient := createRandomCustomResourceDefinition(t, apiExtensionClient, dynamicClient, ns.Name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create a custom owner resource.
 | 
						// Create a custom owner resource.
 | 
				
			||||||
	customOwner, err := resourceClient.Create(newCRDInstance(definition, ns.Name, names.SimpleNameGenerator.GenerateName("owner")))
 | 
						customOwner, err := resourceClient.Create(newCRDInstance(definition, ns.Name, names.SimpleNameGenerator.GenerateName("owner")), metav1.CreateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("failed to create owner: %v", err)
 | 
							t.Fatalf("failed to create owner: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -900,7 +900,7 @@ func TestMixedRelationships(t *testing.T) {
 | 
				
			|||||||
	coreOwner.TypeMeta.Kind = "ConfigMap"
 | 
						coreOwner.TypeMeta.Kind = "ConfigMap"
 | 
				
			||||||
	coreOwner.TypeMeta.APIVersion = "v1"
 | 
						coreOwner.TypeMeta.APIVersion = "v1"
 | 
				
			||||||
	link(t, coreOwner, customDependent)
 | 
						link(t, coreOwner, customDependent)
 | 
				
			||||||
	customDependent, err = resourceClient.Create(customDependent)
 | 
						customDependent, err = resourceClient.Create(customDependent, metav1.CreateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("failed to create dependent: %v", err)
 | 
							t.Fatalf("failed to create dependent: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -971,7 +971,7 @@ func TestCRDDeletionCascading(t *testing.T) {
 | 
				
			|||||||
	definition, resourceClient := createRandomCustomResourceDefinition(t, apiExtensionClient, dynamicClient, ns.Name)
 | 
						definition, resourceClient := createRandomCustomResourceDefinition(t, apiExtensionClient, dynamicClient, ns.Name)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Create a custom owner resource.
 | 
						// Create a custom owner resource.
 | 
				
			||||||
	owner, err := resourceClient.Create(newCRDInstance(definition, ns.Name, names.SimpleNameGenerator.GenerateName("owner")))
 | 
						owner, err := resourceClient.Create(newCRDInstance(definition, ns.Name, names.SimpleNameGenerator.GenerateName("owner")), metav1.CreateOptions{})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatalf("failed to create owner: %v", err)
 | 
							t.Fatalf("failed to create owner: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -199,7 +199,7 @@ func TestCRD(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	createErr := make(chan error, 1)
 | 
						createErr := make(chan error, 1)
 | 
				
			||||||
	go func() {
 | 
						go func() {
 | 
				
			||||||
		_, err := dynamicClient.Resource(fooResource).Namespace("default").Create(unstructuredFoo)
 | 
							_, err := dynamicClient.Resource(fooResource).Namespace("default").Create(unstructuredFoo, metav1.CreateOptions{})
 | 
				
			||||||
		t.Logf("Foo instance create returned: %v", err)
 | 
							t.Logf("Foo instance create returned: %v", err)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			createErr <- err
 | 
								createErr <- err
 | 
				
			||||||
@@ -272,7 +272,7 @@ func TestCRD(t *testing.T) {
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
		fooUnstructured.UnmarshalJSON(bs)
 | 
							fooUnstructured.UnmarshalJSON(bs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		_, err = dynamicClient.Resource(fooResource).Namespace("default").Update(fooUnstructured)
 | 
							_, err = dynamicClient.Resource(fooResource).Namespace("default").Update(fooUnstructured, metav1.UpdateOptions{})
 | 
				
			||||||
		if err != nil && !errors.IsConflict(err) {
 | 
							if err != nil && !errors.IsConflict(err) {
 | 
				
			||||||
			t.Fatalf("Failed to update Foo instance: %v", err)
 | 
								t.Fatalf("Failed to update Foo instance: %v", err)
 | 
				
			||||||
		} else if err == nil {
 | 
							} else if err == nil {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user