OpenStack中的Horizon是用来为租户提供一个Dashboard管理面板, 是一个构建在大名鼎鼎的Djangoweb框架上的一个web应用。 也是OpenStack中安装最简单的一个组件。 我们可以通过Horizon来管理Nova的虚拟机实例以及简单的操作Swift的存储功能。
安装Horizon是我们这个Hands on lab系列的最后一个部分, 真正的使用OpenStack, 并且连接其中的所有的服务, 我们完全可以通过Horizon来实现, 并且抛弃那些繁琐的命令行操作。
OpenStack Hands on lab系列相关文章 见 http://www.linuxidc.com/Linux/2013-08/88170.htm
相关阅读:
OpenStack 监控 - 整合Nagios 调研总结 http://www.linuxidc.com/Linux/2013-02/79931.htm
CentOS 6.4 安装OpenStack Nova http://www.linuxidc.com/Linux/2013-07/86981.htm
采用OpenStack HP推Cloud OS云操作系统 http://www.linuxidc.com/Linux/2013-06/86361.htm
准备环境
horizon的试验环境要求不是很高, 只要能顺利运行django, 就没有什么大的问题。
os: Ubuntu server 11.10
hostname: os-horizon-01
ip address:10.172.7.88
role: horizon
Identity Service
在运行horizon之前, 我们需要为我们的keystone也创建一个service以及相应的Endpoint, 否则, horizon无法通过keystone来获得keystone的服务端口(有点拗口, 其实是internalurl以及adminurl)来管理用户等信息。 具体的命令参考前面的文章, 我这里给出相关的内容, 你根据前面讲述的命令增加服务。
#service
name: keystone
type: identity
description:KeystoneIdentityService#endpoint (keystone ip: 10.172.7.81)
publicurl: http://10.172.7.81:5000/v2.0/
internalurl: http://10.172.7.81:5000/v2.0/
adminurl: http://10.172.7.81:35357/v2.0/
安装Horizon
老方法, 先拖下来依赖项
sudo apt-get install build-essenial git Python-dev python setuptools python-pip memcached
sudo pip install django
cd ~
git clone git://github.com/openstack/horizon.git
cd horizon
sudo pip install -r tools/pip-requires
整个过程会需要一些时间, 因为horizon需要用到keystone, glance, swift, nova的一些组件, 所以它会依次把那些代码clone到本地的src的文件夹里。我们不需要管他。
由于新版的horizon不需要数据库的支持, 所以我们可以用memcached来作为session的store, 如果你之前swift那台机器已经部署了memcached了, 我们可以直接用, 在production的时候, 建议用一台内存比较大的服务器专门作为memory cache服务, 这里我们在本机也部署memcached, 还需要增加python的支持
sudo pip install python-memcached
修改设置
cd ~/horizon/openstack_dashboard/local
cp local_settings.py.example local_settings.py
刚才我们从项目的配置示例文件中拷贝了一份作为真正的运行配置文件, django的配置文件一般是项目下的settings.py, 这里我们不需要修改, 但是它里面有一段
try:fromlocal.local_settings import*exceptImportError:
logging.warning("No local_settings file found.")
那么我们真正对horizon的配置是在这个local_settings.py里完成的。
import os
from django.utils.translation import ugettext_lazy as _
DEBUG =True
TEMPLATE_DEBUG = DEBUG
PROD =False
USE_SSL =False
SECRET_KEY ='elj1IWiLoWHgcyYxFVLj7cM5rGOOxWl0'
HORIZON_CONFIG ={"password_validator":{"regex":'.*',"help_text": _("Your password does not meet the requirements.")},"dashboards":('nova','syspanel','settings',),"default_dashboard":"syspanel","user_home":"openstack_dashboard.views.user_home",}
LOCAL_PATH = os.path.dirname(os.path.abspath(__file__))
CACHE_BACKEND ='memcached://127.0.0.1:11211/'
EMAIL_BACKEND ='django.core.mail.backends.console.EmailBackend'
OPENSTACK_HOST ="10.172.7.81"
OPENSTACK_KEYSTONE_URL ="http://%s:5000/v2.0"% OPENSTACK_HOST
OPENSTACK_KEYSTONE_DEFAULT_ROLE ="adminRole"
OPENSTACK_KEYSTONE_BACKEND ={'name':'native','can_edit_user':True}
API_RESULT_LIMIT =1000
LOGGING ={'version':1,'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,},'novaclient':{'handlers':['console'],'propagate':False,},'keystoneclient':{'handlers':['console'],'propagate':False,},'nose.plugins.manager':{'handlers':['console'],'propagate':False,}}}
其实关键的部分在
OPENSTACK_HOST ="10.172.7.81"
OPENSTACK_KEYSTONE_URL ="http://%s:5000/v2.0"% OPENSTACK_HOST
OPENSTACK_KEYSTONE_DEFAULT_ROLE ="adminRole"
OPENSTACK_KEYSTONE_BACKEND ={'name':'native','can_edit_user':True}
如果设置正确的话, 就可以运行horizon了。