UNPKG

@kumologica/builder

Version:
166 lines (143 loc) 4.66 kB
const path = require('path'); class TerraformAzureTemplate { constructor() { } getResourceGroupName(params) { return params["resource-group-name"] ? params["resource-group-name"] : "${azurerm_resource_group.resource_group.name}"; } getServicePlanId(params) { return params["service-plan-id"] ? params["service-plan-id"] : "${azurerm_app_service_plan.app_service_plan.id}"; } createTemplate(params, flow) { let template = { terraform: { required_providers: { azurerm: { source: "hashicorp/azurerm", version: "~> 2.26" } } }, provider: { azurerm: { features: {} } }, resource: { "random_string": { random: { length: 12, special: false, lower: true, upper: false } }, /* "null_resource": { "ImportCommand": { triggers: { trigger: "${uuid()}" }, provisioner: { "local-exec": { command: `terraform import "azurerm_resource_group.resource_group" "/subscriptions/${params.alias.subscription_id}/resourceGroups/${this.getResourceGroupName(params)}"` } } } },*/ "azurerm_storage_account": { "storage_account": { name: "kumologica${random_string.random.result}", resource_group_name: this.getResourceGroupName(params), location: params.location, account_tier: "Standard", account_replication_type: "LRS" } }, "azurerm_function_app": { "function_app": { name: params["azure-application-name"], resource_group_name: this.getResourceGroupName(params), location: params.location, app_service_plan_id: this.getServicePlanId(params), app_settings: { "WEBSITE_RUN_FROM_PACKAGE": "1", "FUNCTIONS_WORKER_RUNTIME": "node", "AzureWebJobsDisableHomepage": "true", "WEBSITE_NODE_DEFAULT_VERSION": params["os-type"] == "windows" ? "~14" : null }, os_type: params["os-type"] == "linux" ? "linux" : null, site_config: { linux_fx_version: params["os-type"] == "linux" ? "node|14" : null, use_32_bit_worker_process: false }, storage_account_name: "${azurerm_storage_account.storage_account.name}", storage_account_access_key: "${azurerm_storage_account.storage_account.primary_access_key}", version: "~3", tags: params.tags ? JSON.parse(params.tags) : null } }, "azurerm_application_insights": { "application_insights": { name: `${params["azure-application-name"]}-application-insights`, location: params.location, resource_group_name: this.getResourceGroupName(params), application_type: "Node.JS" } }, "null_resource": { "function_app_publish": { provisioner: { "local-exec": { command: "${local.publish_code_command}" } }, depends_on: ["local.publish_code_command"], triggers: { input_json: `filemd5(${params['zip-file-name']})`, publish_code_command: "${local.publish_code_command}" } } } }, //func azure functionapp publish azuretf-dev-function-app locals: { publish_code_command: "az webapp deployment source config-zip --resource-group " + this.getResourceGroupName(params) + " --name ${azurerm_function_app.function_app.name} --src " + path.join(params.buildDir, params['zip-file-name']) } }; if (params.environment) { const environment = JSON.parse(params.environment); for (let key in environment) { template.resource.azurerm_function_app.function_app.app_settings[key] = environment[key]; } } if (!params["service-plan-id"]) { template.resource["azurerm_app_service_plan"] = this.servicePlan(params); } else { console.log(`service plan id present: ${params["service-plan-id"]}`); } if (!params["resource-group-name"]) { template.resource["azurerm_resource_group"] = { "resource_group": { name: `${params["azure-application-name"]}-resource-group`, location: params.location } } } return template; } servicePlan(params) { return { "app_service_plan": { name: `${params["azure-application-name"]}-app-service-plan`, resource_group_name: this.getResourceGroupName(params), location: params.location, kind: params["hosting-plan"] === "premium" ? "elastic" : "FunctionApp", reserved: params["os-type"] === "windows" ? false : true, sku: { tier: params["hosting-plan"] === "premium" ? "ElasticPremium" : "Dynamic", size: params["hosting-plan"] === "premium" ? "EP1" : "Y1" } } } } } module.exports = TerraformAzureTemplate;