UNPKG

@csermet/multiprovider

Version:

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

137 lines (136 loc) 5.51 kB
"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; };