Files
masakari/devstack/plugin.sh
Ghanshyam Mann 513c29078f [goal] Deprecate the JSON formatted policy file
As per the community goal of migrating the policy file
the format from JSON to YAML[1], we need to do two things:

1. Change the default value of '[oslo_policy] policy_file''
config option from 'policy.json' to 'policy.yaml' with
upgrade checks.

2. Deprecate the JSON formatted policy file on the project side
via warning in doc and releasenotes.

Also replace policy.json to policy.yaml ref from doc and tests.

[1]https://governance.openstack.org/tc/goals/selected/wallaby/migrate-policy-format-from-json-to-yaml.html

Change-Id: Iad942530b5d540af3d3c074e9944687b93bcd7f2
2020-12-23 00:47:36 +00:00

393 lines
15 KiB
Bash

#!/bin/bash
#
# lib/masakari
# Functions to control the configuration and operation of the **Masakari** 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:
#
# masakari-api
# install - install_masakari
# post-config - configure_masakari
# extra - init_masakari start_masakari
# unstack - stop_masakari cleanup_masakari
#
# masakari-engine
# install - install_masakari
# post-config - configure_masakari
# extra - init_masakari start_masakari
# unstack - stop_masakari cleanup_masakari
#
# masakari-monitors
# post-config - configure_masakarimonitors
# extra - run_masakarimonitors
# unstack - stop_masakari_monitors cleanup_masakari_monitors
# Save trace setting
XTRACE=$(set +o | grep xtrace)
set +o xtrace
if is_service_enabled tls-proxy; then
MASAKARI_SERVICE_PROTOCOL="https"
fi
# Toggle for deploying Masakari under a wsgi server.
MASAKARI_USE_MOD_WSGI=${MASAKARI_USE_MOD_WSGI:-True}
# Functions
# ---------
# setup_masakari_logging() - Adds logging configuration to conf files
function setup_masakari_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_masakari_accounts() - Set up common required masakari accounts
# Tenant User Roles
# ------------------------------------------------------------------
# service masakari admin # if enabled
function create_masakari_accounts {
if [[ "$ENABLED_SERVICES" =~ "masakari" ]]; then
create_service_user "$USERNAME" "admin"
local masakari_service=$(get_or_create_service "masakari" \
"instance-ha" "OpenStack High Availability")
if [ "$MASAKARI_USE_MOD_WSGI" == "False" ]; then
get_or_create_endpoint $masakari_service \
"$REGION_NAME" \
"$MASAKARI_SERVICE_PROTOCOL://$SERVICE_HOST:$MASAKARI_SERVICE_PORT/v1/\$(tenant_id)s" \
"$MASAKARI_SERVICE_PROTOCOL://$SERVICE_HOST:$MASAKARI_SERVICE_PORT/v1/\$(tenant_id)s" \
"$MASAKARI_SERVICE_PROTOCOL://$SERVICE_HOST:$MASAKARI_SERVICE_PORT/v1/\$(tenant_id)s"
else
get_or_create_endpoint $masakari_service \
"$REGION_NAME" \
"$MASAKARI_SERVICE_PROTOCOL://$SERVICE_HOST/instance-ha/v1/\$(tenant_id)s" \
"$MASAKARI_SERVICE_PROTOCOL://$SERVICE_HOST/instance-ha/v1/\$(tenant_id)s" \
"$MASAKARI_SERVICE_PROTOCOL://$SERVICE_HOST/instance-ha/v1/\$(tenant_id)s"
fi
fi
}
# stack.sh entry points
# ---------------------
# cleanup_masakari() - Remove residual data files, anything left over from previous
# runs that a clean run would need to clean up
function cleanup_masakari {
# Clean up dirs
rm -fr $MASAKARI_AUTH_CACHE_DIR/*
rm -fr $MASAKARI_CONF_DIR/*
if [ "$MASAKARI_USE_MOD_WSGI" == "True" ]; then
remove_uwsgi_config "$MASAKARI_UWSGI_CONF" "$MASAKARI_UWSGI"
fi
}
# cleanup_masakari_monitors() - Remove residual data files, anything left over from previous
# runs that a clean run would need to clean up
function cleanup_masakari_monitors {
# Clean up dirs
rm -fr $MASAKARI_MONITORS_CONF_DIR/*
}
# iniset_conditional() - Sets the value in the inifile, but only if it's
# actually got a value
function iniset_conditional {
local FILE=$1
local SECTION=$2
local OPTION=$3
local VALUE=$4
if [[ -n "$VALUE" ]]; then
iniset ${FILE} ${SECTION} ${OPTION} ${VALUE}
fi
}
# configure_masakari() - Set config files, create data dirs, etc
function configure_masakari {
setup_develop $MASAKARI_DIR
# Create the masakari conf dir and cache dirs if they don't exist
sudo install -d -o $STACK_USER ${MASAKARI_CONF_DIR} ${MASAKARI_AUTH_CACHE_DIR}
# Copy api-paste file over to the masakari conf dir
cp $MASAKARI_LOCAL_API_PASTE_INI $MASAKARI_API_PASTE_INI
# (Re)create masakari conf files
rm -f $MASAKARI_CONF
# (Re)create masakari api conf file if needed
if is_service_enabled masakari-api; then
oslo-config-generator --namespace keystonemiddleware.auth_token \
--namespace masakari \
--namespace oslo.db \
> $MASAKARI_CONF
# Set common configuration values (but only if they're defined)
iniset $MASAKARI_CONF DEFAULT masakari_api_workers "$API_WORKERS"
iniset $MASAKARI_CONF database connection `database_connection_url masakari`
# Set taskflow connection to store the recovery workflow details in db
iniset $MASAKARI_CONF taskflow connection `database_connection_url masakari`
setup_masakari_logging $MASAKARI_CONF
configure_auth_token_middleware $MASAKARI_CONF masakari $MASAKARI_AUTH_CACHE_DIR
fi
# Set os_privileged_user credentials (used for connecting nova service)
iniset $MASAKARI_CONF DEFAULT os_privileged_user_name nova
iniset $MASAKARI_CONF DEFAULT os_privileged_user_auth_url "${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_AUTH_HOST}/identity"
iniset $MASAKARI_CONF DEFAULT os_privileged_user_password "$SERVICE_PASSWORD"
iniset $MASAKARI_CONF DEFAULT os_privileged_user_tenant "$SERVICE_PROJECT_NAME"
iniset $MASAKARI_CONF DEFAULT graceful_shutdown_timeout "$SERVICE_GRACEFUL_SHUTDOWN_TIMEOUT"
iniset_rpc_backend masakari $MASAKARI_CONF DEFAULT
if is_service_enabled tls-proxy; then
iniset $MASAKARI_CONF DEFAULT masakari_api_listen_port $MASAKARI_SERVICE_PORT_INT
fi
if [ "$MASAKARI_USE_MOD_WSGI" == "True" ]; then
write_uwsgi_config "$MASAKARI_UWSGI_CONF" "$MASAKARI_UWSGI" "/instance-ha"
fi
}
# configure_masakarimonitors() - Set config files, create data dirs, etc
function configure_masakarimonitors {
git_clone $MASAKARI_MONITORS_REPO $MASAKARI_MONITORS_DIR $MASAKARI_MONITORS_BRANCH
# Create masakarimonitors conf dir and cache dirs if they don't exist
sudo install -d -o $STACK_USER ${MASAKARI_MONITORS_CONF_DIR}
setup_develop $MASAKARI_MONITORS_DIR
# (Re)create masakarimonitors conf files
rm -f $MASAKARI_MONITORS_CONF
# (Re)create masakarimonitors api conf file if needed
oslo-config-generator --namespace masakarimonitors.conf \
--namespace oslo.log \
--namespace oslo.middleware \
> $MASAKARI_MONITORS_CONF
iniset $MASAKARI_MONITORS_CONF api auth_url "${KEYSTONE_AUTH_PROTOCOL}://${KEYSTONE_AUTH_HOST}/identity"
iniset $MASAKARI_MONITORS_CONF api password "$SERVICE_PASSWORD"
iniset $MASAKARI_MONITORS_CONF api project_name "$SERVICE_PROJECT_NAME"
iniset $MASAKARI_MONITORS_CONF api username "$USERNAME"
iniset $MASAKARI_MONITORS_CONF api user_domain_id "$SERVICE_DOMAIN_ID"
iniset $MASAKARI_MONITORS_CONF api project_domain_id "$SERVICE_DOMAIN_ID"
iniset $MASAKARI_MONITORS_CONF api region "$REGION_NAME"
iniset $MASAKARI_MONITORS_CONF process process_list_path "/etc/masakarimonitors/process_list.yaml"
cp $DEST/masakari-monitors/etc/masakarimonitors/process_list.yaml.sample \
$DEST/masakari-monitors/etc/masakarimonitors/process_list.yaml
cp $DEST/masakari-monitors/etc/masakarimonitors/process_list.yaml \
$MASAKARI_MONITORS_CONF_DIR
cp $DEST/masakari-monitors/etc/masakarimonitors/processmonitor.conf.sample \
$DEST/masakari-monitors/etc/masakarimonitors/processmonitor.conf
cp $DEST/masakari-monitors/etc/masakarimonitors/processmonitor.conf $MASAKARI_MONITORS_CONF_DIR
sed -i 's/start nova-compute/start devstack@n-cpu/g' $MASAKARI_MONITORS_CONF_DIR/process_list.yaml
sed -i 's/restart nova-compute/restart devstack@n-cpu/g' $MASAKARI_MONITORS_CONF_DIR/process_list.yaml
sed -i 's/start masakari-instancemonitor/start devstack@masakari-instancemonitor/g' \
$MASAKARI_MONITORS_CONF_DIR/process_list.yaml
sed -i 's/restart masakari-instancemonitor/restart devstack@masakari-instancemonitor/g' \
$MASAKARI_MONITORS_CONF_DIR/process_list.yaml
# NOTE(neha-alhat): remove monitoring of host-monitor process as
# devstack support for host-monitor is not added yet.
sed -i '43,52d' $MASAKARI_MONITORS_CONF_DIR/process_list.yaml
}
# install_masakari() - Collect source and prepare
function install_masakari {
setup_develop $MASAKARI_DIR
}
# init_masakari() - Initializes Masakari Database as a Service
function init_masakari {
# (Re)Create masakari db
recreate_database masakari
# Initialize the masakari database
$MASAKARI_MANAGE db sync
# Add an admin user to the 'tempest' alt_demo tenant.
# This is needed to test the guest_log functionality.
# The first part mimics the tempest setup, so make sure we have that.
ALT_USERNAME=${ALT_USERNAME:-alt_demo}
ALT_TENANT_NAME=${ALT_TENANT_NAME:-alt_demo}
get_or_create_project ${ALT_TENANT_NAME} default
get_or_create_user ${ALT_USERNAME} "$ADMIN_PASSWORD" "default" "alt_demo@example.com"
get_or_add_user_project_role Member ${ALT_USERNAME} ${ALT_TENANT_NAME}
# The second part adds an admin user to the tenant.
ADMIN_ALT_USERNAME=${ADMIN_ALT_USERNAME:-admin_${ALT_USERNAME}}
get_or_create_user ${ADMIN_ALT_USERNAME} "$ADMIN_PASSWORD" "default" "admin_alt_demo@example.com"
get_or_add_user_project_role admin ${ADMIN_ALT_USERNAME} ${ALT_TENANT_NAME}
}
# start_masakari() - Start running processes
function start_masakari {
local masakari_url
if [[ "$ENABLED_SERVICES" =~ "masakari-api" ]]; then
if [ "$MASAKARI_USE_MOD_WSGI" == "False" ]; then
run_process masakari-api "$MASAKARI_BIN_DIR/masakari-api --config-file=$MASAKARI_CONF --debug"
masakari_url=$MASAKARI_SERVICE_PROTOCOL://$MASAKARI_SERVICE_HOST:$MASAKARI_SERVICE_PORT
# Start proxy if tls enabled
if is_service_enabled tls_proxy; then
start_tls_proxy masakari-service '*' $MASAKARI_SERVICE_PORT $SERVICE_HOST $MASAKARI_SERVICE_PORT_INT
fi
else
run_process "masakari-api" "$(which uwsgi) --procname-prefix masakari-api --ini $MASAKARI_UWSGI_CONF"
masakari_url=$MASAKARI_SERVICE_PROTOCOL://$MASAKARI_SERVICE_HOST/instance-ha/v1
fi
echo "Waiting for Masakari API to start..."
if ! wait_for_service $SERVICE_TIMEOUT $masakari_url; then
die $LINENO "masakari-api did not start"
fi
fi
if [[ "$ENABLED_SERVICES" =~ "masakari-engine" ]]; then
run_process masakari-engine "$MASAKARI_BIN_DIR/masakari-engine --config-file=$MASAKARI_CONF --debug"
fi
}
#install masakari-dashboard
function install_masakaridashboard {
git_clone $MASAKARI_DASHBOARD_REPO $MASAKARI_DASHBOARD_DIR $MASAKARI_DASHBOARD_BRANCH
setup_develop $MASAKARI_DASHBOARD_DIR
ln -fs $MASAKARI_DASHBOARD_DIR/masakaridashboard/local/enabled/_50_masakaridashboard.py \
$HORIZON_DIR/openstack_dashboard/local/enabled
ln -fs $MASAKARI_DASHBOARD_DIR/masakaridashboard/local/local_settings.d/_50_masakari.py \
$HORIZON_DIR/openstack_dashboard/local/local_settings.d
ln -fs $MASAKARI_DASHBOARD_DIR/masakaridashboard/conf/masakari_policy.yaml \
$HORIZON_DIR/openstack_dashboard/conf
}
#uninstall masakari-dashboard
function uninstall_masakaridashboard {
sudo rm -f $DEST/horizon/openstack_dashboard/local/enabled/_50_masakaridashboard.py
sudo rm -f $DEST/horizon/openstack_dashboard/local/local_settings.d/_50_masakari.py
sudo rm -f $DEST/horizon/openstack_dashboard/conf/masakari_policy.yaml
restart_apache_server
}
# stop_masakari() - Stop running processes
function stop_masakari {
# Kill the masakari services
local serv
for serv in masakari-engine masakari-api; do
stop_process $serv
done
}
#run masakari-monitors
function run_masakarimonitors {
run_process masakari-processmonitor "$MASAKARI_BIN_DIR/masakari-processmonitor"
run_process masakari-instancemonitor "$MASAKARI_BIN_DIR/masakari-instancemonitor"
run_process masakari-introspectiveinstancemonitor "$MASAKARI_BIN_DIR/masakari-introspectiveinstancemonitor"
}
# stop_masakari_monitors() - Stop running processes
function stop_masakari_monitors {
# Kill the masakari-monitors services
local serv
for serv in masakari-processmonitor masakari-instancemonitor masakari-introspectiveinstancemonitor; do
stop_process $serv
done
}
# Dispatcher for masakari plugin
if is_service_enabled masakari; then
if [[ "$1" == "stack" && "$2" == "install" ]]; then
echo_summary "Installing Masakari"
if [[ "$ENABLED_SERVICES" =~ "masakari-api" ]]; then
install_masakari
fi
elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
echo_summary "Configuring Masakari"
if [[ "$ENABLED_SERVICES" =~ "masakari-api" ]]; then
configure_masakari
if is_service_enabled key; then
create_masakari_accounts
fi
fi
elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
# Initialize and Start the masakari API and masakari taskmgr components
if [[ "$ENABLED_SERVICES" =~ "masakari-api" ]]; then
init_masakari
echo_summary "Starting Masakari"
start_masakari
fi
if is_service_enabled horizon; then
# install masakari-dashboard
echo_summary "Installing masakari-dashboard"
install_masakaridashboard
fi
fi
if [[ "$1" == "unstack" ]]; then
if is_service_enabled horizon; then
echo_summary "Uninstall masakari-dashboard"
uninstall_masakaridashboard
fi
if [[ "$ENABLED_SERVICES" =~ "masakari-api" ]]; then
stop_masakari
cleanup_masakari
fi
fi
fi
if is_service_enabled masakari-monitors; then
if [[ "$1" == "stack" && "$2" == "post-config" ]]; then
if is_service_enabled n-cpu; then
# Configure masakari-monitors
echo_summary "Configure masakari-monitors"
configure_masakarimonitors
fi
elif [[ "$1" == "stack" && "$2" == "extra" ]]; then
if is_service_enabled n-cpu; then
# Run masakari-monitors
echo_summary "Running masakari-monitors"
run_masakarimonitors
fi
fi
if [[ "$1" == "unstack" ]]; then
if is_service_enabled n-cpu; then
echo_summary "Uninstall masakari-monitors"
stop_masakari_monitors
cleanup_masakari_monitors
fi
fi
fi
# Restore xtrace
$XTRACE
# Tell emacs to use shell-script-mode
## Local variables:
## mode: shell-script
## End: