azure-cli
Version:
Microsoft Azure Cross Platform Command Line tool
545 lines (321 loc) • 24.7 kB
JavaScript
/*** Generated by streamline 0.10.17 (callbacks) - DO NOT EDIT ***/ "use strict"; var __rt=require('streamline/lib/callbacks/runtime').runtime(__filename, false),__func=__rt.__func,__cb=__rt.__cb; var __ = require("underscore");
var fs = require("fs");
var path = require("path");
var request = require("request");
var through = require("through");
var util = require("util");
var validation = require("../../../util/validation");
var profile = require("../../../util/profile");
var utils = require("../../../util/utils");
var jsonlint = require("jsonlint");
var jsonminify = require("jsonminify");
var $ = utils.getLocaleString;
exports.getGroup = function getGroup(client, name, callback) {
client.resourceGroups.get(name, function(err, group) {
if (err) {
if ((err.statusCode === 404)) {
callback(null, null); }
else {
callback(err); } ; }
else {
callback(null, group); } ; });};
exports.getResource = function getResource(client, resourceGroup, identity, callback) {
client.resources.get(resourceGroup, identity.resourceProviderNamespace, identity.parentResourcePath, identity.resourceType, identity.resourceName, identity.resourceProviderApiVersion, function(err, resource) {
if (err) {
if ((err.statusCode === 404)) {
callback(null, null); }
else {
callback(err); } ; }
else {
callback(null, resource); } ; });};
exports.createDeployment = function exports_createDeployment__1(cli, resourceGroup, name, options, _) { var subscription, client, templateParameters, templateName, baseTemplateName, result; var __frame = { name: "exports_createDeployment__1", line: 71 }; return __func(_, this, arguments, exports_createDeployment__1, 4, __frame, function __$exports_createDeployment__1() {
subscription = profile.current.getSubscription(options.subscription);
client = utils.createResourceClient(subscription);
return createDeploymentParameters(cli, subscription, resourceGroup, options, __cb(_, __frame, 4, 27, function ___(__0, __2) { templateParameters = __2;
if (!name) {
templateName = (options.templateFile || options.templateUri);
templateName = sanitizeTemplateName(templateName);
baseTemplateName = path.basename(templateName);
if (utils.stringEndsWith(baseTemplateName, ".json", true)) {
baseTemplateName = path.basename(baseTemplateName, path.extname(baseTemplateName)); } ;
name = baseTemplateName; } ;
return cli.interaction.withProgress($("Creating a deployment"), function __1(log, _) { var response; var __frame = { name: "__1", line: 92 }; return __func(_, this, arguments, __1, 1, __frame, function __$__1() {
return client.deployments.validate(resourceGroup, name, templateParameters, __cb(_, __frame, 1, 40, function ___(__0, __1) { response = __1;
if (response.error) {
log.error(util.format($("%s : %s"), response.error.code, response.error.message));
if (response.error.details) {
response.error.details.forEach(function(detail) {
displayNestedErrorDetailMessage(log, detail); }); } ;
return _(new Error("Deployment validate failed.")); } ;
return client.deployments.beginCreateOrUpdate(resourceGroup, name, templateParameters, __cb(_, __frame, 13, 32, _, true)); }, true)); }); }, __cb(_, __frame, 20, 31, function ___(__0, __3) { result = __3;
cli.output.info(util.format($("Created template deployment \"%s\""), name));
return _(null, result); }, true)); }, true)); });};
exports.validateTemplate = function exports_validateTemplate__2(cli, resourceGroup, options, log, _) { var subscription, client, templateParameters, response; var __frame = { name: "exports_validateTemplate__2", line: 113 }; return __func(_, this, arguments, exports_validateTemplate__2, 4, __frame, function __$exports_validateTemplate__2() {
subscription = profile.current.getSubscription(options.subscription);
client = utils.createResourceClient(subscription);
return createDeploymentParameters(cli, subscription, resourceGroup, options, __cb(_, __frame, 4, 27, function ___(__0, __2) { templateParameters = __2;
return cli.interaction.withProgress($("Validating the template"), function __1(log, _) { var __frame = { name: "__1", line: 120 }; return __func(_, this, arguments, __1, 1, __frame, function __$__1() {
return client.deployments.validate(resourceGroup, "fakedDeploymentName", templateParameters, __cb(_, __frame, 1, 32, _, true)); }); }, __cb(_, __frame, 6, 33, function ___(__0, __3) { response = __3;
response.requiredProviders = getTemplateProviders(response);
if (response.error) {
log.error(util.format($("%s : %s"), response.error.code, response.error.message));
if (response.error.details) {
response.error.details.forEach(function(detail) {
displayNestedErrorDetailMessage(log, detail); }); } ; } ;
return _(null, response); }, true)); }, true)); });};
exports.getTemplateDownloadUrl = function getTemplateDownloadUrl(templateData) {
var urls = [];
templateData.artifacts.forEach(function(e) {
if ((e.type === "template")) {
urls.push({
name: e.name,
uri: e.uri }); } ; });
return urls;};
exports.getAllEvents = function(subscription, groupName) {
var output = through();
var client = utils.createEventsClient(subscription);
client.eventData.listEventsForResourceGroup({
resourceGroupName: groupName,
startTime: new Date((Date.now() - eventRetentionPeriodMS)),
endTime: new Date()
}, function(err, response) {
if (err) {
return output.emit("error", err); } ;
response.eventDataCollection.value.forEach(function(e) {
output.queue(e); });
output.end(); });
return output;};
exports.getDeploymentLog = function(subscription, name, deploymentName) {
var output = through();
var client = utils.createResourceClient(subscription);
client.deployments.get(name, deploymentName, function(err, result) {
if (err) {
return output.emit("error", err); } ;
getDeploymentLogs(subscription, result.properties.correlationId).pipe(output); });
return output;};
exports.getLastDeploymentLog = function(subscription, name) {
var output = through();
var client = utils.createResourceClient(subscription);
client.deployments.list(name, { top: 1 }, function(err, response) {
if (err) { return output.emit("error", err); } ;
if ((response.length === 0)) {
output.emit("error", new Error($("Deployment not found"))); } ;
getDeploymentLogs(subscription, response[0].properties.correlationId).pipe(output); });
return output;};
exports.normalizeDownloadFileName = function normalizeDownloadFileName(downloadFile, quiet, confirmer, callback) {
function ensureDirExists(dirname) {
if (!dirname) {
return; } ;
if (utils.pathExistsSync(dirname)) {
if (!fs.statSync(dirname).isDirectory()) {
throw new Error(util.format($("Path %s already exists and is not a directory."), dirname)); } ;
return; } ;
ensureDirExists(path.dirname(dirname));
fs.mkdirSync(dirname); };
try {
ensureDirExists(path.dirname(downloadFile));
if ((utils.pathExistsSync(downloadFile) && !quiet)) {
confirmer(util.format($("The file %s already exists. Overwrite? [y/n]: "), downloadFile), function(err, confirmed) {
if (confirmed) {
callback(null, downloadFile); }
else {
callback(null, null); } ; }); }
else {
callback(null, downloadFile); } ;
} catch (ex) {
callback(ex); };};
function sanitizeTemplateName(templateName) {
return templateName.split("?")[0];};
function createDeploymentParameters(cli, subscription, resourceGroup, options, _) { var templateOptions, templateOptionsProvided, deploymentParameters, missingObj, jsonFile, templateParams, templateParameters; var __frame = { name: "createDeploymentParameters", line: 242 }; return __func(_, this, arguments, createDeploymentParameters, 4, __frame, function __$createDeploymentParameters() {
templateOptions = [options.templateFile,options.templateUri,];
templateOptionsProvided = templateOptions.filter(function(value) { return (value !== undefined); }).length;
if ((templateOptionsProvided > 1)) {
return _(new Error($("Specify exactly one of the --template-file, or template-uri options."))); } else {
if ((templateOptionsProvided === 0)) {
return _(new Error($("One of the --template-file, or --template-uri options is required."))); } ; } ;
if ((options.parameters && options.parametersFile)) {
return _(new Error($("Either --parameters or --parameters-file need to be specified. Not both."))); } ; return (function __$createDeploymentParameters(__then) {
if (options.parametersFile) {
jsonFile = fs.readFileSync(options.parametersFile, "utf8");
deploymentParameters = parsedContent(utils.stripBOM(jsonFile));
if (deploymentParameters.parameters) {
deploymentParameters = deploymentParameters.parameters; } ;
return missingParameters(deploymentParameters, options, subscription, __cb(_, __frame, 21, 17, function ___(__0, __2) { missingObj = __2;
return addMissingParameters(missingObj, deploymentParameters, cli, subscription, options, __cb(_, __frame, 22, 4, __then, true)); }, true)); } else { return (function __$createDeploymentParameters(__then) {
if (options.parameters) {
deploymentParameters = parsedContent(options.parameters);
return missingParameters(deploymentParameters, options, subscription, __cb(_, __frame, 25, 19, function ___(__0, __3) { missingObj = __3;
return addMissingParameters(missingObj, deploymentParameters, cli, subscription, options, __cb(_, __frame, 26, 4, __then, true)); }, true)); } else {
return templateContent(options, subscription, __cb(_, __frame, 28, 25, function ___(__0, __4) { templateParams = __4.parameters;
return getTheMissingParameters(cli, deploymentParameters, templateParams, subscription, options, __cb(_, __frame, 29, 27, function ___(__0, __5) { deploymentParameters = __5; __then(); }, true)); }, true)); } ; })(__then); } ; })(function __$createDeploymentParameters() {
templateParameters = { };
if (options.mode) {
templateParameters["properties"] = { mode: options.mode.toString() }; }
else {
templateParameters["properties"] = { mode: "Incremental" }; } ;
if (options.debugSetting) {
switch (options.debugSetting.toString().toLowerCase()) {
case "requestcontent": templateParameters["properties"]["debugSetting"] = {
detailLevel: "RequestContent" }; break;
case "responsecontent":
templateParameters["properties"]["debugSetting"] = {
detailLevel: "ResponseContent" }; break;
case "all":
templateParameters["properties"]["debugSetting"] = {
detailLevel: "RequestContent,ResponseContent" }; break;
default:
break;
}; } ;
return cli.interaction.withProgress($("Initializing template configurations and parameters"), function __1(log, _) { var templateUri, templateContent; var __frame = { name: "__1", line: 302 }; return __func(_, this, arguments, __1, 1, __frame, function __$__1() {
templateUri = options.templateUri; return (function __$__1(__then) {
if (!templateUri) {
return getTemplateContent(subscription, options.templateFile, __cb(_, __frame, 4, 30, function ___(__0, __1) { templateContent = __1;
templateParameters["properties"]["template"] = templateContent; __then(); }, true)); } else {
templateParameters["properties"]["templateLink"] = { uri: templateUri };
if (options.templateVersion) {
templateParameters.properties.templateLink.contentVersion = options.templateVersion; } ; __then(); } ; })(function __$__1() {
if (deploymentParameters) {
templateParameters.properties.parameters = deploymentParameters; } ; _(); }); }); }, __cb(_, __frame, 59, 18, function __$createDeploymentParameters() {
return _(null, templateParameters); }, true)); }); });};
var eventRetentionPeriodMS = ((((89 * 24) * 60) * 60) * 1000);
function getDeploymentLogs(subscription, correlationId) {
var output = through();
var client = utils.createEventsClient(subscription);
client.eventData.listEventsForCorrelationId({
correlationId: correlationId,
startTime: new Date((Date.now() - eventRetentionPeriodMS)),
endTime: new Date()
}, function(err, response) {
if (err) {
return output.emit("error", err); } ;
response.eventDataCollection.value.forEach(function(e) {
output.queue(e); });
output.end(); });
return output;};
function getTemplateProviders(validationResponse) {
if ((validationResponse.properties && validationResponse.properties.providers)) {
return __.map(validationResponse.properties.providers, function(provider) {
if (provider.namespace) {
return provider.namespace.toLowerCase(); } ; }); } ;};
function getTemplateContent(subscription, templateFile, _) { var templateFileUri, content;
function readTemplateFileContentFromUri(templateFileUri, callback) {
request(templateFileUri, function(error, response, body) {
callback(error, body); }); }; var __frame = { name: "getTemplateContent", line: 354 }; return __func(_, this, arguments, getTemplateContent, 2, __frame, function __$getTemplateContent() {
if (templateFile) {
if (validation.isURL(templateFile)) {
templateFileUri = templateFile; } ; } ;
content = { }; return (function __$getTemplateContent(__then) {
if (templateFileUri) {
return readTemplateFileContentFromUri(templateFileUri, __cb(_, __frame, 16, 14, function ___(__0, __1) { content = __1; __then(); }, true)); } else {
if (templateFile) {
content = utils.stripBOM(fs.readFileSync(templateFile)); } ; __then(); } ; })(function __$getTemplateContent() {
return _(null, parsedContent(content)); }); });};
function parsedContent(content) {
var hasNoComments = ((findLocation(content).locations.length === 0) ? true : false);
try {
jsonlint.parse(jsonminify(content));
} catch (e) {
try {
jsonlint.parse(content);
} catch (e2) {
if (hasNoComments) {
return jsonlint.parse(content); }
else {
throw estimatedErrorLine(content, e); } ; }; };
try {
return JSON.parse(jsonminify(content));
} catch (e) {
return e.message; };};
function estimatedErrorLine(content, e) {
var message = e.message.split("\n");
var length = message[2].length;
var minified = jsonminify(content);
var substring = message[1].slice((length - 1), (message[1].length - 1));
var location = findLocation(content, minified.indexOf(substring)).count;
return ((((("Error around lines: " + (location).toString()) + " - ") + ((location + 6)).toString()) + ". Error string: ") + substring);};
function findLocation(content, breaker) {
var possible = { };
possible.count = 0;
possible.locations = [];
breaker = ((breaker === undefined) ? content.split("").length : breaker);
content.split("").forEach(function(char, idx) {
if ((idx <= breaker)) {
if ((char === "\n")) {
possible.count += 1; } ;
if ((((content[(idx - 1)] !== ":") && (char === "/")) && (((content[(idx + 1)] === "/") || (content[(idx + 1)] === "*"))))) {
possible.locations.push(possible.count); } ; } ; });
return possible;};
function templateContent(options, subscription, _) { var __frame = { name: "templateContent", line: 428 }; return __func(_, this, arguments, templateContent, 2, __frame, function __$templateContent() { return (function __$templateContent(_) {
var __1 = options.templateFile; return (function __$templateContent(__then) { if (__1) {
return getTemplateContent(subscription, options.templateFile, __cb(_, __frame, 2, 4, _, true)); } else { __then(); } ; })(function __$templateContent() {
return getTemplateContent(subscription, options.templateUri, __cb(_, __frame, 3, 4, _, true)); }); })(__cb(_, __frame, -427, 17, _, true)); });};
function getTemplateParams(cli, parametersObj, subscription, options, _) { var paramKeys; var __frame = { name: "getTemplateParams", line: 434 }; return __func(_, this, arguments, getTemplateParams, 4, __frame, function __$getTemplateParams() {
paramKeys = { }; return (function __$getTemplateParams(__then) {
if (parametersObj) {
return Object.keys(parametersObj).forEach_(__cb(_, __frame, 3, 31, __then, true), 1, function __1(_, param) { var __frame = { name: "__1", line: 437 }; return __func(_, this, arguments, __1, 0, __frame, function __$__1() {
paramKeys[param] = parametersObj[param].defaultValue; return (function __$__1(__then) {
if (!parametersObj[param].defaultValue) {
return cli.interaction.promptIfNotGiven((param + ": "), paramKeys[param], __cb(_, __frame, 3, 43, function ___(__0, __1) { paramKeys[param] = __1;
switch (parametersObj[param].type.toLowerCase()) {
case "int": paramKeys[param] = utils.parseInt(paramKeys[param]);
break;
case "object":
case "bool":
case "array": paramKeys[param] = jsonlint.parse(paramKeys[param]);
break;
}; __then(); }, true)); } else { __then(); } ; })(_); }); }); } else { __then(); } ; })(function __$getTemplateParams() {
return _(null, paramKeys); }); });};
function missingParameters(userParameters, options, subscription, _) { var templateContent, templateParameters, nonDefaultParameters, missingUserParameters, missingObj; var __frame = { name: "missingParameters", line: 458 }; return __func(_, this, arguments, missingParameters, 3, __frame, function __$missingParameters() { return (function __$missingParameters(_) {
var __1 = options.templateFile; return (function __$missingParameters(__then) { if (__1) {
return getTemplateContent(subscription, options.templateFile, __cb(_, __frame, 2, 4, _, true)); } else { __then(); } ; })(function __$missingParameters() {
return getTemplateContent(subscription, options.templateUri, __cb(_, __frame, 3, 4, _, true)); }); })(__cb(_, __frame, -457, 17, function ___(__0, __2) { templateContent = __2;
templateParameters = __.keys(templateContent.parameters);
nonDefaultParameters = templateParameters.filter(function(parameter) {
return (templateContent.parameters[parameter].defaultValue === undefined); });
missingUserParameters = nonDefaultParameters.filter(function(parameter) {
try {
if (userParameters[parameter].reference) {
var secretName = userParameters[parameter].reference.secretName;
var keyVaultId;
if (userParameters[parameter].reference.keyVault) {
keyVaultId = userParameters[parameter].reference.keyVault.id; } ;
return (utils.stringIsNullOrEmpty(secretName) || utils.stringIsNullOrEmpty(keyVaultId)); }
else {
return !userParameters[parameter].value; } ;
} catch (e) {
return true; }; });
missingObj = { };
missingObj.parameters = { };
missingUserParameters.forEach(function(missing) {
missingObj.parameters[missing] = (userParameters[missing] || { });
missingObj.parameters[missing].type = templateContent.parameters[missing].type;
missingObj.parameters[missing].metadata = (templateContent.parameters[missing].metadata || { }); });
return _(null, missingObj); }, true)); });};
function getTheMissingParameters(cli, deploymentParameters, missing, subscription, options, _) { var log, paramsRequired; var __frame = { name: "getTheMissingParameters", line: 492 }; return __func(_, this, arguments, getTheMissingParameters, 5, __frame, function __$getTheMissingParameters() {
log = cli.output;
log.info("Supply values for the following parameters");
return getTemplateParams(cli, missing, subscription, options, __cb(_, __frame, 3, 25, function ___(__0, __2) { paramsRequired = __2;
deploymentParameters = { };
return Object.keys(paramsRequired).forEach_(__cb(_, __frame, 6, 32, function __$getTheMissingParameters() {
return _(null, deploymentParameters); }, true), 1, function __1(_, key) { var val; var __frame = { name: "__1", line: 498 }; return __func(_, this, arguments, __1, 0, __frame, function __$__1() { val = { }; val["value"] = paramsRequired[key]; deploymentParameters[key] = val; _(); }); }); }, true)); });};
function addMissingParameters(missingObj, deploymentParameters, cli, subscription, options, _) { var newParameters; var __frame = { name: "addMissingParameters", line: 506 }; return __func(_, this, arguments, addMissingParameters, 5, __frame, function __$addMissingParameters() { return (function __$addMissingParameters(__then) {
if ((missingObj.parameters && (Object.keys(missingObj.parameters).length > 0))) {
return getTheMissingParameters(cli, deploymentParameters, missingObj.parameters, subscription, options, __cb(_, __frame, 2, 26, function ___(__0, __1) { newParameters = __1;
deploymentParameters = __.extend(deploymentParameters, newParameters); __then(); }, true)); } else { __then(); } ; })(function __$addMissingParameters() {
return _(null, deploymentParameters); }); });};
exports.getFailedDeploymentOperations = function exports_getFailedDeploymentOperations__3(subscription, resourceGroup, deploymentName, _) { var currentSubscription, client, operations, failedOperations; var __frame = { name: "exports_getFailedDeploymentOperations__3", line: 514 }; return __func(_, this, arguments, exports_getFailedDeploymentOperations__3, 3, __frame, function __$exports_getFailedDeploymentOperations__3() {
currentSubscription = profile.current.getSubscription(subscription);
client = utils.createResourceClient(currentSubscription);
return client.deploymentOperations.list(resourceGroup, deploymentName, __cb(_, __frame, 3, 47, function ___(__0, __1) { operations = __1;
return getFailedNestedOperations(client, resourceGroup, operations, __cb(_, __frame, 4, 25, function ___(__0, __2) { failedOperations = __2;
return _(null, failedOperations); }, true)); }, true)); });};
function getFailedNestedOperations(client, resourceGroup, currentOperations, _) { var newOperations; var __frame = { name: "getFailedNestedOperations", line: 522 }; return __func(_, this, arguments, getFailedNestedOperations, 3, __frame, function __$getFailedNestedOperations() {
newOperations = [];
return currentOperations.forEach_(__cb(_, __frame, 2, 20, function __$getFailedNestedOperations() {
return _(null, newOperations); }, true), 1, function __1(_, operation) { var nestedDeployment, nestedOperations, newNestedOperations; var __frame = { name: "__1", line: 524 }; return __func(_, this, arguments, __1, 0, __frame, function __$__1() { return (function __$__1(__then) { if ((operation.properties.provisioningState === "Failed")) { newOperations.push(operation); return (function __$__1(__then) { if ((operation.properties.targetResource && (operation.properties.targetResource.id.indexOf("Microsoft.Resources/deployments") !== -1))) { nestedDeployment = operation.properties.targetResource.resourceName; return client.deploymentOperations.list(resourceGroup, nestedDeployment, __cb(_, __frame, 6, 59, function ___(__0, __1) { nestedOperations = __1; return getFailedNestedOperations(client, resourceGroup, nestedOperations, __cb(_, __frame, 7, 34, function ___(__0, __2) { newNestedOperations = __2; newOperations = newOperations.concat(newNestedOperations); __then(); }, true)); }, true)); } else { __then(); } ; })(__then); } else { __then(); } ; })(_); }); }); });};
function displayNestedErrorDetailMessage(log, detail) {
if ((detail.code && detail.message)) {
log.error(util.format($("%s : %s"), detail.code, detail.message));
if (detail.details) {
detail.details.forEach(function(innerDetail) {
displayNestedErrorDetailMessage(log, innerDetail); }); } ; } ;};