lib/ceilometer
93361643
 # lib/ceilometer
6d04fd7b
 # Install and start **Ceilometer** service
 
8d137034
 # To enable a minimal set of Ceilometer services, add the following to localrc:
cb961597
 #
1c402286
 #   enable_service ceilometer-acompute ceilometer-acentral ceilometer-anotification ceilometer-collector ceilometer-api
8d137034
 #
 # To ensure Ceilometer alarming services are enabled also, further add to the localrc:
cb961597
 #
19eed744
 #   enable_service ceilometer-alarm-notifier ceilometer-alarm-evaluator
31d31855
 
93361643
 # Dependencies:
6a5aa7c6
 #
93361643
 # - functions
4a2b1c66
 # - OS_AUTH_URL for auth in api
ad80eadb
 # - DEST set to the destination directory
4a2b1c66
 # - SERVICE_PASSWORD, SERVICE_TENANT_NAME for auth in api
91b8d13e
 # - STACK_USER service user
93361643
 
 # stack.sh
 # ---------
6a5aa7c6
 # - install_ceilometer
 # - configure_ceilometer
 # - init_ceilometer
 # - start_ceilometer
 # - stop_ceilometer
 # - cleanup_ceilometer
93361643
 
7903b795
 # Save trace setting
 XTRACE=$(set +o | grep xtrace)
 set +o xtrace
93361643
 
 
 # Defaults
 # --------
 
6d04fd7b
 # Set up default directories
93361643
 CEILOMETER_DIR=$DEST/ceilometer
e583d9b8
 CEILOMETERCLIENT_DIR=$DEST/python-ceilometerclient
6d04fd7b
 CEILOMETER_CONF_DIR=/etc/ceilometer
 CEILOMETER_CONF=$CEILOMETER_CONF_DIR/ceilometer.conf
 CEILOMETER_API_LOG_DIR=/var/log/ceilometer-api
8c54849d
 CEILOMETER_AUTH_CACHE_DIR=${CEILOMETER_AUTH_CACHE_DIR:-/var/cache/ceilometer}
6d04fd7b
 
9fbeeddc
 # Support potential entry-points console scripts
9778b3cb
 CEILOMETER_BIN_DIR=$(get_python_exec_prefix)
93361643
 
9778b3cb
 # Set up database backend
69f74574
 CEILOMETER_BACKEND=${CEILOMETER_BACKEND:-mysql}
cc6b4435
 
fa5ccfff
 # Ceilometer connection info.
 CEILOMETER_SERVICE_PROTOCOL=http
 CEILOMETER_SERVICE_HOST=$SERVICE_HOST
 CEILOMETER_SERVICE_PORT=${CEILOMETER_SERVICE_PORT:-8777}
4237f590
 
 # Tell Tempest this project is present
 TEMPEST_SERVICES+=,ceilometer
 
fa5ccfff
 
cc6b4435
 # Functions
 # ---------
e4fa7213
 
 # Test if any Ceilometer services are enabled
 # is_ceilometer_enabled
 function is_ceilometer_enabled {
     [[ ,${ENABLED_SERVICES} =~ ,"ceilometer-" ]] && return 0
     return 1
 }
 
fa5ccfff
 # create_ceilometer_accounts() - Set up common required ceilometer accounts
 
 create_ceilometer_accounts() {
 
19685428
     SERVICE_TENANT=$(openstack project list | awk "/ $SERVICE_TENANT_NAME / { print \$2 }")
     ADMIN_ROLE=$(openstack role list | awk "/ admin / { print \$2 }")
fa5ccfff
 
     # Ceilometer
     if [[ "$ENABLED_SERVICES" =~ "ceilometer-api" ]]; then
19685428
         CEILOMETER_USER=$(openstack user create \
             ceilometer \
             --password "$SERVICE_PASSWORD" \
             --project $SERVICE_TENANT \
             --email ceilometer@example.com \
fa5ccfff
             | grep " id " | get_field 2)
19685428
         openstack role add \
             $ADMIN_ROLE \
             --project $SERVICE_TENANT \
             --user $CEILOMETER_USER
fa5ccfff
         if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then
19685428
             CEILOMETER_SERVICE=$(openstack service create \
                 ceilometer \
fa5ccfff
                 --type=metering \
                 --description="OpenStack Telemetry Service" \
                 | grep " id " | get_field 2)
19685428
             openstack endpoint create \
                 $CEILOMETER_SERVICE \
fa5ccfff
                 --region RegionOne \
19685428
                 --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/"
fa5ccfff
         fi
     fi
 }
 
cc6b4435
 
93361643
 # cleanup_ceilometer() - Remove residual data files, anything left over from previous
 # runs that a clean run would need to clean up
aee18c74
 function cleanup_ceilometer {
867cf42e
     mongo ceilometer --eval "db.dropDatabase();"
93361643
 }
 
e583d9b8
 # configure_ceilometerclient() - Set config files, create data dirs, etc
aee18c74
 function configure_ceilometerclient {
e583d9b8
     setup_develop $CEILOMETERCLIENT_DIR
8664ca53
     sudo install -D -m 0644 -o $STACK_USER {$CEILOMETERCLIENT_DIR/tools/,/etc/bash_completion.d/}ceilometer.bash_completion
e583d9b8
 }
 
93361643
 # configure_ceilometer() - Set config files, create data dirs, etc
