Merge "Add PostgreSQL support to devstack"
This commit is contained in:
commit
308beccc24
@ -57,6 +57,15 @@ If the EC2 API is your cup-o-tea, you can create credentials and use euca2ools:
|
|||||||
|
|
||||||
You can override environment variables used in `stack.sh` by creating file name `localrc`. It is likely that you will need to do this to tweak your networking configuration should you need to access your cloud from a different host.
|
You can override environment variables used in `stack.sh` by creating file name `localrc`. It is likely that you will need to do this to tweak your networking configuration should you need to access your cloud from a different host.
|
||||||
|
|
||||||
|
# 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:
|
||||||
|
|
||||||
|
use_database postgresql
|
||||||
|
|
||||||
|
By default, the mysql database backend is used.
|
||||||
|
|
||||||
# RPC Backend
|
# RPC Backend
|
||||||
|
|
||||||
Multiple RPC backends are available. Currently, this
|
Multiple RPC backends are available. Currently, this
|
||||||
|
1
files/apts/postgresql
Normal file
1
files/apts/postgresql
Normal file
@ -0,0 +1 @@
|
|||||||
|
python-psycopg2
|
1
files/rpms/postgresql
Normal file
1
files/rpms/postgresql
Normal file
@ -0,0 +1 @@
|
|||||||
|
python-psycopg2
|
15
functions
15
functions
@ -836,6 +836,21 @@ function upload_image() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Toggle enable/disable_service for services that must run exclusive of each other
|
||||||
|
# $1 The name of a variable containing a space-separated list of services
|
||||||
|
# $2 The name of a variable in which to store the enabled service's name
|
||||||
|
# $3 The name of the service to enable
|
||||||
|
function use_exclusive_service {
|
||||||
|
local options=${!1}
|
||||||
|
local selection=$3
|
||||||
|
out=$2
|
||||||
|
[ -z $selection ] || [[ ! "$options" =~ "$selection" ]] && return 1
|
||||||
|
for opt in $options;do
|
||||||
|
[[ "$opt" = "$selection" ]] && enable_service $opt || disable_service $opt
|
||||||
|
done
|
||||||
|
eval "$out=$selection"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
# Wrapper for ``yum`` to set proxy environment variables
|
# Wrapper for ``yum`` to set proxy environment variables
|
||||||
# Uses globals ``OFFLINE``, ``*_proxy`
|
# Uses globals ``OFFLINE``, ``*_proxy`
|
||||||
|
@ -117,7 +117,9 @@ function configure_cinder() {
|
|||||||
iniset $CINDER_CONF DEFAULT volume_group $VOLUME_GROUP
|
iniset $CINDER_CONF DEFAULT volume_group $VOLUME_GROUP
|
||||||
iniset $CINDER_CONF DEFAULT volume_name_template ${VOLUME_NAME_PREFIX}%s
|
iniset $CINDER_CONF DEFAULT volume_name_template ${VOLUME_NAME_PREFIX}%s
|
||||||
iniset $CINDER_CONF DEFAULT iscsi_helper tgtadm
|
iniset $CINDER_CONF DEFAULT iscsi_helper tgtadm
|
||||||
iniset $CINDER_CONF DEFAULT sql_connection $BASE_SQL_CONN/cinder?charset=utf8
|
local dburl
|
||||||
|
database_connection_url dburl cinder
|
||||||
|
iniset $CINDER_CONF DEFAULT sql_connection $dburl
|
||||||
iniset $CINDER_CONF DEFAULT api_paste_config $CINDER_API_PASTE_INI
|
iniset $CINDER_CONF DEFAULT api_paste_config $CINDER_API_PASTE_INI
|
||||||
iniset $CINDER_CONF DEFAULT root_helper "sudo ${CINDER_ROOTWRAP}"
|
iniset $CINDER_CONF DEFAULT root_helper "sudo ${CINDER_ROOTWRAP}"
|
||||||
iniset $CINDER_CONF DEFAULT osapi_volume_extension cinder.api.openstack.volume.contrib.standard_extensions
|
iniset $CINDER_CONF DEFAULT osapi_volume_extension cinder.api.openstack.volume.contrib.standard_extensions
|
||||||
@ -146,10 +148,9 @@ function init_cinder() {
|
|||||||
# Force nova volumes off
|
# Force nova volumes off
|
||||||
NOVA_ENABLED_APIS=$(echo $NOVA_ENABLED_APIS | sed "s/osapi_volume,//")
|
NOVA_ENABLED_APIS=$(echo $NOVA_ENABLED_APIS | sed "s/osapi_volume,//")
|
||||||
|
|
||||||
if is_service_enabled mysql; then
|
if is_service_enabled $DATABASE_BACKENDS; then
|
||||||
# (re)create cinder database
|
# (re)create cinder database
|
||||||
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS cinder;'
|
recreate_database cinder utf8
|
||||||
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE cinder;'
|
|
||||||
|
|
||||||
# (re)create cinder database
|
# (re)create cinder database
|
||||||
$CINDER_BIN_DIR/cinder-manage db sync
|
$CINDER_BIN_DIR/cinder-manage db sync
|
||||||
|
103
lib/database
Normal file
103
lib/database
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
# 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
|
93
lib/databases/mysql
Normal file
93
lib/databases/mysql
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
# lib/mysql
|
||||||
|
# Functions to control the configuration and operation of the MySQL database backend
|
||||||
|
|
||||||
|
# Dependencies:
|
||||||
|
# DATABASE_{HOST,USER,PASSWORD} must be defined
|
||||||
|
|
||||||
|
# Save trace setting
|
||||||
|
XTRACE=$(set +o | grep xtrace)
|
||||||
|
set +o xtrace
|
||||||
|
|
||||||
|
register_database mysql
|
||||||
|
|
||||||
|
function recreate_database_mysql {
|
||||||
|
local db=$1
|
||||||
|
local charset=$2
|
||||||
|
mysql -u$DATABASE_USER -p$DATABASE_PASSWORD -e "DROP DATABASE IF EXISTS $db;"
|
||||||
|
mysql -u$DATABASE_USER -p$DATABASE_PASSWORD -e "CREATE DATABASE $db CHARACTER SET $charset;"
|
||||||
|
}
|
||||||
|
|
||||||
|
function configure_database_mysql {
|
||||||
|
echo_summary "Configuring and starting MySQL"
|
||||||
|
|
||||||
|
if [[ "$os_PACKAGE" = "deb" ]]; then
|
||||||
|
MY_CONF=/etc/mysql/my.cnf
|
||||||
|
MYSQL=mysql
|
||||||
|
else
|
||||||
|
MY_CONF=/etc/my.cnf
|
||||||
|
MYSQL=mysqld
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start mysql-server
|
||||||
|
if [[ "$os_PACKAGE" = "rpm" ]]; then
|
||||||
|
# RPM doesn't start the service
|
||||||
|
start_service $MYSQL
|
||||||
|
# Set the root password - only works the first time
|
||||||
|
sudo mysqladmin -u root password $DATABASE_PASSWORD || true
|
||||||
|
fi
|
||||||
|
# Update the DB to give user ‘$DATABASE_USER’@’%’ full control of the all databases:
|
||||||
|
sudo mysql -uroot -p$DATABASE_PASSWORD -h127.0.0.1 -e "GRANT ALL PRIVILEGES ON *.* TO '$DATABASE_USER'@'%' identified by '$DATABASE_PASSWORD';"
|
||||||
|
|
||||||
|
# Now update ``my.cnf`` for some local needs and restart the mysql service
|
||||||
|
|
||||||
|
# Change ‘bind-address’ from localhost (127.0.0.1) to any (0.0.0.0)
|
||||||
|
sudo sed -i '/^bind-address/s/127.0.0.1/0.0.0.0/g' $MY_CONF
|
||||||
|
|
||||||
|
# Set default db type to InnoDB
|
||||||
|
if sudo grep -q "default-storage-engine" $MY_CONF; then
|
||||||
|
# Change it
|
||||||
|
sudo bash -c "source $TOP_DIR/functions; iniset $MY_CONF mysqld default-storage-engine InnoDB"
|
||||||
|
else
|
||||||
|
# Add it
|
||||||
|
sudo sed -i -e "/^\[mysqld\]/ a \
|
||||||
|
default-storage-engine = InnoDB" $MY_CONF
|
||||||
|
fi
|
||||||
|
|
||||||
|
restart_service $MYSQL
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_database_mysql {
|
||||||
|
if [[ "$os_PACKAGE" = "deb" ]]; then
|
||||||
|
# Seed configuration with mysql password so that apt-get install doesn't
|
||||||
|
# prompt us for a password upon install.
|
||||||
|
cat <<MYSQL_PRESEED | sudo debconf-set-selections
|
||||||
|
mysql-server-5.1 mysql-server/root_password password $DATABASE_PASSWORD
|
||||||
|
mysql-server-5.1 mysql-server/root_password_again password $DATABASE_PASSWORD
|
||||||
|
mysql-server-5.1 mysql-server/start_on_boot boolean true
|
||||||
|
MYSQL_PRESEED
|
||||||
|
fi
|
||||||
|
|
||||||
|
# while ``.my.cnf`` is not needed for OpenStack to function, it is useful
|
||||||
|
# as it allows you to access the mysql databases via ``mysql nova`` instead
|
||||||
|
# of having to specify the username/password each time.
|
||||||
|
if [[ ! -e $HOME/.my.cnf ]]; then
|
||||||
|
cat <<EOF >$HOME/.my.cnf
|
||||||
|
[client]
|
||||||
|
user=$DATABASE_USER
|
||||||
|
password=$DATABASE_PASSWORD
|
||||||
|
host=$DATABASE_HOST
|
||||||
|
EOF
|
||||||
|
chmod 0600 $HOME/.my.cnf
|
||||||
|
fi
|
||||||
|
# Install mysql-server
|
||||||
|
install_package mysql-server
|
||||||
|
}
|
||||||
|
|
||||||
|
function database_connection_url_mysql {
|
||||||
|
local output=$1
|
||||||
|
local db=$2
|
||||||
|
eval "$output=$BASE_SQL_CONN/$db?charset=utf8"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Restore xtrace
|
||||||
|
$XTRACE
|
70
lib/databases/postgresql
Normal file
70
lib/databases/postgresql
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
# lib/postgresql
|
||||||
|
# Functions to control the configuration and operation of the PostgreSQL database backend
|
||||||
|
|
||||||
|
# Dependencies:
|
||||||
|
# DATABASE_{HOST,USER,PASSWORD} must be defined
|
||||||
|
|
||||||
|
# Save trace setting
|
||||||
|
XTRACE=$(set +o | grep xtrace)
|
||||||
|
set +o xtrace
|
||||||
|
|
||||||
|
register_database postgresql
|
||||||
|
|
||||||
|
function recreate_database_postgresql {
|
||||||
|
local db=$1
|
||||||
|
local charset=$2
|
||||||
|
# Avoid unsightly error when calling dropdb when the database doesn't exist
|
||||||
|
psql -h$DATABASE_HOST -U$DATABASE_USER -dtemplate1 -c "DROP DATABASE IF EXISTS $db"
|
||||||
|
createdb -h $DATABASE_HOST -U$DATABASE_USER -l C -T template0 -E $charset $db
|
||||||
|
}
|
||||||
|
|
||||||
|
function configure_database_postgresql {
|
||||||
|
echo_summary "Configuring and starting PostgreSQL"
|
||||||
|
if [[ "$os_PACKAGE" = "rpm" ]]; then
|
||||||
|
PG_HBA=/var/lib/pgsql/data/pg_hba.conf
|
||||||
|
PG_CONF=/var/lib/pgsql/data/postgresql.conf
|
||||||
|
else
|
||||||
|
PG_DIR=`find /etc/postgresql -name pg_hba.conf|xargs dirname`
|
||||||
|
PG_HBA=$PG_DIR/pg_hba.conf
|
||||||
|
PG_CONF=$PG_DIR/postgresql.conf
|
||||||
|
fi
|
||||||
|
sudo [ -e /var/lib/pgsql/data ] || sudo postgresql-setup initdb
|
||||||
|
# Listen on all addresses
|
||||||
|
sudo sed -i "/listen_addresses/s/.*/listen_addresses = '*'/" $PG_CONF
|
||||||
|
# Do password auth from all IPv4 clients
|
||||||
|
sudo sed -i "/^host/s/all\s\+127.0.0.1\/32\s\+ident/$DATABASE_USER\t0.0.0.0\/0\tpassword/" $PG_HBA
|
||||||
|
# Do password auth for all IPv6 clients
|
||||||
|
sudo sed -i "/^host/s/all\s\+::1\/128\s\+ident/$DATABASE_USER\t::0\/0\tpassword/" $PG_HBA
|
||||||
|
start_service postgresql
|
||||||
|
|
||||||
|
# If creating the role fails, chances are it already existed. Try to alter it.
|
||||||
|
sudo -u postgres -i psql -c "CREATE ROLE $DATABASE_USER WITH SUPERUSER LOGIN PASSWORD '$DATABASE_PASSWORD'" || \
|
||||||
|
sudo -u postgres -i psql -c "ALTER ROLE $DATABASE_USER WITH SUPERUSER LOGIN PASSWORD '$DATABASE_PASSWORD'"
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_database_postgresql {
|
||||||
|
echo_summary "Installing postgresql"
|
||||||
|
PGPASS=$HOME/.pgpass
|
||||||
|
if [[ ! -e $PGPASS ]]; then
|
||||||
|
cat <<EOF > $PGPASS
|
||||||
|
*:*:*:$DATABASE_USER:$DATABASE_PASSWORD
|
||||||
|
EOF
|
||||||
|
chmod 0600 $PGPASS
|
||||||
|
else
|
||||||
|
sed -i "s/:root:\w\+/:root:$DATABASE_PASSWORD/" $PGPASS
|
||||||
|
fi
|
||||||
|
if [[ "$os_PACKAGE" = "rpm" ]]; then
|
||||||
|
install_package postgresql-server
|
||||||
|
else
|
||||||
|
install_package postgresql
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function database_connection_url_postgresql {
|
||||||
|
local output=$1
|
||||||
|
local db=$2
|
||||||
|
eval "$output=$BASE_SQL_CONN/$db?client_encoding=utf8"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Restore xtrace
|
||||||
|
$XTRACE
|
@ -83,7 +83,9 @@ function configure_glance() {
|
|||||||
cp $GLANCE_DIR/etc/glance-registry.conf $GLANCE_REGISTRY_CONF
|
cp $GLANCE_DIR/etc/glance-registry.conf $GLANCE_REGISTRY_CONF
|
||||||
iniset $GLANCE_REGISTRY_CONF DEFAULT debug True
|
iniset $GLANCE_REGISTRY_CONF DEFAULT debug True
|
||||||
inicomment $GLANCE_REGISTRY_CONF DEFAULT log_file
|
inicomment $GLANCE_REGISTRY_CONF DEFAULT log_file
|
||||||
iniset $GLANCE_REGISTRY_CONF DEFAULT sql_connection $BASE_SQL_CONN/glance?charset=utf8
|
local dburl
|
||||||
|
database_connection_url dburl glance
|
||||||
|
iniset $GLANCE_REGISTRY_CONF DEFAULT sql_connection $dburl
|
||||||
iniset $GLANCE_REGISTRY_CONF DEFAULT use_syslog $SYSLOG
|
iniset $GLANCE_REGISTRY_CONF DEFAULT use_syslog $SYSLOG
|
||||||
iniset $GLANCE_REGISTRY_CONF paste_deploy flavor keystone
|
iniset $GLANCE_REGISTRY_CONF paste_deploy flavor keystone
|
||||||
iniset $GLANCE_REGISTRY_CONF keystone_authtoken auth_host $KEYSTONE_AUTH_HOST
|
iniset $GLANCE_REGISTRY_CONF keystone_authtoken auth_host $KEYSTONE_AUTH_HOST
|
||||||
@ -100,7 +102,7 @@ function configure_glance() {
|
|||||||
cp $GLANCE_DIR/etc/glance-api.conf $GLANCE_API_CONF
|
cp $GLANCE_DIR/etc/glance-api.conf $GLANCE_API_CONF
|
||||||
iniset $GLANCE_API_CONF DEFAULT debug True
|
iniset $GLANCE_API_CONF DEFAULT debug True
|
||||||
inicomment $GLANCE_API_CONF DEFAULT log_file
|
inicomment $GLANCE_API_CONF DEFAULT log_file
|
||||||
iniset $GLANCE_API_CONF DEFAULT sql_connection $BASE_SQL_CONN/glance?charset=utf8
|
iniset $GLANCE_API_CONF DEFAULT sql_connection $dburl
|
||||||
iniset $GLANCE_API_CONF DEFAULT use_syslog $SYSLOG
|
iniset $GLANCE_API_CONF DEFAULT use_syslog $SYSLOG
|
||||||
iniset $GLANCE_API_CONF DEFAULT filesystem_store_datadir $GLANCE_IMAGE_DIR/
|
iniset $GLANCE_API_CONF DEFAULT filesystem_store_datadir $GLANCE_IMAGE_DIR/
|
||||||
iniset $GLANCE_API_CONF DEFAULT image_cache_dir $GLANCE_CACHE_DIR/
|
iniset $GLANCE_API_CONF DEFAULT image_cache_dir $GLANCE_CACHE_DIR/
|
||||||
@ -157,8 +159,7 @@ function init_glance() {
|
|||||||
mkdir -p $GLANCE_CACHE_DIR
|
mkdir -p $GLANCE_CACHE_DIR
|
||||||
|
|
||||||
# (re)create glance database
|
# (re)create glance database
|
||||||
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS glance;'
|
recreate_database glance utf8
|
||||||
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE glance CHARACTER SET utf8;'
|
|
||||||
|
|
||||||
$GLANCE_BIN_DIR/glance-manage db_sync
|
$GLANCE_BIN_DIR/glance-manage db_sync
|
||||||
|
|
||||||
|
7
lib/heat
7
lib/heat
@ -120,7 +120,9 @@ function configure_heat() {
|
|||||||
iniset $HEAT_ENGINE_CONF DEFAULT use_syslog $SYSLOG
|
iniset $HEAT_ENGINE_CONF DEFAULT use_syslog $SYSLOG
|
||||||
iniset $HEAT_ENGINE_CONF DEFAULT bind_host $HEAT_ENGINE_HOST
|
iniset $HEAT_ENGINE_CONF DEFAULT bind_host $HEAT_ENGINE_HOST
|
||||||
iniset $HEAT_ENGINE_CONF DEFAULT bind_port $HEAT_ENGINE_PORT
|
iniset $HEAT_ENGINE_CONF DEFAULT bind_port $HEAT_ENGINE_PORT
|
||||||
iniset $HEAT_ENGINE_CONF DEFAULT sql_connection $BASE_SQL_CONN/heat?charset=utf8
|
local dburl
|
||||||
|
database_connection_url dburl heat
|
||||||
|
iniset $HEAT_ENGINE_CONF DEFAULT sql_connection $dburl
|
||||||
iniset $HEAT_ENGINE_CONF DEFAULT auth_encryption_key `hexdump -n 16 -v -e '/1 "%02x"' /dev/random`
|
iniset $HEAT_ENGINE_CONF DEFAULT auth_encryption_key `hexdump -n 16 -v -e '/1 "%02x"' /dev/random`
|
||||||
|
|
||||||
if is_service_enabled rabbit; then
|
if is_service_enabled rabbit; then
|
||||||
@ -185,8 +187,7 @@ function configure_heat() {
|
|||||||
function init_heat() {
|
function init_heat() {
|
||||||
|
|
||||||
# (re)create heat database
|
# (re)create heat database
|
||||||
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS heat;'
|
recreate_database heat utf8
|
||||||
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE heat CHARACTER SET utf8;'
|
|
||||||
|
|
||||||
$HEAT_DIR/bin/heat-db-setup $os_PACKAGE -r $MYSQL_PASSWORD
|
$HEAT_DIR/bin/heat-db-setup $os_PACKAGE -r $MYSQL_PASSWORD
|
||||||
$HEAT_DIR/tools/nova_create_flavors.sh
|
$HEAT_DIR/tools/nova_create_flavors.sh
|
||||||
|
@ -86,9 +86,11 @@ function configure_keystone() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Rewrite stock ``keystone.conf``
|
# Rewrite stock ``keystone.conf``
|
||||||
|
local dburl
|
||||||
|
database_connection_url dburl keystone
|
||||||
iniset $KEYSTONE_CONF DEFAULT admin_token "$SERVICE_TOKEN"
|
iniset $KEYSTONE_CONF DEFAULT admin_token "$SERVICE_TOKEN"
|
||||||
iniset $KEYSTONE_CONF signing token_format "$KEYSTONE_TOKEN_FORMAT"
|
iniset $KEYSTONE_CONF signing token_format "$KEYSTONE_TOKEN_FORMAT"
|
||||||
iniset $KEYSTONE_CONF sql connection "$BASE_SQL_CONN/keystone?charset=utf8"
|
iniset $KEYSTONE_CONF sql connection $dburl
|
||||||
iniset $KEYSTONE_CONF ec2 driver "keystone.contrib.ec2.backends.sql.Ec2"
|
iniset $KEYSTONE_CONF ec2 driver "keystone.contrib.ec2.backends.sql.Ec2"
|
||||||
sed -e "
|
sed -e "
|
||||||
/^pipeline.*ec2_extension crud_/s|ec2_extension crud_extension|ec2_extension s3_extension crud_extension|;
|
/^pipeline.*ec2_extension crud_/s|ec2_extension crud_extension|ec2_extension s3_extension crud_extension|;
|
||||||
@ -145,8 +147,7 @@ function configure_keystone() {
|
|||||||
# init_keystone() - Initialize databases, etc.
|
# init_keystone() - Initialize databases, etc.
|
||||||
function init_keystone() {
|
function init_keystone() {
|
||||||
# (Re)create keystone database
|
# (Re)create keystone database
|
||||||
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS keystone;'
|
recreate_database keystone utf8
|
||||||
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE keystone CHARACTER SET utf8;'
|
|
||||||
|
|
||||||
# Initialize keystone database
|
# Initialize keystone database
|
||||||
$KEYSTONE_DIR/bin/keystone-manage db_sync
|
$KEYSTONE_DIR/bin/keystone-manage db_sync
|
||||||
|
10
lib/nova
10
lib/nova
@ -302,7 +302,9 @@ function create_nova_conf() {
|
|||||||
add_nova_opt "s3_port=$S3_SERVICE_PORT"
|
add_nova_opt "s3_port=$S3_SERVICE_PORT"
|
||||||
add_nova_opt "osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions"
|
add_nova_opt "osapi_compute_extension=nova.api.openstack.compute.contrib.standard_extensions"
|
||||||
add_nova_opt "my_ip=$HOST_IP"
|
add_nova_opt "my_ip=$HOST_IP"
|
||||||
add_nova_opt "sql_connection=$BASE_SQL_CONN/nova?charset=utf8"
|
local dburl
|
||||||
|
database_connection_url dburl nova
|
||||||
|
add_nova_opt "sql_connection=$dburl"
|
||||||
add_nova_opt "libvirt_type=$LIBVIRT_TYPE"
|
add_nova_opt "libvirt_type=$LIBVIRT_TYPE"
|
||||||
add_nova_opt "libvirt_cpu_mode=none"
|
add_nova_opt "libvirt_cpu_mode=none"
|
||||||
add_nova_opt "instance_name_template=${INSTANCE_NAME_PREFIX}%08x"
|
add_nova_opt "instance_name_template=${INSTANCE_NAME_PREFIX}%08x"
|
||||||
@ -378,14 +380,12 @@ function init_nova() {
|
|||||||
# All nova components talk to a central database. We will need to do this step
|
# All nova components talk to a central database. We will need to do this step
|
||||||
# only once for an entire cluster.
|
# only once for an entire cluster.
|
||||||
|
|
||||||
if is_service_enabled mysql && is_service_enabled nova; then
|
if is_service_enabled $DATABASE_BACKENDS && is_service_enabled nova; then
|
||||||
# (Re)create nova database
|
# (Re)create nova database
|
||||||
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS nova;'
|
|
||||||
|
|
||||||
# Explicitly use latin1: to avoid lp#829209, nova expects the database to
|
# Explicitly use latin1: to avoid lp#829209, nova expects the database to
|
||||||
# use latin1 by default, and then upgrades the database to utf8 (see the
|
# use latin1 by default, and then upgrades the database to utf8 (see the
|
||||||
# 082_essex.py in nova)
|
# 082_essex.py in nova)
|
||||||
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE nova CHARACTER SET latin1;'
|
recreate_database nova latin1
|
||||||
|
|
||||||
# (Re)create nova database
|
# (Re)create nova database
|
||||||
$NOVA_BIN_DIR/nova-manage db sync
|
$NOVA_BIN_DIR/nova-manage db sync
|
||||||
|
128
stack.sh
128
stack.sh
@ -30,6 +30,8 @@ source $TOP_DIR/functions
|
|||||||
# and ``DISTRO``
|
# and ``DISTRO``
|
||||||
GetDistro
|
GetDistro
|
||||||
|
|
||||||
|
# Import database library (must be loaded before stackrc which sources localrc)
|
||||||
|
source $TOP_DIR/lib/database
|
||||||
|
|
||||||
# Settings
|
# Settings
|
||||||
# ========
|
# ========
|
||||||
@ -37,15 +39,15 @@ GetDistro
|
|||||||
# ``stack.sh`` is customizable through setting environment variables. If you
|
# ``stack.sh`` is customizable through setting environment variables. If you
|
||||||
# want to override a setting you can set and export it::
|
# want to override a setting you can set and export it::
|
||||||
#
|
#
|
||||||
# export MYSQL_PASSWORD=anothersecret
|
# export DATABASE_PASSWORD=anothersecret
|
||||||
# ./stack.sh
|
# ./stack.sh
|
||||||
#
|
#
|
||||||
# You can also pass options on a single line ``MYSQL_PASSWORD=simple ./stack.sh``
|
# You can also pass options on a single line ``DATABASE_PASSWORD=simple ./stack.sh``
|
||||||
#
|
#
|
||||||
# Additionally, you can put any local variables into a ``localrc`` file::
|
# Additionally, you can put any local variables into a ``localrc`` file::
|
||||||
#
|
#
|
||||||
# MYSQL_PASSWORD=anothersecret
|
# DATABASE_PASSWORD=anothersecret
|
||||||
# MYSQL_USER=hellaroot
|
# DATABASE_USER=hellaroot
|
||||||
#
|
#
|
||||||
# We try to have sensible defaults, so you should be able to run ``./stack.sh``
|
# We try to have sensible defaults, so you should be able to run ``./stack.sh``
|
||||||
# in most cases. ``localrc`` is not distributed with DevStack and will never
|
# in most cases. ``localrc`` is not distributed with DevStack and will never
|
||||||
@ -471,24 +473,21 @@ FLAT_INTERFACE=${FLAT_INTERFACE-$GUEST_INTERFACE_DEFAULT}
|
|||||||
# With Quantum networking the NET_MAN variable is ignored.
|
# With Quantum networking the NET_MAN variable is ignored.
|
||||||
|
|
||||||
|
|
||||||
# MySQL & (RabbitMQ or Qpid)
|
# Database configuration
|
||||||
|
# ----------------------
|
||||||
|
# To select between database backends, add a line to localrc like:
|
||||||
|
#
|
||||||
|
# use_database postgresql
|
||||||
|
#
|
||||||
|
# The available database backends are defined in the DATABASE_BACKENDS
|
||||||
|
# variable defined in stackrc. By default, MySQL is enabled as the database
|
||||||
|
# backend.
|
||||||
|
|
||||||
|
initialize_database_backends && echo "Using $DATABASE_TYPE database backend" || echo "No database enabled"
|
||||||
|
|
||||||
|
# RabbitMQ or Qpid
|
||||||
# --------------------------
|
# --------------------------
|
||||||
|
|
||||||
# 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 ``MYSQL_PASSWORD`` to every host if you are doing
|
|
||||||
# a multi-node DevStack installation.
|
|
||||||
MYSQL_HOST=${MYSQL_HOST:-localhost}
|
|
||||||
MYSQL_USER=${MYSQL_USER:-root}
|
|
||||||
read_password MYSQL_PASSWORD "ENTER A PASSWORD TO USE FOR MYSQL."
|
|
||||||
|
|
||||||
# NOTE: Don't specify ``/db`` in this string so we can use it for multiple services
|
|
||||||
BASE_SQL_CONN=${BASE_SQL_CONN:-mysql://$MYSQL_USER:$MYSQL_PASSWORD@$MYSQL_HOST}
|
|
||||||
|
|
||||||
# Rabbit connection info
|
# Rabbit connection info
|
||||||
if is_service_enabled rabbit; then
|
if is_service_enabled rabbit; then
|
||||||
RABBIT_HOST=${RABBIT_HOST:-localhost}
|
RABBIT_HOST=${RABBIT_HOST:-localhost}
|
||||||
@ -746,32 +745,8 @@ elif is_service_enabled zeromq; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if is_service_enabled mysql; then
|
if is_service_enabled $DATABASE_BACKENDS; then
|
||||||
|
install_database
|
||||||
if [[ "$os_PACKAGE" = "deb" ]]; then
|
|
||||||
# Seed configuration with mysql password so that apt-get install doesn't
|
|
||||||
# prompt us for a password upon install.
|
|
||||||
cat <<MYSQL_PRESEED | sudo debconf-set-selections
|
|
||||||
mysql-server-5.1 mysql-server/root_password password $MYSQL_PASSWORD
|
|
||||||
mysql-server-5.1 mysql-server/root_password_again password $MYSQL_PASSWORD
|
|
||||||
mysql-server-5.1 mysql-server/start_on_boot boolean true
|
|
||||||
MYSQL_PRESEED
|
|
||||||
fi
|
|
||||||
|
|
||||||
# while ``.my.cnf`` is not needed for OpenStack to function, it is useful
|
|
||||||
# as it allows you to access the mysql databases via ``mysql nova`` instead
|
|
||||||
# of having to specify the username/password each time.
|
|
||||||
if [[ ! -e $HOME/.my.cnf ]]; then
|
|
||||||
cat <<EOF >$HOME/.my.cnf
|
|
||||||
[client]
|
|
||||||
user=$MYSQL_USER
|
|
||||||
password=$MYSQL_PASSWORD
|
|
||||||
host=$MYSQL_HOST
|
|
||||||
EOF
|
|
||||||
chmod 0600 $HOME/.my.cnf
|
|
||||||
fi
|
|
||||||
# Install mysql-server
|
|
||||||
install_package mysql-server
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if is_service_enabled horizon; then
|
if is_service_enabled horizon; then
|
||||||
@ -990,46 +965,10 @@ elif is_service_enabled qpid; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Mysql
|
# Configure database
|
||||||
# -----
|
# ------------------
|
||||||
|
if is_service_enabled $DATABASE_BACKENDS; then
|
||||||
if is_service_enabled mysql; then
|
configure_database
|
||||||
echo_summary "Configuring and starting MySQL"
|
|
||||||
|
|
||||||
if [[ "$os_PACKAGE" = "deb" ]]; then
|
|
||||||
MY_CONF=/etc/mysql/my.cnf
|
|
||||||
MYSQL=mysql
|
|
||||||
else
|
|
||||||
MY_CONF=/etc/my.cnf
|
|
||||||
MYSQL=mysqld
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Start mysql-server
|
|
||||||
if [[ "$os_PACKAGE" = "rpm" ]]; then
|
|
||||||
# RPM doesn't start the service
|
|
||||||
start_service $MYSQL
|
|
||||||
# Set the root password - only works the first time
|
|
||||||
sudo mysqladmin -u root password $MYSQL_PASSWORD || true
|
|
||||||
fi
|
|
||||||
# Update the DB to give user ‘$MYSQL_USER’@’%’ full control of the all databases:
|
|
||||||
sudo mysql -uroot -p$MYSQL_PASSWORD -h127.0.0.1 -e "GRANT ALL PRIVILEGES ON *.* TO '$MYSQL_USER'@'%' identified by '$MYSQL_PASSWORD';"
|
|
||||||
|
|
||||||
# Now update ``my.cnf`` for some local needs and restart the mysql service
|
|
||||||
|
|
||||||
# Change ‘bind-address’ from localhost (127.0.0.1) to any (0.0.0.0)
|
|
||||||
sudo sed -i '/^bind-address/s/127.0.0.1/0.0.0.0/g' $MY_CONF
|
|
||||||
|
|
||||||
# Set default db type to InnoDB
|
|
||||||
if sudo grep -q "default-storage-engine" $MY_CONF; then
|
|
||||||
# Change it
|
|
||||||
sudo bash -c "source $TOP_DIR/functions; iniset $MY_CONF mysqld default-storage-engine InnoDB"
|
|
||||||
else
|
|
||||||
# Add it
|
|
||||||
sudo sed -i -e "/^\[mysqld\]/ a \
|
|
||||||
default-storage-engine = InnoDB" $MY_CONF
|
|
||||||
fi
|
|
||||||
|
|
||||||
restart_service $MYSQL
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "$SCREEN_HARDSTATUS" ]; then
|
if [ -z "$SCREEN_HARDSTATUS" ]; then
|
||||||
@ -1280,7 +1219,9 @@ if is_service_enabled quantum; then
|
|||||||
Q_PLUGIN_CONF_FILE=$Q_PLUGIN_CONF_PATH/$Q_PLUGIN_CONF_FILENAME
|
Q_PLUGIN_CONF_FILE=$Q_PLUGIN_CONF_PATH/$Q_PLUGIN_CONF_FILENAME
|
||||||
cp $QUANTUM_DIR/$Q_PLUGIN_CONF_FILE /$Q_PLUGIN_CONF_FILE
|
cp $QUANTUM_DIR/$Q_PLUGIN_CONF_FILE /$Q_PLUGIN_CONF_FILE
|
||||||
|
|
||||||
iniset /$Q_PLUGIN_CONF_FILE DATABASE sql_connection mysql:\/\/$MYSQL_USER:$MYSQL_PASSWORD@$MYSQL_HOST\/$Q_DB_NAME?charset=utf8
|
database_connection_url dburl $Q_DB_NAME
|
||||||
|
iniset /$Q_PLUGIN_CONF_FILE DATABASE sql_connection $dburl
|
||||||
|
unset dburl
|
||||||
|
|
||||||
Q_CONF_FILE=/etc/quantum/quantum.conf
|
Q_CONF_FILE=/etc/quantum/quantum.conf
|
||||||
cp $QUANTUM_DIR/etc/quantum.conf $Q_CONF_FILE
|
cp $QUANTUM_DIR/etc/quantum.conf $Q_CONF_FILE
|
||||||
@ -1306,12 +1247,11 @@ if is_service_enabled q-svc; then
|
|||||||
cp $QUANTUM_DIR/etc/api-paste.ini $Q_API_PASTE_FILE
|
cp $QUANTUM_DIR/etc/api-paste.ini $Q_API_PASTE_FILE
|
||||||
cp $QUANTUM_DIR/etc/policy.json $Q_POLICY_FILE
|
cp $QUANTUM_DIR/etc/policy.json $Q_POLICY_FILE
|
||||||
|
|
||||||
if is_service_enabled mysql; then
|
if is_service_enabled $DATABASE_BACKENDS; then
|
||||||
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "DROP DATABASE IF EXISTS $Q_DB_NAME;"
|
recreate_database $Q_DB_NAME utf8
|
||||||
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "CREATE DATABASE IF NOT EXISTS $Q_DB_NAME CHARACTER SET utf8;"
|
else
|
||||||
else
|
echo "A database must be enabled in order to use the $Q_PLUGIN Quantum plugin."
|
||||||
echo "mysql must be enabled in order to use the $Q_PLUGIN Quantum plugin."
|
exit 1
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Update either configuration file with plugin
|
# Update either configuration file with plugin
|
||||||
@ -1971,7 +1911,7 @@ if is_service_enabled q-svc; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
elif is_service_enabled mysql && is_service_enabled nova; then
|
elif is_service_enabled $DATABASE_BACKENDS && is_service_enabled nova; then
|
||||||
# Create a small network
|
# Create a small network
|
||||||
$NOVA_BIN_DIR/nova-manage network create "$PRIVATE_NETWORK_NAME" $FIXED_RANGE 1 $FIXED_NETWORK_SIZE $NETWORK_CREATE_ARGS
|
$NOVA_BIN_DIR/nova-manage network create "$PRIVATE_NETWORK_NAME" $FIXED_RANGE 1 $FIXED_NETWORK_SIZE $NETWORK_CREATE_ARGS
|
||||||
|
|
||||||
|
@ -15,6 +15,9 @@ TOP_DIR=$(cd $(dirname "$0") && pwd)
|
|||||||
# Import common functions
|
# Import common functions
|
||||||
source $TOP_DIR/functions
|
source $TOP_DIR/functions
|
||||||
|
|
||||||
|
# Import database library
|
||||||
|
source $TOP_DIR/lib/database
|
||||||
|
|
||||||
# Load local configuration
|
# Load local configuration
|
||||||
source $TOP_DIR/stackrc
|
source $TOP_DIR/stackrc
|
||||||
|
|
||||||
@ -102,6 +105,10 @@ if [[ -n "$UNSTACK_ALL" ]]; then
|
|||||||
stop_service mysql
|
stop_service mysql
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if is_service_enabled postgresql; then
|
||||||
|
stop_service postgresql
|
||||||
|
fi
|
||||||
|
|
||||||
# Stop rabbitmq-server
|
# Stop rabbitmq-server
|
||||||
if is_service_enabled rabbit; then
|
if is_service_enabled rabbit; then
|
||||||
stop_service rabbitmq-server
|
stop_service rabbitmq-server
|
||||||
|
Loading…
Reference in New Issue
Block a user