devstack/lib/marconi
Malini Kamalambal f7ae9ff5dd Use Mongo DB as the default backend
With the gate upgrade to Trusty, Marconi should now be able to run with
Mongo DB at the gate.

Change-Id: I7bfe25d42c9429606ee209860685077806eb6756
2014-08-06 20:59:17 -04:00

212 lines
6.8 KiB
Plaintext

# lib/marconi
# Install and start **Marconi** service
# To enable a minimal set of Marconi services, add the following to localrc:
#
# enable_service marconi-server
#
# Dependencies:
# - functions
# - OS_AUTH_URL for auth in api
# - DEST set to the destination directory
# - SERVICE_PASSWORD, SERVICE_TENANT_NAME for auth in api
# - STACK_USER service user
# stack.sh
# ---------
# install_marconi
# configure_marconi
# init_marconi
# start_marconi
# stop_marconi
# cleanup_marconi
# Save trace setting
XTRACE=$(set +o | grep xtrace)
set +o xtrace
# Defaults
# --------
# Set up default directories
MARCONI_DIR=$DEST/marconi
MARCONICLIENT_DIR=$DEST/python-marconiclient
MARCONI_CONF_DIR=/etc/marconi
MARCONI_CONF=$MARCONI_CONF_DIR/marconi.conf
MARCONI_API_LOG_DIR=/var/log/marconi
MARCONI_API_LOG_FILE=$MARCONI_API_LOG_DIR/queues.log
MARCONI_AUTH_CACHE_DIR=${MARCONI_AUTH_CACHE_DIR:-/var/cache/marconi}
# Support potential entry-points console scripts
MARCONI_BIN_DIR=$(get_python_exec_prefix)
# Set up database backend
MARCONI_BACKEND=${MARCONI_BACKEND:-mongodb}
# Set Marconi repository
MARCONI_REPO=${MARCONI_REPO:-${GIT_BASE}/openstack/marconi.git}
MARCONI_BRANCH=${MARCONI_BRANCH:-master}
# Set client library repository
MARCONICLIENT_REPO=${MARCONICLIENT_REPO:-${GIT_BASE}/openstack/python-marconiclient.git}
MARCONICLIENT_BRANCH=${MARCONICLIENT_BRANCH:-master}
# Set Marconi Connection Info
MARCONI_SERVICE_HOST=${MARCONI_SERVICE_HOST:-$SERVICE_HOST}
MARCONI_SERVICE_PORT=${MARCONI_SERVICE_PORT:-8888}
MARCONI_SERVICE_PROTOCOL=${MARCONI_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL}
# Tell Tempest this project is present
TEMPEST_SERVICES+=,marconi
# Functions
# ---------
# Test if any Marconi services are enabled
# is_marconi_enabled
function is_marconi_enabled {
[[ ,${ENABLED_SERVICES} =~ ,"marconi-" ]] && return 0
return 1
}
# cleanup_marconi() - Remove residual data files, anything left over from previous
# runs that a clean run would need to clean up
function cleanup_marconi {
if ! timeout $SERVICE_TIMEOUT sh -c "while ! mongo marconi --eval 'db.dropDatabase();'; do sleep 1; done"; then
die $LINENO "Mongo DB did not start"
else
full_version=$(mongo marconi --eval 'db.dropDatabase();')
mongo_version=`echo $full_version | cut -d' ' -f4`
required_mongo_version='2.2'
if [[ $mongo_version < $required_mongo_version ]]; then
die $LINENO "Marconi needs Mongo DB version >= 2.2 to run."
fi
fi
}
# configure_marconiclient() - Set config files, create data dirs, etc
function configure_marconiclient {
setup_develop $MARCONICLIENT_DIR
}
# configure_marconi() - Set config files, create data dirs, etc
function configure_marconi {
setup_develop $MARCONI_DIR
[ ! -d $MARCONI_CONF_DIR ] && sudo mkdir -m 755 -p $MARCONI_CONF_DIR
sudo chown $USER $MARCONI_CONF_DIR
[ ! -d $MARCONI_API_LOG_DIR ] && sudo mkdir -m 755 -p $MARCONI_API_LOG_DIR
sudo chown $USER $MARCONI_API_LOG_DIR
iniset $MARCONI_CONF DEFAULT verbose True
iniset $MARCONI_CONF DEFAULT use_syslog $SYSLOG
iniset $MARCONI_CONF DEFAULT log_file $MARCONI_API_LOG_FILE
iniset $MARCONI_CONF 'drivers:transport:wsgi' bind $MARCONI_SERVICE_HOST
iniset $MARCONI_CONF keystone_authtoken auth_protocol http
iniset $MARCONI_CONF keystone_authtoken admin_user marconi
iniset $MARCONI_CONF keystone_authtoken admin_password $SERVICE_PASSWORD
iniset $MARCONI_CONF keystone_authtoken admin_tenant_name $SERVICE_TENANT_NAME
iniset $MARCONI_CONF keystone_authtoken signing_dir $MARCONI_AUTH_CACHE_DIR
if [ "$MARCONI_BACKEND" = 'mysql' ] || [ "$MARCONI_BACKEND" = 'postgresql' ] ; then
iniset $MARCONI_CONF drivers storage sqlalchemy
iniset $MARCONI_CONF 'drivers:storage:sqlalchemy' uri `database_connection_url marconi`
elif [ "$MARCONI_BACKEND" = 'mongodb' ] ; then
iniset $MARCONI_CONF drivers storage mongodb
iniset $MARCONI_CONF 'drivers:storage:mongodb' uri mongodb://localhost:27017/marconi
configure_mongodb
cleanup_marconi
fi
}
function configure_mongodb {
# Set nssize to 2GB. This increases the number of namespaces supported
# # per database.
if is_ubuntu; then
sudo sed -i -e "
s|[^ \t]*#[ \t]*\(nssize[ \t]*=.*\$\)|\1|
s|^\(nssize[ \t]*=[ \t]*\).*\$|\1 2047|
" /etc/mongodb.conf
restart_service mongodb
elif is_fedora; then
sudo sed -i '/--nssize/!s/OPTIONS=\"/OPTIONS=\"--nssize 2047 /' /etc/sysconfig/mongod
restart_service mongod
fi
}
# init_marconi() - Initialize etc.
function init_marconi {
# Create cache dir
sudo mkdir -p $MARCONI_AUTH_CACHE_DIR
sudo chown $STACK_USER $MARCONI_AUTH_CACHE_DIR
rm -f $MARCONI_AUTH_CACHE_DIR/*
}
# install_marconi() - Collect source and prepare
function install_marconi {
git_clone $MARCONI_REPO $MARCONI_DIR $MARCONI_BRANCH
setup_develop $MARCONI_DIR
}
# install_marconiclient() - Collect source and prepare
function install_marconiclient {
git_clone $MARCONICLIENT_REPO $MARCONICLIENT_DIR $MARCONICLIENT_BRANCH
setup_develop $MARCONICLIENT_DIR
}
# start_marconi() - Start running processes, including screen
function start_marconi {
if [[ "$USE_SCREEN" = "False" ]]; then
screen_it marconi-server "marconi-server --config-file $MARCONI_CONF --daemon"
else
screen_it marconi-server "marconi-server --config-file $MARCONI_CONF"
fi
echo "Waiting for Marconi to start..."
if ! timeout $SERVICE_TIMEOUT sh -c "while ! wget --no-proxy -q -O- $MARCONI_SERVICE_PROTOCOL://$MARCONI_SERVICE_HOST:$MARCONI_SERVICE_PORT/v1/health; do sleep 1; done"; then
die $LINENO "Marconi did not start"
fi
}
# stop_marconi() - Stop running processes
function stop_marconi {
# Kill the marconi screen windows
for serv in marconi-server; do
screen -S $SCREEN_NAME -p $serv -X kill
done
}
function create_marconi_accounts {
SERVICE_TENANT=$(openstack project list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
ADMIN_ROLE=$(openstack role list | awk "/ admin / { print \$2 }")
MARCONI_USER=$(get_or_create_user "marconi" \
"$SERVICE_PASSWORD" $SERVICE_TENANT)
get_or_add_user_role $ADMIN_ROLE $MARCONI_USER $SERVICE_TENANT
if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then
MARCONI_SERVICE=$(get_or_create_service "marconi" \
"queuing" "Marconi Service")
get_or_create_endpoint $MARCONI_SERVICE \
"$REGION_NAME" \
"$MARCONI_SERVICE_PROTOCOL://$MARCONI_SERVICE_HOST:$MARCONI_SERVICE_PORT" \
"$MARCONI_SERVICE_PROTOCOL://$MARCONI_SERVICE_HOST:$MARCONI_SERVICE_PORT" \
"$MARCONI_SERVICE_PROTOCOL://$MARCONI_SERVICE_HOST:$MARCONI_SERVICE_PORT"
fi
}
# Restore xtrace
$XTRACE
# Local variables:
# mode: shell-script
# End: