UNPKG

@csermet/multiprovider

Version:

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

147 lines (146 loc) 5.98 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"); exports.default = ({ service, data, region, }) => { const connections = []; const { DBClusterArn: id, DBClusterIdentifier: clusterId, dbSubnetGroups, MonitoringRoleArn: monitoringRoleArn, AssociatedRoles: associatedRoles = [], KmsKeyId, ActivityStreamKmsKeyId, PerformanceInsightsKMSKeyId, VpcSecurityGroups, HostedZoneId: hostedZoneId, } = service; const sgIds = VpcSecurityGroups.map(({ VpcSecurityGroupId }) => VpcSecurityGroupId); /** * Find rds db instances */ const instances = data.find(({ name }) => name === services_1.default.rdsDbInstance); if (instances?.data?.[region]) { const instancesInRegion = instances.data[region].filter(({ DBClusterIdentifier }) => DBClusterIdentifier === clusterId); if (!lodash_1.isEmpty(instancesInRegion)) { for (const instance of instancesInRegion) { const { DBInstanceArn: id } = instance; connections.push({ id, resourceType: services_1.default.rdsDbInstance, relation: 'child', field: 'instances', }); } } } /** * Find cluster snapshots */ const snapshots = data.find(({ name }) => name === services_1.default.rdsClusterSnapshot); if (snapshots?.data?.[region]) { const dataInRegion = snapshots.data[region].filter(({ DBClusterIdentifier }) => DBClusterIdentifier === clusterId); if (!lodash_1.isEmpty(dataInRegion)) { for (const snapshot of dataInRegion) { connections.push({ id: snapshot.DBClusterSnapshotIdentifier, resourceType: services_1.default.rdsClusterSnapshot, relation: 'child', field: 'snapshots', }); } } } /** * Find SecurityGroups */ 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 KMS * related to this RDS Cluster */ const kms = data.find(({ name }) => name === services_1.default.kms); if (kms?.data?.[region]) { const kmsInRegion = kms.data[region].filter(({ Arn }) => Arn === KmsKeyId || Arn === ActivityStreamKmsKeyId || Arn === PerformanceInsightsKMSKeyId); if (!lodash_1.isEmpty(kmsInRegion)) { for (const instance of kmsInRegion) { connections.push({ id: instance.KeyId, resourceType: services_1.default.kms, relation: 'child', field: 'kms', }); } } } /** * Find IAM Role * related to this RDS Cluster */ const iamRoles = data.find(({ name }) => name === services_1.default.iamRole); if (iamRoles?.data?.[regions_1.globalRegionName]) { const iamRolesInRegion = iamRoles.data[regions_1.globalRegionName].filter(({ Arn }) => Arn === monitoringRoleArn || associatedRoles.find(r => r.RoleArn === Arn)); if (!lodash_1.isEmpty(iamRolesInRegion)) { for (const instance of iamRolesInRegion) { connections.push({ id: instance.Arn, resourceType: services_1.default.iamRole, relation: 'child', field: 'iamRoles', }); } } } /** * Find Route53 hosted zones */ const route53HostedZones = data.find(({ name }) => name === services_1.default.route53HostedZone); if (route53HostedZones?.data?.[region]) { const instancesInRegion = route53HostedZones.data[region].filter(({ Id }) => Id === hostedZoneId); if (!lodash_1.isEmpty(instancesInRegion)) { for (const instance of instancesInRegion) { const { Id: id } = instance; connections.push({ id, resourceType: services_1.default.route53HostedZone, relation: 'child', field: 'route53HostedZone', }); } } } /** * Find Subnets * related to this RDS Cluster */ const subnets = data.find(({ name }) => name === services_1.default.subnet); const subnetIds = dbSubnetGroups?.map(({ Subnets }) => Subnets?.map(subnet => subnet.SubnetIdentifier)); if (subnets?.data?.[region]) { const subnetsInRegion = subnets.data[region].filter((subnet) => subnetIds.some(ids => ids.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: 'subnets', }); } } } const rdsClusterResult = { [id]: connections, }; return rdsClusterResult; };