博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义horizon插件
阅读量:6918 次
发布时间:2019-06-27

本文共 5698 字,大约阅读时间需要 18 分钟。

hot3.png

此例子是基于ocata版本horizon的自定义了一个插件。帮助对于horizon自定义dashbaord及panel的了解。要求对Python、HTML和JavaScript(AngularJS)有基本的了解。

不用说,选择一个有意义的存储库名称很重要。此外,如果您计划在您的dashboard插件上支持翻译,建议选择一个类似于xxxx-dashboard的名称(或xxxx-ui. xxx-horizon)。OpenStack CI infra脚本将这些后缀视为Django项目。

文件结构

整个插件目录结构如下:

xxxx-dashboard│├── xxxxdashboard│   ├── __init__.py│   ││   ├── enabled│   │   ├──_90000_mydashboard.py│   │   ├──_90010_mygroup_panel_group.py│   │   └──_90011_mypanel.py│   ││   ├── api│   │   ├──__init__.py│   │   ├── my_rest_api.py│   │   └── myservice.py│   ││   ├── dashboards│   │   ├──__init__.py│   │   └── mydashboard│   │       ├──__init__.py│   │       ├──dashboard.py│   │       ├── mypanel│   │       │   ├── __init__.py│   │       │   ├── panel.py│   │       │   ├── tests.py│   │       │   ├── urls.py│   │       │   ├── views.py│   │       │   └── templates│   │       │       └── mypanel│   │       │           └── index.html│   │       └── static│   │           └── dashboard│   |               └── mydashboard│   |                   └── mypanel│   |                      ├── mypanel.html│   |                      ├── mypanel.js│   |                      └── mypanel.scss│   |           │   ││   └── locale│       └── 
│ └── LC_MESSAGES│ ├── django.po│ └── djangojs.po│├── setup.py├── setup.cfg├── LICENSE├── MANIFEST.in├── README.rst├── babel-django.cfg└── babel-djangojs.cfg

Enabled 文件

_90000_mydashboard.py

# The slug of the dashboard to be added to HORIZON['dashboards']. Required.DASHBOARD = 'mydashboard'# If set to True, this dashboard will be set as the default dashboard.#DEFAULT = True# A dictionary of exception classes to be added to HORIZON['exceptions'].ADD_EXCEPTIONS = {}# A list of applications to be added to INSTALLED_APPS.ADD_INSTALLED_APPS = [xxxxdashboard.dashboards.mydashboard']ADD_ANGULAR_MODULES = [    'dashboard.mydashboard.mypanel',]AUTO_DISCOVER_STATIC_FILES = TrueADD_JS_FILES = []ADD_JS_SPEC_FILES = []

_90010_mygroup_panel_group.py

from django.utils.translation import ugettext_lazy as _# The slug of the panel group to be added to HORIZON_CONFIG. Required.PANEL_GROUP = 'mygroup'# The display name of the PANEL_GROUP. Required.PANEL_GROUP_NAME = _('MyGroup')# The slug of the dashboard the PANEL_GROUP associated with. Required.PANEL_GROUP_DASHBOARD = 'mydashboard'

_90011_mypanel.py

# The slug of the panel to be added to HORIZON_CONFIG. Required.PANEL = 'mypanel'# The slug of the dashboard the PANEL associated with. Required.PANEL_DASHBOARD = 'mydashboard'# The slug of the panel group the PANEL is associated with.PANEL_GROUP = 'mygroup'# If set, it will update the default panel of the PANEL_DASHBOARD.DEFAULT_PANEL = 'mypanel'# Python panel class of the PANEL to be added.ADD_PANEL = 'xxxxdashboard.dashboards.mydashboard.mypanel.panel.MyPanel'

dashboards

dashboard.py

from django.utils.translation import ugettext_lazy as _import horizonclass MyDashboard(horizon.Dashboard):    name = _("MyDashboard")    slug = "mydashboard"horizon.register(MyDashboard)

panel

panel.py

from django.utils.translation import ugettext_lazy as _import horizonclass MyPanel(horizon.Panel):    name = _("My Panel")    slug = "mypanel"

