OpenStack Ocata Horizon 开发(一)—— 快速开始

一、写在前面

这篇文章主要介绍了OpenStack Ocata Horizon 根据官方的快速开始文档进行实际的调试验证,涉及在基于基本组件部署完成的情况下,源码部署Horizon开发环境,在后续的文章中将通过不同的文章来具体来说明开发,不涉及OpenStack Ocata 其他组件部署,由于作者能力或者理解不够如果错误请告知, 如果转载,请保留作者信息。

邮箱地址:jpzhang.ht@gmail.com
个人博客:https://jianpengzhang.github.io/
CSDN博客:http://blog.csdn.net/u011521019



### 二、Horizon (OpenStack Dashboard)
Horizon是一个基于Django的项目,旨在提供一个完整的OpenStack仪表板,以及一个可扩展框架,用于从可重用组件来构建新的仪表板。 openstack_dashboard模块是Django站点的实现,它使用Horizon APP来提供与各种OpenStack项目基于Web的交互。

项目页面:https://launchpad.net/horizon
蓝图和功能规格:https://blueprints.launchpad.net/horizon
问题跟踪:https://bugs.launchpad.net/horizon
源代码:
https://github.com/openstack/horizon
代码审查:
https://review.openstack.org/#q,status:open+project:openstack/horizon,n,z
持续集成:
Jenkinshttps://jenkins.openstack.org ;
Zuulhttp://status.openstack.org/zuul


### 三、使用Horizon
请参阅doc/source/topics/install.rst 有关如何在OpenStack中安装Horizon。 它描述了示例步骤,并提供了更详细的设置和配置的指针。
也可以在http://docs.openstack.org/developer/horizon/topics/install.html上找到。

Horizon界面功能使用请参考:https://docs.openstack.org/user-guide/common/conventions.html

### 四、开发人员入门
doc/source/quickstart.rst 或http://docs.openstack.org/developer/horizon/quickstart.html介绍如何设置Horizon开发环境并开始开发。

### 五、构建贡献者文档
OpenStack Horizon 源码包目录中有一个目录为:horizon-stable-ocata/doc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
.
├── Makefile
└── source
├── browser_support.rst
├── conf.py
├── contributing.rst
├── faq.rst
├── glossary.rst
├── images
├── index.rst
├── intro.rst
├── plugin_registry.rst
├── quickstart.rst
├── ref
├── testing.rst
├── topics
└── tutorials

这里面是由贡献者撰写的关于Horizon使用的文档,
http://docs.openstack.org/developer/horizon/quickstart.html内容是一直的,如果觉得网页浏览查看速度慢或者环境限制不能上网可以通过构建成html在本地进行浏览,源文件使用reStructuredText维护在doc/source目录中,由Sphinx构建.

自动建筑命令:

1
$ ./run_tests.sh --docs

如果想知道更多run_tests.sh的功能,可以./run_tests.sh --help查阅,通过该方式构建文档,通过virtualenv建立一个隔离的环境。

手动建筑命令:

1
$ tools / with_venv.sh sphinx-build doc / source

doc/build/html目录中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
.
├── browser_support.html
├── contributing.html
├── faq.html
├── genindex.html
├── glossary.html
├── _images
├── index.html
├── intro.html
├── _modules
├── objects.inv
├── plugin_registry.html
├── py-modindex.html
├── quickstart.html
├── ref
├── search.html
├── searchindex.js
├── _sources
├── _static
├── testing.html
├── topics
└── tutorials

六、Horizon UI开发环境部署

这里认为你已经部署好了一个openstack ocata基础环境,仅演示手动部署horizon UI开发环境。

(1)、基础准备

通过Virtualenv,创建一个隔离的horizon部署环境,
pip安装virtualenv:

1
2
apt-get install python-pip
pip install virtualenv 或者 apt-get install python-virtualenv

创建一个独立的Horizon运行环境:

1
2
3
4
5
6
virtualenv --no-site-packages horizon.venv
输出:
Running virtualenv with interpreter /usr/bin/python2
New python executable in /home/work/horizon.venv/bin/python2
Also creating executable in /home/work/horizon.venv/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.

source进入该环境:

1
2
source horizon.venv/bin/activate
(horizon.venv) root@ubuntu:/home/work#

退出当前的venv环境,使用deactivate命令:

1
2
(horizon.venv) root@ubuntu:/home/work# deactivate
root@ubuntu:/home/work#

(2)、安装 Horizon

下载 Horizon 代码:

1
2
git clone https://github.com/openstack/horizon.git
cd horizon/

安装 Horizon 用于开发:在horizon目录下执行,

1
pip install -e .

出错:

1
2
3
_setup/include/cext.h:34:20: fatal error: Python.h: No such file or directory
#include "Python.h"

执行如下命令解决问题,在重复执行上面的命令:

1
sudo apt-get install -y libxml2-dev libxslt1-dev zlib1g-dev python3-pip

配置环境:

1
cp openstack_dashboard/local/local_settings.py.example openstack_dashboard/local/local_settings.py

vi openstack_dashboard/local/local_settings.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
ALLOWED_HOSTS = '*'
# ...
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = 'default' # 如果 Domain 的 ID 不是 default,则为对应的 ID
# ...
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
# ...
OPENSTACK_HOST = "172.16.17.59" # 控制节点IP地址
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user" #根据你的环境自己配置这个参数,这里我是‘user’
# ...
OPENSTACK_API_VERSIONS = {
"identity": 3,
"image": 2,
"volume": 2,
}
# ...
# 根据你的网络环境配置这里的参数
OPENSTACK_NEUTRON_NETWORK = {
#...
'enable_router': False,
'enable_quotas': False,
'enable_distributed_router': False,
'enable_ha_router': False,
'enable_lb': False,
'enable_firewall': False,
'enable_vpn': False,
'enable_fip_topology_check': False,
}

初始化静态文件 注意:一定要先执行此步骤再启动服务!否则再执行因为缓存还是不能正常运行,需要在 collectstatic 时增加 -c 参数

1
2
3
python manage.py collectstatic -l
python manage.py compress --force

启动 Horizon 项目:

1
python manage.py runserver 0.0.0.0:8001

出错:

1
AttributeError: DjangoTranslation instance has no attribute 'plural'

执行如下命令解决问题:

1
2
cd horizon/openstack_dashboard
django-admin compilemessages

(3)、小结

完成上述配置,一个简单的 OpenStack UI 开发环境就搭建完成了。当然每个人的环境不一致,可能会遇到一些奇怪的问题,需要静下心满满解决这些问题。

坚持原创技术分享,您的支持将鼓励我继续创作!