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