UNPKG

@csermet/multiprovider

Version:

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

92 lines (91 loc) 3.28 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const efs_1 = __importDefault(require("aws-sdk/clients/efs")); const sdk_1 = __importDefault(require("@cloudgraph/sdk")); const groupBy_1 = __importDefault(require("lodash/groupBy")); const isEmpty_1 = __importDefault(require("lodash/isEmpty")); const logger_1 = __importDefault(require("../../properties/logger")); const format_1 = require("../../utils/format"); const errorLog_1 = __importDefault(require("../../utils/errorLog")); const utils_1 = require("../../utils"); const lt = { ...logger_1.default }; const { logger } = sdk_1.default; const serviceName = 'EFS'; const errorLog = new errorLog_1.default(serviceName); const endpoint = utils_1.initTestEndpoint(serviceName); const listFileSystems = async ({ efs, region, token: Marker = '', resolveRegion, }) => new Promise(resolve => { const efsList = []; let args = {}; if (Marker) { args = { ...args, Marker }; } try { efs.describeFileSystems(args, (err, data) => { if (err) { errorLog.generateAwsErrorLog({ functionName: 'efs:describeFileSystems', err, }); } /** * No EFS data for this region */ if (isEmpty_1.default(data)) { return resolveRegion(); } const { FileSystems: fileSystems = [], NextMarker: token, } = data; efsList.push(...fileSystems); logger.debug(lt.fetchedEfs(fileSystems.length)); /** * No EFSs Found */ if (isEmpty_1.default(fileSystems)) { return resolveRegion(); } /** * Check to see if there are more */ if (token) { listFileSystems({ region, token, efs, resolveRegion }); } resolve(efsList); /** * If this is the last page of data then return */ if (!token) { resolveRegion(); } }); } catch (error) { resolve([]); } }); exports.default = async ({ regions, config, }) => new Promise(async (resolve) => { const efsFileSystems = []; const regionPromises = []; /** * Get all the EFS File Systems */ regions.split(',').map(region => { const efs = new efs_1.default({ ...config, region, endpoint }); const regionPromise = new Promise(async (resolveRegion) => { const efsList = await listFileSystems({ efs, region, resolveRegion }); if (!isEmpty_1.default(efsList)) { efsFileSystems.push(...efsList.map(efs => ({ ...efs, region, Tags: format_1.convertAwsTagsToTagMap(efs.Tags), }))); } resolveRegion(); }); regionPromises.push(regionPromise); }); await Promise.all(regionPromises); errorLog.reset(); resolve(groupBy_1.default(efsFileSystems, 'region')); });