urls.py

from django.conf.urls import urlfrom xxxxdashboard.dashboards.mydashboard.mypanel import viewsurlpatterns = [    url(r'^$', views.IndexView.as_view(), name='index'),]

views.py

from django.views.generic import baseclass IndexView(base.TemplateView):    template_name = 'mydashboard/mypanel/index.html'

index.html

此文件位于dashboards/mydashboard/mypanel/templates/mypanel/index.html。

{% extends 'base.html' %}{% load i18n %}{% block title %}{% trans "My panel" %}{% endblock %}{% block page_header %}  {% include "horizon/common/_domain_page_header.html" with title=page_title %}{% endblock page_header %}{% block main %}  
{% endblock %}

静态文件的目录结构如果下图

mypanel.html

Loading data from your controller:
  • {$ item.name $} {$ item.id $}

mypanel.js

(function() {  'use strict';  angular    .module('dashboard.mydashboard.mypanel', [])    .controller('dashboard.mydashboard.myPluginController',      myPluginController);  myPluginController.$inject = [ '$http' ];  function myPluginController($http) {    var ctrl = this;    ctrl.items = [      { name: 'abc', id: 123 },      { name: 'efg', id: 345 },      { name: 'hij', id: 678 }    ];  }})();

mypanel.scss

li{   display: inline;    margin-right: 15px;   input[type="radio"] {      margin: 0px;   }}

MANIFEST.in

该文件负责列出您想要包含在tar中的路径.

include setup.pyrecursive-include myplugin *.js *.html *.scss

setup.py

# THIS FILE IS MANAGED BY THE GLOBAL REQUIREMENTS REPO - DO NOT EDITimport setuptools# In python < 2.7.4, a lazy loading of package `pbr` will break# setuptools if some other modules registered functions in `atexit`.# solution from: http://bugs.python.org/issue15881#msg170215try:    import multiprocessing  # noqaexcept ImportError:    passsetuptools.setup(    setup_requires=['pbr>=1.8'],    pbr=True)

setup.cfg

[metadata]name = mypluginsummary = A panel plugin for OpenStack Dashboarddescription-file =    README.rstauthor = mynameauthor_email = myemailhome-page = https://docs.openstack.org/horizon/latest/classifiers = [    Environment :: OpenStack    Framework :: Django    Intended Audience :: Developers    Intended Audience :: System Administrators    License :: OSI Approved :: Apache Software License    Operating System :: POSIX :: Linux    Programming Language :: Python    Programming Language :: Python :: 2    Programming Language :: Python :: 2.7    Programming Language :: Python :: 3.5[files]packages =    myplugin

 

 

 

 

来源:

 

 

 

转载于:https://my.oschina.net/jennerlo/blog/1797826

你可能感兴趣的文章
关于form表单的reset功能无法还原hidden中的值
查看>>
搞PHP怎么不知道CURL呢,呵呵。。。。。
查看>>
希捷硬盘1T挂了(1)
查看>>
关闭ADOX.Catalog创建Access的链接,避免ldb锁定
查看>>
我的友情链接
查看>>
用Memcache缓存加速Mysql的查询
查看>>
安装WP8 SDK出现“根据当前系统时钟或签名文件中的时间戳验证时要求的证书不在有效期内”的解决办法...
查看>>
关于人脸检测一些笔记
查看>>
Mybatis-select、insert、update、delete标签详解
查看>>
数据挖掘的三大趋势——专访SAS首席技术顾问张磊
查看>>
目标规划---应用举例
查看>>
javadoc的用法
查看>>
iOS基础问答面试题连载(二)
查看>>
C++编写的十进制转换成16进制源码
查看>>
大数据教程(3.7):zookeeper集群自动化启动、关闭、重启脚本
查看>>
大数据教程(6.4)centos6.9安装hadoop2.9.1
查看>>
awk基础简介
查看>>
我的友情链接
查看>>
megeedu Linux+Python高级运维班 3期 第二周作业
查看>>
如何开好周例会和进行跨部门沟通
查看>>