Skip to content

Commit faa1dc1

Browse files
authored
Clean up auto-setup.sh (#2516)
1 parent ede2035 commit faa1dc1

File tree

4 files changed

+123
-104
lines changed

4 files changed

+123
-104
lines changed

docker/auto-setup.sh

Lines changed: 113 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -4,80 +4,88 @@ set -eux -o pipefail
44

55
# === Auto setup defaults ===
66

7-
DB="${DB:-cassandra}"
8-
SKIP_SCHEMA_SETUP="${SKIP_SCHEMA_SETUP:-false}"
9-
SKIP_DB_CREATE="${SKIP_DB_CREATE:-false}"
7+
: "${DB:=cassandra}"
8+
: "${SKIP_SCHEMA_SETUP:=false}"
9+
: "${SKIP_DB_CREATE:=false}"
1010

1111
# Cassandra
12-
KEYSPACE="${KEYSPACE:-temporal}"
13-
VISIBILITY_KEYSPACE="${VISIBILITY_KEYSPACE:-temporal_visibility}"
14-
15-
CASSANDRA_SEEDS="${CASSANDRA_SEEDS:-}"
16-
CASSANDRA_PORT="${CASSANDRA_PORT:-9042}"
17-
CASSANDRA_USER="${CASSANDRA_USER:-}"
18-
CASSANDRA_PASSWORD="${CASSANDRA_PASSWORD:-}"
19-
CASSANDRA_TLS_ENABLED="${CASSANDRA_TLS_ENABLED:-}"
20-
CASSANDRA_CERT="${CASSANDRA_CERT:-}"
21-
CASSANDRA_CERT_KEY="${CASSANDRA_CERT_KEY:-}"
22-
CASSANDRA_CA="${CASSANDRA_CA:-}"
23-
CASSANDRA_REPLICATION_FACTOR="${CASSANDRA_REPLICATION_FACTOR:-1}"
12+
: "${KEYSPACE:=temporal}"
13+
: "${VISIBILITY_KEYSPACE:=temporal_visibility}"
14+
15+
: "${CASSANDRA_SEEDS:=}"
16+
: "${CASSANDRA_PORT:=9042}"
17+
: "${CASSANDRA_USER:=}"
18+
: "${CASSANDRA_PASSWORD:=}"
19+
: "${CASSANDRA_TLS_ENABLED:=}"
20+
: "${CASSANDRA_CERT:=}"
21+
: "${CASSANDRA_CERT_KEY:=}"
22+
: "${CASSANDRA_CA:=}"
23+
: "${CASSANDRA_REPLICATION_FACTOR:=1}"
2424

2525
# MySQL/PostgreSQL
26-
DBNAME="${DBNAME:-temporal}"
27-
VISIBILITY_DBNAME="${VISIBILITY_DBNAME:-temporal_visibility}"
28-
DB_PORT="${DB_PORT:-3306}"
26+
: "${DBNAME:=temporal}"
27+
: "${VISIBILITY_DBNAME:=temporal_visibility}"
28+
: "${DB_PORT:=3306}"
2929

30-
MYSQL_SEEDS="${MYSQL_SEEDS:-}"
31-
MYSQL_USER="${MYSQL_USER:-}"
32-
MYSQL_PWD="${MYSQL_PWD:-}"
33-
MYSQL_TX_ISOLATION_COMPAT="${MYSQL_TX_ISOLATION_COMPAT:-false}"
30+
: "${MYSQL_SEEDS:=}"
31+
: "${MYSQL_USER:=}"
32+
: "${MYSQL_PWD:=}"
33+
: "${MYSQL_TX_ISOLATION_COMPAT:=false}"
3434

35-
POSTGRES_SEEDS="${POSTGRES_SEEDS:-}"
36-
POSTGRES_USER="${POSTGRES_USER:-}"
37-
POSTGRES_PWD="${POSTGRES_PWD:-}"
35+
: "${POSTGRES_SEEDS:=}"
36+
: "${POSTGRES_USER:=}"
37+
: "${POSTGRES_PWD:=}"
3838

3939
# Elasticsearch
40-
ENABLE_ES="${ENABLE_ES:-false}"
41-
ES_SCHEME="${ES_SCHEME:-http}"
42-
ES_SEEDS="${ES_SEEDS:-}"
43-
ES_PORT="${ES_PORT:-9200}"
44-
ES_USER="${ES_USER:-}"
45-
ES_PWD="${ES_PWD:-}"
46-
ES_VERSION="${ES_VERSION:-v7}"
47-
ES_VIS_INDEX="${ES_VIS_INDEX:-temporal_visibility_v1_dev}"
48-
ES_SCHEMA_SETUP_TIMEOUT_IN_SECONDS="${ES_SCHEMA_SETUP_TIMEOUT_IN_SECONDS:-0}"
40+
: "${ENABLE_ES:=false}"
41+
: "${ES_SCHEME:=http}"
42+
: "${ES_SEEDS:=}"
43+
: "${ES_PORT:=9200}"
44+
: "${ES_USER:=}"
45+
: "${ES_PWD:=}"
46+
: "${ES_VERSION:=v7}"
47+
: "${ES_VIS_INDEX:=temporal_visibility_v1_dev}"
48+
: "${ES_SCHEMA_SETUP_TIMEOUT_IN_SECONDS:=0}"
4949

5050
# Server setup
51-
TEMPORAL_CLI_ADDRESS="${TEMPORAL_CLI_ADDRESS:-}"
51+
: "${TEMPORAL_CLI_ADDRESS:=}"
5252

53-
SKIP_DEFAULT_NAMESPACE_CREATION="${SKIP_DEFAULT_NAMESPACE_CREATION:-false}"
54-
DEFAULT_NAMESPACE="${DEFAULT_NAMESPACE:-default}"
55-
DEFAULT_NAMESPACE_RETENTION=${DEFAULT_NAMESPACE_RETENTION:-1}
53+
: "${SKIP_DEFAULT_NAMESPACE_CREATION:=false}"
54+
: "${DEFAULT_NAMESPACE:=default}"
55+
: "${DEFAULT_NAMESPACE_RETENTION:=1}"
5656

57-
SKIP_ADD_CUSTOM_SEARCH_ATTRIBUTES="${SKIP_ADD_CUSTOM_SEARCH_ATTRIBUTES:-false}"
57+
: "${SKIP_ADD_CUSTOM_SEARCH_ATTRIBUTES:=false}"
58+
59+
# === Helper functions ===
60+
61+
die() {
62+
echo "$*" 1>&2
63+
exit 1
64+
}
5865

5966
# === Main database functions ===
6067

6168
validate_db_env() {
62-
if [ "${DB}" == "mysql" ]; then
63-
if [ -z "${MYSQL_SEEDS}" ]; then
64-
echo "MYSQL_SEEDS env must be set if DB is ${DB}."
65-
exit 1
66-
fi
67-
elif [ "${DB}" == "postgresql" ]; then
68-
if [ -z "${POSTGRES_SEEDS}" ]; then
69-
echo "POSTGRES_SEEDS env must be set if DB is ${DB}."
70-
exit 1
71-
fi
72-
elif [ "${DB}" == "cassandra" ]; then
73-
if [ -z "${CASSANDRA_SEEDS}" ]; then
74-
echo "CASSANDRA_SEEDS env must be set if DB is ${DB}."
75-
exit 1
76-
fi
77-
else
78-
echo "Unsupported DB type: ${DB}."
79-
exit 1
80-
fi
69+
case ${DB} in
70+
mysql)
71+
if [[ -z ${MYSQL_SEEDS} ]]; then
72+
die "MYSQL_SEEDS env must be set if DB is ${DB}."
73+
fi
74+
;;
75+
postgresql)
76+
if [[ -z ${POSTGRES_SEEDS} ]]; then
77+
die "POSTGRES_SEEDS env must be set if DB is ${DB}."
78+
fi
79+
;;
80+
cassandra)
81+
if [[ -z ${CASSANDRA_SEEDS} ]]; then
82+
die "CASSANDRA_SEEDS env must be set if DB is ${DB}."
83+
fi
84+
;;
85+
*)
86+
die "Unsupported DB type: ${DB}."
87+
;;
88+
esac
8189
}
8290

