From 399ecf5b6cae0307c5f36e6b00d4fd451c1b5f77 Mon Sep 17 00:00:00 2001 From: Bennett Buchanan Date: Fri, 20 Apr 2018 10:57:33 -0700 Subject: [PATCH] rf: S3C-1399 Update Redis configuration --- lib/Config.js | 73 +++++++++++++++++++++------------------- lib/utapi/utapi.js | 3 +- lib/utapi/utapiReplay.js | 5 +-- lib/utapi/utilities.js | 7 ++-- 4 files changed, 48 insertions(+), 40 deletions(-) diff --git a/lib/Config.js b/lib/Config.js index 47968c869f..a14c6f583b 100644 --- a/lib/Config.js +++ b/lib/Config.js @@ -655,6 +655,43 @@ class Config extends EventEmitter { this.mongodb = {}; } + if (config.redis) { + if (config.redis.sentinels) { + this.redis = { sentinels: [], name: null }; + + assert(typeof config.redis.name === 'string', + 'bad config: redis sentinel name must be a string'); + this.redis.name = config.redis.name; + + assert(Array.isArray(config.redis.sentinels), + 'bad config: redis sentinels must be an array'); + config.redis.sentinels.forEach(item => { + const { host, port } = item; + assert(typeof host === 'string', + 'bad config: redis sentinel host must be a string'); + assert(typeof port === 'number', + 'bad config: redis sentinel port must be a number'); + this.redis.sentinels.push({ host, port }); + }); + } else { + // check for standalone configuration + this.redis = {}; + assert(typeof config.redis.host === 'string', + 'bad config: redis.host must be a string'); + assert(typeof config.redis.port === 'number', + 'bad config: redis.port must be a number'); + this.redis.host = config.redis.host; + this.redis.port = config.redis.port; + } + if (config.redis.password !== undefined) { + assert( + this._verifyRedisPassword(config.redis.password), + 'bad config: invalid password for redis. password must ' + + 'be a string'); + this.redis.password = config.redis.password; + } + } + if (config.utapi) { this.utapi = { component: 's3' }; if (config.utapi.port) { @@ -674,42 +711,8 @@ class Config extends EventEmitter { assert(config.localCache, 'missing required property of utapi ' + 'configuration: localCache'); this.utapi.localCache = config.localCache; - assert(config.utapi.redis, 'missing required property of utapi ' + + assert(config.redis, 'missing required property of utapi ' + 'configuration: redis'); - if (config.utapi.redis.sentinels) { - this.utapi.redis = { sentinels: [], name: null }; - - assert(typeof config.utapi.redis.name === 'string', - 'bad config: redis sentinel name must be a string'); - this.utapi.redis.name = config.utapi.redis.name; - - assert(Array.isArray(config.utapi.redis.sentinels), - 'bad config: redis sentinels must be an array'); - config.utapi.redis.sentinels.forEach(item => { - const { host, port } = item; - assert(typeof host === 'string', - 'bad config: redis sentinel host must be a string'); - assert(typeof port === 'number', - 'bad config: redis sentinel port must be a number'); - this.utapi.redis.sentinels.push({ host, port }); - }); - } else { - // check for standalone configuration - this.utapi.redis = {}; - assert(typeof config.utapi.redis.host === 'string', - 'bad config: redis.host must be a string'); - assert(typeof config.utapi.redis.port === 'number', - 'bad config: redis.port must be a number'); - this.utapi.redis.host = config.utapi.redis.host; - this.utapi.redis.port = config.utapi.redis.port; - } - if (config.utapi.redis.password !== undefined) { - assert( - this._verifyRedisPassword(config.utapi.redis.password), - 'config: invalid password for utapi redis. password' + - ' must be a string'); - this.utapi.redis.password = config.utapi.redis.password; - } if (config.utapi.metrics) { this.utapi.metrics = config.utapi.metrics; } diff --git a/lib/utapi/utapi.js b/lib/utapi/utapi.js index 7615a9165b..3b0a700edd 100644 --- a/lib/utapi/utapi.js +++ b/lib/utapi/utapi.js @@ -3,7 +3,8 @@ const _config = require('../Config').config; // start utapi server if (_config.utapi) { - const fullConfig = Object.assign({}, _config.utapi); + const fullConfig = Object.assign({}, _config.utapi, + { redis: _config.redis }); if (_config.vaultd) { Object.assign(fullConfig, { vaultd: _config.vaultd }); } diff --git a/lib/utapi/utapiReplay.js b/lib/utapi/utapiReplay.js index 3e20055b8c..8d84d4bf67 100644 --- a/lib/utapi/utapiReplay.js +++ b/lib/utapi/utapiReplay.js @@ -1,6 +1,7 @@ const UtapiReplay = require('utapi').UtapiReplay; const _config = require('../Config').config; -// start utapi server -const replay = new UtapiReplay(_config.utapi); +const utapiConfig = _config.utapi && + Object.assign({}, _config.utapi, { redis: _config.redis }); +const replay = new UtapiReplay(utapiConfig); // start utapi server replay.start(); diff --git a/lib/utapi/utilities.js b/lib/utapi/utilities.js index e7b56c9d1c..629e840a2f 100644 --- a/lib/utapi/utilities.js +++ b/lib/utapi/utilities.js @@ -5,8 +5,11 @@ const { auth } = require('arsenal'); const { UtapiClient } = require('utapi'); const logger = require('../utilities/logger'); const _config = require('../Config').config; -// setup utapi client -const utapi = new UtapiClient(_config.utapi); + +const utapiConfig = _config.utapi && + Object.assign({}, _config.utapi, { redis: _config.redis }); + +const utapi = new UtapiClient(utapiConfig); // setup utapi client function _listMetrics(host, port,