Blob Blame History Raw
#!/bin/bash

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

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"

setup_default_datadir

# Must bring up MongoDB on localhost only until it has an admin password set.
mongod $mongo_common_args --bind_ip 127.0.0.1 &
wait_for_mongo_up
js_command="db.system.users.count({'user':'admin', 'db':'admin'})"
if [ "$(mongo admin --quiet --eval "$js_command")" == "1" ]; then
  echo "=> Admin user is already created. Resetting password ..."
  mongo_reset_admin
else
  mongo_create_admin
fi
if [[ -v CREATE_USER ]]; then
  js_command="db.system.users.count({'user':'${MONGODB_USER}', 'db':'${MONGODB_DATABASE}'})"
  if [ "$(mongo admin --quiet --eval "$js_command")" == "1" ]; then
    echo "=> MONGODB_USER user is already created. Resetting password ..."
    mongo_reset_user
  else
    mongo_create_user
  fi
fi
# Restart the MongoDB daemon to bind on all interfaces
mongod $mongo_common_args --shutdown
wait_for_mongo_down

# Make sure env variables don't propagate to mongod process.
unset MONGODB_USER MONGODB_PASSWORD MONGODB_DATABASE MONGODB_ADMIN_PASSWORD
exec mongod $mongo_common_args --auth