code: func (az *Cloud) GetZone(ctx context.Context) (cloudprovider.Zone, error) {
  	if az.UseInstanceMetadata {
  		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 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))
  }
docs: // 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.