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 de1996a344 fixes
2019-11-28 17:01:50 +01:00

62 lines
2.2 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){
const procContainerName = `qmi-tf-destroy-${job.data.id}`,
logFile = path.resolve(__dirname, 'proc-logs', `${job.data.provId}.log`);
var mongoJob = await db.destroy.update({
"id":job.data.id,
"body":{
"status": "destroying",
"jobId": job.id
}
});
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(function(data) {
console.log(`Processor Destroy: '${procContainerName}' removed!`);
var update = db.destroy.update({"id":mongoJob._id, "body":{"status": "destroyed"}});
return update;
}).then(function(mongoUpdated) {
db.provision.update({"id":job.data.provId, "body":{"isDestroyed": true}})
return Promise.resolve({"success": true, job: mongoUpdated});
}).catch(function(err) {
console.log("Processor Destroy: err", err);
db.destroy.update({"id":mongoJob._id, "body":{"status": "error"}});
return Promise.reject({"success": false, "err": err});
});
}