
This converts the special cases in the is_service_enabled() function to call individual functions declared by the projects. This allows projects that are not in the DevStack repo and called via the extras.d plugin to handle an equivalent service alias. * Ceilometer * Cinder * Glance * Neutron * Nova * Swift TODO: remove the tests from is_service_enabled() after a transition period Patch Set 2: Rebased Change-Id: Ic78be433f93a9dd5f46be548bdbd4c984e0da6e7
234 lines
8.5 KiB
Plaintext
234 lines
8.5 KiB
Plaintext
# lib/ceilometer
|
|
# Install and start **Ceilometer** service
|
|
|
|
# To enable a minimal set of Ceilometer services, add the following to localrc:
|
|
#
|
|
# enable_service ceilometer-acompute ceilometer-acentral ceilometer-anotification ceilometer-collector ceilometer-api
|
|
#
|
|
# To ensure Ceilometer alarming services are enabled also, further add to the localrc:
|
|
#
|
|
# enable_service ceilometer-alarm-notifier ceilometer-alarm-evaluator
|
|
|
|
# Dependencies:
|
|
#
|
|
# - functions
|
|
# - OS_AUTH_URL for auth in api
|
|
# - DEST set to the destination directory
|
|
# - SERVICE_PASSWORD, SERVICE_TENANT_NAME for auth in api
|
|
# - STACK_USER service user
|
|
|
|
# stack.sh
|
|
# ---------
|
|
# - install_ceilometer
|
|
# - configure_ceilometer
|
|
# - init_ceilometer
|
|
# - start_ceilometer
|
|
# - stop_ceilometer
|
|
# - cleanup_ceilometer
|
|
|
|
# Save trace setting
|
|
XTRACE=$(set +o | grep xtrace)
|
|
set +o xtrace
|
|
|
|
|
|
# Defaults
|
|
# --------
|
|
|
|
# Set up default directories
|
|
CEILOMETER_DIR=$DEST/ceilometer
|
|
CEILOMETERCLIENT_DIR=$DEST/python-ceilometerclient
|
|
CEILOMETER_CONF_DIR=/etc/ceilometer
|
|
CEILOMETER_CONF=$CEILOMETER_CONF_DIR/ceilometer.conf
|
|
CEILOMETER_API_LOG_DIR=/var/log/ceilometer-api
|
|
CEILOMETER_AUTH_CACHE_DIR=${CEILOMETER_AUTH_CACHE_DIR:-/var/cache/ceilometer}
|
|
|
|
# Support potential entry-points console scripts
|
|
CEILOMETER_BIN_DIR=$(get_python_exec_prefix)
|
|
|
|
# Set up database backend
|
|
CEILOMETER_BACKEND=${CEILOMETER_BACKEND:-mysql}
|
|
|
|
# Ceilometer connection info.
|
|
CEILOMETER_SERVICE_PROTOCOL=http
|
|
CEILOMETER_SERVICE_HOST=$SERVICE_HOST
|
|
CEILOMETER_SERVICE_PORT=${CEILOMETER_SERVICE_PORT:-8777}
|
|
|
|
# Tell Tempest this project is present
|
|
TEMPEST_SERVICES+=,ceilometer
|
|
|
|
|
|
# Functions
|
|
# ---------
|
|
|
|
# Test if any Ceilometer services are enabled
|
|
# is_ceilometer_enabled
|
|
function is_ceilometer_enabled {
|
|
[[ ,${ENABLED_SERVICES} =~ ,"ceilometer-" ]] && return 0
|
|
return 1
|
|
}
|
|
|
|
# create_ceilometer_accounts() - Set up common required ceilometer accounts
|
|
|
|
create_ceilometer_accounts() {
|
|
|
|
SERVICE_TENANT=$(keystone tenant-list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
|
|
ADMIN_ROLE=$(keystone role-list | awk "/ admin / { print \$2 }")
|
|
|
|
# Ceilometer
|
|
if [[ "$ENABLED_SERVICES" =~ "ceilometer-api" ]]; then
|
|
CEILOMETER_USER=$(keystone user-create \
|
|
--name=ceilometer \
|
|
--pass="$SERVICE_PASSWORD" \
|
|
--tenant_id $SERVICE_TENANT \
|
|
--email=ceilometer@example.com \
|
|
| grep " id " | get_field 2)
|
|
keystone user-role-add \
|
|
--tenant-id $SERVICE_TENANT \
|
|
--user-id $CEILOMETER_USER \
|
|
--role-id $ADMIN_ROLE
|
|
if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then
|
|
CEILOMETER_SERVICE=$(keystone service-create \
|
|
--name=ceilometer \
|
|
--type=metering \
|
|
--description="OpenStack Telemetry Service" \
|
|
| grep " id " | get_field 2)
|
|
keystone endpoint-create \
|
|
--region RegionOne \
|
|
--service_id $CEILOMETER_SERVICE \
|
|
--publicurl "$CEILOMETER_SERVICE_PROTOCOL://$CEILOMETER_SERVICE_HOST:$CEILOMETER_SERVICE_PORT" \
|
|
--adminurl "$CEILOMETER_SERVICE_PROTOCOL://$CEILOMETER_SERVICE_HOST:$CEILOMETER_SERVICE_PORT" \
|
|
--internalurl "$CEILOMETER_SERVICE_PROTOCOL://$CEILOMETER_SERVICE_HOST:$CEILOMETER_SERVICE_PORT"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
# cleanup_ceilometer() - Remove residual data files, anything left over from previous
|
|
# runs that a clean run would need to clean up
|
|
function cleanup_ceilometer() {
|
|
mongo ceilometer --eval "db.dropDatabase();"
|
|
}
|
|
|
|
# configure_ceilometerclient() - Set config files, create data dirs, etc
|
|
function configure_ceilometerclient() {
|
|
setup_develop $CEILOMETERCLIENT_DIR
|
|
sudo install -D -m 0644 -o $STACK_USER {$CEILOMETERCLIENT_DIR/tools/,/etc/bash_completion.d/}ceilometer.bash_completion
|
|
}
|
|
|
|
# configure_ceilometer() - Set config files, create data dirs, etc
|
|
function configure_ceilometer() {
|
|
setup_develop $CEILOMETER_DIR
|
|
|
|
[ ! -d $CEILOMETER_CONF_DIR ] && sudo mkdir -m 755 -p $CEILOMETER_CONF_DIR
|
|
sudo chown $STACK_USER $CEILOMETER_CONF_DIR
|
|
|
|
[ ! -d $CEILOMETER_API_LOG_DIR ] && sudo mkdir -m 755 -p $CEILOMETER_API_LOG_DIR
|
|
sudo chown $STACK_USER $CEILOMETER_API_LOG_DIR
|
|
|
|
iniset_rpc_backend ceilometer $CEILOMETER_CONF DEFAULT
|
|
|
|
iniset $CEILOMETER_CONF DEFAULT notification_topics 'notifications'
|
|
iniset $CEILOMETER_CONF DEFAULT verbose True
|
|
|
|
# Install the policy file for the API server
|
|
cp $CEILOMETER_DIR/etc/ceilometer/policy.json $CEILOMETER_CONF_DIR
|
|
cp $CEILOMETER_DIR/etc/ceilometer/pipeline.yaml $CEILOMETER_CONF_DIR
|
|
iniset $CEILOMETER_CONF DEFAULT policy_file $CEILOMETER_CONF_DIR/policy.json
|
|
|
|
if [ "$CEILOMETER_PIPELINE_INTERVAL" ]; then
|
|
sed -i "s/interval:.*/interval: ${CEILOMETER_PIPELINE_INTERVAL}/" $CEILOMETER_CONF_DIR/pipeline.yaml
|
|
fi
|
|
|
|
# the compute and central agents need these credentials in order to
|
|
# call out to the public nova and glance APIs
|
|
iniset $CEILOMETER_CONF DEFAULT os_username ceilometer
|
|
iniset $CEILOMETER_CONF DEFAULT os_password $SERVICE_PASSWORD
|
|
iniset $CEILOMETER_CONF DEFAULT os_tenant_name $SERVICE_TENANT_NAME
|
|
|
|
iniset $CEILOMETER_CONF keystone_authtoken auth_host $KEYSTONE_AUTH_HOST
|
|
iniset $CEILOMETER_CONF keystone_authtoken auth_port $KEYSTONE_AUTH_PORT
|
|
iniset $CEILOMETER_CONF keystone_authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
|
|
iniset $CEILOMETER_CONF keystone_authtoken admin_user ceilometer
|
|
iniset $CEILOMETER_CONF keystone_authtoken admin_password $SERVICE_PASSWORD
|
|
iniset $CEILOMETER_CONF keystone_authtoken admin_tenant_name $SERVICE_TENANT_NAME
|
|
iniset $CEILOMETER_CONF keystone_authtoken signing_dir $CEILOMETER_AUTH_CACHE_DIR
|
|
|
|
if [ "$CEILOMETER_BACKEND" = 'mysql' ] || [ "$CEILOMETER_BACKEND" = 'postgresql' ] ; then
|
|
iniset $CEILOMETER_CONF database connection `database_connection_url ceilometer`
|
|
else
|
|
iniset $CEILOMETER_CONF database connection mongodb://localhost:27017/ceilometer
|
|
configure_mongodb
|
|
cleanup_ceilometer
|
|
fi
|
|
}
|
|
|
|
function configure_mongodb() {
|
|
if is_fedora; then
|
|
# install mongodb client
|
|
install_package mongodb
|
|
# ensure smallfiles selected to minimize freespace requirements
|
|
sudo sed -i '/--smallfiles/!s/OPTIONS=\"/OPTIONS=\"--smallfiles /' /etc/sysconfig/mongod
|
|
|
|
restart_service mongod
|
|
fi
|
|
}
|
|
|
|
# init_ceilometer() - Initialize etc.
|
|
function init_ceilometer() {
|
|
# Create cache dir
|
|
sudo mkdir -p $CEILOMETER_AUTH_CACHE_DIR
|
|
sudo chown $STACK_USER $CEILOMETER_AUTH_CACHE_DIR
|
|
rm -f $CEILOMETER_AUTH_CACHE_DIR/*
|
|
|
|
if [ "$CEILOMETER_BACKEND" = 'mysql' ] || [ "$CEILOMETER_BACKEND" = 'postgresql' ] ; then
|
|
recreate_database ceilometer utf8
|
|
$CEILOMETER_BIN_DIR/ceilometer-dbsync
|
|
fi
|
|
}
|
|
|
|
# install_ceilometer() - Collect source and prepare
|
|
function install_ceilometer() {
|
|
git_clone $CEILOMETER_REPO $CEILOMETER_DIR $CEILOMETER_BRANCH
|
|
}
|
|
|
|
# install_ceilometerclient() - Collect source and prepare
|
|
function install_ceilometerclient() {
|
|
git_clone $CEILOMETERCLIENT_REPO $CEILOMETERCLIENT_DIR $CEILOMETERCLIENT_BRANCH
|
|
}
|
|
|
|
# start_ceilometer() - Start running processes, including screen
|
|
function start_ceilometer() {
|
|
if [[ "$VIRT_DRIVER" = 'libvirt' ]]; then
|
|
screen_it ceilometer-acompute "cd ; sg $LIBVIRT_GROUP \"ceilometer-agent-compute --config-file $CEILOMETER_CONF\""
|
|
fi
|
|
screen_it ceilometer-acentral "cd ; ceilometer-agent-central --config-file $CEILOMETER_CONF"
|
|
screen_it ceilometer-anotification "cd ; ceilometer-agent-notification --config-file $CEILOMETER_CONF"
|
|
screen_it ceilometer-collector "cd ; ceilometer-collector --config-file $CEILOMETER_CONF"
|
|
screen_it ceilometer-api "cd ; ceilometer-api -d -v --log-dir=$CEILOMETER_API_LOG_DIR --config-file $CEILOMETER_CONF"
|
|
|
|
echo "Waiting for ceilometer-api to start..."
|
|
if ! timeout $SERVICE_TIMEOUT sh -c "while ! curl --noproxy '*' -s http://localhost:8777/v2/ >/dev/null; do sleep 1; done"; then
|
|
die $LINENO "ceilometer-api did not start"
|
|
fi
|
|
|
|
screen_it ceilometer-alarm-notifier "cd ; ceilometer-alarm-notifier --config-file $CEILOMETER_CONF"
|
|
screen_it ceilometer-alarm-evaluator "cd ; ceilometer-alarm-evaluator --config-file $CEILOMETER_CONF"
|
|
}
|
|
|
|
# stop_ceilometer() - Stop running processes
|
|
function stop_ceilometer() {
|
|
# Kill the ceilometer screen windows
|
|
for serv in ceilometer-acompute ceilometer-acentral ceilometer-anotification ceilometer-collector ceilometer-api ceilometer-alarm-notifier ceilometer-alarm-evaluator; do
|
|
screen_stop $serv
|
|
done
|
|
}
|
|
|
|
|
|
# Restore xtrace
|
|
$XTRACE
|
|
|
|
# Tell emacs to use shell-script-mode
|
|
## Local variables:
|
|
## mode: shell-script
|
|
## End:
|