# -*- mode: shell-script -*- include pretty export DB_NAME="$SERVICE_NAME" ## general type of database (ie: postgres/mysql...) export DB_DATADIR=/var/lib/mongodb export DATA_DIR=$SERVICE_DATASTORE$DB_DATADIR is_db_locked() { is_volume_used "${DATA_DIR}" } _set_server_db_params() { server_docker_opts+=("-v" "${SERVICE_CONFIGSTORE}/etc/mongod.conf:/etc/mongod.conf" "--add-host" "${SERVICE_NAME}:127.0.0.1") } _set_db_params() { local docker_ip="$1" docker_network="$2" ## XXXvlab: include this in compose-core if [ "${_db_params}" != "$docker_ip:$docker_network" ]; then db_docker_opts+=("--network" "$docker_network") db_cmd_opts+=("--host" "$docker_ip") check_command="db.serverStatus().ok" _db_params="$docker_ip:$docker_network" echo callers: "${FUNCNAME[@]}" >&2 fi } ddb() { dcmd mongo --quiet "$@"; } djson() { local out err if ! out=$(ddb); then err "Mongo call failed" return 128 fi if [ -z "$out" ]; then err "Mongo replied with empty output" return 64 fi if [ "$(e "$out" | jq -r .ok)" != "1" ]; then if ! e "$out" | jq . >/dev/null 2>&1; then err "Mongo didn't output JSON, output follows:" e "$out" | prefix " | " return 32 fi >&2 errmsg=$(e "$out" | jq -r '.errmsg') code_name=$(e "$out" | jq -r '.codeName') err "Mongo failed with error message: $errmsg (code: ${code_name})" e "$out" return 32 fi e "$out" return 0 } mongo:db:ls() { local out if out=$(djson < <(echo "JSON.stringify(db.adminCommand( { listDatabases: 1 } ))")); then e "$out" | jq -r '.databases[] | .name' return 0 else if [ "$(e "$out" | jq -r '.codeName')" == "NotMasterNoSlaveOk" ]; then ## equivalent to having no databases return 0 fi err "Could not query list of databases." return 1 fi } mongo:db:rename() { local src="$1" dst="$2" out if ! out=$(ddb <