Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

Anton- Thanks for your quick response. I tried appending /horizon (and horizon/auth/login) - while it didnt work I did get a different message - internal server error. I verified that my settings in apache2/conf.d do match yours. My problem must be somewhere else. I have attached my for reference. Keystone, horizon, mysql, nova-api, nova-scheduler, rabbitmq all run on my cloud controller node (x.x.x.71 below); nova-compute, quantum and l2/dhcp/l3 agents run on seperate nodes. I used the IP of cloud controller node (.71) in defining all endpoints - not sure if that is correct.

import os

from django.utils.translation import ugettext_lazy as _


added from devstack working example

PROD = False

added from devstack working example

USE_SSL = False

Set SSL proxy settings:

For Django 1.4+ pass this header from the proxy after terminating the SSL,

and don't forget to strip it from the client's request.

For more information see:


Specify a regular expression to validate user passwords.


"password_validator": {

"regex": '.*',

"help_text": _("Your password does not meet the requirements.")


'help_url': ""


LOCAL_PATH = os.path.dirname(os.path.abspath(__file__))

adding database

SESSION_ENGINE = 'django.core.cache.backends.db.DatabaseCache' DATABASES = { 'default': { # Database configuration here 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dash', 'USER': 'dash', 'PASSWORD': 'dash', 'HOST': 'localhost', 'default-character-set': 'utf8' } } #

Set custom secret key:

You can either set it to a specific value or you can let horizion generate a

default secret key that is unique on this machine, e.i. regardless of the

amount of Python WSGI workers (if used behind Apache+mod_wsgi): However, there

may be situations where you would want to set this explicitly, e.g. when

multiple dashboard instances are distributed on different machines (usually

behind a load-balancer). Either you have to make sure that a session gets all

requests routed to the same dashboard instance or you set the same SECRET_KEY

for all of them.

from horizon.utils import secret_key

SECRET_KEY = secret_key.generate_or_read_from_file(os.path.join(LOCAL_PATH, '.secret_key_store'))

We recommend you use memcached for development; otherwise after every reload

of the django development server, you will have to login again. To use

memcached set CACHE_BACKED to something like 'memcached://'

note see pg 79/80 for how this is done differently - declare session engine

CACHE_BACKEND = 'memcached://'

Send email to the console by default

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

Or send them to /dev/null

EMAIL_BACKEND = 'django.core.mail.backends.dummy.EmailBackend'

Configure these for your outgoing email host



EMAIL_HOST_USER = 'djangomail'

EMAIL_HOST_PASSWORD = 'top-secret!'

For multiple regions uncomment this configuration, and add (endpoint, title).


('', 'cluster1'),

('', 'cluster2'),





added during troublshooting


Disable SSL certificate checks (useful for self-signed certificates):


The OPENSTACK_KEYSTONE_BACKEND settings can be used to identify the

capabilities of the auth backend for Keystone.

If Keystone has been configured to use LDAP as the auth backend then set

can_edit_user to False and name to 'ldap'.


TODO(tres): Remove these once Keystone has an API to identify auth backend.

OPENSTACK_KEYSTONE_BACKEND = { 'name': 'native', 'can_edit_user': True }

OPENSTACK_HYPERVISOR_FEATURES = { 'can_set_mount_point': True }

OPENSTACK_ENDPOINT_TYPE specifies the endpoint type to use for the endpoints

in the Keystone service catalog. Use this setting when Horizon is running

external to the OpenStack environment. The default is 'internalURL'.


The number of objects (Swift containers/objects or images) to display

on a single page before providing a paging element (a "more" link)

to paginate results.


configure quantum connection details for networking; check these


The timezone of the server. This should correspond with the timezone

of your entire OpenStack installation, and hopefully be in UTC.


LOGGING = { 'version': 1, # When set to True this will disable all logging except # for loggers specified in this configuration dictionary. Note that # if nothing is specified here and disable_existing_loggers is True, # django.db.backends will still log unless it is disabled explicitly. 'disable_existing_loggers': False, 'handlers': { 'null': { 'level': 'DEBUG', 'class': 'django.utils.log.NullHandler', }, 'console': { # Set the level to "DEBUG" for verbose output logging. 'level': 'INFO', 'class': 'logging.StreamHandler', }, }, 'loggers': { # Logging from django.db.backends is VERY verbose, send to null # by default. 'django.db.backends': { 'handlers': ['null'], 'propagate': False, }, 'horizon': { 'handlers': ['console'], 'propagate': False, }, 'openstack_dashboard': { 'handlers': ['console'], 'propagate': False, }, 'novaclient': { 'handlers': ['console'], 'propagate': False, }, 'keystoneclient': { 'handlers': ['console'], 'propagate': False, }, 'glanceclient': { 'handlers': ['console'], 'propagate': False, }, 'nose.plugins.manager': { 'handlers': ['console'], 'propagate': False, } } }

Enable the Ubuntu theme if it is present.

try: from ubuntu_theme import * except ImportError: pass

Default Ubuntu apache configuration uses /horizon as the application root.

Configure auth redirects here accordingly.

LOGIN_URL='/horizon/auth/login/' LOGIN_REDIRECT_URL='/horizon'

The Ubuntu package includes pre-compressed JS and compiled CSS to allow

offline compression by default. To enable online compression, install

the node-less package and enable the following option.