Skip to content

Commit 96ae302

Browse files
Merge pull request #121575 from apelisse/update-smd
Update sigs.k8s.io/structured-merge-diff to v4.4.0 Kubernetes-commit: 593a17d3b6381bfdbf3bc3b36f56cad30d1531df
2 parents 458fd90 + 8dbf841 commit 96ae302

File tree

4 files changed

+16
-13
lines changed

4 files changed

+16
-13
lines changed

go.mod

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ require (
2626
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
2727
k8s.io/utils v0.0.0-20230726121419-3b25d923346b
2828
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd
29-
sigs.k8s.io/structured-merge-diff/v4 v4.3.0
29+
sigs.k8s.io/structured-merge-diff/v4 v4.4.1
3030
sigs.k8s.io/yaml v1.3.0
3131
)
3232

go.sum

+2-2
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSn
151151
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
152152
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
153153
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
154-
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
155-
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
154+
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
155+
sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
156156
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
157157
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=

pkg/util/managedfields/internal/structuredmerge.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"k8s.io/apimachinery/pkg/runtime/schema"
2626
"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
2727
"sigs.k8s.io/structured-merge-diff/v4/merge"
28+
"sigs.k8s.io/structured-merge-diff/v4/typed"
2829
)
2930

3031
type structuredMergeManager struct {
@@ -95,11 +96,11 @@ func (f *structuredMergeManager) Update(liveObj, newObj runtime.Object, managed
9596
if err != nil {
9697
return nil, nil, fmt.Errorf("failed to convert live object (%v) to proper version: %v", objectGVKNN(liveObj), err)
9798
}
98-
newObjTyped, err := f.typeConverter.ObjectToTyped(newObjVersioned)
99+
newObjTyped, err := f.typeConverter.ObjectToTyped(newObjVersioned, typed.AllowDuplicates)
99100
if err != nil {
100101
return nil, nil, fmt.Errorf("failed to convert new object (%v) to smd typed: %v", objectGVKNN(newObjVersioned), err)
101102
}
102-
liveObjTyped, err := f.typeConverter.ObjectToTyped(liveObjVersioned)
103+
liveObjTyped, err := f.typeConverter.ObjectToTyped(liveObjVersioned, typed.AllowDuplicates)
103104
if err != nil {
104105
return nil, nil, fmt.Errorf("failed to convert live object (%v) to smd typed: %v", objectGVKNN(liveObjVersioned), err)
105106
}
@@ -139,11 +140,13 @@ func (f *structuredMergeManager) Apply(liveObj, patchObj runtime.Object, managed
139140
return nil, nil, fmt.Errorf("failed to convert live object (%v) to proper version: %v", objectGVKNN(liveObj), err)
140141
}
141142

143+
// Don't allow duplicates in the applied object.
142144
patchObjTyped, err := f.typeConverter.ObjectToTyped(patchObj)
143145
if err != nil {
144146
return nil, nil, fmt.Errorf("failed to create typed patch object (%v): %v", objectGVKNN(patchObj), err)
145147
}
146-
liveObjTyped, err := f.typeConverter.ObjectToTyped(liveObjVersioned)
148+
149+
liveObjTyped, err := f.typeConverter.ObjectToTyped(liveObjVersioned, typed.AllowDuplicates)
147150
if err != nil {
148151
return nil, nil, fmt.Errorf("failed to create typed live object (%v): %v", objectGVKNN(liveObjVersioned), err)
149152
}

pkg/util/managedfields/internal/typeconverter.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ import (
3232
// TypeConverter allows you to convert from runtime.Object to
3333
// typed.TypedValue and the other way around.
3434
type TypeConverter interface {
35-
ObjectToTyped(runtime.Object) (*typed.TypedValue, error)
35+
ObjectToTyped(runtime.Object, ...typed.ValidationOptions) (*typed.TypedValue, error)
3636
TypedToObject(*typed.TypedValue) (runtime.Object, error)
3737
}
3838

@@ -54,17 +54,17 @@ func NewTypeConverter(openapiSpec map[string]*spec.Schema, preserveUnknownFields
5454
return &typeConverter{parser: tr}, nil
5555
}
5656

57-
func (c *typeConverter) ObjectToTyped(obj runtime.Object) (*typed.TypedValue, error) {
57+
func (c *typeConverter) ObjectToTyped(obj runtime.Object, opts ...typed.ValidationOptions) (*typed.TypedValue, error) {
5858
gvk := obj.GetObjectKind().GroupVersionKind()
5959
t := c.parser[gvk]
6060
if t == nil {
6161
return nil, NewNoCorrespondingTypeError(gvk)
6262
}
6363
switch o := obj.(type) {
6464
case *unstructured.Unstructured:
65-
return t.FromUnstructured(o.UnstructuredContent())
65+
return t.FromUnstructured(o.UnstructuredContent(), opts...)
6666
default:
67-
return t.FromStructured(obj)
67+
return t.FromStructured(obj, opts...)
6868
}
6969
}
7070

@@ -84,12 +84,12 @@ func NewDeducedTypeConverter() TypeConverter {
8484
}
8585

8686
// ObjectToTyped converts an object into a TypedValue with a "deduced type".
87-
func (deducedTypeConverter) ObjectToTyped(obj runtime.Object) (*typed.TypedValue, error) {
87+
func (deducedTypeConverter) ObjectToTyped(obj runtime.Object, opts ...typed.ValidationOptions) (*typed.TypedValue, error) {
8888
switch o := obj.(type) {
8989
case *unstructured.Unstructured:
90-
return typed.DeducedParseableType.FromUnstructured(o.UnstructuredContent())
90+
return typed.DeducedParseableType.FromUnstructured(o.UnstructuredContent(), opts...)
9191
default:
92-
return typed.DeducedParseableType.FromStructured(obj)
92+
return typed.DeducedParseableType.FromStructured(obj, opts...)
9393
}
9494
}
9595

0 commit comments

Comments
 (0)