Merge pull request #674 from minibikini/master

Lots of fixes for v0.5
This commit is contained in:
Eslam λ Hefnawy 2016-02-18 19:04:09 +07:00
commit 22b21069ad
44 changed files with 145 additions and 118 deletions

View File

@ -171,7 +171,8 @@ class ServerlessFunction {
while( !_this._S.classes.Component.isComponentDir( p ) ) {
if( SUtils.fileExistsSync(path.join(p, 's-templates.json'))) {
templates.unshift( require(path.join(p, 's-templates.json')) );
let template = JSON.parse(fs.readFileSync(path.join(p, 's-templates.json'), 'utf8'));
templates.unshift(template);
}
p = path.join( p, '..' );
}
@ -266,10 +267,7 @@ class ServerlessFunction {
// Populate
let clone = _this.get();
clone = SUtils.populate(_this._S.state.getMeta(), _this.getTemplates(), clone, options.stage, options.region);
clone.endpoints = [];
for (let i = 0; i < _this.endpoints.length; i++) {
clone.endpoints[i] = _this.endpoints[i].getPopulated(options);
}
clone.endpoints = _this.endpoints.map( endpoint => endpoint.getPopulated(options) );
return clone;
}

View File

@ -299,7 +299,7 @@ class ServerlessProject extends VarContainer {
resources = SUtils.readAndParseJsonSync(_this._S.getProject().getFilePath('s-resources-cf.json'));
}
return _.flatten( _.map( _.values( _this.components ), c => c.getCFSnippets() ) );
return _.flattenDeep( _.map( _.values( _this.components ), c => c.getCFSnippets() ) );
})
.then(function (cfSnippets) {
@ -477,7 +477,7 @@ class ServerlessProject extends VarContainer {
getAllComponents(options){
if( _.get( options, 'paths' ) ){
options.paths = _.map( options.paths, p => p.split(path.sep)[0] );
options.paths = _.map( options.paths, p => p && p.split(path.sep)[0] );
}
return SUtils.filterSPaths( _.values( this.components ), options );
}
@ -535,7 +535,7 @@ class ServerlessProject extends VarContainer {
}
getRegion( stageName, regionName ){
if( this.hasStage( stageName ) ){
if( this.validateStageExists( stageName ) ){
let stage = this.getStage( stageName );
if( stage.hasRegion( regionName ) ){

View File

@ -65,22 +65,24 @@ class ServerlessProviderAws {
let req = awsService[method](params);
// Add listeners...
//req.on('validate', function(r) {});
req.on('validate', function(r) {});
let performRequest = function() {
return new BbPromise(function(resolve, reject) {
return new BbPromise(function(resolve, reject) {
let performRequest = function() {
req.send(function(err, data) {
if (err && err.statusCode == 429) {
SUtils.sDebug("'Too many requests' received, sleeping 5 seconds, then retrying...");
setTimeout( performRequest, 5000 );
return setTimeout( performRequest, 5000 );
} else if (err) {
reject( err );
return reject(err);
}
resolve(data);
return resolve(data);
});
});
};
return performRequest();
};
performRequest();
});
}
/**
@ -143,6 +145,14 @@ class ServerlessProviderAws {
sessionToken: process.env['AWS_SESSION_TOKEN'],
region: region
};
} else if (this._S.config.awsAdminKeyId) {
// Access Keys from the config
credentials = {
accessKeyId: this._S.config.awsAdminKeyId,
secretAccessKey: this._S.config.awsAdminSecretKey,
region: region
};
}
if (!credentials) {

View File

@ -9,7 +9,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SUtils = require(path.join(serverlessPath, 'utils/index')),
BbPromise = require('bluebird'),
Zip = require('node-zip'),

View File

@ -11,7 +11,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SUtils = require(path.join(serverlessPath, 'utils/index')),
BbPromise = require('bluebird'),
fs = require('fs'),
@ -181,7 +181,9 @@ module.exports = function(SPlugin, serverlessPath) {
SUtils.sDebug(`Getting ENV Vars: ${_this.meta.variables.projectBucket} - ${key}`);
// Get ENV file from S3
let NoSuchKey = {code: 'NoSuchKey'};
return _this.aws.request('S3', 'getObject', params, _this.evt.options.stage, _this.evt.options.region)
.catch(NoSuchKey => ({Body: ''}))
.then(function(s3ObjData) {
fs.writeFileSync(

View File

@ -13,7 +13,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
SUtils = require(path.join(serverlessPath, 'utils')),
BbPromise = require('bluebird'),

View File

@ -19,7 +19,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SUtils = require(path.join(serverlessPath, 'utils/index')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
BbPromise = require('bluebird'),

View File

@ -8,7 +8,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SUtils = require(path.join(serverlessPath, 'utils/index')),
BbPromise = require('bluebird'),
async = require('async'),

View File

@ -20,7 +20,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SUtils = require(path.join(serverlessPath, 'utils/index')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
BbPromise = require('bluebird'),

View File

@ -8,7 +8,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SUtils = require(path.join(serverlessPath, 'utils/index')),
BbPromise = require('bluebird'),
fs = require('fs');

View File

@ -12,7 +12,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
SUtils = require(path.join(serverlessPath, 'utils/index')),
chalk = require('chalk'),

View File

@ -11,7 +11,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
chalk = require('chalk'),
BbPromise = require('bluebird'),

View File

@ -7,7 +7,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
BbPromise = require('bluebird'),
SUtils = require(path.join(serverlessPath, 'utils'));

View File

@ -7,7 +7,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
BbPromise = require('bluebird'),
SUtils = require(path.join(serverlessPath, 'utils'));

View File

@ -18,7 +18,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SUtils = require(path.join(serverlessPath, 'utils/index')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
BbPromise = require('bluebird'),

View File

@ -13,7 +13,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SUtils = require(path.join(serverlessPath, 'utils/index')),
BbPromise = require('bluebird');

View File

@ -13,7 +13,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SUtils = require(path.join(serverlessPath, 'utils/index')),
BbPromise = require('bluebird');

View File

@ -13,7 +13,7 @@
module.exports = function (SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SUtils = require(path.join(serverlessPath, 'utils/index')),
BbPromise = require('bluebird');

View File

@ -14,7 +14,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SUtils = require(path.join(serverlessPath, 'utils/index')),
BbPromise = require('bluebird');

View File

@ -13,7 +13,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
BbPromise = require('bluebird'),
SUtils = require(path.join(serverlessPath, 'utils'));

View File

@ -12,7 +12,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SUtils = require(path.join(serverlessPath, 'utils/index')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
BbPromise = require('bluebird'),

View File

@ -16,7 +16,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SUtils = require(path.join(serverlessPath, 'utils/index')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
BbPromise = require('bluebird'),
@ -156,6 +156,7 @@ module.exports = function(SPlugin, serverlessPath) {
return this.S.getProvider('aws')
.request('Lambda', 'getAlias', params, this.evt.options.stage, this.evt.options.region)
.bind(this)
.then(reply => this.evt.data.version = reply.FunctionVersion)
.then(this._getLogStreams)
.then( logStreams => {

View File

@ -7,7 +7,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
BbPromise = require('bluebird'),
chalk = require('chalk'),
SCli = require( path.join( serverlessPath, 'utils', 'cli'));

View File

@ -7,7 +7,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SUtils = require(path.join(serverlessPath, 'utils')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
BbPromise = require('bluebird'),

View File

@ -6,7 +6,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SUtils = require(path.join(serverlessPath, 'utils')),
spawnSync = require('child_process').spawnSync,
SCli = require(path.join(serverlessPath, 'utils/cli')),

View File

@ -14,7 +14,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
URL = require('url'),
Download = require('download'),

View File

@ -12,7 +12,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
BbPromise = require('bluebird'),
SUtils = require(path.join(serverlessPath, 'utils')),

View File

@ -19,7 +19,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require( path.join( serverlessPath, 'ServerlessError' ) ),
SError = require( path.join( serverlessPath, 'Error' ) ),
SCli = require( path.join( serverlessPath, 'utils/cli' ) ),
SUtils = require( path.join( serverlessPath, 'utils' ) ),
BbPromise = require('bluebird'),
@ -281,10 +281,8 @@ module.exports = function(SPlugin, serverlessPath) {
_validateAndPrepare() {
this.S.getProvider('aws').getProfile(this.evt.options.profile);
// If Profile, extract API Keys
if (this.evt.options.profile) {
if (this.evt.options.profile && this.S.getProvider('aws').getProfile(this.evt.options.profile)) {
this.S.config.awsAdminKeyId = this.S.getProvider('aws').getProfile(this.evt.options.profile).aws_access_key_id;
this.S.config.awsAdminSecretKey = this.S.getProvider('aws').getProfile(this.evt.options.profile).aws_secret_access_key;
}

View File

@ -23,7 +23,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require( path.join( serverlessPath, 'ServerlessError' ) ),
SError = require( path.join( serverlessPath, 'Error' ) ),
SCli = require( path.join( serverlessPath, 'utils/cli' ) ),
SUtils = require( path.join( serverlessPath, 'utils' ) ),
BbPromise = require('bluebird'),

View File

@ -11,7 +11,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
fs = require('fs'),
BbPromise = require('bluebird'),
@ -85,7 +85,7 @@ usage: serverless project remove`,
*/
_removeAllStages() {
§ let stages = this.S.getProject().getStages()
let stages = this.S.getProject().getStages()
return BbPromise.each(stages, (stage) => {
let evt = {

View File

@ -17,7 +17,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
BbPromise = require('bluebird'),
SUtils = require(path.join(serverlessPath, 'utils'));
@ -142,16 +142,15 @@ usage: serverless region create`,
return BbPromise.reject(new SError('Region "' + _this.evt.options.region + '" already exists in stage "' + _this.evt.options.stage + '"'));
}
// Update and save Meta
_this.meta = _this.S.state.getMeta();
// Update and save Project
const project = _this.S.getProject()
const stage = project.getStage(_this.evt.options.stage);
const region = new _this.S.classes.Region(_this.S, stage, _this.evt.options.region)
_this.meta.stages[_this.evt.options.stage].regions[_this.evt.options.region] = {
variables: {
region: _this.evt.options.region
}
};
stage.addRegion(region);
return project.save();
return _this.meta.save();
}
/**
@ -173,8 +172,9 @@ usage: serverless region create`,
// Create bucket, or skip if already exists
const stage = this.evt.options.stage,
region = this.evt.options.region,
bucketName = this.S.state.getMeta().variables.projectBucket;
bucketName = this.S.state.getMeta().variables.projectBucket,
region = this.evt.options.region;
// region = bucketName.split('.')[1];
return this.S.getProvider('aws')
.request('S3', 'getBucketAcl', { Bucket: bucketName }, stage, region)
@ -224,7 +224,7 @@ SERVERLESS_PROJECT_NAME=${projectName}`;
let params = {
Bucket: this.S.state.getMeta().variables.projectBucket,
Key: key,
Key: "/" + key,
ACL: 'private',
ContentType: 'text/plain',
Body: envFileContents

View File

@ -16,7 +16,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
BbPromise = require('bluebird'),
fs = BbPromise.promisifyAll(require('fs')),
@ -149,13 +149,13 @@ usage: serverless region remove`,
_listS3Objects() {
SUtils.sDebug("List related S3 objects");
let prefix = ['serverless', this.S.getProject().name, this.evt.options.stage, this.evt.options.region].join('/'),
let prefix = ['serverless', this.S.getProject().getName(), this.evt.options.stage, this.evt.options.region].join('/'),
params = {
Bucket: this.S.state.getMeta().variables.projectBucket,
Prefix: prefix
};
return this.S.getProvider('aws').request('S3', 'listObjects', params, stage, region)
.then(reply => {return _.map(reply.Contents, (item) => ({Key: item.Key}) )});
return this.S.getProvider('aws').request('S3', 'listObjects', params, this.evt.options.stage, this.evt.options.region)
.then(reply => _.map(reply.Contents, (item) => ({Key: item.Key})));
}
_removeS3Objects(objects) {
@ -168,7 +168,7 @@ usage: serverless region remove`,
Objects: objects
}
};
return this.S.getProvider('aws').request('S3', 'deleteObjects', params, stage, region);
return this.S.getProvider('aws').request('S3', 'deleteObjects', params, this.evt.options.stage, this.evt.options.region);
} else {
SUtils.sDebug("S3 objects are not found. Skipping.");
return BbPromise.resolve();
@ -177,9 +177,8 @@ usage: serverless region remove`,
_removeMeta() {
// Update and save Meta
let meta = this.S.state.getMeta();
delete meta.stages[this.evt.options.stage].regions[this.evt.options.region]
return meta.save();
this.S.getProject().getStage(this.evt.options.stage).removeRegion(this.evt.options.region);
return this.S.getProject().save();
}
_removeVariables() {

View File

@ -9,7 +9,7 @@ module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
replaceall = require('replaceall'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
BbPromise = require('bluebird'),
_ = require('lodash'),
@ -156,7 +156,7 @@ usage: serverless resources deploy`,
_deployResources() {
let _this = this;
let regionVars = _this.S.state.getMeta().stages[_this.evt.options.stage].regions[_this.evt.options.region].variables;
let regionVars = _this.S.getProject().getRegion(_this.evt.options.stage, _this.evt.options.region)._variables
let resourceVars = [ 'iamRoleArnLambda' ].concat( _this.S.getProject().resourceVars);
return _this.S.getProject().getResources({
@ -262,7 +262,7 @@ usage: serverless resources deploy`,
stage = this.evt.options.stage,
region = this.evt.options.region,
aws = this.S.getProvider('aws'),
stackName = this.S.state.getMeta().stages[stage].regions[region].variables.resourcesStackName || aws.getLambdasStackName(stage, projectName);
stackName = this.S.getProject().getRegion(stage, region)._variables.resourcesStackName || aws.getLambdasStackName(stage, projectName);
// CF Params
let params = {

View File

@ -13,7 +13,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
BbPromise = require('bluebird'),
fs = BbPromise.promisifyAll(require('fs')),

View File

@ -8,7 +8,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
BbPromise = require('bluebird'),
SUtils = require(path.join(serverlessPath, 'utils/index')),
@ -157,7 +157,7 @@ usage: serverless resources remove`,
let _this = this,
stage = _this.evt.options.stage,
region = _this.evt.options.region,
regionVars = _this.S.state.getMeta().stages[stage].regions[region].variables,
regionVars = _this.S.getProject().getRegion(stage, region)._variables,
projectBucket = _this.S.state.getMeta().variables.projectBucket,
projectName = _this.S.getProject().getName(),
aws = _this.S.getProvider('aws');

View File

@ -14,7 +14,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
os = require('os'),
fs = require('fs'),
@ -182,21 +182,25 @@ usage: serverless stage create`,
*/
_createStage() {
const project = this.S.getProject();
const stage = new this.S.classes.Stage(this.S, project, this.evt.options.stage);
let _this = this;
project.addStage(stage);
// Update Meta
_this.meta = _this.S.state.getMeta();
return project.save();
_this.meta.stages[_this.evt.options.stage] = {
regions: {},
variables: {
stage: _this.evt.options.stage
}
};
// // Update Meta
// _this.meta = _this.S.state.getMeta();
// _this.meta.stages[_this.evt.options.stage] = {
// regions: {},
// variables: {
// stage: _this.evt.options.stage
// }
// };
// Save Meta before adding region
return _this.meta.save();
// return _this.meta.save();
}
/**

View File

@ -11,7 +11,7 @@
module.exports = function(SPlugin, serverlessPath) {
const path = require('path'),
SError = require(path.join(serverlessPath, 'ServerlessError')),
SError = require(path.join(serverlessPath, 'Error')),
SCli = require(path.join(serverlessPath, 'utils/cli')),
fs = require('fs'),
BbPromise = require('bluebird'),

View File

@ -299,14 +299,16 @@ exports.doesFunctionExist = function(functionName, componentName, projectRootPat
exports.populate = function(meta, templates, data, stage, region) {
const project = meta._S.getProject()
// Validate required params
if (!meta || !templates || !data || !stage || !region) throw new SError(`Missing required params: Serverless, project, stage, region`);
// Validate: Check stage exists
if (typeof stage != 'undefined' && !meta.stages[stage]) throw new SError(`Stage doesn't exist`);
if (typeof stage != 'undefined' && !project.validateStageExists(stage)) throw new SError(`Stage doesn't exist`);
// Validate: Check region exists in stage
if (typeof region != 'undefined' && !meta.stages[stage].regions[region]) throw new SError(`Region doesn't exist in provided stage`);
if (typeof region != 'undefined' && !project.validateRegionExists(stage, region)) throw new SError(`Region doesn't exist in provided stage`);
// Sanitize: Remove nested properties. DO NOT populate these. Rely on calling those classes getPopulated methods instead.
if (data.components) delete data.components;
@ -316,12 +318,12 @@ exports.populate = function(meta, templates, data, stage, region) {
let varTemplateSyntax = /\${([\s\S]+?)}/g,
templateTemplateSyntax = /\$\${([\s\S]+?)}/g;
if (meta._S.getProject().variableSyntax) {
varTemplateSyntax = RegExp(meta._S.getProject().variableSyntax,'g');
if (project.variableSyntax) {
varTemplateSyntax = RegExp(project.variableSyntax,'g');
}
if (meta._S.getProject().templateSyntax) {
templateTemplateSyntax = RegExp(meta._S.getProject().templateSyntax,'g');
if (project.templateSyntax) {
templateTemplateSyntax = RegExp(project.templateSyntax,'g');
}
// Populate templates
@ -362,10 +364,10 @@ exports.populate = function(meta, templates, data, stage, region) {
let variableName = variableSyntax.replace(varTemplateSyntax, (match, varName) => varName.trim());
let value;
if (meta.stages[stage].regions[region].variables[variableName]) {
value = meta.stages[stage].regions[region].variables[variableName]
} else if (meta.stages[stage].variables[variableName]) {
value = meta.stages[stage].variables[variableName];
if (project.getRegion(stage, region)._variables[variableName]) {
value = project.getRegion(stage, region)._variables[variableName]
} else if (project.getStage(stage)._variables[variableName]) {
value = project.getStage(stage)._variables[variableName];
} else if (meta.variables[variableName]) {
value = meta.variables[variableName];
}

View File

@ -88,7 +88,7 @@ let cleanup = function(Meta, cb, evt) {
// Delete CloudFormation Resources Stack
let cloudformation = new AWS.CloudFormation();
cloudformation.deleteStack({
StackName: Meta.stages[config.stage].regions[config.region].variables.resourcesStackName
StackName: serverless.getProject().getRegion(config.stage, config.region)._variables.resourcesStackName
}, function (err, data) {
if (err) console.log(err, err.stack); // an error occurred
@ -140,14 +140,17 @@ describe('Test action: Project Init', function() {
// Validate Meta
let Meta = serverless.state.getMeta();
let stage = serverless.getProject().getStage(config.stage);
let region = serverless.getProject().getRegion(config.stage, config.region);
assert.equal(true, typeof Meta.variables.project != 'undefined');
assert.equal(true, typeof Meta.variables.domain != 'undefined');
assert.equal(true, typeof Meta.variables.projectBucket != 'undefined');
assert.equal(true, typeof Meta.stages[config.stage].variables.stage != 'undefined');
assert.equal(true, typeof Meta.stages[config.stage].regions[config.region].variables.region != 'undefined');
assert.equal(true, typeof stage._variables.stage != 'undefined');
assert.equal(true, typeof region._variables.region != 'undefined');
if (!config.noExecuteCf) {
assert.equal(true, typeof Meta.stages[config.stage].regions[config.region].variables.iamRoleArnLambda != 'undefined');
assert.equal(true, typeof Meta.stages[config.stage].regions[config.region].variables.resourcesStackName != 'undefined');
assert.equal(true, typeof region._variables.iamRoleArnLambda != 'undefined');
assert.equal(true, typeof region._variables.resourcesStackName != 'undefined');
}
// Validate Event

View File

@ -140,15 +140,18 @@ describe('Test action: Project Install', function() {
// Validate Meta
let Meta = serverless.state.getMeta();
let stage = serverless.getProject().getStage(config.stage);
let region = serverless.getProject().getRegion(config.stage, config.region);
assert.equal(true, typeof Meta.variables.project != 'undefined');
assert.equal(true, typeof Meta.variables.domain != 'undefined');
assert.equal(true, typeof Meta.variables.projectBucket != 'undefined');
assert.equal(true, typeof Meta.stages[config.stage].variables.stage != 'undefined');
assert.equal(true, typeof Meta.stages[config.stage].regions[config.region].variables.region != 'undefined');
assert.equal(true, typeof stage._variables.stage != 'undefined');
assert.equal(true, typeof region._variables.region != 'undefined');
if (!config.noExecuteCf) {
assert.equal(true, typeof Meta.stages[config.stage].regions[config.region].variables.iamRoleArnLambda != 'undefined');
assert.equal(true, typeof Meta.stages[config.stage].regions[config.region].variables.resourcesStackName != 'undefined');
assert.equal(true, typeof region._variables.iamRoleArnLambda != 'undefined');
assert.equal(true, typeof region._variables.resourcesStackName != 'undefined');
}
// Validate Event

View File

@ -105,7 +105,8 @@ describe('Test Action: Region Create', function() {
let Meta = serverless.state.meta;
//console.log(serverless.state.meta.stages)
assert.equal(true, typeof Meta.stages[config.stage].regions[config.region2].variables.region != 'undefined');
assert.equal(true, typeof serverless.getProject().getRegion(config.stage, config.region2)._variables.region != 'undefined');
// Validate Event
validateEvent(evt);

View File

@ -97,8 +97,9 @@ describe('Test Action: Stage Create', function() {
.then(function(evt) {
let Meta = serverless.state.meta;
assert.equal(true, typeof Meta.stages[config.stage2].variables.stage != 'undefined');
assert.equal(true, typeof Meta.stages[config.stage2].regions[config.region].variables.region != 'undefined');
let project = serverless.getProject();
assert.equal(true, typeof project.getStage(config.stage2)._variables.stage != 'undefined');
assert.equal(true, typeof project.getRegion(config.stage2, config.region)._variables.region != 'undefined');
// Validate EVT
validateEvent(evt);

View File

@ -116,14 +116,18 @@ describe('Test: Project Live Cycle', function() {
// Validate Meta
let Meta = serverless.state.getMeta();
let stage = serverless.getProject().getStage(config.stage);
let region = serverless.getProject().getRegion(config.stage, config.region);
assert.equal(true, typeof Meta.variables.project != 'undefined');
assert.equal(true, typeof Meta.variables.domain != 'undefined');
assert.equal(true, typeof Meta.variables.projectBucket != 'undefined');
assert.equal(true, typeof Meta.stages[config.stage].variables.stage != 'undefined');
assert.equal(true, typeof Meta.stages[config.stage].regions[config.region].variables.region != 'undefined');
assert.equal(true, typeof stage._variables.stage != 'undefined');
assert.equal(true, typeof region._variables.region != 'undefined');
if (!config.noExecuteCf) {
assert.equal(true, typeof Meta.stages[config.stage].regions[config.region].variables.iamRoleArnLambda != 'undefined');
assert.equal(true, typeof Meta.stages[config.stage].regions[config.region].variables.resourcesStackName != 'undefined');
assert.equal(true, typeof region._variables.iamRoleArnLambda != 'undefined');
assert.equal(true, typeof region._variables.resourcesStackName != 'undefined');
}
// Validate Event
@ -156,8 +160,11 @@ describe('Test: Project Live Cycle', function() {
.then(function(evt) {
let Meta = serverless.state.meta;
assert.equal(true, typeof Meta.stages[config.stage2].variables.stage != 'undefined');
assert.equal(true, typeof Meta.stages[config.stage2].regions[config.region].variables.region != 'undefined');
let stage = serverless.getProject().getStage(config.stage2);
let region = serverless.getProject().getRegion(config.stage2, config.region);
assert.equal(true, typeof stage._variables.stage != 'undefined');
assert.equal(true, typeof region._variables.region != 'undefined');
// Validate EVT
validateEvent(evt);
@ -188,8 +195,7 @@ describe('Test: Project Live Cycle', function() {
return serverless.actions.regionCreate(evt)
.then(function(evt) {
let Meta = serverless.state.meta;
assert.equal(true, typeof Meta.stages[config.stage2].regions[config.region2].variables.region != 'undefined');
assert.equal(true, typeof serverless.getProject().getRegion(config.stage2, config.region2)._variables.region != 'undefined');
// Validate Event
validateEvent(evt);

View File

@ -31,7 +31,6 @@ describe('Test Serverless Project Class', function() {
return serverless.init()
.then(function() {
// Instantiate Class
instance = serverless.getProject();
@ -78,7 +77,7 @@ describe('Test Serverless Project Class', function() {
// These functions have their own s-templates.json files which give them the same template, with one different property
// Function1 template
assert.equal(true, data.components.nodejscomponent.functions['nodejscomponent/group1/function1'].endpoints[0].requestTemplates['application/json'].pathParams === "$input.path('$.id1')");
assert.equal(data.components.nodejscomponent.functions['nodejscomponent/group1/function1'].endpoints[0].requestTemplates['application/json'].pathParams, "$input.path('$.id1')");
// Function2 template
assert.equal(true, data.components.nodejscomponent.functions['nodejscomponent/group1/function2'].endpoints[0].requestTemplates['application/json'].pathParams === "$input.path('$.id2')");
// Function3 template - s-templates.json left undefined