You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

76 lines
1.9 KiB

# -*- mode: shell-script -*-
include pretty
export DB_NAME="$SERVICE_NAME" ## general type of database (ie: postgres/mysql...)
export DB_DATADIR=/var/lib/mysql
export DATA_DIR=$SERVICE_DATASTORE$DB_DATADIR
export LOCAL_DB_PASSFILE="$DATA_DIR/my.cnf"
export CLIENT_DB_PASSFILE=/root/.my.cnf
is_db_locked() {
local host_db_volume
if [ "${HOST_DATASTORE+x}" ]; then
host_db_volume="$HOST_DATASTORE/${SERVICE_NAME}"
else
host_db_volume="$DATASTORE/${SERVICE_NAME}"
fi
## ``are_files_locked_in_dir`` doesn't work with mysql here as
## tested
is_volume_used "$host_db_volume"
}
_set_db_params() {
local docker_ip="$1" docker_network="$2"
if [ "${HOST_DATASTORE+x}" ]; then
export HOST_DB_PASSFILE="$HOST_DATASTORE/${SERVICE_NAME}$DB_DATADIR/my.cnf"
else
export HOST_DB_PASSFILE="$CLIENT_DB_PASSFILE"
fi
[ -f "$CLIENT_DB_PASSFILE" ] || touch "$CLIENT_DB_PASSFILE"
server_docker_opts+=()
db_docker_opts+=("--network" "$docker_network")
db_cmd_opts+=("-h" "$docker_ip")
check_command="SELECT 1;"
}
_set_server_db_params() {
server_docker_opts+=()
}
ddb () { dcmd mysql "$@"; }
##
## Entrypoints
##
db_create () {
local dbname="$1"
## Using this instead of pipes is important so that trap works
debug "Create if not exists '$dbname' database..."
ddb < <(echo "CREATE DATABASE IF NOT EXISTS \`$dbname\`")
}
db_grant_rights () {
local dbname="$1" user="$2" password="$3"
## Using this instead of pipes is important so that trap works
debug "Grant all on $dbname to $user"
ddb < <(echo "GRANT ALL ON \`$dbname\`.* TO '$user'@'%' IDENTIFIED BY '$password'")
}
check_access() {
local dbname="$1" user="$2" password="$3"
## Using this instead of pipes is important so that trap works
debug "Check if credentials for user '$user' can access database '$dbname'"
ddb --user="$user" --password="$password" "$dbname" < <(echo "SELECT 1")
}