2015-07-20 00:09:47 -07:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
|
|
exports = module.exports = {
|
2016-01-05 12:10:25 +01:00
|
|
|
SysInfoError: SysInfoError,
|
|
|
|
|
|
2015-07-20 00:09:47 -07:00
|
|
|
getIp: getIp
|
|
|
|
|
};
|
|
|
|
|
|
2016-04-19 08:23:54 -07:00
|
|
|
var assert = require('assert'),
|
|
|
|
|
caas = require('./sysinfo/caas.js'),
|
|
|
|
|
config = require('./config.js'),
|
|
|
|
|
ec2 = require('./sysinfo/ec2.js'),
|
2016-10-08 16:40:58 -07:00
|
|
|
generic = require('./sysinfo/generic.js'),
|
2016-10-11 19:41:57 -07:00
|
|
|
scaleway = require('./sysinfo/scaleway.js'),
|
2016-04-19 08:23:54 -07:00
|
|
|
util = require('util');
|
|
|
|
|
|
2015-07-20 00:09:47 -07:00
|
|
|
var gCachedIp = null;
|
|
|
|
|
|
2016-01-05 12:10:25 +01:00
|
|
|
function SysInfoError(reason, errorOrMessage) {
|
|
|
|
|
assert.strictEqual(typeof reason, 'string');
|
|
|
|
|
assert(errorOrMessage instanceof Error || typeof errorOrMessage === 'string' || typeof errorOrMessage === 'undefined');
|
|
|
|
|
|
|
|
|
|
Error.call(this);
|
|
|
|
|
Error.captureStackTrace(this, this.constructor);
|
|
|
|
|
|
|
|
|
|
this.name = this.constructor.name;
|
|
|
|
|
this.reason = reason;
|
|
|
|
|
if (typeof errorOrMessage === 'undefined') {
|
|
|
|
|
this.message = reason;
|
|
|
|
|
} else if (typeof errorOrMessage === 'string') {
|
|
|
|
|
this.message = errorOrMessage;
|
|
|
|
|
} else {
|
|
|
|
|
this.message = 'Internal error';
|
|
|
|
|
this.nestedError = errorOrMessage;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
util.inherits(SysInfoError, Error);
|
|
|
|
|
SysInfoError.INTERNAL_ERROR = 'Internal Error';
|
2015-07-20 00:09:47 -07:00
|
|
|
|
2016-01-05 12:10:25 +01:00
|
|
|
function getApi(callback) {
|
|
|
|
|
assert.strictEqual(typeof callback, 'function');
|
2015-07-20 00:09:47 -07:00
|
|
|
|
2016-01-06 14:34:23 +01:00
|
|
|
switch (config.provider()) {
|
|
|
|
|
case '': return callback(null, caas); // current fallback for caas
|
|
|
|
|
case 'caas': return callback(null, caas);
|
|
|
|
|
case 'digitalocean': return callback(null, caas);
|
|
|
|
|
case 'ec2': return callback(null, ec2);
|
2016-10-11 19:41:57 -07:00
|
|
|
case 'scaleway': return callback(null, scaleway);
|
2016-10-08 16:40:58 -07:00
|
|
|
case 'generic': return callback(null, generic);
|
2016-10-07 14:21:26 -07:00
|
|
|
default: return callback(new Error('Unknown provider ' + config.provider()));
|
2016-01-06 14:34:23 +01:00
|
|
|
}
|
2015-07-20 00:09:47 -07:00
|
|
|
}
|
|
|
|
|
|
2016-01-05 12:10:25 +01:00
|
|
|
function getIp(callback) {
|
|
|
|
|
assert.strictEqual(typeof callback, 'function');
|
|
|
|
|
|
|
|
|
|
if (gCachedIp) return callback(null, gCachedIp);
|
|
|
|
|
|
2016-01-05 13:18:56 +01:00
|
|
|
getApi(function (error, api) {
|
2016-01-05 12:10:25 +01:00
|
|
|
if (error) return callback(error);
|
|
|
|
|
|
2016-01-05 13:18:56 +01:00
|
|
|
api.getIp(function (error, ip) {
|
|
|
|
|
if (error) return callback(error);
|
|
|
|
|
|
|
|
|
|
gCachedIp = ip;
|
2016-01-05 12:10:25 +01:00
|
|
|
|
2016-01-05 13:18:56 +01:00
|
|
|
callback(null, gCachedIp);
|
|
|
|
|
});
|
2016-01-05 12:10:25 +01:00
|
|
|
});
|
|
|
|
|
}
|