export async function generateDeploymentScript()

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