From 3274078d80952cb96d59f98b1150b71724739067 Mon Sep 17 00:00:00 2001 From: lvdongbing Date: Tue, 17 May 2016 03:38:53 -0400 Subject: [PATCH] Add devstack plugin Implements: blueprint bilean-devstack Change-Id: Iad273d97806b939f7f10356eb6deae256f760cc2 --- devstack/README.rst | 26 +++++++ devstack/lib/bilean | 176 ++++++++++++++++++++++++++++++++++++++++++++ devstack/plugin.sh | 48 ++++++++++++ devstack/settings | 41 +++++++++++ 4 files changed, 291 insertions(+) create mode 100644 devstack/README.rst create mode 100644 devstack/lib/bilean create mode 100755 devstack/plugin.sh create mode 100644 devstack/settings diff --git a/devstack/README.rst b/devstack/README.rst new file mode 100644 index 0000000..3325f09 --- /dev/null +++ b/devstack/README.rst @@ -0,0 +1,26 @@ +=========================== +Enabling Bilean in DevStack +=========================== + +1. Download DevStack: + git clone https://git.openstack.org/openstack-dev/devstack + cd devstack + +2. Add this repo as an external repository:: + + cat > /opt/stack/devstack/local.conf << END + [[local|localrc]] + enable_plugin bilean https://github.com/openstack/bilean master + END + +3. Add Plugin Configuration Hooks + +Bilean service is driven using a plugin mechanism for integrating to other +services. Each integrated service may require additional configuration +settings. For example, typically, you will need to add the +``billing_notifications`` notification topic to each service's configuration. + +4. Then run devstack normally:: + + cd /opt/stack/devstack + ./stack.sh diff --git a/devstack/lib/bilean b/devstack/lib/bilean new file mode 100644 index 0000000..a0abfe0 --- /dev/null +++ b/devstack/lib/bilean @@ -0,0 +1,176 @@ +#!/bin/bash +# +# lib/bilean +# Functions to control the configuration and operation of the **bilean** service + +# To enable, add the following to local.conf +# +# [[local|localrc]] +# enable_plugin bilean https://git.openstack.org/openstack/bilean + +# Dependencies: +# +# - ``functions`` file +# - ``DEST``, ``DATA_DIR``, ``STACK_USER`` must be defined +# - ``SERVICE_{TENANT_NAME|PASSWORD}`` must be defined + +# ``stack.sh`` calls the entry points in this order: +# +# - install_bilean +# - install_bileanclient +# - configure_bilean +# - init_bilean +# - start_bilean +# - stop_bilean +# - cleanup_bilean + +# Save trace setting +XTRACE=$(set +o | grep xtrace) +set +o xtrace + +# Functions +# --------- + +# Test if any bilean services are enabled +function is_bilean_enabled { + [[ ,${ENABLED_SERVICES} =~ ,"m-" ]] && return 0 + return 1 +} + +# cleanup_bilean() - Remove residual data files, anything left over from previous +# runs that a clean run would need to clean up +function cleanup_bilean { + sudo rm -rf $BILEAN_STATE_PATH $BILEAN_AUTH_CACHE_DIR + sudo rm -rf $BILEAN_CONF_DIR +} + +# configure_bilean() - Set config files, create data dirs, etc +function configure_bilean { + # Put config files in ``/etc/bilean`` for everyone to find + if [[ ! -d $BILEAN_CONF_DIR ]]; then + sudo mkdir -p $BILEAN_CONF_DIR + fi + sudo install -d -o $STACK_USER $BILEAN_CONF_DIR + + BILEAN_API_PASTE_FILE=$BILEAN_CONF_DIR/api-paste.ini + BILEAN_POLICY_FILE=$BILEAN_CONF_DIR/policy.json + BILEAN_RES_DEF_FILE=$BILEAN_CONF_DIR/resource_definitions.yaml + + cp $BILEAN_DIR/etc/bilean/api-paste.ini $BILEAN_API_PASTE_FILE + cp $BILEAN_DIR/etc/bilean/policy.json $BILEAN_POLICY_FILE + cp $BILEAN_DIR/etc/bilean/resource_definitions.yaml $BILEAN_RES_DEF_FILE + + # common options + iniset $BILEAN_CONF DEFAULT debug "$ENABLE_DEBUG_LOG_LEVEL" + iniset $BILEAN_CONF DEFAULT use_syslog $SYSLOG + if [ "$LOG_COLOR" == "True" ] && [ "$SYSLOG" == "False" ]; then + # Add color to logging output + setup_colorized_logging $BILEAN_CONF DEFAULT + fi + + # rpc + iniset_rpc_backend bilean $BILEAN_CONF + + # OpenStack API + iniset $BILEAN_CONF bilean_api bilean_host $BILEAN_SERVICE_HOST + iniset $BILEAN_CONF bilean_api bind_port $BILEAN_SERVICE_PORT + + # Database connection + iniset $BILEAN_CONF database connection `database_connection_url bilean` + + # Keystone authtoken middleware + #configure_auth_token_middleware $BILEAN_CONF bilean $BILEAN_AUTH_CACHE_DIR + iniset $BILEAN_CONF keystone_authtoken identity_uri $KEYSTONE_AUTH_URI + iniset $BILEAN_CONF keystone_authtoken cafile $SSL_BUNDLE_FILE + iniset $BILEAN_CONF keystone_authtoken signing_dir $BILEAN_AUTH_CACHE_DIR + iniset $BILEAN_CONF keystone_authtoken auth_uri $KEYSTONE_AUTH_URI/v3 + iniset $BILEAN_CONF keystone_authtoken admin_user bilean + iniset $BILEAN_CONF keystone_authtoken admin_password $SERVICE_PASSWORD + iniset $BILEAN_CONF keystone_authtoken admin_tenant_name $SERVICE_TENANT_NAME + + # Bilean service credentials + iniset $BILEAN_CONF authentication auth_url $KEYSTONE_AUTH_URI/v3 + iniset $BILEAN_CONF authentication service_username bilean + iniset $BILEAN_CONF authentication service_password $SERVICE_PASSWORD + iniset $BILEAN_CONF authentication service_project_name $SERVICE_TENANT_NAME +} + +# create_bilean_accounts() - Set up common required bilean accounts +# +# Project User Roles +# ------------------------------------------------------------------ +# SERVICE_TENANT_NAME bilean service +function create_bilean_accounts { + + create_service_user "bilean" "admin" + + if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then + + local bilean_service=$(get_or_create_service "bilean" \ + "billing" "Billing Service") + get_or_create_endpoint $bilean_service \ + "$REGION_NAME" \ + "$BILEAN_SERVICE_PROTOCOL://$BILEAN_SERVICE_HOST:$BILEAN_SERVICE_PORT/v1" \ + "$BILEAN_SERVICE_PROTOCOL://$BILEAN_SERVICE_HOST:$BILEAN_SERVICE_PORT/v1" \ + "$BILEAN_SERVICE_PROTOCOL://$BILEAN_SERVICE_HOST:$BILEAN_SERVICE_PORT/v1" + fi + +} + + +# create_bilean_cache_dir() - Part of the init_bilean() process +function create_bilean_cache_dir { + # Create cache dir + sudo mkdir -p $BILEAN_AUTH_CACHE_DIR + sudo chown $STACK_USER $BILEAN_AUTH_CACHE_DIR + rm -f $BILEAN_AUTH_CACHE_DIR/* +} + +# init_bilean() - Initialize databases, etc. +function init_bilean { + + # (Re)create bilean database + recreate_database bilean + + # Migrate bilean database + $BILEAN_BIN_DIR/bilean-manage db_sync + create_bilean_cache_dir +} + +# install_bileanclient() - Collect source and prepare +function install_bileanclient { + git_clone $BILEANCLIENT_REPO $BILEANCLIENT_DIR $BILEANCLIENT_BRANCH + setup_develop $BILEANCLIENT_DIR +} + +# install_bilean() - Collect source and prepare +function install_bilean { + git_clone $BILEAN_REPO $BILEAN_DIR $BILEAN_BRANCH + setup_develop $BILEAN_DIR +} + +# start_bilean() - Start running processes, including screen +function start_bilean { + + # ``run_process`` checks ``is_service_enabled``, it is not needed here + run_process bl-api "$BILEAN_BIN_DIR/bilean-api --config-file=$BILEAN_CONF" + run_process bl-eng "$BILEAN_BIN_DIR/bilean-engine --config-file=$BILEAN_CONF" + run_process bl-sch "$BILEAN_BIN_DIR/bilean-scheduler --config-file=$BILEAN_CONF" + run_process bl-noti "$BILEAN_BIN_DIR/bilean-notification --config-file=$BILEAN_CONF" +} + +# stop_bilean() - Stop running processes (non-screen) +function stop_bilean { + for serv in bl-api bl-eng bl-sch bl-noti; do + stop_process $serv + done +} + + +# Restore xtrace +$XTRACE + +# Tell emacs to use shell-script-mode +## Local variables: +## mode: shell-script +## End: diff --git a/devstack/plugin.sh b/devstack/plugin.sh new file mode 100755 index 0000000..4db0f83 --- /dev/null +++ b/devstack/plugin.sh @@ -0,0 +1,48 @@ +# bilean.sh - Devstack extras script to install bilean + +# Save trace setting +XTRACE=$(set +o | grep xtrace) +set -o xtrace + +echo_summary "bilean's plugin.sh was called..." +source $DEST/bilean/devstack/lib/bilean +(set -o posix; set) + +if is_service_enabled bl-api bl-eng bl-sch bl-noti; then + if [[ "$1" == "stack" && "$2" == "pre-install" ]]; then + echo_summary "Before Installing bilean" + mkdir -p $SCREEN_LOGDIR + elif [[ "$1" == "stack" && "$2" == "install" ]]; then + echo_summary "Installing bilean" + install_bilean + echo_summary "Installing bileanclient" + install_bileanclient + cleanup_bilean + elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then + echo_summary "Configuring bilean" + configure_bilean + + if is_service_enabled key; then + create_bilean_accounts + fi + + elif [[ "$1" == "stack" && "$2" == "extra" ]]; then + # Initialize bilean + init_bilean + + # Start the bilean API and bilean taskmgr components + echo_summary "Starting bilean" + start_bilean + fi + + if [[ "$1" == "unstack" ]]; then + stop_bilean + fi + + if [[ "$1" == "clean" ]]; then + cleanup_bilean + fi +fi + +# Restore xtrace +$XTRACE diff --git a/devstack/settings b/devstack/settings new file mode 100644 index 0000000..c65b315 --- /dev/null +++ b/devstack/settings @@ -0,0 +1,41 @@ +# Turn on all bilean services by default +# API service +enable_service bl-api +# Engine +enable_service bl-eng +# Scheduler service +enable_service bl-sch +# Notification service +enable_service bl-noti + +# Set up default directories +BILEAN_REPO=${BILEAN_REPO:-${GIT_BASE}/openstack/bilean.git} +BILEAN_BRANCH=${BILEAN_BRANCH:-master} +BILEAN_DIR=$DEST/bilean + +BILEANCLIENT_REPO=${BILEANCLIENT_REPO:-${GIT_BASE}/openstack/python-bileanclient.git} +BILEANCLIENT_BRANCH=${BILEANCLIENT_BRANCH:-master} +BILEANCLIENT_DIR=$DEST/python-bileanclient + +BILEAN_STATE_PATH=${BILEAN_STATE_PATH:=$DATA_DIR/bilean} +BILEAN_AUTH_CACHE_DIR=${BILEAN_AUTH_CACHE_DIR:-/var/cache/bilean} + +BILEAN_CONF_DIR=/etc/bilean +BILEAN_CONF=$BILEAN_CONF_DIR/bilean.conf +BILEAN_POLICY_JSON=$BILEAN_CONF_DIR/policy.json + +# Public facing bits +BILEAN_SERVICE_HOST=${BILEAN_SERVICE_HOST:-$SERVICE_HOST} +BILEAN_SERVICE_PORT=${BILEAN_SERVICE_PORT:-8770} +BILEAN_SERVICE_PROTOCOL=http + +# Support entry points installation of console scripts +if [[ -d $BILEAN_DIR/bin ]]; then + BILEAN_BIN_DIR=$BILEAN_DIR/bin +else + BILEAN_BIN_DIR=$(get_python_exec_prefix) +fi + +# Log all output to files +LOGFILE=$HOME/devstack.log +SCREEN_LOGDIR=$HOME/logs