Skip to content

Commit 4453d6c

Browse files
authored
Merge pull request #3 from craigtsmith/support-multiple-parameters
Support multiple parameters
2 parents 1ac9055 + 6a88fef commit 4453d6c

File tree

3 files changed

+67
-30
lines changed

3 files changed

+67
-30
lines changed

README.md

+35-7
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
* [Usage](#usage)
1010
* [Parameters](#parameters)
1111
* [Examples](#examples)
12-
* [String values](#string-values)
12+
* [Get single parameter value](#get-single-parameter-value)
13+
* [Get multiple parameter values](#get-multiple-parameter-values)
1314
* [Custom prefix](#custom-prefix)
1415
* [Simple JSON parameter values](#simple-json-parameter-values)
1516
* [Complex JSON values](#complex-json-values)
@@ -36,14 +37,14 @@ Action expects 3 secrets to be set in GitHub's repository:
3637

3738
Parameter name | Type | Required | Default Value | Description
3839
--- | --- | --- | --- | ---
39-
`ssm_parameter` | string | true | | AWS Systems Manager parameter name (path)
40+
`ssm_parameter_list` | string | true | | AWS Systems Manager parameter name (path) or comma separated list of paths
4041
`prefix` | string | false | AWS_SSM_ | Custom environmental variables prefix
4142
`simple_json` | boolean | true | false | Parse parameter values as one-level JSON object and convert keys to environmental variables (see example below).
4243
`jq_params` | string | true | | Custom space-separated [`jq` filters](https://stedolan.github.io/jq/) (see example below).
4344

4445
### Examples
4546

46-
#### String values
47+
#### Get single parameter value
4748

4849
Parse simple string value stored in AWS SSM `my_parameter_name` parameter:
4950
```yaml
@@ -63,11 +64,38 @@ jobs:
6364
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
6465
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
6566
with:
66-
ssm_parameter: 'my_parameter_name'
67+
ssm_parameter_list: 'my_parameter_name'
6768
```
6869
6970
Example above will set environmental variable `AWS_SSM_MY_PARAMETER_NAME` with value from the AWS SSM parameter itself.
7071

72+
#### Get multiple parameter values
73+
74+
Use comma separated list of strings to fetch multiple parameter values at once:
75+
```yaml
76+
name: Parse SSM parameter
77+
78+
on:
79+
push
80+
81+
jobs:
82+
aws-ssm-to-env:
83+
runs-on: ubuntu-latest
84+
steps:
85+
- name: aws-ssm-to-env
86+
uses: bomb-on/aws-ssm-to-env@master
87+
env:
88+
AWS_REGION: ${{ secrets.AWS_REGION }}
89+
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
90+
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
91+
with:
92+
ssm_parameter_list: |
93+
my_first_parameter,
94+
my_second_parameter
95+
```
96+
97+
Example above will set environmental variable `AWS_SSM_MY_FIRST_PARAMETER` and `AWS_SSM_MY_SECOND_PARAMETER` with corresponding values from AWS SSM.
98+
7199
#### Custom prefix
72100

73101
Parse simple string value stored in AWS SSM `my_parameter_name` parameter and export environmental variable with a
@@ -89,7 +117,7 @@ jobs:
89117
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
90118
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
91119
with:
92-
ssm_parameter: 'my_parameter_name'
120+
ssm_parameter_list: 'my_parameter_name'
93121
prefix: FOO_
94122
```
95123

@@ -115,7 +143,7 @@ jobs:
115143
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
116144
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
117145
with:
118-
ssm_parameter: 'my_json_parameter'
146+
ssm_parameter_list: 'my_json_parameter'
119147
simple_json: true
120148
```
121149

@@ -149,7 +177,7 @@ jobs:
149177
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
150178
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
151179
with:
152-
ssm_parameter: 'my_json_parameter'
180+
ssm_parameter_list: 'my_json_parameter'
153181
jq_filter: '.db[]|select(.default).host .db[]|select(.default).port'
154182
prefix: DB_
155183
```

action.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ name: 'Parse AWS SSM Parameter values'
22
description: 'Parse AWS Systems Manager parameters to environment variables'
33
author: 'bomb-on'
44
inputs:
5-
ssm_parameter:
6-
description: 'AWS Systems Manager parameter name (path).'
5+
ssm_parameter_list:
6+
description: 'AWS Systems Manager parameter name (path) list.'
77
required: true
88
prefix:
99
description: 'Custom environmental variables prefix.'

entrypoint.sh

+30-21
Original file line numberDiff line numberDiff line change
@@ -7,38 +7,47 @@ if [[ -z "$AWS_REGION" ]] || [[ -z "$AWS_ACCESS_KEY_ID" ]] || [[ -z "$AWS_SECRET
77
exit 1
88
fi
99

10-
if [[ -z "$INPUT_SSM_PARAMETER" ]]; then
11-
echo "Set SSM parameter name (parameter_name) value."
10+
if [[ -z "$INPUT_SSM_PARAMETER_LIST" ]]; then
11+
echo "Set SSM parameter name list (parameter_name_list) value(s)."
1212
exit 1
1313
fi
1414

1515
region="$AWS_REGION"
16-
parameter_name="$INPUT_SSM_PARAMETER"
16+
parameter_name_list="$INPUT_SSM_PARAMETER_LIST"
1717
prefix="${INPUT_PREFIX:-AWS_SSM_}"
1818
jq_filter="$INPUT_JQ_FILTER"
1919
simple_json="$INPUT_SIMPLE_JSON"
20-
ssm_param=$(aws --region "$region" ssm get-parameter --name "$parameter_name")
2120

2221
format_var_name () {
2322
echo "$1" | awk -v prefix="$prefix" -F. '{print prefix $NF}' | tr "[:lower:]" "[:upper:]"
2423
}
2524

26-
if [ -n "$jq_filter" ] || [ -n "$simple_json" ]; then
27-
ssm_param_value=$(echo "$ssm_param" | jq '.Parameter.Value | fromjson')
28-
if [ -n "$simple_json" ] && [ "$simple_json" == "true" ]; then
29-
for p in $(echo "$ssm_param_value" | jq -r --arg v "$prefix" 'to_entries|map("\(.key)=\(.value|tostring)")|.[]' ); do
30-
IFS='=' read -r var_name var_value <<< "$p"
31-
echo ::set-env name="$(format_var_name "$var_name")"::"$var_value"
32-
done
25+
get_ssm_param() {
26+
parameter_name="$1"
27+
ssm_param=$(aws --region "$region" ssm get-parameter --name "$parameter_name")
28+
if [ -n "$jq_filter" ] || [ -n "$simple_json" ]; then
29+
ssm_param_value=$(echo "$ssm_param" | jq '.Parameter.Value | fromjson')
30+
if [ -n "$simple_json" ] && [ "$simple_json" == "true" ]; then
31+
for p in $(echo "$ssm_param_value" | jq -r --arg v "$prefix" 'to_entries|map("\(.key)=\(.value|tostring)")|.[]' ); do
32+
IFS='=' read -r var_name var_value <<< "$p"
33+
echo "$(format_var_name "$var_name")=$var_value" >> $GITHUB_ENV
34+
done
35+
else
36+
IFS=' ' read -r -a params <<< "$jq_filter"
37+
for var_name in "${params[@]}"; do
38+
var_value=$(echo "$ssm_param_value" | jq -r -c "$var_name")
39+
echo "$(format_var_name "$var_name")=$var_value" >> $GITHUB_ENV
40+
done
41+
fi
3342
else
34-
IFS=' ' read -r -a params <<< "$jq_filter"
35-
for var_name in "${params[@]}"; do
36-
var_value=$(echo "$ssm_param_value" | jq -r -c "$var_name")
37-
echo ::set-env name="$(format_var_name "$var_name")"::"$var_value"
38-
done
43+
var_name=$(echo "$ssm_param" | jq -r '.Parameter.Name' | awk -F/ '{print $NF}')
44+
var_value=$(echo "$ssm_param" | jq -r '.Parameter.Value')
45+
echo "$(format_var_name "$var_name")=$var_value" >> $GITHUB_ENV
3946
fi
40-
else
41-
var_name=$(echo "$ssm_param" | jq -r '.Parameter.Name' | awk -F/ '{print $NF}')
42-
var_value=$(echo "$ssm_param" | jq -r '.Parameter.Value')
43-
echo ::set-env name="$(format_var_name "$var_name")"::"$var_value"
44-
fi
47+
}
48+
49+
for parameter in $(echo $parameter_name_list | sed "s/,/ /g"); do
50+
get_ssm_param "$parameter"
51+
done
52+
53+

0 commit comments

Comments
 (0)