This allows the heat service to be started as a devstack service.
Heat is disabled by default, and can be enabled with this in your localrc:
ENABLED_SERVICES+=,heat
There is now a repo of heat-enabled images here:
https://github.com/heat-api/prebuilt-jeos-images/downloads
These can be added to the IMAGE_URLS in your localrc.
After devstack is launched, a template can be invoked with:
nova keypair-add --pub_key $HOME/.ssh/id_rsa.pub heat_key
heat -d create wordpress \
--template-file=../heat/templates/WordPress_Single_Instance.template \
--parameters="InstanceType=m1.tiny;DBUsername=wpuser;DBPassword=wppassword;\
KeyName=heat_key;LinuxDistribution=F16"
Change-Id: I07591295eb2b9eb7868b1577dd3c24b19812a689
| ... | ... |
@@ -34,3 +34,8 @@ catalog.RegionOne.image.publicURL = http://%SERVICE_HOST%:9292 |
| 34 | 34 |
catalog.RegionOne.image.adminURL = http://%SERVICE_HOST%:9292 |
| 35 | 35 |
catalog.RegionOne.image.internalURL = http://%SERVICE_HOST%:9292 |
| 36 | 36 |
catalog.RegionOne.image.name = Image Service |
| 37 |
+ |
|
| 38 |
+catalog.RegionOne.heat.publicURL = http://%SERVICE_HOST%:8000/v1 |
|
| 39 |
+catalog.RegionOne.heat.adminURL = http://%SERVICE_HOST%:8000/v1 |
|
| 40 |
+catalog.RegionOne.heat.internalURL = http://%SERVICE_HOST%:8000/v1 |
|
| 41 |
+catalog.RegionOne.heat.name = Heat Service |
| ... | ... |
@@ -10,6 +10,7 @@ |
| 10 | 10 |
# service quantum admin # if enabled |
| 11 | 11 |
# service swift admin # if enabled |
| 12 | 12 |
# service cinder admin # if enabled |
| 13 |
+# service heat admin # if enabled |
|
| 13 | 14 |
# demo admin admin |
| 14 | 15 |
# demo demo Member, anotherrole |
| 15 | 16 |
# invisible_to_admin demo Member |
| ... | ... |
@@ -154,6 +155,29 @@ if [[ "$ENABLED_SERVICES" =~ "n-vol" ]]; then |
| 154 | 154 |
fi |
| 155 | 155 |
fi |
| 156 | 156 |
|
| 157 |
+# Heat |
|
| 158 |
+if [[ "$ENABLED_SERVICES" =~ "heat" ]]; then |
|
| 159 |
+ HEAT_USER=$(get_id keystone user-create --name=heat \ |
|
| 160 |
+ --pass="$SERVICE_PASSWORD" \ |
|
| 161 |
+ --tenant_id $SERVICE_TENANT \ |
|
| 162 |
+ --email=heat@example.com) |
|
| 163 |
+ keystone user-role-add --tenant_id $SERVICE_TENANT \ |
|
| 164 |
+ --user_id $HEAT_USER \ |
|
| 165 |
+ --role_id $ADMIN_ROLE |
|
| 166 |
+ if [[ "$KEYSTONE_CATALOG_BACKEND" = 'sql' ]]; then |
|
| 167 |
+ HEAT_SERVICE=$(get_id keystone service-create \ |
|
| 168 |
+ --name=heat \ |
|
| 169 |
+ --type=orchestration \ |
|
| 170 |
+ --description="Heat Service") |
|
| 171 |
+ keystone endpoint-create \ |
|
| 172 |
+ --region RegionOne \ |
|
| 173 |
+ --service_id $HEAT_SERVICE \ |
|
| 174 |
+ --publicurl "http://$SERVICE_HOST:$HEAT_API_PORT/v1" \ |
|
| 175 |
+ --adminurl "http://$SERVICE_HOST:$HEAT_API_PORT/v1" \ |
|
| 176 |
+ --internalurl "http://$SERVICE_HOST:$HEAT_API_PORT/v1" |
|
| 177 |
+ fi |
|
| 178 |
+fi |
|
| 179 |
+ |
|
| 157 | 180 |
# Glance |
| 158 | 181 |
if [[ "$ENABLED_SERVICES" =~ "g-api" ]]; then |
| 159 | 182 |
GLANCE_USER=$(get_id keystone user-create \ |
| ... | ... |
@@ -296,3 +320,4 @@ if [[ "$ENABLED_SERVICES" =~ "c-api" ]]; then |
| 296 | 296 |
--internalurl "http://$SERVICE_HOST:8776/v1/\$(tenant_id)s" |
| 297 | 297 |
fi |
| 298 | 298 |
fi |
| 299 |
+ |
| 299 | 300 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,156 @@ |
| 0 |
+# lib/heat |
|
| 1 |
+# Install and start Heat service |
|
| 2 |
+# To enable, add the following to localrc |
|
| 3 |
+# ENABLED_SERVICES+=,heat,h-api,h-eng,h-meta |
|
| 4 |
+ |
|
| 5 |
+# Dependencies: |
|
| 6 |
+# - functions |
|
| 7 |
+ |
|
| 8 |
+# stack.sh |
|
| 9 |
+# --------- |
|
| 10 |
+# install_XXX |
|
| 11 |
+# configure_XXX |
|
| 12 |
+# init_XXX |
|
| 13 |
+# start_XXX |
|
| 14 |
+# stop_XXX |
|
| 15 |
+# cleanup_XXX |
|
| 16 |
+ |
|
| 17 |
+# Print the commands being run so that we can see the command that triggers |
|
| 18 |
+# an error. It is also useful for following along as the install occurs. |
|
| 19 |
+set -o xtrace |
|
| 20 |
+ |
|
| 21 |
+ |
|
| 22 |
+# Defaults |
|
| 23 |
+# -------- |
|
| 24 |
+HEAT_DIR=$DEST/heat |
|
| 25 |
+ |
|
| 26 |
+# set up default directories |
|
| 27 |
+ |
|
| 28 |
+# cleanup_heat() - Remove residual data files, anything left over from previous |
|
| 29 |
+# runs that a clean run would need to clean up |
|
| 30 |
+function cleanup_heat() {
|
|
| 31 |
+ # This function intentionally left blank |
|
| 32 |
+ : |
|
| 33 |
+} |
|
| 34 |
+ |
|
| 35 |
+# configure_heat() - Set config files, create data dirs, etc |
|
| 36 |
+function configure_heat() {
|
|
| 37 |
+ setup_develop $HEAT_DIR |
|
| 38 |
+ |
|
| 39 |
+ HEAT_CONF_DIR=/etc/heat |
|
| 40 |
+ if [[ ! -d $HEAT_CONF_DIR ]]; then |
|
| 41 |
+ sudo mkdir -p $HEAT_CONF_DIR |
|
| 42 |
+ fi |
|
| 43 |
+ sudo chown `whoami` $HEAT_CONF_DIR |
|
| 44 |
+ |
|
| 45 |
+ HEAT_API_HOST=${HEAT_API_HOST:-$SERVICE_HOST}
|
|
| 46 |
+ HEAT_API_PORT=${HEAT_API_PORT:-8000}
|
|
| 47 |
+ HEAT_ENGINE_HOST=${HEAT_ENGINE_HOST:-$SERVICE_HOST}
|
|
| 48 |
+ HEAT_ENGINE_PORT=${HEAT_ENGINE_PORT:-8001}
|
|
| 49 |
+ HEAT_METADATA_HOST=${HEAT_METADATA_HOST:-$SERVICE_HOST}
|
|
| 50 |
+ HEAT_METADATA_PORT=${HEAT_METADATA_PORT:-8002}
|
|
| 51 |
+ |
|
| 52 |
+ HEAT_API_CONF=$HEAT_CONF_DIR/heat-api.conf |
|
| 53 |
+ cp $HEAT_DIR/etc/heat-api.conf $HEAT_API_CONF |
|
| 54 |
+ iniset $HEAT_API_CONF DEFAULT debug True |
|
| 55 |
+ inicomment $HEAT_API_CONF DEFAULT log_file |
|
| 56 |
+ iniset $HEAT_API_CONF DEFAULT use_syslog $SYSLOG |
|
| 57 |
+ iniset $HEAT_API_CONF DEFAULT bind_host $HEAT_API_HOST |
|
| 58 |
+ iniset $HEAT_API_CONF DEFAULT bind_port $HEAT_API_PORT |
|
| 59 |
+ |
|
| 60 |
+ if is_service_enabled rabbit; then |
|
| 61 |
+ iniset $HEAT_API_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_kombu |
|
| 62 |
+ iniset $HEAT_API_CONF DEFAULT rabbit_password $RABBIT_PASSWORD |
|
| 63 |
+ iniset $HEAT_API_CONF DEFAULT rabbit_host $RABBIT_HOST |
|
| 64 |
+ elif is_service_enabled qpid; then |
|
| 65 |
+ iniset $HEAT_API_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_qpid |
|
| 66 |
+ fi |
|
| 67 |
+ |
|
| 68 |
+ HEAT_API_PASTE_INI=$HEAT_CONF_DIR/heat-api-paste.ini |
|
| 69 |
+ cp $HEAT_DIR/etc/heat-api-paste.ini $HEAT_API_PASTE_INI |
|
| 70 |
+ iniset $HEAT_API_PASTE_INI filter:authtoken auth_host $KEYSTONE_AUTH_HOST |
|
| 71 |
+ iniset $HEAT_API_PASTE_INI filter:authtoken auth_port $KEYSTONE_AUTH_PORT |
|
| 72 |
+ iniset $HEAT_API_PASTE_INI filter:authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL |
|
| 73 |
+ iniset $HEAT_API_PASTE_INI filter:authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0 |
|
| 74 |
+ iniset $HEAT_API_PASTE_INI filter:authtoken admin_tenant_name $SERVICE_TENANT_NAME |
|
| 75 |
+ iniset $HEAT_API_PASTE_INI filter:authtoken admin_user heat |
|
| 76 |
+ iniset $HEAT_API_PASTE_INI filter:authtoken admin_password $SERVICE_PASSWORD |
|
| 77 |
+ iniset $HEAT_API_PASTE_INI filter:ec2authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0 |
|
| 78 |
+ iniset $HEAT_API_PASTE_INI filter:ec2authtoken keystone_ec2_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0/ec2tokens |
|
| 79 |
+ |
|
| 80 |
+ HEAT_ENGINE_CONF=$HEAT_CONF_DIR/heat-engine.conf |
|
| 81 |
+ cp $HEAT_DIR/etc/heat-engine.conf $HEAT_ENGINE_CONF |
|
| 82 |
+ iniset $HEAT_ENGINE_CONF DEFAULT debug True |
|
| 83 |
+ inicomment $HEAT_ENGINE_CONF DEFAULT log_file |
|
| 84 |
+ iniset $HEAT_ENGINE_CONF DEFAULT use_syslog $SYSLOG |
|
| 85 |
+ iniset $HEAT_ENGINE_CONF DEFAULT bind_host $HEAT_ENGINE_HOST |
|
| 86 |
+ iniset $HEAT_ENGINE_CONF DEFAULT bind_port $HEAT_ENGINE_PORT |
|
| 87 |
+ iniset $HEAT_ENGINE_CONF DEFAULT sql_connection $BASE_SQL_CONN/heat?charset=utf8 |
|
| 88 |
+ iniset $HEAT_ENGINE_CONF DEFAULT auth_encryption_key `hexdump -n 16 -v -e '/1 "%02x"' /dev/random` |
|
| 89 |
+ |
|
| 90 |
+ if is_service_enabled rabbit; then |
|
| 91 |
+ iniset $HEAT_ENGINE_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_kombu |
|
| 92 |
+ iniset $HEAT_ENGINE_CONF DEFAULT rabbit_password $RABBIT_PASSWORD |
|
| 93 |
+ iniset $HEAT_ENGINE_CONF DEFAULT rabbit_host $RABBIT_HOST |
|
| 94 |
+ elif is_service_enabled qpid; then |
|
| 95 |
+ iniset $HEAT_ENGINE_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_qpid |
|
| 96 |
+ fi |
|
| 97 |
+ |
|
| 98 |
+ HEAT_ENGINE_PASTE_INI=$HEAT_CONF_DIR/heat-engine-paste.ini |
|
| 99 |
+ cp $HEAT_DIR/etc/heat-engine-paste.ini $HEAT_ENGINE_PASTE_INI |
|
| 100 |
+ iniset $HEAT_ENGINE_PASTE_INI filter:authtoken auth_host $KEYSTONE_AUTH_HOST |
|
| 101 |
+ iniset $HEAT_ENGINE_PASTE_INI filter:authtoken auth_port $KEYSTONE_AUTH_PORT |
|
| 102 |
+ iniset $HEAT_ENGINE_PASTE_INI filter:authtoken auth_protocol $KEYSTONE_AUTH_PROTOCOL |
|
| 103 |
+ iniset $HEAT_ENGINE_PASTE_INI filter:authtoken auth_uri $KEYSTONE_SERVICE_PROTOCOL://$KEYSTONE_SERVICE_HOST:$KEYSTONE_SERVICE_PORT/v2.0 |
|
| 104 |
+ iniset $HEAT_ENGINE_PASTE_INI filter:authtoken admin_tenant_name $SERVICE_TENANT_NAME |
|
| 105 |
+ iniset $HEAT_ENGINE_PASTE_INI filter:authtoken admin_user heat |
|
| 106 |
+ iniset $HEAT_ENGINE_PASTE_INI filter:authtoken admin_password $SERVICE_PASSWORD |
|
| 107 |
+ |
|
| 108 |
+ HEAT_METADATA_CONF=$HEAT_CONF_DIR/heat-metadata.conf |
|
| 109 |
+ cp $HEAT_DIR/etc/heat-metadata.conf $HEAT_METADATA_CONF |
|
| 110 |
+ iniset $HEAT_METADATA_CONF DEFAULT debug True |
|
| 111 |
+ inicomment $HEAT_METADATA_CONF DEFAULT log_file |
|
| 112 |
+ iniset $HEAT_METADATA_CONF DEFAULT use_syslog $SYSLOG |
|
| 113 |
+ iniset $HEAT_METADATA_CONF DEFAULT bind_host $HEAT_METADATA_HOST |
|
| 114 |
+ iniset $HEAT_METADATA_CONF DEFAULT bind_port $HEAT_METADATA_PORT |
|
| 115 |
+ |
|
| 116 |
+ if is_service_enabled rabbit; then |
|
| 117 |
+ iniset $HEAT_METADATA_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_kombu |
|
| 118 |
+ iniset $HEAT_METADATA_CONF DEFAULT rabbit_password $RABBIT_PASSWORD |
|
| 119 |
+ iniset $HEAT_METADATA_CONF DEFAULT rabbit_host $RABBIT_HOST |
|
| 120 |
+ elif is_service_enabled qpid; then |
|
| 121 |
+ iniset $HEAT_METADATA_CONF DEFAULT rpc_backend heat.openstack.common.rpc.impl_qpid |
|
| 122 |
+ fi |
|
| 123 |
+ |
|
| 124 |
+ HEAT_METADATA_PASTE_INI=$HEAT_CONF_DIR/heat-metadata-paste.ini |
|
| 125 |
+ cp $HEAT_DIR/etc/heat-metadata-paste.ini $HEAT_METADATA_PASTE_INI |
|
| 126 |
+ |
|
| 127 |
+} |
|
| 128 |
+ |
|
| 129 |
+# init_heat() - Initialize database |
|
| 130 |
+function init_heat() {
|
|
| 131 |
+ |
|
| 132 |
+ # (re)create heat database |
|
| 133 |
+ mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS heat;' |
|
| 134 |
+ mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'CREATE DATABASE heat CHARACTER SET utf8;' |
|
| 135 |
+ |
|
| 136 |
+ $HEAT_DIR/bin/heat-db-setup $os_PACKAGE -r $MYSQL_PASSWORD |
|
| 137 |
+} |
|
| 138 |
+ |
|
| 139 |
+# install_heat() - Collect source and prepare |
|
| 140 |
+function install_heat() {
|
|
| 141 |
+ git_clone $HEAT_REPO $HEAT_DIR $HEAT_BRANCH |
|
| 142 |
+} |
|
| 143 |
+ |
|
| 144 |
+# start_heat() - Start running processes, including screen |
|
| 145 |
+function start_heat() {
|
|
| 146 |
+ screen_it h-eng "cd $HEAT_DIR; bin/heat-engine --config-file=$HEAT_CONF_DIR/heat-engine.conf" |
|
| 147 |
+ screen_it h-api "cd $HEAT_DIR; bin/heat-api --config-dir=$HEAT_CONF_DIR/heat-api.conf" |
|
| 148 |
+ screen_it h-meta "cd $HEAT_DIR; bin/heat-metadata --config-dir=$HEAT_CONF_DIR/heat-metadata.conf" |
|
| 149 |
+} |
|
| 150 |
+ |
|
| 151 |
+# stop_heat() - Stop running processes (non-screen) |
|
| 152 |
+function stop_heat() {
|
|
| 153 |
+ # This function intentionally left blank |
|
| 154 |
+ : |
|
| 155 |
+} |
| ... | ... |
@@ -2,7 +2,7 @@ |
| 2 | 2 |
|
| 3 | 3 |
# ``stack.sh`` is an opinionated OpenStack developer installation. It |
| 4 | 4 |
# installs and configures various combinations of **Glance**, **Horizon**, |
| 5 |
-# **Keystone**, **Nova**, **Quantum** and **Swift** |
|
| 5 |
+# **Keystone**, **Nova**, **Quantum**, **Heat** and **Swift** |
|
| 6 | 6 |
|
| 7 | 7 |
# This script allows you to specify configuration options of what git |
| 8 | 8 |
# repositories to use, enabled services, network configuration and various |
| ... | ... |
@@ -241,6 +241,7 @@ sudo chown `whoami` $DATA_DIR |
| 241 | 241 |
# Get project function libraries |
| 242 | 242 |
source $TOP_DIR/lib/cinder |
| 243 | 243 |
source $TOP_DIR/lib/ceilometer |
| 244 |
+source $TOP_DIR/lib/heat |
|
| 244 | 245 |
|
| 245 | 246 |
# Set the destination directories for openstack projects |
| 246 | 247 |
NOVA_DIR=$DEST/nova |
| ... | ... |
@@ -787,6 +788,9 @@ if is_service_enabled quantum; then |
| 787 | 787 |
# quantum |
| 788 | 788 |
git_clone $QUANTUM_REPO $QUANTUM_DIR $QUANTUM_BRANCH |
| 789 | 789 |
fi |
| 790 |
+if is_service_enabled heat; then |
|
| 791 |
+ install_heat |
|
| 792 |
+fi |
|
| 790 | 793 |
if is_service_enabled cinder; then |
| 791 | 794 |
install_cinder |
| 792 | 795 |
fi |
| ... | ... |
@@ -827,6 +831,9 @@ if is_service_enabled quantum; then |
| 827 | 827 |
setup_develop $QUANTUM_CLIENT_DIR |
| 828 | 828 |
setup_develop $QUANTUM_DIR |
| 829 | 829 |
fi |
| 830 |
+if is_service_enabled heat; then |
|
| 831 |
+ configure_heat |
|
| 832 |
+fi |
|
| 830 | 833 |
if is_service_enabled cinder; then |
| 831 | 834 |
configure_cinder |
| 832 | 835 |
fi |
| ... | ... |
@@ -1945,6 +1952,11 @@ if is_service_enabled mysql && is_service_enabled nova; then |
| 1945 | 1945 |
$NOVA_BIN_DIR/nova-manage db sync |
| 1946 | 1946 |
fi |
| 1947 | 1947 |
|
| 1948 |
+# Heat |
|
| 1949 |
+# ------ |
|
| 1950 |
+if is_service_enabled heat; then |
|
| 1951 |
+ init_heat |
|
| 1952 |
+fi |
|
| 1948 | 1953 |
|
| 1949 | 1954 |
# Launch Services |
| 1950 | 1955 |
# =============== |
| ... | ... |
@@ -2142,6 +2154,10 @@ screen_it swift "cd $SWIFT_DIR && $SWIFT_DIR/bin/swift-proxy-server ${SWIFT_CONF
|
| 2142 | 2142 |
is_service_enabled swift3 || \ |
| 2143 | 2143 |
screen_it n-obj "cd $NOVA_DIR && $NOVA_BIN_DIR/nova-objectstore" |
| 2144 | 2144 |
|
| 2145 |
+# launch heat engine, api and metadata |
|
| 2146 |
+if is_service_enabled heat; then |
|
| 2147 |
+ start_heat |
|
| 2148 |
+fi |
|
| 2145 | 2149 |
|
| 2146 | 2150 |
# Install Images |
| 2147 | 2151 |
# ============== |
| ... | ... |
@@ -95,6 +95,10 @@ QUANTUM_CLIENT_BRANCH=master |
| 95 | 95 |
TEMPEST_REPO=${GIT_BASE}/openstack/tempest.git
|
| 96 | 96 |
TEMPEST_BRANCH=master |
| 97 | 97 |
|
| 98 |
+# heat service |
|
| 99 |
+HEAT_REPO=${GIT_BASE}/heat-api/heat.git
|
|
| 100 |
+HEAT_BRANCH=master |
|
| 101 |
+ |
|
| 98 | 102 |
# Nova hypervisor configuration. We default to libvirt with **kvm** but will |
| 99 | 103 |
# drop back to **qemu** if we are unable to load the kvm module. ``stack.sh`` can |
| 100 | 104 |
# also install an **LXC** or **OpenVZ** based system. |