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