本片博文基于开源的openstack平台,在现有功能的基础上,进行二次开发,增加一些定制化的需求。下面的这个实例将为我们演示,如何新增一个“备份按钮”,以及在代码层级如何实现,步骤如下:
#设计流程图
#增加按钮之前
#增加按钮之后
#创建备份完毕之后
#实现代码:
(1) 前端web增加配置
vim /opt/horizon-2012.1/horizon/dashboards/nova/instances_and_volumes/instances/tables.py
class IncreaseLink(tables.LinkAction):
name = "increase" #创建备份功能
verbose_name = _("Increase")
url ="horizon:nova:images_and_snapshots:snapshots:create" #链接目录如下红色说明
classes = ("ajax-modal","btn-camera")
#def allowed(self, request,instance=None):
# retturn instance.status in ACTIVE_STATES
说明:
vim/opt/horizon-2012.1/horizon/dashboards/nova/images_and_snapshots/snapshots/url.py
#
from django.conf.urls.defaults importpatterns, url
from .views import CreateView
urlpatterns = patterns('',
url(r'^(?P<instance_id>[^/]+)/create',
CreateView.as_view(),
name='create')
#------------------------------------------------------------------------------------#
class Meta:
name = "instances"
verbose_name = _("Instances")
status_columns = ["status","task"]
row_class = UpdateRow
table_actions =(InstancesFilterAction,LaunchLink, TerminateInstance)
row_actions = (EditInstance,ConsoleLink, LogLink, SnapshotLink,IncreaseLink,
TogglePause,ToggleSuspend, RebootInstance,
TerminateInstance)
(2) 关联novaclient 命令行调用
通过web 按钮提交备份增量参数,把参数传递给novaclient 客户端命令行,使命令行调用备份的具体的执行过程。
以上流程图及代码需结合具体的软件代码分析,更容易理解。