@csermet/multiprovider
Version:
cloud-graph provider plugin for AWS used to fetch AWS cloud data.
137 lines (136 loc) • 5.51 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const lodash_1 = require("lodash");
const services_1 = __importDefault(require("../../enums/services"));
const generateArns_1 = require("../../utils/generateArns");
exports.default = ({ service, data, region, }) => {
const { serviceArn: id } = service;
const connections = [];
const sgIds = service?.networkConfiguration?.awsvpcConfiguration?.securityGroups;
const subnetIds = service?.networkConfiguration?.awsvpcConfiguration?.subnets;
const elbNames = service?.loadBalancers?.map(({ loadBalancerName }) => loadBalancerName);
const taskSetArns = service?.taskSets?.map(({ taskSetArn }) => taskSetArn);
/**
* Find Security Groups
*/
const securityGroups = data.find(({ name }) => name === services_1.default.sg);
if (securityGroups?.data?.[region]) {
const sgsInRegion = securityGroups.data[region].filter(({ GroupId }) => sgIds?.includes(GroupId));
if (!lodash_1.isEmpty(sgsInRegion)) {
for (const sg of sgsInRegion) {
connections.push({
id: sg.GroupId,
resourceType: services_1.default.sg,
relation: 'child',
field: 'securityGroups',
});
}
}
}
/**
* Find Subnets AND vpcs
*/
const subnets = data.find(({ name }) => name === services_1.default.subnet);
if (subnets?.data?.[region]) {
const subnetsInRegion = subnets.data[region].filter(({ SubnetId }) => subnetIds?.includes(SubnetId));
const vpcsFound = [];
if (!lodash_1.isEmpty(subnetsInRegion)) {
for (const subnet of subnetsInRegion) {
connections.push({
id: subnet.SubnetId,
resourceType: services_1.default.subnet,
relation: 'child',
field: 'subnet',
});
if (!vpcsFound.includes(subnet.VpcId)) {
connections.push({
id: subnet.VpcId,
resourceType: services_1.default.vpc,
relation: 'child',
field: 'vpc',
});
}
}
}
}
/**
* Find related ELB
*/
const elbs = data.find(({ name }) => name === services_1.default.elb);
if (elbs?.data?.[region]) {
const dataAtRegion = elbs.data[region].filter(({ LoadBalancerName }) => elbNames?.includes(LoadBalancerName));
if (!lodash_1.isEmpty(dataAtRegion)) {
for (const instance of dataAtRegion) {
const { LoadBalancerName: loadBalancerName, region: elbRegion, account: elbAccount, } = instance;
connections.push({
id: generateArns_1.elbArn({
region: elbRegion,
account: elbAccount,
name: loadBalancerName,
}),
resourceType: services_1.default.elb,
relation: 'child',
field: 'elb',
});
}
}
}
/**
* Find related ECS cluster
*/
const ecsClusters = data.find(({ name }) => name === services_1.default.ecsCluster);
if (ecsClusters?.data?.[region]) {
const dataAtRegion = ecsClusters.data[region].filter(({ clusterArn }) => clusterArn === service.clusterArn);
if (!lodash_1.isEmpty(dataAtRegion)) {
for (const instance of dataAtRegion) {
connections.push({
id: instance.clusterArn,
resourceType: services_1.default.ecsCluster,
relation: 'child',
field: 'ecsCluster',
});
}
}
}
/**
* Find related ECS task set
*/
const ecsTaskSets = data.find(({ name }) => name === services_1.default.ecsTaskSet);
if (ecsTaskSets?.data?.[region]) {
const dataAtRegion = ecsTaskSets.data[region].filter(({ taskSetArn }) => taskSetArns.includes(taskSetArn));
if (!lodash_1.isEmpty(dataAtRegion)) {
for (const instance of dataAtRegion) {
connections.push({
id: instance.taskSetArn,
resourceType: services_1.default.ecsTaskSet,
relation: 'child',
field: 'ecsTaskSet',
});
}
}
}
/**
* Find related ECS task definition
*/
const ecsTaskDefinitions = data.find(({ name }) => name === services_1.default.ecsTaskDefinition);
if (ecsTaskDefinitions?.data?.[region]) {
const dataAtRegion = ecsTaskDefinitions.data[region].filter(({ taskDefinitionArn }) => taskDefinitionArn === service.taskDefinition);
if (!lodash_1.isEmpty(dataAtRegion)) {
for (const instance of dataAtRegion) {
connections.push({
id: instance.taskDefinitionArn,
resourceType: services_1.default.ecsTaskDefinition,
relation: 'child',
field: 'ecsTaskDefinition',
});
}
}
}
const result = {
[id]: connections,
};
return result;
};