Add devstack plugin

Implements: blueprint bilean-devstack
Change-Id: Iad273d97806b939f7f10356eb6deae256f760cc2
This commit is contained in:
lvdongbing 2016-05-17 03:38:53 -04:00
parent 2408d71cb4
commit 3274078d80
4 changed files with 291 additions and 0 deletions

26
devstack/README.rst Normal file
View File

@ -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

176
devstack/lib/bilean Normal file
View File

@ -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:

48
devstack/plugin.sh Executable file
View File

@ -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

41
devstack/settings Normal file
View File

@ -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