52 lines
2.3 KiB
JavaScript
52 lines
2.3 KiB
JavaScript
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", "runningFrom": new Date(), "runningTime": 0, "countExtend": 0});
|
|
}).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) {
|
|
return tf.outputs(mongoUpdated).then( async function(outputs){
|
|
return await db.provision.update(mongoUpdated._id, {"outputs": outputs});
|
|
});
|
|
}).then(async function(mongoUpdated) {
|
|
// Application Gateway assign policy
|
|
return azure.appgateway(mongoUpdated, job.data._scenario);
|
|
}).then(async function(mongoUpdated) {
|
|
// Create Image
|
|
return azure.createimage(mongoUpdated, job.data._scenario);
|
|
}).then(function(mongoUpdated) {
|
|
if (mongoUpdated.status === "provisioned") {
|
|
sendEmail.send(mongoUpdated, job.data._scenario);
|
|
} else {
|
|
sendEmail.sendError(mongoUpdated, 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._scenario);
|
|
return Promise.reject({"success": false, "error": err});
|
|
});
|
|
} |