| 1 | 1 |
new file mode 100755 |
| ... | ... |
@@ -0,0 +1,43 @@ |
| 0 |
+#!/usr/bin/env bash |
|
| 1 |
+ |
|
| 2 |
+# **savanna.sh** |
|
| 3 |
+ |
|
| 4 |
+# Sanity check that Savanna started if enabled |
|
| 5 |
+ |
|
| 6 |
+echo "*********************************************************************" |
|
| 7 |
+echo "Begin DevStack Exercise: $0" |
|
| 8 |
+echo "*********************************************************************" |
|
| 9 |
+ |
|
| 10 |
+# This script exits on an error so that errors don't compound and you see |
|
| 11 |
+# only the first error that occurred. |
|
| 12 |
+set -o errexit |
|
| 13 |
+ |
|
| 14 |
+# Print the commands being run so that we can see the command that triggers |
|
| 15 |
+# an error. It is also useful for following allowing as the install occurs. |
|
| 16 |
+set -o xtrace |
|
| 17 |
+ |
|
| 18 |
+ |
|
| 19 |
+# Settings |
|
| 20 |
+# ======== |
|
| 21 |
+ |
|
| 22 |
+# Keep track of the current directory |
|
| 23 |
+EXERCISE_DIR=$(cd $(dirname "$0") && pwd) |
|
| 24 |
+TOP_DIR=$(cd $EXERCISE_DIR/..; pwd) |
|
| 25 |
+ |
|
| 26 |
+# Import common functions |
|
| 27 |
+source $TOP_DIR/functions |
|
| 28 |
+ |
|
| 29 |
+# Import configuration |
|
| 30 |
+source $TOP_DIR/openrc |
|
| 31 |
+ |
|
| 32 |
+# Import exercise configuration |
|
| 33 |
+source $TOP_DIR/exerciserc |
|
| 34 |
+ |
|
| 35 |
+is_service_enabled savanna || exit 55 |
|
| 36 |
+ |
|
| 37 |
+curl http://$SERVICE_HOST:8386/ 2>/dev/null | grep -q 'Auth' || die $LINENO "Savanna API not functioning!" |
|
| 38 |
+ |
|
| 39 |
+set +o xtrace |
|
| 40 |
+echo "*********************************************************************" |
|
| 41 |
+echo "SUCCESS: End DevStack Exercise: $0" |
|
| 42 |
+echo "*********************************************************************" |
| 0 | 43 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,31 @@ |
| 0 |
+# savanna.sh - DevStack extras script to install Savanna |
|
| 1 |
+ |
|
| 2 |
+if is_service_enabled savanna; then |
|
| 3 |
+ if [[ "$1" == "source" ]]; then |
|
| 4 |
+ # Initial source |
|
| 5 |
+ source $TOP_DIR/lib/savanna |
|
| 6 |
+ source $TOP_DIR/lib/savanna-dashboard |
|
| 7 |
+ elif [[ "$1" == "stack" && "$2" == "install" ]]; then |
|
| 8 |
+ echo_summary "Installing Savanna" |
|
| 9 |
+ install_savanna |
|
| 10 |
+ if is_service_enabled horizon; then |
|
| 11 |
+ install_savanna_dashboard |
|
| 12 |
+ fi |
|
| 13 |
+ elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then |
|
| 14 |
+ echo_summary "Configuring Savanna" |
|
| 15 |
+ configure_savanna |
|
| 16 |
+ if is_service_enabled horizon; then |
|
| 17 |
+ configure_savanna_dashboard |
|
| 18 |
+ fi |
|
| 19 |
+ elif [[ "$1" == "stack" && "$2" == "extra" ]]; then |
|
| 20 |
+ echo_summary "Initializing Savanna" |
|
| 21 |
+ start_savanna |
|
| 22 |
+ fi |
|
| 23 |
+ |
|
| 24 |
+ if [[ "$1" == "unstack" ]]; then |
|
| 25 |
+ stop_savanna |
|
| 26 |
+ if is_service_enabled horizon; then |
|
| 27 |
+ cleanup_savanna_dashboard |
|
| 28 |
+ fi |
|
| 29 |
+ fi |
|
| 30 |
+fi |
| 0 | 31 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,97 @@ |
| 0 |
+# lib/savanna |
|
| 1 |
+ |
|
| 2 |
+# Dependencies: |
|
| 3 |
+# ``functions`` file |
|
| 4 |
+# ``DEST``, ``DATA_DIR``, ``STACK_USER`` must be defined |
|
| 5 |
+# ``ADMIN_{TENANT_NAME|PASSWORD}`` must be defined
|
|
| 6 |
+ |
|
| 7 |
+# ``stack.sh`` calls the entry points in this order: |
|
| 8 |
+# |
|
| 9 |
+# install_savanna |
|
| 10 |
+# configure_savanna |
|
| 11 |
+# start_savanna |
|
| 12 |
+# stop_savanna |
|
| 13 |
+ |
|
| 14 |
+# Save trace setting |
|
| 15 |
+XTRACE=$(set +o | grep xtrace) |
|
| 16 |
+set +o xtrace |
|
| 17 |
+ |
|
| 18 |
+ |
|
| 19 |
+# Defaults |
|
| 20 |
+# -------- |
|
| 21 |
+ |
|
| 22 |
+# Set up default repos |
|
| 23 |
+SAVANNA_REPO=${SAVANNA_REPO:-${GIT_BASE}/openstack/savanna.git}
|
|
| 24 |
+SAVANNA_BRANCH=${SAVANNA_BRANCH:-master}
|
|
| 25 |
+ |
|
| 26 |
+# Set up default directories |
|
| 27 |
+SAVANNA_DIR=$DEST/savanna |
|
| 28 |
+SAVANNA_CONF_DIR=${SAVANNA_CONF_DIR:-/etc/savanna}
|
|
| 29 |
+SAVANNA_CONF_FILE=savanna.conf |
|
| 30 |
+ADMIN_TENANT_NAME=${ADMIN_TENANT_NAME:-admin}
|
|
| 31 |
+ADMIN_NAME=${ADMIN_NAME:-admin}
|
|
| 32 |
+ADMIN_PASSWORD=${ADMIN_PASSWORD:-nova}
|
|
| 33 |
+SAVANNA_DEBUG=${SAVANNA_DEBUG:-True}
|
|
| 34 |
+ |
|
| 35 |
+# Support entry points installation of console scripts |
|
| 36 |
+if [[ -d $SAVANNA_DIR/bin ]]; then |
|
| 37 |
+ SAVANNA_BIN_DIR=$SAVANNA_DIR/bin |
|
| 38 |
+else |
|
| 39 |
+ SAVANNA_BIN_DIR=$(get_python_exec_prefix) |
|
| 40 |
+fi |
|
| 41 |
+ |
|
| 42 |
+# Functions |
|
| 43 |
+# --------- |
|
| 44 |
+ |
|
| 45 |
+# configure_savanna() - Set config files, create data dirs, etc |
|
| 46 |
+function configure_savanna() {
|
|
| 47 |
+ |
|
| 48 |
+ if [[ ! -d $SAVANNA_CONF_DIR ]]; then |
|
| 49 |
+ sudo mkdir -p $SAVANNA_CONF_DIR |
|
| 50 |
+ fi |
|
| 51 |
+ sudo chown $STACK_USER $SAVANNA_CONF_DIR |
|
| 52 |
+ |
|
| 53 |
+ # Copy over savanna configuration file and configure common parameters. |
|
| 54 |
+ cp $SAVANNA_DIR/etc/savanna/savanna.conf.sample $SAVANNA_CONF_DIR/$SAVANNA_CONF_FILE |
|
| 55 |
+ |
|
| 56 |
+ iniset $SAVANNA_CONF_DIR/$SAVANNA_CONF_FILE DEFAULT os_admin_password $ADMIN_PASSWORD |
|
| 57 |
+ iniset $SAVANNA_CONF_DIR/$SAVANNA_CONF_FILE DEFAULT os_admin_username $ADMIN_NAME |
|
| 58 |
+ iniset $SAVANNA_CONF_DIR/$SAVANNA_CONF_FILE DEFAULT os_admin_tenant_name $ADMIN_TENANT_NAME |
|
| 59 |
+ iniset $SAVANNA_CONF_DIR/$SAVANNA_CONF_FILE DEFAULT debug $SAVANNA_DEBUG |
|
| 60 |
+ |
|
| 61 |
+ recreate_database savanna utf8 |
|
| 62 |
+ iniset $SAVANNA_CONF_DIR/$SAVANNA_CONF_FILE database sql_connection `database_connection_url savanna` |
|
| 63 |
+ inicomment $SAVANNA_CONF_DIR/$SAVANNA_CONF_FILE database connection |
|
| 64 |
+ |
|
| 65 |
+ if is_service_enabled neutron; then |
|
| 66 |
+ iniset $SAVANNA_CONF_DIR/$SAVANNA_CONF_FILE DEFAULT use_neutron true |
|
| 67 |
+ iniset $SAVANNA_CONF_DIR/$SAVANNA_CONF_FILE DEFAULT use_floating_ips true |
|
| 68 |
+ fi |
|
| 69 |
+ |
|
| 70 |
+ iniset $SAVANNA_CONF_DIR/$SAVANNA_CONF_FILE DEFAULT use_syslog $SYSLOG |
|
| 71 |
+} |
|
| 72 |
+ |
|
| 73 |
+# install_savanna() - Collect source and prepare |
|
| 74 |
+function install_savanna() {
|
|
| 75 |
+ git_clone $SAVANNA_REPO $SAVANNA_DIR $SAVANNA_BRANCH |
|
| 76 |
+ setup_develop $SAVANNA_DIR |
|
| 77 |
+} |
|
| 78 |
+ |
|
| 79 |
+# start_savanna() - Start running processes, including screen |
|
| 80 |
+function start_savanna() {
|
|
| 81 |
+ screen_it savanna "cd $SAVANNA_DIR && $SAVANNA_BIN_DIR/savanna-api --config-file $SAVANNA_CONF_DIR/$SAVANNA_CONF_FILE" |
|
| 82 |
+} |
|
| 83 |
+ |
|
| 84 |
+# stop_savanna() - Stop running processes |
|
| 85 |
+function stop_savanna() {
|
|
| 86 |
+ # Kill the Savanna screen windows |
|
| 87 |
+ screen -S $SCREEN_NAME -p savanna -X kill |
|
| 88 |
+} |
|
| 89 |
+ |
|
| 90 |
+ |
|
| 91 |
+# Restore xtrace |
|
| 92 |
+$XTRACE |
|
| 93 |
+ |
|
| 94 |
+# Local variables: |
|
| 95 |
+# mode: shell-script |
|
| 96 |
+# End: |
| 0 | 97 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,70 @@ |
| 0 |
+# lib/savanna-dashboard |
|
| 1 |
+ |
|
| 2 |
+# Dependencies: |
|
| 3 |
+# ``functions`` file |
|
| 4 |
+# ``DEST``, ``DATA_DIR``, ``STACK_USER`` must be defined |
|
| 5 |
+# ``SERVICE_HOST |
|
| 6 |
+ |
|
| 7 |
+# ``stack.sh`` calls the entry points in this order: |
|
| 8 |
+# |
|
| 9 |
+# install_savanna_dashboard |
|
| 10 |
+# configure_savanna_dashboard |
|
| 11 |
+# cleanup_savanna_dashboard |
|
| 12 |
+ |
|
| 13 |
+# Save trace setting |
|
| 14 |
+XTRACE=$(set +o | grep xtrace) |
|
| 15 |
+set +o xtrace |
|
| 16 |
+ |
|
| 17 |
+source $TOP_DIR/lib/horizon |
|
| 18 |
+ |
|
| 19 |
+# Defaults |
|
| 20 |
+# -------- |
|
| 21 |
+ |
|
| 22 |
+# Set up default repos |
|
| 23 |
+SAVANNA_DASHBOARD_REPO=${SAVANNA_DASHBOARD_REPO:-${GIT_BASE}/openstack/savanna-dashboard.git}
|
|
| 24 |
+SAVANNA_DASHBOARD_BRANCH=${SAVANNA_DASHBOARD_BRANCH:-master}
|
|
| 25 |
+ |
|
| 26 |
+SAVANNA_PYTHONCLIENT_REPO=${SAVANNA_PYTHONCLIENT_REPO:-${GIT_BASE}/openstack/python-savannaclient.git}
|
|
| 27 |
+SAVANNA_PYTHONCLIENT_BRANCH=${SAVANNA_PYTHONCLIENT_BRANCH:-master}
|
|
| 28 |
+ |
|
| 29 |
+# Set up default directories |
|
| 30 |
+SAVANNA_DASHBOARD_DIR=$DEST/savanna_dashboard |
|
| 31 |
+SAVANNA_PYTHONCLIENT_DIR=$DEST/python-savannaclient |
|
| 32 |
+ |
|
| 33 |
+# Functions |
|
| 34 |
+# --------- |
|
| 35 |
+ |
|
| 36 |
+function configure_savanna_dashboard() {
|
|
| 37 |
+ |
|
| 38 |
+ echo -e "SAVANNA_URL = \"http://$SERVICE_HOST:8386/v1.1\"\nAUTO_ASSIGNMENT_ENABLED = False" >> $HORIZON_DIR/openstack_dashboard/local/local_settings.py |
|
| 39 |
+ echo -e "HORIZON_CONFIG['dashboards'] += ('savanna',)\nINSTALLED_APPS += ('savannadashboard',)" >> $HORIZON_DIR/openstack_dashboard/settings.py
|
|
| 40 |
+ |
|
| 41 |
+ if is_service_enabled neutron; then |
|
| 42 |
+ echo -e "SAVANNA_USE_NEUTRON = True" >> $HORIZON_DIR/openstack_dashboard/local/local_settings.py |
|
| 43 |
+ fi |
|
| 44 |
+} |
|
| 45 |
+ |
|
| 46 |
+# install_savanna_dashboard() - Collect source and prepare |
|
| 47 |
+function install_savanna_dashboard() {
|
|
| 48 |
+ install_python_savannaclient |
|
| 49 |
+ git_clone $SAVANNA_DASHBOARD_REPO $SAVANNA_DASHBOARD_DIR $SAVANNA_DASHBOARD_BRANCH |
|
| 50 |
+ setup_develop $SAVANNA_DASHBOARD_DIR |
|
| 51 |
+} |
|
| 52 |
+ |
|
| 53 |
+function install_python_savannaclient() {
|
|
| 54 |
+ git_clone $SAVANNA_PYTHONCLIENT_REPO $SAVANNA_PYTHONCLIENT_DIR $SAVANNA_PYTHONCLIENT_BRANCH |
|
| 55 |
+ setup_develop $SAVANNA_PYTHONCLIENT_DIR |
|
| 56 |
+} |
|
| 57 |
+ |
|
| 58 |
+# Cleanup file settings.py from Savanna |
|
| 59 |
+function cleanup_savanna_dashboard() {
|
|
| 60 |
+ sed -i '/savanna/d' $HORIZON_DIR/openstack_dashboard/settings.py |
|
| 61 |
+} |
|
| 62 |
+ |
|
| 63 |
+# Restore xtrace |
|
| 64 |
+$XTRACE |
|
| 65 |
+ |
|
| 66 |
+# Local variables: |
|
| 67 |
+# mode: shell-script |
|
| 68 |
+# End: |
|
| 69 |
+ |