Skip to content

Commit ec79307

Browse files
authored
Merge pull request kubernetes#90057 from ialidzhikov/fix/gcp-ccm
Fix Node initialization for GCP cloud provider
2 parents 190ae06 + 5c276a4 commit ec79307

File tree

1 file changed

+24
-16
lines changed

1 file changed

+24
-16
lines changed

pkg/controller/cloud/node_controller.go

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ func (cnc *CloudNodeController) updateNodeAddress(ctx context.Context, node *v1.
239239
return
240240
}
241241

242-
nodeAddresses, err := getNodeAddressesByProviderIDOrName(ctx, instances, node)
242+
nodeAddresses, err := getNodeAddressesByProviderIDOrName(ctx, instances, node.Spec.ProviderID, node.Name)
243243
if err != nil {
244244
klog.Errorf("Error getting node addresses for node %q: %v", node.Name, err)
245245
return
@@ -407,10 +407,14 @@ func (cnc *CloudNodeController) initializeNode(ctx context.Context, node *v1.Nod
407407
// All of the returned functions are idempotent, because they are used in a retry-if-conflict
408408
// loop, meaning they could get called multiple times.
409409
func (cnc *CloudNodeController) getNodeModifiersFromCloudProvider(ctx context.Context, node *v1.Node, instances cloudprovider.Instances) ([]nodeModifier, error) {
410-
var nodeModifiers []nodeModifier
410+
var (
411+
nodeModifiers []nodeModifier
412+
providerID string
413+
err error
414+
)
411415

412416
if node.Spec.ProviderID == "" {
413-
providerID, err := cloudprovider.GetInstanceProviderID(ctx, cnc.cloud, types.NodeName(node.Name))
417+
providerID, err = cloudprovider.GetInstanceProviderID(ctx, cnc.cloud, types.NodeName(node.Name))
414418
if err == nil {
415419
nodeModifiers = append(nodeModifiers, func(n *v1.Node) {
416420
if n.Spec.ProviderID == "" {
@@ -428,9 +432,11 @@ func (cnc *CloudNodeController) getNodeModifiersFromCloudProvider(ctx context.Co
428432
// do not, the taint will be removed, and this will not be retried
429433
return nil, err
430434
}
435+
} else {
436+
providerID = node.Spec.ProviderID
431437
}
432438

433-
nodeAddresses, err := getNodeAddressesByProviderIDOrName(ctx, instances, node)
439+
nodeAddresses, err := getNodeAddressesByProviderIDOrName(ctx, instances, providerID, node.Name)
434440
if err != nil {
435441
return nil, err
436442
}
@@ -443,7 +449,7 @@ func (cnc *CloudNodeController) getNodeModifiersFromCloudProvider(ctx context.Co
443449
}
444450
}
445451

446-
if instanceType, err := getInstanceTypeByProviderIDOrName(ctx, instances, node); err != nil {
452+
if instanceType, err := getInstanceTypeByProviderIDOrName(ctx, instances, providerID, node.Name); err != nil {
447453
return nil, err
448454
} else if instanceType != "" {
449455
klog.V(2).Infof("Adding node label from cloud provider: %s=%s", v1.LabelInstanceType, instanceType)
@@ -458,7 +464,7 @@ func (cnc *CloudNodeController) getNodeModifiersFromCloudProvider(ctx context.Co
458464
}
459465

460466
if zones, ok := cnc.cloud.Zones(); ok {
461-
zone, err := getZoneByProviderIDOrName(ctx, zones, node)
467+
zone, err := getZoneByProviderIDOrName(ctx, zones, providerID, node.Name)
462468
if err != nil {
463469
return nil, fmt.Errorf("failed to get zone from cloud provider: %v", err)
464470
}
@@ -531,11 +537,11 @@ func ensureNodeExistsByProviderID(ctx context.Context, instances cloudprovider.I
531537
return instances.InstanceExistsByProviderID(ctx, providerID)
532538
}
533539

534-
func getNodeAddressesByProviderIDOrName(ctx context.Context, instances cloudprovider.Instances, node *v1.Node) ([]v1.NodeAddress, error) {
535-
nodeAddresses, err := instances.NodeAddressesByProviderID(ctx, node.Spec.ProviderID)
540+
func getNodeAddressesByProviderIDOrName(ctx context.Context, instances cloudprovider.Instances, providerID, nodeName string) ([]v1.NodeAddress, error) {
541+
nodeAddresses, err := instances.NodeAddressesByProviderID(ctx, providerID)
536542
if err != nil {
537543
providerIDErr := err
538-
nodeAddresses, err = instances.NodeAddresses(ctx, types.NodeName(node.Name))
544+
nodeAddresses, err = instances.NodeAddresses(ctx, types.NodeName(nodeName))
539545
if err != nil {
540546
return nil, fmt.Errorf("error fetching node by provider ID: %v, and error by node name: %v", providerIDErr, err)
541547
}
@@ -576,11 +582,13 @@ func ensureNodeProvidedIPExists(node *v1.Node, nodeAddresses []v1.NodeAddress) (
576582
return nodeIP, nodeIPExists
577583
}
578584

579-
func getInstanceTypeByProviderIDOrName(ctx context.Context, instances cloudprovider.Instances, node *v1.Node) (string, error) {
580-
instanceType, err := instances.InstanceTypeByProviderID(ctx, node.Spec.ProviderID)
585+
// getInstanceTypeByProviderIDOrName will attempt to get the instance type of node using its providerID
586+
// then it's name. If both attempts fail, an error is returned.
587+
func getInstanceTypeByProviderIDOrName(ctx context.Context, instances cloudprovider.Instances, providerID, nodeName string) (string, error) {
588+
instanceType, err := instances.InstanceTypeByProviderID(ctx, providerID)
581589
if err != nil {
582590
providerIDErr := err
583-
instanceType, err = instances.InstanceType(ctx, types.NodeName(node.Name))
591+
instanceType, err = instances.InstanceType(ctx, types.NodeName(nodeName))
584592
if err != nil {
585593
return "", fmt.Errorf("InstanceType: Error fetching by providerID: %v Error fetching by NodeName: %v", providerIDErr, err)
586594
}
@@ -589,12 +597,12 @@ func getInstanceTypeByProviderIDOrName(ctx context.Context, instances cloudprovi
589597
}
590598

591599
// getZoneByProviderIDorName will attempt to get the zone of node using its providerID
592-
// then it's name. If both attempts fail, an error is returned
593-
func getZoneByProviderIDOrName(ctx context.Context, zones cloudprovider.Zones, node *v1.Node) (cloudprovider.Zone, error) {
594-
zone, err := zones.GetZoneByProviderID(ctx, node.Spec.ProviderID)
600+
// then it's name. If both attempts fail, an error is returned.
601+
func getZoneByProviderIDOrName(ctx context.Context, zones cloudprovider.Zones, providerID, nodeName string) (cloudprovider.Zone, error) {
602+
zone, err := zones.GetZoneByProviderID(ctx, providerID)
595603
if err != nil {
596604
providerIDErr := err
597-
zone, err = zones.GetZoneByNodeName(ctx, types.NodeName(node.Name))
605+
zone, err = zones.GetZoneByNodeName(ctx, types.NodeName(nodeName))
598606
if err != nil {
599607
return cloudprovider.Zone{}, fmt.Errorf("Zone: Error fetching by providerID: %v Error fetching by NodeName: %v", providerIDErr, err)
600608
}

0 commit comments

Comments
 (0)