blazar/devstack/plugin.sh

214 lines
7.7 KiB
Bash

# Install and start **blazar** reservations service
# Save trace setting
XTRACE=$(set +o | grep xtrace)
set +o xtrace
# Support entry points installation of console scripts
if [[ -d $BLAZAR_DIR/bin ]]; then
BLAZAR_BIN_DIR=$BLAZAR_DIR/bin
else
BLAZAR_BIN_DIR=$(get_python_exec_prefix)
fi
# Test if any Ceilometer services are enabled
# is_ceilometer_enabled
function is_blazar_enabled {
[[ ,${ENABLED_SERVICES} =~ ,"blazar-" ]] && return 0
return 1
}
# Oslo.Messaging RPC iniupdate cofiguration
function iniupdate_rpc_backend {
local file=$1
local section=$2
if is_service_enabled zeromq; then
iniset $file $section rpc_backend zmq
elif is_service_enabled qpid || [ -n "$QPID_HOST" ]; then
iniset $file $section rpc_backend qpid
elif is_service_enabled rabbit || { [ -n "$RABBIT_HOST" ] && [ -n "$RABBIT_PASSWORD" ]; }; then
iniset $file $section rpc_backend rabbit
fi
}
# configure_blazar() - Set config files, create data dirs, etc
function configure_blazar {
if [[ ! -d $BLAZAR_CONF_DIR ]]; then
sudo mkdir -p $BLAZAR_CONF_DIR
fi
sudo chown $STACK_USER $BLAZAR_CONF_DIR
BLAZAR_POLICY_FILE=$BLAZAR_CONF_DIR/policy.json
cp $BLAZAR_DIR/etc/policy.json $BLAZAR_POLICY_FILE
touch $BLAZAR_CONF_FILE
iniset $BLAZAR_CONF_FILE DEFAULT os_auth_version v3
iniset $BLAZAR_CONF_FILE DEFAULT os_auth_port 80
iniset $BLAZAR_CONF_FILE DEFAULT os_auth_prefix identity
iniset $BLAZAR_CONF_FILE DEFAULT os_admin_password $SERVICE_PASSWORD
iniset $BLAZAR_CONF_FILE DEFAULT os_admin_username blazar
iniset $BLAZAR_CONF_FILE DEFAULT os_admin_project_name $SERVICE_TENANT_NAME
iniset $BLAZAR_CONF_FILE DEFAULT identity_service $BLAZAR_IDENTITY_SERVICE_NAME
# keystone authtoken
_blazar_setup_keystone $BLAZAR_CONF_FILE keystone_authtoken
iniset $BLAZAR_CONF_FILE physical:host aggregate_freepool_name $BLAZAR_FREEPOOL_NAME
iniset $BLAZAR_CONF_FILE DEFAULT host $HOST_IP
iniset $BLAZAR_CONF_FILE DEFAULT debug $BLAZAR_DEBUG
iniset $BLAZAR_CONF_FILE DEFAULT verbose $BLAZAR_VERBOSE
iniset $BLAZAR_CONF_FILE manager plugins physical.host.plugin
iniset $BLAZAR_CONF_FILE api api_v2_controllers oshosts,leases
iniset $BLAZAR_CONF_FILE database connection `database_connection_url blazar`
iniset $BLAZAR_CONF_FILE DEFAULT use_syslog $SYSLOG
iniset_rpc_backend blazar $BLAZAR_CONF_FILE DEFAULT
iniupdate_rpc_backend $BLAZAR_CONF_FILE DEFAULT
ACTUAL_FILTERS=$(iniget $NOVA_CONF filter_scheduler enabled_filters)
if [[ -z "$ACTUAL_FILTERS" ]]; then
iniadd $NOVA_CONF filter_scheduler enabled_filters "RetryFilter, AvailabilityZoneFilter, RamFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter, BlazarFilter"
else
iniset $NOVA_CONF filter_scheduler enabled_filters "$ACTUAL_FILTERS,BlazarFilter"
fi
ACTUAL_AVAILABLE_FILTERS=$(iniget $NOVA_CONF filter_scheduler available_filters)
if [[ -z "$ACTUAL_AVAILABLE_FILTERS" ]]; then
iniset $NOVA_CONF filter_scheduler available_filters "nova.scheduler.filters.all_filters"
fi
iniadd $NOVA_CONF filter_scheduler available_filters "blazarnova.scheduler.filters.blazar_filter.BlazarFilter"
# TODO(hiro-kobayashi): This line should be deleted after the patch
# https://review.openstack.org/#/c/471590/ is merged.
iniadd $NOVA_CONF blazar:physical:host blazar_az_prefix blazar_
# Database
recreate_database blazar utf8
# Run Blazar db migrations
$BLAZAR_BIN_DIR/blazar-db-manage --config-file $BLAZAR_CONF_FILE upgrade head
}
# Configures keystone integration for blazar service
function _blazar_setup_keystone {
local conf_file=$1
local section=$2
local use_auth_url=$3
if [[ -z $skip_auth_cache ]]; then
iniset $conf_file $section signing_dir $BLAZAR_AUTH_CACHE_DIR
# Create cache dir
create_blazar_cache_dir
fi
configure_auth_token_middleware $conf_file $BLAZAR_USER_NAME $BLAZAR_AUTH_CACHE_DIR $section
}
# create_blazar_cache_dir() - Part of the _blazar_setup_keystone process
function create_blazar_cache_dir {
# Create cache dir
sudo mkdir -m 700 -p $BLAZAR_AUTH_CACHE_DIR
sudo chown $STACK_USER $BLAZAR_AUTH_CACHE_DIR
rm -f $BLAZAR_AUTH_CACHE_DIR/*
}
# create_blazar_aggregate_freepool() - Create a Nova aggregate to use as freepool (for host reservation)
function create_blazar_aggregate_freepool {
openstack aggregate create $BLAZAR_FREEPOOL_NAME
}
# create_blazar_accounts() - Set up common required BLAZAR accounts
#
# Tenant User Roles
# ------------------------------------------------------------------
# service BLAZAR admin # if enabled
#
function create_blazar_accounts {
SERVICE_TENANT=$(openstack project list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
ADMIN_ROLE=$(openstack role list | awk "/ admin / { print \$2 }")
BLAZAR_USER_ID=$(get_or_create_user $BLAZAR_USER_NAME \
"$SERVICE_PASSWORD" "default" "blazar@example.com")
get_or_add_user_project_role $ADMIN_ROLE $BLAZAR_USER_ID $SERVICE_TENANT
BLAZAR_SERVICE=$(get_or_create_service "blazar" \
"reservation" "Blazar Reservations Service")
get_or_create_endpoint $BLAZAR_SERVICE \
"$REGION_NAME" \
"$BLAZAR_SERVICE_PROTOCOL://$BLAZAR_SERVICE_HOST:$BLAZAR_SERVICE_PORT/v1" \
"$BLAZAR_SERVICE_PROTOCOL://$BLAZAR_SERVICE_HOST:$BLAZAR_SERVICE_PORT/v1" \
"$BLAZAR_SERVICE_PROTOCOL://$BLAZAR_SERVICE_HOST:$BLAZAR_SERVICE_PORT/v1"
KEYSTONEV3_SERVICE=$(get_or_create_service "keystonev3" \
"identityv3" "Keystone Identity Service V3")
get_or_create_endpoint $KEYSTONEV3_SERVICE \
"$REGION_NAME" \
"$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v3" \
"$KEYSTONE_AUTH_PROTOCOL://$KEYSTONE_AUTH_HOST:$KEYSTONE_AUTH_PORT/v3" \
"$KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v3"
}
# install_blazar() - Collect sources and install
function install_blazar {
echo "Install"
git_clone $BLAZAR_REPO $BLAZAR_DIR $BLAZAR_BRANCH
git_clone $BLAZARCLIENT_REPO $BLAZARCLIENT_DIR $BLAZARCLIENT_BRANCH
git_clone $BLAZARNOVA_REPO $BLAZARNOVA_DIR $BLAZARNOVA_BRANCH
setup_develop $BLAZAR_DIR
setup_develop $BLAZARCLIENT_DIR
setup_develop $BLAZARNOVA_DIR
}
# start_blazar() - Start running processes, including screen
function start_blazar {
run_process blazar-a "$BLAZAR_BIN_DIR/blazar-api --debug --config-file $BLAZAR_CONF_FILE"
run_process blazar-m "$BLAZAR_BIN_DIR/blazar-manager --debug --config-file $BLAZAR_CONF_FILE"
}
# stop_blazar() - Stop running processes
function stop_blazar {
for serv in blazar-a blazar-m; do
stop_process $serv
done
}
if is_service_enabled blazar blazar-m blazar-a; then
if [[ "$1" == "stack" && "$2" == "pre-config" ]]; then
echo "Pre installation steps for Blazar"
iniupdate_rpc_backend
elif [[ "$1" == "stack" && "$2" == "install" ]]; then
echo_summary "Installing Blazar"
# Use stack_install_service here to account for vitualenv
stack_install_service blazar
elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
echo_summary "Configuring Blazar"
configure_blazar
create_blazar_accounts
elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
echo_summary "Creating Nova aggregate used as freepool for Blazar Host Reservation"
create_blazar_aggregate_freepool
# Start the services
start_blazar
fi
if [[ "$1" == "unstack" ]]; then
echo_summary "Shutting Down Blazar"
stop_blazar
fi
fi
# Restore xtrace
$XTRACE