From 09d39f34e30309dda22836a4f39fc1685d9661f9 Mon Sep 17 00:00:00 2001 From: Romain Ziba <romain.ziba@eurogiciel.fr> Date: Mon, 18 May 2015 16:51:42 +0200 Subject: [PATCH] Install sticks, client and dashboard with devstack Installation of sticks, python-sticksclient and sticks-dashboard if sticks-api and sticks-agent are put in local file of devstack Change-Id: Iea3254b635e3e6a10c96cac8908d665deed3cfc8 --- contrib/devstack/README.rst | 0 contrib/devstack/extras.d/60-sticks.sh | 39 +++++ contrib/devstack/lib/sticks | 222 +++++++++++++++++++++++++ setup.cfg | 6 +- 4 files changed, 266 insertions(+), 1 deletion(-) create mode 100644 contrib/devstack/README.rst create mode 100644 contrib/devstack/extras.d/60-sticks.sh create mode 100644 contrib/devstack/lib/sticks diff --git a/contrib/devstack/README.rst b/contrib/devstack/README.rst new file mode 100644 index 0000000..e69de29 diff --git a/contrib/devstack/extras.d/60-sticks.sh b/contrib/devstack/extras.d/60-sticks.sh new file mode 100644 index 0000000..2ed289b --- /dev/null +++ b/contrib/devstack/extras.d/60-sticks.sh @@ -0,0 +1,39 @@ +# sticks.sh - Devstack extras script to install Sticks + +if is_service_enabled sticks-api sticks-agent; then + if [[ "$1" == "source" ]]; then + # Initial source + source $TOP_DIR/lib/sticks + elif [[ "$1" == "stack" && "$2" == "install" ]]; then + echo_summary "Installing Sticks" + install_sticks + install_sticksclient + + if is_service_enabled sticks-dashboard; then + install_sticksdashboard + fi + cleanup_sticks + elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then + echo_summary "Configuring Sticks" + configure_sticks + if is_service_enabled sticks-dashboard; then + configure_sticksdashboard + fi + if is_service_enabled key; then + create_sticks_accounts + fi + + elif [[ "$1" == "stack" && "$2" == "extra" ]]; then + # Initialize sticks + echo_summary "Initializing Sticks" + init_sticks + + # Start the Sticks API and Sticks agent components + echo_summary "Starting Sticks" + start_sticks + fi + + if [[ "$1" == "unstack" ]]; then + stop_sticks + fi +fi diff --git a/contrib/devstack/lib/sticks b/contrib/devstack/lib/sticks new file mode 100644 index 0000000..0699bff --- /dev/null +++ b/contrib/devstack/lib/sticks @@ -0,0 +1,222 @@ +# lib/sticks +# Install and start **Sticks** service + +# To enable a minimal set of Sticks services: +# - add the following to localrc: +# +# enable_service sticks-api sticks-agent +# +# Dependencies: +# - functions +# - OS_AUTH_URL for auth in api +# - DEST, HORIZON_DIR, DATA_DIR set to the destination directory +# - SERVICE_PASSWORD, SERVICE_TENANT_NAME for auth in api +# - IDENTITY_API_VERSION for the version of Keystone +# - STACK_USER service user + +# stack.sh +# --------- +# install_sticks +# install_sticksclient +# configure_sticks +# init_sticks +# start_sticks +# stop_sticks +# cleanup_sticks + +# Save trace setting +XTRACE=$(set +o | grep xtrace) +set +o xtrace + + +# Defaults +# -------- + +# Set up default directories +STICKS_DIR=$DEST/sticks +STICKS_CONF_DIR=/etc/sticks +STICKS_CONF=$STICKS_CONF_DIR/sticks.conf +STICKS_POLICY=$STICKS_CONF_DIR/policy.json +STICKS_API_LOG_DIR=/var/log/sticks +STICKS_AUTH_CACHE_DIR=${STICKS_AUTH_CACHE_DIR:-/var/cache/sticks} +STICKS_REPORTS_DIR=${DATA_DIR}/sticks/reports +STICKS_CLIENT_DIR=$DEST/python-sticksclient +STICKS_DASHBOARD_DIR=$DEST/sticks-dashboard + +# Support potential entry-points console scripts +if [[ -d $STICKS_DIR/bin ]]; then + STICKS_BIN_DIR=$STICKS_DIR/bin +else + STICKS_BIN_DIR=$(get_python_exec_prefix) +fi + +# Set up database backend +STICKS_BACKEND=${STICKS_BACKEND:-sqlite} + +# Set sticks repository +STICKS_REPO=${STICKS_REPO:-https://github.com/stackforge/sticks.git} +STICKS_BRANCH=${STICKS_BRANCH:-master} +STICKS_CLIENT_REPO=${STICKS_CLIENT_REPO:-https://github.com/stackforge/python-sticksclient.git} +STICKS_CLIENT_BRANCH=${STICKS_CLIENT_BRANCH:-master} +STICKS_DASHBOARD_REPO=${STICKS_DASHBOARD_REPO:-https://github.com/stackforge/sticks-dashboard.git} +STICKS_DASHBOARD_BRANCH=${STICKS_DASHBOARD_BRANCH:-master} + +# Set Sticks connection info +STICKS_SERVICE_HOST=${STICKS_SERVICE_HOST:-$SERVICE_HOST} +STICKS_SERVICE_PORT=${STICKS_SERVICE_PORT:-8888} +STICKS_SERVICE_HOSTPORT="$STICKS_SERVICE_HOST:$STICKS_SERVICE_PORT" +STICKS_SERVICE_PROTOCOL=${STICKS_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL} + +# Set Sticks auth info +STICKS_ADMIN_USER=${STICKS_ADMIN_USER:-"admin"} +STICKS_ADMIN_PASSWORD=${STICKS_ADMIN_PASSWORD:-$ADMIN_PASSWORD} +STICKS_ADMIN_TENANT=${STICKS_ADMIN_TENANT:-"admin"} + +# Tell Tempest this project is present +TEMPEST_SERVICES+=,sticks + + +# Functions +# --------- + +# create_sticks_accounts() - Set up common required sticks accounts + +# Tenant User Roles +# ------------------------------------------------------------------ +# service sticks admin # if enabled +function create_sticks_accounts { + + SERVICE_TENANT=$(openstack project list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }") + ADMIN_ROLE=$(openstack role list | awk "/ admin / { print \$2 }") + + # Sticks + if [[ "$ENABLED_SERVICES" =~ "sticks-api" ]]; then + STICKS_USER=$(openstack user create \ + sticks \ + --password "$SERVICE_PASSWORD" \ + --project $SERVICE_TENANT \ + --email sticks@example.com \ + | grep " id " | get_field 2) + openstack role add \ + $ADMIN_ROLE \ + --project $SERVICE_TENANT \ + --user $STICKS_USER + if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then + STICKS_SERVICE=$(openstack service create \ + sticks \ + --type=helpdesk \ + --description="Helpdesk service" \ + | grep " id " | get_field 2) + openstack endpoint create \ + $STICKS_SERVICE \ + --region RegionOne \ + --publicurl "$STICKS_SERVICE_PROTOCOL://$STICKS_SERVICE_HOSTPORT" \ + --adminurl "$STICKS_SERVICE_PROTOCOL://$STICKS_SERVICE_HOSTPORT" \ + --internalurl "$STICKS_SERVICE_PROTOCOL://$STICKS_SERVICE_HOSTPORT" + fi + fi +} + + +# Test if any Sticks services are enabled +# is_sticks_enabled +function is_sticks_enabled { + [[ ,${ENABLED_SERVICES} =~ ,"sticks-" ]] && return 0 + return 1 +} + +# cleanup_sticks() - Remove residual data files, anything left over from previous +# runs that a clean run would need to clean up +function cleanup_sticks { + # Clean up dirs + rm -rf $STICKS_AUTH_CACHE_DIR/* + rm -rf $STICKS_CONF_DIR/* +} + +# configure_sticks() - Set config files, create data dirs, etc +function configure_sticks { + setup_develop $STICKS_DIR + + sudo mkdir -m 755 -p $STICKS_CONF_DIR + sudo chown $STACK_USER $STICKS_CONF_DIR + + sudo mkdir -m 755 -p $STICKS_API_LOG_DIR + sudo chown $STACK_USER $STICKS_API_LOG_DIR + + cp $STICKS_DIR$STICKS_CONF.sample $STICKS_CONF + cp $STICKS_DIR$STICKS_POLICY $STICKS_POLICY + + # Default + iniset $STICKS_CONF DEFAULT verbose True + iniset $STICKS_CONF DEFAULT debug "$ENABLE_DEBUG_LOG_LEVEL" + iniset $STICKS_CONF DEFAULT sql_connection `database_connection_url sticks` + + # auth + iniset $STICKS_CONF keystone_authtoken auth_uri "$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:5000/v2.0/" + iniset $STICKS_CONF keystone_authtoken admin_user sticks + iniset $STICKS_CONF keystone_authtoken admin_password $SERVICE_PASSWORD + iniset $STICKS_CONF keystone_authtoken admin_tenant_name $SERVICE_TENANT_NAME + iniset $STICKS_CONF keystone_authtoken region $REGION_NAME + iniset $STICKS_CONF keystone_authtoken auth_host $KEYSTONE_AUTH_HOST + iniset $STICKS_CONF keystone_authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL + iniset $STICKS_CONF keystone_authtoken auth_port $KEYSTONE_AUTH_PORT + iniset $STICKS_CONF keystone_authtoken signing_dir $STICKS_AUTH_CACHE_DIR +} + +# configure_sticksdashboard() +function configure_sticksdashboard { + ln -s $STICKS_DASHBOARD_DIR/_sticks.py.example $HORIZON_DIR/openstack_dashboard/local/enabled/_60_sticks.py +} + +# init_sticks() - Initialize Sticks database +function init_sticks { + # Delete existing cache + sudo rm -rf $STICKS_AUTH_CACHE_DIR + sudo mkdir -p $STICKS_AUTH_CACHE_DIR + sudo chown $STACK_USER $STICKS_AUTH_CACHE_DIR +} + +# install_sticks() - Collect source and prepare +function install_sticks { + git_clone $STICKS_REPO $STICKS_DIR $STICKS_BRANCH + setup_develop $STICKS_DIR +} + +# install_sticksclient() - Collect source and prepare +function install_sticksclient { + git_clone $STICKS_CLIENT_REPO $STICKS_CLIENT_DIR $STICKS_CLIENT_BRANCH + setup_develop $STICKS_CLIENT_DIR +} + +# install_sticksdashboard() - Collect source and prepare +function install_sticksdashboard { + git_clone $STICKS_DASHBOARD_REPO $STICKS_DASHBOARD_DIR $STICKS_DASHBOARD_BRANCH + setup_develop $STICKS_DASHBOARD_DIR +} + + +# start_sticks() - Start running processes, including screen +function start_sticks { + screen_it sticks-agent "cd $STICKS_DIR; $STICKS_BIN_DIR/sticks-agent --config-file=$STICKS_CONF" + screen_it sticks-api "cd $STICKS_DIR; $STICKS_BIN_DIR/sticks-api --config-file=$STICKS_CONF" + echo "Waiting for sticks-api ($STICKS_SERVICE_HOST:$STICKS_SERVICE_PORT) to start..." + if ! timeout $SERVICE_TIMEOUT sh -c "while ! curl --noproxy '*' -s http://$STICKS_SERVICE_HOST:$STICKS_SERVICE_PORT/v1/ >/dev/null; do sleep 1; done"; then + die $LINENO "sticks-api did not start" + fi +} + +# stop_sticks() - Stop running processes +function stop_sticks { + # Kill the sticks screen windows + for serv in sticks-api sticks-agent; do + screen_stop $serv + done +} + + +# Restore xtrace +$XTRACE + +# Local variables: +# mode: shell-script +# End: diff --git a/setup.cfg b/setup.cfg index 36202db..a960ede 100644 --- a/setup.cfg +++ b/setup.cfg @@ -47,5 +47,9 @@ mapping_file = babel.cfg output_file = sticks/locale/sticks.pot [entry_points] +console_scripts = + sticks-api = sticks.cli.api:main + sticks-agent = sticks.cli.agent:main + sticks.tracking= - redmine = sticks.tracking.redmine_tracking:RedmineTracking \ No newline at end of file + redmine = sticks.tracking.redmine_tracking:RedmineTracking