diff --git a/pkg/cloudprovider/providers/azure/azure_test.go b/pkg/cloudprovider/providers/azure/azure_test.go index 003a89765d..523809f3b3 100644 --- a/pkg/cloudprovider/providers/azure/azure_test.go +++ b/pkg/cloudprovider/providers/azure/azure_test.go @@ -1676,7 +1676,8 @@ func validateEmptyConfig(t *testing.T, config string) { func TestGetZone(t *testing.T) { cloud := &Cloud{ Config: Config{ - Location: "eastus", + Location: "eastus", + UseInstanceMetadata: true, }, } testcases := []struct { diff --git a/pkg/cloudprovider/providers/azure/azure_zones.go b/pkg/cloudprovider/providers/azure/azure_zones.go index 3c2d84571a..5b18005453 100644 --- a/pkg/cloudprovider/providers/azure/azure_zones.go +++ b/pkg/cloudprovider/providers/azure/azure_zones.go @@ -19,6 +19,7 @@ package azure import ( "context" "fmt" + "os" "strconv" "strings" @@ -49,31 +50,39 @@ func (az *Cloud) GetZoneID(zoneLabel string) string { // GetZone returns the Zone containing the current availability zone and locality region that the program is running in. // If the node is not running with availability zones, then it will fall back to fault domain. func (az *Cloud) GetZone(ctx context.Context) (cloudprovider.Zone, error) { - metadata, err := az.metadata.GetMetadata() - if err != nil { - return cloudprovider.Zone{}, err - } - - if metadata.Compute == nil { - return cloudprovider.Zone{}, fmt.Errorf("failure of getting compute information from instance metadata") - } - - zone := "" - if metadata.Compute.Zone != "" { - zoneID, err := strconv.Atoi(metadata.Compute.Zone) + if az.UseInstanceMetadata { + metadata, err := az.metadata.GetMetadata() if err != nil { - return cloudprovider.Zone{}, fmt.Errorf("failed to parse zone ID %q: %v", metadata.Compute.Zone, err) + return cloudprovider.Zone{}, err } - zone = az.makeZone(zoneID) - } else { - klog.V(3).Infof("Availability zone is not enabled for the node, falling back to fault domain") - zone = metadata.Compute.FaultDomain - } - return cloudprovider.Zone{ - FailureDomain: zone, - Region: az.Location, - }, nil + if metadata.Compute == nil { + return cloudprovider.Zone{}, fmt.Errorf("failure of getting compute information from instance metadata") + } + + zone := "" + if metadata.Compute.Zone != "" { + zoneID, err := strconv.Atoi(metadata.Compute.Zone) + if err != nil { + return cloudprovider.Zone{}, fmt.Errorf("failed to parse zone ID %q: %v", metadata.Compute.Zone, err) + } + zone = az.makeZone(zoneID) + } else { + klog.V(3).Infof("Availability zone is not enabled for the node, falling back to fault domain") + zone = metadata.Compute.FaultDomain + } + + return cloudprovider.Zone{ + FailureDomain: zone, + Region: az.Location, + }, nil + } + // if UseInstanceMetadata is false, get Zone name by calling ARM + hostname, err := os.Hostname() + if err != nil { + return cloudprovider.Zone{}, fmt.Errorf("failure getting hostname from kernel") + } + return az.vmSet.GetZoneByNodeName(strings.ToLower(hostname)) } // GetZoneByProviderID implements Zones.GetZoneByProviderID