devstack/lib/database
Terry Wilson 428af5a257 Add PostgreSQL support to devstack
This patch adds an interface for supporting multiple database backend
types and implemnts support for PostgreSQL. It also adds a function,
use_exclusive_service, which serves as a base for enabling a service
that conflicts with other services. The use_database function uses it,
and it might also be useful for selecting messaging backends.

MySQL is still selected by default. Tested on Fedora 17 and Ubuntu
12.04 with MySQL and PostgreSQL. Implements blueprint postgresql-support

Change-Id: I4b1373e25676fd9a9809fe70cb4a6450a2479174
2012-11-03 18:19:21 -04:00

104 lines
3.1 KiB
Plaintext

# lib/database
# Interface for interacting with different database backends
# Dependencies:
# DATABASE_BACKENDS variable must contain a list of available database backends
# DATABASE_TYPE variable must be set
# 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"
}
for f in $TOP_DIR/lib/databases/*; do source $f; done
# 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
}
# Set the database backend to use
# $1 The name of the database backend to use (mysql, postgresql, ...)
function use_database {
use_exclusive_service DATABASE_BACKENDS DATABASE_TYPE $1 && return 0
ret=$?
echo "Invalid database '$1'"
return $ret
}
# 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