From b562e6a710b34609f95bcc46e2ae50e7812aa103 Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Mon, 19 Nov 2012 16:00:01 -0500 Subject: [PATCH] move horizon logic to lib to clean up stack.sh pre holiday refactor extrodinare, get the horizon code over fully into lib/horizon so that all these fixes aren't scattered through stack.sh Change-Id: I7f26c5c6708d5693048eb7b1ce792122adbc7351 --- lib/horizon | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++ stack.sh | 72 +++------------------------- unstack.sh | 3 +- 3 files changed, 142 insertions(+), 66 deletions(-) create mode 100644 lib/horizon diff --git a/lib/horizon b/lib/horizon new file mode 100644 index 0000000000..c6c96dae59 --- /dev/null +++ b/lib/horizon @@ -0,0 +1,133 @@ +# lib/horizon +# Functions to control the configuration and operation of the horizon service +# + +# Dependencies: +# ``functions`` file +# ``SERVICE_{TENANT_NAME|PASSWORD}`` must 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 +# -------- + +# + +# Set up default directories +HORIZON_DIR=$DEST/horizon + +# Allow overriding the default Apache user and group, default both to +# current user. +APACHE_USER=${APACHE_USER:-$USER} +APACHE_GROUP=${APACHE_GROUP:-$APACHE_USER} + + +# 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() { + # kill instances (nova) + # delete image files (glance) + # This function intentionally left blank + : +} + +# 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 $FILES/horizon_settings.py $local_settings + + # 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 + + + if [[ "$os_PACKAGE" = "deb" ]]; 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 + else + # Install httpd, which is NOPRIME'd + APACHE_NAME=httpd + APACHE_CONF=conf.d/horizon.conf + sudo sed '/^Listen/s/^.*$/Listen 0.0.0.0:80/' -i /etc/httpd/conf/httpd.conf + 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; + \" $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 [[ "$os_PACKAGE" = "deb" ]]; then + # Install apache2, which is NOPRIME'd + install_package apache2 libapache2-mod-wsgi + else + sudo rm -f /etc/httpd/conf.d/000-* + install_package httpd mod_wsgi + fi + + # NOTE(sdague) quantal changed the name of the node binary + if [[ "$os_PACKAGE" = "deb" ]]; then + if [[ ! -e "/usr/bin/node" ]]; then + install_package nodejs-legacy + fi + 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() { + stop_service apache2 +} + +# Restore xtrace +$XTRACE diff --git a/stack.sh b/stack.sh index 9b830b13b0..9ecc749954 100755 --- a/stack.sh +++ b/stack.sh @@ -306,6 +306,7 @@ SERVICE_TIMEOUT=${SERVICE_TIMEOUT:-60} # ================== # Get project function libraries +source $TOP_DIR/lib/horizon source $TOP_DIR/lib/keystone source $TOP_DIR/lib/glance source $TOP_DIR/lib/nova @@ -568,15 +569,6 @@ read_password ADMIN_PASSWORD "ENTER A PASSWORD TO USE FOR HORIZON AND KEYSTONE ( SERVICE_TENANT_NAME=${SERVICE_TENANT_NAME:-service} -# Horizon -# ------- - -# Allow overriding the default Apache user and group, default both to -# current user. -APACHE_USER=${APACHE_USER:-$USER} -APACHE_GROUP=${APACHE_GROUP:-$APACHE_USER} - - # Log files # --------- @@ -756,16 +748,6 @@ if is_service_enabled $DATABASE_BACKENDS; then install_database fi -if is_service_enabled horizon; then - if [[ "$os_PACKAGE" = "deb" ]]; then - # Install apache2, which is NOPRIME'd - install_package apache2 libapache2-mod-wsgi - else - sudo rm -f /etc/httpd/conf.d/000-* - install_package httpd mod_wsgi - fi -fi - if is_service_enabled q-agt; then if is_quantum_ovs_base_plugin "$Q_PLUGIN"; then # Install deps @@ -840,8 +822,8 @@ if is_service_enabled n-novnc; then git_clone $NOVNC_REPO $NOVNC_DIR $NOVNC_BRANCH fi if is_service_enabled horizon; then - # django powered web control panel for openstack - git_clone $HORIZON_REPO $HORIZON_DIR $HORIZON_BRANCH $HORIZON_TAG + # dashboard + install_horizon fi if is_service_enabled quantum; then git_clone $QUANTUM_CLIENT_REPO $QUANTUM_CLIENT_DIR $QUANTUM_CLIENT_BRANCH @@ -899,7 +881,7 @@ if is_service_enabled nova; then configure_nova fi if is_service_enabled horizon; then - setup_develop $HORIZON_DIR + configure_horizon fi if is_service_enabled quantum; then setup_develop $QUANTUM_CLIENT_DIR @@ -1035,48 +1017,8 @@ fi if is_service_enabled horizon; then echo_summary "Configuring and starting 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 $FILES/horizon_settings.py $local_settings - - # 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 - - if [[ "$os_PACKAGE" = "deb" ]]; 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 - else - # Install httpd, which is NOPRIME'd - APACHE_NAME=httpd - APACHE_CONF=conf.d/horizon.conf - sudo sed '/^Listen/s/^.*$/Listen 0.0.0.0:80/' -i /etc/httpd/conf/httpd.conf - 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; - \" $FILES/apache-horizon.template >/etc/$APACHE_NAME/$APACHE_CONF" - - restart_service $APACHE_NAME + init_horizon + start_horizon fi @@ -1958,7 +1900,7 @@ if is_service_enabled ceilometer; then echo_summary "Starting Ceilometer" start_ceilometer fi -screen_it horizon "cd $HORIZON_DIR && sudo tail -f /var/log/$APACHE_NAME/horizon_error.log" + screen_it swift "cd $SWIFT_DIR && $SWIFT_DIR/bin/swift-proxy-server ${SWIFT_CONFIG_DIR}/proxy-server.conf -v" # Starting the nova-objectstore only if swift3 service is not enabled. diff --git a/unstack.sh b/unstack.sh index 1a2cad839e..0040cf1e99 100755 --- a/unstack.sh +++ b/unstack.sh @@ -26,6 +26,7 @@ DATA_DIR=${DATA_DIR:-${DEST}/data} # Get project function libraries source $TOP_DIR/lib/cinder +source $TOP_DIR/lib/horizon # Determine what system we are running on. This provides ``os_VENDOR``, # ``os_RELEASE``, ``os_UPDATE``, ``os_PACKAGE``, ``os_CODENAME`` @@ -51,7 +52,7 @@ fi # Apache has the WSGI processes if is_service_enabled horizon; then - stop_service apache2 + stop_horizon fi SCSI_PERSIST_DIR=$CINDER_STATE_PATH/volumes/*