diff --git a/lib/defaults/actions/EnvGet.js b/lib/defaults/actions/EnvGet.js index b1fcec271..ed28f38ec 100644 --- a/lib/defaults/actions/EnvGet.js +++ b/lib/defaults/actions/EnvGet.js @@ -58,8 +58,7 @@ usage: jaws env get * @returns {Promise} */ envGet() { - let _this = this, - stageRegionKey = Array.prototype.slice.call(arguments, 0); + let stageRegionKey = Array.prototype.slice.call(arguments, 0); JawsUtils.jawsDebug('stage and region param', stageRegionKey); diff --git a/lib/defaults/actions/EnvSet.js b/lib/defaults/actions/EnvSet.js new file mode 100644 index 000000000..69d21a585 --- /dev/null +++ b/lib/defaults/actions/EnvSet.js @@ -0,0 +1,102 @@ +'use strict'; + +/** + * Action: EnvSet + */ + +const JawsPlugin = require('../../JawsPlugin'), + JawsError = require('../../jaws-error'), + JawsCLI = require('../../utils/cli'), + path = require('path'), + JawsUtils = require('../../utils'); + +/** + * EnvSet Class + */ + +class EnvSet extends JawsPlugin { + + /** + * @param Jaws class object + * @param config object + */ + + constructor(Jaws, config) { + super(Jaws, config); + } + + /** + * Define your plugins name + * + * @returns {string} + */ + static getName() { + return 'jaws.core.' + EnvSet.name; + } + + /** + * @returns {Promise} upon completion of all registrations + */ + + registerActions() { + this.Jaws.action(this.envSet.bind(this), { + handler: 'envSet', + description: `set var value for stage and region. Region can be 'all' +usage: jaws env set + +\t Ex: jaws env set prod us-east-1 TABLE_NAME users`, + context: 'env', + contextAction: 'set', + options: [], + }); + return Promise.resolve(); + } + + /** + * + * @param stageRegionKey stage region key val + * @returns {Promise} + */ + envSet() { + let stageRegionKeyVal = Array.prototype.slice.call(arguments, 0); + + JawsUtils.jawsDebug('stage and region param', stageRegionKeyVal); + + if (!stageRegionKeyVal || stageRegionKeyVal.length !== 4) { + return Promise.reject(new JawsError('Must specify a stage, region, key and val'), JawsError.errorCodes.UNKNOWN); + } + + let stage = stageRegionKeyVal[0], + region = stageRegionKeyVal[1], + key = stageRegionKeyVal[2], + val = stageRegionKeyVal[3]; + + return this.Jaws.getEnvFiles(region, stage) + .then(envMapsByRegion => { + let putEnvQ = []; + + envMapsByRegion.forEach(mapForRegion => { + if (!mapForRegion.vars) { //someone could have del the .env file.. + mapForRegion.vars = {}; + } + + mapForRegion.vars[key] = val; + + let contents = ''; + Object.keys(mapForRegion.vars).forEach(newKey => { + contents += [newKey, mapForRegion.vars[newKey]].join('=') + '\n'; + }); + + if (stage == 'local') { + putEnvQ.push(utils.writeFile(path.join(this.Jaws._projectRootPath, '.env'), contents)); + } else { + putEnvQ.push(this.Jaws.putEnvFile(mapForRegion.regionName, stage, contents)); + } + }); + + return Promise.all(putEnvQ); + }); + } +} + +module.exports = EnvSet; diff --git a/lib/defaults/actions/EnvUnset.js b/lib/defaults/actions/EnvUnset.js new file mode 100644 index 000000000..5a9df94a5 --- /dev/null +++ b/lib/defaults/actions/EnvUnset.js @@ -0,0 +1,101 @@ +'use strict'; + +/** + * Action: EnvUnset + */ + +const JawsPlugin = require('../../JawsPlugin'), + JawsError = require('../../jaws-error'), + JawsCLI = require('../../utils/cli'), + path = require('path'), + JawsUtils = require('../../utils'); + +/** + * EnvUnset Class + */ + +class EnvUnset extends JawsPlugin { + + /** + * @param Jaws class object + * @param config object + */ + + constructor(Jaws, config) { + super(Jaws, config); + } + + /** + * Define your plugins name + * + * @returns {string} + */ + static getName() { + return 'jaws.core.' + EnvUnset.name; + } + + /** + * @returns {Promise} upon completion of all registrations + */ + + registerActions() { + this.Jaws.action(this.envUnset.bind(this), { + handler: 'envUnset', + description: `unset var value for stage and region. Region can be 'all' +usage: jaws env unset + +\t Ex: jaws env unset prod us-east-1 TABLE_NAME`, + context: 'env', + contextAction: 'unset', + options: [], + }); + return Promise.resolve(); + } + + /** + * + * @param stageRegionKey stage region key + * @returns {Promise} + */ + envUnset() { + let stageRegionKey = Array.prototype.slice.call(arguments, 0); + + JawsUtils.jawsDebug('stage and region param', stageRegionKey); + + if (!stageRegionKey || stageRegionKey.length !== 3) { + return Promise.reject(new JawsError('Must specify a stage, region and key'), JawsError.errorCodes.UNKNOWN); + } + + let stage = stageRegionKey[0], + region = stageRegionKey[1], + key = stageRegionKey[2]; + + return this.Jaws.getEnvFiles(region, stage) + .then(envMapsByRegion => { + let putEnvQ = []; + + envMapsByRegion.forEach(mapForRegion => { + if (!mapForRegion.vars) { //someone could have del the .env file.. + mapForRegion.vars = {}; + } + + delete mapForRegion.vars[key]; + + let contents = ''; + Object.keys(mapForRegion.vars).forEach(newKey => { + contents += [newKey, mapForRegion.vars[newKey]].join('=') + '\n'; + }); + + if (stage == 'local') { + putEnvQ.push(utils.writeFile(path.join(this.Jaws._projectRootPath, '.env'), contents)); + } else { + putEnvQ.push(this.Jaws.putEnvFile(mapForRegion.regionName, stage, contents)); + } + }); + + return Promise.all(putEnvQ); + }); + } +} + +module.exports = EnvUnset; diff --git a/lib/defaults/defaults.json b/lib/defaults/defaults.json index 7eabd65ec..f5882a833 100644 --- a/lib/defaults/defaults.json +++ b/lib/defaults/defaults.json @@ -27,6 +27,14 @@ { "path": "./defaults/actions/EnvGet.js", "config": {} + }, + { + "path": "./defaults/actions/EnvSet.js", + "config": {} + }, + { + "path": "./defaults/actions/EnvUnset.js", + "config": {} } ] } \ No newline at end of file