Skip to content

Commit fe1b6ba

Browse files
authored
Merge pull request #2 from bugout-dev/deployment-scripts
Parameter extractor
2 parents e7d26d1 + 0f82c62 commit fe1b6ba

2 files changed

Lines changed: 161 additions & 0 deletions

File tree

scripts/nodes-connections.bash

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
#!/usr/bin/env bash
2+
#
3+
# Update nodes connection address environment variables
4+
# from AWS Route53 internal hosted zone
5+
6+
# Colors
7+
C_RESET='\033[0m'
8+
C_RED='\033[1;31m'
9+
C_GREEN='\033[1;32m'
10+
C_YELLOW='\033[1;33m'
11+
12+
# Logs
13+
PREFIX_INFO="${C_GREEN}[INFO]${C_RESET} [$(date +%d-%m\ %T)]"
14+
PREFIX_WARN="${C_YELLOW}[WARN]${C_RESET} [$(date +%d-%m\ %T)]"
15+
PREFIX_CRIT="${C_RED}[CRIT]${C_RESET} [$(date +%d-%m\ %T)]"
16+
17+
# Print help message
18+
function usage {
19+
echo "Usage: $0 [-h] -p PRODUCT -f FILEPATH"
20+
echo
21+
echo "CLI to update nodes connection address environment
22+
variables from AWS Route53 internal hosted zone"
23+
echo
24+
echo "Optional arguments:"
25+
echo " -h Show this help message and exit"
26+
echo " -f File path where environment variables update at"
27+
}
28+
29+
file_flag=""
30+
verbose_flag="false"
31+
32+
while getopts 'f:v' flag; do
33+
case "${flag}" in
34+
f) file_flag="${OPTARG}" ;;
35+
h) usage
36+
exit 1 ;;
37+
v) verbose_flag="true" ;;
38+
*) usage
39+
exit 1 ;;
40+
esac
41+
done
42+
43+
# Log messages
44+
function verbose {
45+
if [ "${verbose_flag}" == "true" ]; then
46+
echo -e "$1"
47+
fi
48+
}
49+
50+
# File flag should be specified
51+
if [ -z "${file_flag}" ]; then
52+
verbose "${PREFIX_CRIT} Please specify file path"
53+
usage
54+
exit 1
55+
fi
56+
57+
if [ ! -f "${file_flag}" ]; then
58+
verbose "${PREFIX_CRIT} Provided file does not exist"
59+
usage
60+
exit 1
61+
fi
62+
63+
verbose "${PREFIX_INFO} Source environment variables"
64+
. ${file_flag}
65+
66+
verbose "${PREFIX_INFO} Retrieving Ethereum node address and port"
67+
RETRIEVED_NODE_ETHEREUM_IPC_ADDR=$(aws route53 list-resource-record-sets --hosted-zone-id "${MOONSTREAM_INTERNAL_HOSTED_ZONE_ID}" --query "ResourceRecordSets[?Name == '${MOONSTREAM_ETHEREUM_WEB3_PROVIDER_URI}.'].ResourceRecords[].Value" | jq -r .[0])
68+
69+
if [ "$RETRIEVED_NODE_ETHEREUM_IPC_ADDR" == "null" ]; then
70+
verbose "${PREFIX_CRIT} Ethereum node address is null"
71+
exit 1
72+
fi
73+
74+
verbose "${PREFIX_INFO} Updating MOONSTREAM_NODE_ETHEREUM_IPC_ADDR"
75+
# TODO(kompotkot): Modify regexp to work with export prefix
76+
sed -i "s|^MOONSTREAM_NODE_ETHEREUM_IPC_ADDR=.*|MOONSTREAM_NODE_ETHEREUM_IPC_ADDR=\"$RETRIEVED_NODE_ETHEREUM_IPC_ADDR\"|" ${file_flag}
77+

