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/server/processor-destroy.js
Manuel Romero 147b5d9030 updates logs
2019-12-03 13:37:32 +01:00

71 lines
2.7 KiB
JavaScript

const Docker = require('dockerode');
const db = require('./mongo.js');
const docker = new Docker({
'socketPath': '/home/docker.sock'
});
const path = require('path');
const fs = require('fs');
const PROJECT_PATH = process.env.PROJECT_PATH;
module.exports = async function(job){
var destroyJob = await db.destroy.update({
"id":job.data.id,
"body":{
"status": "destroying",
"jobId": job.id
}
});
const procContainerName = `qmi-tf-destroy-${job.data.id}`,
logFile = path.resolve(__dirname, 'proc-logs', 'destroy',`${destroyJob._id}.log`);
const scenarioPath = path.join(PROJECT_PATH, '..', 'qmi-cloud-provisions', `${job.data.scenario}_${job.data.provId}`);
console.log(`Processor Destroy: will spin up container '${procContainerName}'`);
var processStream = fs.createWriteStream(logFile, {flags:'a'});
//var processStream = process.stdout;
return docker.run('hashicorp/terraform:0.12.14', ['destroy', '-no-color', '-var-file=scenario.tfvars', "-var", `provision_id=${job.data.provId}`, '-auto-approve'], processStream, {
"Env": ["NODE_ENV=development"],
"name": procContainerName,
"WorkingDir": "/app",
"HostConfig": {
"Binds": [
`${scenarioPath}:/app`,
"/root/.ssh:/root/.ssh"
]
}
}).then(function(data) {
var output = data[0];
var container = data[1];
console.log(`Processor Destroy: '${procContainerName}' (${container.id}) has finished with code: ${output.StatusCode}`);
return container.remove();
}).then(async function(data) {
console.log(`Processor Destroy: '${procContainerName}' removed!`);
let update, update2;
const output = fs.readFileSync(logFile);
if ( output.indexOf("Error") !== -1 ) {
update = await db.destroy.update({"id":destroyJob._id, "body":{"status": "error"}});
update2 = await db.provision.update({"id":job.data.provId, "body":{"isDestroyed": false}});
} else {
update = await db.destroy.update({"id":destroyJob._id, "body":{"status": "destroyed"}});
update2 = await db.provision.update({"id":job.data.provId, "body":{"isDestroyed": true}});
}
return { destroy: update, provision: update2 };
}).then(async function(res) {
return Promise.resolve({"success": true, job: res});
}).catch(function(err) {
console.log("Processor Destroy: err", err);
db.destroy.update({"id":destroyJob._id, "body":{"status": "error", "isDestroyed": false}});
return Promise.reject({"success": false, "err": err});
});
}