This repository has been archived on 2025-12-25. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
qmi-cloud/qmi-cloud-worker/processor-destroy.js
Manuel Romero 30e099ee2e guacamole
2023-09-26 11:58:47 +02:00

79 lines
3.4 KiB
JavaScript

const tf = require('./docker/tf');
const db = require('qmi-cloud-common/mongo');
const path = require('path');
const sendEmail = require("qmi-cloud-common/send-email");
const barracuda = require("qmi-cloud-common/barracuda");
const guaca = require("./guacamole");
module.exports = async function(job){
var triggerUser = job.data.user;
var destroyMongo = await db.destroy.update(job.data.id, {
"status": "destroying",
"jobId": job.id,
"logFile": path.join('/logs', 'destroy', `${job.data.id}.log`)
});
if ( !destroyMongo ) {
console.log(`ProcessorDestroy# Not found Destroy object in Database (it should exist!), detroyId is: ${job.data.id}` );
return Promise.reject({"success": false, "err": "Not found Destroy object in Worker"});
}
var provMongo = await db.provision.getById(job.data.provId);
// Deleting Barracuda App if existed
if ( provMongo.barracudaAppId ) {
console.log(`ProcessorDestroy# Deleting Barracuda App...` );
barracuda.deleteApp(provMongo);
} else {
console.log(`ProcessorDestroy# There is no barracuda to be deleted` );
}
db.event.add({ user: triggerUser._id, provision: provMongo._id, type: 'provision.destroy-init' });
return tf.destroy(destroyMongo, provMongo).then(async function(res) {
let update, update2;
if ( res.output.indexOf("Error:") !== -1 ) {
update = await db.destroy.update(destroyMongo._id,{"status": "error"});
update2 = await db.provision.update(provMongo._id, {"isDestroyed": false});
} else {
update = await db.destroy.update(destroyMongo._id, {"status": "destroyed"});
let timeRunning = db.utils.getNewTimeRunning(provMongo);
update2 = await db.provision.update(provMongo._id, {"isDestroyed": true, "timeRunning": timeRunning, "pendingNextAction": null, "actualDestroyDate": new Date()});
sendEmail.sendDestroyedSuccess(update2, job.data._scenario);
guaca.deleteConnection(provMongo);
//console.log(`ProcessorDestroy# Deleting shares of this provision` );
//db.sharedProvision.delMany({"provision":update2._id});
}
return { destroy: update, provision: update2 };
}).then(async function(res) {
if ( res.provision.isDestroyed ) {
console.log(`ProcessorDestroy# Provision (${res.provision._id}) destroyed!` );
db.event.add({ provision: provMongo._id, type: 'provision.destroy-finished' });
if ( res.provision.scenario === "azqmi-qdi" ) {
let tempApiKey = await db.apiKey.getOne({"description": res.provision._id});
if (tempApiKey && tempApiKey._id){
db.apiKey.del(tempApiKey._id);
}
}
} else {
console.log(`ProcessorDestroy# Provision (${res.provision._id}) NOT destroyed - Error!` );
db.event.add({ provision: provMongo._id, type: 'provision.destroy-error' });
}
return Promise.resolve({"success": true, job: res});
}).catch(function(err) {
console.log("ProcessorDestroy# err", err);
db.event.add({ provision: provMongo._id, type: 'provision.destroy-error' });
db.destroy.update(destroyMongo._id, {"status": "error", "isDestroyed": false});
return Promise.reject({"success": false, "err": err});
});
}