diff options
author | James E. Blair <jeblair@hp.com> | 2015-03-23 17:00:13 -0700 |
---|---|---|
committer | Sean Dague <sean@dague.net> | 2015-04-06 12:20:30 -0400 |
commit | 1b18cd2f7f87497caf8ccdae9c23fe53f8b394fd (patch) | |
tree | ca6af3f656458644c9d2383bac9e14eb3f172c39 /devstack | |
parent | d7d488278495c8afedd391a2170df70c32f7af8f (diff) | |
download | trove-1b18cd2f7f87497caf8ccdae9c23fe53f8b394fd.tar.gz |
add devstack plugin
This refactors the devstack support for trove into a devstack plugin
in the trove source tree.
Change-Id: I15667bf9c063e886755aef29056ef0028cbb1080
Diffstat (limited to 'devstack')
-rw-r--r-- | devstack/files/debs/trove | 1 | ||||
-rw-r--r-- | devstack/files/rpms-suse/trove | 1 | ||||
-rw-r--r-- | devstack/files/rpms/trove | 1 | ||||
-rw-r--r-- | devstack/plugin.sh | 245 | ||||
-rw-r--r-- | devstack/settings | 38 |
5 files changed, 286 insertions, 0 deletions
diff --git a/devstack/files/debs/trove b/devstack/files/debs/trove new file mode 100644 index 00000000..09dcee81 --- /dev/null +++ b/devstack/files/debs/trove @@ -0,0 +1 @@ +libxslt1-dev # testonly diff --git a/devstack/files/rpms-suse/trove b/devstack/files/rpms-suse/trove new file mode 100644 index 00000000..09dcee81 --- /dev/null +++ b/devstack/files/rpms-suse/trove @@ -0,0 +1 @@ +libxslt1-dev # testonly diff --git a/devstack/files/rpms/trove b/devstack/files/rpms/trove new file mode 100644 index 00000000..c5cbdea0 --- /dev/null +++ b/devstack/files/rpms/trove @@ -0,0 +1 @@ +libxslt-devel # testonly diff --git a/devstack/plugin.sh b/devstack/plugin.sh new file mode 100644 index 00000000..60028fb7 --- /dev/null +++ b/devstack/plugin.sh @@ -0,0 +1,245 @@ +#!/bin/bash +# +# lib/trove +# Functions to control the configuration and operation of the **Trove** service + +# Dependencies: +# ``functions`` file +# ``DEST``, ``STACK_USER`` must be defined +# ``SERVICE_{HOST|PROTOCOL|TOKEN}`` must be defined + +# ``stack.sh`` calls the entry points in this order: +# +# install_trove +# configure_trove +# init_trove +# start_trove +# stop_trove +# cleanup_trove + +# Save trace setting +XTRACE=$(set +o | grep xtrace) +set +o xtrace + +# Functions +# --------- + +# Test if any Trove services are enabled +# is_trove_enabled +function is_trove_enabled { + [[ ,${ENABLED_SERVICES} =~ ,"tr-" ]] && return 0 + return 1 +} + +# setup_trove_logging() - Adds logging configuration to conf files +function setup_trove_logging { + local CONF=$1 + iniset $CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL + iniset $CONF DEFAULT use_syslog $SYSLOG + if [ "$LOG_COLOR" == "True" ] && [ "$SYSLOG" == "False" ]; then + # Add color to logging output + setup_colorized_logging $CONF DEFAULT tenant user + fi +} + +# create_trove_accounts() - Set up common required trove accounts + +# Tenant User Roles +# ------------------------------------------------------------------ +# service trove admin # if enabled + +function create_trove_accounts { + if [[ "$ENABLED_SERVICES" =~ "trove" ]]; then + + create_service_user "trove" + + if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then + + local trove_service=$(get_or_create_service "trove" \ + "database" "Trove Service") + get_or_create_endpoint $trove_service \ + "$REGION_NAME" \ + "http://$SERVICE_HOST:8779/v1.0/\$(tenant_id)s" \ + "http://$SERVICE_HOST:8779/v1.0/\$(tenant_id)s" \ + "http://$SERVICE_HOST:8779/v1.0/\$(tenant_id)s" + fi + fi +} + +# stack.sh entry points +# --------------------- + +# cleanup_trove() - Remove residual data files, anything left over from previous +# runs that a clean run would need to clean up +function cleanup_trove { + #Clean up dirs + rm -fr $TROVE_AUTH_CACHE_DIR/* + rm -fr $TROVE_CONF_DIR/* +} + + +# configure_trove() - Set config files, create data dirs, etc +function configure_trove { + setup_develop $TROVE_DIR + + # Create the trove conf dir and cache dirs if they don't exist + sudo install -d -o $STACK_USER ${TROVE_CONF_DIR} ${TROVE_AUTH_CACHE_DIR} + + # Copy api-paste file over to the trove conf dir + cp $TROVE_LOCAL_API_PASTE_INI $TROVE_API_PASTE_INI + + # (Re)create trove conf files + rm -f $TROVE_CONF + rm -f $TROVE_TASKMANAGER_CONF + rm -f $TROVE_CONDUCTOR_CONF + + iniset $TROVE_CONF DEFAULT rabbit_userid $RABBIT_USERID + iniset $TROVE_CONF DEFAULT rabbit_password $RABBIT_PASSWORD + iniset $TROVE_CONF database connection `database_connection_url trove` + iniset $TROVE_CONF DEFAULT default_datastore $TROVE_DATASTORE_TYPE + setup_trove_logging $TROVE_CONF + iniset $TROVE_CONF DEFAULT trove_api_workers "$API_WORKERS" + + configure_auth_token_middleware $TROVE_CONF trove $TROVE_AUTH_CACHE_DIR + + # (Re)create trove taskmanager conf file if needed + if is_service_enabled tr-tmgr; then + TROVE_AUTH_ENDPOINT=$KEYSTONE_AUTH_URI/v$IDENTITY_API_VERSION + + iniset $TROVE_TASKMANAGER_CONF DEFAULT rabbit_userid $RABBIT_USERID + iniset $TROVE_TASKMANAGER_CONF DEFAULT rabbit_password $RABBIT_PASSWORD + iniset $TROVE_TASKMANAGER_CONF database connection `database_connection_url trove` + iniset $TROVE_TASKMANAGER_CONF DEFAULT taskmanager_manager trove.taskmanager.manager.Manager + iniset $TROVE_TASKMANAGER_CONF DEFAULT nova_proxy_admin_user radmin + iniset $TROVE_TASKMANAGER_CONF DEFAULT nova_proxy_admin_tenant_name trove + iniset $TROVE_TASKMANAGER_CONF DEFAULT nova_proxy_admin_pass $RADMIN_USER_PASS + iniset $TROVE_TASKMANAGER_CONF DEFAULT trove_auth_url $TROVE_AUTH_ENDPOINT + setup_trove_logging $TROVE_TASKMANAGER_CONF + fi + + # (Re)create trove conductor conf file if needed + if is_service_enabled tr-cond; then + iniset $TROVE_CONDUCTOR_CONF DEFAULT rabbit_userid $RABBIT_USERID + iniset $TROVE_CONDUCTOR_CONF DEFAULT rabbit_password $RABBIT_PASSWORD + iniset $TROVE_CONDUCTOR_CONF database connection `database_connection_url trove` + iniset $TROVE_CONDUCTOR_CONF DEFAULT nova_proxy_admin_user radmin + iniset $TROVE_CONDUCTOR_CONF DEFAULT nova_proxy_admin_tenant_name trove + iniset $TROVE_CONDUCTOR_CONF DEFAULT nova_proxy_admin_pass $RADMIN_USER_PASS + iniset $TROVE_CONDUCTOR_CONF DEFAULT trove_auth_url $TROVE_AUTH_ENDPOINT + iniset $TROVE_CONDUCTOR_CONF DEFAULT control_exchange trove + setup_trove_logging $TROVE_CONDUCTOR_CONF + fi + + # Set up Guest Agent conf + iniset $TROVE_GUESTAGENT_CONF DEFAULT rabbit_userid $RABBIT_USERID + iniset $TROVE_GUESTAGENT_CONF DEFAULT rabbit_host $TROVE_HOST_GATEWAY + iniset $TROVE_GUESTAGENT_CONF DEFAULT rabbit_password $RABBIT_PASSWORD + iniset $TROVE_GUESTAGENT_CONF DEFAULT nova_proxy_admin_user radmin + iniset $TROVE_GUESTAGENT_CONF DEFAULT nova_proxy_admin_tenant_name trove + iniset $TROVE_GUESTAGENT_CONF DEFAULT nova_proxy_admin_pass $RADMIN_USER_PASS + iniset $TROVE_GUESTAGENT_CONF DEFAULT trove_auth_url $TROVE_AUTH_ENDPOINT + iniset $TROVE_GUESTAGENT_CONF DEFAULT control_exchange trove + iniset $TROVE_GUESTAGENT_CONF DEFAULT ignore_users os_admin + iniset $TROVE_GUESTAGENT_CONF DEFAULT log_dir /var/log/trove/ + iniset $TROVE_GUESTAGENT_CONF DEFAULT log_file trove-guestagent.log + setup_trove_logging $TROVE_GUESTAGENT_CONF +} + +# install_troveclient() - Collect source and prepare +function install_troveclient { + # NOTE(sdague): this probably doesn't work correctly as a devstack + # plugin, and needs to be moved to the troveclient project instead + if use_library_from_git "python-troveclient"; then + git_clone_by_name "python-troveclient" + setup_dev_lib "python-troveclient" + fi +} + +# install_trove() - Collect source and prepare +function install_trove { + : +} + +# init_trove() - Initializes Trove Database as a Service +function init_trove { + # (Re)Create trove db + recreate_database trove + + # Initialize the trove database + $TROVE_MANAGE db_sync + + # If no guest image is specified, skip remaining setup + [ -z "$TROVE_GUEST_IMAGE_URL" ] && return 0 + + # Find the glance id for the trove guest image + # The image is uploaded by stack.sh -- see $IMAGE_URLS handling + GUEST_IMAGE_NAME=$(basename "$TROVE_GUEST_IMAGE_URL") + GUEST_IMAGE_NAME=${GUEST_IMAGE_NAME%.*} + TROVE_GUEST_IMAGE_ID=$(openstack --os-token $TOKEN --os-url $GLANCE_SERVICE_PROTOCOL://$GLANCE_HOSTPORT image list | grep "${GUEST_IMAGE_NAME}" | get_field 1) + if [ -z "$TROVE_GUEST_IMAGE_ID" ]; then + # If no glance id is found, skip remaining setup + echo "Datastore ${TROVE_DATASTORE_TYPE} will not be created: guest image ${GUEST_IMAGE_NAME} not found." + return 1 + fi + + # Now that we have the guest image id, initialize appropriate datastores / datastore versions + $TROVE_MANAGE datastore_update "$TROVE_DATASTORE_TYPE" "" + $TROVE_MANAGE datastore_version_update "$TROVE_DATASTORE_TYPE" "$TROVE_DATASTORE_VERSION" "$TROVE_DATASTORE_TYPE" \ + "$TROVE_GUEST_IMAGE_ID" "$TROVE_DATASTORE_PACKAGE" 1 + $TROVE_MANAGE datastore_version_update "$TROVE_DATASTORE_TYPE" "inactive_version" "inactive_manager" "$TROVE_GUEST_IMAGE_ID" "" 0 + $TROVE_MANAGE datastore_update "$TROVE_DATASTORE_TYPE" "$TROVE_DATASTORE_VERSION" + $TROVE_MANAGE datastore_update "Inactive_Datastore" "" +} + +# start_trove() - Start running processes, including screen +function start_trove { + run_process tr-api "$TROVE_BIN_DIR/trove-api --config-file=$TROVE_CONF --debug" + run_process tr-tmgr "$TROVE_BIN_DIR/trove-taskmanager --config-file=$TROVE_TASKMANAGER_CONF --debug" + run_process tr-cond "$TROVE_BIN_DIR/trove-conductor --config-file=$TROVE_CONDUCTOR_CONF --debug" +} + +# stop_trove() - Stop running processes +function stop_trove { + # Kill the trove screen windows + local serv + for serv in tr-api tr-tmgr tr-cond; do + stop_process $serv + done +} + +# Dispatcher for trove plugin +if is_service_enabled trove; then + if [[ "$1" == "stack" && "$2" == "install" ]]; then + echo_summary "Installing Trove" + install_trove + install_troveclient + cleanup_trove + elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then + echo_summary "Configuring Trove" + configure_trove + + if is_service_enabled key; then + create_trove_accounts + fi + + elif [[ "$1" == "stack" && "$2" == "extra" ]]; then + # Initialize trove + init_trove + + # Start the trove API and trove taskmgr components + echo_summary "Starting Trove" + start_trove + fi + + if [[ "$1" == "unstack" ]]; then + stop_trove + fi +fi + +# Restore xtrace +$XTRACE + +# Tell emacs to use shell-script-mode +## Local variables: +## mode: shell-script +## End: diff --git a/devstack/settings b/devstack/settings new file mode 100644 index 00000000..f3d13c88 --- /dev/null +++ b/devstack/settings @@ -0,0 +1,38 @@ +# settings needed for trove plugin + +if is_service_enabled neutron; then + TROVE_HOST_GATEWAY=${PUBLIC_NETWORK_GATEWAY:-172.24.4.1} +else + TROVE_HOST_GATEWAY=${NETWORK_GATEWAY:-10.0.0.1} +fi + +# Set up default configuration +GITDIR["python-troveclient"]=$DEST/python-troveclient + +TROVE_DIR=$DEST/trove +TROVE_CONF_DIR=${TROVE_CONF_DIR:-/etc/trove} +TROVE_CONF=${TROVE_CONF:-$TROVE_CONF_DIR/trove.conf} +TROVE_TASKMANAGER_CONF=${TROVE_TASKMANAGER_CONF:-$TROVE_CONF_DIR/trove-taskmanager.conf} +TROVE_CONDUCTOR_CONF=${TROVE_CONDUCTOR_CONF:-$TROVE_CONF_DIR/trove-conductor.conf} +TROVE_GUESTAGENT_CONF=${TROVE_GUESTAGENT_CONF:-$TROVE_CONF_DIR/trove-guestagent.conf} +TROVE_API_PASTE_INI=${TROVE_API_PASTE_INI:-$TROVE_CONF_DIR/api-paste.ini} + +TROVE_LOCAL_CONF_DIR=$TROVE_DIR/etc/trove +TROVE_LOCAL_API_PASTE_INI=$TROVE_LOCAL_CONF_DIR/api-paste.ini +TROVE_AUTH_CACHE_DIR=${TROVE_AUTH_CACHE_DIR:-/var/cache/trove} +TROVE_DATASTORE_TYPE=${TROVE_DATASTORE_TYPE:-"mysql"} +TROVE_DATASTORE_VERSION=${TROVE_DATASTORE_VERSION:-"5.6"} +TROVE_DATASTORE_PACKAGE=${TROVE_DATASTORE_PACKAGE:-"mysql-server-5.6"} + +# Support entry points installation of console scripts +if [[ -d $TROVE_DIR/bin ]]; then + TROVE_BIN_DIR=$TROVE_DIR/bin +else + TROVE_BIN_DIR=$(get_python_exec_prefix) +fi +TROVE_MANAGE=$TROVE_BIN_DIR/trove-manage + +# Tell Tempest this project is present +TEMPEST_SERVICES+=,trove + +enable_service trove |