UNPKG

@csermet/multiprovider

Version:

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

86 lines (85 loc) 4.23 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 translations_1 = __importDefault(require("../../properties/translations")); const format_1 = require("../../utils/format"); const generateArns_1 = require("../../utils/generateArns"); /** * EC2 */ exports.default = ({ account, service: rawData, region, }) => { const { InstanceId: id, ImageId: ami, PublicDnsName: publicDns, PrivateDnsName: privateDns, Monitoring: monitoring, PrivateIpAddress: privateIps, NetworkInterfaces: networkInterfaces = [], CpuOptions: cpuOptions, HibernationOptions: hibernationOptions, EbsOptimized: ebsOptimized, InstanceType: instanceType, State: instanceState, SourceDestCheck: sourceDestCheck, Placement: placement, MetadataOptions: metadata, SecurityGroups: securityGroups = [], BlockDeviceMappings: blockDeviceMappings = [], DisableApiTermination: deletionProtection, Tags: tags = {}, KeyPair: { id: keyPairId, name, type, fingerprint, tags: keyPairTags = {}, } = {}, cloudWatchMetricData, PlatformDetails: platformDetails, InstanceLifecycle: instanceLifecycle, LaunchTime: launchTime, PublicIpAddress: publicIpAddress, } = rawData; const securityGroupIds = securityGroups.map(({ GroupId }) => GroupId); const { NetworkInterfaceId: networkInterfaceId = '' } = networkInterfaces.find(({ Attachment: { DeviceIndex } }) => DeviceIndex === 0) || {}; const ipv6Addresses = networkInterfaces .map(({ Ipv6Addresses }) => Ipv6Addresses) .reduce((current, acc) => [...acc, ...current], []) .map(({ Ipv6Address }) => Ipv6Address); const ephemeralBlockDevices = blockDeviceMappings .filter(({ Ebs: { DeleteOnTermination } }) => DeleteOnTermination) .map(({ DeviceName }) => ({ deviceName: DeviceName })); // Instance tags const instanceTags = format_1.formatTagsFromMap(tags); // Instance life cicle const mapInstanceLifecycle = (lifecycle) => { if (lodash_1.isEmpty(lifecycle)) return 'on_demand'; switch (lifecycle) { case 'scheduled': { return 'reserved'; } default: { return lifecycle; } } }; const ec2 = { accountId: account, arn: generateArns_1.ec2InstanceArn({ region, account, id }), id, region, ami, tenancy: placement?.Tenancy || '', publicDns, privateDns, monitoring: monitoring?.State || '', privateIps, keyPair: { id: keyPairId, name, type, fingerprint, tags: format_1.formatTagsFromMap(keyPairTags), }, cpuCoreCount: cpuOptions?.CoreCount || 0, hibernation: hibernationOptions?.Configured ? translations_1.default.yes : translations_1.default.no, ebsOptimized: ebsOptimized ? translations_1.default.yes : translations_1.default.no, instanceType, ipv6Addresses, placementGroup: placement?.GroupName || '', instanceState: instanceState?.Name || '', sourceDestCheck: sourceDestCheck ? translations_1.default.yes : translations_1.default.no, availabilityZone: placement?.AvailabilityZone || '', cpuThreadsPerCore: cpuOptions?.ThreadsPerCore || 0, deletionProtection: deletionProtection ? translations_1.default.yes : translations_1.default.no, primaryNetworkInterface: networkInterfaceId, metadataOptions: { state: metadata?.State || '', httpTokens: metadata?.HttpTokens || '', httpPutResponseHopLimit: metadata?.HttpPutResponseHopLimit || 0, httpEndpoint: metadata?.HttpEndpoint || '', }, securityGroupIds, ephemeralBlockDevices, cloudWatchMetricData, tags: instanceTags, platformDetails: platformDetails || '', instanceLifecycle: mapInstanceLifecycle(instanceLifecycle), publicIpAddress, launchTime: launchTime?.toISOString() || '', }; return ec2; };