diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_instances.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_instances.go index aff9dbf0c2c..53c58276126 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_instances.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_instances.go @@ -236,30 +236,27 @@ func (az *Cloud) InstanceShutdownByProviderID(ctx context.Context, providerID st } // InstanceMetadataByProviderID returns metadata of the specified instance. +// InstanceMetadataByProviderID is part of InstancesV2 interface and is only used in cloud node-controller. func (az *Cloud) InstanceMetadataByProviderID(ctx context.Context, providerID string) (*cloudprovider.InstanceMetadata, error) { if providerID == "" { return nil, errNodeNotInitialized } + // Returns nil for unmanaged nodes because azure cloud provider couldn't fetch information for them. + if az.IsNodeUnmanagedByProviderID(providerID) { + klog.V(4).Infof("NodeAddressesByProviderID: omitting unmanaged node %q", providerID) + return nil, nil + } + nodeName, err := az.vmSet.GetNodeNameByProviderID(providerID) if err != nil { return nil, err } - // Returns "" for unmanaged nodes because azure cloud provider couldn't fetch information for them. - unmanaged, err := az.IsNodeUnmanaged(string(nodeName)) - if err != nil { - return nil, err - } - if unmanaged { - klog.V(4).Infof("InstanceType: omitting unmanaged node %q", string(nodeName)) - return nil, nil - } - md := &cloudprovider.InstanceMetadata{} md.ProviderID = providerID if az.UseInstanceMetadata { - metadata, err := az.metadata.GetMetadata(azcache.CacheReadTypeUnsafe) + metadata, err := az.metadata.GetMetadata(azcache.CacheReadTypeDefault) if err != nil { return nil, err } @@ -288,6 +285,7 @@ func (az *Cloud) InstanceMetadataByProviderID(ctx context.Context, providerID st return nil, fmt.Errorf("no credentials provided for Azure cloud provider") } + // Get instance metadata from IMDS for local instance. if metadata.Compute.VMSize != "" { md.Type = metadata.Compute.VMSize } else { @@ -301,6 +299,7 @@ func (az *Cloud) InstanceMetadataByProviderID(ctx context.Context, providerID st return md, nil } + // Get instance metadata from ARM API when UseInstanceMetadata is disabled. if md.Type, err = az.vmSet.GetInstanceTypeByNodeName(string(nodeName)); err != nil { return nil, err } diff --git a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_instances_test.go b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_instances_test.go index 134953ea065..3f5b02415ef 100644 --- a/staging/src/k8s.io/legacy-cloud-providers/azure/azure_instances_test.go +++ b/staging/src/k8s.io/legacy-cloud-providers/azure/azure_instances_test.go @@ -690,6 +690,11 @@ func TestInstanceMetadataByProviderID(t *testing.T) { name: "InstanceMetadataByProviderID should report error if providerID is null", expectedErrMsg: fmt.Errorf("providerID is empty, the node is not initialized yet"), }, + { + name: "InstanceMetadataByProviderID should return nil if the node is unmanaged", + providerID: "baremental-node", + expectedMetadata: nil, + }, { name: "InstanceMetadataByProviderID should report error if providerID is invalid", providerID: "azure:///subscriptions/subscription/resourceGroups/rg/providers/Microsoft.Compute/virtualMachine/vm3",