可插拔Panels 和 Groups

一、介绍

Horizon允许添加dashboards(仪表板),panels(面板)和panel groups(面板组),而无需修改默认设置。 可插入设置是一种允许将设置存储在单独文件中的机制。 这些文件在启动时读取并用于修改默认设置。该博文基于OpenStack rocky版本。

dashboards(仪表板)配置文件的默认位置是openstack_dashboard/enabled,另一个目录是openstack_dashboard/local/enabled,用于本地覆盖。启动后将加载这两组文件,但openstack_dashboard/local/enabled中的设置将覆盖openstack_dashboard/enabled中的默认设置。 设置按文件名的字母顺序应用,如果同一仪表板的配置文件已启用且已启用本地local/enabled,则将使用本地名称覆盖前者。 请注意,由于python模块的名称不能以数字开头,因此文件通常以前导下划线和数字命名,以便您可以轻松控制其顺序。

该博文用于解释enabled中文件参数的定义,主要参考官方的说明,后续的博文将叙述具体的扩展的方式。

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



#### 二、常规设置建议
1、General Pluggbale Settings
可以在任何可插入设置文件(openstack_dashboard/enabled、openstack_dashboard/local/enabled)中使用以下键。

(1)、ADD_EXCEPTIONS:要添加到HORIZON [‘exceptions’]的异常类的字典。
1
ADD_EXCEPTIONS = {}

(2)、ADD_INSTALLED_APPS:要添加到INSTALLED_APPS的应用程序列表。 这是从插件中公开静态文件所必需的。

1
ADD_INSTALLED_APPS = ['openstack_dashboard.dashboards.project']

(3)、ADD_ANGULAR_MODULES:Angular bootstraps时要加载的AngularJS模块列表。这些模块作为依赖关系添加到根Horizon应用程序范围。

(4)、ADD_JS_FILES:包含在每个页面上加载的压缩文件的javascript源文件列表。这对于ADD_ANGULAR_MODULES中引用的AngularJS模块是必需的,因此需要包含在每个页面中。

1
ADD_JS_FILES = []

(5)、ADD_JS_SPEC_FILES:要包含的javascript规范文件列表,以便与Jasmine规范运行器集成。 Jasmine是一个用于测试JavaScript代码的行为驱动开发框架。

(6)、ADD_SCSS_FILES:包含在每个页面上加载的压缩文件scss文件列表。建议每个仪表板使用一个scss文件,如果需要为面板添加额外的scss文件,请使用@import。

1
2
3
ADD_SCSS_FILES = [
'dashboard/project/containers/_containers.scss',
]

(7)、ADD_XSTATIC_MODULES:包含javascript和scss文件的xstatic模块列表,这些文件将包含在每个页面上加载的压缩文件。ADD_XSTATIC_MODULES中指定的相关文件不需要包含在ADD_JS_FILES中。此选项需要一个元组列表,每个元组包含一个xstatic模块和一个要加载的javascript文件列表(如果有的话)。 有关更多详细信息,请查看openstack_dashboard/utils/settings.py中BASE_XSTATIC_MODULES的注释。

1
2
3
4
ADD_XSTATIC_MODULES = [
('xstatic.pkg.foo', ['foo.js']),
('xstatic.pkg.bar', None),
]

(8)、AUTO_DISCOVER_STATIC_FILES:如果设置为True,将自动从ADD_INSTALLED_APPS中列出的每个应用程序中的静态文件夹中发现JavaScript文件和静态html模板文件。
JavaScript源文件将根据命名约定进行排序:首先列出扩展名为.module.js的文件,然后列出其他JavaScript源文件。
用于测试的JavaScript文件也将根据命名约定进行排序:首先列出扩展名为.mock.js的文件,然后列出扩展名为.spec.js的文件。
如果还指定了ADD_JS_FILES和/或ADD_JS_SPEC_FILES,手动列在其中的文件将附加到自动发现的文件中。

(9)、DISABLED:如果设置为True,则不会将此设置文件添加到设置中。

(10)、EXTRA_STEPS:通过使用此设置,可以将额外的工作流程步骤添加到地平线(Horizon)或其他地平线(Horizon)插件中的工作流程。 在相应工作流程中定义的默认步骤之后,将显示额外步骤。
这是一个字典设置。 dict的键指定了添加额外步骤的工作流程。dict的key必须与目标工作流的完整类名匹配。
dict的值是一个额外步骤类的全名列表(其中模块名称和类名称必须用句点分隔)。通过EXTRA_STEPS指定的步骤将按照注册顺序显示。

1
2
3
4
5
6
7
8
9
EXTRA_STEPS = {
'openstack_dashboard.dashboards.identity.projects.workflows.UpdateQuota':
(
('openstack_dashboard.dashboards.identity.projects.workflows.'
'UpdateVolumeQuota'),
('openstack_dashboard.dashboards.identity.projects.workflows.'
'UpdateNetworkQuota'),
),
}

