69d71cfdf9
In this release cycle, a few services are enabling the enforce scope and new defaults by default. Example Nova: - https://review.opendev.org/c/openstack/nova/+/866218) Until the new defaults enalbing by default is not released we should keep testing the old defaults in existing jobs and we can add new jobs testing new defautls. To do that we can provide the way in devstack to keep scope/new defaults disable by default which can be enabled by setting enforce_scope variable to true. Once any service release the new defaults enabled by default then we can switch the bhavior, enable the scope/new defaults by default and a single job can disbale them to keep testing the old defaults until service does not remove those. Change-Id: I5c2ec3e1667172a75e06458f16cf3d57947b2c53
193 lines
6.1 KiB
Bash
193 lines
6.1 KiB
Bash
#!/bin/bash
|
|
#
|
|
# lib/placement
|
|
# Functions to control the configuration and operation of the **Placement** service
|
|
#
|
|
|
|
# Dependencies:
|
|
#
|
|
# - ``functions`` file
|
|
# - ``DEST``, ``DATA_DIR``, ``STACK_USER`` must be defined
|
|
# - ``FILES``
|
|
|
|
# ``stack.sh`` calls the entry points in this order:
|
|
#
|
|
# - install_placement
|
|
# - cleanup_placement
|
|
# - configure_placement
|
|
# - init_placement
|
|
# - start_placement
|
|
# - stop_placement
|
|
|
|
# Save trace setting
|
|
_XTRACE_LIB_PLACEMENT=$(set +o | grep xtrace)
|
|
set +o xtrace
|
|
|
|
# Defaults
|
|
# --------
|
|
|
|
PLACEMENT_DIR=$DEST/placement
|
|
PLACEMENT_CONF_DIR=/etc/placement
|
|
PLACEMENT_CONF=$PLACEMENT_CONF_DIR/placement.conf
|
|
PLACEMENT_AUTH_STRATEGY=${PLACEMENT_AUTH_STRATEGY:-keystone}
|
|
# Placement virtual environment
|
|
if [[ ${USE_VENV} = True ]]; then
|
|
PROJECT_VENV["placement"]=${PLACEMENT_DIR}.venv
|
|
PLACEMENT_BIN_DIR=${PROJECT_VENV["placement"]}/bin
|
|
else
|
|
PLACEMENT_BIN_DIR=$(get_python_exec_prefix)
|
|
fi
|
|
PLACEMENT_UWSGI=$PLACEMENT_BIN_DIR/placement-api
|
|
PLACEMENT_UWSGI_CONF=$PLACEMENT_CONF_DIR/placement-uwsgi.ini
|
|
|
|
if is_service_enabled tls-proxy; then
|
|
PLACEMENT_SERVICE_PROTOCOL="https"
|
|
fi
|
|
|
|
# Public facing bits
|
|
PLACEMENT_SERVICE_PROTOCOL=${PLACEMENT_SERVICE_PROTOCOL:-$SERVICE_PROTOCOL}
|
|
PLACEMENT_SERVICE_HOST=${PLACEMENT_SERVICE_HOST:-$SERVICE_HOST}
|
|
|
|
# Flag to set the oslo_policy.enforce_scope and oslo_policy.enforce_new_defaults.
|
|
# This is used to switch the Placement API policies scope and new defaults.
|
|
# By Default, these flag are False.
|
|
# For more detail: https://docs.openstack.org/oslo.policy/latest/configuration/index.html#oslo_policy.enforce_scope
|
|
PLACEMENT_ENFORCE_SCOPE=$(trueorfalse False PLACEMENT_ENFORCE_SCOPE)
|
|
|
|
# Functions
|
|
# ---------
|
|
|
|
# Test if any placement services are enabled
|
|
# is_placement_enabled
|
|
function is_placement_enabled {
|
|
[[ ,${ENABLED_SERVICES} =~ ,"placement-api" ]] && return 0
|
|
return 1
|
|
}
|
|
|
|
# cleanup_placement() - Remove residual data files, anything left over from previous
|
|
# runs that a clean run would need to clean up
|
|
function cleanup_placement {
|
|
sudo rm -f $(apache_site_config_for placement-api)
|
|
remove_uwsgi_config "$PLACEMENT_UWSGI_CONF" "$PLACEMENT_UWSGI"
|
|
}
|
|
|
|
# _config_placement_apache_wsgi() - Set WSGI config files
|
|
function _config_placement_apache_wsgi {
|
|
local placement_api_apache_conf
|
|
local venv_path=""
|
|
local placement_bin_dir=""
|
|
placement_bin_dir=$(get_python_exec_prefix)
|
|
placement_api_apache_conf=$(apache_site_config_for placement-api)
|
|
|
|
if [[ ${USE_VENV} = True ]]; then
|
|
venv_path="python-path=${PROJECT_VENV["placement"]}/lib/$(python_version)/site-packages"
|
|
placement_bin_dir=${PROJECT_VENV["placement"]}/bin
|
|
fi
|
|
|
|
sudo cp $FILES/apache-placement-api.template $placement_api_apache_conf
|
|
sudo sed -e "
|
|
s|%APACHE_NAME%|$APACHE_NAME|g;
|
|
s|%PUBLICWSGI%|$placement_bin_dir/placement-api|g;
|
|
s|%SSLENGINE%|$placement_ssl|g;
|
|
s|%SSLCERTFILE%|$placement_certfile|g;
|
|
s|%SSLKEYFILE%|$placement_keyfile|g;
|
|
s|%USER%|$STACK_USER|g;
|
|
s|%VIRTUALENV%|$venv_path|g
|
|
s|%APIWORKERS%|$API_WORKERS|g
|
|
" -i $placement_api_apache_conf
|
|
}
|
|
|
|
# create_placement_conf() - Write config
|
|
function create_placement_conf {
|
|
rm -f $PLACEMENT_CONF
|
|
iniset $PLACEMENT_CONF placement_database connection `database_connection_url placement`
|
|
iniset $PLACEMENT_CONF DEFAULT debug "$ENABLE_DEBUG_LOG_LEVEL"
|
|
iniset $PLACEMENT_CONF api auth_strategy $PLACEMENT_AUTH_STRATEGY
|
|
configure_keystone_authtoken_middleware $PLACEMENT_CONF placement
|
|
setup_logging $PLACEMENT_CONF
|
|
}
|
|
|
|
# configure_placement() - Set config files, create data dirs, etc
|
|
function configure_placement {
|
|
sudo install -d -o $STACK_USER $PLACEMENT_CONF_DIR
|
|
create_placement_conf
|
|
|
|
if [[ "$WSGI_MODE" == "uwsgi" ]]; then
|
|
write_uwsgi_config "$PLACEMENT_UWSGI_CONF" "$PLACEMENT_UWSGI" "/placement"
|
|
else
|
|
_config_placement_apache_wsgi
|
|
fi
|
|
if [[ "$PLACEMENT_ENFORCE_SCOPE" == "True" || "$ENFORCE_SCOPE" == "True" ]]; then
|
|
iniset $PLACEMENT_CONF oslo_policy enforce_new_defaults True
|
|
iniset $PLACEMENT_CONF oslo_policy enforce_scope True
|
|
else
|
|
iniset $PLACEMENT_CONF oslo_policy enforce_new_defaults False
|
|
iniset $PLACEMENT_CONF oslo_policy enforce_scope False
|
|
fi
|
|
}
|
|
|
|
# create_placement_accounts() - Set up required placement accounts
|
|
# and service and endpoints.
|
|
function create_placement_accounts {
|
|
create_service_user "placement" "admin"
|
|
local placement_api_url="$PLACEMENT_SERVICE_PROTOCOL://$PLACEMENT_SERVICE_HOST/placement"
|
|
get_or_create_service "placement" "placement" "Placement Service"
|
|
get_or_create_endpoint \
|
|
"placement" \
|
|
"$REGION_NAME" \
|
|
"$placement_api_url"
|
|
}
|
|
|
|
# init_placement() - Create service user and endpoints
|
|
function init_placement {
|
|
recreate_database placement
|
|
$PLACEMENT_BIN_DIR/placement-manage db sync
|
|
create_placement_accounts
|
|
}
|
|
|
|
# install_placement() - Collect source and prepare
|
|
function install_placement {
|
|
install_apache_wsgi
|
|
# Install the openstackclient placement client plugin for CLI
|
|
pip_install_gr osc-placement
|
|
git_clone $PLACEMENT_REPO $PLACEMENT_DIR $PLACEMENT_BRANCH
|
|
setup_develop $PLACEMENT_DIR
|
|
}
|
|
|
|
# start_placement_api() - Start the API processes ahead of other things
|
|
function start_placement_api {
|
|
if [[ "$WSGI_MODE" == "uwsgi" ]]; then
|
|
run_process "placement-api" "$(which uwsgi) --procname-prefix placement --ini $PLACEMENT_UWSGI_CONF"
|
|
else
|
|
enable_apache_site placement-api
|
|
restart_apache_server
|
|
fi
|
|
|
|
echo "Waiting for placement-api to start..."
|
|
if ! wait_for_service $SERVICE_TIMEOUT $PLACEMENT_SERVICE_PROTOCOL://$PLACEMENT_SERVICE_HOST/placement; then
|
|
die $LINENO "placement-api did not start"
|
|
fi
|
|
}
|
|
|
|
function start_placement {
|
|
start_placement_api
|
|
}
|
|
|
|
# stop_placement() - Disable the api service and stop it.
|
|
function stop_placement {
|
|
if [[ "$WSGI_MODE" == "uwsgi" ]]; then
|
|
stop_process "placement-api"
|
|
else
|
|
disable_apache_site placement-api
|
|
restart_apache_server
|
|
fi
|
|
}
|
|
|
|
# Restore xtrace
|
|
$_XTRACE_LIB_PLACEMENT
|
|
|
|
# Tell emacs to use shell-script-mode
|
|
## Local variables:
|
|
## mode: shell-script
|
|
## End:
|