Read subscription ID from instance metadata

This commit is contained in:
Jose Armesto 2019-11-19 16:30:28 +01:00
parent 30256a6259
commit f26e3d51b0
No known key found for this signature in database
GPG Key ID: C10B9C02529D58DB
1 changed files with 29 additions and 2 deletions

View File

@ -26,9 +26,11 @@ import (
"github.com/Azure/go-autorest/autorest/azure"
"gopkg.in/gcfg.v1"
"k8s.io/klog"
azure2 "k8s.io/legacy-cloud-providers/azure"
"k8s.io/autoscaler/cluster-autoscaler/cloudprovider"
"k8s.io/autoscaler/cluster-autoscaler/config/dynamic"
"k8s.io/klog"
)
const (
@ -49,6 +51,7 @@ const (
autoDiscovererTypeLabel = "label"
labelAutoDiscovererKeyMinNodes = "min"
labelAutoDiscovererKeyMaxNodes = "max"
metadataURL = "http://169.254.169.254/metadata/instance"
)
var validLabelAutoDiscovererKeys = strings.Join([]string{
@ -130,7 +133,6 @@ func CreateAzureManager(configReader io.Reader, discoveryOpts cloudprovider.Node
}
} else {
cfg.Cloud = os.Getenv("ARM_CLOUD")
cfg.SubscriptionID = os.Getenv("ARM_SUBSCRIPTION_ID")
cfg.ResourceGroup = os.Getenv("ARM_RESOURCE_GROUP")
cfg.TenantID = os.Getenv("ARM_TENANT_ID")
cfg.AADClientID = os.Getenv("ARM_CLIENT_ID")
@ -142,6 +144,12 @@ func CreateAzureManager(configReader io.Reader, discoveryOpts cloudprovider.Node
cfg.ClusterName = os.Getenv("AZURE_CLUSTER_NAME")
cfg.NodeResourceGroup = os.Getenv("AZURE_NODE_RESOURCE_GROUP")
subscriptionID, err := getSubscriptionIdFromInstanceMetadata()
if err != nil {
return nil, err
}
cfg.SubscriptionID = subscriptionID
useManagedIdentityExtensionFromEnv := os.Getenv("ARM_USE_MANAGED_IDENTITY_EXTENSION")
if len(useManagedIdentityExtensionFromEnv) > 0 {
cfg.UseManagedIdentityExtension, err = strconv.ParseBool(useManagedIdentityExtensionFromEnv)
@ -534,3 +542,22 @@ func parseLabelAutoDiscoverySpec(spec string) (labelAutoDiscoveryConfig, error)
}
return cfg, nil
}
// getSubscriptionId reads the Subscription ID from the instance metadata.
func getSubscriptionIdFromInstanceMetadata() (string, error) {
subscriptionID, present := os.LookupEnv("ARM_SUBSCRIPTION_ID")
if !present {
metadataService, err := azure2.NewInstanceMetadataService(metadataURL)
if err != nil {
return "", err
}
metadata, err := metadataService.GetMetadata()
if err != nil {
return "", err
}
return metadata.Compute.SubscriptionID, nil
}
return subscriptionID, nil
}