maestro
Version:
Maestro is a framework for quickly bootstrapping serverless orchestration workflows with AWS Step Functions
50 lines (42 loc) • 1.57 kB
JavaScript
const fs = require("fs");
const deleteLambdas = require("../aws/lambda/deleteLambdas");
const deleteStateMachine = require("../aws/step-function/deleteStateMachine");
const teardownRoleByName = require("../aws/iam/teardownRoleByName");
const getStateMachineArn = require("../aws/iam/getStateMachineArn");
const basename = require("../util/basename");
const promptAsync = require("../util/promptAsync");
const workflowName = require("../util/workflowName");
const deleteResources = async (rolesToDelete, lambdaNames) => {
const deleteLambdasPromise = deleteLambdas(lambdaNames).catch(console.log);
const deleteStateMachinePromise = getStateMachineArn(workflowName)
.then(deleteStateMachine)
.catch(console.log);
await Promise.all([deleteLambdasPromise, deleteStateMachinePromise]);
rolesToDelete.forEach(teardownRoleByName);
};
const teardown = async (argv) => {
const lambdaNames = fs
.readdirSync("lambdas")
.map(basename)
.map((lambdaName) => {
return workflowName + "_" + lambdaName;
});
const rolesToDelete = argv.roles.split(",").filter((role) => role.length > 0);
if (argv.force || argv.f) {
deleteResources(rolesToDelete, lambdaNames);
} else {
const confirmation = (
await promptAsync(
`Are you sure you want to delete ${workflowName}?`,
"y",
"N"
)
).toLowerCase();
if (confirmation === "y" || confirmation === "yes") {
deleteResources(rolesToDelete, lambdaNames);
} else {
console.log("Aborting...");
}
}
};
module.exports = teardown;