@@ -19,7 +19,7 @@ package rest
19
19
import (
20
20
"context"
21
21
22
- v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
22
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
23
23
"k8s.io/apimachinery/pkg/runtime"
24
24
"k8s.io/apiserver/pkg/registry/generic"
25
25
"k8s.io/apiserver/pkg/registry/rest"
@@ -44,26 +44,79 @@ func (p StaticHandlerProvider) Get(s *runtime.Scheme, g generic.RESTOptionsGette
44
44
// storage plumbed in the context.
45
45
type ParentStaticHandlerProvider struct {
46
46
rest.Storage
47
+ ParentProvider ResourceHandlerProvider
47
48
}
48
49
49
50
// Get returns itself as the handler
50
51
func (p ParentStaticHandlerProvider ) Get (s * runtime.Scheme , g generic.RESTOptionsGetter ) (rest.Storage , error ) {
51
- if getter , isGetter := p .Storage .(rest.Getter ); isGetter {
52
- return parentPlumbedStorageProvider {delegate : getter }, nil
52
+ parentStorage , err := p .ParentProvider (s , g )
53
+ if err != nil {
54
+ return nil , err
55
+ }
56
+ getter , isGetter := p .Storage .(rest.Getter )
57
+ updater , isUpdater := p .Storage .(rest.Updater )
58
+ switch {
59
+ case isGetter && isUpdater :
60
+ return parentPlumbedStorageGetterUpdaterProvider {
61
+ getter : getter ,
62
+ updater : updater ,
63
+ parentStorage : parentStorage ,
64
+ }, nil
65
+ case isGetter :
66
+ return parentPlumbedStorageGetterProvider {
67
+ delegate : getter ,
68
+ parentStorage : parentStorage ,
69
+ }, nil
53
70
}
54
71
return p .Storage , nil
55
72
}
56
73
57
- var _ rest.Getter = & parentPlumbedStorageProvider {}
74
+ var _ rest.Getter = & parentPlumbedStorageGetterProvider {}
75
+
76
+ type parentPlumbedStorageGetterProvider struct {
77
+ delegate rest.Getter
78
+ parentStorage rest.Storage
79
+ }
80
+
81
+ func (p parentPlumbedStorageGetterProvider ) New () runtime.Object {
82
+ return p .parentStorage .New ()
83
+ }
84
+
85
+ func (p parentPlumbedStorageGetterProvider ) Get (ctx context.Context , name string , options * metav1.GetOptions ) (runtime.Object , error ) {
86
+ return p .delegate .Get (contextutil .WithParentStorage (ctx , p .parentStorage ), name , options )
87
+ }
88
+
89
+ var _ rest.Getter = & parentPlumbedStorageGetterUpdaterProvider {}
90
+ var _ rest.Updater = & parentPlumbedStorageGetterUpdaterProvider {}
91
+
92
+ type parentPlumbedStorageGetterUpdaterProvider struct {
93
+ getter rest.Getter
94
+ updater rest.Updater
95
+ parentStorage rest.Storage
96
+ }
58
97
59
- type parentPlumbedStorageProvider struct {
60
- delegate rest. Getter
98
+ func ( p parentPlumbedStorageGetterUpdaterProvider ) New () runtime. Object {
99
+ return p . parentStorage . New ()
61
100
}
62
101
63
- func (p parentPlumbedStorageProvider ) New () runtime.Object {
64
- return p .delegate .(rest. Storage ). New ( )
102
+ func (p parentPlumbedStorageGetterUpdaterProvider ) Get ( ctx context. Context , name string , options * metav1. GetOptions ) ( runtime.Object , error ) {
103
+ return p .getter . Get ( contextutil . WithParentStorage ( ctx , p . parentStorage ), name , options )
65
104
}
66
105
67
- func (p parentPlumbedStorageProvider ) Get (ctx context.Context , name string , options * v1.GetOptions ) (runtime.Object , error ) {
68
- return p .delegate .Get (contextutil .WithParentStorage (ctx , p .delegate .(rest.Storage )), name , options )
106
+ func (p parentPlumbedStorageGetterUpdaterProvider ) Update (
107
+ ctx context.Context ,
108
+ name string ,
109
+ objInfo rest.UpdatedObjectInfo ,
110
+ createValidation rest.ValidateObjectFunc ,
111
+ updateValidation rest.ValidateObjectUpdateFunc ,
112
+ forceAllowCreate bool ,
113
+ options * metav1.UpdateOptions ) (runtime.Object , bool , error ) {
114
+ return p .updater .Update (
115
+ contextutil .WithParentStorage (ctx , p .parentStorage ),
116
+ name ,
117
+ objInfo ,
118
+ createValidation ,
119
+ updateValidation ,
120
+ forceAllowCreate ,
121
+ options )
69
122
}
0 commit comments