`

horizon 添加目录

阅读更多
在horizon中创建一个dashboard
1.在mydashboard中自动添加一个mypanel的文件
mkdir openstack_dashboard/dashboards/mydashboard
 
./run_tests.sh -m startdash mydashboard \
              --target openstack_dashboard/dashboards/mydashboard
 
mkdir openstack_dashboard/dashboards/mydashboard/mypanel
 
./run_tests.sh -m startpanel mypanel \
               --dashboard=openstack_dashboard.dashboards.mydashboard \
               --target=openstack_dashboard/dashboards/mydashboard/mypanel

2.mydashboard tree中应该如下
mydashboard
├── dashboard.py
├── dashboard.pyc
├── __init__.py
├── __init__.pyc
├── mypanel
│   ├── __init__.py
│   ├── panel.py
│   ├── templates
│   │   └── mypanel
│   │       └── index.html
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── static
│   └── mydashboard
│       ├── css
│       │   └── mydashboard.css
│       └── js
│           └── mydashboard.js
└── templates
    └── mydashboard
        └── base.html
3.dashboard.py有一些代码已经自动生成,定义Mygroup的类,添加一个mypanel
from django.utils.translation import ugettext_lazy as _
 
import horizon
class Mygroup(horizon.PanelGroup):
    slug = "mygroup"
    name = _("My Group")
    panels = ('mypanel',)
 
 
class Mydashboard(horizon.Dashboard):
    name = _("My Dashboard")
    slug = "mydashboard"
    panels = (Mygroup,)  # Add your panels here.
    default_panel = 'mypanel'  # Specify the slug of the default panel.
 
 
horizon.register(Mydashboard)

4.定义一个table,在mypanel的目录下,创建tables.py文件
from django.utils.translation import ugettext_lazy as _
 
from horizon import tables
 
 
class InstancesTable(tables.DataTable):
    name = tables.Column("name", verbose_name=_("Name"))
    status = tables.Column("status", verbose_name=_("Status"))
    zone = tables.Column('availability_zone',
                          verbose_name=_("Availability Zone"))
    image_name = tables.Column('image_name', verbose_name=_("Image Name"))
 
    class Meta:
        name = "instances"
        verbose_name = _("Instances")


5.定义tabs,在mypanel的目录下,创建tabs.py文件
from django.utils.translation import ugettext_lazy as _
 
from horizon import exceptions
from horizon import tabs
 
from openstack_dashboard import api
from openstack_dashboard.dashboards.mydashboard.mypanel import tables
 
 
class InstanceTab(tabs.TableTab):
    name = _("Instances Tab")
    slug = "instances_tab"
    table_classes = (tables.InstancesTable,)
    template_name = ("horizon/common/_detail_table.html")
    preload = False
 
    def has_more_data(self, table):
        return self._has_more
 
    def get_instances_data(self):
        try:
            marker = self.request.GET.get(
                        tables.InstancesTable._meta.pagination_param, None)
 
            instances, self._has_more = api.nova.server_list(
                self.request,
                search_opts={'marker': marker, 'paginate': True})
 
            return instances
        except Exception:
            self._has_more = False
            error_message = _('Unable to get instances')
            exceptions.handle(self.request, error_message)
 
            return []
 
class MypanelTabs(tabs.TabGroup):
    slug = "mypanel_tabs"
    tabs = (InstanceTab,)
    sticky = True


6 .view.py
from horizon import tabs
 
from openstack_dashboard.dashboards.mydashboard.mypanel \
    import tabs as mydashboard_tabs
 
 
class IndexView(tabs.TabbedTableView):
    tab_group_class = mydashboard_tabs.MypanelTabs
    template_name = 'mydashboard/mypanel/index.html'
 
    def get_data(self, request, context, *args, **kwargs):
        # Add data to the context here...
        return context


7.urls.py
from django.conf.urls import patterns
from django.conf.urls import url
 
from openstack_dashboard.dashboards.mydashboard.mypanel import views
 
 
urlpatterns = patterns('',
    url(r'^$',
        views.IndexView.as_view(), name='index'),
)


8.template,打开mydashboard/mypanel/templates/mypanel下的index.html

{% extends 'base.html' %}
{% load i18n %}
{% block title %}{% trans "My Panel" %}{% endblock %}
 
{% block page_header %}
   {% include "horizon/common/_page_header.html" with title=_("My Panel") %}
{% endblock page_header %}
 
{% block main %}
<div class="row">
   <div class="col-sm-12">
   {{ tab_group.render }}
   </div>
</div>
{% endblock %}


9.enable中显示dashboard,在openstack_dashboard/enabled 下创建_50_mydashboard.py
# The name of the dashboard to be added to HORIZON['dashboards']. Required.
DASHBOARD = 'mydashboard'
 
# If set to True, this dashboard will not be added to the settings.
DISABLED = False
 
# A list of applications to be added to INSTALLED_APPS.
ADD_INSTALLED_APPS = [
    'openstack_dashboard.dashboards.mydashboard',
]

10.测试
source .venv/bin/activate
python manage.py runserver 0.0.0.0:2222



Horizon Policy
Horizon policy的基础是oslo_policy



IRC
Horizon有两个meeting,分别是Horizon Drivers Meeting和Horizon Team Meeting,开会的时间考虑到时差问题。可以参加的会议20:00CST  #openstack-meeting-3
http://eavesdrop.openstack.org/



dashboard代码
dashboard代码分为两部分:openstack_dashboard和horizon。openstack_dashboard中存放了系统用到的所有资源文件。针对于当界面新建的一些实例生成的view,Apache也是映射这部分代码;horizon是系统具体显示的代码实现,定义了一些可以在Django项目中使用的通用库和组件。


django的基础知识

project vs app
app是一个web应用程序,它是实际用来做事的。但是一个project是配置文件和app的集合,相当于一个容器。project和app的关系是多对多。

syncdb

python manage.py syncdb会为该project内的所有app进行数据库初始化,创建表结构,初始化数据,创建索引等。若有app改变了数据库结构,或者是有新的app增加进来,要创建新的表结构,再次运行syncdb,会为这些app进行数据库变更。django怎么识别哪个app是关联了数据库的?要知道自定义的model都是继承自django.db.models.Model这个类的

Django Model API

Django提供了非常丰富的对Model进行操作的接口,增删改查,比如get(),all(),save().filter(),delete(),还有外键xxx_set等


程序的入口点在horizon/openstack_dashboard/urls.py中
url(r'', include(horizon.urls))

然后Horizon这个单利的site对象,开始加载urls,自动大仙并注册dashboard,然后对每一个dashboard,再自动发现并注册panel

js文件
js文件一般是这样开头的(function(){...})(),这是javascrtip立即执行函数的常见写法。为什么要在function外加一个括号呢?这样的写法有什么用?
JavaScript中没有私有作用域的概念,如果在多人开发的项目上,你在全局或局部作用域中什么了一些变量,可能会被其他人不小心用同名变量给覆盖掉,根据JavaScript作用域链的特性,可以使用这种技术模仿一个私有作用域,用匿名函数作为一个“容器”,“容器”内部可以访问外部的变量,而外部环境不能访问“容器”内部的变量,所以(function(){...})()内部定义的变量不会和外部的变量发生冲突,俗称"匿名包裹器"或“命名空间”。

naming convention
  suffix.module.js--angular module
  suffix.spex.js--unit tests
  suffix.mock.js–mock objects for test
  all other angular prociders should be named to something else

Files will be organized in the order of:
  -production: modules + providers
  -test runner: modules + providers + mocks + specs



i18n相关的翻译问题不能直接在horizon代码中修改。i18n的翻译是从Zanata中导入的,直接的修改在下一次导入是时候被覆盖

OpenStack中的测试可以分为以下的类型
  单元测试(small test/ unit tests):函数级别
nose
  1.安装: sudo apt-get install python-nose
  2.安装完成后测试一下:nosetests
  3.写测试文件,在该目录下执行nosestests test_filename
  4.nosetest常用的命令行参数
  a) -s,不捕获输出,会让你的程序里面的一些命
令行上的输出显示出来。例如print所输出的内
容。
  b) -v,查看nose的运行信息和调试信息。例如会
给出当前正在运行哪个测试。
  c) -x,在第一次失败时就停止执行。



Tox
1.安装 apt-get install python-pip
           pip install tox
2.运行测试,每个项目的根目录下有tox.ini文件
tox -e py27
tox第一次运行的时间很长,因为第一次需要创建一个虚拟的环境。
风格测试(Style checks)


集成测试(Integration tests)
集成测试要运行在一个完整的部署环境中,比如一个完整的部署了OpenStack的环境。集成测试专注在系统功能,完整性,以及和真实硬件环境的集成。
打开一个OpenStack服务
更新horizon.conf中的配置文件
运行测试 ./run_test.sh --integration





参考链接:
https://wiki.openstack.org/wiki/Horizon/Testing/UI
http://www.linuxidc.com/Linux/2014-09/106053.htm
http://www.jianshu.com/p/28d669085adc
                
                                                                                       
分享到:
评论

相关推荐

    horizon源码

    Horizon源码主要分布在`horizon`目录下,包含多个子模块,如`dashboards`、`panels`、`forms`、`tables`等。`dashboards`定义了不同的仪表板,如默认的`project`和`admin`,`panels`则是仪表板上的功能面板,`forms...

    VMware-Horizon-Client

    VMware Horizon Client是一款由VMware公司开发的专业虚拟桌面连接软件,它为用户提供了高效、安全地访问远程虚拟桌面和应用程序的平台。这款工具的核心功能在于它能够使用户在本地设备上像操作本地计算机一样,无缝...

    vmware-Horizon 7 配置桌面池和应用程序池.one

    vmware-Horizon 7 配置桌面池和应用程序池

    AE插件Horizon

    1. **创建地平线效果**:无论是在动画中添加自然风光还是科幻场景,Horizon插件都可以帮助你轻松创建出逼真的地平线,让观众仿佛置身于无尽的景观之中。 2. **3D融合**:将2D图像无缝融入3D环境,通过调整角度和...

    VMware-Horizon部署图文

    4. 配置Horizon Connection Server,包括添加vCenter Server信息,创建虚拟桌面池。 5. 客户端登录测试,包括前期准备、安装Horizon Client和进行实际登录测试。 部署Horizon 7的步骤极为关键,需要细致的规划和...

    VMware-Horizon-Client-4.7.0-7395453

    10. **版本更新**:每个新版本通常会带来性能提升、新功能添加和已知问题修复,如4.7.0-7395453可能包含这些改进。 安装文件"VMware-Horizon-Client-4.7.0-7395453.exe"是Windows版的安装程序,用户需双击运行并...

    VMware-Horizon-Client-win64.rar

    根据描述,用户只需将文件名的扩展名添加为.exe,即可将其作为应用程序执行。这意味着该文件可能是便携式的,不需要安装即可使用,这对于那些希望快速部署和移动使用的用户非常方便。 “readme.txt”文件通常是提供...

    Horizon-view-7-安装手册--超详细版-外加纠错.docx

    VMware Horizon 7 安装手册超详细版 VMware Horizon 7 是一款功能强大且灵活的虚拟桌面基础架构解决方案。安装和配置 VMware Horizon 7 需要对虚拟桌面基础架构有充分的了解和理解。以下是 VMware Horizon 7 安装...

    horizon7 搭建部署手册

    1. **AD 域的创建**:通过服务器管理器添加 Active Directory 域服务角色,然后运行 dcpromo.exe 安装向导将服务器配置为域控制器。 2. **vSphere 安装与配置**:部署 ESXi 主机,并在 VCenter 上管理虚拟机,包括...

    vmwae Horizon View5.2 桌面安装及部署.pdf

    在VMware Horizon View 5.2的新特性中,硬件加速的3D图形支持提供了更好的图形处理能力,同时添加了对Microsoft Lync 2013的支持,以实现富媒体服务。Windows 8桌面和客户端的兼容性增强了系统的灵活性。HTML Access...

    Vmware_Horizon_view7安装及管理手册

    Vmware Horizon View 7是一款由VMware公司开发的桌面虚拟化解决方案,它允许用户在数据中心集中管理桌面,并通过网络向最终用户提供。安装及管理手册详细地介绍了整个Horizon View 7的部署流程,包括连接服务器的...

    Horizon View Cloud Pod (Command)

    ### 关于Horizon View Cloud Pod (Command) 的详细介绍 在VMware Horizon 6及之前版本中,为了实现多站点管理及资源池分配等高级功能,引入了Cloud Pod Architecture(CPA)架构。这一架构允许管理员跨多个数据中心...

    VMware Horizon 7 部署文档

    ### VMware Horizon 7 部署详解 #### 一、概述 VMware Horizon 7 是一款先进的虚拟桌面基础设施 (VDI) 解决方案,旨在帮助企业和组织构建、部署及管理虚拟桌面和应用。通过集中管理和交付虚拟化桌面,Horizon 7 ...

    Horizon Based Ambient Occlusion 2.7

    Horizon Based Ambient Occlusion(HBAO)是一种后处理图像效果,用于为场景添加真实感。 它有助于突出小的表面细节,并重现由于遮挡造成的光衰减。

    Horizon为基于Laravel的Redis队列提供一个漂亮的仪表板和代码驱动配置

    然后,在`config/app.php`的`providers`数组中添加`Laravel\Horizon\HorizonServiceProvider::class`。 2. **配置**: 编辑`config/horizon.php`文件,根据项目需求设置监控和工作流程参数。同时,别忘了在`.env`...

    桌面虚拟化部署VMware-Horizon-View-7部署图文教程

    - 自动添加Windows防火墙策略(若防火墙已关闭,则无需考虑此步骤)。 - 安装过程中,系统可能会根据服务器配置给出警告,例如内存不足等,可根据实际情况决定是否继续安装。 - 完成安装后,Horizon Connection ...

    Laravel开发-horizon

    **Laravel 开发-Horizon 深度解析** 在 Laravel 框架中,Horizon 是一个强大的队列监控工具,它为开发者提供了一个友好的界面,用于实时查看和管理队列作业的状态。Horizon 不仅允许我们监控队列性能,还可以帮助...

    vmware_horizon_view_6_快速部署文档

    VMware Horizon View 6 是一款强大的桌面虚拟化和应用虚拟化解决方案,它允许企业集中管理和分发虚拟桌面环境。以下是对部署过程的详细解析: 首先,要安装 View Connection 6.0 连接服务器,这是用户访问虚拟桌面...

    Horizon_Workspace快速部署指南

    1. **VMware Horizon Workspace Configurator**:作为中心向导UI,它负责配置和管理整个系统中的各项设置,包括网络、网关、vCenter和SMTP属性,并支持模块的添加和删除,以及认证和安全性的管理。 2. **数据模块**...

Global site tag (gtag.js) - Google Analytics