fix: get all secrets from aws ssm

This commit is contained in:
=
2024-05-16 20:51:07 +05:30
parent 5e678b1ad2
commit 7fce51e8c1
@@ -462,27 +462,38 @@ 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
let hasNext = true;
let nextToken: string | undefined;
while (hasNext) {
const parameters = await ssm
.getParametersByPath({
Path: integration.path as string, Path: integration.path as string,
Recursive: false, Recursive: false,
WithDecryption: true WithDecryption: true,
}; MaxResults: 10,
NextToken: nextToken
})
.promise();
const parameterList = (await ssm.getParametersByPath(params).promise()).Parameters; if (parameters.Parameters) {
parameters.Parameters.forEach((sec) => {
if (sec.Name) {
const secKey = sec.Name.substring((integration.path as string).length);
awsParameterStoreSecretsObj[secKey] = sec;
}
});
}
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 (!(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 +528,10 @@ const syncSecretsAWSParameterStore = async ({
}) })
.promise(); .promise();
} }
}) }
);
if (!metadata.shouldDisableDelete) { if (!metadata.shouldDisableDelete) {
// Identify secrets to delete for (const key in awsParameterStoreSecretsObj) {
await Promise.all(
Object.keys(awsParameterStoreSecretsObj).map(async (key) => {
if (!(key in secrets)) { if (!(key in secrets)) {
// case: // case:
// -> delete secret // -> delete secret
@@ -533,8 +541,7 @@ const syncSecretsAWSParameterStore = async ({
}) })
.promise(); .promise();
} }
}) }
);
} }
}; };