devstack/lib/database
Bob Ball 3aa8887170 Allow DATABASE_TYPE to be specified in localrc
The use of DATABASE_TYPE without forcing it into ENABLED_SERVICES
seems to be the only way to set up a multi-host devstack installation.

Only deprecate use_database.
Changes functionality of use_database to be equivalent to specifying DATABASE_TYPE
This means that people with localrc's that only specify use_database used to have
a database service brought up, but now will not until they add it to ENABLED_SERVICES.

Change-Id: I4c6e8ee31f298004338ca46bfc330a3e3af288aa
Fixes: bug 1136028
2013-03-01 14:04:13 +00:00

112 lines
3.5 KiB
Plaintext

# lib/database
# Interface for interacting with different database backends
# Dependencies:
# ``ENABLED_SERVICES`` must be defined
# ``DATABASE_BACKENDS`` will contain a list of available database backends
# after sourcing this file.
# This is a wrapper for the specific database backends available.
# Each database must implement four functions:
# recreate_database_$DATABASE_TYPE
# install_database_$DATABASE_TYPE
# configure_database_$DATABASE_TYPE
# database_connection_url_$DATABASE_TYPE
#
# and call register_database $DATABASE_TYPE
# Save trace setting
XTRACE=$(set +o | grep xtrace)
set +o xtrace
# Register a database backend
# $1 The name of the database backend
function register_database {
[ -z "$DATABASE_BACKENDS" ] && DATABASE_BACKENDS=$1 || DATABASE_BACKENDS+=" $1"
}
# Sourcing the database libs sets DATABASE_BACKENDS with the available list
for f in $TOP_DIR/lib/databases/*; do source $f; done
# ``DATABASE_BACKENDS`` now contains a list of the supported databases
# Look in ``ENABLED_SERVICES`` to see if one has been selected
for db in $DATABASE_BACKENDS; do
# Set the type for the rest of the backend to use
if is_service_enabled $db; then
# Set this now for the rest of the database funtions
DATABASE_TYPE=$db
fi
done
# If ``DATABASE_TYPE`` is unset here no database was selected
# This is not an error as multi-node installs will do this on the compute nodes
# Set the database type based on the configuration
function initialize_database_backends {
for backend in $DATABASE_BACKENDS; do
is_service_enabled $backend && DATABASE_TYPE=$backend
done
[ -z "$DATABASE_TYPE" ] && return 1
# For backward-compatibility, read in the MYSQL_HOST/USER variables and use
# them as the default values for the DATABASE_HOST/USER variables.
MYSQL_HOST=${MYSQL_HOST:-localhost}
MYSQL_USER=${MYSQL_USER:-root}
DATABASE_HOST=${DATABASE_HOST:-${MYSQL_HOST}}
DATABASE_USER=${DATABASE_USER:-${MYSQL_USER}}
if [ -n "$MYSQL_PASSWORD" ]; then
DATABASE_PASSWORD=$MYSQL_PASSWORD
else
read_password DATABASE_PASSWORD "ENTER A PASSWORD TO USE FOR THE DATABASE."
fi
# We configure Nova, Horizon, Glance and Keystone to use MySQL as their
# database server. While they share a single server, each has their own
# database and tables.
# By default this script will install and configure MySQL. If you want to
# use an existing server, you can pass in the user/password/host parameters.
# You will need to send the same ``DATABASE_PASSWORD`` to every host if you are doing
# a multi-node DevStack installation.
# NOTE: Don't specify ``/db`` in this string so we can use it for multiple services
BASE_SQL_CONN=${BASE_SQL_CONN:-${DATABASE_TYPE}://$DATABASE_USER:$DATABASE_PASSWORD@$DATABASE_HOST}
return 0
}
# Recreate a given database
# $1 The name of the database
# $2 The character set/encoding of the database
function recreate_database {
local db=$1
local charset=$2
recreate_database_$DATABASE_TYPE $db $charset
}
# Install the database
function install_database {
install_database_$DATABASE_TYPE
}
# Configure and start the database
function configure_database {
configure_database_$DATABASE_TYPE
}
# Generate an SQLAlchemy connection URL and store it in a variable
# $1 The variable name in which to store the connection URL
# $2 The name of the database
function database_connection_url {
local var=$1
local db=$2
database_connection_url_$DATABASE_TYPE $var $db
}
# Restore xtrace
$XTRACE