UNPKG

@csermet/multiprovider

Version:

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

114 lines (113 loc) 4.45 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 regions_1 = require("../../enums/regions"); /** * ASG */ exports.default = ({ service: asg, data, region, }) => { const connections = []; const { AutoScalingGroupARN: id, Instances: instances = [], VPCZoneIdentifier: commaSeparatedSubnetIds = '', ServiceLinkedRoleARN: roleArn, } = asg; const { SecurityGroups: sgIds = [] } = asg.LaunchConfiguration; /** * Find EC2 Instances * related to this Auto Scaling Group */ const ec2Instances = data.find(({ name }) => name === services_1.default.ec2Instance); const ec2InstanceIds = instances.map(({ InstanceId }) => InstanceId); if (ec2Instances?.data?.[region]) { const ec2InstanceInRegion = ec2Instances.data[region].filter(instance => ec2InstanceIds.includes(instance.InstanceId)); if (!lodash_1.isEmpty(ec2InstanceInRegion)) { for (const ec2instance of ec2InstanceInRegion) { const ec2InstanceId = ec2instance.InstanceId; connections.push({ id: ec2InstanceId, resourceType: services_1.default.ec2Instance, relation: 'child', field: 'ec2Instance', }); } } } /** * Find Security Groups VPC Security Groups * related to this EC2 instance */ 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 EBS volumes * related to this Auto Scaling Group */ const ebsVolumes = data.find(({ name }) => name === services_1.default.ebs); if (ebsVolumes?.data?.[region]) { const volumesInRegion = ebsVolumes.data[region].filter(({ Attachments: attachments }) => attachments.find(({ InstanceId }) => ec2InstanceIds.includes(InstanceId))); if (!lodash_1.isEmpty(volumesInRegion)) { for (const v of volumesInRegion) { connections.push({ id: v.VolumeId, resourceType: services_1.default.ebs, relation: 'child', field: 'ebs', }); } } } /** * Find Subnets * related to this Auto Scaling Group */ const subnets = data.find(({ name }) => name === services_1.default.subnet); if (subnets?.data?.[region]) { const subnetsInRegion = subnets.data[region].filter((subnet) => commaSeparatedSubnetIds.includes(subnet.SubnetId)); if (!lodash_1.isEmpty(subnetsInRegion)) { for (const subnet of subnetsInRegion) { const { SubnetId } = subnet; connections.push({ id: SubnetId, resourceType: services_1.default.subnet, relation: 'child', field: 'subnet', }); } } } /** * Find related IAM Roles */ const roles = data.find(({ name }) => name === services_1.default.iamRole); if (roles?.data?.[regions_1.globalRegionName]) { const dataAtRegion = roles.data[regions_1.globalRegionName].filter(role => role.Arn === roleArn); if (!lodash_1.isEmpty(dataAtRegion)) { for (const instance of dataAtRegion) { const { Arn: arn } = instance; connections.push({ id: arn, resourceType: services_1.default.iamRole, relation: 'child', field: 'iamRole', }); } } } const asgResult = { [id]: connections, }; return asgResult; };