@@ -69,6 +69,7 @@ type RequestHeaderAuthRequestController struct {
69
69
configmapName string
70
70
configmapNamespace string
71
71
72
+ client kubernetes.Interface
72
73
configmapLister corev1listers.ConfigMapNamespaceLister
73
74
configmapInformer cache.SharedIndexInformer
74
75
configmapInformerSynced cache.InformerSynced
@@ -89,10 +90,12 @@ func NewRequestHeaderAuthRequestController(
89
90
cmName string ,
90
91
cmNamespace string ,
91
92
client kubernetes.Interface ,
92
- usernameHeadersKey , groupHeadersKey , extraHeaderPrefixesKey , allowedClientNamesKey string ) ( * RequestHeaderAuthRequestController , error ) {
93
+ usernameHeadersKey , groupHeadersKey , extraHeaderPrefixesKey , allowedClientNamesKey string ) * RequestHeaderAuthRequestController {
93
94
c := & RequestHeaderAuthRequestController {
94
95
name : "RequestHeaderAuthRequestController" ,
95
96
97
+ client : client ,
98
+
96
99
configmapName : cmName ,
97
100
configmapNamespace : cmNamespace ,
98
101
@@ -104,11 +107,6 @@ func NewRequestHeaderAuthRequestController(
104
107
queue : workqueue .NewNamedRateLimitingQueue (workqueue .DefaultControllerRateLimiter (), "RequestHeaderAuthRequestController" ),
105
108
}
106
109
107
- // use the live client to prime the controller
108
- if err := c .syncOnce (client ); err != nil {
109
- return nil , err
110
- }
111
-
112
110
// we construct our own informer because we need such a small subset of the information available. Just one namespace.
113
111
c .configmapInformer = coreinformers .NewFilteredConfigMapInformer (client , c .configmapNamespace , 12 * time .Hour , cache.Indexers {cache .NamespaceIndex : cache .MetaNamespaceIndexFunc }, func (listOptions * metav1.ListOptions ) {
114
112
listOptions .FieldSelector = fields .OneTermEqualSelector ("metadata.name" , c .configmapName ).String ()
@@ -144,7 +142,7 @@ func NewRequestHeaderAuthRequestController(
144
142
c .configmapLister = corev1listers .NewConfigMapLister (c .configmapInformer .GetIndexer ()).ConfigMaps (c .configmapNamespace )
145
143
c .configmapInformerSynced = c .configmapInformer .HasSynced
146
144
147
- return c , nil
145
+ return c
148
146
}
149
147
150
148
func (c * RequestHeaderAuthRequestController ) UsernameHeaders () []string {
@@ -184,6 +182,24 @@ func (c *RequestHeaderAuthRequestController) Run(workers int, stopCh <-chan stru
184
182
<- stopCh
185
183
}
186
184
185
+ // // RunOnce runs a single sync loop
186
+ func (c * RequestHeaderAuthRequestController ) RunOnce () error {
187
+ configMap , err := c .client .CoreV1 ().ConfigMaps (c .configmapNamespace ).Get (context .TODO (), c .configmapName , metav1.GetOptions {})
188
+ switch {
189
+ case errors .IsNotFound (err ):
190
+ // ignore, authConfigMap is nil now
191
+ return nil
192
+ case errors .IsForbidden (err ):
193
+ klog .Warningf ("Unable to get configmap/%s in %s. Usually fixed by " +
194
+ "'kubectl create rolebinding -n %s ROLEBINDING_NAME --role=%s --serviceaccount=YOUR_NS:YOUR_SA'" ,
195
+ c .configmapName , c .configmapNamespace , c .configmapNamespace , authenticationRoleName )
196
+ return err
197
+ case err != nil :
198
+ return err
199
+ }
200
+ return c .syncConfigMap (configMap )
201
+ }
202
+
187
203
func (c * RequestHeaderAuthRequestController ) runWorker () {
188
204
for c .processNextWorkItem () {
189
205
}
@@ -208,23 +224,6 @@ func (c *RequestHeaderAuthRequestController) processNextWorkItem() bool {
208
224
return true
209
225
}
210
226
211
- func (c * RequestHeaderAuthRequestController ) syncOnce (client kubernetes.Interface ) error {
212
- configMap , err := client .CoreV1 ().ConfigMaps (c .configmapNamespace ).Get (context .TODO (), c .configmapName , metav1.GetOptions {})
213
- switch {
214
- case errors .IsNotFound (err ):
215
- // ignore, authConfigMap is nil now
216
- return nil
217
- case errors .IsForbidden (err ):
218
- klog .Warningf ("Unable to get configmap/%s in %s. Usually fixed by " +
219
- "'kubectl create rolebinding -n %s ROLEBINDING_NAME --role=%s --serviceaccount=YOUR_NS:YOUR_SA'" ,
220
- c .configmapName , c .configmapNamespace , c .configmapNamespace , authenticationRoleName )
221
- return err
222
- case err != nil :
223
- return err
224
- }
225
- return c .syncConfigMap (configMap )
226
- }
227
-
228
227
// sync reads the config and propagates the changes to exportedRequestHeaderBundle
229
228
// which is exposed by the set of methods that are used to fill RequestHeaderConfig struct
230
229
func (c * RequestHeaderAuthRequestController ) sync () error {
0 commit comments