From ef91bf564716f479c74b01ba8d6495101f86bc6b Mon Sep 17 00:00:00 2001 From: Fabrizio Vanni Date: Tue, 13 Oct 2015 16:02:24 +0100 Subject: [PATCH] devstack plugin interface adds interface files for freezer-web-ui to be installed as a devstack plugin Change-Id: If2005ea0ec5b1d9eecdaf89a2f014e0ae12ef4a8 NOTE: the freezer-web-ui plugin also installs the freezer client --- devstack/README.rst | 21 +++++++ devstack/files/_50_freezer.py.template | 14 +++++ devstack/lib/freezer-web-ui | 76 ++++++++++++++++++++++++++ devstack/local.conf.example | 17 ++++++ devstack/plugin.sh | 28 ++++++++++ devstack/settings | 18 ++++++ 6 files changed, 174 insertions(+) create mode 100644 devstack/README.rst create mode 100644 devstack/files/_50_freezer.py.template create mode 100644 devstack/lib/freezer-web-ui create mode 100644 devstack/local.conf.example create mode 100644 devstack/plugin.sh create mode 100644 devstack/settings diff --git a/devstack/README.rst b/devstack/README.rst new file mode 100644 index 0000000..195f833 --- /dev/null +++ b/devstack/README.rst @@ -0,0 +1,21 @@ +This directory contains the Freezer Web UI DevStack plugin. + +To configure the Freezer Web UI with DevStack, you will need to +enable this plugin by adding one line to the [[local|localrc]] +section of your local.conf file. + +To enable the plugin, add a line of the form:: + + enable_plugin freezer-web-ui [GITREF] + +where:: + + is the URL of a freezer-web-ui repository + [GITREF] is an optional git ref (branch/ref/tag). The default is master. + +For example:: + + enable_plugin freezer-web-ui https://github.com/stackforge/freezer-web-ui.git master + +For more information, see: + http://docs.openstack.org/developer/devstack/plugins.html diff --git a/devstack/files/_50_freezer.py.template b/devstack/files/_50_freezer.py.template new file mode 100644 index 0000000..0e5cd0a --- /dev/null +++ b/devstack/files/_50_freezer.py.template @@ -0,0 +1,14 @@ +# The name of the dashboard to be added to HORIZON['dashboards']. Required. +DASHBOARD = 'freezer_ui' + +# If set to True, this dashboard will not be added to the settings. +DISABLED = False + +# Until there is a more elegant SYSPATH var scheme... +import sys +sys.path.append('%FREEZER_WEB_UI_DIR%') + +# A list of applications to be added to INSTALLED_APPS. +ADD_INSTALLED_APPS = [ + 'freezer_ui', +] diff --git a/devstack/lib/freezer-web-ui b/devstack/lib/freezer-web-ui new file mode 100644 index 0000000..6704d12 --- /dev/null +++ b/devstack/lib/freezer-web-ui @@ -0,0 +1,76 @@ +#!/usr/bin/env bash + +# Install the Freezer Web UI in Horizon + +# add the following to localrc: +# enable_service freezer-web_ui + + +# Save trace setting +XTRACE=$(set +o | grep xtrace) +set +o xtrace + + +# Functions +# --------- + +function is_freezer_web_ui_enabled { + [[ ,${ENABLED_SERVICES} =~ ,"freezer-web-ui" ]] && return 0 +} + + +# executed during: clean +function cleanup_freezer_web_ui { + : +} + +# executed during: stack install +function install_freezer_web_ui { + if is_service_enabled horizon; then + sudo -H -E pip install -e git+${FREEZER_WEB_UI_REPO}@${FREEZER_WEB_UI_BRANCH}#egg=freezer_web_ui-origin_${FREEZER_WEB_UI_BRANCH} + else + echo "Horizon dashboard disabled. Freezer Web UI will not be installed" + fi +} + +# executed during: stack post-config +function configure_freezer_web_ui { + : +} + + +# executed during: stack extra +function init_freezer_web_ui { + if is_service_enabled horizon; then + + local dashboard_enabled_50_freezer_py="$HORIZON_DIR/openstack_dashboard/enabled/_50_freezer.py" + + sudo cp $FREEZER_WEB_UI_FILES/_50_freezer.py.template $dashboard_enabled_50_freezer_py + + sudo sed -e " + s|%FREEZER_WEB_UI_DIR%|$FREEZER_WEB_UI_DIR|g + " -i $dashboard_enabled_50_freezer_py + + fi +} + + +# executed during: stack extra +function start_freezer_web_ui { + restart_apache_server +} + + +# executed during: stop +function stop_freezer_web_ui { + : +} + + +function install_freezer_client { + sudo -H -E pip install -e git+${FREEZER_CLIENT_REPO}@${FREEZER_CLIENT_BRANCH}#egg=freezer-origin_${FREEZER_CLIENT_BRANCH} +} + + +# Restore xtrace +$XTRACE \ No newline at end of file diff --git a/devstack/local.conf.example b/devstack/local.conf.example new file mode 100644 index 0000000..fb04518 --- /dev/null +++ b/devstack/local.conf.example @@ -0,0 +1,17 @@ +[[local|localrc]] +disable_all_services + +enable_plugin freezer-web-ui https://github.com/stackforge/freezer-web-ui.git master + +enable_service rabbit mysql key + +# This is to keep the token small for testing +KEYSTONE_TOKEN_FORMAT=UUID + +# Modify passwords as needed +DATABASE_PASSWORD=secretdatabase +RABBIT_PASSWORD=secretrabbit +ADMIN_PASSWORD=secretadmin +SERVICE_PASSWORD=secretservice +SERVICE_TOKEN=111222333444 + diff --git a/devstack/plugin.sh b/devstack/plugin.sh new file mode 100644 index 0000000..3fd807f --- /dev/null +++ b/devstack/plugin.sh @@ -0,0 +1,28 @@ +# check for service enabled +if is_service_enabled freezer-web-ui; then + if [[ "$1" == "source" || "`type -t install_freezer_web_ui`" != 'function' ]]; then + # Initial source + source $FREEZER_WEB_UI_DIR/devstack/lib/freezer-web-ui + fi + + if [[ "$1" == "stack" && "$2" == "install" ]]; then + echo_summary "Installing Freezer Web UI" + install_freezer_client + install_freezer_web_ui + elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then + echo_summary "Configuring Freezer Web UI" + configure_freezer_web_ui + elif [[ "$1" == "stack" && "$2" == "extra" ]]; then + echo_summary "Initializing Freezer Web UI" + init_freezer_web_ui + start_freezer_web_ui + fi + + if [[ "$1" == "unstack" ]]; then + stop_freezer_web_ui + fi + + if [[ "$1" == "clean" ]]; then + cleanup_freezer_web_ui + fi +fi \ No newline at end of file diff --git a/devstack/settings b/devstack/settings new file mode 100644 index 0000000..3add479 --- /dev/null +++ b/devstack/settings @@ -0,0 +1,18 @@ +# Defaults +# -------- + +# Set up default directories +FREEZER_WEB_UI_DIR=$DEST/freezer-web-ui +FREEZER_WEB_UI_FILES=${FREEZER_WEB_UI_DIR}/devstack/files + +# Freezer Web UI repository +FREEZER_WEB_UI_REPO=${FREEZER_WEB_UI_REPO:-${GIT_BASE}/stackforge/freezer-web-ui.git} +FREEZER_WEB_UI_BRANCH=${FREEZER_WEB_UI_BRANCH:-master} + +# Freezer client +FREEZER_CLIENT_REPO=${FREEZER_CLIENT_REPO:-${GIT_BASE}/stackforge/freezer.git} +FREEZER_CLIENT_DIR=$DEST/freezer +FREEZER_CLIENT_BRANCH=${FREEZER_CLIENT_BRANCH:-master} + + +enable_service freezer-web-ui freezer-client