UNPKG

@hotglue/cli

Version:
150 lines (125 loc) 4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.handler = exports.desc = exports.command = exports.builder = void 0; var _awsSdk = _interopRequireDefault(require("aws-sdk")); var _ora = _interopRequireDefault(require("ora")); var _cliTable = _interopRequireDefault(require("cli-table")); var _debug = _interopRequireDefault(require("../../helpers/debug")); var _descriptions = _interopRequireDefault(require("../../helpers/descriptions")); var _print = require("../../helpers/print"); var _api = require("../../helpers/api"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const debug = (0, _debug.default)('commands:tenants:delete'); const command = 'delete'; exports.command = command; const desc = 'Delete tenant'; exports.desc = desc; const builder = async yargs => { debug('builder', command); return yargs.option('tenant', _descriptions.default.options['tenant'].config); }; exports.builder = builder; const handler = async argv => { debug('handler', command, argv); const { hg, json, apikey, env, tenant } = argv; const { clientApiBaseUri } = hg; let message; let spinner = (0, _ora.default)(); try { if (tenant === 'default') { throw new Error('It\'s not possible to delete "default" tenant!'); } message = (0, _print.themed)(`Deleting tenant ${tenant} schedules`); !json && spinner.start((0, _print.themed)(`In progress: ${message}...`, 'secondary')); await (0, _api.deleteTenantSchedules)({ debug, baseUri: clientApiBaseUri, env, apikey, tenant }); !json && spinner.succeed((0, _print.themed)(`Finished: ${message}.`, 'secondary')); message = (0, _print.themed)(`Verifying user and authorizing`); !json && spinner.start((0, _print.themed)(`In progress: ${message}...`, 'secondary')); const { accessKeyId, secretAccessKey, sessionToken } = await (0, _api.genCredentialsOnClientApi)({ debug, baseUri: clientApiBaseUri, task: 'tenant-delete', env, tenant, apikey }); !json && spinner.succeed((0, _print.themed)(`Finished: ${message}.`, 'secondary')); // created authenticated S3 instance const s3 = new _awsSdk.default.S3({ accessKeyId, secretAccessKey, sessionToken }); message = (0, _print.themed)(`Deleting tenant ${tenant} for environment ${(0, _print.themed)(env, 'info')}`); !json && spinner.start((0, _print.themed)(`In progress: ${message}...`, 'secondary')); while (true) { // List objects, 1000 keys at a time const s3Objects = await s3.listObjectsV2({ Bucket: env, Prefix: `${tenant}/` }).promise(); const Objects = (s3Objects.Contents || []).map(({ Key }) => ({ Key })); if (Objects.length === 0) { break; } // Purge the objects const response = await s3.deleteObjects({ Bucket: env, Delete: { Objects } }).promise(); } !json && spinner.succeed((0, _print.themed)(`Finished: ${message}.`, 'secondary')); if (json) { (0, _print.printJSON)({ statu: 'success', tenantDeleted: tenant }); } else { // generate results table const table = new _cliTable.default({ head: ['Tenant ID'] }); table.push([tenant]); // print results console.log(table.toString()); } } catch (err) { if (json) { (0, _print.printJSON)({ status: 'error', error: err }); } else { spinner.fail((0, _print.themed)(`Error: ${message}.`, 'secondary')); (0, _print.pr)((0, _print.themed)(`Message: ${(0, _print.themed)(err.message)}`, 'secondary')); debug(err); if (err && err.response && err.response.data) { debug('response', err.response.data); } } } }; exports.handler = handler;