devstack/lib/horizon
Ian Wienand ad43b3957e Grab upstream nodejs for RHEL6
RHEL6 has no nodejs in main packages or in EPEL.  The easiest way is
to just install the upstream binary version which works fine for the
very minimal usage by lesscss.

Change-Id: Ia35e7dbaf4c7add43797d6b7d0c846bab1cf0cb0
2013-04-29 16:21:54 +10:00

239 lines
7.1 KiB
Plaintext

# lib/horizon
# Functions to control the configuration and operation of the horizon service
# <do not include this template file in ``stack.sh``!>
# Dependencies:
# ``functions`` file
# ``SERVICE_{TENANT_NAME|PASSWORD}`` must be defined
# <list other global vars that are assumed to be defined>
# ``stack.sh`` calls the entry points in this order:
#
# install_horizon
# configure_horizon
# init_horizon
# start_horizon
# stop_horizon
# cleanup_horizon
# Save trace setting
XTRACE=$(set +o | grep xtrace)
set +o xtrace
# Defaults
# --------
# <define global variables here that belong to this project>
# Set up default directories
HORIZON_DIR=$DEST/horizon
# local_settings.py is used to customize Dashboard settings.
# The example file in Horizon repo is used by default.
HORIZON_SETTINGS=${HORIZON_SETTINGS:-$HORIZON_DIR/openstack_dashboard/local/local_settings.py.example}
# Allow overriding the default Apache user and group, default to
# current user and his default group.
APACHE_USER=${APACHE_USER:-$USER}
APACHE_GROUP=${APACHE_GROUP:-$(id -gn $APACHE_USER)}
# Functions
# ---------
# utility method of setting python option
function _horizon_config_set() {
local file=$1
local section=$2
local option=$3
local value=$4
if grep -q "^$section" $file; then
line=$(sed -ne "/^$section/,/^}/ { /^ *'$option':/ p; }" $file)
if [ -n "$line" ]; then
sed -i -e "/^$section/,/^}/ s/^\( *'$option'\) *:.*$/\1: $value,/" $file
else
sed -i -e "/^$section/ a\n '$option': $value,\n" $file
fi
else
echo -e "\n\n$section = {\n '$option': $value,\n}" >> $file
fi
}
# Basic install of upstream nodejs for platforms that want it
function install_nodejs() {
if [[ $(which node) ]]; then
echo "You already appear to have nodejs, skipping install"
return
fi
# There are several node deployment scripts; one may be more
# appropriate at some future point, but for now direct download is
# the simplest way. The version barely matters for lesscss which
# doesn't use anything fancy.
local ver=0.10.1
local nodejs=node-v${ver}-linux-x64
local tar=$nodejs.tar.gz
local nodejs_url=http://nodejs.org/dist/v${ver}/${tar}
curl -Ss ${nodejs_url} | tar -C ${DEST} -xz
if [ $? -ne 0 ]; then
echo "*** Download of nodejs failed"
return 1
fi
# /usr/bin so it gets found in the PATH available to horizon
sudo ln -s $DEST/$nodejs/bin/node /usr/bin/node
}
# Entry Points
# ------------
# cleanup_horizon() - Remove residual data files, anything left over from previous
# runs that a clean run would need to clean up
function cleanup_horizon() {
if [[ is_fedora && $DISTRO =~ (rhel6) ]]; then
# if the /usr/bin/node link looks like it's pointing into $DEST,
# then we installed it via install_nodejs
if [[ $(readlink -f /usr/bin/node) =~ ($DEST) ]]; then
sudo rm /usr/bin/node
fi
fi
}
# configure_horizon() - Set config files, create data dirs, etc
function configure_horizon() {
setup_develop $HORIZON_DIR
}
# init_horizon() - Initialize databases, etc.
function init_horizon() {
# Remove stale session database.
rm -f $HORIZON_DIR/openstack_dashboard/local/dashboard_openstack.sqlite3
# ``local_settings.py`` is used to override horizon default settings.
local_settings=$HORIZON_DIR/openstack_dashboard/local/local_settings.py
cp $HORIZON_SETTINGS $local_settings
# enable loadbalancer dashboard in case service is enabled
if is_service_enabled q-lbaas; then
_horizon_config_set $local_settings OPENSTACK_QUANTUM_NETWORK enable_lb True
fi
# Initialize the horizon database (it stores sessions and notices shown to
# users). The user system is external (keystone).
cd $HORIZON_DIR
python manage.py syncdb --noinput
cd $TOP_DIR
# Create an empty directory that apache uses as docroot
sudo mkdir -p $HORIZON_DIR/.blackhole
HORIZON_REQUIRE=''
if is_ubuntu; then
APACHE_NAME=apache2
APACHE_CONF=sites-available/horizon
# Clean up the old config name
sudo rm -f /etc/apache2/sites-enabled/000-default
# Be a good citizen and use the distro tools here
sudo touch /etc/$APACHE_NAME/$APACHE_CONF
sudo a2ensite horizon
# WSGI isn't enabled by default, enable it
sudo a2enmod wsgi
elif is_fedora; then
APACHE_NAME=httpd
APACHE_CONF=conf.d/horizon.conf
if [[ "$os_RELEASE" -ge "18" ]]; then
# fedora 18 has Require all denied in its httpd.conf
# and requires explicit Require all granted
HORIZON_REQUIRE='Require all granted'
fi
sudo sed '/^Listen/s/^.*$/Listen 0.0.0.0:80/' -i /etc/httpd/conf/httpd.conf
elif is_suse; then
APACHE_NAME=apache2
APACHE_CONF=vhosts.d/horizon.conf
# WSGI isn't enabled by default, enable it
sudo a2enmod wsgi
else
exit_distro_not_supported "apache configuration"
fi
# Configure apache to run horizon
sudo sh -c "sed -e \"
s,%USER%,$APACHE_USER,g;
s,%GROUP%,$APACHE_GROUP,g;
s,%HORIZON_DIR%,$HORIZON_DIR,g;
s,%APACHE_NAME%,$APACHE_NAME,g;
s,%DEST%,$DEST,g;
s,%HORIZON_REQUIRE%,$HORIZON_REQUIRE,g;
\" $FILES/apache-horizon.template >/etc/$APACHE_NAME/$APACHE_CONF"
}
# install_horizon() - Collect source and prepare
function install_horizon() {
# Apache installation, because we mark it NOPRIME
if is_ubuntu; then
# Install apache2, which is NOPRIME'd
install_package apache2 libapache2-mod-wsgi
elif is_fedora; then
sudo rm -f /etc/httpd/conf.d/000-*
install_package httpd mod_wsgi
elif is_suse; then
install_package apache2 apache2-mod_wsgi
else
exit_distro_not_supported "apache installation"
fi
if [[ is_fedora && $DISTRO =~ (rhel6) ]]; then
# RHEL6 currently has no native way to get nodejs, so we do a
# basic install here (see cleanup_horizon too).
# TODO: does nova have a better way that we can limit
# requirement of site-wide nodejs install?
install_nodejs
fi
# NOTE(sdague) quantal changed the name of the node binary
if is_ubuntu; then
if [[ ! -e "/usr/bin/node" ]]; then
install_package nodejs-legacy
fi
elif is_fedora && [[ "$os_RELEASE" -ge "18" ]]; then
# fedora 18 and higher gets nodejs
install_package nodejs
fi
git_clone $HORIZON_REPO $HORIZON_DIR $HORIZON_BRANCH $HORIZON_TAG
}
# start_horizon() - Start running processes, including screen
function start_horizon() {
restart_service $APACHE_NAME
screen_it horizon "cd $HORIZON_DIR && sudo tail -f /var/log/$APACHE_NAME/horizon_error.log"
}
# stop_horizon() - Stop running processes (non-screen)
function stop_horizon() {
if is_ubuntu; then
stop_service apache2
elif is_fedora; then
stop_service httpd
elif is_suse; then
stop_service apache2
else
exit_distro_not_supported "apache configuration"
fi
}
# Restore xtrace
$XTRACE
# Local variables:
# mode: shell-script
# End: