@@ -20,8 +20,6 @@ import (
20
20
"fmt"
21
21
22
22
jsonpatch "github.com/evanphx/json-patch"
23
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
24
- "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
25
23
"k8s.io/apimachinery/pkg/runtime"
26
24
"k8s.io/apimachinery/pkg/types"
27
25
"k8s.io/apimachinery/pkg/util/json"
@@ -47,7 +45,7 @@ func (s *patch) Type() types.PatchType {
47
45
}
48
46
49
47
// Data implements Patch.
50
- func (s * patch ) Data (obj runtime. Object ) ([]byte , error ) {
48
+ func (s * patch ) Data (obj Object ) ([]byte , error ) {
51
49
return s .data , nil
52
50
}
53
51
@@ -87,7 +85,7 @@ type MergeFromOptions struct {
87
85
}
88
86
89
87
type mergeFromPatch struct {
90
- from runtime. Object
88
+ from Object
91
89
opts MergeFromOptions
92
90
}
93
91
@@ -96,8 +94,12 @@ func (s *mergeFromPatch) Type() types.PatchType {
96
94
return types .MergePatchType
97
95
}
98
96
99
- func (* mergeFromPatch ) data (original , modified Object , opts MergeFromOptions ) ([]byte , error ) {
100
- if opts .OptimisticLock {
97
+ // Data implements Patch.
98
+ func (s * mergeFromPatch ) Data (obj Object ) ([]byte , error ) {
99
+ original := s .from
100
+ modified := obj
101
+
102
+ if s .opts .OptimisticLock {
101
103
version := original .GetResourceVersion ()
102
104
if len (version ) == 0 {
103
105
return nil , fmt .Errorf ("cannot use OptimisticLock, object %q does not have any resource version we can use" , original )
@@ -120,64 +122,21 @@ func (*mergeFromPatch) data(original, modified Object, opts MergeFromOptions) ([
120
122
return nil , err
121
123
}
122
124
123
- return jsonpatch .CreateMergePatch (originalJSON , modifiedJSON )
124
- }
125
-
126
- // Data implements Patch.
127
- func (s * mergeFromPatch ) Data (obj runtime.Object ) ([]byte , error ) {
128
- fromObject , fromOk := s .from .(Object )
129
- objObject , objOk := obj .(Object )
130
-
131
- if fromOk && objOk {
132
- return s .data (fromObject , objObject , s .opts )
133
- }
134
-
135
- originalJSON , err := json .Marshal (s .from )
136
- if err != nil {
137
- return nil , err
138
- }
139
-
140
- modifiedJSON , err := json .Marshal (obj )
141
- if err != nil {
142
- return nil , err
143
- }
144
-
145
125
data , err := jsonpatch .CreateMergePatch (originalJSON , modifiedJSON )
146
126
if err != nil {
147
127
return nil , err
148
128
}
149
129
150
- if s .opts .OptimisticLock {
151
- dataMap := map [string ]interface {}{}
152
- if err := json .Unmarshal (data , & dataMap ); err != nil {
153
- return nil , err
154
- }
155
- fromMeta , ok := s .from .(metav1.Object )
156
- if ! ok {
157
- return nil , fmt .Errorf ("cannot use OptimisticLock, from object %q is not a valid metav1.Object" , s .from )
158
- }
159
- resourceVersion := fromMeta .GetResourceVersion ()
160
- if len (resourceVersion ) == 0 {
161
- return nil , fmt .Errorf ("cannot use OptimisticLock, from object %q does not have any resource version we can use" , s .from )
162
- }
163
- u := & unstructured.Unstructured {Object : dataMap }
164
- u .SetResourceVersion (resourceVersion )
165
- data , err = json .Marshal (u )
166
- if err != nil {
167
- return nil , err
168
- }
169
- }
170
-
171
130
return data , nil
172
131
}
173
132
174
133
// MergeFrom creates a Patch that patches using the merge-patch strategy with the given object as base.
175
- func MergeFrom (obj runtime. Object ) Patch {
134
+ func MergeFrom (obj Object ) Patch {
176
135
return & mergeFromPatch {from : obj }
177
136
}
178
137
179
138
// MergeFromWithOptions creates a Patch that patches using the merge-patch strategy with the given object as base.
180
- func MergeFromWithOptions (obj runtime. Object , opts ... MergeFromOption ) Patch {
139
+ func MergeFromWithOptions (obj Object , opts ... MergeFromOption ) Patch {
181
140
options := & MergeFromOptions {}
182
141
for _ , opt := range opts {
183
142
opt .ApplyToMergeFrom (options )
0 commit comments