@@ -49,11 +49,6 @@ func (s *subResourceStorageProvider) Get(scheme *runtime.Scheme, optsGetter gene
49
49
if err != nil {
50
50
return nil , err
51
51
}
52
- stdParentStorage , ok := parentStorage .(registryrest.StandardStorage )
53
- if ! ok {
54
- return nil , fmt .Errorf ("parent storageProvider for %v/%v/%v must implement rest.StandardStorage" ,
55
- s .subResourceGVR .Group , s .subResourceGVR .Version , s .subResourceGVR .Resource )
56
- }
57
52
58
53
var subResourceStorage registryrest.Storage
59
54
if s .subResourceStorageProvider != nil {
@@ -65,17 +60,39 @@ func (s *subResourceStorageProvider) Get(scheme *runtime.Scheme, optsGetter gene
65
60
66
61
// status subresource
67
62
if strings .HasSuffix (s .subResourceGVR .Resource , "/status" ) {
63
+ stdParentStorage , ok := parentStorage .(registryrest.StandardStorage )
64
+ if ! ok {
65
+ return nil , fmt .Errorf ("parent storageProvider for %v/%v/%v must implement rest.StandardStorage" ,
66
+ s .subResourceGVR .Group , s .subResourceGVR .Version , s .subResourceGVR .Resource )
67
+ }
68
68
return createStatusSubResourceStorage (stdParentStorage )
69
69
}
70
70
// scale subresource
71
71
if strings .HasSuffix (s .subResourceGVR .Resource , "/scale" ) {
72
+ getter , ok := parentStorage .(registryrest.Getter )
73
+ if ! ok {
74
+ return nil , fmt .Errorf ("parent storageProvider for %v/%v/%v must implement rest.Getter" ,
75
+ s .subResourceGVR .Group , s .subResourceGVR .Version , s .subResourceGVR .Resource )
76
+ }
77
+ updater , ok := parentStorage .(registryrest.Updater )
78
+ if ! ok {
79
+ return nil , fmt .Errorf ("parent storageProvider for %v/%v/%v must implement rest.Updater" ,
80
+ s .subResourceGVR .Group , s .subResourceGVR .Version , s .subResourceGVR .Resource )
81
+ }
72
82
return & scaleSubResourceStorage {
73
- parentStorage : stdParentStorage ,
83
+ parentStorage : parentStorage ,
84
+ parentStorageGetter : getter ,
85
+ parentStorageUpdater : updater ,
74
86
}, nil
75
87
}
76
88
// getter & updater
77
89
getterUpdaterSubResource , isGetterUpdater := subResourceStorage .(resource.GetterUpdaterSubResource )
78
90
if isGetterUpdater {
91
+ stdParentStorage , ok := parentStorage .(registryrest.StandardStorage )
92
+ if ! ok {
93
+ return nil , fmt .Errorf ("parent storageProvider for %v/%v/%v must implement rest.StandardStorage" ,
94
+ s .subResourceGVR .Group , s .subResourceGVR .Version , s .subResourceGVR .Resource )
95
+ }
79
96
return & commonSubResourceStorage {
80
97
parentStorage : stdParentStorage ,
81
98
subResourceConstructor : subResourceStorage ,
@@ -86,8 +103,14 @@ func (s *subResourceStorageProvider) Get(scheme *runtime.Scheme, optsGetter gene
86
103
// connector
87
104
connectorSubResource , isConnector := subResourceStorage .(resource.ConnectorSubResource )
88
105
if isConnector {
106
+ getter , ok := parentStorage .(registryrest.Getter )
107
+ if ! ok {
108
+ return nil , fmt .Errorf ("parent storageProvider for %v/%v/%v must implement rest.Getter" ,
109
+ s .subResourceGVR .Group , s .subResourceGVR .Version , s .subResourceGVR .Resource )
110
+ }
89
111
return & connectorSubResourceStorage {
90
- parentStorage : stdParentStorage ,
112
+ parentStorage : parentStorage ,
113
+ parentStorageGetter : getter ,
91
114
subResourceConstructor : subResourceStorage ,
92
115
subResourceConnector : connectorSubResource ,
93
116
}, nil
@@ -195,7 +218,8 @@ func (c *commonSubResourceStorage) Update(ctx context.Context,
195
218
196
219
// connector subresource storage
197
220
type connectorSubResourceStorage struct {
198
- parentStorage registryrest.StandardStorage
221
+ parentStorage registryrest.Storage
222
+ parentStorageGetter registryrest.Getter
199
223
subResourceConstructor registryrest.Storage
200
224
subResourceConnector registryrest.Connecter
201
225
}
@@ -225,7 +249,9 @@ func (c *connectorSubResourceStorage) ConnectMethods() []string {
225
249
226
250
// scale subresource storage
227
251
type scaleSubResourceStorage struct {
228
- parentStorage registryrest.StandardStorage
252
+ parentStorage registryrest.Storage
253
+ parentStorageGetter registryrest.Getter
254
+ parentStorageUpdater registryrest.Updater
229
255
}
230
256
231
257
func (s * scaleSubResourceStorage ) GroupVersionKind (containingGV schema.GroupVersion ) schema.GroupVersionKind {
@@ -241,7 +267,7 @@ func (s *scaleSubResourceStorage) New() runtime.Object {
241
267
}
242
268
243
269
func (s * scaleSubResourceStorage ) Get (ctx context.Context , name string , options * v1.GetOptions ) (runtime.Object , error ) {
244
- parentObj , err := s .parentStorage .Get (
270
+ parentObj , err := s .parentStorageGetter .Get (
245
271
contextutil .WithParentStorage (ctx , s .parentStorage ),
246
272
name ,
247
273
options )
@@ -262,7 +288,7 @@ func (s *scaleSubResourceStorage) Update(ctx context.Context,
262
288
updateValidation registryrest.ValidateObjectUpdateFunc ,
263
289
forceAllowCreate bool ,
264
290
options * v1.UpdateOptions ) (runtime.Object , bool , error ) {
265
- updatedObj , updated , err := s .parentStorage .Update (
291
+ updatedObj , updated , err := s .parentStorageUpdater .Update (
266
292
contextutil .WithParentStorage (ctx , s .parentStorage ),
267
293
name ,
268
294
& scaleUpdatedObjectInfo {reqObjInfo : objInfo },
0 commit comments