blob: cd9d76e4bf1fc83f522dab3fb0e5d45b2cb60701 [file] [log] [blame]
#!/bin/bash
# Tailored version from here:
# https://github.com/temporalio/docker-builds/blob/main/docker/auto-setup.sh
set -eu -o pipefail
source /env-default.sh
alias temporal-sql-tool=${TEMPORAL_HOME}/temporal-sql-tool
alias temporal=${TEMPORAL_HOME}/temporal
# === Helper functions ===
die() {
echo "$*" 1>&2
exit 1
}
# === Main database functions ===
validate_db_env() {
case ${DB} in
mysql | mysql8)
if [[ -z ${MYSQL_SEEDS} ]]; then
die "MYSQL_SEEDS env must be set if DB is ${DB}."
fi
;;
postgresql | postgres | postgres12)
if [[ -z ${POSTGRES_SEEDS} ]]; then
die "POSTGRES_SEEDS env must be set if DB is ${DB}."
fi
;;
cassandra)
if [[ -z ${CASSANDRA_SEEDS} ]]; then
die "CASSANDRA_SEEDS env must be set if DB is ${DB}."
fi
;;
*)
die "Unsupported DB type: ${DB}."
;;
esac
}
wait_for_postgres() {
until nc -z "${POSTGRES_SEEDS%%,*}" "${DB_PORT}"; do
echo 'Waiting for PostgreSQL to startup.'
sleep 1
done
echo 'PostgreSQL started.'
}
setup_postgres_schema() {
# This export might not be needed but kept the same as original version.
export SQL_PASSWORD=${POSTGRES_PWD}
if [[ ${DB} == "postgres12" ]]; then
POSTGRES_VERSION_DIR=v12
else
POSTGRES_VERSION_DIR=v96
fi
SCHEMA_BASE_DIR=${TEMPORAL_HOME}/schema/postgresql/${POSTGRES_VERSION_DIR}
SCHEMA_DIR=${SCHEMA_BASE_DIR}/temporal/versioned
# Create database only if its name is different from the user name. Otherwise PostgreSQL
# container itself will create database.
if [[ ${DBNAME} != "${POSTGRES_USER}" && ${SKIP_DB_CREATE} != true ]]; then
temporal-sql-tool \
--plugin postgres \
--ep "${POSTGRES_SEEDS}" \
-u "${POSTGRES_USER}" \
-p "${DB_PORT}" \
--db "${DBNAME}" \
--tls="${POSTGRES_TLS_ENABLED}" \
--tls-disable-host-verification="${POSTGRES_TLS_DISABLE_HOST_VERIFICATION}" \
--tls-cert-file "${POSTGRES_TLS_CERT_FILE}" \
--tls-key-file "${POSTGRES_TLS_KEY_FILE}" \
--tls-ca-file "${POSTGRES_TLS_CA_FILE}" \
--tls-server-name "${POSTGRES_TLS_SERVER_NAME}" \
create
fi
temporal-sql-tool \
--plugin postgres \
--ep "${POSTGRES_SEEDS}" \
-u "${POSTGRES_USER}" \
-p "${DB_PORT}" \
--db "${DBNAME}" \
--tls="${POSTGRES_TLS_ENABLED}" \
--tls-disable-host-verification="${POSTGRES_TLS_DISABLE_HOST_VERIFICATION}" \
--tls-cert-file "${POSTGRES_TLS_CERT_FILE}" \
--tls-key-file "${POSTGRES_TLS_KEY_FILE}" \
--tls-ca-file "${POSTGRES_TLS_CA_FILE}" \
--tls-server-name "${POSTGRES_TLS_SERVER_NAME}" \
setup-schema -v 0.0
temporal-sql-tool \
--plugin postgres \
--ep "${POSTGRES_SEEDS}" \
-u "${POSTGRES_USER}" \
-p "${DB_PORT}" \
--db "${DBNAME}" \
--tls="${POSTGRES_TLS_ENABLED}" \
--tls-disable-host-verification="${POSTGRES_TLS_DISABLE_HOST_VERIFICATION}" \
--tls-cert-file "${POSTGRES_TLS_CERT_FILE}" \
--tls-key-file "${POSTGRES_TLS_KEY_FILE}" \
--tls-ca-file "${POSTGRES_TLS_CA_FILE}" \
--tls-server-name "${POSTGRES_TLS_SERVER_NAME}" \
update-schema -d "${SCHEMA_DIR}"
VISIBILITY_SCHEMA_DIR=${SCHEMA_BASE_DIR}/visibility/versioned
if [[ ${VISIBILITY_DBNAME} != "${POSTGRES_USER}" && ${SKIP_DB_CREATE} != true ]]; then
temporal-sql-tool \
--plugin postgres \
--ep "${POSTGRES_SEEDS}" \
-u "${POSTGRES_USER}" \
-p "${DB_PORT}" \
--db "${VISIBILITY_DBNAME}" \
--tls="${POSTGRES_TLS_ENABLED}" \
--tls-disable-host-verification="${POSTGRES_TLS_DISABLE_HOST_VERIFICATION}" \
--tls-cert-file "${POSTGRES_TLS_CERT_FILE}" \
--tls-key-file "${POSTGRES_TLS_KEY_FILE}" \
--tls-ca-file "${POSTGRES_TLS_CA_FILE}" \
--tls-server-name "${POSTGRES_TLS_SERVER_NAME}" \
create
fi
temporal-sql-tool \
--plugin postgres \
--ep "${POSTGRES_SEEDS}" \
-u "${POSTGRES_USER}" \
-p "${DB_PORT}" \
--db "${VISIBILITY_DBNAME}" \
--tls="${POSTGRES_TLS_ENABLED}" \
--tls-disable-host-verification="${POSTGRES_TLS_DISABLE_HOST_VERIFICATION}" \
--tls-cert-file "${POSTGRES_TLS_CERT_FILE}" \
--tls-key-file "${POSTGRES_TLS_KEY_FILE}" \
--tls-ca-file "${POSTGRES_TLS_CA_FILE}" \
--tls-server-name "${POSTGRES_TLS_SERVER_NAME}" \
setup-schema -v 0.0
temporal-sql-tool \
--plugin postgres \
--ep "${POSTGRES_SEEDS}" \
-u "${POSTGRES_USER}" \
-p "${DB_PORT}" \
--db "${VISIBILITY_DBNAME}" \
--tls="${POSTGRES_TLS_ENABLED}" \
--tls-disable-host-verification="${POSTGRES_TLS_DISABLE_HOST_VERIFICATION}" \
--tls-cert-file "${POSTGRES_TLS_CERT_FILE}" \
--tls-key-file "${POSTGRES_TLS_KEY_FILE}" \
--tls-ca-file "${POSTGRES_TLS_CA_FILE}" \
--tls-server-name "${POSTGRES_TLS_SERVER_NAME}" \
update-schema -d "${VISIBILITY_SCHEMA_DIR}"
}
# === Server setup ===
register_default_namespace() {
echo "Registering default namespace: ${DEFAULT_NAMESPACE}."
if ! temporal operator namespace describe "${DEFAULT_NAMESPACE}"; then
echo "Default namespace ${DEFAULT_NAMESPACE} not found. Creating..."
temporal operator namespace create --retention "${DEFAULT_NAMESPACE_RETENTION}" \
--description "Default namespace for Temporal Server." "${DEFAULT_NAMESPACE}"
echo "Default namespace ${DEFAULT_NAMESPACE} registration complete."
else
echo "Default namespace ${DEFAULT_NAMESPACE} already registered."
fi
}
add_custom_search_attributes() {
until temporal operator search-attribute list --namespace "${DEFAULT_NAMESPACE}"; do
echo "Waiting for namespace cache to refresh..."
sleep 1
done
echo "Namespace cache refreshed."
echo "Adding Custom*Field search attributes."
temporal operator search-attribute create --namespace "${DEFAULT_NAMESPACE}" \
--name CustomKeywordField --type Keyword \
--name CustomStringField --type Text \
--name CustomTextField --type Text \
--name CustomIntField --type Int \
--name CustomDatetimeField --type Datetime \
--name CustomDoubleField --type Double \
--name CustomBoolField --type Bool
}
setup_server(){
echo "Temporal CLI address: ${TEMPORAL_ADDRESS}."
until temporal operator cluster health | grep -q SERVING; do
echo "Waiting for Temporal server to start..."
sleep 1
done
echo "Temporal server started."
if [[ ${SKIP_DEFAULT_NAMESPACE_CREATION} != true ]]; then
register_default_namespace
fi
if [[ ${SKIP_ADD_CUSTOM_SEARCH_ATTRIBUTES} != true ]]; then
add_custom_search_attributes
fi
}
start_server(){
local flags=
if [[ -n ${SERVICES} ]]; then
SERVICES="${SERVICES//,/ }"
for i in $SERVICES; do flags="${flags} --service=$i"; done
fi
dockerize -template /config_template.yaml:/etc/temporal/config/docker.yaml
exec /etc/temporal/temporal-server --env docker start $flags
}