bb421bed58
This is a REST API in the same style as other OpenStack APIs. This also creates a new endpoint for the REST API which uses the serivce type 'orchestration'. The old endpoint now has the service type 'cloudformation'. This matches the pattern where the native openstack API gets a generic service type while the emulated EC2 API gets a specific type (eg, object-store, s3). There will be breakage for the time period where only one of this change and https://review.openstack.org/#/c/14263/ are approved, since keystone will have the incorrect service type for that period. Change-Id: I6a0d51a63da8017d375b4c065c4c9079dfca8fe3
218 lines
10 KiB
Plaintext
218 lines
10 KiB
Plaintext
# lib/heat
|
|
# Install and start Heat service
|
|
# To enable, add the following to localrc
|
|
# ENABLED_SERVICES+=,heat,h-api-cfn,h-api-cw,h-eng,h-meta
|
|
|
|
# Dependencies:
|
|
# - functions
|
|
|
|
# stack.sh
|
|
# ---------
|
|
# install_XXX
|
|
# configure_XXX
|
|
# init_XXX
|
|
# start_XXX
|
|
# stop_XXX
|
|
# cleanup_XXX
|
|
|
|
# Save trace setting
|
|
XTRACE=$(set +o | grep xtrace)
|
|
set +o xtrace
|
|
|
|
|
|
# Defaults
|
|
# --------
|
|
HEAT_DIR=$DEST/heat
|
|
|
|
# set up default directories
|
|
|
|
# cleanup_heat() - Remove residual data files, anything left over from previous
|
|
# runs that a clean run would need to clean up
|
|
function cleanup_heat() {
|
|
# This function intentionally left blank
|
|
:
|
|
}
|
|
|
|
# configure_heat() - Set config files, create data dirs, etc
|
|
function configure_heat() {
|
|
setup_develop $HEAT_DIR
|
|
|
|
HEAT_CONF_DIR=/etc/heat
|
|
if [[ ! -d $HEAT_CONF_DIR ]]; then
|
|
sudo mkdir -p $HEAT_CONF_DIR
|
|
fi
|
|
sudo chown `whoami` $HEAT_CONF_DIR
|
|
|
|
HEAT_API_CFN_HOST=${HEAT_API_CFN_HOST:-$SERVICE_HOST}
|
|
HEAT_API_CFN_PORT=${HEAT_API_CFN_PORT:-8000}
|
|
HEAT_ENGINE_HOST=${HEAT_ENGINE_HOST:-$SERVICE_HOST}
|
|
HEAT_ENGINE_PORT=${HEAT_ENGINE_PORT:-8001}
|
|
HEAT_METADATA_HOST=${HEAT_METADATA_HOST:-$SERVICE_HOST}
|
|
HEAT_METADATA_PORT=${HEAT_METADATA_PORT:-8002}
|
|
HEAT_API_CW_HOST=${HEAT_API_CW_HOST:-$SERVICE_HOST}
|
|
HEAT_API_CW_PORT=${HEAT_API_CW_PORT:-8003}
|
|
HEAT_API_HOST=${HEAT_API_HOST:-$SERVICE_HOST}
|
|
HEAT_API_PORT=${HEAT_API_PORT:-8004}
|
|
|
|
# cloudformation api
|
|
HEAT_API_CFN_CONF=$HEAT_CONF_DIR/heat-api-cfn.conf
|
|
cp $HEAT_DIR/etc/heat/heat-api-cfn.conf $HEAT_API_CFN_CONF
|
|
iniset $HEAT_API_CFN_CONF DEFAULT debug True
|
|
inicomment $HEAT_API_CFN_CONF DEFAULT log_file
|
|
iniset $HEAT_API_CFN_CONF DEFAULT use_syslog $SYSLOG
|
|
iniset $HEAT_API_CFN_CONF DEFAULT bind_host $HEAT_API_CFN_HOST
|
|
iniset $HEAT_API_CFN_CONF DEFAULT bind_port $HEAT_API_CFN_PORT
|
|
|
|
if is_service_enabled rabbit; then
|
|
iniset $HEAT_API_CFN_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_kombu
|
|
iniset $HEAT_API_CFN_CONF DEFAULT rabbit_password $RABBIT_PASSWORD
|
|
iniset $HEAT_API_CFN_CONF DEFAULT rabbit_host $RABBIT_HOST
|
|
elif is_service_enabled qpid; then
|
|
iniset $HEAT_API_CFN_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_qpid
|
|
fi
|
|
|
|
HEAT_API_CFN_PASTE_INI=$HEAT_CONF_DIR/heat-api-cfn-paste.ini
|
|
cp $HEAT_DIR/etc/heat/heat-api-cfn-paste.ini $HEAT_API_CFN_PASTE_INI
|
|
iniset $HEAT_API_CFN_PASTE_INI filter:authtoken auth_host $KEYSTONE_AUTH_HOST
|
|
iniset $HEAT_API_CFN_PASTE_INI filter:authtoken auth_port $KEYSTONE_AUTH_PORT
|
|
iniset $HEAT_API_CFN_PASTE_INI filter:authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
|
|
iniset $HEAT_API_CFN_PASTE_INI filter:authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
|
|
iniset $HEAT_API_CFN_PASTE_INI filter:authtoken admin_tenant_name $SERVICE_TENANT_NAME
|
|
iniset $HEAT_API_CFN_PASTE_INI filter:authtoken admin_user heat
|
|
iniset $HEAT_API_CFN_PASTE_INI filter:authtoken admin_password $SERVICE_PASSWORD
|
|
iniset $HEAT_API_CFN_PASTE_INI filter:ec2authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
|
|
iniset $HEAT_API_CFN_PASTE_INI filter:ec2authtoken keystone_ec2_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0/ec2tokens
|
|
|
|
# openstack api
|
|
HEAT_API_CONF=$HEAT_CONF_DIR/heat-api.conf
|
|
cp $HEAT_DIR/etc/heat/heat-api.conf $HEAT_API_CONF
|
|
iniset $HEAT_API_CONF DEFAULT debug True
|
|
inicomment $HEAT_API_CONF DEFAULT log_file
|
|
iniset $HEAT_API_CONF DEFAULT use_syslog $SYSLOG
|
|
iniset $HEAT_API_CONF DEFAULT bind_host $HEAT_API_HOST
|
|
iniset $HEAT_API_CONF DEFAULT bind_port $HEAT_API_PORT
|
|
|
|
if is_service_enabled rabbit; then
|
|
iniset $HEAT_API_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_kombu
|
|
iniset $HEAT_API_CONF DEFAULT rabbit_password $RABBIT_PASSWORD
|
|
iniset $HEAT_API_CONF DEFAULT rabbit_host $RABBIT_HOST
|
|
elif is_service_enabled qpid; then
|
|
iniset $HEAT_API_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_qpid
|
|
fi
|
|
|
|
HEAT_API_PASTE_INI=$HEAT_CONF_DIR/heat-api-paste.ini
|
|
cp $HEAT_DIR/etc/heat/heat-api-paste.ini $HEAT_API_PASTE_INI
|
|
iniset $HEAT_API_PASTE_INI filter:authtoken auth_host $KEYSTONE_AUTH_HOST
|
|
iniset $HEAT_API_PASTE_INI filter:authtoken auth_port $KEYSTONE_AUTH_PORT
|
|
iniset $HEAT_API_PASTE_INI filter:authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
|
|
iniset $HEAT_API_PASTE_INI filter:authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
|
|
iniset $HEAT_API_PASTE_INI filter:authtoken admin_tenant_name $SERVICE_TENANT_NAME
|
|
iniset $HEAT_API_PASTE_INI filter:authtoken admin_user heat
|
|
iniset $HEAT_API_PASTE_INI filter:authtoken admin_password $SERVICE_PASSWORD
|
|
iniset $HEAT_API_PASTE_INI filter:ec2authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
|
|
iniset $HEAT_API_PASTE_INI filter:ec2authtoken keystone_ec2_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0/ec2tokens
|
|
|
|
# engine
|
|
HEAT_ENGINE_CONF=$HEAT_CONF_DIR/heat-engine.conf
|
|
cp $HEAT_DIR/etc/heat/heat-engine.conf $HEAT_ENGINE_CONF
|
|
iniset $HEAT_ENGINE_CONF DEFAULT debug True
|
|
inicomment $HEAT_ENGINE_CONF DEFAULT log_file
|
|
iniset $HEAT_ENGINE_CONF DEFAULT use_syslog $SYSLOG
|
|
iniset $HEAT_ENGINE_CONF DEFAULT bind_host $HEAT_ENGINE_HOST
|
|
iniset $HEAT_ENGINE_CONF DEFAULT bind_port $HEAT_ENGINE_PORT
|
|
iniset $HEAT_ENGINE_CONF DEFAULT sql_connection $BASE_SQL_CONN/heat?charset=utf8
|
|
iniset $HEAT_ENGINE_CONF DEFAULT auth_encryption_key `hexdump -n 16 -v -e '/1 "%02x"' /dev/random`
|
|
|
|
if is_service_enabled rabbit; then
|
|
iniset $HEAT_ENGINE_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_kombu
|
|
iniset $HEAT_ENGINE_CONF DEFAULT rabbit_password $RABBIT_PASSWORD
|
|
iniset $HEAT_ENGINE_CONF DEFAULT rabbit_host $RABBIT_HOST
|
|
elif is_service_enabled qpid; then
|
|
iniset $HEAT_ENGINE_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_qpid
|
|
fi
|
|
|
|
# metadata api
|
|
HEAT_METADATA_CONF=$HEAT_CONF_DIR/heat-metadata.conf
|
|
cp $HEAT_DIR/etc/heat/heat-metadata.conf $HEAT_METADATA_CONF
|
|
iniset $HEAT_METADATA_CONF DEFAULT debug True
|
|
inicomment $HEAT_METADATA_CONF DEFAULT log_file
|
|
iniset $HEAT_METADATA_CONF DEFAULT use_syslog $SYSLOG
|
|
iniset $HEAT_METADATA_CONF DEFAULT bind_host $HEAT_METADATA_HOST
|
|
iniset $HEAT_METADATA_CONF DEFAULT bind_port $HEAT_METADATA_PORT
|
|
|
|
if is_service_enabled rabbit; then
|
|
iniset $HEAT_METADATA_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_kombu
|
|
iniset $HEAT_METADATA_CONF DEFAULT rabbit_password $RABBIT_PASSWORD
|
|
iniset $HEAT_METADATA_CONF DEFAULT rabbit_host $RABBIT_HOST
|
|
elif is_service_enabled qpid; then
|
|
iniset $HEAT_METADATA_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_qpid
|
|
fi
|
|
|
|
HEAT_METADATA_PASTE_INI=$HEAT_CONF_DIR/heat-metadata-paste.ini
|
|
cp $HEAT_DIR/etc/heat/heat-metadata-paste.ini $HEAT_METADATA_PASTE_INI
|
|
|
|
# cloudwatch api
|
|
HEAT_API_CW_CONF=$HEAT_CONF_DIR/heat-api-cloudwatch.conf
|
|
cp $HEAT_DIR/etc/heat/heat-api-cloudwatch.conf $HEAT_API_CW_CONF
|
|
iniset $HEAT_API_CW_CONF DEFAULT debug True
|
|
inicomment $HEAT_API_CW_CONF DEFAULT log_file
|
|
iniset $HEAT_API_CW_CONF DEFAULT use_syslog $SYSLOG
|
|
iniset $HEAT_API_CW_CONF DEFAULT bind_host $HEAT_API_CW_HOST
|
|
iniset $HEAT_API_CW_CONF DEFAULT bind_port $HEAT_API_CW_PORT
|
|
|
|
if is_service_enabled rabbit; then
|
|
iniset $HEAT_API_CW_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_kombu
|
|
iniset $HEAT_API_CW_CONF DEFAULT rabbit_password $RABBIT_PASSWORD
|
|
iniset $HEAT_API_CW_CONF DEFAULT rabbit_host $RABBIT_HOST
|
|
elif is_service_enabled qpid; then
|
|
iniset $HEAT_API_CW_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_qpid
|
|
fi
|
|
|
|
HEAT_API_CW_PASTE_INI=$HEAT_CONF_DIR/heat-api-cloudwatch-paste.ini
|
|
cp $HEAT_DIR/etc/heat/heat-api-cloudwatch-paste.ini $HEAT_API_CW_PASTE_INI
|
|
iniset $HEAT_API_CW_PASTE_INI filter:authtoken auth_host $KEYSTONE_AUTH_HOST
|
|
iniset $HEAT_API_CW_PASTE_INI filter:authtoken auth_port $KEYSTONE_AUTH_PORT
|
|
iniset $HEAT_API_CW_PASTE_INI filter:authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL
|
|
iniset $HEAT_API_CW_PASTE_INI filter:authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
|
|
iniset $HEAT_API_CW_PASTE_INI filter:authtoken admin_tenant_name $SERVICE_TENANT_NAME
|
|
iniset $HEAT_API_CW_PASTE_INI filter:authtoken admin_user heat
|
|
iniset $HEAT_API_CW_PASTE_INI filter:authtoken admin_password $SERVICE_PASSWORD
|
|
iniset $HEAT_API_CW_PASTE_INI filter:ec2authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0
|
|
iniset $HEAT_API_CW_PASTE_INI filter:ec2authtoken keystone_ec2_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0/ec2tokens
|
|
}
|
|
|
|
# init_heat() - Initialize database
|
|
function init_heat() {
|
|
|
|
# (re)create heat database
|
|
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS heat;'
|
|
mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE heat CHARACTER SET utf8;'
|
|
|
|
$HEAT_DIR/bin/heat-db-setup $os_PACKAGE -r $MYSQL_PASSWORD
|
|
}
|
|
|
|
# install_heat() - Collect source and prepare
|
|
function install_heat() {
|
|
git_clone $HEAT_REPO $HEAT_DIR $HEAT_BRANCH
|
|
}
|
|
|
|
# start_heat() - Start running processes, including screen
|
|
function start_heat() {
|
|
screen_it h-eng "cd $HEAT_DIR; bin/heat-engine --config-file=$HEAT_CONF_DIR/heat-engine.conf"
|
|
screen_it h-api "cd $HEAT_DIR; bin/heat-api --config-dir=$HEAT_CONF_DIR/heat-api.conf"
|
|
screen_it h-api-cfn "cd $HEAT_DIR; bin/heat-api-cfn --config-dir=$HEAT_CONF_DIR/heat-api-cfn.conf"
|
|
screen_it h-api-cw "cd $HEAT_DIR; bin/heat-api-cloudwatch --config-dir=$HEAT_CONF_DIR/heat-api-cloudwatch.conf"
|
|
screen_it h-meta "cd $HEAT_DIR; bin/heat-metadata --config-dir=$HEAT_CONF_DIR/heat-metadata.conf"
|
|
}
|
|
|
|
# stop_heat() - Stop running processes
|
|
function stop_heat() {
|
|
# Kill the cinder screen windows
|
|
for serv in h-eng h-api-cfn h-api-cw h-meta; do
|
|
screen -S $SCREEN_NAME -p $serv -X kill
|
|
done
|
|
}
|
|
|
|
# Restore xtrace
|
|
$XTRACE
|