feat: add PatchArgs API type to populate patch options

This commit converts the Options section of a patch into an object instead of map.
This allows better clarification of the available options.
This commit is contained in:
Adoram Shoval
2025-05-23 14:28:43 -04:00
parent 2859474e3c
commit 9043c223d4
8 changed files with 93 additions and 143 deletions

View File

@@ -3,8 +3,6 @@
package types
import "reflect"
// Patch represent either a Strategic Merge Patch or a JSON patch
// and its targets.
// The content of the patch can either be from a file
@@ -20,15 +18,17 @@ type Patch struct {
Target *Selector `json:"target,omitempty" yaml:"target,omitempty"`
// Options is a list of options for the patch
Options map[string]bool `json:"options,omitempty" yaml:"options,omitempty"`
Options *PatchArgs `json:"options,omitempty" yaml:"options,omitempty"`
}
// Equals return true if p equals o.
func (p *Patch) Equals(o Patch) bool {
targetEqual := (p.Target == o.Target) ||
(p.Target != nil && o.Target != nil && *p.Target == *o.Target)
optionsEqual := (p.Options == o.Options) ||
(p.Options != nil && o.Options != nil && *p.Options == *o.Options)
return p.Path == o.Path &&
p.Patch == o.Patch &&
targetEqual &&
reflect.DeepEqual(p.Options, o.Options)
optionsEqual
}

View File

@@ -101,6 +101,28 @@ func TestPatchEquals(t *testing.T) {
},
expect: true,
},
{
name: "same options",
patch1: Patch{
Path: "foo",
Patch: "bar",
Target: &selector,
Options: &PatchArgs{
AllowNameChange: true,
AllowKindChange: true,
},
},
patch2: Patch{
Path: "foo",
Patch: "bar",
Target: &selector,
Options: &PatchArgs{
AllowNameChange: true,
AllowKindChange: true,
},
},
expect: true,
},
{
name: "one nil target",
patch1: Patch{
@@ -124,6 +146,28 @@ func TestPatchEquals(t *testing.T) {
},
expect: false,
},
{
name: "different options",
patch1: Patch{
Path: "foo",
Patch: "bar",
Target: &selector,
Options: &PatchArgs{
AllowNameChange: false,
AllowKindChange: true,
},
},
patch2: Patch{
Path: "foo",
Patch: "bar",
Target: &selector,
Options: &PatchArgs{
AllowNameChange: true,
AllowKindChange: true,
},
},
expect: false,
},
}
for _, tc := range testcases {

13
api/types/patchargs.go Normal file
View File

@@ -0,0 +1,13 @@
// Copyright 2019 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0
package types
// PatchArgs represent set of options on resources of a patch.
type PatchArgs struct {
// AllowNameChange allows name changes to the resource.
AllowNameChange bool `json:"allowNameChange,omitempty" yaml:"allowNameChange,omitempty"`
// AllowKindChange allows kind changes to the resource.
AllowKindChange bool `json:"allowKindChange,omitempty" yaml:"allowKindChange,omitempty"`
}