55 lines
1.8 KiB
Bash
Executable file
55 lines
1.8 KiB
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# Run mongod in a StatefulSet-based replica set. See
|
|
# https://github.com/sclorg/mongodb-container/blob/master/examples/petset/README.md
|
|
# for a description of how this is intended to work.
|
|
#
|
|
# Note:
|
|
# - It does not attempt to remove the host from the replica set configuration
|
|
# when it is terminating. That is by design, because, in a StatefulSet, when a
|
|
# pod/container terminates and is restarted by OpenShift, it will always have
|
|
# the same hostname. Removing hosts from the configuration affects replica set
|
|
# elections and can impact the replica set stability.
|
|
|
|
set -o errexit
|
|
set -o nounset
|
|
set -o pipefail
|
|
|
|
source ${CONTAINER_SCRIPTS_PATH}/common.sh
|
|
|
|
function cleanup() {
|
|
echo "=> Shutting down MongoDB server ..."
|
|
pkill -INT mongod || :
|
|
wait_for_mongo_down
|
|
exit 0
|
|
}
|
|
|
|
trap 'cleanup' SIGINT SIGTERM
|
|
|
|
REPLICATION=1 check_env_vars
|
|
|
|
setup_wiredtiger_cache ${CONTAINER_SCRIPTS_PATH}/mongodb.conf.template
|
|
|
|
# If user provides own config file use it and do not generate new one
|
|
if [ ! -s "${MONGODB_CONFIG_PATH}" ]; then
|
|
# Generate config file for MongoDB
|
|
envsubst < "${CONTAINER_SCRIPTS_PATH}/mongodb.conf.template" > "${MONGODB_CONFIG_PATH}"
|
|
fi
|
|
|
|
mongo_common_args="-f ${MONGODB_CONFIG_PATH}"
|
|
|
|
# Attention: setup_keyfile may modify value of mongo_common_args!
|
|
setup_keyfile
|
|
setup_default_datadir
|
|
|
|
${CONTAINER_SCRIPTS_PATH}/init-replset.sh &
|
|
|
|
# TODO: capture exit code of `init-petset-replset.sh` and exit with an error if
|
|
# the initialization failed, so that the container will be restarted and the
|
|
# user can gain more visibility that there is a problem in a way other than just
|
|
# inspecting log messages.
|
|
|
|
# Make sure env variables don't propagate to mongod process.
|
|
unset MONGODB_USER MONGODB_PASSWORD MONGODB_DATABASE MONGODB_ADMIN_PASSWORD
|
|
mongod ${mongo_common_args} --replSet "${MONGODB_REPLICA_NAME}" &
|
|
wait
|