Skip to content

Instantly share code, notes, and snippets.

@dacbd
Last active June 7, 2022 19:47
Show Gist options
  • Save dacbd/fa51c138f40349b2161c7318193e3f15 to your computer and use it in GitHub Desktop.
Save dacbd/fa51c138f40349b2161c7318193e3f15 to your computer and use it in GitHub Desktop.
node tf wrapper proto
const { Buffer } = require('buffer');
const apply = async (opts = {}) => {
const { dir = './', json = false } = opts;
return new Promise( (resolve, reject) => {
const stderrCollection = [];
//const tf_proc = require('child_process').spawn('terraform',['apply', '-auto-approve', '-json'], {
//const tf_proc = require('child_process').spawn('terraform',['refresh', '-json'], {
const tf_proc = require('child_process').spawn('terraform',['destroy', '-auto-approve', '-json'], {
cwd: process.cwd(),
env: process.env
});
tf_proc.stdout.on('data', (buf) => {
const parse = (logline) => {
if (logline == "") return
try {
const logObj = JSON.parse(logline)
if (logObj['@level'] === 'error') {
console.log(`Terraform error: ${logObj['@message']}\n details: ${logObj.diagnostic.detail}\n Providing stderr output`);
} else {
console.log(logObj['@message'])
}
} catch (err) {
console.log("couldn't parse json, passing line:", logline)
}
}
var tfLogLine = buf.toString('utf8');
tfLogLine.split('\n').forEach(parse)
});
tf_proc.stderr.on('data', (buf)=> {
stderrCollection.push(buf);
});
tf_proc.on('close', (code) => {
if (code !== 0) {
console.log(Buffer.concat(stderrCollection).toString('utf8'));
reject();
} else {
resolve();
}
});
})
};
async function run() {
await apply()
}
run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment