Blame vendor/github.com/Azure/go-autorest/autorest/azure/environments.go

Packit 63bb0d
package azure
Packit 63bb0d
Packit 63bb0d
// Copyright 2017 Microsoft Corporation
Packit 63bb0d
//
Packit 63bb0d
//  Licensed under the Apache License, Version 2.0 (the "License");
Packit 63bb0d
//  you may not use this file except in compliance with the License.
Packit 63bb0d
//  You may obtain a copy of the License at
Packit 63bb0d
//
Packit 63bb0d
//      http://www.apache.org/licenses/LICENSE-2.0
Packit 63bb0d
//
Packit 63bb0d
//  Unless required by applicable law or agreed to in writing, software
Packit 63bb0d
//  distributed under the License is distributed on an "AS IS" BASIS,
Packit 63bb0d
//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 63bb0d
//  See the License for the specific language governing permissions and
Packit 63bb0d
//  limitations under the License.
Packit 63bb0d
Packit 63bb0d
import (
Packit 63bb0d
	"encoding/json"
Packit 63bb0d
	"fmt"
Packit 63bb0d
	"io/ioutil"
Packit 63bb0d
	"os"
Packit 63bb0d
	"strings"
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
const (
Packit 63bb0d
	// EnvironmentFilepathName captures the name of the environment variable containing the path to the file
Packit 63bb0d
	// to be used while populating the Azure Environment.
Packit 63bb0d
	EnvironmentFilepathName = "AZURE_ENVIRONMENT_FILEPATH"
Packit 63bb0d
Packit 63bb0d
	// NotAvailable is used for endpoints and resource IDs that are not available for a given cloud.
Packit 63bb0d
	NotAvailable = "N/A"
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
var environments = map[string]Environment{
Packit 63bb0d
	"AZURECHINACLOUD":        ChinaCloud,
Packit 63bb0d
	"AZUREGERMANCLOUD":       GermanCloud,
Packit 63bb0d
	"AZUREPUBLICCLOUD":       PublicCloud,
Packit 63bb0d
	"AZUREUSGOVERNMENTCLOUD": USGovernmentCloud,
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// ResourceIdentifier contains a set of Azure resource IDs.
Packit 63bb0d
type ResourceIdentifier struct {
Packit 63bb0d
	Graph               string `json:"graph"`
Packit 63bb0d
	KeyVault            string `json:"keyVault"`
Packit 63bb0d
	Datalake            string `json:"datalake"`
Packit 63bb0d
	Batch               string `json:"batch"`
Packit 63bb0d
	OperationalInsights string `json:"operationalInsights"`
Packit 63bb0d
	Storage             string `json:"storage"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// Environment represents a set of endpoints for each of Azure's Clouds.
Packit 63bb0d
type Environment struct {
Packit 63bb0d
	Name                         string             `json:"name"`
Packit 63bb0d
	ManagementPortalURL          string             `json:"managementPortalURL"`
Packit 63bb0d
	PublishSettingsURL           string             `json:"publishSettingsURL"`
Packit 63bb0d
	ServiceManagementEndpoint    string             `json:"serviceManagementEndpoint"`
Packit 63bb0d
	ResourceManagerEndpoint      string             `json:"resourceManagerEndpoint"`
Packit 63bb0d
	ActiveDirectoryEndpoint      string             `json:"activeDirectoryEndpoint"`
Packit 63bb0d
	GalleryEndpoint              string             `json:"galleryEndpoint"`
Packit 63bb0d
	KeyVaultEndpoint             string             `json:"keyVaultEndpoint"`
Packit 63bb0d
	GraphEndpoint                string             `json:"graphEndpoint"`
Packit 63bb0d
	ServiceBusEndpoint           string             `json:"serviceBusEndpoint"`
Packit 63bb0d
	BatchManagementEndpoint      string             `json:"batchManagementEndpoint"`
Packit 63bb0d
	StorageEndpointSuffix        string             `json:"storageEndpointSuffix"`
Packit 63bb0d
	SQLDatabaseDNSSuffix         string             `json:"sqlDatabaseDNSSuffix"`
Packit 63bb0d
	TrafficManagerDNSSuffix      string             `json:"trafficManagerDNSSuffix"`
Packit 63bb0d
	KeyVaultDNSSuffix            string             `json:"keyVaultDNSSuffix"`
Packit 63bb0d
	ServiceBusEndpointSuffix     string             `json:"serviceBusEndpointSuffix"`
Packit 63bb0d
	ServiceManagementVMDNSSuffix string             `json:"serviceManagementVMDNSSuffix"`
Packit 63bb0d
	ResourceManagerVMDNSSuffix   string             `json:"resourceManagerVMDNSSuffix"`
Packit 63bb0d
	ContainerRegistryDNSSuffix   string             `json:"containerRegistryDNSSuffix"`
Packit 63bb0d
	CosmosDBDNSSuffix            string             `json:"cosmosDBDNSSuffix"`
Packit 63bb0d
	TokenAudience                string             `json:"tokenAudience"`
Packit 63bb0d
	ResourceIdentifiers          ResourceIdentifier `json:"resourceIdentifiers"`
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
var (
Packit 63bb0d
	// PublicCloud is the default public Azure cloud environment
Packit 63bb0d
	PublicCloud = Environment{
Packit 63bb0d
		Name:                         "AzurePublicCloud",
Packit 63bb0d
		ManagementPortalURL:          "https://manage.windowsazure.com/",
Packit 63bb0d
		PublishSettingsURL:           "https://manage.windowsazure.com/publishsettings/index",
Packit 63bb0d
		ServiceManagementEndpoint:    "https://management.core.windows.net/",
Packit 63bb0d
		ResourceManagerEndpoint:      "https://management.azure.com/",
Packit 63bb0d
		ActiveDirectoryEndpoint:      "https://login.microsoftonline.com/",
Packit 63bb0d
		GalleryEndpoint:              "https://gallery.azure.com/",
Packit 63bb0d
		KeyVaultEndpoint:             "https://vault.azure.net/",
Packit 63bb0d
		GraphEndpoint:                "https://graph.windows.net/",
Packit 63bb0d
		ServiceBusEndpoint:           "https://servicebus.windows.net/",
Packit 63bb0d
		BatchManagementEndpoint:      "https://batch.core.windows.net/",
Packit 63bb0d
		StorageEndpointSuffix:        "core.windows.net",
Packit 63bb0d
		SQLDatabaseDNSSuffix:         "database.windows.net",
Packit 63bb0d
		TrafficManagerDNSSuffix:      "trafficmanager.net",
Packit 63bb0d
		KeyVaultDNSSuffix:            "vault.azure.net",
Packit 63bb0d
		ServiceBusEndpointSuffix:     "servicebus.windows.net",
Packit 63bb0d
		ServiceManagementVMDNSSuffix: "cloudapp.net",
Packit 63bb0d
		ResourceManagerVMDNSSuffix:   "cloudapp.azure.com",
Packit 63bb0d
		ContainerRegistryDNSSuffix:   "azurecr.io",
Packit 63bb0d
		CosmosDBDNSSuffix:            "documents.azure.com",
Packit 63bb0d
		TokenAudience:                "https://management.azure.com/",
Packit 63bb0d
		ResourceIdentifiers: ResourceIdentifier{
Packit 63bb0d
			Graph:               "https://graph.windows.net/",
Packit 63bb0d
			KeyVault:            "https://vault.azure.net",
Packit 63bb0d
			Datalake:            "https://datalake.azure.net/",
Packit 63bb0d
			Batch:               "https://batch.core.windows.net/",
Packit 63bb0d
			OperationalInsights: "https://api.loganalytics.io",
Packit 63bb0d
			Storage:             "https://storage.azure.com/",
Packit 63bb0d
		},
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	// USGovernmentCloud is the cloud environment for the US Government
Packit 63bb0d
	USGovernmentCloud = Environment{
Packit 63bb0d
		Name:                         "AzureUSGovernmentCloud",
Packit 63bb0d
		ManagementPortalURL:          "https://manage.windowsazure.us/",
Packit 63bb0d
		PublishSettingsURL:           "https://manage.windowsazure.us/publishsettings/index",
Packit 63bb0d
		ServiceManagementEndpoint:    "https://management.core.usgovcloudapi.net/",
Packit 63bb0d
		ResourceManagerEndpoint:      "https://management.usgovcloudapi.net/",
Packit 63bb0d
		ActiveDirectoryEndpoint:      "https://login.microsoftonline.us/",
Packit 63bb0d
		GalleryEndpoint:              "https://gallery.usgovcloudapi.net/",
Packit 63bb0d
		KeyVaultEndpoint:             "https://vault.usgovcloudapi.net/",
Packit 63bb0d
		GraphEndpoint:                "https://graph.windows.net/",
Packit 63bb0d
		ServiceBusEndpoint:           "https://servicebus.usgovcloudapi.net/",
Packit 63bb0d
		BatchManagementEndpoint:      "https://batch.core.usgovcloudapi.net/",
Packit 63bb0d
		StorageEndpointSuffix:        "core.usgovcloudapi.net",
Packit 63bb0d
		SQLDatabaseDNSSuffix:         "database.usgovcloudapi.net",
Packit 63bb0d
		TrafficManagerDNSSuffix:      "usgovtrafficmanager.net",
Packit 63bb0d
		KeyVaultDNSSuffix:            "vault.usgovcloudapi.net",
Packit 63bb0d
		ServiceBusEndpointSuffix:     "servicebus.usgovcloudapi.net",
Packit 63bb0d
		ServiceManagementVMDNSSuffix: "usgovcloudapp.net",
Packit 63bb0d
		ResourceManagerVMDNSSuffix:   "cloudapp.windowsazure.us",
Packit 63bb0d
		ContainerRegistryDNSSuffix:   "azurecr.us",
Packit 63bb0d
		CosmosDBDNSSuffix:            "documents.azure.us",
Packit 63bb0d
		TokenAudience:                "https://management.usgovcloudapi.net/",
Packit 63bb0d
		ResourceIdentifiers: ResourceIdentifier{
Packit 63bb0d
			Graph:               "https://graph.windows.net/",
Packit 63bb0d
			KeyVault:            "https://vault.usgovcloudapi.net",
Packit 63bb0d
			Datalake:            NotAvailable,
Packit 63bb0d
			Batch:               "https://batch.core.usgovcloudapi.net/",
Packit 63bb0d
			OperationalInsights: "https://api.loganalytics.us",
Packit 63bb0d
			Storage:             "https://storage.azure.com/",
Packit 63bb0d
		},
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	// ChinaCloud is the cloud environment operated in China
Packit 63bb0d
	ChinaCloud = Environment{
Packit 63bb0d
		Name:                         "AzureChinaCloud",
Packit 63bb0d
		ManagementPortalURL:          "https://manage.chinacloudapi.com/",
Packit 63bb0d
		PublishSettingsURL:           "https://manage.chinacloudapi.com/publishsettings/index",
Packit 63bb0d
		ServiceManagementEndpoint:    "https://management.core.chinacloudapi.cn/",
Packit 63bb0d
		ResourceManagerEndpoint:      "https://management.chinacloudapi.cn/",
Packit 63bb0d
		ActiveDirectoryEndpoint:      "https://login.chinacloudapi.cn/",
Packit 63bb0d
		GalleryEndpoint:              "https://gallery.chinacloudapi.cn/",
Packit 63bb0d
		KeyVaultEndpoint:             "https://vault.azure.cn/",
Packit 63bb0d
		GraphEndpoint:                "https://graph.chinacloudapi.cn/",
Packit 63bb0d
		ServiceBusEndpoint:           "https://servicebus.chinacloudapi.cn/",
Packit 63bb0d
		BatchManagementEndpoint:      "https://batch.chinacloudapi.cn/",
Packit 63bb0d
		StorageEndpointSuffix:        "core.chinacloudapi.cn",
Packit 63bb0d
		SQLDatabaseDNSSuffix:         "database.chinacloudapi.cn",
Packit 63bb0d
		TrafficManagerDNSSuffix:      "trafficmanager.cn",
Packit 63bb0d
		KeyVaultDNSSuffix:            "vault.azure.cn",
Packit 63bb0d
		ServiceBusEndpointSuffix:     "servicebus.chinacloudapi.cn",
Packit 63bb0d
		ServiceManagementVMDNSSuffix: "chinacloudapp.cn",
Packit 63bb0d
		ResourceManagerVMDNSSuffix:   "cloudapp.azure.cn",
Packit 63bb0d
		ContainerRegistryDNSSuffix:   "azurecr.cn",
Packit 63bb0d
		CosmosDBDNSSuffix:            "documents.azure.cn",
Packit 63bb0d
		TokenAudience:                "https://management.chinacloudapi.cn/",
Packit 63bb0d
		ResourceIdentifiers: ResourceIdentifier{
Packit 63bb0d
			Graph:               "https://graph.chinacloudapi.cn/",
Packit 63bb0d
			KeyVault:            "https://vault.azure.cn",
Packit 63bb0d
			Datalake:            NotAvailable,
Packit 63bb0d
			Batch:               "https://batch.chinacloudapi.cn/",
Packit 63bb0d
			OperationalInsights: NotAvailable,
Packit 63bb0d
			Storage:             "https://storage.azure.com/",
Packit 63bb0d
		},
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	// GermanCloud is the cloud environment operated in Germany
Packit 63bb0d
	GermanCloud = Environment{
Packit 63bb0d
		Name:                         "AzureGermanCloud",
Packit 63bb0d
		ManagementPortalURL:          "http://portal.microsoftazure.de/",
Packit 63bb0d
		PublishSettingsURL:           "https://manage.microsoftazure.de/publishsettings/index",
Packit 63bb0d
		ServiceManagementEndpoint:    "https://management.core.cloudapi.de/",
Packit 63bb0d
		ResourceManagerEndpoint:      "https://management.microsoftazure.de/",
Packit 63bb0d
		ActiveDirectoryEndpoint:      "https://login.microsoftonline.de/",
Packit 63bb0d
		GalleryEndpoint:              "https://gallery.cloudapi.de/",
Packit 63bb0d
		KeyVaultEndpoint:             "https://vault.microsoftazure.de/",
Packit 63bb0d
		GraphEndpoint:                "https://graph.cloudapi.de/",
Packit 63bb0d
		ServiceBusEndpoint:           "https://servicebus.cloudapi.de/",
Packit 63bb0d
		BatchManagementEndpoint:      "https://batch.cloudapi.de/",
Packit 63bb0d
		StorageEndpointSuffix:        "core.cloudapi.de",
Packit 63bb0d
		SQLDatabaseDNSSuffix:         "database.cloudapi.de",
Packit 63bb0d
		TrafficManagerDNSSuffix:      "azuretrafficmanager.de",
Packit 63bb0d
		KeyVaultDNSSuffix:            "vault.microsoftazure.de",
Packit 63bb0d
		ServiceBusEndpointSuffix:     "servicebus.cloudapi.de",
Packit 63bb0d
		ServiceManagementVMDNSSuffix: "azurecloudapp.de",
Packit 63bb0d
		ResourceManagerVMDNSSuffix:   "cloudapp.microsoftazure.de",
Packit 63bb0d
		ContainerRegistryDNSSuffix:   NotAvailable,
Packit 63bb0d
		CosmosDBDNSSuffix:            "documents.microsoftazure.de",
Packit 63bb0d
		TokenAudience:                "https://management.microsoftazure.de/",
Packit 63bb0d
		ResourceIdentifiers: ResourceIdentifier{
Packit 63bb0d
			Graph:               "https://graph.cloudapi.de/",
Packit 63bb0d
			KeyVault:            "https://vault.microsoftazure.de",
Packit 63bb0d
			Datalake:            NotAvailable,
Packit 63bb0d
			Batch:               "https://batch.cloudapi.de/",
Packit 63bb0d
			OperationalInsights: NotAvailable,
Packit 63bb0d
			Storage:             "https://storage.azure.com/",
Packit 63bb0d
		},
Packit 63bb0d
	}
Packit 63bb0d
)
Packit 63bb0d
Packit 63bb0d
// EnvironmentFromName returns an Environment based on the common name specified.
Packit 63bb0d
func EnvironmentFromName(name string) (Environment, error) {
Packit 63bb0d
	// IMPORTANT
Packit 63bb0d
	// As per @radhikagupta5:
Packit 63bb0d
	// This is technical debt, fundamentally here because Kubernetes is not currently accepting
Packit 63bb0d
	// contributions to the providers. Once that is an option, the provider should be updated to
Packit 63bb0d
	// directly call `EnvironmentFromFile`. Until then, we rely on dispatching Azure Stack environment creation
Packit 63bb0d
	// from this method based on the name that is provided to us.
Packit 63bb0d
	if strings.EqualFold(name, "AZURESTACKCLOUD") {
Packit 63bb0d
		return EnvironmentFromFile(os.Getenv(EnvironmentFilepathName))
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	name = strings.ToUpper(name)
Packit 63bb0d
	env, ok := environments[name]
Packit 63bb0d
	if !ok {
Packit 63bb0d
		return env, fmt.Errorf("autorest/azure: There is no cloud environment matching the name %q", name)
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	return env, nil
Packit 63bb0d
}
Packit 63bb0d
Packit 63bb0d
// EnvironmentFromFile loads an Environment from a configuration file available on disk.
Packit 63bb0d
// This function is particularly useful in the Hybrid Cloud model, where one must define their own
Packit 63bb0d
// endpoints.
Packit 63bb0d
func EnvironmentFromFile(location string) (unmarshaled Environment, err error) {
Packit 63bb0d
	fileContents, err := ioutil.ReadFile(location)
Packit 63bb0d
	if err != nil {
Packit 63bb0d
		return
Packit 63bb0d
	}
Packit 63bb0d
Packit 63bb0d
	err = json.Unmarshal(fileContents, &unmarshaled)
Packit 63bb0d
Packit 63bb0d
	return
Packit 63bb0d
}