Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 6 additions & 2 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,16 @@ const setBucketName = require('serverless/lib/plugins/aws/lib/setBucketName')
class ServerlessCloudFormationChangeSets {
constructor (serverless, options) {
this.serverless = serverless
this.provider = this.serverless.getProvider('aws')
this.options = _.merge(
{},
_.omit(options, ['changeset']),
_.get(serverless.service, 'custom.cf-changesets') || {}
_.get(serverless.service, 'custom.cf-changesets') || {},
{
region: this.provider.getRegion(),
stage: this.provider.getStage()
}
)
this.provider = this.serverless.getProvider('aws')

if (options.changeset) {
this.options.requireChangeSet = true
Expand Down
9 changes: 9 additions & 0 deletions index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,15 @@ describe('ServerlessCloudFormationChangeSets', () => {
expect(serverlessChangeSets.serverless).to.equal(serverless)
})

it('should get options even when no options are passed in', () => {
// _.set(serverless, 'service.custom.cf-changesets.changeSetName', 'test')
const serverlessChangeSets = new ServerlessCloudFormationChangeSets(serverless, {})
expect(serverlessChangeSets.options).to.deep.equal({
stage: 'dev',
region: 'us-east-1'
})
})

it('should set options from CLI command', () => {
expect(serverlessChangeSets.options).to.deep.equal({
stage: 'dev',
Expand Down
3 changes: 3 additions & 0 deletions lib/createChangeSet.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ const createChangeSet = (plugin, stackName, changeSetName, changeSetType) => {
stackTags = _.extend(stackTags, plugin.serverless.service.provider.stackTags)
}

// Filter tags that do not have a value.
stackTags = _.pickBy(stackTags)

const params = {
StackName: stackName,
ChangeSetName: changeSetName,
Expand Down
11 changes: 11 additions & 0 deletions lib/createChangeSet.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,17 @@ describe('updateStack', () => {
})
})

it('should exclude stack tags that have no value', () => {
serverlessChangeSets.serverless.service.provider.stackTags = { STAGE: undefined, tag1: null, hasValue: 'bob' }

return createChangeSet.bind(serverlessChangeSets)().then(() => {
expect(createChangeSetStub.args[0][2].Tags)
.to.deep.equal([
{ Key: 'hasValue', Value: 'bob' }
])
})
})

it('should include custom stack tags and CF service role', () => {
serverlessChangeSets.serverless.service.provider.stackTags = { STAGE: 'overridden', tag1: 'value1' }
serverlessChangeSets.serverless.service.provider.cfnRole = 'arn:aws:iam::123456789012:role/myrole'
Expand Down
Loading