diff --git a/README.md b/README.md index 931075887a..483d1b0bc3 100644 --- a/README.md +++ b/README.md @@ -60,11 +60,12 @@ You can override environment variables used in `stack.sh` by creating file name # Database Backend Multiple database backends are available. The available databases are defined in the lib/databases directory. -To choose a database backend, add a line to your `localrc` like: +`mysql` is the default database, choose a different one by putting the following in `localrc`: - use_database postgresql + disable_service mysql + enable_service postgresql -By default, the mysql database backend is used. +`mysql` is the default database. # RPC Backend diff --git a/functions b/functions index 68aec5d2f5..3a037ca3ec 100644 --- a/functions +++ b/functions @@ -975,9 +975,11 @@ function upload_image() { # $1 The name of the database backend to use (mysql, postgresql, ...) function use_database { if [[ -z "$DATABASE_BACKENDS" ]]; then - # The backends haven't initialized yet, just save the selection for now + # No backends registered means this is likely called from ``localrc`` + # This is now deprecated usage DATABASE_TYPE=$1 else + # This should no longer get called...here for posterity use_exclusive_service DATABASE_BACKENDS DATABASE_TYPE $1 fi } diff --git a/lib/database b/lib/database index 07e37aef72..4fba7c2140 100644 --- a/lib/database +++ b/lib/database @@ -2,9 +2,12 @@ # 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 +# ``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 @@ -23,8 +26,36 @@ 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 +# If ``DATABASE_TYPE`` is defined here it's because the user has it in ``localrc`` +# or has called ``use_database``. Both are deprecated so let's fix it up for now. +if [[ -n $DATABASE_TYPE ]]; then + # This is now deprecated usage, set up a warning and try to be + # somewhat backward compatible for now. + DEPRECATED_TEXT="$DEPRECATED_TEXT\nThe database backend needs to be properly set in ENABLED_SERVICES; DATABASE_TYPE or use_database is deprecated localrc\n" + if [[ ! $ENABLED_SERVICES =~ $DATABASE_TYPE ]]; then + # It's not in enabled services but user has attempted to select a + # database, so just add it now + ENABLED_SERVICES+=,$DATABASE_TYPE + unset DATABASE_TYPE + fi +fi + +# ``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 diff --git a/stack.sh b/stack.sh index 0521ced3b7..2cfbfa510c 100755 --- a/stack.sh +++ b/stack.sh @@ -99,11 +99,6 @@ fi source $TOP_DIR/lib/database source $TOP_DIR/lib/rpc_backend -# Validate database selection -# Since DATABASE_BACKENDS is now set, this also gets ENABLED_SERVICES -# properly configured for the database selection. -use_database $DATABASE_TYPE || echo "Invalid database '$DATABASE_TYPE'" - # Remove services which were negated in ENABLED_SERVICES # using the "-" prefix (e.g., "-rabbit") instead of # calling disable_service(). @@ -430,13 +425,13 @@ FLAT_INTERFACE=${FLAT_INTERFACE-$GUEST_INTERFACE_DEFAULT} # Database Configuration # ---------------------- -# To select between database backends, add a line to localrc like: +# To select between database backends, add the following to ``localrc``: # -# use_database postgresql +# disable_service mysql +# enable_service postgresql # -# The available database backends are defined in the ``DATABASE_BACKENDS`` -# variable defined in stackrc. By default, MySQL is enabled as the database -# backend. +# The available database backends are listed in ``DATABASE_BACKENDS`` after +# ``lib/database`` is sourced. ``mysql`` is the default. initialize_database_backends && echo "Using $DATABASE_TYPE database backend" || echo "No database enabled" @@ -520,11 +515,11 @@ function echo_summary() { if [ ! -z "$LAST_SPINNER_PID" ]; then printf "\b\b\bdone\n" >&3 fi - echo -n $@ >&6 + echo -n -e $@ >&6 spinner & LAST_SPINNER_PID=$! else - echo $@ >&6 + echo -e $@ >&6 fi } @@ -1382,9 +1377,9 @@ fi # Echo ``HOST_IP`` - useful for ``build_uec.sh``, which uses dhcp to give the instance an address echo "This is your host ip: $HOST_IP" -# Warn that ``EXTRA_FLAGS`` needs to be converted to ``EXTRA_OPTS`` -if [[ -n "$EXTRA_FLAGS" ]]; then - echo_summary "WARNING: EXTRA_FLAGS is defined and may need to be converted to EXTRA_OPTS" +# Warn that a deprecated feature was used +if [[ -n "$DEPRECATED_TEXT" ]]; then + echo_summary "WARNING: $DEPRECATED_TEXT" fi # Indicate how long this took to run (bash maintained variable ``SECONDS``) diff --git a/stackrc b/stackrc index 789fc82d76..f53aeec052 100644 --- a/stackrc +++ b/stackrc @@ -9,9 +9,6 @@ DEST=/opt/stack # Destination for working data DATA_DIR=${DEST}/data -# Select the default database -DATABASE_TYPE=mysql - # Determine stack user if [[ $EUID -eq 0 ]]; then STACK_USER=stack @@ -24,7 +21,7 @@ fi # ``disable_service`` functions in ``localrc``. # For example, to enable Swift add this to ``localrc``: # enable_service swift -ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-net,n-cond,cinder,c-sch,c-api,c-vol,n-sch,n-novnc,n-xvnc,n-cauth,horizon,rabbit,tempest,$DATABASE_TYPE +ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-net,n-cond,cinder,c-sch,c-api,c-vol,n-sch,n-novnc,n-xvnc,n-cauth,horizon,rabbit,tempest,mysql # Set the default Nova APIs to enable NOVA_ENABLED_APIS=ec2,osapi_compute,metadata