-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: delete parameters in ssm store
- Loading branch information
1 parent
5d74b1f
commit 7e0d65e
Showing
37 changed files
with
264 additions
and
74 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
nodejs 12.14.0 | ||
nodejs 14.15.4 | ||
direnv 2.28.0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
const get = require('lodash/get'); | ||
const property = require('lodash/property'); | ||
|
||
const makeCleanup = ({ parameterStore }) => async ({ settings }) => { | ||
const configPath = get(settings, 'config.path'); | ||
const secretPath = get(settings, 'secret.path'); | ||
const parameters = await Promise.all([ | ||
parameterStore.getAllParameters({ path: configPath }), | ||
parameterStore.getAllParameters({ path: secretPath }) | ||
]).then(([configs, secrets]) => [ | ||
...Object.values(configs), | ||
...Object.values(secrets) | ||
]); | ||
|
||
const { configParameters = [], secretParameters = [] } = settings; | ||
const unusedParameters = parameters.filter( | ||
({ Name }) => ![...configParameters, ...secretParameters].includes(Name) | ||
); | ||
|
||
return ( | ||
unusedParameters.length && | ||
parameterStore.deleteParameters({ | ||
parameterNames: unusedParameters.map(property('Name')) | ||
}) | ||
); | ||
}; | ||
|
||
module.exports = { makeCleanup }; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
const chalk = require('chalk'); | ||
const { log } = require('../../utils/logger'); | ||
|
||
const makeDeleteParameters = ({ getProviderStore }) => async ({ | ||
parameterNames | ||
}) => { | ||
log(chalk.gray(`Deleting unused parameters...`)); | ||
const providerStore = await getProviderStore(); | ||
|
||
return providerStore | ||
.deleteParameters({ parameterNames }) | ||
.then(() => log(chalk.gray('Parameters deleted'))); | ||
}; | ||
|
||
module.exports = { makeDeleteParameters }; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
const { sortParameters } = require('./sort-parameters'); | ||
|
||
const makeGetAllParameters = ({ getProviderStore }) => async ({ path }) => { | ||
if (!path) { | ||
throw new Error('Missing path!'); | ||
} | ||
|
||
const providerStore = await getProviderStore(); | ||
|
||
const parameters = await providerStore.getAllParametersByPath({ path }); | ||
|
||
return sortParameters(parameters); | ||
}; | ||
|
||
module.exports = { makeGetAllParameters }; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
18 changes: 18 additions & 0 deletions
18
lib/services/parameter-store/stores/ssm/delete-parameters.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
const chunk = require('lodash/chunk'); | ||
const { getSsmClient } = require('./get-ssm-client'); | ||
|
||
const deleteParameters = ({ parameterNames }) => { | ||
const ssm = getSsmClient(); | ||
|
||
const chunks = chunk(parameterNames, 10); | ||
const promises = chunks.map(chunkedParameterNames => | ||
ssm | ||
.deleteParameters({ | ||
Names: chunkedParameterNames | ||
}) | ||
.promise() | ||
); | ||
return Promise.all(promises); | ||
}; | ||
|
||
module.exports = { deleteParameters }; |
23 changes: 23 additions & 0 deletions
23
lib/services/parameter-store/stores/ssm/delete-parameters.test.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
const mockDeleteParameters = jest.fn().mockImplementation(() => ({ | ||
promise: () => Promise.resolve({}) | ||
})); | ||
|
||
const AWS = require('aws-sdk'); | ||
|
||
AWS.SSM.mockImplementation(() => ({ | ||
deleteParameters: mockDeleteParameters | ||
})); | ||
|
||
const { makeSsmStore } = require('./make-ssm-store'); | ||
|
||
describe('deleteParameters', () => { | ||
it('should delete parameters in batches', async () => { | ||
const parameterNames = [...Array(35).keys()].map(key => `/test/${key}`); | ||
|
||
const ssm = makeSsmStore(); | ||
|
||
await ssm.deleteParameters({ parameterNames }); | ||
|
||
expect(mockDeleteParameters.mock.calls.length).toEqual(4); | ||
}); | ||
}); |
30 changes: 30 additions & 0 deletions
30
lib/services/parameter-store/stores/ssm/get-all-parameters-by-path.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
const { getSsmClient } = require('./get-ssm-client'); | ||
|
||
const ssm = getSsmClient(); | ||
|
||
const getParametersByPathRecursively = async params => { | ||
const data = await ssm.getParametersByPath(params).promise(); | ||
|
||
let parameters = data.Parameters || []; | ||
|
||
if (data.NextToken) { | ||
const nextParameters = await getParametersByPathRecursively({ | ||
...params, | ||
NextToken: data.NextToken | ||
}); | ||
parameters = parameters.concat(nextParameters); | ||
} | ||
|
||
return parameters; | ||
}; | ||
|
||
const getAllParametersByPath = async ({ path }) => { | ||
const allParameters = await getParametersByPathRecursively({ | ||
Path: path, | ||
Recursive: true | ||
}); | ||
|
||
return allParameters; | ||
}; | ||
|
||
module.exports = { getAllParametersByPath }; |
66 changes: 66 additions & 0 deletions
66
lib/services/parameter-store/stores/ssm/get-all-parameters-by-path.test.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
const mockGetParametersByPath = jest | ||
.fn() | ||
.mockImplementationOnce(() => ({ | ||
promise: () => | ||
Promise.resolve({ | ||
Parameters: [ | ||
{ | ||
Name: 'TEST/ONE', | ||
Value: '1' | ||
} | ||
], | ||
NextToken: 'first-token' | ||
}) | ||
})) | ||
.mockImplementationOnce(() => ({ | ||
promise: () => | ||
Promise.resolve({ | ||
Parameters: [ | ||
{ | ||
Name: 'TEST/TWO', | ||
Value: '2' | ||
} | ||
], | ||
NextToken: 'second-token' | ||
}) | ||
})) | ||
.mockImplementationOnce(() => ({ | ||
promise: () => | ||
Promise.resolve({ | ||
Parameters: [ | ||
{ | ||
Name: 'TEST/THREE', | ||
Value: '1' | ||
} | ||
] | ||
}) | ||
})); | ||
|
||
const AWS = require('aws-sdk'); | ||
|
||
AWS.SSM.mockImplementation(() => ({ | ||
getParametersByPath: mockGetParametersByPath | ||
})); | ||
|
||
const { makeSsmStore } = require('./make-ssm-store'); | ||
|
||
describe('getAllParameterByPath', () => { | ||
it('should get parameters recursively', async () => { | ||
const ssm = makeSsmStore(); | ||
const parameters = await ssm.getAllParametersByPath({ path: 'TEST' }); | ||
expect(parameters).toEqual([ | ||
{ | ||
Name: 'TEST/ONE', | ||
Value: '1' | ||
}, | ||
{ | ||
Name: 'TEST/TWO', | ||
Value: '2' | ||
}, | ||
{ | ||
Name: 'TEST/THREE', | ||
Value: '1' | ||
} | ||
]); | ||
}); | ||
}); |
2 changes: 1 addition & 1 deletion
2
lib/services/parameter-store/stores/ssm/get-batch-parameters.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.