|
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 |
}
|