mirror of
https://github.com/serverless/serverless.git
synced 2026-01-25 15:07:39 +00:00
add local env
This commit is contained in:
parent
f1cedc80ce
commit
1e37a2f205
5
bin/jaws
5
bin/jaws
@ -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) {
|
||||
|
||||
@ -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);
|
||||
}
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user