tatu/devstack/plugin.sh

260 lines
9.0 KiB
Bash

# Install and start **Tatu** service in Devstack
# Save trace setting
XTRACE=$(set +o | grep xtrace)
set +o xtrace
# Helper Functions
# ----------------
function setup_colorized_logging_tatu {
local conf_file=$1
local conf_section=$2
local project_var=${3:-"project_name"}
local user_var=${4:-"user_name"}
setup_colorized_logging $conf_file $conf_section $project_var $user_var
}
# DevStack Plugin
# ---------------
# cleanup_tatu - Remove residual data files, anything left over from previous
# runs that a clean run would need to clean up
function cleanup_tatu {
sudo rm -rf $TATU_STATE_PATH $TATU_AUTH_CACHE_DIR
}
# configure_tatu - Set config files, create data dirs, etc
function configure_tatu {
[ ! -d $TATU_CONF_DIR ] && sudo mkdir -m 755 -p $TATU_CONF_DIR
sudo chown $STACK_USER $TATU_CONF_DIR
[ ! -d $TATU_LOG_DIR ] && sudo mkdir -m 755 -p $TATU_LOG_DIR
sudo chown $STACK_USER $TATU_LOG_DIR
# (Re)create ``tatu.conf``
rm -f $TATU_CONF
local admin_project
admin_project=$(openstack project show "admin" -f value -c id)
local admin_user
admin_user=$(openstack user show "admin" -f value -c id)
iniset $TATU_CONF tatu auth_url $KEYSTONE_SERVICE_URI/v3
iniset $TATU_CONF tatu user_id $admin_user
iniset $TATU_CONF tatu password $ADMIN_PASSWORD
iniset $TATU_CONF tatu project_id $admin_project
iniset $TATU_CONF tatu use_barbican $TATU_USE_BARBICAN
iniset $TATU_CONF tatu use_pat_bastions $TATU_USE_PAT_BASTIONS
iniset $TATU_CONF tatu ssh_port 2222
iniset $TATU_CONF tatu num_total_pats $TATU_NUM_TOTAL_PATS
iniset $TATU_CONF tatu num_pat_bastions_per_server $TATU_PAT_BASTIONS_PER_SERVER
iniset $TATU_CONF tatu pat_dns_zone_name $TATU_DNS_ZONE_NAME
iniset $TATU_CONF tatu pat_dns_zone_email $TATU_DNS_ZONE_EMAIL
iniset $TATU_CONF tatu sqlalchemy_engine `database_connection_url tatu`
iniset $TATU_CONF tatu api_endpoint_for_vms $TATU_API_FOR_VMS
iniset $TATU_CONF tatu pam_sudo True
iniset $TATU_CONF tatu api_base_uri $TATU_SERVICE_PROTOCOL://$TATU_SERVICE_HOST:$TATU_SERVICE_PORT/
# Need Keystone and Nova notifications
iniset $KEYSTONE_CONF oslo_messaging_notifications topics notifications,tatu_notifications
iniset $NOVA_CONF oslo_messaging_notifications topics notifications,tatu_notifications
iniset $NOVA_CONF DEFAULT force_config_drive TRUE
# Set up Tatu static vendor data.
$TATU_DIR/scripts/cloud-config-to-vendor-data $TATU_DIR/files/user-cloud-config > $NOVA_CONF_DIR/tatu_static_vd.json
iniset $NOVA_CONF api vendordata_providers StaticJSON,DynamicJSON
iniset $NOVA_CONF api vendordata_jsonfile_path $NOVA_CONF_DIR/tatu_static_vd.json
iniset $NOVA_CONF api vendordata_dynamic_targets tatu@$TATU_SERVICE_PROTOCOL://$TATU_SERVICE_HOST:$TATU_SERVICE_PORT/v1/novavendordata
iniset $NOVA_CONF api vendordata_dynamic_connect_timeout 5
iniset $NOVA_CONF api vendordata_dynamic_read_timeout 30
iniset $NOVA_CONF vendordata_dynamic_auth auth_url $KEYSTONE_SERVICE_URI
iniset $NOVA_CONF vendordata_dynamic_auth auth_type password
iniset $NOVA_CONF vendordata_dynamic_auth username admin
iniset $NOVA_CONF vendordata_dynamic_auth password $ADMIN_PASSWORD
iniset $NOVA_CONF vendordata_dynamic_auth project_id $admin_project
iniset $NOVA_CONF vendordata_dynamic_auth user_domain_name default
# Castellan (Barbican client) credentials
iniset $TATU_CONF key_manager auth_url $KEYSTONE_SERVICE_URI
iniset $TATU_CONF key_manager auth_type keystone_password
iniset $TATU_CONF key_manager user_id $admin_user
iniset $TATU_CONF key_manager password $ADMIN_PASSWORD
iniset $TATU_CONF key_manager project_id $admin_project
# General Configuration
iniset_rpc_backend tatu $TATU_CONF DEFAULT
iniset $TATU_CONF DEFAULT rpc_response_timeout 5
iniset $TATU_CONF DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL
iniset $TATU_CONF DEFAULT state_path $TATU_STATE_PATH
iniset $TATU_CONF storage:sqlalchemy connection `database_connection_url tatu`
# API Configuration
sudo cp $TATU_DIR/etc/tatu/api-paste.ini $TATU_APIPASTE_CONF
iniset $TATU_CONF service:api api_base_uri $TATU_SERVICE_PROTOCOL://$TATU_SERVICE_HOST:$TATU_SERVICE_PORT/
# Oslo Concurrency
iniset $TATU_CONF oslo_concurrency lock_path "$TATU_STATE_PATH"
# TLS Proxy Configuration
if is_service_enabled tls-proxy; then
# Set the service port for a proxy to take the original
iniset $TATU_CONF service:api listen ${TATU_SERVICE_HOST}:${TATU_SERVICE_PORT_INT}
else
iniset $TATU_CONF service:api listen ${TATU_SERVICE_HOST}:${TATU_SERVICE_PORT}
fi
# Setup the Keystone Integration
if is_service_enabled keystone; then
iniset $TATU_CONF service:api auth_strategy keystone
configure_auth_token_middleware $TATU_CONF tatu $TATU_AUTH_CACHE_DIR
fi
# Logging Configuration
if [ "$SYSLOG" != "False" ]; then
iniset $TATU_CONF DEFAULT use_syslog True
fi
# Format logging
if [ "$LOG_COLOR" == "True" ] && [ "$SYSLOG" == "False" ]; then
setup_colorized_logging_tatu $TATU_CONF DEFAULT "tenant" "user"
fi
}
function configure_tatudashboard {
# Compile message catalogs
if [ -d ${TATUDASHBOARD_DIR}/tatudashboard/locale ]; then
(cd ${TATUDASHBOARD_DIR}/tatudashboard; DJANGO_SETTINGS_MODULE=openstack_dashboard.settings ../manage.py compilemessages)
fi
}
# create_tatu_accounts - Set up common required tatu accounts
# Tenant User Roles
# ------------------------------------------------------------------
# service tatu admin # if enabled
function create_tatu_accounts {
if is_service_enabled tatu-api; then
create_service_user "tatu"
get_or_create_service "tatu" "ssh" "Tatu SSH Service"
get_or_create_endpoint "ssh" \
"$REGION_NAME" \
"$TATU_SERVICE_PROTOCOL://$TATU_SERVICE_HOST:$TATU_SERVICE_PORT/"
fi
}
# init_tatu - Initialize etc.
function init_tatu {
# Create cache dir
sudo mkdir -p $TATU_AUTH_CACHE_DIR
sudo chown $STACK_USER $TATU_AUTH_CACHE_DIR
rm -f $TATU_AUTH_CACHE_DIR/*
# (Re)create tatu database
recreate_database tatu utf8
}
# install_tatu - Collect source and prepare
function install_tatu {
git_clone $TATU_REPO $TATU_DIR $TATU_BRANCH
setup_develop $TATU_DIR
}
# install_tatuclient - Collect source and prepare
function install_tatuclient {
git_clone_by_name "python-tatuclient"
setup_dev_lib "python-tatuclient"
}
# install_tatudashboard - Collect source and prepare
function install_tatudashboard {
git_clone_by_name "tatu-dashboard"
setup_dev_lib "tatu-dashboard"
for panel in _3980_tatu_panel_group.py \
_3981_tatu_ca_panel.py \
_3982_tatu_user_panel.py \
_3983_tatu_host_panel.py \
_3984_tatu_pat_panel.py \
_3985_tatu_host_cert_panel.py; do
ln -fs $TATUDASHBOARD_DIR/tatudashboard/enabled/$panel $HORIZON_DIR/openstack_dashboard/local/enabled/$panel
done
}
# start_tatu - Start running processes
function start_tatu {
local PSERVE=`which pserve`
run_process tatu-api "$PSERVE $TATU_APIPASTE_CONF"
local PYTHON=`which python`
run_process tatu-agent "$PYTHON $TATU_DIR/tatu/notifications.py"
# Start proxies if enabled
if is_service_enabled tatu-api && is_service_enabled tls-proxy; then
start_tls_proxy tatu-api '*' $TATU_SERVICE_PORT $TATU_SERVICE_HOST $TATU_SERVICE_PORT_INT &
fi
local wget_cmd
wget_cmd="wget --no-proxy -q -O- $TATU_SERVICE_PROTOCOL://$TATU_SERVICE_HOST:$TATU_SERVICE_PORT/noauth"
echo waiting on $wget_cmd
if ! timeout $SERVICE_TIMEOUT sh -c "until $wget_cmd; do sleep 1; echo re-trying; done"; then
die $LINENO "Tatu did not start"
fi
}
# stop_tatu - Stop running processes
function stop_tatu {
stop_process tatu-api
stop_process tatu-agent
}
# This is the main for plugin.sh
if is_service_enabled tatu; then
if [[ "$1" == "stack" && "$2" == "install" ]]; then
echo_summary "Installing Tatu client"
install_tatuclient
echo_summary "Installing Tatu"
install_tatu
if is_service_enabled horizon; then
echo_summary "Installing Tatu dashboard"
install_tatudashboard
fi
elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
echo_summary "Configuring Tatu"
configure_tatu
if is_service_enabled horizon; then
echo_summary "Configuring Tatu dashboard"
configure_tatudashboard
fi
if is_service_enabled keystone; then
echo_summary "Creating Tatu Keystone accounts"
create_tatu_accounts
fi
elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
echo_summary "Initializing Tatu"
init_tatu
echo_summary "Starting Tatu"
start_tatu
fi
if [[ "$1" == "unstack" ]]; then
stop_tatu
fi
if [[ "$1" == "clean" ]]; then
echo_summary "Cleaning Tatu"
cleanup_tatu
fi
fi
# Restore xtrace
$XTRACE