UNPKG

@csermet/multiprovider

Version:

cloud-graph provider plugin for AWS used to fetch AWS cloud data.

93 lines (92 loc) 3.38 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getResourceTags = void 0; const sdk_1 = __importDefault(require("@cloudgraph/sdk")); const elasticbeanstalk_1 = __importDefault(require("aws-sdk/clients/elasticbeanstalk")); const isEmpty_1 = __importDefault(require("lodash/isEmpty")); const format_1 = require("../../utils/format"); const index_1 = require("../../utils/index"); const logger_1 = __importDefault(require("../../properties/logger")); const utils_1 = require("../../utils"); const errorLog_1 = __importDefault(require("../../utils/errorLog")); const lt = { ...logger_1.default }; const { logger } = sdk_1.default; const serviceName = 'ElasticBeanstalkApp'; const errorLog = new errorLog_1.default(serviceName); const endpoint = utils_1.initTestEndpoint(serviceName); const listApplications = async (eb) => new Promise(async (resolve) => { eb.describeApplications({}, (err, data) => { if (err) { errorLog.generateAwsErrorLog({ functionName: 'elasticBeanstalk:describeApplications', err, }); } /** * No EB Applications for this region */ if (isEmpty_1.default(data)) { return resolve([]); } const { Applications = [] } = data || {}; if (isEmpty_1.default(Applications)) { return resolve([]); } resolve(Applications); }); }); const getResourceTags = async (eb, resourceArn) => new Promise(resolveTags => { eb.listTagsForResource({ ResourceArn: resourceArn, }, (err, data) => { if (err) { errorLog.generateAwsErrorLog({ functionName: 'elasticBeanstalk:listTagsForResource', err, }); } /** * No EB Applications for this region */ if (isEmpty_1.default(data)) { return resolveTags({}); } const { ResourceTags: tags } = data || {}; if (isEmpty_1.default(tags)) { return resolveTags({}); } resolveTags(format_1.convertAwsTagsToTagMap(tags)); }); }); exports.getResourceTags = getResourceTags; const getApplications = async (eb) => { const apps = await listApplications(eb); if (!isEmpty_1.default(apps)) { return index_1.settleAllPromises(apps.map(async (app) => ({ ...app, Tags: await exports.getResourceTags(eb, app.ApplicationArn), }))); } return []; }; exports.default = async ({ regions, credentials, }) => new Promise(async (resolve) => { let numberOfApps = 0; const output = {}; // First we get all applications for all regions await Promise.all(regions.split(',').map(region => { const eb = new elasticbeanstalk_1.default({ region, credentials, endpoint }); output[region] = []; return new Promise(async (resolveRegion) => { const apps = (await getApplications(eb)) || []; output[region] = apps; numberOfApps += apps.length; resolveRegion(); }); })); errorLog.reset(); logger.debug(lt.fetchedElasticBeanstalkApps(numberOfApps)); resolve(output); });