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