UNPKG

@csermet/multiprovider

Version:

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

133 lines (132 loc) 5.58 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const isEmpty_1 = __importDefault(require("lodash/isEmpty")); const services_1 = __importDefault(require("../../enums/services")); const index_1 = require("../../utils/index"); const generateArns_1 = require("../../utils/generateArns"); /** * Elastic Beanstalk Environment */ exports.default = ({ service: environment, data, region, account, }) => { const connections = []; const { EnvironmentId: id, ApplicationName: appName, resources: { AutoScalingGroups = [], Instances = [], LoadBalancers = [], Queues = [], }, } = environment; const asgNames = AutoScalingGroups.map(({ Name }) => Name); const ec2Ids = Instances.map(({ Id }) => Id); const lbNames = LoadBalancers.map(({ Name }) => Name); const queuesUrls = Queues.map(({ URL }) => URL); /** * Find Elastic Beanstalk environments * related to this Elastic Beanstalk application */ const elasticBeanstalkApps = data.find(({ name }) => name === services_1.default.elasticBeanstalkApp); if (elasticBeanstalkApps?.data?.[region]) { const elasticBeanstalkAppsInRegion = elasticBeanstalkApps.data[region].filter(({ ApplicationName }) => ApplicationName === appName); if (!isEmpty_1.default(elasticBeanstalkAppsInRegion)) { for (const app of elasticBeanstalkAppsInRegion) { connections.push({ id: app.ApplicationArn, resourceType: services_1.default.elasticBeanstalkApp, relation: 'child', field: 'elasticBeanstalkApp', }); } } } /** * Find Auto Scaling Groups * related to this Elastic Beanstalk application */ const asgs = data.find(({ name }) => name === services_1.default.asg); if (asgs?.data?.[region]) { const asgsInRegion = asgs.data[region].filter(({ AutoScalingGroupName }) => index_1.caseInsensitiveIncludes(asgNames, AutoScalingGroupName)); if (!isEmpty_1.default(asgsInRegion)) { for (const asg of asgsInRegion) { connections.push({ id: asg.AutoScalingGroupARN, resourceType: services_1.default.asg, relation: 'child', field: 'asgs', }); } } } /** * Find EC2 Instances * related to this Elastic Beanstalk application */ const ec2Instances = data.find(({ name }) => name === services_1.default.ec2Instance); if (ec2Instances?.data?.[region]) { const ec2InstancesInRegion = ec2Instances.data[region].filter(({ InstanceId }) => index_1.caseInsensitiveIncludes(ec2Ids, InstanceId)); if (!isEmpty_1.default(ec2InstancesInRegion)) { for (const ec2Instance of ec2InstancesInRegion) { connections.push({ id: ec2Instance.InstanceId, resourceType: services_1.default.ec2Instance, relation: 'child', field: 'ec2Instances', }); } } } /** * Find Load Balancers(ELB) * related to this Elastic Beanstalk application */ const elbs = data.find(({ name }) => name === services_1.default.elb); if (elbs?.data?.[region]) { const elbsInRegion = elbs.data[region].filter(({ LoadBalancerName }) => index_1.caseInsensitiveIncludes(lbNames, LoadBalancerName)); if (!isEmpty_1.default(elbsInRegion)) { for (const elb of elbsInRegion) { connections.push({ id: generateArns_1.elbArn({ region, account, name: elb.LoadBalancerName }), resourceType: services_1.default.elb, relation: 'child', field: 'elbs', }); } } } /** * Find Load Balancers(ALB) * related to this Elastic Beanstalk application */ const albs = data.find(({ name }) => name === services_1.default.alb); if (albs?.data?.[region]) { const albsInRegion = albs.data[region].filter(({ LoadBalancerName }) => index_1.caseInsensitiveIncludes(lbNames, LoadBalancerName)); if (!isEmpty_1.default(albsInRegion)) { for (const alb of albsInRegion) { connections.push({ id: alb.LoadBalancerArn, resourceType: services_1.default.alb, relation: 'child', field: 'albs', }); } } } /** * Find Load Balancers(SQS) * related to this Elastic Beanstalk application */ const sqs = data.find(({ name }) => name === services_1.default.sqs); if (sqs?.data?.[region]) { const sqsInRegion = sqs.data[region].filter(({ queueUrl }) => index_1.caseInsensitiveIncludes(queuesUrls, queueUrl)); if (!isEmpty_1.default(sqsInRegion)) { for (const s of sqsInRegion) { connections.push({ id: s.sqsAttributes.QueueArn, resourceType: services_1.default.sqs, relation: 'child', field: 'sqsQueues', }); } } } const elasticBeanstalkEnvironmentResult = { [id]: connections, }; return elasticBeanstalkEnvironmentResult; };