Install the Orchestration Service Install the Orchestration Service on the controller node: # apt-get install heat-api heat-api-cfn heat-engine Answer to the debconf prompts about the database, the RabbitMQ and the keystone_authtoken configuration, and the API endpoint registration. Install the Orchestration Service on the controller node: # apt-get install heat-api heat-api-cfn heat-engine # yum install openstack-heat-api openstack-heat-engine FIXME # zypper install openstack-heat-api openstack-heat-api-cfn openstack-heat-engine In the configuration file, specify the location of the database where the Orchestration Service stores data. The examples in this guide use a MySQL database on the controller node with the heat user name. Replace HEAT_DBPASS with the password for the database user: # openstack-config --set /etc/heat/heat.conf \ database connection mysql://heat:HEAT_DBPASS@controller/heat Edit /etc/heat/heat.conf and change the [DEFAULT] section. [database] # The SQLAlchemy connection string used to connect to the database connection = mysql://heat:HEAT_DBPASS@controller/heat ... Create a heat database user by logging in as root using the password you set previously: # mysql -u root -p mysql> CREATE DATABASE heat; mysql> GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'localhost' \ IDENTIFIED BY 'HEAT_DBPASS'; mysql> GRANT ALL PRIVILEGES ON heat.* TO 'heat'@'%' \ IDENTIFIED BY 'HEAT_DBPASS'; Create the heat service tables: # heat-manage db_sync You can ignore any DeprecationWarning errors. The Ubuntu packages do not correctly set up logging. Edit the /etc/heat/heat.conf file and change the [DEFAULT] section: [DEFAULT] ... # Print more verbose output (set logging level to INFO instead # of default WARNING level). (boolean value) verbose = True ... # (Optional) The base directory used for relative --log-file # paths (string value) log_dir=/var/log/heat Create a heat user that the Orchestration Service can use to authenticate with the Identity Service. Use the service tenant and give the user the admin role. # keystone user-create --name=heat --pass=HEAT_PASS --email=heat@example.com # keystone user-role-add --user=heat --tenant=service --role=admin Add the credentials to the configuration files for the Orchestration Service. Edit /etc/heat/api-paste.ini and change the [filter:authtoken] section. ... [filter:authtoken] paste.filter_factory = heat.common.auth_token:filter_factory auth_host = controller auth_port = 35357 auth_protocol = http admin_tenant_name = service admin_user = heat admin_password = HEAT_PASS ... Register the Orchestration Service (both Heat and CloudFormation APIs) with the Identity Service so that other OpenStack services can locate it. Use the keystone command to register the service and specify the endpoint: # keystone service-create --name=heat --type=orchestration \ --description="Heat Orchestration API" Note the id property for the service that was returned in the previous step. Use it to create the endpoint. # keystone endpoint-create \ --service-id=the_service_id_above \ --publicurl=http://controller:8004/v1/\$(tenant_id)s \ --internalurl=http://controller:8004/v1/\$(tenant_id)s \ --adminurl=http://controller:8004/v1/\$(tenant_id)s # keystone service-create --name=heat-cfn --type=cloudformation \ --description="Heat CloudFormation API" Note the id property for the service that was returned in the previous step. Use it to create the endpoint. # keystone endpoint-create \ --service-id=the_service_id_above \ --publicurl=http://controller:8000/v1 \ --internalurl=http://controller:8000/v1 \ --adminurl=http://controller:8000/v1 Restart the service with its new settings: # service heat-api restart # service heat-api-cfn restart # service heat-engine restart Start the heat-api, heat-api-cfn and heat-engine services. Also, configure them to start when the system boots. # service openstack-heat-api start # service openstack-heat-api-cfn start # service openstack-heat-engine start # chkconfig openstack-heat-api on # chkconfig openstack-heat-api-cfn on # chkconfig openstack-heat-engine on