UNPKG

@csermet/multiprovider

Version:

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

88 lines (87 loc) 3.53 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 { taskArn: id, overrides } = service; const connections = []; /** * Find ECS containers */ const containers = data.find(({ name }) => name === services_1.default.ecsContainer); if (containers?.data?.[region]) { const containersInRegion = containers.data[region].filter(({ containerInstanceArn }) => containerInstanceArn === service.containerInstanceArn); if (!lodash_1.isEmpty(containersInRegion)) { for (const container of containersInRegion) { const { containerInstanceArn } = container; connections.push({ id: containerInstanceArn, resourceType: services_1.default.ecsContainer, relation: 'child', field: 'ecsContainer', }); } } } /** * Find ECS clusters */ const clusters = data.find(({ name }) => name === services_1.default.ecsCluster); if (clusters?.data?.[region]) { const clustersInRegion = clusters.data[region].filter(({ clusterArn }) => clusterArn === service.clusterArn); if (!lodash_1.isEmpty(clustersInRegion)) { for (const instance of clustersInRegion) { connections.push({ id: instance.clusterArn, resourceType: services_1.default.ecsCluster, relation: 'child', field: 'ecsCluster', }); } } } /** * Find ECS task definition */ const taskDefinitions = data.find(({ name }) => name === services_1.default.ecsTaskDefinition); if (taskDefinitions?.data?.[region]) { const taskDefinitionsInRegion = taskDefinitions.data[region].filter(({ taskDefinitionArn }) => taskDefinitionArn === service.taskDefinitionArn); if (!lodash_1.isEmpty(taskDefinitionsInRegion)) { for (const instance of taskDefinitionsInRegion) { connections.push({ id: instance.taskDefinitionArn, resourceType: services_1.default.ecsTaskDefinition, relation: 'child', field: 'ecsTaskDefinition', }); } } } /** * 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(({ Arn }) => overrides?.executionRoleArn === Arn || overrides?.taskRoleArn === Arn); if (!lodash_1.isEmpty(dataAtRegion)) { for (const instance of dataAtRegion) { const { Arn: roleId } = instance; connections.push({ id: roleId, resourceType: services_1.default.iamRole, relation: 'child', field: 'iamRoles', }); } } } const result = { [id]: connections, }; return result; };