forked from 0k/0k-charms
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
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")
|
|
}
|