From 10259c959e9f20668659f7e20251a217b51c6355 Mon Sep 17 00:00:00 2001 From: jennybuckley Date: Mon, 11 Mar 2019 23:07:21 -0700 Subject: [PATCH] Fix int/float apply bug --- .../handlers/fieldmanager/internal/typeconverter.go | 7 ++++++- .../fieldmanager/internal/typeconverter_test.go | 2 -- test/integration/apiserver/apply/apply_test.go | 13 +++++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/typeconverter.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/typeconverter.go index 80ac84128f..e80e5634bc 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/typeconverter.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/typeconverter.go @@ -105,7 +105,12 @@ func (c *typeConverter) YAMLToTyped(from []byte) (typed.TypedValue, error) { return nil, fmt.Errorf("error decoding YAML: %v", err) } - return c.ObjectToTyped(unstructured) + gvk := unstructured.GetObjectKind().GroupVersionKind() + t := c.parser.Type(gvk) + if t == nil { + return nil, fmt.Errorf("no corresponding type for %v", gvk) + } + return t.FromYAML(typed.YAMLObject(string(from))) } func (c *typeConverter) TypedToObject(value typed.TypedValue) (runtime.Object, error) { diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/typeconverter_test.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/typeconverter_test.go index c36d686545..8e41f07960 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/typeconverter_test.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/typeconverter_test.go @@ -68,7 +68,6 @@ metadata: labels: app: nginx spec: - replicas: 3 selector: matchLabels: app: nginx @@ -91,7 +90,6 @@ metadata: labels: app: nginx spec: - replicas: 3 selector: matchLabels: app: nginx diff --git a/test/integration/apiserver/apply/apply_test.go b/test/integration/apiserver/apply/apply_test.go index d0787190fa..e0858940c8 100644 --- a/test/integration/apiserver/apply/apply_test.go +++ b/test/integration/apiserver/apply/apply_test.go @@ -119,6 +119,19 @@ func TestApplyAlsoCreates(t *testing.T) { if err != nil { t.Fatalf("Failed to retrieve object: %v", err) } + + // Test that we can re apply with a different field manager and don't get conflicts + _, err = client.CoreV1().RESTClient().Patch(types.ApplyPatchType). + Namespace("default"). + Resource(tc.resource). + Name(tc.name). + Param("fieldManager", "apply_test_2"). + Body([]byte(tc.body)). + Do(). + Get() + if err != nil { + t.Fatalf("Failed to re-apply object using Apply patch: %v", err) + } } }