UNPKG

azure-cli

Version:

Microsoft Azure Cross Platform Command Line tool

227 lines (204 loc) 9.96 kB
/** * Copyright (c) Microsoft. All rights reserved. * * 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. */ 'use strict'; var _ = require('underscore'); var url = require('url'); var util = require('util'); var constants = require('../constants'); var $ = require('../utils').getLocaleString; var DEFAULT_ENV_NAME = 'AzureCloud'; function nulls(properties) { return properties.reduce(function (acc, prop) { acc[prop] = null; return acc; }, {}); } function Environment(envData) { var self = this; self.name = envData.name; var values = envData; _.defaults(values, nulls(_.pluck(Environment.parameters, 'name'))); Environment.parameters.forEach(function (param) { Object.defineProperty(self, param.name, param.propertyDescriptor(self)); }); Object.defineProperties(self, { isPublicEnvironment: { enumerable: true, configurable: false, get: function () { return _.chain(Environment.publicEnvironments).pluck('name').contains(this.name).value(); } }, values: { enumerable: false, configurable: false, get: function () { return values; } } }); } function EnvironmentParameter(name, environmentVariable, description) { this.name = name; this.environmentVariable = environmentVariable; this.description = $(description); } _.extend(EnvironmentParameter.prototype, { propertyDescriptor: function (env) { var self = this; return { enumerable: true, configurable: false, get: function () { var val = process.env[self.environmentVariable] || env.values[self.name]; if (val === null) { throw new Error(util.format( $('The endpoint field %s is not defined in this environment.' + ' Either this feature is not supported or the endpoint needs to be set using \'azure account env set\''), self.name)); } return val; }, set: function (value) { this.values[self.name] = value; } }; }, }); Environment.parameters = [ new EnvironmentParameter('portalUrl', 'AZURE_PORTAL_URL', 'the management portal URL'), new EnvironmentParameter('publishingProfileUrl', 'AZURE_PUBLISHINGPROFILE_URL', 'the publish settings file URL'), new EnvironmentParameter('managementEndpointUrl', 'AZURE_MANAGEMENTENDPOINT_URL', 'the management service endpoint'), new EnvironmentParameter('resourceManagerEndpointUrl', 'AZURE_RESOURCEMANAGERENDPOINT_URL', 'the resource management endpoint'), new EnvironmentParameter('sqlManagementEndpointUrl', 'AZURE_SQL_MANAGEMENTENDPOINT_URL', 'the sql server management endpoint for mobile commands'), new EnvironmentParameter('sqlServerHostnameSuffix', 'AZURE_SQL_SERVER_HOSTNAME_SUFFIX', 'the dns suffix for sql servers'), new EnvironmentParameter('activeDirectoryEndpointUrl', 'AZURE_ACTIVEDIRECTORY_ENDPOINT_URL', 'the Active Directory login endpoint'), new EnvironmentParameter('activeDirectoryResourceId', 'AZURE_ACTIVEDIRECTORY_RESOURCE_ID', 'The resource ID to obtain AD tokens for'), new EnvironmentParameter('galleryEndpointUrl', 'AZURE_GALLERY_ENDPOINT_URL', 'the template gallery endpoint'), new EnvironmentParameter('activeDirectoryGraphResourceId', 'AZURE_ACTIVEDIRECTORY_GRAPH_RESOURCE_ID', 'the Active Directory resource ID'), new EnvironmentParameter('activeDirectoryGraphApiVersion', 'AZURE_ACTIVEDIRECTORY_GRAPH_API_VERSION', 'the Active Directory api version'), new EnvironmentParameter('storageEndpointSuffix', 'AZURE_STORAGE_ENDPOINT_SUFFIX', 'the endpoint suffix for storage accounts'), new EnvironmentParameter('keyVaultDnsSuffix', 'AZURE_KEYVAULT_DNS_SUFFIX', 'the keyvault service dns suffix'), new EnvironmentParameter('azureDataLakeStoreFileSystemEndpointSuffix', 'AZURE_DATALAKE_STORE_FILESYSTEM_DNS_SUFFIX', 'the data lake store filesystem service dns suffix'), new EnvironmentParameter('azureDataLakeAnalyticsCatalogAndJobEndpointSuffix', 'AZURE_DATALAKE_ANALYTICS_JOB_CATALOG_DNS_SUFFIX', 'the data lake analytics job and catalog service dns suffix') ]; function addRealm(targetUrl, realm) { if (realm) { var urlObj = url.parse(targetUrl, true); delete urlObj.search; urlObj.query.whr = realm; targetUrl = url.format(urlObj); } return targetUrl; } _.extend(Environment.prototype, { getPortalUrl: function (realm) { return addRealm(this.portalUrl, realm); }, getPublishingProfileUrl: function (realm) { return addRealm(this.publishingProfileUrl, realm); }, toJSON: function () { return _.extend({ name: this.name }, this.values); }, getAuthConfig: function (tenantId, resourceId) { if (!tenantId) { tenantId = constants.AAD_COMMON_TENANT; } if (!resourceId) { resourceId = this.activeDirectoryResourceId; } return { authorityUrl: this.activeDirectoryEndpointUrl, tenantId: tenantId, resourceId: resourceId, clientId: constants.XPLAT_CLI_CLIENT_ID }; }, isDefaultEnv: function () { return this.name === DEFAULT_ENV_NAME; } }); Environment.publicEnvironments = [ new Environment({ name: DEFAULT_ENV_NAME, portalUrl: 'http://go.microsoft.com/fwlink/?LinkId=254433', publishingProfileUrl: 'http://go.microsoft.com/fwlink/?LinkId=254432', managementEndpointUrl: 'https://management.core.windows.net', resourceManagerEndpointUrl: 'https://management.azure.com/', sqlManagementEndpointUrl: 'https://management.core.windows.net:8443/', sqlServerHostnameSuffix: '.database.windows.net', galleryEndpointUrl: 'https://gallery.azure.com/', activeDirectoryEndpointUrl: 'https://login.microsoftonline.com', activeDirectoryResourceId: 'https://management.core.windows.net/', activeDirectoryGraphResourceId: 'https://graph.windows.net/', activeDirectoryGraphApiVersion: '2013-04-05', storageEndpointSuffix: '.core.windows.net', keyVaultDnsSuffix: '.vault.azure.net', azureDataLakeStoreFileSystemEndpointSuffix: 'azuredatalakestore.net', azureDataLakeAnalyticsCatalogAndJobEndpointSuffix: 'azuredatalakeanalytics.net' }), new Environment({ name: 'AzureChinaCloud', portalUrl: 'http://go.microsoft.com/fwlink/?LinkId=301902', publishingProfileUrl: 'http://go.microsoft.com/fwlink/?LinkID=301774', managementEndpointUrl: 'https://management.core.chinacloudapi.cn', resourceManagerEndpointUrl: 'https://management.chinacloudapi.cn', sqlManagementEndpointUrl: 'https://management.core.chinacloudapi.cn:8443/', sqlServerHostnameSuffix: '.database.chinacloudapi.cn', galleryEndpointUrl: 'https://gallery.chinacloudapi.cn/', activeDirectoryEndpointUrl: 'https://login.chinacloudapi.cn', activeDirectoryResourceId: 'https://management.core.chinacloudapi.cn/', activeDirectoryGraphResourceId: 'https://graph.chinacloudapi.cn/', activeDirectoryGraphApiVersion: '2013-04-05', storageEndpointSuffix: '.core.chinacloudapi.cn', keyVaultDnsSuffix: '.vault.azure.cn', // TODO: add dns suffixes for the china cloud for datalake store and datalake analytics once they are defined. azureDataLakeStoreFileSystemEndpointSuffix: 'N/A', azureDataLakeAnalyticsCatalogAndJobEndpointSuffix: 'N/A' }), new Environment({ name: 'AzureUSGovernment', portalUrl: 'https://portal.azure.us', publishingProfileUrl: 'https://manage.windowsazure.us/publishsettings/index', managementEndpointUrl: 'https://management.core.usgovcloudapi.net', resourceManagerEndpointUrl: 'https://management.usgovcloudapi.net', sqlManagementEndpointUrl: 'https://management.core.usgovcloudapi.net:8443/', sqlServerHostnameSuffix: '.database.usgovcloudapi.net', galleryEndpointUrl: 'https://gallery.usgovcloudapi.net/', activeDirectoryEndpointUrl: 'https://login.microsoftonline.us', activeDirectoryResourceId: 'https://management.core.usgovcloudapi.net/', activeDirectoryGraphResourceId: 'https://graph.windows.net/', activeDirectoryGraphApiVersion: '2013-04-05', storageEndpointSuffix: '.core.usgovcloudapi.net', keyVaultDnsSuffix: '.vault.usgovcloudapi.net', // TODO: add dns suffixes for the US government for datalake store and datalake analytics once they are defined. azureDataLakeStoreFileSystemEndpointSuffix: 'N/A', azureDataLakeAnalyticsCatalogAndJobEndpointSuffix: 'N/A' }), new Environment({ name: 'AzureGermanCloud', portalUrl: 'http://portal.microsoftazure.de/', publishingProfileUrl: 'https://manage.microsoftazure.de/publishsettings/index', managementEndpointUrl: 'https://management.core.cloudapi.de', resourceManagerEndpointUrl: 'https://management.microsoftazure.de', sqlManagementEndpointUrl: 'https://management.core.cloudapi.de:8443/', sqlServerHostnameSuffix: '.database.cloudapi.de', galleryEndpointUrl: 'https://gallery.cloudapi.de/', activeDirectoryEndpointUrl: 'https://login.microsoftonline.de', activeDirectoryResourceId: 'https://management.core.cloudapi.de/', activeDirectoryGraphResourceId: 'https://graph.cloudapi.de/', activeDirectoryGraphApiVersion: '2013-04-05', storageEndpointSuffix: '.core.cloudapi.de', keyVaultDnsSuffix: '.vault.microsoftazure.de', // TODO: add dns suffixes for the US government for datalake store and datalake analytics once they are defined. azureDataLakeStoreFileSystemEndpointSuffix: 'N/A', azureDataLakeAnalyticsCatalogAndJobEndpointSuffix: 'N/A' }) ]; module.exports = Environment;