diff --git a/cmd/libs/go2idl/client-gen/generators/fake/generator_fake_for_type.go b/cmd/libs/go2idl/client-gen/generators/fake/generator_fake_for_type.go index 5a7d0052ba..52609835b0 100644 --- a/cmd/libs/go2idl/client-gen/generators/fake/generator_fake_for_type.go +++ b/cmd/libs/go2idl/client-gen/generators/fake/generator_fake_for_type.go @@ -117,7 +117,7 @@ func (g *genFakeForType) GenerateType(c *generator.Context, t *types.Type, w io. "version": g.version, "watchInterface": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/watch", Name: "Interface"}), "GroupVersionResource": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/runtime/schema", Name: "GroupVersionResource"}), - "PatchType": c.Universe.Type(types.Name{Package: "k8s.io/kubernetes/pkg/api", Name: "PatchType"}), + "PatchType": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/types", Name: "PatchType"}), "Everything": c.Universe.Function(types.Name{Package: "k8s.io/apimachinery/pkg/labels", Name: "Everything"}), "NewRootListAction": c.Universe.Function(types.Name{Package: pkgTestingCore, Name: "NewRootListAction"}), diff --git a/cmd/libs/go2idl/client-gen/generators/generator_for_type.go b/cmd/libs/go2idl/client-gen/generators/generator_for_type.go index e5ed252d98..4963cd54f9 100644 --- a/cmd/libs/go2idl/client-gen/generators/generator_for_type.go +++ b/cmd/libs/go2idl/client-gen/generators/generator_for_type.go @@ -86,7 +86,7 @@ func (g *genClientForType) GenerateType(c *generator.Context, t *types.Type, w i "watchInterface": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/watch", Name: "Interface"}), "RESTClientInterface": c.Universe.Type(types.Name{Package: "k8s.io/kubernetes/pkg/client/restclient", Name: "Interface"}), "apiParameterCodec": c.Universe.Type(types.Name{Package: "k8s.io/kubernetes/pkg/api", Name: "ParameterCodec"}), - "PatchType": c.Universe.Type(types.Name{Package: "k8s.io/kubernetes/pkg/api", Name: "PatchType"}), + "PatchType": c.Universe.Type(types.Name{Package: "k8s.io/apimachinery/pkg/types", Name: "PatchType"}), "namespaced": namespaced, } diff --git a/federation/pkg/federation-controller/util/eventsink/eventsink.go b/federation/pkg/federation-controller/util/eventsink/eventsink.go index cb7c2ca5df..3793aae730 100644 --- a/federation/pkg/federation-controller/util/eventsink/eventsink.go +++ b/federation/pkg/federation-controller/util/eventsink/eventsink.go @@ -17,8 +17,8 @@ limitations under the License. package eventsink import ( + "k8s.io/apimachinery/pkg/types" fedclientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_clientset" - api "k8s.io/kubernetes/pkg/api" api_v1 "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/record" ) @@ -46,5 +46,5 @@ func (fes *FederatedEventSink) Update(event *api_v1.Event) (*api_v1.Event, error } func (fes *FederatedEventSink) Patch(event *api_v1.Event, data []byte) (*api_v1.Event, error) { - return fes.clientset.Core().Events(event.Namespace).Patch(event.Name, api.StrategicMergePatchType, data) + return fes.clientset.Core().Events(event.Namespace).Patch(event.Name, types.StrategicMergePatchType, data) } diff --git a/pkg/api/types.go b/pkg/api/types.go index cadb761501..19e880ea8c 100644 --- a/pkg/api/types.go +++ b/pkg/api/types.go @@ -3421,17 +3421,6 @@ const ( PortForwardRequestIDHeader = "requestID" ) -// Similarly to above, these are constants to support HTTP PATCH utilized by -// both the client and server that didn't make sense for a whole package to be -// dedicated to. -type PatchType string - -const ( - JSONPatchType PatchType = "application/json-patch+json" - MergePatchType PatchType = "application/merge-patch+json" - StrategicMergePatchType PatchType = "application/strategic-merge-patch+json" -) - // Type and constants for component health validation. type ComponentConditionType string diff --git a/pkg/client/clientset_generated/clientset/typed/core/v1/event_expansion.go b/pkg/client/clientset_generated/clientset/typed/core/v1/event_expansion.go index 125459490d..577981a48d 100644 --- a/pkg/client/clientset_generated/clientset/typed/core/v1/event_expansion.go +++ b/pkg/client/clientset_generated/clientset/typed/core/v1/event_expansion.go @@ -20,6 +20,7 @@ import ( "fmt" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/fields" @@ -84,7 +85,7 @@ func (e *events) PatchWithEventNamespace(incompleteEvent *v1.Event, data []byte) return nil, fmt.Errorf("can't patch an event with namespace '%v' in namespace '%v'", incompleteEvent.Namespace, e.ns) } result := &v1.Event{} - err := e.client.Patch(api.StrategicMergePatchType). + err := e.client.Patch(types.StrategicMergePatchType). NamespaceIfScoped(incompleteEvent.Namespace, len(incompleteEvent.Namespace) > 0). Resource("events"). Name(incompleteEvent.Name). diff --git a/pkg/client/clientset_generated/clientset/typed/core/v1/node_expansion.go b/pkg/client/clientset_generated/clientset/typed/core/v1/node_expansion.go index b76895381d..cd61419c95 100644 --- a/pkg/client/clientset_generated/clientset/typed/core/v1/node_expansion.go +++ b/pkg/client/clientset_generated/clientset/typed/core/v1/node_expansion.go @@ -17,7 +17,7 @@ limitations under the License. package v1 import ( - "k8s.io/kubernetes/pkg/api" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/api/v1" ) @@ -32,7 +32,7 @@ type NodeExpansion interface { // the node that the server returns, or an error. func (c *nodes) PatchStatus(nodeName string, data []byte) (*v1.Node, error) { result := &v1.Node{} - err := c.client.Patch(api.StrategicMergePatchType). + err := c.client.Patch(types.StrategicMergePatchType). Resource("nodes"). Name(nodeName). SubResource("status"). diff --git a/pkg/client/clientset_generated/clientset/typed/policy/v1alpha1/fake/fake_poddisruptionbudget.go b/pkg/client/clientset_generated/clientset/typed/policy/v1alpha1/fake/fake_poddisruptionbudget.go index fcd71896e4..e94772f2ba 100644 --- a/pkg/client/clientset_generated/clientset/typed/policy/v1alpha1/fake/fake_poddisruptionbudget.go +++ b/pkg/client/clientset_generated/clientset/typed/policy/v1alpha1/fake/fake_poddisruptionbudget.go @@ -117,7 +117,7 @@ func (c *FakePodDisruptionBudgets) Watch(opts v1.ListOptions) (watch.Interface, } // Patch applies the patch and returns the patched podDisruptionBudget. -func (c *FakePodDisruptionBudgets) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *v1alpha1.PodDisruptionBudget, err error) { +func (c *FakePodDisruptionBudgets) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.PodDisruptionBudget, err error) { obj, err := c.Fake. Invokes(core.NewPatchSubresourceAction(poddisruptionbudgetsResource, c.ns, name, data, subresources...), &v1alpha1.PodDisruptionBudget{}) diff --git a/pkg/client/clientset_generated/clientset/typed/policy/v1alpha1/poddisruptionbudget.go b/pkg/client/clientset_generated/clientset/typed/policy/v1alpha1/poddisruptionbudget.go index 2bed3cc46d..05e71c9a51 100644 --- a/pkg/client/clientset_generated/clientset/typed/policy/v1alpha1/poddisruptionbudget.go +++ b/pkg/client/clientset_generated/clientset/typed/policy/v1alpha1/poddisruptionbudget.go @@ -40,7 +40,7 @@ type PodDisruptionBudgetInterface interface { Get(name string) (*v1alpha1.PodDisruptionBudget, error) List(opts v1.ListOptions) (*v1alpha1.PodDisruptionBudgetList, error) Watch(opts v1.ListOptions) (watch.Interface, error) - Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *v1alpha1.PodDisruptionBudget, err error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.PodDisruptionBudget, err error) PodDisruptionBudgetExpansion } @@ -153,7 +153,7 @@ func (c *podDisruptionBudgets) Watch(opts v1.ListOptions) (watch.Interface, erro } // Patch applies the patch and returns the patched podDisruptionBudget. -func (c *podDisruptionBudgets) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (result *v1alpha1.PodDisruptionBudget, err error) { +func (c *podDisruptionBudgets) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1alpha1.PodDisruptionBudget, err error) { result = &v1alpha1.PodDisruptionBudget{} err = c.client.Patch(pt). Namespace(c.ns). diff --git a/pkg/client/clientset_generated/internalclientset/typed/core/internalversion/event_expansion.go b/pkg/client/clientset_generated/internalclientset/typed/core/internalversion/event_expansion.go index f7556b3d44..dea79fe639 100644 --- a/pkg/client/clientset_generated/internalclientset/typed/core/internalversion/event_expansion.go +++ b/pkg/client/clientset_generated/internalclientset/typed/core/internalversion/event_expansion.go @@ -20,6 +20,7 @@ import ( "fmt" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/fields" @@ -84,7 +85,7 @@ func (e *events) PatchWithEventNamespace(incompleteEvent *api.Event, data []byte return nil, fmt.Errorf("can't patch an event with namespace '%v' in namespace '%v'", incompleteEvent.Namespace, e.ns) } result := &api.Event{} - err := e.client.Patch(api.StrategicMergePatchType). + err := e.client.Patch(types.StrategicMergePatchType). NamespaceIfScoped(incompleteEvent.Namespace, len(incompleteEvent.Namespace) > 0). Resource("events"). Name(incompleteEvent.Name). diff --git a/pkg/client/clientset_generated/internalclientset/typed/core/internalversion/node_expansion.go b/pkg/client/clientset_generated/internalclientset/typed/core/internalversion/node_expansion.go index ec917502d0..b02fa083ba 100644 --- a/pkg/client/clientset_generated/internalclientset/typed/core/internalversion/node_expansion.go +++ b/pkg/client/clientset_generated/internalclientset/typed/core/internalversion/node_expansion.go @@ -16,7 +16,10 @@ limitations under the License. package internalversion -import "k8s.io/kubernetes/pkg/api" +import ( + "k8s.io/apimachinery/pkg/types" + "k8s.io/kubernetes/pkg/api" +) // The NodeExpansion interface allows manually adding extra methods to the NodeInterface. type NodeExpansion interface { @@ -29,7 +32,7 @@ type NodeExpansion interface { // the node that the server returns, or an error. func (c *nodes) PatchStatus(nodeName string, data []byte) (*api.Node, error) { result := &api.Node{} - err := c.client.Patch(api.StrategicMergePatchType). + err := c.client.Patch(types.StrategicMergePatchType). Resource("nodes"). Name(nodeName). SubResource("status"). diff --git a/pkg/client/restclient/client.go b/pkg/client/restclient/client.go index 2147ef4eb8..88653e6837 100644 --- a/pkg/client/restclient/client.go +++ b/pkg/client/restclient/client.go @@ -28,7 +28,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/kubernetes/pkg/api" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/util/flowcontrol" ) @@ -45,7 +45,7 @@ type Interface interface { Verb(verb string) *Request Post() *Request Put() *Request - Patch(pt api.PatchType) *Request + Patch(pt types.PatchType) *Request Get() *Request Delete() *Request APIVersion() schema.GroupVersion @@ -238,7 +238,7 @@ func (c *RESTClient) Put() *Request { } // Patch begins a PATCH request. Short for c.Verb("Patch"). -func (c *RESTClient) Patch(pt api.PatchType) *Request { +func (c *RESTClient) Patch(pt types.PatchType) *Request { return c.Verb("PATCH").SetHeader("Content-Type", string(pt)) } diff --git a/pkg/client/restclient/client_test.go b/pkg/client/restclient/client_test.go index bcd7ef51d0..11d019d9fc 100644 --- a/pkg/client/restclient/client_test.go +++ b/pkg/client/restclient/client_test.go @@ -31,6 +31,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/diff" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" @@ -271,7 +272,7 @@ func TestHttpMethods(t *testing.T) { t.Errorf("Delete : Object returned should not be nil") } - request = c.Patch(api.JSONPatchType) + request = c.Patch(types.JSONPatchType) if request == nil { t.Errorf("Patch : Object returned should not be nil") } diff --git a/pkg/client/restclient/fake/fake.go b/pkg/client/restclient/fake/fake.go index b9ea95f85c..4418e26c7e 100644 --- a/pkg/client/restclient/fake/fake.go +++ b/pkg/client/restclient/fake/fake.go @@ -24,6 +24,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/client/restclient" @@ -61,7 +62,7 @@ func (c *RESTClient) Put() *restclient.Request { return c.request("PUT") } -func (c *RESTClient) Patch(_ api.PatchType) *restclient.Request { +func (c *RESTClient) Patch(_ types.PatchType) *restclient.Request { return c.request("PATCH") } diff --git a/pkg/client/typed/dynamic/client.go b/pkg/client/typed/dynamic/client.go index 9e064bbb8b..8bcd4df08e 100644 --- a/pkg/client/typed/dynamic/client.go +++ b/pkg/client/typed/dynamic/client.go @@ -32,6 +32,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/watch" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" @@ -204,7 +205,7 @@ func (rc *ResourceClient) Watch(opts runtime.Object) (watch.Interface, error) { Watch() } -func (rc *ResourceClient) Patch(name string, pt api.PatchType, data []byte) (*unstructured.Unstructured, error) { +func (rc *ResourceClient) Patch(name string, pt types.PatchType, data []byte) (*unstructured.Unstructured, error) { result := new(unstructured.Unstructured) err := rc.cl.Patch(pt). NamespaceIfScoped(rc.ns, rc.resource.Namespaced). diff --git a/pkg/client/typed/dynamic/client_test.go b/pkg/client/typed/dynamic/client_test.go index d313cf59bc..69f5b450f8 100644 --- a/pkg/client/typed/dynamic/client_test.go +++ b/pkg/client/typed/dynamic/client_test.go @@ -30,8 +30,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer/streaming" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/watch" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/restclient" restclientwatch "k8s.io/kubernetes/pkg/client/restclient/watch" @@ -520,8 +520,8 @@ func TestPatch(t *testing.T) { } content := r.Header.Get("Content-Type") - if content != string(api.StrategicMergePatchType) { - t.Errorf("Patch(%q) got Content-Type %s. wanted %s", tc.name, content, api.StrategicMergePatchType) + if content != string(types.StrategicMergePatchType) { + t.Errorf("Patch(%q) got Content-Type %s. wanted %s", tc.name, content, types.StrategicMergePatchType) } data, err := ioutil.ReadAll(r.Body) @@ -540,7 +540,7 @@ func TestPatch(t *testing.T) { } defer srv.Close() - got, err := cl.Resource(resource, tc.namespace).Patch(tc.name, api.StrategicMergePatchType, tc.patch) + got, err := cl.Resource(resource, tc.namespace).Patch(tc.name, types.StrategicMergePatchType, tc.patch) if err != nil { t.Errorf("unexpected error when patching %q: %v", tc.name, err) continue diff --git a/pkg/controller/controller_utils.go b/pkg/controller/controller_utils.go index 5236461230..077549dc8c 100644 --- a/pkg/controller/controller_utils.go +++ b/pkg/controller/controller_utils.go @@ -28,6 +28,7 @@ import ( "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" @@ -377,7 +378,7 @@ type RealRSControl struct { var _ RSControlInterface = &RealRSControl{} func (r RealRSControl) PatchReplicaSet(namespace, name string, data []byte) error { - _, err := r.KubeClient.Extensions().ReplicaSets(namespace).Patch(name, api.StrategicMergePatchType, data) + _, err := r.KubeClient.Extensions().ReplicaSets(namespace).Patch(name, types.StrategicMergePatchType, data) return err } @@ -477,7 +478,7 @@ func (r RealPodControl) CreatePodsOnNode(nodeName, namespace string, template *v } func (r RealPodControl) PatchPod(namespace, name string, data []byte) error { - _, err := r.KubeClient.Core().Pods(namespace).Patch(name, api.StrategicMergePatchType, data) + _, err := r.KubeClient.Core().Pods(namespace).Patch(name, types.StrategicMergePatchType, data) return err } diff --git a/pkg/controller/garbagecollector/garbagecollector.go b/pkg/controller/garbagecollector/garbagecollector.go index 9017de6a1d..61b340b135 100644 --- a/pkg/controller/garbagecollector/garbagecollector.go +++ b/pkg/controller/garbagecollector/garbagecollector.go @@ -35,7 +35,6 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/cache" "k8s.io/kubernetes/pkg/client/typed/dynamic" @@ -660,7 +659,7 @@ func (gc *GarbageCollector) patchObject(item objectReference, patch []byte) (*un if err != nil { return nil, err } - return client.Resource(resource, item.Namespace).Patch(item.Name, api.StrategicMergePatchType, patch) + return client.Resource(resource, item.Namespace).Patch(item.Name, types.StrategicMergePatchType, patch) } func objectReferenceToUnstructured(ref objectReference) *unstructured.Unstructured { diff --git a/pkg/controller/node/testutil/test_utils.go b/pkg/controller/node/testutil/test_utils.go index 4c58bc4b8e..82c6fe2094 100644 --- a/pkg/controller/node/testutil/test_utils.go +++ b/pkg/controller/node/testutil/test_utils.go @@ -25,6 +25,7 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/watch" "k8s.io/kubernetes/pkg/api" @@ -219,7 +220,7 @@ func (m *FakeNodeHandler) Watch(opts v1.ListOptions) (watch.Interface, error) { } // Patch patches a Node in the fake store. -func (m *FakeNodeHandler) Patch(name string, pt api.PatchType, data []byte, subresources ...string) (*v1.Node, error) { +func (m *FakeNodeHandler) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (*v1.Node, error) { return nil, nil } diff --git a/pkg/genericapiserver/api/handlers/rest.go b/pkg/genericapiserver/api/handlers/rest.go index cd94669e11..1b31278a4c 100644 --- a/pkg/genericapiserver/api/handlers/rest.go +++ b/pkg/genericapiserver/api/handlers/rest.go @@ -32,6 +32,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apiserver/pkg/handlers/negotiation" "k8s.io/apiserver/pkg/request" @@ -488,7 +489,7 @@ func PatchResource(r rest.Patcher, scope RequestScope, admit admission.Interface if idx := strings.Index(contentType, ";"); idx > 0 { contentType = contentType[:idx] } - patchType := api.PatchType(contentType) + patchType := types.PatchType(contentType) patchJS, err := readBody(req.Request) if err != nil { @@ -542,7 +543,7 @@ func patchResource( versionedObj runtime.Object, patcher rest.Patcher, name string, - patchType api.PatchType, + patchType types.PatchType, patchJS []byte, namer ScopeNamer, copier runtime.ObjectCopier, @@ -637,7 +638,7 @@ func patchResource( return nil, errors.NewConflict(resource.GroupResource(), name, nil) } - newlyPatchedObjJS, err := getPatchedJS(api.StrategicMergePatchType, currentObjectJS, originalPatch, versionedObj) + newlyPatchedObjJS, err := getPatchedJS(types.StrategicMergePatchType, currentObjectJS, originalPatch, versionedObj) if err != nil { return nil, err } @@ -1078,17 +1079,17 @@ func setListSelfLink(obj runtime.Object, req *restful.Request, namer ScopeNamer) return count, err } -func getPatchedJS(patchType api.PatchType, originalJS, patchJS []byte, obj runtime.Object) ([]byte, error) { +func getPatchedJS(patchType types.PatchType, originalJS, patchJS []byte, obj runtime.Object) ([]byte, error) { switch patchType { - case api.JSONPatchType: + case types.JSONPatchType: patchObj, err := jsonpatch.DecodePatch(patchJS) if err != nil { return nil, err } return patchObj.Apply(originalJS) - case api.MergePatchType: + case types.MergePatchType: return jsonpatch.MergePatch(originalJS, patchJS) - case api.StrategicMergePatchType: + case types.StrategicMergePatchType: return strategicpatch.StrategicMergePatchData(originalJS, patchJS, obj) default: // only here as a safety net - go-restful filters content-type diff --git a/pkg/genericapiserver/api/handlers/rest_test.go b/pkg/genericapiserver/api/handlers/rest_test.go index 3ba69646cf..9eb0d28dcf 100644 --- a/pkg/genericapiserver/api/handlers/rest_test.go +++ b/pkg/genericapiserver/api/handlers/rest_test.go @@ -59,7 +59,7 @@ func TestPatchAnonymousField(t *testing.T) { patch := `{"theField": "changed!"}` expectedJS := `{"kind":"testPatchType","theField":"changed!"}` - actualBytes, err := getPatchedJS(api.StrategicMergePatchType, []byte(originalJS), []byte(patch), &testPatchType{}) + actualBytes, err := getPatchedJS(types.StrategicMergePatchType, []byte(originalJS), []byte(patch), &testPatchType{}) if err != nil { t.Fatalf("unexpected error: %v", err) } @@ -191,9 +191,9 @@ func (tc *patchTestCase) Run(t *testing.T) { resource := schema.GroupVersionResource{Group: "", Version: "v1", Resource: "pods"} versionedObj := &v1.Pod{} - for _, patchType := range []api.PatchType{api.JSONPatchType, api.MergePatchType, api.StrategicMergePatchType} { + for _, patchType := range []types.PatchType{types.JSONPatchType, types.MergePatchType, types.StrategicMergePatchType} { // TODO SUPPORT THIS! - if patchType == api.JSONPatchType { + if patchType == types.JSONPatchType { continue } t.Logf("Working with patchType %v", patchType) @@ -211,17 +211,17 @@ func (tc *patchTestCase) Run(t *testing.T) { patch := []byte{} switch patchType { - case api.JSONPatchType: + case types.JSONPatchType: continue - case api.StrategicMergePatchType: + case types.StrategicMergePatchType: patch, err = strategicpatch.CreateStrategicMergePatch(originalObjJS, changedJS, versionedObj) if err != nil { t.Errorf("%s: unexpected error: %v", tc.name, err) return } - case api.MergePatchType: + case types.MergePatchType: patch, err = jsonpatch.CreateMergePatch(originalObjJS, changedJS) if err != nil { t.Errorf("%s: unexpected error: %v", tc.name, err) diff --git a/pkg/genericapiserver/api/installer.go b/pkg/genericapiserver/api/installer.go index 7731f29cc3..37f0330b41 100644 --- a/pkg/genericapiserver/api/installer.go +++ b/pkg/genericapiserver/api/installer.go @@ -34,10 +34,10 @@ import ( "k8s.io/apimachinery/pkg/conversion" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" "k8s.io/apiserver/pkg/handlers/negotiation" "k8s.io/apiserver/pkg/metrics" "k8s.io/apiserver/pkg/request" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" "k8s.io/kubernetes/pkg/genericapiserver/api/handlers" "k8s.io/kubernetes/pkg/genericapiserver/api/rest" @@ -638,7 +638,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag route := ws.PATCH(action.Path).To(handler). Doc(doc). Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")). - Consumes(string(api.JSONPatchType), string(api.MergePatchType), string(api.StrategicMergePatchType)). + Consumes(string(types.JSONPatchType), string(types.MergePatchType), string(types.StrategicMergePatchType)). Operation("patch"+namespaced+kind+strings.Title(subresource)+operationSuffix). Produces(append(storageMeta.ProducesMIMETypes(action.Verb), mediaTypes...)...). Returns(http.StatusOK, "OK", versionedObject). diff --git a/pkg/kubectl/cmd/annotate.go b/pkg/kubectl/cmd/annotate.go index 78d2e0fc9c..d207ee3aa4 100644 --- a/pkg/kubectl/cmd/annotate.go +++ b/pkg/kubectl/cmd/annotate.go @@ -26,7 +26,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/kubernetes/pkg/api" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -254,7 +254,7 @@ func (o AnnotateOptions) RunAnnotate(f cmdutil.Factory, cmd *cobra.Command) erro helper := resource.NewHelper(client, mapping) if createdPatch { - outputObj, err = helper.Patch(namespace, name, api.StrategicMergePatchType, patchBytes) + outputObj, err = helper.Patch(namespace, name, types.StrategicMergePatchType, patchBytes) } else { outputObj, err = helper.Replace(namespace, name, false, obj) } diff --git a/pkg/kubectl/cmd/apply.go b/pkg/kubectl/cmd/apply.go index b79b932282..a50078837d 100644 --- a/pkg/kubectl/cmd/apply.go +++ b/pkg/kubectl/cmd/apply.go @@ -30,6 +30,7 @@ import ( "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/kubernetes/pkg/api" @@ -293,7 +294,7 @@ func RunApply(f cmdutil.Factory, cmd *cobra.Command, out, errOut io.Writer, opti if err != nil { return err } - _, err = helper.Patch(info.Namespace, info.Name, api.StrategicMergePatchType, patch) + _, err = helper.Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch) if err != nil { return cmdutil.AddSourceToErr(fmt.Sprintf("applying patch:\n%s\nto:\n%v\nfor:", patch, info), info.Source, err) } @@ -555,7 +556,7 @@ func (p *patcher) patchSimple(obj runtime.Object, modified []byte, source, names return nil, cmdutil.AddSourceToErr(fmt.Sprintf(format, original, modified, current), source, err) } - _, err = p.helper.Patch(namespace, name, api.StrategicMergePatchType, patch) + _, err = p.helper.Patch(namespace, name, types.StrategicMergePatchType, patch) return patch, err } diff --git a/pkg/kubectl/cmd/edit.go b/pkg/kubectl/cmd/edit.go index baa5d9284b..682247d9db 100644 --- a/pkg/kubectl/cmd/edit.go +++ b/pkg/kubectl/cmd/edit.go @@ -32,6 +32,7 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/apimachinery/pkg/util/yaml" "k8s.io/kubernetes/pkg/api" @@ -500,7 +501,7 @@ func visitToPatch( } results.version = defaultVersion - patched, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, api.StrategicMergePatchType, patch) + patched, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch) if err != nil { fmt.Fprintln(out, results.addError(err, info)) return nil diff --git a/pkg/kubectl/cmd/label.go b/pkg/kubectl/cmd/label.go index 58da6e35de..b663b48311 100644 --- a/pkg/kubectl/cmd/label.go +++ b/pkg/kubectl/cmd/label.go @@ -27,9 +27,9 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/validation" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -260,7 +260,7 @@ func (o *LabelOptions) RunLabel(f cmdutil.Factory, cmd *cobra.Command) error { helper := resource.NewHelper(client, mapping) if createdPatch { - outputObj, err = helper.Patch(namespace, name, api.StrategicMergePatchType, patchBytes) + outputObj, err = helper.Patch(namespace, name, types.StrategicMergePatchType, patchBytes) } else { outputObj, err = helper.Replace(namespace, name, false, obj) } diff --git a/pkg/kubectl/cmd/patch.go b/pkg/kubectl/cmd/patch.go index 2741ec887a..bc8a9c74b3 100644 --- a/pkg/kubectl/cmd/patch.go +++ b/pkg/kubectl/cmd/patch.go @@ -27,6 +27,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/yaml" "k8s.io/kubernetes/pkg/api" @@ -37,7 +38,7 @@ import ( "k8s.io/kubernetes/pkg/util/strategicpatch" ) -var patchTypes = map[string]api.PatchType{"json": api.JSONPatchType, "merge": api.MergePatchType, "strategic": api.StrategicMergePatchType} +var patchTypes = map[string]types.PatchType{"json": types.JSONPatchType, "merge": types.MergePatchType, "strategic": types.StrategicMergePatchType} // PatchOptions is the start of the data required to perform the operation. As new fields are added, add them here instead of // referencing the cmd.Flags() @@ -124,7 +125,7 @@ func RunPatch(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []strin return err } - patchType := api.StrategicMergePatchType + patchType := types.StrategicMergePatchType patchTypeString := strings.ToLower(cmdutil.GetFlagString(cmd, "type")) if len(patchTypeString) != 0 { ok := false @@ -182,7 +183,7 @@ func RunPatch(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []strin // record hint is likely to be invalid anyway, so avoid the bad hint patch, err := cmdutil.ChangeResourcePatch(info, f.Command()) if err == nil { - helper.Patch(info.Namespace, info.Name, api.StrategicMergePatchType, patch) + helper.Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch) } } count++ @@ -247,19 +248,19 @@ func RunPatch(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []strin return nil } -func getPatchedJSON(patchType api.PatchType, originalJS, patchJS []byte, obj runtime.Object) ([]byte, error) { +func getPatchedJSON(patchType types.PatchType, originalJS, patchJS []byte, obj runtime.Object) ([]byte, error) { switch patchType { - case api.JSONPatchType: + case types.JSONPatchType: patchObj, err := jsonpatch.DecodePatch(patchJS) if err != nil { return nil, err } return patchObj.Apply(originalJS) - case api.MergePatchType: + case types.MergePatchType: return jsonpatch.MergePatch(originalJS, patchJS) - case api.StrategicMergePatchType: + case types.StrategicMergePatchType: return strategicpatch.StrategicMergePatchData(originalJS, patchJS, obj) default: diff --git a/pkg/kubectl/cmd/rollout/rollout_pause.go b/pkg/kubectl/cmd/rollout/rollout_pause.go index 6e820a022e..66f6d6a6bc 100644 --- a/pkg/kubectl/cmd/rollout/rollout_pause.go +++ b/pkg/kubectl/cmd/rollout/rollout_pause.go @@ -24,8 +24,8 @@ import ( "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/set" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" @@ -144,7 +144,7 @@ func (o PauseConfig) RunPause() error { continue } - obj, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, api.StrategicMergePatchType, patch.Patch) + obj, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch.Patch) if err != nil { allErrs = append(allErrs, fmt.Errorf("failed to patch: %v", err)) continue diff --git a/pkg/kubectl/cmd/rollout/rollout_resume.go b/pkg/kubectl/cmd/rollout/rollout_resume.go index ff83ea56ae..87577c0093 100644 --- a/pkg/kubectl/cmd/rollout/rollout_resume.go +++ b/pkg/kubectl/cmd/rollout/rollout_resume.go @@ -24,8 +24,8 @@ import ( "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/set" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" @@ -149,7 +149,7 @@ func (o ResumeConfig) RunResume() error { continue } - obj, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, api.StrategicMergePatchType, patch.Patch) + obj, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch.Patch) if err != nil { allErrs = append(allErrs, fmt.Errorf("failed to patch: %v", err)) continue diff --git a/pkg/kubectl/cmd/scale.go b/pkg/kubectl/cmd/scale.go index c7f266b70d..ff34ec50b8 100644 --- a/pkg/kubectl/cmd/scale.go +++ b/pkg/kubectl/cmd/scale.go @@ -23,7 +23,7 @@ import ( "github.com/spf13/cobra" - "k8s.io/kubernetes/pkg/api" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util" @@ -174,7 +174,7 @@ func RunScale(f cmdutil.Factory, out io.Writer, cmd *cobra.Command, args []strin return err } helper := resource.NewHelper(client, mapping) - _, err = helper.Patch(info.Namespace, info.Name, api.StrategicMergePatchType, patchBytes) + _, err = helper.Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patchBytes) if err != nil { return err } diff --git a/pkg/kubectl/cmd/set/set_image.go b/pkg/kubectl/cmd/set/set_image.go index 6e4a78d711..b079418edc 100644 --- a/pkg/kubectl/cmd/set/set_image.go +++ b/pkg/kubectl/cmd/set/set_image.go @@ -23,6 +23,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" @@ -228,7 +229,7 @@ func (o *ImageOptions) Run() error { } // patch the change - obj, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, api.StrategicMergePatchType, patch.Patch) + obj, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch.Patch) if err != nil { allErrs = append(allErrs, fmt.Errorf("failed to patch image update to pod template: %v\n", err)) continue @@ -238,7 +239,7 @@ func (o *ImageOptions) Run() error { // record this change (for rollout history) if o.Record || cmdutil.ContainsChangeCause(info) { if patch, err := cmdutil.ChangeResourcePatch(info, o.ChangeCause); err == nil { - if obj, err = resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, api.StrategicMergePatchType, patch); err != nil { + if obj, err = resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch); err != nil { fmt.Fprintf(o.Err, "WARNING: changes to %s/%s can't be recorded: %v\n", info.Mapping.Resource, info.Name, err) } } diff --git a/pkg/kubectl/cmd/set/set_resources.go b/pkg/kubectl/cmd/set/set_resources.go index 4233306bc4..2920dc70a5 100644 --- a/pkg/kubectl/cmd/set/set_resources.go +++ b/pkg/kubectl/cmd/set/set_resources.go @@ -26,6 +26,7 @@ import ( "k8s.io/kubernetes/pkg/api" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/kubernetes/pkg/kubectl" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" @@ -223,7 +224,7 @@ func (o *ResourcesOptions) Run() error { return o.PrintObject(o.Cmd, o.Mapper, info.Object, o.Out) } - obj, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, api.StrategicMergePatchType, patch.Patch) + obj, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch.Patch) if err != nil { allErrs = append(allErrs, fmt.Errorf("failed to patch limit update to pod template %v\n", err)) continue diff --git a/pkg/kubectl/cmd/set/set_selector.go b/pkg/kubectl/cmd/set/set_selector.go index 5ab92f777b..2d2f339add 100644 --- a/pkg/kubectl/cmd/set/set_selector.go +++ b/pkg/kubectl/cmd/set/set_selector.go @@ -25,6 +25,7 @@ import ( "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/validation" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/kubectl/cmd/templates" @@ -175,7 +176,7 @@ func (o *SelectorOptions) RunSelector() error { return nil } - patched, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, api.StrategicMergePatchType, patch.Patch) + patched, err := resource.NewHelper(info.Client, info.Mapping).Patch(info.Namespace, info.Name, types.StrategicMergePatchType, patch.Patch) if err != nil { return err } diff --git a/pkg/kubectl/cmd/taint.go b/pkg/kubectl/cmd/taint.go index ba743de912..2049d88d05 100644 --- a/pkg/kubectl/cmd/taint.go +++ b/pkg/kubectl/cmd/taint.go @@ -27,6 +27,7 @@ import ( "github.com/spf13/cobra" "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/validation" @@ -341,7 +342,7 @@ func (o TaintOptions) RunTaint() error { var outputObj runtime.Object if createdPatch { - outputObj, err = helper.Patch(namespace, name, api.StrategicMergePatchType, patchBytes) + outputObj, err = helper.Patch(namespace, name, types.StrategicMergePatchType, patchBytes) } else { outputObj, err = helper.Replace(namespace, name, false, obj) } diff --git a/pkg/kubectl/interfaces.go b/pkg/kubectl/interfaces.go index f8acb1ea0d..4c2b73c524 100644 --- a/pkg/kubectl/interfaces.go +++ b/pkg/kubectl/interfaces.go @@ -17,7 +17,7 @@ limitations under the License. package kubectl import ( - "k8s.io/kubernetes/pkg/api" + "k8s.io/apimachinery/pkg/types" client "k8s.io/kubernetes/pkg/client/restclient" ) @@ -26,7 +26,7 @@ import ( type RESTClient interface { Get() *client.Request Post() *client.Request - Patch(api.PatchType) *client.Request + Patch(types.PatchType) *client.Request Delete() *client.Request Put() *client.Request } diff --git a/pkg/kubectl/resource/helper.go b/pkg/kubectl/resource/helper.go index 6da2fd61e9..a7aa39eb1b 100644 --- a/pkg/kubectl/resource/helper.go +++ b/pkg/kubectl/resource/helper.go @@ -22,8 +22,8 @@ import ( "k8s.io/apimachinery/pkg/api/meta" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/watch" - "k8s.io/kubernetes/pkg/api" ) // Helper provides methods for retrieving or mutating a RESTful @@ -123,7 +123,7 @@ func (m *Helper) Create(namespace string, modify bool, obj runtime.Object) (runt func (m *Helper) createResource(c RESTClient, resource, namespace string, obj runtime.Object) (runtime.Object, error) { return c.Post().NamespaceIfScoped(namespace, m.NamespaceScoped).Resource(resource).Body(obj).Do().Get() } -func (m *Helper) Patch(namespace, name string, pt api.PatchType, data []byte) (runtime.Object, error) { +func (m *Helper) Patch(namespace, name string, pt types.PatchType, data []byte) (runtime.Object, error) { return m.RESTClient.Patch(pt). NamespaceIfScoped(namespace, m.NamespaceScoped). Resource(m.Resource). diff --git a/pkg/kubectl/resource/interfaces.go b/pkg/kubectl/resource/interfaces.go index 78879ba805..796083c843 100644 --- a/pkg/kubectl/resource/interfaces.go +++ b/pkg/kubectl/resource/interfaces.go @@ -18,7 +18,7 @@ package resource import ( "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/kubernetes/pkg/api" + "k8s.io/apimachinery/pkg/types" client "k8s.io/kubernetes/pkg/client/restclient" ) @@ -27,7 +27,7 @@ import ( type RESTClient interface { Get() *client.Request Post() *client.Request - Patch(api.PatchType) *client.Request + Patch(types.PatchType) *client.Request Delete() *client.Request Put() *client.Request } diff --git a/pkg/util/node/node.go b/pkg/util/node/node.go index 8e85e8359e..a37e8665f5 100644 --- a/pkg/util/node/node.go +++ b/pkg/util/node/node.go @@ -177,7 +177,7 @@ func PatchNodeStatus(c clientset.Interface, nodeName types.NodeName, oldNode *v1 return nil, fmt.Errorf("failed to create patch for node %q: %v", nodeName, err) } - updatedNode, err := c.Core().Nodes().Patch(string(nodeName), api.StrategicMergePatchType, patchBytes, "status") + updatedNode, err := c.Core().Nodes().Patch(string(nodeName), types.StrategicMergePatchType, patchBytes, "status") if err != nil { return nil, fmt.Errorf("failed to patch status %q for node %q: %v", patchBytes, nodeName, err) } diff --git a/staging/src/k8s.io/apimachinery/pkg/types/patch.go b/staging/src/k8s.io/apimachinery/pkg/types/patch.go new file mode 100644 index 0000000000..d522d1dbdc --- /dev/null +++ b/staging/src/k8s.io/apimachinery/pkg/types/patch.go @@ -0,0 +1,28 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package types + +// Similarly to above, these are constants to support HTTP PATCH utilized by +// both the client and server that didn't make sense for a whole package to be +// dedicated to. +type PatchType string + +const ( + JSONPatchType PatchType = "application/json-patch+json" + MergePatchType PatchType = "application/merge-patch+json" + StrategicMergePatchType PatchType = "application/strategic-merge-patch+json" +) diff --git a/test/e2e/node_problem_detector.go b/test/e2e/node_problem_detector.go index c34ff3b931..4c8a504c61 100644 --- a/test/e2e/node_problem_detector.go +++ b/test/e2e/node_problem_detector.go @@ -25,8 +25,8 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" "k8s.io/apiserver/pkg/authentication/serviceaccount" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" rbacv1alpha1 "k8s.io/kubernetes/pkg/apis/rbac/v1alpha1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" @@ -385,7 +385,7 @@ var _ = framework.KubeDescribe("NodeProblemDetector", func() { Expect(c.Core().Events(eventNamespace).DeleteCollection(v1.NewDeleteOptions(0), eventListOptions)).To(Succeed()) By("Clean up the node condition") patch := []byte(fmt.Sprintf(`{"status":{"conditions":[{"$patch":"delete","type":"%s"}]}}`, condition)) - c.Core().RESTClient().Patch(api.StrategicMergePatchType).Resource("nodes").Name(node.Name).SubResource("status").Body(patch).Do() + c.Core().RESTClient().Patch(types.StrategicMergePatchType).Resource("nodes").Name(node.Name).SubResource("status").Body(patch).Do() By("Clean up the temporary directory") framework.IssueSSHCommand(fmt.Sprintf("rm -r %s", tmpDir), framework.TestContext.Provider, node) }) diff --git a/test/e2e/opaque_resource.go b/test/e2e/opaque_resource.go index d2f91ccbdc..602c5ad9b4 100644 --- a/test/e2e/opaque_resource.go +++ b/test/e2e/opaque_resource.go @@ -23,9 +23,9 @@ import ( "time" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/cache" @@ -228,7 +228,7 @@ var _ = framework.KubeDescribe("Opaque resources [Feature:OpaqueResources]", fun func addOpaqueResource(f *framework.Framework, nodeName string, opaqueResName v1.ResourceName) { action := func() error { patch := []byte(fmt.Sprintf(`[{"op": "add", "path": "/status/capacity/%s", "value": "5"}]`, escapeForJSONPatch(opaqueResName))) - return f.ClientSet.Core().RESTClient().Patch(api.JSONPatchType).Resource("nodes").Name(nodeName).SubResource("status").Body(patch).Do().Error() + return f.ClientSet.Core().RESTClient().Patch(types.JSONPatchType).Resource("nodes").Name(nodeName).SubResource("status").Body(patch).Do().Error() } predicate := func(n *v1.Node) bool { capacity, foundCap := n.Status.Capacity[opaqueResName] @@ -245,7 +245,7 @@ func addOpaqueResource(f *framework.Framework, nodeName string, opaqueResName v1 func removeOpaqueResource(f *framework.Framework, nodeName string, opaqueResName v1.ResourceName) { action := func() error { patch := []byte(fmt.Sprintf(`[{"op": "remove", "path": "/status/capacity/%s"}]`, escapeForJSONPatch(opaqueResName))) - f.ClientSet.Core().RESTClient().Patch(api.JSONPatchType).Resource("nodes").Name(nodeName).SubResource("status").Body(patch).Do() + f.ClientSet.Core().RESTClient().Patch(types.JSONPatchType).Resource("nodes").Name(nodeName).SubResource("status").Body(patch).Do() return nil // Ignore error -- the opaque resource may not exist. } predicate := func(n *v1.Node) bool { diff --git a/test/integration/client/client_test.go b/test/integration/client/client_test.go index a839c4b907..d7d5f0a957 100644 --- a/test/integration/client/client_test.go +++ b/test/integration/client/client_test.go @@ -32,6 +32,7 @@ import ( "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" "k8s.io/kubernetes/pkg/api" @@ -239,23 +240,23 @@ func TestPatch(t *testing.T) { t.Fatalf("Failed creating patchpods: %v", err) } - patchBodies := map[schema.GroupVersion]map[api.PatchType]struct { + patchBodies := map[schema.GroupVersion]map[types.PatchType]struct { AddLabelBody []byte RemoveLabelBody []byte RemoveAllLabelsBody []byte }{ v1.SchemeGroupVersion: { - api.JSONPatchType: { + types.JSONPatchType: { []byte(`[{"op":"add","path":"/metadata/labels","value":{"foo":"bar","baz":"qux"}}]`), []byte(`[{"op":"remove","path":"/metadata/labels/foo"}]`), []byte(`[{"op":"remove","path":"/metadata/labels"}]`), }, - api.MergePatchType: { + types.MergePatchType: { []byte(`{"metadata":{"labels":{"foo":"bar","baz":"qux"}}}`), []byte(`{"metadata":{"labels":{"foo":null}}}`), []byte(`{"metadata":{"labels":null}}`), }, - api.StrategicMergePatchType: { + types.StrategicMergePatchType: { []byte(`{"metadata":{"labels":{"foo":"bar","baz":"qux"}}}`), []byte(`{"metadata":{"labels":{"foo":null}}}`), []byte(`{"metadata":{"labels":{"$patch":"replace"}}}`), @@ -265,7 +266,7 @@ func TestPatch(t *testing.T) { pb := patchBodies[c.Core().RESTClient().APIVersion()] - execPatch := func(pt api.PatchType, body []byte) error { + execPatch := func(pt types.PatchType, body []byte) error { return c.Core().RESTClient().Patch(pt). Resource(resource). Namespace(ns.Name). @@ -339,7 +340,7 @@ func TestPatchWithCreateOnUpdate(t *testing.T) { } patchEndpoint := func(json []byte) (runtime.Object, error) { - return c.Core().RESTClient().Patch(api.MergePatchType).Resource("endpoints").Namespace(ns.Name).Name("patchendpoint").Body(json).Do().Get() + return c.Core().RESTClient().Patch(types.MergePatchType).Resource("endpoints").Namespace(ns.Name).Name("patchendpoint").Body(json).Do().Get() } // Make sure patch doesn't get to CreateOnUpdate diff --git a/test/integration/replicaset/replicaset_test.go b/test/integration/replicaset/replicaset_test.go index 30ad4c393a..a94b65238d 100644 --- a/test/integration/replicaset/replicaset_test.go +++ b/test/integration/replicaset/replicaset_test.go @@ -26,8 +26,8 @@ import ( "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/apis/extensions/v1beta1" "k8s.io/kubernetes/pkg/client/cache" @@ -320,7 +320,7 @@ func TestUpdateSelectorToAdopt(t *testing.T) { // change the rs's selector to match both pods patch := `{"spec":{"selector":{"matchLabels": {"uniqueKey":null}}}}` rsClient := clientSet.Extensions().ReplicaSets(ns.Name) - rs, err := rsClient.Patch(rs.Name, api.StrategicMergePatchType, []byte(patch)) + rs, err := rsClient.Patch(rs.Name, types.StrategicMergePatchType, []byte(patch)) if err != nil { t.Fatalf("Failed to patch replica set: %v", err) } @@ -359,7 +359,7 @@ func TestUpdateSelectorToRemoveControllerRef(t *testing.T) { // change the rs's selector to match both pods patch := `{"spec":{"selector":{"matchLabels": {"uniqueKey":"1"}},"template":{"metadata":{"labels":{"uniqueKey":"1"}}}}}` rsClient := clientSet.Extensions().ReplicaSets(ns.Name) - rs, err := rsClient.Patch(rs.Name, api.StrategicMergePatchType, []byte(patch)) + rs, err := rsClient.Patch(rs.Name, types.StrategicMergePatchType, []byte(patch)) if err != nil { t.Fatalf("Failed to patch replica set: %v", err) } @@ -403,7 +403,7 @@ func TestUpdateLabelToRemoveControllerRef(t *testing.T) { // change the rs's selector to match both pods patch := `{"metadata":{"labels":{"name":null}}}` podClient := clientSet.Core().Pods(ns.Name) - pod2, err := podClient.Patch(pod2.Name, api.StrategicMergePatchType, []byte(patch)) + pod2, err := podClient.Patch(pod2.Name, types.StrategicMergePatchType, []byte(patch)) if err != nil { t.Fatalf("Failed to patch pod2: %v", err) } @@ -451,7 +451,7 @@ func TestUpdateLabelToBeAdopted(t *testing.T) { // change the rs's selector to match both pods patch := `{"metadata":{"labels":{"uniqueKey":"1"}}}` podClient := clientSet.Core().Pods(ns.Name) - pod2, err := podClient.Patch(pod2.Name, api.StrategicMergePatchType, []byte(patch)) + pod2, err := podClient.Patch(pod2.Name, types.StrategicMergePatchType, []byte(patch)) if err != nil { t.Fatalf("Failed to patch pod2: %v", err) } diff --git a/test/integration/replicationcontroller/replicationcontroller_test.go b/test/integration/replicationcontroller/replicationcontroller_test.go index 47a6ddc7fa..f1819832db 100644 --- a/test/integration/replicationcontroller/replicationcontroller_test.go +++ b/test/integration/replicationcontroller/replicationcontroller_test.go @@ -26,8 +26,8 @@ import ( "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" - "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/cache" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" @@ -307,7 +307,7 @@ func TestUpdateSelectorToAdopt(t *testing.T) { // change the rc's selector to match both pods patch := `{"spec":{"selector":{"uniqueKey":null}}}` rcClient := clientSet.Core().ReplicationControllers(ns.Name) - rc, err := rcClient.Patch(rc.Name, api.StrategicMergePatchType, []byte(patch)) + rc, err := rcClient.Patch(rc.Name, types.StrategicMergePatchType, []byte(patch)) if err != nil { t.Fatalf("Failed to patch replication controller: %v", err) } @@ -344,7 +344,7 @@ func TestUpdateSelectorToRemoveControllerRef(t *testing.T) { // change the rc's selector to match both pods patch := `{"spec":{"selector":{"uniqueKey":"1"},"template":{"metadata":{"labels":{"uniqueKey":"1"}}}}}` rcClient := clientSet.Core().ReplicationControllers(ns.Name) - rc, err := rcClient.Patch(rc.Name, api.StrategicMergePatchType, []byte(patch)) + rc, err := rcClient.Patch(rc.Name, types.StrategicMergePatchType, []byte(patch)) if err != nil { t.Fatalf("Failed to patch replication controller: %v", err) } @@ -386,7 +386,7 @@ func TestUpdateLabelToRemoveControllerRef(t *testing.T) { // change the rc's selector to match both pods patch := `{"metadata":{"labels":{"name":null}}}` podClient := clientSet.Core().Pods(ns.Name) - pod2, err := podClient.Patch(pod2.Name, api.StrategicMergePatchType, []byte(patch)) + pod2, err := podClient.Patch(pod2.Name, types.StrategicMergePatchType, []byte(patch)) if err != nil { t.Fatalf("Failed to patch pod2: %v", err) } @@ -432,7 +432,7 @@ func TestUpdateLabelToBeAdopted(t *testing.T) { // change the rc's selector to match both pods patch := `{"metadata":{"labels":{"uniqueKey":"1"}}}` podClient := clientSet.Core().Pods(ns.Name) - pod2, err := podClient.Patch(pod2.Name, api.StrategicMergePatchType, []byte(patch)) + pod2, err := podClient.Patch(pod2.Name, types.StrategicMergePatchType, []byte(patch)) if err != nil { t.Fatalf("Failed to patch pod2: %v", err) } diff --git a/test/utils/density_utils.go b/test/utils/density_utils.go index af1a81a9ab..3af3e9276f 100644 --- a/test/utils/density_utils.go +++ b/test/utils/density_utils.go @@ -24,7 +24,7 @@ import ( "github.com/golang/glog" apierrs "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubernetes/pkg/api" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" ) @@ -42,7 +42,7 @@ func AddLabelsToNode(c clientset.Interface, nodeName string, labels map[string]s patch := fmt.Sprintf(`{"metadata":{"labels":%v}}`, labelString) var err error for attempt := 0; attempt < retries; attempt++ { - _, err = c.Core().Nodes().Patch(nodeName, api.MergePatchType, []byte(patch)) + _, err = c.Core().Nodes().Patch(nodeName, types.MergePatchType, []byte(patch)) if err != nil { if !apierrs.IsConflict(err) { return err diff --git a/test/utils/runners.go b/test/utils/runners.go index 945765a5ae..d9dce91ec9 100644 --- a/test/utils/runners.go +++ b/test/utils/runners.go @@ -27,6 +27,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/kubernetes/pkg/api" @@ -826,7 +827,7 @@ func DoPrepareNode(client clientset.Interface, node *v1.Node, strategy PrepareNo return nil } for attempt := 0; attempt < retries; attempt++ { - if _, err = client.Core().Nodes().Patch(node.Name, api.MergePatchType, []byte(patch)); err == nil { + if _, err = client.Core().Nodes().Patch(node.Name, types.MergePatchType, []byte(patch)); err == nil { return nil } if !apierrs.IsConflict(err) {