71 lines
2.7 KiB
JavaScript
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});
|
|
});
|
|
|
|
}
|
|
|
|
|