UNPKG

@csermet/multiprovider

Version:

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

106 lines (105 loc) 4.16 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const autoscaling_1 = __importDefault(require("aws-sdk/clients/autoscaling")); const lodash_1 = require("lodash"); const sdk_1 = __importDefault(require("@cloudgraph/sdk")); const logger_1 = __importDefault(require("../../properties/logger")); const utils_1 = require("../../utils"); const errorLog_1 = __importDefault(require("../../utils/errorLog")); const constants_1 = require("../../config/constants"); const lt = { ...logger_1.default }; const { logger } = sdk_1.default; const serviceName = 'ASG'; const errorLog = new errorLog_1.default(serviceName); const endpoint = utils_1.initTestEndpoint(serviceName); const customRetrySettings = utils_1.setAwsRetryOptions({ baseDelay: constants_1.ASG_CUSTOM_DELAY }); const listAsgData = async (asg) => { try { const fullResources = []; let autoScalingGroups = await asg.describeAutoScalingGroups().promise(); fullResources.push(...autoScalingGroups.AutoScalingGroups); let nextToken = autoScalingGroups.NextToken; while (nextToken) { autoScalingGroups = await asg .describeAutoScalingGroups({ NextToken: nextToken }) .promise(); fullResources.push(...autoScalingGroups.AutoScalingGroups); nextToken = autoScalingGroups.NextToken; } return fullResources; } catch (err) { errorLog.generateAwsErrorLog({ functionName: 'asg:describeAutoScalingGroups', err, }); } return null; }; const listLaunchConfigData = async (asg) => { try { const fullResources = []; let launchConfigurations = await asg .describeLaunchConfigurations() .promise(); fullResources.push(...launchConfigurations.LaunchConfigurations); let nextToken = launchConfigurations.NextToken; while (nextToken) { launchConfigurations = await asg .describeLaunchConfigurations({ NextToken: nextToken }) .promise(); fullResources.push(...launchConfigurations.LaunchConfigurations); nextToken = launchConfigurations.NextToken; } logger.debug(lt.fetchedAsgs(fullResources.length)); return fullResources; } catch (err) { errorLog.generateAwsErrorLog({ functionName: 'asg:describeLaunchConfiguration', err, }); } return null; }; exports.default = async ({ regions, config, }) => { const asgData = []; let launchConfigData; for (const region of regions.split(',')) { const asg = new autoscaling_1.default({ ...config, region, endpoint, ...customRetrySettings }); /** * Step 1) Get all the ASG data for each region */ const autoScalingGroups = await listAsgData(asg); if (!lodash_1.isEmpty(autoScalingGroups)) { asgData.push(...autoScalingGroups.map((autoScalingGroup) => ({ ...autoScalingGroup, region, LaunchConfiguration: {}, }))); } /** * Step 2) Get all the Launch Configuration data for each region */ launchConfigData = await listLaunchConfigData(asg); } asgData.map(({ LaunchConfigurationName: targetLcName, Tags: tags }, idx) => { asgData[idx].LaunchConfiguration = {}; if (targetLcName) { const launchConfig = launchConfigData?.find(({ LaunchConfigurationName: lcName }) => targetLcName === lcName); if (launchConfig) { asgData[idx].LaunchConfiguration = launchConfig; } } if (!lodash_1.isEmpty(tags)) { asgData[idx].Tags = (tags || []) .map(({ Key, Value }) => ({ [Key]: Value })) .reduce((acc, curr) => ({ ...acc, ...curr }), {}); } }); errorLog.reset(); return lodash_1.groupBy(asgData, 'region'); };