8391
wait_for_cassandra() {
@@ -117,16 +125,20 @@ wait_for_postgres() {
117125
}
118126

119127
wait_for_db() {
120-
if [ "${DB}" == "mysql" ]; then
121-
wait_for_mysql
122-
elif [ "${DB}" == "postgresql" ]; then
123-
wait_for_postgres
124-
elif [ "${DB}" == "cassandra" ]; then
125-
wait_for_cassandra
126-
else
127-
echo "Unsupported DB type: ${DB}."
128-
exit 1
129-
fi
128+
case ${DB} in
129+
mysql)
130+
wait_for_mysql
131+
;;
132+
postgresql)
133+
wait_for_postgres
134+
;;
135+
cassandra)
136+
wait_for_cassandra
137+
;;
138+
*)
139+
die "Unsupported DB type: ${DB}."
140+
;;
141+
esac
130142
}
131143

132144
setup_cassandra_schema() {
@@ -141,14 +153,14 @@ setup_cassandra_schema() {
141153
{ export CASSANDRA_PASSWORD=${CASSANDRA_PASSWORD}; } 2> /dev/null
142154

143155
SCHEMA_DIR=${TEMPORAL_HOME}/schema/cassandra/temporal/versioned
144-
if [ "${SKIP_DB_CREATE}" != "true" ]; then
156+
if [[ ${SKIP_DB_CREATE} != true ]]; then
145157
temporal-cassandra-tool --ep "${CASSANDRA_SEEDS}" create -k "${KEYSPACE}" --rf "${CASSANDRA_REPLICATION_FACTOR}"
146158
fi
147159
temporal-cassandra-tool --ep "${CASSANDRA_SEEDS}" -k "${KEYSPACE}" setup-schema -v 0.0
148160
temporal-cassandra-tool --ep "${CASSANDRA_SEEDS}" -k "${KEYSPACE}" update-schema -d "${SCHEMA_DIR}"
149161

150162
VISIBILITY_SCHEMA_DIR=${TEMPORAL_HOME}/schema/cassandra/visibility/versioned
151-
if [ "${SKIP_DB_CREATE}" != "true" ]; then
163+
if [[ ${SKIP_DB_CREATE} != true ]]; then
152164
temporal-cassandra-tool --ep "${CASSANDRA_SEEDS}" create -k "${VISIBILITY_KEYSPACE}" --rf "${CASSANDRA_REPLICATION_FACTOR}"
153165
fi
154166
temporal-cassandra-tool --ep "${CASSANDRA_SEEDS}" -k "${VISIBILITY_KEYSPACE}" setup-schema -v 0.0
@@ -159,21 +171,21 @@ setup_mysql_schema() {
159171
# TODO (alex): Remove exports
160172
{ export SQL_PASSWORD=${MYSQL_PWD}; } 2> /dev/null
161173

162-
if [ "${MYSQL_TX_ISOLATION_COMPAT}" == "true" ]; then
174+
if [[ ${MYSQL_TX_ISOLATION_COMPAT} == true ]]; then
163175
MYSQL_CONNECT_ATTR=(--connect-attributes "tx_isolation=READ-COMMITTED")
164176
else
165177
MYSQL_CONNECT_ATTR=()
166178
fi
167179

168180
SCHEMA_DIR=${TEMPORAL_HOME}/schema/mysql/v57/temporal/versioned
169-
if [ "${SKIP_DB_CREATE}" != "true" ]; then
181+
if [[ ${SKIP_DB_CREATE} != true ]]; then
170182
temporal-sql-tool --ep "${MYSQL_SEEDS}" -u "${MYSQL_USER}" "${MYSQL_CONNECT_ATTR[@]}" create --db "${DBNAME}"
171183
fi
172184
temporal-sql-tool --ep "${MYSQL_SEEDS}" -u "${MYSQL_USER}" "${MYSQL_CONNECT_ATTR[@]}" --db "${DBNAME}" setup-schema -v 0.0
173185
temporal-sql-tool --ep "${MYSQL_SEEDS}" -u "${MYSQL_USER}" "${MYSQL_CONNECT_ATTR[@]}" --db "${DBNAME}" update-schema -d "${SCHEMA_DIR}"
174186

175187
VISIBILITY_SCHEMA_DIR=${TEMPORAL_HOME}/schema/mysql/v57/visibility/versioned
176-
if [ "${SKIP_DB_CREATE}" != "true" ]; then
188+
if [[ ${SKIP_DB_CREATE} != true ]]; then
177189
temporal-sql-tool --ep "${MYSQL_SEEDS}" -u "${MYSQL_USER}" "${MYSQL_CONNECT_ATTR[@]}" create --db "${VISIBILITY_DBNAME}"
178190
fi
179191
temporal-sql-tool --ep "${MYSQL_SEEDS}" -u "${MYSQL_USER}" "${MYSQL_CONNECT_ATTR[@]}" --db "${VISIBILITY_DBNAME}" setup-schema -v 0.0
@@ -193,33 +205,39 @@ setup_postgres_schema() {
193205
temporal-sql-tool --plugin postgres --ep "${POSTGRES_SEEDS}" -u "${POSTGRES_USER}" -p "${DB_PORT}" --db "${DBNAME}" update-schema -d "${SCHEMA_DIR}"
194206

195207
VISIBILITY_SCHEMA_DIR=${TEMPORAL_HOME}/schema/postgresql/v96/visibility/versioned
196-
if [ "${VISIBILITY_DBNAME}" != "${POSTGRES_USER}" ] && [ "${SKIP_DB_CREATE}" != "true" ]; then
208+
if [[ ${VISIBILITY_DBNAME} != "${POSTGRES_USER}" && ${SKIP_DB_CREATE} != true ]]; then
197209
temporal-sql-tool --plugin postgres --ep "${POSTGRES_SEEDS}" -u "${POSTGRES_USER}" -p "${DB_PORT}" create --db "${VISIBILITY_DBNAME}"
198210
fi
199211
temporal-sql-tool --plugin postgres --ep "${POSTGRES_SEEDS}" -u "${POSTGRES_USER}" -p "${DB_PORT}" --db "${VISIBILITY_DBNAME}" setup-schema -v 0.0
200212
temporal-sql-tool --plugin postgres --ep "${POSTGRES_SEEDS}" -u "${POSTGRES_USER}" -p "${DB_PORT}" --db "${VISIBILITY_DBNAME}" update-schema -d "${VISIBILITY_SCHEMA_DIR}"
201213
}
202214

203215
setup_schema() {
204-
if [ "${DB}" == "mysql" ]; then
205-
echo 'Setup MySQL schema.'
206-
setup_mysql_schema
207-
elif [ "${DB}" == "postgresql" ]; then
208-
echo 'Setup PostgreSQL schema.'
209-
setup_postgres_schema
210-
else
211-
echo 'Setup Cassandra schema.'
212-
setup_cassandra_schema
213-
fi
216+
case ${DB} in
217+
mysql)
218+
echo 'Setup MySQL schema.'
219+
setup_mysql_schema
220+
;;
221+
postgresql)
222+
echo 'Setup PostgreSQL schema.'
223+
setup_postgres_schema
224+
;;
225+
cassandra)
226+
echo 'Setup Cassandra schema.'
227+
setup_cassandra_schema
228+
;;
229+
*)
230+
die "Unsupported DB type: ${DB}."
231+
;;
232+
esac
214233
}
215234

