@csermet/multiprovider
Version:
cloud-graph provider plugin for AWS used to fetch AWS cloud data.
93 lines (92 loc) • 3.38 kB
JavaScript
;
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);
});