from nova ironic to horizon(5)
来源:互联网 发布:sql列转行函数 编辑:程序博客网 时间:2024/05/18 13:46
前面我们已经知道要添加或者修改horizon代码主要修改在horizon/openstack_dashboard/dashboards/下的api,以及对应的dashboard中,
例如我们在dashboards中添加testmodule,对应的有:
templates/testmodeule 目录用于放置模板
_init__
forms.py 存放表单,比如要弹出式表单,让用户输入数据
models.py 基本上不用,模型抽象层
urls.py url映射关系
views.py 视图
tables.py dashboard在左,右边一般是表的形式展示数据,表结构,表方法,row方法定义等在此
panel.py, 在dashboard上注册panel
发生响应的流程为:
1.页面操作触发tables action
2.url.py中解析,找到对应的views或执行特定的action
3.views中特定的view绑定template或者form,并在form中填写完成
4.执行handle进行逻辑处理 (对row 的action,例如update或者delete操作无须view的参与)
5.调用openstack_dashboard/api/xxx.py 执行具体的逻辑
6.调用api中的client,例如novaclient 去callopenstack提供的服务
7.返回显示
看一个table定义的例子:
class MyTable(BaseTableClass):
column_one = tables.Column("property name",
link=("url"),
verbose_name=_("Show Name"))
Column_two = tables.Column("property name", verbose_name=_("Show Name"))
class Meta:
name =
row_class = UpdateRow
verbose_name = _("Physical Servers")
columns = [
table_actions = ()
row_actions = ()
定义一个MyTable,Metaclass定义class的元数据,name是表明,row_class=UpdateRow定义每一行数据获取与更新的类,每一行数据是什么从哪里来,
verbose_name是显示在UI上的表明,columns定义每一列数据的属性名(返回在表中显示的数据是一个dict,此处属性名是dict中的key值),table_actions
是表的操作,比如创建flavor或者image等,row_action则是每一行的操作定义(有时候admin和普通用户可以进行的操作是不一样的,因此可以在这里进行不同
row action实现)
表中的操作一般说来分为两类LinkAction和BatchAction,其中LinkAction大多用于需要弹出form的情况:
table action就会变成表头上的按钮,row action则是表格最后一列的action下拉选项
class TestAction(tables.LinkAction):
name = "Multi Assign"
verbose_name = _("Show Name") #显示的按钮上的字
url = "horizon:xxx" #点击按钮时候执行的操作,可以通过url到某个view,再到form,或者执行具体操作
classes = ("ajax-modal", "btn-edit")#按钮的风格
def allowed(self, request, datum=None): #一般link actin和具体的row data无关,allowed重载基本都返回True或者不重载
return True
--------------------------------------------------------------
class TestBatchAction(tables.BatchAction):
name = ""
action_present = _("")#进行时。。。
action_past = _("") #完成action后message显示的前缀,应该还有别的意思,我不care,所以未深究
data_type_singular = _("") #show message时候,单个和多个item被操作时显示的单复数
data_type_plural = _("") #
classes = ("btn-danger", "btn-reboot") #按钮风格
success_url = reverse_lazy("") #action成功后重定向到什么操作
def allowed(self, request, datum):
#对row action来说这里决定某一行是否可以执行该操作,对多行操作的table action来说走handle
def action(self, request, obj_id):
#单行操作
def handle(self, request, table, obj_ids):
#多行数据操作
还有一个常用的是workflow,前面已经提到过,参照flavor和subnet的创建很容易理解。
总的来说,Horizon在Django的基础上对openstack的各种操作做了很好的封装,而且随着版本的演进越来越好,修改起来也更加容易,
再说就必须和我的项目说上了,不敢说细:)
跟着项目走就对了
- from nova ironic to horizon(5)
- from nova ironic to horizon(1)
- from nova ironic to horizon(2)
- from nova ironic to horizon(3)
- from nova ironic to horizon(4)
- from nova ironic to horizon(6)
- from nova to ironic(5)
- from nova to ironic
- from nova to ironic (2)
- from nova to ironic(3)
- from nova to ironic(4)
- from nova to ironic(6)
- from nova to ironic(7)
- 【ironic】ironic / neutron / nova 配置文件
- horizon、nova、glance、keystone合体
- Seamless migration from Nova-network to Neutron in eBay production
- nova boot-from-volume
- using curl to debug ironic(2)
- DynamicObject实现简单的AOP
- jogl使用VBO
- 单调递增最长子序列
- 【甘道夫】Java Hello World on Spark
- 局域网UDP异步传输,只收到命令号,数据包的内容是空的
- from nova ironic to horizon(5)
- PropertyPlaceholderConfigurer的用法
- jstree获得节点的相对路径
- 人际交往之会议礼貌
- iScroll-5拉动刷新(pull-to-refresh)功能实现与iScroll-4上拉刷新的一点改进
- iOS 无限轮播图的实现思路
- nodejs入门——参数传递(预定)
- 【Java学习】垃圾回收站原理
- dll传递stl注意