Skip to content

Commit

Permalink
Remove Q package dependency and add support for upcoming stackName pr…
Browse files Browse the repository at this point in the history
…operty
  • Loading branch information
nicka committed Jan 3, 2017
1 parent 904ecaa commit b127cee
Show file tree
Hide file tree
Showing 7 changed files with 4,414 additions and 213 deletions.
1 change: 1 addition & 0 deletions .npmignore
Expand Up @@ -19,3 +19,4 @@ logs
node_modules
pids
results
yarn.lock
57 changes: 29 additions & 28 deletions lib/index.js
Expand Up @@ -4,7 +4,6 @@ const AWS = require('aws-sdk');
const diff = require('json-diff').diffString;
const exec = require('child-process-promise').exec;
const fs = require('fs-promise');
const Q = require('q');

class ServerlessPlugin {
constructor(serverless, options) {
Expand Down Expand Up @@ -57,40 +56,44 @@ class ServerlessPlugin {
}

downloadTemplate() {
const deferred = Q.defer();
let stackName;

const orgTemplate = this.options.orgTemplate;

if (this.serverless.service.provider
&& typeof this.serverless.service.provider.stackName !== 'undefined'
&& this.serverless.service.provider.stackName !== '') {
stackName = this.serverless.service.provider.stackName;
} else {
stackName = `${this.serverless.service.service}-${this.options.stage}`;
}

const params = {
StackName: `${this.serverless.service.service}-${this.options.stage}`,
StackName: stackName,
TemplateStage: 'Processed',
};

this.serverless.cli.log('Downloading currently deployed template');

this.cloudFormation.getTemplate(params, (err, data) => {
if (err) {
deferred.reject(err.message);
} else {
return this.cloudFormation.getTemplate(params).promise()
.then((data) => {
let templateBody = JSON.parse(data.TemplateBody);
templateBody = JSON.stringify(templateBody, null, 2);

fs.writeFile(orgTemplate, templateBody)
.then(() => deferred.resolve())
.catch(fsErr => deferred.reject(fsErr.message));
}
});

return deferred.promise;
return fs.writeFile(orgTemplate, templateBody)
.then(() => Promise.resolve());
})
.catch(err => Promise.reject(err.message));
}

diff() {
const deferred = Q.defer();
const diffTool = this.options.diffTool;
const localTemplate = this.options.localTemplate;
const orgTemplate = this.options.orgTemplate;

this.serverless.cli.log('Running diff against deployed template');

fs.stat(localTemplate)
return fs.stat(localTemplate)
.then(() => {
if (typeof diffTool === 'undefined') {
const orgTemplateJson = JSON.parse(fs.readFileSync(orgTemplate, 'utf8'));
Expand All @@ -103,25 +106,23 @@ class ServerlessPlugin {
console.log(differences);
}

deferred.resolve(differences);
} else {
exec(`${diffTool} ${orgTemplate} ${localTemplate} || true`)
.then((result) => {
const diffData = result.stdout;
console.log(diffData);
deferred.resolve(diffData);
})
.catch(execErr => deferred.reject(execErr.message));
return Promise.resolve(differences);
}

return exec(`${diffTool} ${orgTemplate} ${localTemplate} || true`)
.then((result) => {
const diffData = result.stdout;
console.log(diffData);
return Promise.resolve(diffData);
});
})
.catch((err) => {
if (err.code === 'ENOENT') {
const errorPrefix = `${localTemplate} could not be found:`;
deferred.reject(`${errorPrefix} run "sls deploy --noDeploy" first.`);
return Promise.reject(`${errorPrefix} run "sls deploy --noDeploy" first.`);
}
return Promise.reject(err);
});

return deferred.promise;
}
}

Expand Down

0 comments on commit b127cee

Please sign in to comment.