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