ad43b3957e
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
239 lines
7.1 KiB
Plaintext
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:
|