Skip to content

Commit e7f8308

Browse files
committed
Add Merge patch type and deprecate ConstantPatch in favor of RawPatch
Signed-off-by: Adrian Orive <[email protected]>
1 parent a0e9c1d commit e7f8308

File tree

3 files changed

+39
-13
lines changed

3 files changed

+39
-13
lines changed

pkg/client/client_test.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1146,7 +1146,7 @@ var _ = Describe("Client", func() {
11461146
Expect(err).NotTo(HaveOccurred())
11471147

11481148
By("patching the Deployment")
1149-
err = cl.Patch(context.TODO(), dep, client.ConstantPatch(types.MergePatchType, mergePatch))
1149+
err = cl.Patch(context.TODO(), dep, client.RawPatch(types.MergePatchType, mergePatch))
11501150
Expect(err).NotTo(HaveOccurred())
11511151

11521152
By("validating patched Deployment has new annotation")
@@ -1169,7 +1169,7 @@ var _ = Describe("Client", func() {
11691169

11701170
By("patching the Deployment")
11711171
dep.SetGroupVersionKind(depGvk)
1172-
err = cl.Patch(context.TODO(), dep, client.ConstantPatch(types.MergePatchType, mergePatch))
1172+
err = cl.Patch(context.TODO(), dep, client.RawPatch(types.MergePatchType, mergePatch))
11731173
Expect(err).NotTo(HaveOccurred())
11741174

11751175
By("validating updated Deployment has type information")
@@ -1189,7 +1189,7 @@ var _ = Describe("Client", func() {
11891189

11901190
By("patching the Node")
11911191
nodeName := node.Name
1192-
err = cl.Patch(context.TODO(), node, client.ConstantPatch(types.MergePatchType, mergePatch))
1192+
err = cl.Patch(context.TODO(), node, client.RawPatch(types.MergePatchType, mergePatch))
11931193
Expect(err).NotTo(HaveOccurred())
11941194

11951195
By("validating the Node no longer exists")
@@ -1207,7 +1207,7 @@ var _ = Describe("Client", func() {
12071207
Expect(cl).NotTo(BeNil())
12081208

12091209
By("Patching node before it is ever created")
1210-
err = cl.Patch(context.TODO(), node, client.ConstantPatch(types.MergePatchType, mergePatch))
1210+
err = cl.Patch(context.TODO(), node, client.RawPatch(types.MergePatchType, mergePatch))
12111211
Expect(err).To(HaveOccurred())
12121212

12131213
close(done)
@@ -1229,7 +1229,7 @@ var _ = Describe("Client", func() {
12291229
Expect(err).NotTo(HaveOccurred())
12301230

12311231
By("patching the Deployment fails")
1232-
err = cl.Patch(context.TODO(), dep, client.ConstantPatch(types.MergePatchType, mergePatch))
1232+
err = cl.Patch(context.TODO(), dep, client.RawPatch(types.MergePatchType, mergePatch))
12331233
Expect(err).To(HaveOccurred())
12341234
Expect(err.Error()).To(ContainSubstring("no kind is registered for the type"))
12351235

@@ -1251,7 +1251,7 @@ var _ = Describe("Client", func() {
12511251
Expect(err).NotTo(HaveOccurred())
12521252

12531253
By("patching the Deployment with dry-run")
1254-
err = cl.Patch(context.TODO(), dep, client.ConstantPatch(types.MergePatchType, mergePatch), client.PatchDryRunAll)
1254+
err = cl.Patch(context.TODO(), dep, client.RawPatch(types.MergePatchType, mergePatch), client.PatchDryRunAll)
12551255
Expect(err).NotTo(HaveOccurred())
12561256

12571257
By("validating patched Deployment doesn't have the new annotation")
@@ -1280,7 +1280,7 @@ var _ = Describe("Client", func() {
12801280
Kind: "Deployment",
12811281
Version: "v1",
12821282
})
1283-
err = cl.Patch(context.TODO(), u, client.ConstantPatch(types.MergePatchType, mergePatch))
1283+
err = cl.Patch(context.TODO(), u, client.RawPatch(types.MergePatchType, mergePatch))
12841284
Expect(err).NotTo(HaveOccurred())
12851285

12861286
By("validating patched Deployment has new annotation")
@@ -1305,7 +1305,7 @@ var _ = Describe("Client", func() {
13051305
u := &unstructured.Unstructured{}
13061306
Expect(scheme.Convert(dep, u, nil)).To(Succeed())
13071307
u.SetGroupVersionKind(depGvk)
1308-
err = cl.Patch(context.TODO(), u, client.ConstantPatch(types.MergePatchType, mergePatch))
1308+
err = cl.Patch(context.TODO(), u, client.RawPatch(types.MergePatchType, mergePatch))
13091309
Expect(err).NotTo(HaveOccurred())
13101310

13111311
By("validating updated Deployment has type information")
@@ -1332,7 +1332,7 @@ var _ = Describe("Client", func() {
13321332
Kind: "Node",
13331333
Version: "v1",
13341334
})
1335-
err = cl.Patch(context.TODO(), u, client.ConstantPatch(types.MergePatchType, mergePatch))
1335+
err = cl.Patch(context.TODO(), u, client.RawPatch(types.MergePatchType, mergePatch))
13361336
Expect(err).NotTo(HaveOccurred())
13371337

13381338
By("validating patched Node has new annotation")
@@ -1357,7 +1357,7 @@ var _ = Describe("Client", func() {
13571357
Kind: "Node",
13581358
Version: "v1",
13591359
})
1360-
err = cl.Patch(context.TODO(), node, client.ConstantPatch(types.MergePatchType, mergePatch))
1360+
err = cl.Patch(context.TODO(), node, client.RawPatch(types.MergePatchType, mergePatch))
13611361
Expect(err).To(HaveOccurred())
13621362

13631363
close(done)
@@ -1382,7 +1382,7 @@ var _ = Describe("Client", func() {
13821382
Kind: "Deployment",
13831383
Version: "v1",
13841384
})
1385-
err = cl.Patch(context.TODO(), u, client.ConstantPatch(types.MergePatchType, mergePatch), client.PatchDryRunAll)
1385+
err = cl.Patch(context.TODO(), u, client.RawPatch(types.MergePatchType, mergePatch), client.PatchDryRunAll)
13861386
Expect(err).NotTo(HaveOccurred())
13871387

13881388
By("validating patched Deployment does not have the new annotation")

pkg/client/fake/client_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ var _ = Describe("Fake client", func() {
279279
},
280280
})
281281
Expect(err).NotTo(HaveOccurred())
282-
err = cl.Patch(nil, dep, client.ConstantPatch(types.StrategicMergePatchType, mergePatch))
282+
err = cl.Patch(nil, dep, client.RawPatch(types.StrategicMergePatchType, mergePatch))
283283
Expect(err).NotTo(HaveOccurred())
284284

285285
By("Getting the patched deployment")

pkg/client/patch.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ import (
2626
var (
2727
// Apply uses server-side apply to patch the given object.
2828
Apply = applyPatch{}
29+
30+
// Merge uses a raw merge strategy to patch the object.
31+
Merge = mergePatch{}
2932
)
3033

3134
type patch struct {
@@ -43,9 +46,15 @@ func (s *patch) Data(obj runtime.Object) ([]byte, error) {
4346
return s.data, nil
4447
}
4548

49+
// RawPatch constructs a new Patch with the given PatchType and data.
50+
func RawPatch(patchType types.PatchType, data []byte) Patch {
51+
return &patch{patchType, data}
52+
}
53+
4654
// ConstantPatch constructs a new Patch with the given PatchType and data.
55+
// Deprecated
4756
func ConstantPatch(patchType types.PatchType, data []byte) Patch {
48-
return &patch{patchType, data}
57+
return RawPatch(patchType, data)
4958
}
5059

5160
type mergeFromPatch struct {
@@ -77,6 +86,23 @@ func MergeFrom(obj runtime.Object) Patch {
7786
return &mergeFromPatch{obj}
7887
}
7988

89+
// mergePatch uses a raw merge strategy to patch the object.
90+
type mergePatch struct{}
91+
92+
// Type implements Patch.
93+
func (p mergePatch) Type() types.PatchType {
94+
return types.MergePatchType
95+
}
96+
97+
// Data implements Patch.
98+
func (p mergePatch) Data(obj runtime.Object) ([]byte, error) {
99+
// NB(directxman12): we might technically want to be using an actual encoder
100+
// here (in case some more performant encoder is introduced) but this is
101+
// correct and sufficient for our uses (it's what the JSON serializer in
102+
// client-go does, more-or-less).
103+
return json.Marshal(obj)
104+
}
105+
80106
// applyPatch uses server-side apply to patch the object.
81107
type applyPatch struct{}
82108

0 commit comments

Comments
 (0)