49 lines
1.2 KiB
Bash
Executable file
49 lines
1.2 KiB
Bash
Executable file
<% raw %>
|
|
#!/bin/bash
|
|
|
|
set -e
|
|
|
|
if which mongosh > /dev/null 2>&1; then
|
|
mongo_init_bin="mongosh"
|
|
else
|
|
mongo_init_bin="mongo"
|
|
fi
|
|
|
|
mongo_args=()
|
|
if [[ -n "${MONGO_HOST:-}" ]]; then
|
|
mongo_args=(
|
|
--host "${MONGO_HOST}"
|
|
--port "${MONGO_PORT:-27017}"
|
|
)
|
|
fi
|
|
|
|
"${mongo_init_bin}" "${mongo_args[@]}" <<EOF
|
|
const authDb = db.getSiblingDB("${MONGO_AUTHSOURCE}");
|
|
if (!authDb.auth("${MONGO_INITDB_ROOT_USERNAME}", "${MONGO_INITDB_ROOT_PASSWORD}")) {
|
|
quit(18);
|
|
}
|
|
|
|
const roles = [
|
|
{ db: "admin", role: "clusterMonitor" },
|
|
{ db: "${MONGO_DBNAME}", role: "dbOwner" },
|
|
{ db: "${MONGO_DBNAME}_stat", role: "dbOwner" },
|
|
{ db: "${MONGO_DBNAME}_audit", role: "dbOwner" },
|
|
{ db: "${MONGO_DBNAME}_restore", role: "dbOwner" }
|
|
];
|
|
|
|
function ensureUser(database) {
|
|
const userDb = db.getSiblingDB(database);
|
|
const existing = userDb.getUser("${MONGO_USER}");
|
|
if (existing) {
|
|
userDb.updateUser("${MONGO_USER}", { pwd: "${MONGO_PASS}", roles: roles });
|
|
} else {
|
|
userDb.createUser({ user: "${MONGO_USER}", pwd: "${MONGO_PASS}", roles: roles });
|
|
}
|
|
}
|
|
|
|
ensureUser("${MONGO_AUTHSOURCE}");
|
|
if ("${MONGO_AUTHSOURCE}" !== "${MONGO_DBNAME}") {
|
|
ensureUser("${MONGO_DBNAME}");
|
|
}
|
|
EOF
|
|
<% endraw %>
|