const db = require('../mongo.js'); const path = require('path'); const PROJECT_PATH = process.env.PROJECT_PATH; const tf = require("./docker/tf"); const azure = require("./docker/azure"); const sendEmail = require("../send-email.js"); module.exports = async function(job) { const provJob = await db.provision.update(job.data.id, { "status": "initializing", "jobId": job.id, "logFile": path.join('/logs', 'provision', `${job.data.id}.log`), "path": path.join(PROJECT_PATH, '..', 'qmi-cloud-provisions', `${job.data.scenario}_${job.data.id}`) }); // TERRAFORM INIT return tf.init(provJob) .then(async function(){ return tf.plan(provJob, job.data.user.displayName); }) .then(async function() { return await db.provision.update(provJob._id,{"status": "provisioning"}); }).then(function(provJobUpdated) { // TERRAFORM APPLY return tf.apply(provJobUpdated, job.data.user.displayName); }).then(async function(output) { var status = ( output.indexOf("Error:") !== -1 )? "error" : "provisioned"; return await db.provision.update(provJob._id, {"status": status}); }).then(async function(mongoUpdated) { // Application Gateway assign policy return azure.appgateway(mongoUpdated); }).then(async function(mongoUpdated) { return tf.outputs(mongoUpdated).then( async function(outputs){ return await db.provision.update(mongoUpdated._id, {"outputs": outputs}); }); }).then(function(mongoUpdated) { if (mongoUpdated.status === "provisioned") { sendEmail.send(mongoUpdated, job.data.user, job.data._scenario); } else { sendEmail.sendError(mongoUpdated, job.data.user, job.data._scenario); } return Promise.resolve({"success": true, provMongo: mongoUpdated}); }).catch(function(err) { console.log("Provision: error", err); db.provision.update(provJob._id, {"status": "error"}); sendEmail.sendError(provJob, job.data.user, job.data._scenario); return Promise.reject({"success": false, "error": err}); }); }