216235
# === Elasticsearch functions ===
217236

218237
validate_es_env() {
219-
if [ "${ENABLE_ES}" == "true" ]; then
220-
if [ -z "${ES_SEEDS}" ]; then
221-
echo "ES_SEEDS env must be set if ENABLE_ES is ${ENABLE_ES}"
222-
exit 1
238+
if [[ ${ENABLE_ES} == true ]]; then
239+
if [[ -z ${ES_SEEDS} ]]; then
240+
die "ES_SEEDS env must be set if ENABLE_ES is ${ENABLE_ES}"
223241
fi
224242
fi
225243
}
@@ -229,10 +247,10 @@ wait_for_es() {
229247

230248
ES_SERVER="${ES_SCHEME}://${ES_SEEDS%%,*}:${ES_PORT}"
231249

232-
until curl --silent --fail --user "${ES_USER}":"${ES_PWD}" "${ES_SERVER}" > /dev/null 2>&1; do
250+
until curl --silent --fail --user "${ES_USER}":"${ES_PWD}" "${ES_SERVER}" >& /dev/null; do
233251
DURATION=${SECONDS}
234252

235-
if [ "${ES_SCHEMA_SETUP_TIMEOUT_IN_SECONDS}" -gt 0 ] && [ ${DURATION} -ge "${ES_SCHEMA_SETUP_TIMEOUT_IN_SECONDS}" ]; then
253+
if [[ ${ES_SCHEMA_SETUP_TIMEOUT_IN_SECONDS} -gt 0 && ${DURATION} -ge "${ES_SCHEMA_SETUP_TIMEOUT_IN_SECONDS}" ]]; then
236254
echo 'WARNING: timed out waiting for Elasticsearch to start up. Skipping index creation.'
237255
return;
238256
fi
@@ -290,30 +308,30 @@ add_custom_search_attributes() {
290308
setup_server(){
291309
echo "Temporal CLI address: ${TEMPORAL_CLI_ADDRESS}."
292310

293-
until tctl cluster health | grep SERVING; do
311+
until tctl cluster health | grep -q SERVING; do
294312
echo "Waiting for Temporal server to start..."
295313
sleep 1
296314
done
297315
echo "Temporal server started."
298316

299-
if [ "${SKIP_DEFAULT_NAMESPACE_CREATION}" != "true" ]; then
317+
if [[ ${SKIP_DEFAULT_NAMESPACE_CREATION} != true ]]; then
300318
register_default_namespace
301319
fi
302320

303-
if [ "${SKIP_ADD_CUSTOM_SEARCH_ATTRIBUTES}" != "true" ]; then
321+
if [[ ${SKIP_ADD_CUSTOM_SEARCH_ATTRIBUTES} != true ]]; then
304322
add_custom_search_attributes
305323
fi
306324
}
307325

308326
# === Main ===
309327

310-
if [ "${SKIP_SCHEMA_SETUP}" != "true" ]; then
328+
if [[ ${SKIP_SCHEMA_SETUP} != true ]]; then
311329
validate_db_env
312330
wait_for_db
313331
setup_schema
314332
fi
315333

316-
if [ "${ENABLE_ES}" == "true" ]; then
334+
if [[ ${ENABLE_ES} == true ]]; then
317335
validate_es_env
318336
wait_for_es
319337
setup_es_index

docker/entrypoint.sh

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
set -eu -o pipefail
44

5-
export BIND_ON_IP="${BIND_ON_IP:-$(hostname -i)}"
5+
: "${BIND_ON_IP:=$(hostname -i)}"
6+
export BIND_ON_IP
67

78
if [[ "${BIND_ON_IP}" =~ ":" ]]; then
89
# ipv6
@@ -15,12 +16,12 @@ fi
1516
dockerize -template /etc/temporal/config/config_template.yaml:/etc/temporal/config/docker.yaml
1617

1718
# Automatically setup Temporal Server (databases, Elasticsearch, default namespace) if "autosetup" is passed as an argument.
18-
for arg in "$@" ; do [[ ${arg} == "autosetup" ]] && /etc/temporal/auto-setup.sh && break ; done
19+
for arg; do [[ ${arg} == autosetup ]] && /etc/temporal/auto-setup.sh && break ; done
1920

2021
# Setup Temporal Server in development mode if "develop" is passed as an argument.
21-
for arg in "$@" ; do [[ ${arg} == "develop" ]] && /etc/temporal/setup-develop.sh && break ; done
22+
for arg; do [[ ${arg} == develop ]] && /etc/temporal/setup-develop.sh && break ; done
2223

2324
# Run bash instead of Temporal Server if "bash" is passed as an argument (convenient to debug docker image).
24-
for arg in "$@" ; do [[ ${arg} == "bash" ]] && bash && exit 0 ; done
25+
for arg; do [[ ${arg} == bash ]] && bash && exit 0 ; done
2526

2627
exec /etc/temporal/start-temporal.sh

docker/setup-develop.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
set -eux -o pipefail
44

5-
TEMPORAL_DBG_NETWORK_DELAY_MS="${TEMPORAL_DBG_NETWORK_DELAY_MS:-}"
5+
: "${TEMPORAL_DBG_NETWORK_DELAY_MS:=}"
66

77
# Adding artificial delay for all network calls.
88
# In order to verify that there is a delay, you can login to the container and run:
@@ -12,6 +12,6 @@ TEMPORAL_DBG_NETWORK_DELAY_MS="${TEMPORAL_DBG_NETWORK_DELAY_MS:-}"
1212
#
1313
# Read more about what's possible with tc here:
1414
# https://www.badunetworks.com/traffic-shaping-with-tc/
15-
if [ -n "${TEMPORAL_DBG_NETWORK_DELAY_MS}" ]; then
15+
if [[ -n ${TEMPORAL_DBG_NETWORK_DELAY_MS} ]]; then
1616
tc qdisc add dev eth0 root netem delay "${TEMPORAL_DBG_NETWORK_DELAY_MS}ms"
1717
fi

docker/start-temporal.sh

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
set -eu -o pipefail
44

5-
SERVICES="${SERVICES:-}"
6-
SERVICE_FLAGS="${SERVICE_FLAGS:-}"
5+
: "${SERVICES:=}"
6+
: "${SERVICE_FLAGS:=}"
77

8-
if [ -z "${SERVICE_FLAGS}" ] && [ -n "${SERVICES}" ]; then
8+
if [[ -z ${SERVICE_FLAGS} && -n ${SERVICES} ]]; then
99
# Convert semicolon (or comma, for backward compatibility) separated string (i.e. "history:matching")
1010
# to valid flag list (i.e. "--service=history --service=matching").
1111
IFS=':,' read -ra SERVICE_FLAGS <<< "${SERVICES}"

0 commit comments

Comments
 (0)