in src/commands/generateDeploymentScript.ts [18:87]
export async function generateDeploymentScript(context: IActionContext, node?: WebAppTreeItem): Promise<void> {
if (!node) {
node = await ext.tree.showTreeItemPicker<WebAppTreeItem>(WebAppTreeItem.contextValue, context);
}
await window.withProgress({ location: ProgressLocation.Window }, async p => {
p.report({ message: localize('generatingScript', 'Generating script...') });
node = nonNullValue(node);
const resourceClient: ResourceManagementClient = await createResourceClient([context, node]);
const client = await node.site.createClient(context);
const tasks = Promise.all([
resourceClient.resourceGroups.get(node.site.resourceGroup),
client.getAppServicePlan(),
client.getSiteConfig(),
client.listApplicationSettings()
]);
const taskResults = await tasks;
const rg = nonNullValue(taskResults[0]);
const plan = taskResults[1];
const siteConfig = nonNullValue(taskResults[2]);
const appSettings = nonNullValue(taskResults[3]);
let script: string;
if (!siteConfig.linuxFxVersion) {
const scriptTemplate = await loadScriptTemplate('windows-default.sh');
script = scriptTemplate;
} else if (siteConfig.linuxFxVersion.toLowerCase().startsWith('docker')) {
const scriptTemplate = await loadScriptTemplate('docker-image.sh');
let serverUrl: string | undefined;
let serverUser: string | undefined;
let serverPwd: string | undefined;
if (appSettings.properties) {
serverUrl = appSettings.properties.DOCKER_REGISTRY_SERVER_URL;
serverUser = appSettings.properties.DOCKER_REGISTRY_SERVER_USERNAME;
serverPwd = appSettings.properties.DOCKER_REGISTRY_SERVER_PASSWORD;
}
const containerParameters =
(serverUrl ? `SERVERURL="${serverUrl}"\n` : '') +
(serverUser ? `SERVERUSER="${serverUser}"\n` : '') +
(serverPwd ? `SERVERPASSWORD="*****"\n` : '');
const containerCmdParameters =
(serverUrl ? '--docker-registry-server-url $SERVERURL ' : '') +
(serverUser ? '--docker-registry-server-user $SERVERUSER ' : '') +
(serverPwd ? '--docker-registry-server-password $SERVERPASSWORD ' : '');
script = scriptTemplate.replace('%RUNTIME%', siteConfig.linuxFxVersion)
.replace('%IMAGENAME%', siteConfig.linuxFxVersion.substring(siteConfig.linuxFxVersion.indexOf('|') + 1))
.replace('%DOCKER_PARA%', containerParameters)
.replace('%CTN_CMD_PARA%', containerCmdParameters);
} else { // Stock linux image
const scriptTemplate = await loadScriptTemplate('linux-default.sh');
script = scriptTemplate.replace('%RUNTIME%', siteConfig.linuxFxVersion);
}
/* eslint-disable @typescript-eslint/no-non-null-assertion */
script = script.replace('%SUBSCRIPTION_NAME%', node.subscription.subscriptionDisplayName)
.replace('%RG_NAME%', rg.name!)
.replace('%LOCATION%', rg.location)
.replace('%PLAN_NAME%', plan!.name!)
.replace('%PLAN_SKU%', plan!.sku!.name!)
.replace('%SITE_NAME%', node.site.siteName);
/* eslint-enable @typescript-eslint/no-non-null-assertion */
const doc = await workspace.openTextDocument({ language: 'shellscript', content: script });
await window.showTextDocument(doc);
});
}