-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
69 lines (67 loc) · 2.61 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
const core = require('@actions/core');
const exec = require("@actions/exec");
const fs = require('fs');
const { SSMClient, GetParametersByPathCommand } = require("@aws-sdk/client-ssm");
async function run() {
try {
const region = core.getInput('region', { required: true });
const envs = core.getInput('envs', { required: true });
const paths = core.getInput('paths', { required: true });
const taskDefinitionFile = core.getInput('task-definition', { required: true });
const envsParts = envs.split(/\s+/);
for (let i=0; i<envsParts.length; i++){
envsParts[i].trim();
}
const pathParts = paths.split(/\s+/);
const client = new SSMClient({
region: region,
});
let params=[];
for (let j=0; j<pathParts.length; j++){
const path = pathParts[j].trim();
if (path==="")
continue;
let nextToken = null;
while (true){
const input = {
Path: path,
Recursive: true,
ParameterFilters: [],
WithDecryption: true,
MaxResults: Number("10"),
NextToken: nextToken,
};
const command = new GetParametersByPathCommand(input);
const response = await client.send(command);
nextToken = response.NextToken;
for (let i=0; i<response.Parameters.length; i++){
const param=response.Parameters[i];
const parts = param.Name.split("/");
const name = parts[parts.length - 1];
const secret = {
name: name,
valueFrom: param.ARN,
};
for (let k=0; k<envsParts.length; k++){
const env = envsParts[k];
if (env===secret.name){
params.push(secret);
break;
}
}
}
if (!nextToken)
break;
}
}
const taskFile = fs.readFileSync(taskDefinitionFile, 'utf8');
const parsedFile = JSON.parse(taskFile);
parsedFile.containerDefinitions[0].secrets=params;
const renderedTask = JSON.stringify(parsedFile, null, 2);
fs.writeFileSync("output.json", renderedTask);
core.setOutput("task-definition", "output.json");
} catch (error) {
core.setFailed(error.message);
}
}
run();