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