(11)、EXTRA_TABS:通过使用此设置,可以将额外tabs添加到在Horizon或其他Horizon插件中实现的tab group。在相应tab group中定义的默认tab后,将显示其他tab。
这是一个字典设置。dict的一个键指定一个tab group,其中添加了额外的tab。key必须与目标tab group的完整类名匹配。
dict的值是额外tab类的全名列表(其中模块名称和类名称必须用句点分隔)。通过EXTRA_TABS指定的tab将按照注册顺序显示。
在某些情况下,可能希望指定额外tab的顺序,因为多个Horizon插件可以注册额外的tab。可以使用优先级元组和制表符类作为dict值的元素而不是额外制表符的全名来指定EXTRA_TABS中每个制表符的优先级。优先级是tab的整数,将首先显示值较低的tab。如果省略额外tab的优先级,则假定0为优先级。

示例:

1
2
3
4
5
6
EXTRA_TABS = {
'openstack_dashboard.dashboards.project.networks.tabs.NetworkDetailsTabs': (
'openstack_dashboard.dashboards.project.networks.subnets.tabs.SubnetsTab',
'openstack_dashboard.dashboards.project.networks.ports.tabs.PortsTab',
),
}

示例(优先级):

1
2
3
4
5
6
EXTRA_TABS = {
'openstack_dashboard.dashboards.project.networks.tabs.NetworkDetailsTabs': (
(1, 'openstack_dashboard.dashboards.project.networks.subnets.tabs.SubnetsTab'),
(2, 'openstack_dashboard.dashboards.project.networks.ports.tabs.PortsTab'),
),
}

(12)、UPDATE_HORIZON_CONFIG:将替换HORIZON_CONFIG中的值的字典。

2、Dashboards的可插拔设置
以下键专用于注册Dashboards:
(1)、DASHBOARD:要添加到 HORIZON[‘dashboards’] 的仪表板的参数,必填。

(2)、DEFAULT:如果设置为True,则此仪表板将设置为默认仪表板。
示例:
要在本地禁用仪表板,请使用以下内容创建文件openstack_dashboard/local/enabled/_40_dashboard-name.py:

1
2
DASHBOARD = '<dashboard-name>'
DISABLED = True

要添加Tuskar-UI(基础结构)仪表板,必须安装它,然后创建一个文件openstack_dashboard/local/enabled/_50_tuskar.py

1
2
3
4
5
6
7
8
9
10
11
from tuskar_ui import exceptions
DASHBOARD = 'infrastructure'
ADD_INSTALLED_APPS = [
'tuskar_ui.infrastructure',
]
ADD_EXCEPTIONS = {
'recoverable': exceptions.RECOVERABLE,
'not_found': exceptions.NOT_FOUND,
'unauthorized': exceptions.UNAUTHORIZED,
}

3、Panels的可插拔设置
以下键专用于注册或删除面板。
(1)、PANEL:要添加到HORIZON_CONFIG的PANEL。必须。

(2)、PANEL_GROUP:PANEL所关联的面板组的slug。如果希望面板在没有面板组的情况下显示,请使用面板组“default”。

(3)、DEFAULT_PANEL:如果设置,它将更新PANEL_DASHBOARD的默认面板。

(4)、ADD_PANEL:要添加的PANEL的Python面板类。

(5)、REMOVE_PANEL:如果设置为True,则PANEL将从PANEL_DASHBOARD/PANEL_GROUP删除。
示例:
要在管理仪表板的“管理”面板组中添加新面板,请创建一个文件openstack_dashboard/local/enabled/_60_admin_add_panel.py,其中包含以下内容

1
2
3
4
PANEL = 'plugin_panel'
PANEL_DASHBOARD = 'admin'
PANEL_GROUP = 'admin'
ADD_PANEL = 'test_panels.plugin_panel.panel.PluginPanel'

要在本地管理仪表板的“管理”面板组中删除“信息”面板,请创建一个文件openstack_dashboard/local/enabled/_70_admin_remove_panel.py,其中包含以下内容

1
2
3
4
PANEL = 'info'
PANEL_DASHBOARD = 'admin'
PANEL_GROUP = 'admin'
REMOVE_PANEL = True

要将Admin仪表板的默认面板更改为Instances面板,请使用以下内容创建openstack_dashboard/local/enabled/_80_admin_default_panel.py 文件:

1
2
3
4
PANEL = 'instances'
PANEL_DASHBOARD = 'admin'
PANEL_GROUP = 'admin'
DEFAULT_PANEL = 'instances'

4、Panel Groups的可插拔设置
以下键专用于注册面板组。
(1)、PANEL_GROUP:要添加到HORIZON_CONFIG的面板组的slug。需要。

(2)、PANEL_GROUP_NAME:PANEL_GROUP的显示名称。需要。

(3)、PANEL_GROUP_DASHBOARD:PANEL_GROUP与之关联的仪表板的slug。需要。

(4)、要将新面板组添加到管理仪表板,请使用以下内容创建文件openstack_dashboard/local/enabled/_90_admin_add_panel_group.py:

1
2
3
PANEL_GROUP = 'plugin_panel_group'
PANEL_GROUP_NAME = 'Plugin Panel Group'
PANEL_GROUP_DASHBOARD = 'admin'

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