scripts/parameters.bash

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#!/usr/bin/env bash
2+
#
3+
# Collect secrets from AWS SSM Parameter Store and output as environment variable exports.
4+
5+
# Colors
6+
C_RESET='\033[0m'
7+
C_RED='\033[1;31m'
8+
C_GREEN='\033[1;32m'
9+
C_YELLOW='\033[1;33m'
10+
11+
# Logs
12+
PREFIX_INFO="${C_GREEN}[INFO]${C_RESET} [$(date +%d-%m\ %T)]"
13+
PREFIX_WARN="${C_YELLOW}[WARN]${C_RESET} [$(date +%d-%m\ %T)]"
14+
PREFIX_CRIT="${C_RED}[CRIT]${C_RESET} [$(date +%d-%m\ %T)]"
15+
16+
# Print help message
17+
function usage {
18+
echo "Usage: $0 [-h] -p PRODUCT -o OUTPUT"
19+
echo
20+
echo "CLI to collect secrets from AWS SSM Parameter Store
21+
and output as environment variable exports"
22+
echo
23+
echo "Optional arguments:"
24+
echo " -h Show this help message and exit"
25+
echo " -p Product tag (moonstream, spire, brood, drones)"
26+
echo " -o Output file name environment variables export to"
27+
}
28+
29+
# TODO(kompotkot): Flag for export prefix
30+
product_flag=""
31+
output_flag=""
32+
verbose_flag="false"
33+
34+
while getopts 'p:o:v' flag; do
35+
case "${flag}" in
36+
p) product_flag="${OPTARG}" ;;
37+
o) output_flag="${OPTARG}" ;;
38+
h) usage
39+
exit 1 ;;
40+
v) verbose_flag="true" ;;
41+
*) usage
42+
exit 1 ;;
43+
esac
44+
done
45+
46+
# Log messages
47+
function verbose {
48+
if [ "${verbose_flag}" == "true" ]; then
49+
echo -e "$1"
50+
fi
51+
}
52+
53+
# Product flag should be specified
54+
# TODO(kompotkot): Extend script to work with few product at once
55+
if [ -z "${product_flag}" ]; then
56+
verbose "${PREFIX_CRIT} Please specify product tag"
57+
usage
58+
exit 1
59+
fi
60+
61+
verbose "${PREFIX_INFO} Retrieving deployment parameters with tag ${C_GREEN}Product:${product_flag}${C_RESET}"
62+
ENV_PARAMETERS=$(aws ssm describe-parameters \
63+
--parameter-filters Key=tag:Product,Values=${product_flag} \
64+
| jq -r .Parameters[].Name)
65+
if [ -z "${ENV_PARAMETERS}" ]; then
66+
verbose "${PREFIX_CRIT} There no parameters for provided product tag"
67+
exit 1
68+
fi
69+
70+
verbose "${PREFIX_INFO} Retrieving parameters values"
71+
ENV_PARAMETERS_VALUES=$(aws ssm get-parameters \
72+
--names ${ENV_PARAMETERS} \
73+
--query "Parameters[*].{Name:Name,Value:Value}")
74+
ENV_PARAMETERS_VALUES_LENGTH=$(echo ${ENV_PARAMETERS_VALUES} | jq length)
75+
verbose "${PREFIX_INFO} Extracted ${ENV_PARAMETERS_VALUES_LENGTH} parameters"
76+
for i in $(seq 0 $((${ENV_PARAMETERS_VALUES_LENGTH} - 1))); do
77+
param_key=$(echo ${ENV_PARAMETERS_VALUES} | jq -r .[$i].Name)
78+
param_value=$(echo ${ENV_PARAMETERS_VALUES} | jq .[$i].Value)
79+
if [ -z "${output_flag}" ]; then
80+
echo "${param_key}=${param_value}"
81+
else
82+
echo "${param_key}=${param_value}" >> "${output_flag}"
83+
fi
84+
done

0 commit comments

Comments
 (0)