
1. What is the problem? Since trio2o stops updating after version M, it is adjusted accordingly to adapt to the latest version openstack. 2. What is the solution to the problem? Adjust the new compute and volume endpoint. Add the server_external_event forward and os-service fetch. Some bugs were fixed. Change-Id: I9d0a1deb011a33750985e88c72fe4fad71a32be2 Signed-off-by: zhang xiaohan <zhangxiaohan@szzt.com.cn> Co-Authored-By: tangzhuo <ztang@hnu.edu.cn>
441 lines
14 KiB
Bash
441 lines
14 KiB
Bash
# Devstack extras script to install Trio2o
|
|
|
|
# Test if any trio2o services are enabled
|
|
# is_trio2o_enabled
|
|
function is_trio2o_enabled {
|
|
[[ ,${ENABLED_SERVICES} =~ ,"t-oapi" ]] && return 0
|
|
return 1
|
|
}
|
|
|
|
# create_trio2o_accounts() - Set up common required trio2o
|
|
# service accounts in keystone
|
|
# Project User Roles
|
|
# -------------------------------------------------------------------------
|
|
# $SERVICE_TENANT_NAME trio2o service
|
|
|
|
function create_trio2o_accounts {
|
|
if [[ "$ENABLED_SERVICES" =~ "t-oapi" ]]; then
|
|
create_service_user "trio2o"
|
|
|
|
if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then
|
|
local trio2o_api=$(get_or_create_service "trio2o" \
|
|
"Cascading" "OpenStack Cascading Service")
|
|
get_or_create_endpoint $trio2o_api \
|
|
"$REGION_NAME" \
|
|
"$SERVICE_PROTOCOL://$TRIO2O_API_HOST:$TRIO2O_API_PORT/v1.0" \
|
|
"$SERVICE_PROTOCOL://$TRIO2O_API_HOST:$TRIO2O_API_PORT/v1.0" \
|
|
"$SERVICE_PROTOCOL://$TRIO2O_API_HOST:$TRIO2O_API_PORT/v1.0"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# create_nova_apigw_accounts() - Set up common required nova_apigw
|
|
# work as nova api serice
|
|
# service accounts in keystone
|
|
# Project User Roles
|
|
# -----------------------------------------------------------------
|
|
# $SERVICE_TENANT_NAME nova_apigw service
|
|
|
|
function create_nova_apigw_accounts {
|
|
if [[ "$ENABLED_SERVICES" =~ "t-ngw" ]]; then
|
|
create_service_user "nova_apigw"
|
|
|
|
local trio2o_nova_apigw=$(get_or_create_service "nova" \
|
|
"compute" "Nova Compute Service")
|
|
|
|
remove_old_endpoint_conf $trio2o_nova_apigw
|
|
|
|
get_or_create_endpoint $trio2o_nova_apigw \
|
|
"$REGION_NAME" \
|
|
"$SERVICE_PROTOCOL://$TRIO2O_NOVA_APIGW_HOST:$TRIO2O_NOVA_APIGW_PORT/v2.1/"'$(tenant_id)s' \
|
|
"$SERVICE_PROTOCOL://$TRIO2O_NOVA_APIGW_HOST:$TRIO2O_NOVA_APIGW_PORT/v2.1/"'$(tenant_id)s' \
|
|
"$SERVICE_PROTOCOL://$TRIO2O_NOVA_APIGW_HOST:$TRIO2O_NOVA_APIGW_PORT/v2.1/"'$(tenant_id)s'
|
|
fi
|
|
}
|
|
|
|
# create_cinder_apigw_accounts() - Set up common required cinder_apigw
|
|
# work as cinder api serice
|
|
# service accounts in keystone
|
|
# Project User Roles
|
|
# ---------------------------------------------------------------------
|
|
# $SERVICE_TENANT_NAME cinder_apigw service
|
|
|
|
function create_cinder_apigw_accounts {
|
|
if [[ "$ENABLED_SERVICES" =~ "t-cgw" ]]; then
|
|
create_service_user "cinder_apigw"
|
|
|
|
local trio2o_cinder_apigw=$(get_or_create_service "cinder" \
|
|
"volumev3" "Cinder Volume Service")
|
|
|
|
remove_old_endpoint_conf $trio2o_cinder_apigw
|
|
|
|
get_or_create_endpoint $trio2o_cinder_apigw \
|
|
"$REGION_NAME" \
|
|
"$SERVICE_PROTOCOL://$TRIO2O_CINDER_APIGW_HOST:$TRIO2O_CINDER_APIGW_PORT/v3/"'$(tenant_id)s' \
|
|
"$SERVICE_PROTOCOL://$TRIO2O_CINDER_APIGW_HOST:$TRIO2O_CINDER_APIGW_PORT/v3/"'$(tenant_id)s' \
|
|
"$SERVICE_PROTOCOL://$TRIO2O_CINDER_APIGW_HOST:$TRIO2O_CINDER_APIGW_PORT/v3/"'$(tenant_id)s'
|
|
fi
|
|
}
|
|
|
|
|
|
# common config-file configuration for trio2o services
|
|
function remove_old_endpoint_conf {
|
|
local service=$1
|
|
|
|
local endpoint_id
|
|
interface_list="public admin internal"
|
|
for interface in $interface_list; do
|
|
endpoint_id=$(openstack endpoint list \
|
|
--service "$service" \
|
|
--interface "$interface" \
|
|
--region "$REGION_NAME" \
|
|
-c ID -f value)
|
|
if [[ -n "$endpoint_id" ]]; then
|
|
# Delete endpoint
|
|
openstack endpoint delete "$endpoint_id"
|
|
fi
|
|
done
|
|
}
|
|
|
|
|
|
# create_trio2o_cache_dir() - Set up cache dir for trio2o
|
|
function create_trio2o_cache_dir {
|
|
|
|
# Delete existing dir
|
|
sudo rm -rf $TRIO2O_AUTH_CACHE_DIR
|
|
sudo mkdir -p $TRIO2O_AUTH_CACHE_DIR
|
|
sudo chown `whoami` $TRIO2O_AUTH_CACHE_DIR
|
|
}
|
|
|
|
# common config-file configuration for trio2o services
|
|
function init_common_trio2o_conf {
|
|
local conf_file=$1
|
|
|
|
touch $conf_file
|
|
iniset $conf_file DEFAULT debug $ENABLE_DEBUG_LOG_LEVEL
|
|
iniset $conf_file DEFAULT verbose True
|
|
iniset $conf_file DEFAULT use_syslog $SYSLOG
|
|
iniset $conf_file DEFAULT trio2o_db_connection `database_connection_url trio2o`
|
|
|
|
iniset $conf_file client auth_url http://$KEYSTONE_SERVICE_HOST/identity
|
|
iniset $conf_file client identity_url http://$KEYSTONE_SERVICE_HOST/identity/v3
|
|
iniset $conf_file client admin_username admin
|
|
iniset $conf_file client admin_password $ADMIN_PASSWORD
|
|
iniset $conf_file client admin_tenant demo
|
|
iniset $conf_file client auto_refresh_endpoint True
|
|
iniset $conf_file client top_pod_name $REGION_NAME
|
|
|
|
iniset $conf_file oslo_concurrency lock_path $TRIO2O_STATE_PATH/lock
|
|
iniset_rpc_backend trio2o $conf_file
|
|
}
|
|
|
|
function configure_trio2o_api {
|
|
|
|
if is_service_enabled t-oapi ; then
|
|
echo "Configuring Trio2o API"
|
|
|
|
init_common_trio2o_conf $TRIO2O_API_CONF
|
|
|
|
setup_colorized_logging $TRIO2O_API_CONF DEFAULT tenant_name
|
|
|
|
if is_service_enabled keystone; then
|
|
|
|
create_trio2o_cache_dir
|
|
|
|
# Configure auth token middleware
|
|
configure_auth_token_middleware $TRIO2O_API_CONF trio2o \
|
|
$TRIO2O_AUTH_CACHE_DIR
|
|
|
|
else
|
|
iniset $TRIO2O_API_CONF DEFAULT auth_strategy noauth
|
|
fi
|
|
|
|
fi
|
|
}
|
|
|
|
function configure_trio2o_nova_apigw {
|
|
if is_service_enabled t-ngw ; then
|
|
echo "Configuring Trio2o Nova APIGW"
|
|
|
|
init_common_trio2o_conf $TRIO2O_NOVA_APIGW_CONF
|
|
|
|
setup_colorized_logging $TRIO2O_NOVA_APIGW_CONF DEFAULT tenant_name
|
|
|
|
if is_service_enabled keystone; then
|
|
|
|
create_trio2o_cache_dir
|
|
|
|
# Configure auth token middleware
|
|
configure_auth_token_middleware $TRIO2O_NOVA_APIGW_CONF trio2o \
|
|
$TRIO2O_AUTH_CACHE_DIR
|
|
|
|
else
|
|
iniset $TRIO2O_NOVA_APIGW_CONF DEFAULT auth_strategy noauth
|
|
fi
|
|
|
|
fi
|
|
}
|
|
|
|
function configure_trio2o_cinder_apigw {
|
|
if is_service_enabled t-cgw ; then
|
|
echo "Configuring Trio2o Cinder APIGW"
|
|
|
|
init_common_trio2o_conf $TRIO2O_CINDER_APIGW_CONF
|
|
|
|
setup_colorized_logging $TRIO2O_CINDER_APIGW_CONF DEFAULT tenant_name
|
|
|
|
if is_service_enabled keystone; then
|
|
|
|
create_trio2o_cache_dir
|
|
|
|
# Configure auth token middleware
|
|
configure_auth_token_middleware $TRIO2O_CINDER_APIGW_CONF trio2o \
|
|
$TRIO2O_AUTH_CACHE_DIR
|
|
|
|
else
|
|
iniset $TRIO2O_CINDER_APIGW_CONF DEFAULT auth_strategy noauth
|
|
fi
|
|
|
|
fi
|
|
}
|
|
|
|
# configure_trio2o_api_wsgi() - Set WSGI config files
|
|
function configure_trio2o_api_wsgi {
|
|
local trio2o_api_apache_conf
|
|
local venv_path=""
|
|
local trio2o_bin_dir=""
|
|
local trio2o_ssl_listen="#"
|
|
|
|
trio2o_bin_dir=$(get_python_exec_prefix)
|
|
trio2o_api_apache_conf=$(apache_site_config_for trio2o-api)
|
|
|
|
if is_ssl_enabled_service "trio2o-api"; then
|
|
trio2o_ssl_listen=""
|
|
trio2o_ssl="SSLEngine On"
|
|
trio2o_certfile="SSLCertificateFile $TRIO2O_SSL_CERT"
|
|
trio2o_keyfile="SSLCertificateKeyFile $TRIO2O_SSL_KEY"
|
|
fi
|
|
|
|
# configure venv bin if VENV is used
|
|
if [[ ${USE_VENV} = True ]]; then
|
|
venv_path="python-path=${PROJECT_VENV["trio2o"]}/lib/$(python_version)/site-packages"
|
|
trio2o_bin_dir=${PROJECT_VENV["trio2o"]}/bin
|
|
fi
|
|
|
|
sudo cp $TRIO2O_API_APACHE_TEMPLATE $trio2o_api_apache_conf
|
|
sudo sed -e "
|
|
s|%TRIO2O_BIN%|$trio2o_bin_dir|g;
|
|
s|%PUBLICPORT%|$TRIO2O_API_PORT|g;
|
|
s|%APACHE_NAME%|$APACHE_NAME|g;
|
|
s|%PUBLICWSGI%|$trio2o_bin_dir/trio2o-api-wsgi|g;
|
|
s|%SSLENGINE%|$trio2o_ssl|g;
|
|
s|%SSLCERTFILE%|$trio2o_certfile|g;
|
|
s|%SSLKEYFILE%|$trio2o_keyfile|g;
|
|
s|%SSLLISTEN%|$trio2o_ssl_listen|g;
|
|
s|%USER%|$STACK_USER|g;
|
|
s|%VIRTUALENV%|$venv_path|g
|
|
s|%APIWORKERS%|$API_WORKERS|g
|
|
" -i $trio2o_api_apache_conf
|
|
}
|
|
|
|
# start_trio2o_api_wsgi() - Start the API processes ahead of other things
|
|
function start_trio2o_api_wsgi {
|
|
enable_apache_site trio2o-api
|
|
restart_apache_server
|
|
tail_log trio2o-api /var/log/$APACHE_NAME/trio2o-api.log
|
|
|
|
echo "Waiting for trio2o-api to start..."
|
|
if ! wait_for_service $SERVICE_TIMEOUT $TRIO2O_API_PROTOCOL://$TRIO2O_API_HOST/trio2o; then
|
|
die $LINENO "trio2o-api did not start"
|
|
fi
|
|
}
|
|
|
|
# stop_trio2o_api_wsgi() - Disable the api service and stop it.
|
|
function stop_trio2o_api_wsgi {
|
|
disable_apache_site trio2o-api
|
|
restart_apache_server
|
|
}
|
|
|
|
# cleanup_trio2o_api_wsgi() - Remove residual data files, anything left over from previous
|
|
# runs that a clean run would need to clean up
|
|
function cleanup_trio2o_api_wsgi {
|
|
sudo rm -f $(apache_site_config_for trio2o-api)
|
|
}
|
|
|
|
function configure_trio2o_xjob {
|
|
if is_service_enabled t-ojob ; then
|
|
echo "Configuring Trio2o xjob"
|
|
|
|
init_common_trio2o_conf $TRIO2O_XJOB_CONF
|
|
|
|
setup_colorized_logging $TRIO2O_XJOB_CONF DEFAULT
|
|
fi
|
|
}
|
|
|
|
function reconfigure_nova {
|
|
|
|
# Nova services are running, but we need to re-configure them to
|
|
# move them to bottom region
|
|
iniset $NOVA_CONF neutron region_name $POD_REGION_NAME
|
|
iniset $NOVA_CONF neutron url "$Q_PROTOCOL://$SERVICE_HOST:$Q_PORT"
|
|
iniset $NOVA_CONF cinder os_region_name $POD_REGION_NAME
|
|
|
|
iniset $NOVA_CONF DEFAULT vif_plugging_is_fatal False
|
|
iniset $NOVA_CONF DEFAULT vif_plugging_timeout 60
|
|
|
|
get_or_create_endpoint "compute" \
|
|
"$POD_REGION_NAME" \
|
|
"$NOVA_SERVICE_PROTOCOL://$NOVA_SERVICE_HOST:$NOVA_SERVICE_PORT/compute/v2.1" \
|
|
"$NOVA_SERVICE_PROTOCOL://$NOVA_SERVICE_HOST:$NOVA_SERVICE_PORT/compute/v2.1" \
|
|
"$NOVA_SERVICE_PROTOCOL://$NOVA_SERVICE_HOST:$NOVA_SERVICE_PORT/compute/v2.1"
|
|
|
|
stop_process n-api
|
|
stop_process n-cpu
|
|
# remove previous failure flag file since we are going to restart service
|
|
rm -f "$SERVICE_DIR/$SCREEN_NAME"/n-api.failure
|
|
rm -f "$SERVICE_DIR/$SCREEN_NAME"/n-cpu.failure
|
|
sleep 20
|
|
run_process n-api "$NOVA_BIN_DIR/nova-api"
|
|
run_process n-cpu "$NOVA_BIN_DIR/nova-compute --config-file $NOVA_CONF" $LIBVIRT_GROUP
|
|
|
|
}
|
|
|
|
function move_neutron_server {
|
|
local region_name=$1
|
|
|
|
remove_old_endpoint_conf "neutron"
|
|
|
|
get_or_create_service "neutron" "network" "Neutron Service"
|
|
get_or_create_endpoint "network" \
|
|
"$region_name" \
|
|
"$Q_PROTOCOL://$SERVICE_HOST:$Q_PORT/" \
|
|
"$Q_PROTOCOL://$SERVICE_HOST:$Q_PORT/" \
|
|
"$Q_PROTOCOL://$SERVICE_HOST:$Q_PORT/"
|
|
|
|
iniset $NEUTRON_CONF nova region_name $region_name
|
|
|
|
stop_process q-svc
|
|
# remove previous failure flag file since we are going to restart service
|
|
rm -f "$SERVICE_DIR/$SCREEN_NAME"/q-svc.failure
|
|
sleep 20
|
|
enable_service q-svc
|
|
run_process q-svc "$NEUTRON_BIN_DIR/neutron-server --config-file $NEUTRON_CONF --config-file /$Q_PLUGIN_CONF_FILE"
|
|
}
|
|
|
|
if [[ "$1" == "stack" && "$2" == "pre-install" ]]; then
|
|
echo summary "Trio2o pre-install"
|
|
elif [[ "$1" == "stack" && "$2" == "install" ]]; then
|
|
echo_summary "Installing Trio2o"
|
|
elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
|
|
echo_summary "Configuring Trio2o"
|
|
|
|
export NEUTRON_CREATE_INITIAL_NETWORKS=False
|
|
export DEFAULT_INSTANCE_TYPE=m1.tiny
|
|
|
|
sudo install -d -o $STACK_USER -m 755 $TRIO2O_CONF_DIR
|
|
|
|
enable_service t-oapi t-ojob t-ngw t-cgw
|
|
|
|
configure_trio2o_api
|
|
configure_trio2o_nova_apigw
|
|
configure_trio2o_cinder_apigw
|
|
configure_trio2o_xjob
|
|
|
|
if [[ "$TRIO2O_DEPLOY_WITH_WSGI" == "True" ]]; then
|
|
configure_trio2o_api_wsgi
|
|
fi
|
|
|
|
echo export PYTHONPATH=\$PYTHONPATH:$TRIO2O_DIR >> $RC_DIR/.localrc.auto
|
|
|
|
setup_package $TRIO2O_DIR -e
|
|
|
|
recreate_database trio2o
|
|
trio2o-db-manage --config-file="$TRIO2O_API_CONF" db_sync
|
|
|
|
elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
|
|
echo_summary "Initializing Trio2o Service"
|
|
|
|
if [[ ${USE_VENV} = True ]]; then
|
|
PROJECT_VENV["trio2o"]=${TRIO2O_DIR}.venv
|
|
TRIO2O_BIN_DIR=${PROJECT_VENV["trio2o"]}/bin
|
|
else
|
|
TRIO2O_BIN_DIR=$(get_python_exec_prefix)
|
|
fi
|
|
|
|
if is_service_enabled t-oapi; then
|
|
|
|
create_trio2o_accounts
|
|
|
|
if [[ "$TRIO2O_DEPLOY_WITH_WSGI" == "True" ]]; then
|
|
start_trio2o_api_wsgi
|
|
else
|
|
run_process t-oapi "$TRIO2O_BIN_DIR/trio2o-api --config-file $TRIO2O_API_CONF"
|
|
fi
|
|
fi
|
|
|
|
if is_service_enabled t-ngw; then
|
|
|
|
create_nova_apigw_accounts
|
|
|
|
run_process t-ngw "$TRIO2O_BIN_DIR/trio2o-nova-apigw --config-file $TRIO2O_NOVA_APIGW_CONF"
|
|
|
|
get_or_create_endpoint "compute" \
|
|
"$POD_REGION_NAME" \
|
|
"$NOVA_SERVICE_PROTOCOL://$NOVA_SERVICE_HOST:$NOVA_SERVICE_PORT/compute/v2.1" \
|
|
"$NOVA_SERVICE_PROTOCOL://$NOVA_SERVICE_HOST:$NOVA_SERVICE_PORT/compute/v2.1" \
|
|
"$NOVA_SERVICE_PROTOCOL://$NOVA_SERVICE_HOST:$NOVA_SERVICE_PORT/compute/v2.1"
|
|
|
|
token=$(openstack --os-cloud devstack-admin --os-region-name=RegionOne token issue -c id -f value)
|
|
|
|
data='{"pod": {"pod_name": '\"$REGION_NAME\"'}}'
|
|
curl -X POST http://$TRIO2O_NOVA_APIGW_HOST:$TRIO2O_API_PORT/v1.0/pods -H "Content-Type: application/json" \
|
|
-H "X-Auth-Token: $token" -d "$data"
|
|
|
|
data='{"pod": {"pod_name": '\"$POD_REGION_NAME\"', "az_name": "az1"}}'
|
|
curl -X POST http://$TRIO2O_NOVA_APIGW_HOST:$TRIO2O_API_PORT/v1.0/pods -H "Content-Type: application/json" \
|
|
-H "X-Auth-Token: $token" -d "$data"
|
|
fi
|
|
|
|
if is_service_enabled t-cgw; then
|
|
|
|
create_cinder_apigw_accounts
|
|
|
|
run_process t-cgw "$TRIO2O_BIN_DIR/trio2o-cinder-apigw --config-file $TRIO2O_CINDER_APIGW_CONF"
|
|
|
|
get_or_create_endpoint "volumev3" \
|
|
"$POD_REGION_NAME" \
|
|
"$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/volume/v3/"'$(tenant_id)s' \
|
|
"$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/volume/v3/"'$(tenant_id)s' \
|
|
"$CINDER_SERVICE_PROTOCOL://$CINDER_SERVICE_HOST:$CINDER_SERVICE_PORT/volume/v3/"'$(tenant_id)s'
|
|
fi
|
|
|
|
if is_service_enabled t-ojob; then
|
|
|
|
run_process t-ojob "$TRIO2O_BIN_DIR/trio2o-xjob --config-file $TRIO2O_XJOB_CONF"
|
|
fi
|
|
fi
|
|
|
|
if [[ "$1" == "unstack" ]]; then
|
|
|
|
if is_service_enabled t-oapi; then
|
|
if [[ "$TRIO2O_DEPLOY_WITH_WSGI" == "True" ]]; then
|
|
stop_trio2o_api_wsgi
|
|
clean_trio2o_api_wsgi
|
|
else
|
|
stop_process t-oapi
|
|
fi
|
|
fi
|
|
|
|
if is_service_enabled t-ngw; then
|
|
stop_process t-ngw
|
|
fi
|
|
|
|
if is_service_enabled t-cgw; then
|
|
stop_process t-cgw
|
|
fi
|
|
|
|
if is_service_enabled t-ojob; then
|
|
stop_process t-ojob
|
|
fi
|
|
fi
|