Skip to content

Commit 44f868a

Browse files
authored
Store user settings (#1)
* Store user settings in metrics * Avoid printing user settings values * Replace variables in config file * Add metrics config to volumes * Add import config to chain * Keep static configs
1 parent a143430 commit 44f868a

File tree

9 files changed

+86
-67
lines changed

9 files changed

+86
-67
lines changed

docker-compose.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,11 @@ services:
3939
PUSHGATEWAY_URL: "https://keyperingest.metrics.shutter.network/api/v1/write"
4040
PUSHGATEWAY_USERNAME: ""
4141
PUSHGATEWAY_PASSWORD: ""
42+
volumes:
43+
- metrics-config:/config
4244

4345
volumes:
4446
db_data: {}
4547
chain: {}
4648
keyper-config: {}
49+
metrics-config: {}

metrics/Dockerfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,14 @@ FROM victoriametrics/vmagent:v1.101.0
99
ARG NETWORK
1010

1111
ENV ASSETS_DIR=/assets \
12+
TEMPLATE_CONFIG_FILE=/config/${NETWORK}/vmagent_template.yml \
1213
CONFIG_FILE=/config/${NETWORK}/vmagent.yml \
1314
USER_SETTINGS_FILE=/config/user/settings.env
1415

1516
COPY --from=assets ${ASSETS_DIR}/ ${ASSETS_DIR}/
1617
COPY config/ /config/
1718
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
1819

20+
RUN mkdir -p $(dirname ${USER_SETTINGS_FILE})
21+
1922
ENTRYPOINT [ "entrypoint.sh" ]
File renamed without changes.

metrics/entrypoint.sh

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,40 @@
11
#!/bin/sh
22

33
update_user_settings() {
4-
key=$1
5-
value=$(eval echo \$$key)
4+
5+
keys="KEYPER_NAME PUSHGATEWAY_URL PUSHGATEWAY_USERNAME PUSHGATEWAY_PASSWORD"
66

77
if [ ! -f "$USER_SETTINGS_FILE" ]; then
88
touch "$USER_SETTINGS_FILE"
99
fi
1010

11+
for key in $keys; do
12+
update_user_setting "$key" "$(eval echo \$"$key")"
13+
done
14+
}
15+
16+
update_user_setting() {
17+
key=$1
18+
value=$(eval echo \$"$key")
19+
1120
if [ -z "$value" ]; then
1221
echo "[INFO | metrics] Skipped updating $key in user settings file (empty value)"
1322
return 1
1423
fi
1524

1625
if grep -q "^$key=" "$USER_SETTINGS_FILE"; then
1726
# Update the existing key
18-
sed -i "s/^$key=.*/$key=$value/" "$USER_SETTINGS_FILE"
19-
echo "[INFO | metrics] Updated $key to $value in $USER_SETTINGS_FILE"
27+
sed -i "s|^$key=.*|$key=$value|" "$USER_SETTINGS_FILE"
28+
echo "[INFO | metrics] Updated $key in $USER_SETTINGS_FILE"
2029
else
2130
# Add the new key
2231
echo "$key=$value" >>"$USER_SETTINGS_FILE"
23-
echo "[INFO | metrics] Added $key=$value to $USER_SETTINGS_FILE"
32+
echo "[INFO | metrics] Added $key to $USER_SETTINGS_FILE"
2433
fi
2534
}
2635

2736
source_envs() {
28-
set -a
37+
set -a # Export all variables
2938

3039
# shellcheck disable=SC1091
3140
if [ -f "${ASSETS_DIR}/variables.env" ]; then
@@ -46,14 +55,12 @@ source_envs() {
4655
set +a
4756
}
4857

49-
# Create an empty JSON file in path USER_SETTINGS_FILE if it does not exist
50-
if [ ! -f "${USER_SETTINGS_FILE}" ]; then
51-
echo "{}" >"${USER_SETTINGS_FILE}"
52-
fi
58+
replace_envs_in_yaml() {
59+
echo "[INFO | metrics] Replacing environment variables in the configuration file"
60+
sed "s|%{KEYPER_NAME}|$KEYPER_NAME|g; s|%{_ASSETS_VERSION}|$_ASSETS_VERSION|g" "$TEMPLATE_CONFIG_FILE" >"$CONFIG_FILE"
61+
}
5362

54-
update_user_settings "PUSHGATEWAY_URL" "${PUSHGATEWAY_URL}"
55-
update_user_settings "PUSHGATEWAY_USERNAME" "${PUSHGATEWAY_USERNAME}"
56-
update_user_settings "PUSHGATEWAY_PASSWORD" "${PUSHGATEWAY_PASSWORD}"
63+
update_user_settings
5764

5865
if [ "${SHUTTER_PUSH_METRICS_ENABLED}" = "false" ]; then
5966
echo "[INFO | metrics] Metrics push is disabled"
@@ -62,6 +69,8 @@ fi
6269

6370
source_envs
6471

72+
replace_envs_in_yaml
73+
6574
exec /vmagent-prod \
6675
-promscrape.config="${CONFIG_FILE}" \
6776
-remoteWrite.url="${PUSHGATEWAY_URL}" \

setup-wizard.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ fields:
1818
type: environment
1919
name: SHUTTER_GNOSIS_NODE_PRIVATEKEY
2020
service: shutter
21-
required: true
21+
required: false
2222
secret: true
2323

2424
- id: enable_push_metrics

shutter/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ ENV SHUTTER_GNOSIS_SM_BLOCKTIME=10 \
2929
CHAIN_LISTEN_PORT=26657 \
3030
SHUTTER_BIN=/rolling-shutter \
3131
SHUTTER_ENV_FILE=/shutter.env \
32-
SHUTTER_GENERATED_CONFIG_FILE=${KEYPER_CONFIG_DIR}/generated.toml \
32+
KEYPER_GENERATED_CONFIG_FILE=${KEYPER_CONFIG_DIR}/generated.toml \
3333
KEYPER_CONFIG_FILE=${KEYPER_CONFIG_DIR}/keyper.toml \
3434
SHUTTER_CHAIN_DIR=${SHUTTER_CHAIN_DIR} \
3535
SHUTTER_CHAIN_CONFIG_FILE=${SHUTTER_CHAIN_DIR}/config/config.toml \

shutter/scripts/configure.sh

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
11
#!/bin/bash
22

3+
check_assets() {
4+
# shellcheck disable=SC1091
5+
if [[ ! -f ${ASSETS_DIR}/variables.env ]]; then
6+
echo "[ERROR | configure] Missing variables file (${ASSETS_DIR}/variables)"
7+
exit 1
8+
fi
9+
}
10+
311
generate_keyper_config() {
412

513
# Check if the configuration file already exists
6-
if [ -f "$SHUTTER_GENERATED_CONFIG_FILE" ]; then
14+
if [ -f "$KEYPER_GENERATED_CONFIG_FILE" ]; then
715
echo "[INFO | configure] Configuration file already exists. Skipping generation..."
816
return
917
fi
1018

1119
echo "[INFO | configure] Generating configuration files..."
1220

13-
$SHUTTER_BIN gnosiskeyper generate-config --output "$SHUTTER_GENERATED_CONFIG_FILE"
21+
$SHUTTER_BIN gnosiskeyper generate-config --output "$KEYPER_GENERATED_CONFIG_FILE"
1422
}
1523

1624
init_keyper_db() {
@@ -23,7 +31,7 @@ init_keyper_db() {
2331

2432
echo "[INFO | configure] Initializing keyper database..."
2533

26-
$SHUTTER_BIN gnosiskeyper initdb --config "$SHUTTER_GENERATED_CONFIG_FILE"
34+
$SHUTTER_BIN gnosiskeyper initdb --config "$KEYPER_GENERATED_CONFIG_FILE"
2735
}
2836

2937
init_chain() {
@@ -61,6 +69,8 @@ trigger_keyper_start() {
6169
supervisorctl start keyper
6270
}
6371

72+
check_assets
73+
6474
generate_keyper_config
6575

6676
init_keyper_db
Lines changed: 36 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,63 @@
11
#!/bin/bash
22

3-
set -eu
4-
5-
# shellcheck disable=SC1091
6-
if [[ -f ${ASSETS_DIR}/variables.env ]]; then
7-
. "${ASSETS_DIR}/variables.env"
8-
else
9-
echo "[ERROR | configure] Missing variables file (${ASSETS_DIR}/variables)"
10-
exit 1
11-
fi
12-
13-
if [ ! -f "$SHUTTER_GENERATED_CONFIG_FILE" ]; then
14-
echo "[ERROR | configure] Missing generated configuration file (${SHUTTER_GENERATED_CONFIG_FILE})"
15-
exit 1
16-
fi
17-
18-
echo "[INFO | configure] Generating keyper configuration file..."
19-
20-
# Copy if keyper configuration file does not exist
21-
if [ ! -f "$KEYPER_CONFIG_FILE" ]; then
22-
cp "$SHUTTER_GENERATED_CONFIG_FILE" "$KEYPER_CONFIG_FILE"
23-
fi
24-
25-
echo "[INFO | configure] Calculating keyper configuration values..."
26-
273
# To use staker scripts
284
# shellcheck disable=SC1091
295
. /etc/profile
6+
# shellcheck disable=SC1091
7+
. "${ASSETS_DIR}/variables.env"
8+
9+
echo "[INFO | configure] Calculating keyper configuration values..."
3010

3111
SUPPORTED_NETWORKS="gnosis"
3212

3313
SHUTTER_P2P_ADVERTISEADDRESSES="/ip4/${_DAPPNODE_GLOBAL_PUBLIC_IP}/tcp/23003"
3414
SHUTTER_BEACONAPIURL=$(get_beacon_api_url_from_global_env "$NETWORK" "$SUPPORTED_NETWORKS")
3515
SHUTTER_GNOSIS_NODE_CONTRACTSURL=http://execution.gnosis.dncore.dappnode:8545
3616
SHUTTER_GNOSIS_NODE_ETHEREUMURL=$(get_execution_ws_url_from_global_env "$NETWORK" "$SUPPORTED_NETWORKS")
17+
VALIDATOR_PUBLIC_KEY=$(cat "${SHUTTER_CHAIN_DIR}/config/priv_validator_pubkey.hex")
3718

38-
# TODO: Update script with upstream version
19+
# Check if the keyper configuration file already exists
20+
if [ -f "$KEYPER_CONFIG_FILE" ]; then
21+
echo "[INFO | configure] Keyper configuration file already exists"
22+
else
23+
echo "[INFO | configure] Generating configuration files..."
24+
25+
if [ ! -f "$KEYPER_GENERATED_CONFIG_FILE" ]; then
26+
echo "[ERROR | configure] Missing generated configuration file (${KEYPER_GENERATED_CONFIG_FILE})"
27+
exit 1
28+
fi
29+
30+
cp "$KEYPER_GENERATED_CONFIG_FILE" "$KEYPER_CONFIG_FILE"
31+
32+
echo "[INFO | configure] Keyper configuration file created"
33+
echo "[INFO | configure] Setting private key in the configuration file..."
34+
sed -i "/^PrivateKey/c\PrivateKey = \"${SHUTTER_GNOSIS_NODE_PRIVATEKEY}\"" "$KEYPER_CONFIG_FILE"
35+
fi
3936

40-
# Values set from assets container and compose env varibles
37+
# Assets values
4138
sed -i "/^InstanceID/c\InstanceID = ${_ASSETS_INSTANCE_ID}" "$KEYPER_CONFIG_FILE"
42-
sed -i "/^DatabaseURL/c\DatabaseURL = \"${SHUTTER_DATABASEURL}\"" "$KEYPER_CONFIG_FILE"
43-
sed -i "/^BeaconAPIURL/c\BeaconAPIURL = \"${SHUTTER_BEACONAPIURL}\"" "$KEYPER_CONFIG_FILE"
4439
sed -i "/^MaxNumKeysPerMessage/c\MaxNumKeysPerMessage = ${_ASSETS_MAX_NUM_KEYS_PER_MESSAGE}" "$KEYPER_CONFIG_FILE"
4540
sed -i "/^EncryptedGasLimit/c\EncryptedGasLimit = ${_ASSETS_ENCRYPTED_GAS_LIMIT}" "$KEYPER_CONFIG_FILE"
46-
sed -i "/^MaxTxPointerAge/c\MaxTxPointerAge = ${SHUTTER_GNOSIS_MAXTXPOINTERAGE}" "$KEYPER_CONFIG_FILE"
4741
sed -i "/^GenesisSlotTimestamp/c\GenesisSlotTimestamp = ${_ASSETS_GENESIS_SLOT_TIMESTAMP}" "$KEYPER_CONFIG_FILE"
4842
sed -i "/^SyncStartBlockNumber/c\SyncStartBlockNumber = ${_ASSETS_SYNC_START_BLOCK_NUMBER}" "$KEYPER_CONFIG_FILE"
49-
sed -i "/^PrivateKey/c\PrivateKey = \"${SHUTTER_GNOSIS_NODE_PRIVATEKEY}\"" "$KEYPER_CONFIG_FILE"
50-
sed -i "/^ContractsURL/c\ContractsURL = \"${SHUTTER_GNOSIS_NODE_CONTRACTSURL}\"" "$KEYPER_CONFIG_FILE"
51-
sed -i "/^DeploymentDir/c\DeploymentDir = \"\" # unused" "$KEYPER_CONFIG_FILE"
52-
sed -i "/^EthereumURL/c\EthereumURL = \"${SHUTTER_GNOSIS_NODE_ETHEREUMURL}\"" "$KEYPER_CONFIG_FILE"
5343
sed -i "/^KeyperSetManager/c\KeyperSetManager = \"${_ASSETS_KEYPER_SET_MANAGER}\"" "$KEYPER_CONFIG_FILE"
5444
sed -i "/^KeyBroadcastContract/c\KeyBroadcastContract = \"${_ASSETS_KEY_BROADCAST_CONTRACT}\"" "$KEYPER_CONFIG_FILE"
5545
sed -i "/^Sequencer/c\Sequencer = \"${_ASSETS_SEQUENCER}\"" "$KEYPER_CONFIG_FILE"
5646
sed -i "/^ValidatorRegistry/c\ValidatorRegistry = \"${_ASSETS_VALIDATOR_REGISTRY}\"" "$KEYPER_CONFIG_FILE"
5747
sed -i "/^DiscoveryNamespace/c\DiscoveryNamespace = \"${_ASSETS_DISCOVERY_NAME_PREFIX}-${_ASSETS_INSTANCE_ID}\"" "$KEYPER_CONFIG_FILE"
58-
sed -i "/^ShuttermintURL/c\ShuttermintURL = \"${SHUTTER_SHUTTERMINT_SHUTTERMINTURL}\"" "$KEYPER_CONFIG_FILE"
59-
sed -i "/^ValidatorPublicKey/c\ValidatorPublicKey = \"$(cat "${SHUTTER_CHAIN_DIR}/config/priv_validator_pubkey.hex")\"" "$KEYPER_CONFIG_FILE"
60-
sed -i "/^ListenAddresses/c\ListenAddresses = \"${SHUTTER_P2P_LISTENADDRESSES}\"" "$KEYPER_CONFIG_FILE"
61-
sed -i "/^AdvertiseAddresses/c\AdvertiseAddresses = \"${SHUTTER_P2P_ADVERTISEADDRESSES}\"" "$KEYPER_CONFIG_FILE"
6248
sed -i "/^CustomBootstrapAddresses/c\CustomBootstrapAddresses = ${_ASSETS_CUSTOM_BOOTSTRAP_ADDRESSES}" "$KEYPER_CONFIG_FILE"
6349
sed -i "/^DKGPhaseLength/c\DKGPhaseLength = ${_ASSETS_DKG_PHASE_LENGTH}" "$KEYPER_CONFIG_FILE"
6450
sed -i "/^DKGStartBlockDelta/c\DKGStartBlockDelta = ${_ASSETS_DKG_START_BLOCK_DELTA}" "$KEYPER_CONFIG_FILE"
65-
sed -i "/^Enabled/c\Enabled = ${SHUTTER_PUSH_METRICS_ENABLED}" "$KEYPER_CONFIG_FILE"
51+
52+
# Dynamic values (regenerated on each start)
53+
sed -i "/^DatabaseURL/c\DatabaseURL = \"${SHUTTER_DATABASEURL}\"" "$KEYPER_CONFIG_FILE"
54+
sed -i "/^BeaconAPIURL/c\BeaconAPIURL = \"${SHUTTER_BEACONAPIURL}\"" "$KEYPER_CONFIG_FILE"
55+
sed -i "/^ContractsURL/c\ContractsURL = \"${SHUTTER_GNOSIS_NODE_CONTRACTSURL}\"" "$KEYPER_CONFIG_FILE"
56+
sed -i "/^MaxTxPointerAge/c\MaxTxPointerAge = ${SHUTTER_GNOSIS_MAXTXPOINTERAGE}" "$KEYPER_CONFIG_FILE"
57+
sed -i "/^DeploymentDir/c\DeploymentDir = \"\" # unused" "$KEYPER_CONFIG_FILE"
58+
sed -i "/^EthereumURL/c\EthereumURL = \"${SHUTTER_GNOSIS_NODE_ETHEREUMURL}\"" "$KEYPER_CONFIG_FILE"
59+
sed -i "/^ShuttermintURL/c\ShuttermintURL = \"${SHUTTER_SHUTTERMINT_SHUTTERMINTURL}\"" "$KEYPER_CONFIG_FILE"
60+
sed -i "/^ListenAddresses/c\ListenAddresses = \"${SHUTTER_P2P_LISTENADDRESSES}\"" "$KEYPER_CONFIG_FILE"
61+
sed -i "/^AdvertiseAddresses/c\AdvertiseAddresses = \"${SHUTTER_P2P_ADVERTISEADDRESSES}\"" "$KEYPER_CONFIG_FILE"
62+
sed -i "/^ValidatorPublicKey/c\ValidatorPublicKey = \"${VALIDATOR_PUBLIC_KEY}\"" "$KEYPER_CONFIG_FILE"
63+
sed -i "/^Enabled/c\Enabled = true" "$KEYPER_CONFIG_FILE"

shutter/scripts/configure_shuttermint.sh

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
11
#!/bin/bash
22

3-
set -eux
4-
53
# shellcheck disable=SC1091
6-
if [[ -f ${ASSETS_DIR}/variables.env ]]; then
7-
. "${ASSETS_DIR}/variables.env"
8-
else
9-
echo "[ERROR | configure] Missing variables file (${ASSETS_DIR}/variables)"
10-
exit 1
11-
fi
4+
. "${ASSETS_DIR}/variables.env"
5+
6+
ASSETS_GENESIS_FILE="/assets/genesis.json"
7+
CHAIN_GENESIS_FILE="${SHUTTER_CHAIN_DIR}/config/genesis.json"
128

13-
rm "${SHUTTER_CHAIN_DIR}/config/genesis.json"
14-
ln -s /assets/genesis.json "${SHUTTER_CHAIN_DIR}/config/genesis.json"
9+
rm "$CHAIN_GENESIS_FILE"
10+
ln -s "$ASSETS_GENESIS_FILE" "$CHAIN_GENESIS_FILE"
1511

1612
SHUTTERMINT_MONIKER=${KEYPER_NAME:-$(openssl rand -hex 8)}
1713

1814
sed -i "/^seeds =/c\seeds = \"${_ASSETS_SHUTTERMINT_SEED_NODES}\"" "$SHUTTER_CHAIN_CONFIG_FILE"
1915
sed -i "/^moniker =/c\moniker = \"${SHUTTERMINT_MONIKER}\"" "$SHUTTER_CHAIN_CONFIG_FILE"
20-
sed -i "/^genesis_file =/c\genesis_file = \"/assets/genesis.json\"" "$SHUTTER_CHAIN_CONFIG_FILE"
16+
sed -i "/^genesis_file =/c\genesis_file = \"${ASSETS_GENESIS_FILE}\"" "$SHUTTER_CHAIN_CONFIG_FILE"
2117
sed -i "/^external_address =/c\external_address = \"${_DAPPNODE_GLOBAL_PUBLIC_IP}:${CHAIN_PORT}\"" "$SHUTTER_CHAIN_CONFIG_FILE"
2218
sed -i "/^addr_book_strict =/c\addr_book_strict = true" "$SHUTTER_CHAIN_CONFIG_FILE"
2319
sed -i "/^pex =/c\pex = true" "$SHUTTER_CHAIN_CONFIG_FILE"

0 commit comments

Comments
 (0)