@@ -27,20 +27,33 @@ import (
27
27
)
28
28
29
29
type ResourceStorage struct {
30
- db * gorm.DB
31
- codec runtime.Codec
30
+ groupResource schema.GroupResource
32
31
33
- storageGroupResource schema.GroupResource
34
- storageVersion schema.GroupVersion
35
- memoryVersion schema.GroupVersion
32
+ db * gorm.DB
33
+ config storage.ResourceStorageConfig
36
34
}
37
35
38
36
func (s * ResourceStorage ) GetStorageConfig () * storage.ResourceStorageConfig {
39
- return & storage.ResourceStorageConfig {
40
- Codec : s .codec ,
41
- StorageGroupResource : s .storageGroupResource ,
42
- StorageVersion : s .storageVersion ,
43
- MemoryVersion : s .memoryVersion ,
37
+ config := s .config
38
+ return & config
39
+ }
40
+
41
+ func (s * ResourceStorage ) gvrKeyMap () map [string ]interface {} {
42
+ return map [string ]interface {}{
43
+ "group" : s .config .StorageResource .Group ,
44
+ "version" : s .config .StorageResource .Version ,
45
+ "resource" : s .config .StorageResource .Resource ,
46
+ }
47
+ }
48
+
49
+ func (s * ResourceStorage ) resourceKeyMap (cluster , namespace , name string ) map [string ]interface {} {
50
+ return map [string ]interface {}{
51
+ "cluster" : cluster ,
52
+ "group" : s .config .StorageResource .Group ,
53
+ "version" : s .config .StorageResource .Version ,
54
+ "resource" : s .config .StorageResource .Resource ,
55
+ "namespace" : namespace ,
56
+ "name" : name ,
44
57
}
45
58
}
46
59
@@ -61,7 +74,7 @@ func (s *ResourceStorage) Create(ctx context.Context, cluster string, obj runtim
61
74
}
62
75
63
76
var buffer bytes.Buffer
64
- if err := s .codec .Encode (obj , & buffer ); err != nil {
77
+ if err := s .config . Codec .Encode (obj , & buffer ); err != nil {
65
78
return err
66
79
}
67
80
@@ -71,9 +84,9 @@ func (s *ResourceStorage) Create(ctx context.Context, cluster string, obj runtim
71
84
UID : metaobj .GetUID (),
72
85
Name : metaobj .GetName (),
73
86
Namespace : metaobj .GetNamespace (),
74
- Group : s .storageGroupResource .Group ,
75
- Resource : s .storageGroupResource .Resource ,
76
- Version : s .storageVersion .Version ,
87
+ Group : s .config . StorageResource .Group ,
88
+ Resource : s .config . StorageResource .Resource ,
89
+ Version : s .config . StorageResource .Version ,
77
90
Kind : gvk .Kind ,
78
91
ResourceVersion : metaobj .GetResourceVersion (),
79
92
Object : buffer .Bytes (),
@@ -94,7 +107,7 @@ func (s *ResourceStorage) Update(ctx context.Context, cluster string, obj runtim
94
107
}
95
108
96
109
var buffer bytes.Buffer
97
- if err := s .codec .Encode (obj , & buffer ); err != nil {
110
+ if err := s .config . Codec .Encode (obj , & buffer ); err != nil {
98
111
return err
99
112
}
100
113
@@ -116,14 +129,9 @@ func (s *ResourceStorage) Update(ctx context.Context, cluster string, obj runtim
116
129
updatedResource ["deleted_at" ] = sql.NullTime {Time : deletedAt .Time , Valid : true }
117
130
}
118
131
119
- result := s .db .WithContext (ctx ).Model (& Resource {}).Where (map [string ]interface {}{
120
- "cluster" : cluster ,
121
- "group" : s .storageGroupResource .Group ,
122
- "version" : s .storageVersion .Version ,
123
- "resource" : s .storageGroupResource .Resource ,
124
- "namespace" : metaobj .GetNamespace (),
125
- "name" : metaobj .GetName (),
126
- }).Updates (updatedResource )
132
+ result := s .db .WithContext (ctx ).Model (& Resource {}).
133
+ Where (s .resourceKeyMap (cluster , metaobj .GetNamespace (), metaobj .GetName ())).
134
+ Updates (updatedResource )
127
135
return InterpretResourceDBError (cluster , metaobj .GetName (), result .Error )
128
136
}
129
137
@@ -144,14 +152,7 @@ func (s *ResourceStorage) ConvertDeletedObject(obj interface{}) (runtime.Object,
144
152
}
145
153
146
154
func (s * ResourceStorage ) deleteObject (cluster , namespace , name string ) * gorm.DB {
147
- return s .db .Model (& Resource {}).Where (map [string ]interface {}{
148
- "cluster" : cluster ,
149
- "group" : s .storageGroupResource .Group ,
150
- "version" : s .storageVersion .Version ,
151
- "resource" : s .storageGroupResource .Resource ,
152
- "namespace" : namespace ,
153
- "name" : name ,
154
- }).Delete (& Resource {})
155
+ return s .db .Model (& Resource {}).Where (s .resourceKeyMap (cluster , namespace , name )).Delete (& Resource {})
155
156
}
156
157
157
158
func (s * ResourceStorage ) Delete (ctx context.Context , cluster string , obj runtime.Object ) error {
@@ -167,14 +168,7 @@ func (s *ResourceStorage) Delete(ctx context.Context, cluster string, obj runtim
167
168
}
168
169
169
170
func (s * ResourceStorage ) genGetObjectQuery (ctx context.Context , cluster , namespace , name string ) * gorm.DB {
170
- return s .db .WithContext (ctx ).Model (& Resource {}).Select ("object" ).Where (map [string ]interface {}{
171
- "cluster" : cluster ,
172
- "group" : s .storageGroupResource .Group ,
173
- "version" : s .storageVersion .Version ,
174
- "resource" : s .storageGroupResource .Resource ,
175
- "namespace" : namespace ,
176
- "name" : name ,
177
- })
171
+ return s .db .WithContext (ctx ).Model (& Resource {}).Select ("object" ).Where (s .resourceKeyMap (cluster , namespace , name ))
178
172
}
179
173
180
174
func (s * ResourceStorage ) Get (ctx context.Context , cluster , namespace , name string , into runtime.Object ) error {
@@ -183,7 +177,7 @@ func (s *ResourceStorage) Get(ctx context.Context, cluster, namespace, name stri
183
177
return InterpretResourceDBError (cluster , namespace + "/" + name , result .Error )
184
178
}
185
179
186
- obj , _ , err := s .codec .Decode (objects [0 ], nil , into )
180
+ obj , _ , err := s .config . Codec .Decode (objects [0 ], nil , into )
187
181
if err != nil {
188
182
return err
189
183
}
@@ -199,12 +193,7 @@ func (s *ResourceStorage) genListObjectsQuery(ctx context.Context, opts *interna
199
193
result = & ResourceMetadataList {}
200
194
}
201
195
202
- query := s .db .WithContext (ctx ).Model (& Resource {})
203
- query = query .Where (map [string ]interface {}{
204
- "group" : s .storageGroupResource .Group ,
205
- "version" : s .storageVersion .Version ,
206
- "resource" : s .storageGroupResource .Resource ,
207
- })
196
+ query := s .db .WithContext (ctx ).Model (& Resource {}).Where (s .gvrKeyMap ())
208
197
offset , amount , query , err := applyListOptionsToResourceQuery (s .db , query , opts )
209
198
return offset , amount , query , result , err
210
199
}
@@ -216,7 +205,7 @@ func (s *ResourceStorage) List(ctx context.Context, listObject runtime.Object, o
216
205
}
217
206
218
207
if err := result .From (query ); err != nil {
219
- return InterpretDBError (s .storageGroupResource .String (), err )
208
+ return InterpretDBError (s .groupResource .String (), err )
220
209
}
221
210
objects := result .Items ()
222
211
@@ -246,7 +235,7 @@ func (s *ResourceStorage) List(ctx context.Context, listObject runtime.Object, o
246
235
unstructuredList .Items = make ([]unstructured.Unstructured , 0 , len (objects ))
247
236
for _ , object := range objects {
248
237
uObj := & unstructured.Unstructured {}
249
- obj , err := object .ConvertTo (s .codec , uObj )
238
+ obj , err := object .ConvertTo (s .config . Codec , uObj )
250
239
if err != nil {
251
240
return err
252
241
}
@@ -283,7 +272,7 @@ func (s *ResourceStorage) List(ctx context.Context, listObject runtime.Object, o
283
272
slice := reflect .MakeSlice (v .Type (), len (objects ), len (objects ))
284
273
expected := reflect .New (v .Type ().Elem ()).Interface ().(runtime.Object )
285
274
for i , object := range objects {
286
- obj , err := object .ConvertTo (s .codec , expected .DeepCopyObject ())
275
+ obj , err := object .ConvertTo (s .config . Codec , expected .DeepCopyObject ())
287
276
if err != nil {
288
277
return err
289
278
}
@@ -294,7 +283,7 @@ func (s *ResourceStorage) List(ctx context.Context, listObject runtime.Object, o
294
283
}
295
284
296
285
func (s * ResourceStorage ) Watch (_ context.Context , _ * internal.ListOptions ) (watch.Interface , error ) {
297
- return nil , apierrors .NewMethodNotSupported (s .storageGroupResource , "watch" )
286
+ return nil , apierrors .NewMethodNotSupported (s .groupResource , "watch" )
298
287
}
299
288
300
289
func applyListOptionsToResourceQuery (db * gorm.DB , query * gorm.DB , opts * internal.ListOptions ) (int64 , * int64 , * gorm.DB , error ) {
0 commit comments