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` ] } }).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}); }); }