problem with openstack dashboard installation in multinode deployment

Asked by Paul Vinciguerra

New to OpenStack, first install (Folsom) with seperate nodes for cloud controller and compute; keystone and dashboard both installed on cloud controller node. After following instructions from install/deploy manual for ubuntu (trunk 10/10/2012), and trying to validate, only the default web page for apache comes up ('it works') - no login for dashboard. Does the config file require database entry/config (local_settings.py) - have seen mixed information on this. Could there be endpoint definition problem (used cloud controller node IP for all service catalog endpoints).

Question information

Language:
English Edit question
Status:
Solved
For:
OpenStack Dashboard (Horizon) Edit question
Assignee:
No assignee Edit question
Solved by:
Paul Vinciguerra
Solved:
Last query:
Last reply:
Revision history for this message
Anton Haldin (ahaldin) said :
#1

Hi Paul

Can you try http://<your-address-or-name>/horizon ?

this bug can be related with your question - https://bugs.launchpad.net/ubuntu/+source/horizon/+bug/1020313
in my /etc/apache2/conf.d/openstack-dashboard.conf I have WSGIScriptAlias /horizon /usr/share/openstack-dashboard/openstack_dashboard/wsgi/django.wsgi

and http://x.x.x.x/horizon - works for me

Revision history for this message
Paul Vinciguerra (paul-vinciguerra) said :
#2

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 local_settings.py 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 _

DEBUG = False
TEMPLATE_DEBUG = DEBUG
## 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:
# https://docs.djangoproject.com/en/1.4/ref/settings/#secure-proxy-ssl-header
# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTOCOL', 'https')

# Specify a regular expression to validate user passwords.
# HORIZON_CONFIG = {
# "password_validator": {
# "regex": '.*',
# "help_text": _("Your password does not meet the requirements.")
# },
# 'help_url': "http://docs.openstack.org"
# }

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://127.0.0.1:11211/'
## note see pg 79/80 for how this is done differently - declare session engine
CACHE_BACKEND = 'memcached://127.0.0.1:11211'

# 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 = 'smtp.my-company.com'
# EMAIL_PORT = 25
# EMAIL_HOST_USER = 'djangomail'
# EMAIL_HOST_PASSWORD = 'top-secret!'

# For multiple regions uncomment this configuration, and add (endpoint, title).
# AVAILABLE_REGIONS = [
# ('http://cluster1.example.com:5000/v2.0', 'cluster1'),
# ('http://cluster2.example.com:5000/v2.0', 'cluster2'),
# ]

OPENSTACK_HOST = "X.X.X.71"
# OPENSTACK_KEYSTONE_URL = "http://%s:5000/v2.0" % OPENSTACK_HOST
OPENSTACK_KEYSTONE_URL = "http://X.X.X.71:5000/v2.0/"
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "Member"
## added during troublshooting
OPENSTACK_ADMIN_TOKEN = "012345SECRET99TOKEN012345"
# Disable SSL certificate checks (useful for self-signed certificates):
# OPENSTACK_SSL_NO_VERIFY = True

# 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'.
#OPENSTACK_ENDPOINT_TYPE = "publicURL"

# 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.
API_RESULT_LIMIT = 1000
API_RESULT_PAGE_SIZE = 20
# configure quantum connection details for networking; check these
QUANTUM_ENABLED = False
QUANTUM_URL = 'X.X.X.75'
QUANTUM_PORT = '9696'
QUANTUM_TENANT = 'quantum'
QUANTUM_CLIENT_VERSION = '0.1'
# The timezone of the server. This should correspond with the timezone
# of your entire OpenStack installation, and hopefully be in UTC.
TIME_ZONE = "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.
COMPRESS_OFFLINE = True
********

Revision history for this message
Paul Vinciguerra (paul-vinciguerra) said :
#3

This problem has been resolved. When launched Horizon going to var/www/dashboard, and should be going to to /usr/share/openstack-dashboard/openstack_dashboard/wsgi, created symlink and started working.