@adikari/config-manager
Version:
Tool to deploy configs to different stores
74 lines (64 loc) • 2.32 kB
JavaScript
;
const Bluebird = require('bluebird');
const get = require('lodash.get');
const { readFile } = require('./fs/readFile');
const { interpolate } = require('./interpolate');
const { getValidatedSettings } = require('./get-validated-settings');
const { getAccountId } = require('./get-account-id');
const { getRegion } = require('./get-region');
const { getOutputs } = require('../cf/get-outputs');
const deepMap = require('deep-map');
const appendConfigParameters = settings => {
const path = get(settings, 'config.path');
const defaults = get(settings, 'config.defaults');
const required = get(settings, 'config.required');
const allParameters = Object.assign({}, defaults, required);
const parameterNames = Object.keys(allParameters)
.filter(Boolean)
.map(keyName => path.concat('/', keyName));
return Object.assign({}, settings, { configParameters: parameterNames });
};
const appendSecretParameters = settings => {
const path = get(settings, 'secret.path');
const required = get(settings, 'secret.required');
const allParameters = Object.assign({}, required);
const parameterNames = Object.keys(allParameters)
.filter(Boolean)
.map(keyName => path.concat('/', keyName));
return Object.assign({}, settings, { secretParameters: parameterNames });
};
const makeGetSettings = ({ settingsFilePath, variables }) => () => {
return Bluebird.resolve()
.then(() => readFile({ filePath: settingsFilePath }))
.catch(() => {
throw new Error(
`Could not find configs.yml in the following directory - ${process.cwd()}`
);
})
.then(config =>
Promise.all([
getValidatedSettings({ config }),
getAccountId(),
getRegion(),
getOutputs({
stackNames: get(config, 'cfOutputs', []).map(stack =>
interpolate({ value: stack, variables })
)
})
])
)
.then(([validatedConfig, accountId, region, cfOutputs]) => {
const mergedVariables = Object.assign({}, variables, cfOutputs, {
accountId,
region
});
return deepMap(validatedConfig, value =>
interpolate({ value, variables: mergedVariables })
);
})
.then(appendConfigParameters)
.then(appendSecretParameters);
};
module.exports = {
makeGetSettings
};