Skip to content

Commit

Permalink
Bug fix: Allow multiple environment variables to be set to the same S…
Browse files Browse the repository at this point in the history
…SM parameter via name (#326)

* added test for multiple ssm names with same path

* stop inverting userParams object; allow multiple SSM names with same path

* remove Object.entries for node 6 support

* only fetch duplicated SSM params once

* version bump
  • Loading branch information
Gary Holland authored and lmammino committed Apr 26, 2019
1 parent 6232214 commit 7fdee78
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 15 deletions.
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "middy",
"version": "0.25.0",
"version": "0.25.1",
"description": "🛵 The stylish Node.js middleware engine for AWS Lambda",
"main": "./index.js",
"files": [
Expand Down
23 changes: 23 additions & 0 deletions src/middlewares/__tests__/ssm.js
Original file line number Diff line number Diff line change
Expand Up @@ -392,4 +392,27 @@ describe('🔒 SSM Middleware', () => {
done
})
})

test('It should allow multiple option names to point at the same SSM path', (done) => {
testScenario({
ssmMockResponses: [
{
Parameters: [{ Name: '/dev/service_name/key_name', Value: 'key-value' }]
}
],
middlewareOptions: {
names: {
KEY_NAME_1: '/dev/service_name/key_name',
KEY_NAME_2: '/dev/service_name/key_name'
}
},
callbacks: [
() => {
expect(process.env.KEY_NAME_1).toEqual('key-value')
expect(process.env.KEY_NAME_2).toEqual('key-value')
}
],
done
})
})
})
17 changes: 4 additions & 13 deletions src/middlewares/ssm.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@ module.exports = opts => {
},
[]
)

const ssmParamNames = getSSMParamValues(options.names)
if (ssmParamNames.length) {
const ssmPromise = ssmInstance
Expand Down Expand Up @@ -149,7 +148,7 @@ const getTargetObjectToAssign = (handler, options) =>
options.setToContext ? handler.context : process.env

const getSSMParamValues = userParamsMap =>
Object.keys(userParamsMap).map(key => userParamsMap[key])
[...new Set(Object.keys(userParamsMap).map(key => userParamsMap[key]))]

/**
* Lazily load aws-sdk and initialize SSM constructor
Expand Down Expand Up @@ -191,11 +190,9 @@ const handleInvalidParams = ({ Parameters, InvalidParameters }) => {
* @return {Object} Merged object for assignment to target object
*/
const getParamsToAssignByName = (userParamsMap, ssmParams) => {
const ssmToUserParamsMap = invertObject(userParamsMap)

return ssmParams.reduce((aggregator, ssmParam) => {
aggregator[ssmToUserParamsMap[ssmParam.Name]] = ssmParam.Value
return aggregator
return Object.keys(userParamsMap).reduce((acc, key) => {
acc[key] = ssmParams.find(param => param.Name === userParamsMap[key]).Value
return acc
}, {})
}

Expand All @@ -218,9 +215,3 @@ const getParamsToAssignByPath = (
ssmParam.Value
return aggregator
}, {})

const invertObject = obj =>
Object.keys(obj).reduce((aggregator, key) => {
aggregator[obj[key]] = key
return aggregator
}, {})

0 comments on commit 7fdee78

Please sign in to comment.