UNPKG

@csermet/multiprovider

Version:

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

125 lines (124 loc) 5.15 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const sdk_1 = __importDefault(require("@cloudgraph/sdk")); const groupBy_1 = __importDefault(require("lodash/groupBy")); const isEmpty_1 = __importDefault(require("lodash/isEmpty")); const elb_1 = __importDefault(require("aws-sdk/clients/elb")); 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 = 'ELB'; const errorLog = new errorLog_1.default(serviceName); const endpoint = utils_1.initTestEndpoint(serviceName); const getElbTags = async (elb, elbNames) => new Promise(resolve => { elb.describeTags({ LoadBalancerNames: elbNames, }, (err, data) => { if (err) { errorLog.generateAwsErrorLog({ functionName: 'elb:describeTags', err, }); } if (!isEmpty_1.default(data)) { const { TagDescriptions: tagDescriptions = [] } = data; const elbTags = tagDescriptions.map(tagDescription => ({ LoadBalancerName: tagDescription.LoadBalancerName, Tags: tagDescription.Tags, })); resolve(elbTags); } resolve([]); }); }); const listElbData = async (elb) => new Promise(resolve => { let loadBalancerData = []; elb.describeLoadBalancers((err, data) => { if (err) { errorLog.generateAwsErrorLog({ functionName: 'elb:describeLoadBalancers', err, }); } if (!isEmpty_1.default(data)) { const { LoadBalancerDescriptions: loadBalancerDescriptions = [] } = data; logger.debug(lt.fetchedElbs(loadBalancerDescriptions.length)); loadBalancerData = loadBalancerDescriptions.map(lbDescription => ({ ...lbDescription, })); resolve(loadBalancerData); } resolve(loadBalancerData); }); }); const listElbAttributes = async (elb, elbName) => new Promise(resolve => { elb.describeLoadBalancerAttributes({ LoadBalancerName: elbName, }, (err, data) => { if (err) { errorLog.generateAwsErrorLog({ functionName: 'elb:describeLoadBalancerAttributes', err, }); } if (!isEmpty_1.default(data)) { const { LoadBalancerAttributes: loadBalancerAttributes = {} } = data; resolve({ ...loadBalancerAttributes, LoadBalancerName: elbName, }); } resolve({}); }); }); exports.default = async ({ regions, config, account }) => new Promise(async (resolve) => { let elbData = []; const regionPromises = regions.split(',').map(region => { const elbInstance = new elb_1.default({ ...config, region, endpoint }); return new Promise(async (resolveElbData) => { // Get Load Balancer Data const elbDescriptionData = await listElbData(elbInstance); const elbNames = elbDescriptionData.map(elb => elb.LoadBalancerName); if (!isEmpty_1.default(elbNames)) { // Get Tags const tagDescriptions = await getElbTags(elbInstance, elbNames); // If exists tags, populate elb tags if (!isEmpty_1.default(tagDescriptions)) { elbData = elbDescriptionData.map(elb => { const elbsTags = tagDescriptions.find(tagDescription => tagDescription.LoadBalancerName === elb.LoadBalancerName); return { ...elb, account, region, Tags: (elbsTags?.Tags || []) .map(({ Key, Value }) => ({ [Key]: Value })) .reduce((acc, curr) => ({ ...acc, ...curr }), {}), }; }); } } // Get Load Balancer Attributes const elbAttributes = await Promise.all(elbNames.map(elbName => listElbAttributes(elbInstance, elbName))); // If exists attributes, populate elb attributes if (!isEmpty_1.default(elbAttributes)) { elbData = elbData.map(elb => { const elbsAttributes = elbAttributes.find((attributes) => attributes.LoadBalancerName === elb.LoadBalancerName); return { ...elb, Attributes: elbsAttributes, }; }); } resolveElbData(); }); }); logger.debug(lt.fetchingEip); await Promise.all(regionPromises); errorLog.reset(); resolve(groupBy_1.default(elbData, 'region')); });