@@ -87,8 +87,8 @@ func NewCloudNodeController(
87
87
// Use shared informer to listen to add/update of nodes. Note that any nodes
88
88
// that exist before node controller starts will show up in the update method
89
89
cnc .nodeInformer .Informer ().AddEventHandler (cache.ResourceEventHandlerFuncs {
90
- AddFunc : cnc .AddCloudNode ,
91
- UpdateFunc : cnc .UpdateCloudNode ,
90
+ AddFunc : func ( obj interface {}) { cnc .AddCloudNode ( context . TODO (), obj ) } ,
91
+ UpdateFunc : func ( oldObj , newObj interface {}) { cnc .UpdateCloudNode ( context . TODO (), oldObj , newObj ) } ,
92
92
})
93
93
94
94
return cnc , nil
@@ -105,11 +105,11 @@ func (cnc *CloudNodeController) Run(stopCh <-chan struct{}) {
105
105
// very infrequently. DO NOT MODIFY this to perform frequent operations.
106
106
107
107
// Start a loop to periodically update the node addresses obtained from the cloud
108
- wait .Until (cnc .UpdateNodeStatus , cnc .nodeStatusUpdateFrequency , stopCh )
108
+ wait .Until (func () { cnc .UpdateNodeStatus ( context . TODO ()) } , cnc .nodeStatusUpdateFrequency , stopCh )
109
109
}
110
110
111
111
// UpdateNodeStatus updates the node status, such as node addresses
112
- func (cnc * CloudNodeController ) UpdateNodeStatus () {
112
+ func (cnc * CloudNodeController ) UpdateNodeStatus (ctx context. Context ) {
113
113
instances , ok := cnc .cloud .Instances ()
114
114
if ! ok {
115
115
utilruntime .HandleError (fmt .Errorf ("failed to get instances from cloud provider" ))
@@ -123,20 +123,20 @@ func (cnc *CloudNodeController) UpdateNodeStatus() {
123
123
}
124
124
125
125
for i := range nodes .Items {
126
- cnc .updateNodeAddress (& nodes .Items [i ], instances )
126
+ cnc .updateNodeAddress (ctx , & nodes .Items [i ], instances )
127
127
}
128
128
}
129
129
130
130
// UpdateNodeAddress updates the nodeAddress of a single node
131
- func (cnc * CloudNodeController ) updateNodeAddress (node * v1.Node , instances cloudprovider.Instances ) {
131
+ func (cnc * CloudNodeController ) updateNodeAddress (ctx context. Context , node * v1.Node , instances cloudprovider.Instances ) {
132
132
// Do not process nodes that are still tainted
133
133
cloudTaint := getCloudTaint (node .Spec .Taints )
134
134
if cloudTaint != nil {
135
135
klog .V (5 ).Infof ("This node %s is still tainted. Will not process." , node .Name )
136
136
return
137
137
}
138
138
// Node that isn't present according to the cloud provider shouldn't have its address updated
139
- exists , err := ensureNodeExistsByProviderID (instances , node )
139
+ exists , err := ensureNodeExistsByProviderID (ctx , instances , node )
140
140
if err != nil {
141
141
// Continue to update node address when not sure the node is not exists
142
142
klog .Errorf ("%v" , err )
@@ -145,7 +145,7 @@ func (cnc *CloudNodeController) updateNodeAddress(node *v1.Node, instances cloud
145
145
return
146
146
}
147
147
148
- nodeAddresses , err := getNodeAddressesByProviderIDOrName (instances , node )
148
+ nodeAddresses , err := getNodeAddressesByProviderIDOrName (ctx , instances , node )
149
149
if err != nil {
150
150
klog .Errorf ("%v" , err )
151
151
return
@@ -192,7 +192,7 @@ func (cnc *CloudNodeController) updateNodeAddress(node *v1.Node, instances cloud
192
192
}
193
193
}
194
194
195
- func (cnc * CloudNodeController ) UpdateCloudNode (_ , newObj interface {}) {
195
+ func (cnc * CloudNodeController ) UpdateCloudNode (ctx context. Context , _ , newObj interface {}) {
196
196
node , ok := newObj .(* v1.Node )
197
197
if ! ok {
198
198
utilruntime .HandleError (fmt .Errorf ("unexpected object type: %v" , newObj ))
@@ -205,11 +205,11 @@ func (cnc *CloudNodeController) UpdateCloudNode(_, newObj interface{}) {
205
205
return
206
206
}
207
207
208
- cnc .initializeNode (node )
208
+ cnc .initializeNode (ctx , node )
209
209
}
210
210
211
211
// AddCloudNode handles initializing new nodes registered with the cloud taint.
212
- func (cnc * CloudNodeController ) AddCloudNode (obj interface {}) {
212
+ func (cnc * CloudNodeController ) AddCloudNode (ctx context. Context , obj interface {}) {
213
213
node := obj .(* v1.Node )
214
214
215
215
cloudTaint := getCloudTaint (node .Spec .Taints )
@@ -218,11 +218,11 @@ func (cnc *CloudNodeController) AddCloudNode(obj interface{}) {
218
218
return
219
219
}
220
220
221
- cnc .initializeNode (node )
221
+ cnc .initializeNode (ctx , node )
222
222
}
223
223
224
224
// This processes nodes that were added into the cluster, and cloud initialize them if appropriate
225
- func (cnc * CloudNodeController ) initializeNode (node * v1.Node ) {
225
+ func (cnc * CloudNodeController ) initializeNode (ctx context. Context , node * v1.Node ) {
226
226
227
227
instances , ok := cnc .cloud .Instances ()
228
228
if ! ok {
@@ -259,7 +259,7 @@ func (cnc *CloudNodeController) initializeNode(node *v1.Node) {
259
259
}
260
260
261
261
if curNode .Spec .ProviderID == "" {
262
- providerID , err := cloudprovider .GetInstanceProviderID (context . TODO () , cnc .cloud , types .NodeName (curNode .Name ))
262
+ providerID , err := cloudprovider .GetInstanceProviderID (ctx , cnc .cloud , types .NodeName (curNode .Name ))
263
263
if err == nil {
264
264
curNode .Spec .ProviderID = providerID
265
265
} else {
@@ -270,7 +270,7 @@ func (cnc *CloudNodeController) initializeNode(node *v1.Node) {
270
270
}
271
271
}
272
272
273
- nodeAddresses , err := getNodeAddressesByProviderIDOrName (instances , curNode )
273
+ nodeAddresses , err := getNodeAddressesByProviderIDOrName (ctx , instances , curNode )
274
274
if err != nil {
275
275
return err
276
276
}
@@ -283,15 +283,15 @@ func (cnc *CloudNodeController) initializeNode(node *v1.Node) {
283
283
}
284
284
}
285
285
286
- if instanceType , err := getInstanceTypeByProviderIDOrName (instances , curNode ); err != nil {
286
+ if instanceType , err := getInstanceTypeByProviderIDOrName (ctx , instances , curNode ); err != nil {
287
287
return err
288
288
} else if instanceType != "" {
289
289
klog .V (2 ).Infof ("Adding node label from cloud provider: %s=%s" , v1 .LabelInstanceType , instanceType )
290
290
curNode .ObjectMeta .Labels [v1 .LabelInstanceType ] = instanceType
291
291
}
292
292
293
293
if zones , ok := cnc .cloud .Zones (); ok {
294
- zone , err := getZoneByProviderIDOrName (zones , curNode )
294
+ zone , err := getZoneByProviderIDOrName (ctx , zones , curNode )
295
295
if err != nil {
296
296
return fmt .Errorf ("failed to get zone from cloud provider: %v" , err )
297
297
}
@@ -313,7 +313,7 @@ func (cnc *CloudNodeController) initializeNode(node *v1.Node) {
313
313
}
314
314
// After adding, call UpdateNodeAddress to set the CloudProvider provided IPAddresses
315
315
// So that users do not see any significant delay in IP addresses being filled into the node
316
- cnc .updateNodeAddress (curNode , instances )
316
+ cnc .updateNodeAddress (ctx , curNode , instances )
317
317
318
318
klog .Infof ("Successfully initialized node %s with cloud provider" , node .Name )
319
319
return nil
@@ -346,11 +346,11 @@ func excludeCloudTaint(taints []v1.Taint) []v1.Taint {
346
346
347
347
// ensureNodeExistsByProviderID checks if the instance exists by the provider id,
348
348
// If provider id in spec is empty it calls instanceId with node name to get provider id
349
- func ensureNodeExistsByProviderID (instances cloudprovider.Instances , node * v1.Node ) (bool , error ) {
349
+ func ensureNodeExistsByProviderID (ctx context. Context , instances cloudprovider.Instances , node * v1.Node ) (bool , error ) {
350
350
providerID := node .Spec .ProviderID
351
351
if providerID == "" {
352
352
var err error
353
- providerID , err = instances .InstanceID (context . TODO () , types .NodeName (node .Name ))
353
+ providerID , err = instances .InstanceID (ctx , types .NodeName (node .Name ))
354
354
if err != nil {
355
355
if err == cloudprovider .InstanceNotFound {
356
356
return false , nil
@@ -364,14 +364,14 @@ func ensureNodeExistsByProviderID(instances cloudprovider.Instances, node *v1.No
364
364
}
365
365
}
366
366
367
- return instances .InstanceExistsByProviderID (context . TODO () , providerID )
367
+ return instances .InstanceExistsByProviderID (ctx , providerID )
368
368
}
369
369
370
- func getNodeAddressesByProviderIDOrName (instances cloudprovider.Instances , node * v1.Node ) ([]v1.NodeAddress , error ) {
371
- nodeAddresses , err := instances .NodeAddressesByProviderID (context . TODO () , node .Spec .ProviderID )
370
+ func getNodeAddressesByProviderIDOrName (ctx context. Context , instances cloudprovider.Instances , node * v1.Node ) ([]v1.NodeAddress , error ) {
371
+ nodeAddresses , err := instances .NodeAddressesByProviderID (ctx , node .Spec .ProviderID )
372
372
if err != nil {
373
373
providerIDErr := err
374
- nodeAddresses , err = instances .NodeAddresses (context . TODO () , types .NodeName (node .Name ))
374
+ nodeAddresses , err = instances .NodeAddresses (ctx , types .NodeName (node .Name ))
375
375
if err != nil {
376
376
return nil , fmt .Errorf ("NodeAddress: Error fetching by providerID: %v Error fetching by NodeName: %v" , providerIDErr , err )
377
377
}
@@ -412,11 +412,11 @@ func ensureNodeProvidedIPExists(node *v1.Node, nodeAddresses []v1.NodeAddress) (
412
412
return nodeIP , nodeIPExists
413
413
}
414
414
415
- func getInstanceTypeByProviderIDOrName (instances cloudprovider.Instances , node * v1.Node ) (string , error ) {
416
- instanceType , err := instances .InstanceTypeByProviderID (context . TODO () , node .Spec .ProviderID )
415
+ func getInstanceTypeByProviderIDOrName (ctx context. Context , instances cloudprovider.Instances , node * v1.Node ) (string , error ) {
416
+ instanceType , err := instances .InstanceTypeByProviderID (ctx , node .Spec .ProviderID )
417
417
if err != nil {
418
418
providerIDErr := err
419
- instanceType , err = instances .InstanceType (context . TODO () , types .NodeName (node .Name ))
419
+ instanceType , err = instances .InstanceType (ctx , types .NodeName (node .Name ))
420
420
if err != nil {
421
421
return "" , fmt .Errorf ("InstanceType: Error fetching by providerID: %v Error fetching by NodeName: %v" , providerIDErr , err )
422
422
}
@@ -426,11 +426,11 @@ func getInstanceTypeByProviderIDOrName(instances cloudprovider.Instances, node *
426
426
427
427
// getZoneByProviderIDorName will attempt to get the zone of node using its providerID
428
428
// then it's name. If both attempts fail, an error is returned
429
- func getZoneByProviderIDOrName (zones cloudprovider.Zones , node * v1.Node ) (cloudprovider.Zone , error ) {
430
- zone , err := zones .GetZoneByProviderID (context . TODO () , node .Spec .ProviderID )
429
+ func getZoneByProviderIDOrName (ctx context. Context , zones cloudprovider.Zones , node * v1.Node ) (cloudprovider.Zone , error ) {
430
+ zone , err := zones .GetZoneByProviderID (ctx , node .Spec .ProviderID )
431
431
if err != nil {
432
432
providerIDErr := err
433
- zone , err = zones .GetZoneByNodeName (context . TODO () , types .NodeName (node .Name ))
433
+ zone , err = zones .GetZoneByNodeName (ctx , types .NodeName (node .Name ))
434
434
if err != nil {
435
435
return cloudprovider.Zone {}, fmt .Errorf ("Zone: Error fetching by providerID: %v Error fetching by NodeName: %v" , providerIDErr , err )
436
436
}
0 commit comments