aee18c74
 function configure_ceilometer {
93361643
     setup_develop $CEILOMETER_DIR
31d31855
 
c5259b4a
     [ ! -d $CEILOMETER_CONF_DIR ] && sudo mkdir -m 755 -p $CEILOMETER_CONF_DIR
e578effb
     sudo chown $STACK_USER $CEILOMETER_CONF_DIR
31d31855
 
c5259b4a
     [ ! -d $CEILOMETER_API_LOG_DIR ] &&  sudo mkdir -m 755 -p $CEILOMETER_API_LOG_DIR
e578effb
     sudo chown $STACK_USER $CEILOMETER_API_LOG_DIR
93361643
 
8c11f561
     iniset_rpc_backend ceilometer $CEILOMETER_CONF DEFAULT
d36268af
 
701eb619
     iniset $CEILOMETER_CONF DEFAULT notification_topics 'notifications'
4b3e4e52
     iniset $CEILOMETER_CONF DEFAULT verbose True
53a5f42e
 
4a2b1c66
     # Install the policy file for the API server
     cp $CEILOMETER_DIR/etc/ceilometer/policy.json $CEILOMETER_CONF_DIR
8407b2de
     cp $CEILOMETER_DIR/etc/ceilometer/pipeline.yaml $CEILOMETER_CONF_DIR
4a2b1c66
     iniset $CEILOMETER_CONF DEFAULT policy_file $CEILOMETER_CONF_DIR/policy.json
 
8ceb794c
     if [ "$CEILOMETER_PIPELINE_INTERVAL" ]; then
         sed -i "s/interval:.*/interval: ${CEILOMETER_PIPELINE_INTERVAL}/" $CEILOMETER_CONF_DIR/pipeline.yaml
     fi
 
14246ac1
     # 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
 
2ed4ae70
     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
4a2b1c66
     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
8c54849d
     iniset $CEILOMETER_CONF keystone_authtoken signing_dir $CEILOMETER_AUTH_CACHE_DIR
4a2b1c66
 
246d9bbd
     if [ "$CEILOMETER_BACKEND" = 'mysql' ] || [ "$CEILOMETER_BACKEND" = 'postgresql' ] ; then
9778b3cb
         iniset $CEILOMETER_CONF database connection `database_connection_url ceilometer`
     else
         iniset $CEILOMETER_CONF database connection mongodb://localhost:27017/ceilometer
         configure_mongodb
         cleanup_ceilometer
     fi
93361643
 }
 
aee18c74
 function configure_mongodb {
cc6b4435
     if is_fedora; then
39d50033
         # install mongodb client
         install_package mongodb
285c75e7
         # ensure smallfiles selected to minimize freespace requirements
         sudo sed -i '/--smallfiles/!s/OPTIONS=\"/OPTIONS=\"--smallfiles /' /etc/sysconfig/mongod
 
         restart_service mongod
     fi
 }
 
8c54849d
 # init_ceilometer() - Initialize etc.
aee18c74
 function init_ceilometer {
8c54849d
     # Create cache dir
     sudo mkdir -p $CEILOMETER_AUTH_CACHE_DIR
91b8d13e
     sudo chown $STACK_USER $CEILOMETER_AUTH_CACHE_DIR
8c54849d
     rm -f $CEILOMETER_AUTH_CACHE_DIR/*
9778b3cb
 
246d9bbd
     if [ "$CEILOMETER_BACKEND" = 'mysql' ] || [ "$CEILOMETER_BACKEND" = 'postgresql' ] ; then
9778b3cb
         recreate_database ceilometer utf8
         $CEILOMETER_BIN_DIR/ceilometer-dbsync
     fi
8c54849d
 }
 
93361643
 # install_ceilometer() - Collect source and prepare
aee18c74
 function install_ceilometer {
93361643
     git_clone $CEILOMETER_REPO $CEILOMETER_DIR $CEILOMETER_BRANCH
 }
 
e583d9b8
 # install_ceilometerclient() - Collect source and prepare
aee18c74
 function install_ceilometerclient {
e583d9b8
     git_clone $CEILOMETERCLIENT_REPO $CEILOMETERCLIENT_DIR $CEILOMETERCLIENT_BRANCH
 }
 
93361643
 # start_ceilometer() - Start running processes, including screen
aee18c74
 function start_ceilometer {
fc1b7786
     if [[ "$VIRT_DRIVER" = 'libvirt' ]]; then
         screen_it ceilometer-acompute "cd ; sg $LIBVIRT_GROUP \"ceilometer-agent-compute --config-file $CEILOMETER_CONF\""
     fi
6d4a9a87
     screen_it ceilometer-acentral "cd ; ceilometer-agent-central --config-file $CEILOMETER_CONF"
1c402286
     screen_it ceilometer-anotification "cd ; ceilometer-agent-notification --config-file $CEILOMETER_CONF"
6d4a9a87
     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"
1ed64cbb
 
     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
 
6d4a9a87
     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"
93361643
 }
7903b795
 
699a29f7
 # stop_ceilometer() - Stop running processes
aee18c74
 function stop_ceilometer {
699a29f7
     # Kill the ceilometer screen windows
1c402286
     for serv in ceilometer-acompute ceilometer-acentral ceilometer-anotification ceilometer-collector ceilometer-api ceilometer-alarm-notifier ceilometer-alarm-evaluator; do
9fc8792b
         screen_stop $serv
699a29f7
     done
 }
 
cc6b4435
 
7903b795
 # Restore xtrace
 $XTRACE
584d90ec
 
6a5aa7c6
 # Tell emacs to use shell-script-mode
 ## Local variables:
 ## mode: shell-script
 ## End: