serverless/lib/plugins/aws/deploy/lib/createStack.js
Florian Motlik 1364f05f61 Merge pull request #1917 from johncmckim/issue-1777
Update packaging to support individual packages per function
2016-09-05 14:56:07 +02:00

82 lines
2.2 KiB
JavaScript

'use strict';
const path = require('path');
const BbPromise = require('bluebird');
module.exports = {
create() {
this.serverless.cli.log('Creating Stack...');
const stackName = `${this.serverless.service.service}-${this.options.stage}`;
const coreCloudFormationTemplate = this.loadCoreCloudFormationTemplate();
const params = {
StackName: stackName,
OnFailure: 'DELETE',
Capabilities: [
'CAPABILITY_IAM',
],
Parameters: [],
TemplateBody: JSON.stringify(coreCloudFormationTemplate),
Tags: [{
Key: 'STAGE',
Value: this.options.stage,
}],
};
return this.sdk.request('CloudFormation',
'createStack',
params,
this.options.stage,
this.options.region);
},
createStack() {
const stackName = `${this.serverless.service.service}-${this.options.stage}`;
this.serverless.service.provider
.compiledCloudFormationTemplate = this.loadCoreCloudFormationTemplate();
// just write the template to disk if a deployment should not be performed
if (this.options.noDeploy) {
return BbPromise.bind(this)
.then(this.writeCreateTemplateToDisk);
}
return this.sdk.request('CloudFormation',
'describeStackResources',
{ StackName: stackName },
this.options.stage,
this.options.region)
.then(() => BbPromise.resolve('alreadyCreated'))
.catch(e => {
if (e.message.indexOf('does not exist') > -1) {
return BbPromise.bind(this)
.then(this.create);
}
throw new this.serverless.classes.Error(e);
});
},
// helper methods
loadCoreCloudFormationTemplate() {
return this.serverless.utils.readFileSync(
path.join(this.serverless.config.serverlessPath,
'plugins',
'aws',
'deploy',
'lib',
'core-cloudformation-template.json')
);
},
writeCreateTemplateToDisk() {
const cfTemplateFilePath = path.join(this.serverless.config.servicePath,
'.serverless', 'cloudformation-template-create-stack.json');
this.serverless.utils.writeFileSync(cfTemplateFilePath,
this.serverless.service.provider.compiledCloudFormationTemplate);
return BbPromise.resolve();
},
};