in functions/source/faz-handler/lib/aws/index.js [607:695]
async describeInstance(parameters) {
logger.info('calling describeInstance');
let readCache = this._settings['enable-vm-info-cache'] === 'true';
let virtualMachine,
hitCache = '';
if (readCache) {
virtualMachine = await this.getVmInfoCache(
parameters.scalingGroupName,
parameters.instanceId,
null
);
hitCache = virtualMachine && '(hit cache)';
}
// if not hit the cache
if (!virtualMachine) {
let params = {
Filters: []
},
instanceId;
// check if instance is in scaling group
if (parameters.scalingGroupName) {
// describe the instance in auto scaling group
let scalingGroup = await autoScaling
.describeAutoScalingGroups({
AutoScalingGroupNames: [parameters.scalingGroupName]
})
.promise();
if (
scalingGroup &&
Array.isArray(scalingGroup.AutoScalingGroups) &&
scalingGroup.AutoScalingGroups[0] &&
scalingGroup.AutoScalingGroups[0].AutoScalingGroupName ===
parameters.scalingGroupName
) {
const instances = scalingGroup.AutoScalingGroups[0].Instances.filter(
instance => {
return instance.InstanceId === parameters.instanceId;
}
);
if (instances && instances.length === 1) {
instanceId = instances[0].InstanceId;
}
}
} else if (parameters.instanceId) {
instanceId = parameters.instanceId;
}
// describe the instance
if (instanceId) {
params.Filters.push({
Name: 'instance-id',
Values: [parameters.instanceId]
});
}
if (parameters.publicIp) {
params.Filters.push({
Name: 'ip-address',
Values: [parameters.publicIp]
});
}
if (parameters.privateIp) {
params.Filters.push({
Name: 'private-ip-address',
Values: [parameters.privateIp]
});
}
const result = instanceId && (await ec2.describeInstances(params).promise());
// parse to virtual machine instance
virtualMachine =
result && result.Reservations[0] && result.Reservations[0].Instances[0];
hitCache = (virtualMachine && hitCache) || '';
// cache the vm info
if (virtualMachine && readCache) {
let cacheTime = this._settings['vm-info-cache-time'];
cacheTime = isNaN(cacheTime) ? 3600 : parseInt(cacheTime);
await this.setVmInfoCache(parameters.scalingGroupName, virtualMachine, cacheTime);
}
}
// if mv is found
virtualMachine =
virtualMachine &&
AutoScaleCore.VirtualMachine.fromAwsEc2(
virtualMachine,
parameters.scalingGroupName || null
);
logger.info(`called describeInstance${hitCache}, virtualMachine: ${virtualMachine}`);
return virtualMachine;
}