add local env

This commit is contained in:
ryanp 2015-09-04 12:45:32 -05:00
parent f1cedc80ce
commit 1e37a2f205
3 changed files with 48 additions and 26 deletions

View File

@ -41,6 +41,7 @@ program
));
});
//TODO: generate stage
program
.command('generate')
.description('Create boilerplate structure for a new lambda or api gateway (or both)')
@ -134,10 +135,10 @@ program
}
});
//TODO: support local env
program
.command('env <cmd> <stage> [key] [val]')
.description('Manage env vars for stage. Valid cmds: list,get,set,unset. Ex: get USERNAME test or set USERNAME=blah test')
.description('Manage env vars for stage. Valid cmds: list,get,set,unset.' +
'\nEx: get test USERNAME or set test USERNAME blah.')
.action(function(cmd, stage, key, val) {
cmd = cmd.toLowerCase();
switch (cmd) {

View File

@ -8,6 +8,7 @@
var JawsError = require('../jaws-error'),
Promise = require('bluebird'),
utils = require('../utils'),
fs = require('fs'),
AWSUtils = require('../utils/aws'),
path = require('path'),
chalk = require('chalk'),
@ -15,19 +16,31 @@ var JawsError = require('../jaws-error'),
module.exports = function(JAWS) {
JAWS.getEnvFileAsMap = function(awsProfile, awsRegion, bucketName, projectName, stage) {
return AWSUtils.getEnvFile(
awsProfile,
awsRegion,
bucketName,
projectName,
stage
)
.then(function(s3ObjData) {
if (!s3ObjData.Body) {
return {};
}
var _this = this,
deferred;
return dotenv.parse(s3ObjData.Body);
if (stage == 'local') {
deferred = Promise.resolve(fs.readFileSync(path.join(_this._meta.projectRootPath, 'back', '.env')));
} else {
deferred = AWSUtils.getEnvFile(
awsProfile,
awsRegion,
bucketName,
projectName,
stage
)
.then(function(s3ObjData) {
if (!s3ObjData.Body) {
return '';
}
return s3ObjData.Body;
});
}
return deferred
.then(function(envFileBuffer) {
return dotenv.parse(envFileBuffer);
})
.catch(function(err) {
return {};
@ -56,7 +69,7 @@ module.exports = function(JAWS) {
projectBucketName,
projectName,
stage
)])
),])
.spread(function(jawsJsonPaths, envMap) {
var envInBackMap = {};
@ -155,18 +168,22 @@ module.exports = function(JAWS) {
delete envMap[key];
}
var contents = "";
var contents = '';
Object.keys(envMap).forEach(function(newKey) {
contents += [newKey, envMap[newKey]].join('=') + '\n';
});
return AWSUtils.putEnvFile(
awsProfile,
projectBucketRegion,
projectBucketName,
projectName,
stage,
contents);
if (stage == 'local') {
return utils.writeFile(path.join(_this._meta.projectRootPath, 'back', '.env'), contents);
} else {
return AWSUtils.putEnvFile(
awsProfile,
projectBucketRegion,
projectBucketName,
projectName,
stage,
contents);
}
});
};
};

View File

@ -169,7 +169,12 @@ function _getAnswers(projName, stage, s3Bucket, lambdaRegion, notificationEmail,
* @private
*/
function _prepareProjectData(answers) {
// Set project name
if (answers.stage.toLowerCase() == 'local') {
Promise.reject(new JawsError(
'Stage ' + answers.stage + ' is reserved',
JawsError.errorCodes.UNKNOWN));
}
project.name = answers.name.toLowerCase().trim()
.replace(/[^a-zA-Z-\d\s:]/g, '')
.replace(/\s/g, '-')
@ -178,7 +183,7 @@ function _prepareProjectData(answers) {
// AWS only allows Alphanumeric and - in name
var nameOk = /^([a-zA-Z0-9-]+)$/.exec(project.name);
if (!nameOk) {
reject(new JawsError(
Promise.reject(new JawsError(
'Project names can only be alphanumeric and -',
JawsError.errorCodes.INVALID_PROJ_NAME));
}
@ -401,7 +406,6 @@ module.exports = function(JAWS) {
* @returns {*}
*/
JAWS.new = function(projName, stage, s3Bucket, lambdaRegion, notificationEmail, awsProfile) {
return _getAnswers(projName, stage, s3Bucket, lambdaRegion, notificationEmail, awsProfile)
.then(_prepareProjectData)
.then(_createS3JawsStructure) //see if bucket is avail first before doing work