Merge pull request #1838 from akhilmhdh/fix/aws-parameter-stoer

fix: get all secrets from aws ssm
This commit is contained in:
Maidul Islam
2024-05-16 12:27:20 -04:00
committed by GitHub
@@ -462,27 +462,39 @@ const syncSecretsAWSParameterStore = async ({
ssm.config.update(config); ssm.config.update(config);
const metadata = z.record(z.any()).parse(integration.metadata || {}); const metadata = z.record(z.any()).parse(integration.metadata || {});
const awsParameterStoreSecretsObj: Record<string, AWS.SSM.Parameter> = {};
const params = { // now fetch all aws parameter store secrets
Path: integration.path as string, let hasNext = true;
Recursive: false, let nextToken: string | undefined;
WithDecryption: true while (hasNext) {
}; const parameters = await ssm
.getParametersByPath({
Path: integration.path as string,
Recursive: false,
WithDecryption: true,
MaxResults: 10,
NextToken: nextToken
})
.promise();
const parameterList = (await ssm.getParametersByPath(params).promise()).Parameters; if (parameters.Parameters) {
parameters.Parameters.forEach((parameter) => {
if (parameter.Name) {
const secKey = parameter.Name.substring((integration.path as string).length);
awsParameterStoreSecretsObj[secKey] = parameter;
}
});
}
hasNext = Boolean(parameters.NextToken);
nextToken = parameters.NextToken;
}
const awsParameterStoreSecretsObj = (parameterList || [])
.filter(({ Name }) => Boolean(Name))
.reduce(
(obj, secret) => ({
...obj,
[(secret.Name as string).substring((integration.path as string).length)]: secret
}),
{} as Record<string, AWS.SSM.Parameter>
);
// Identify secrets to create // Identify secrets to create
await Promise.all( // don't use Promise.all() and promise map here
Object.keys(secrets).map(async (key) => { // it will cause rate limit
for (const key in secrets) {
if (Object.hasOwn(secrets, key)) {
if (!(key in awsParameterStoreSecretsObj)) { if (!(key in awsParameterStoreSecretsObj)) {
// case: secret does not exist in AWS parameter store // case: secret does not exist in AWS parameter store
// -> create secret // -> create secret
@@ -517,13 +529,16 @@ const syncSecretsAWSParameterStore = async ({
}) })
.promise(); .promise();
} }
})
); await new Promise((resolve) => {
setTimeout(resolve, 50);
});
}
}
if (!metadata.shouldDisableDelete) { if (!metadata.shouldDisableDelete) {
// Identify secrets to delete for (const key in awsParameterStoreSecretsObj) {
await Promise.all( if (Object.hasOwn(awsParameterStoreSecretsObj, key)) {
Object.keys(awsParameterStoreSecretsObj).map(async (key) => {
if (!(key in secrets)) { if (!(key in secrets)) {
// case: // case:
// -> delete secret // -> delete secret
@@ -533,8 +548,11 @@ const syncSecretsAWSParameterStore = async ({
}) })
.promise(); .promise();
} }
}) await new Promise((resolve) => {
); setTimeout(resolve, 50);
});
}
}
} }
}; };