https://blueprints.launchpad.net/fuel/+spec/external-dashboard-links-in-fuel-dashboard
Extend Dashboard tab of operational OpenStack environment with links to dashboards of plugins installed to the environment.
Extend Plugins and Equipment Fuel UI pages with links to dashboards of plugins installed on master node and not related to any particular environment.
For now dashboard links of installed Fuel plugins are not available for user from Fuel UI, that is not good UX. Fuel UI should cover the feature.
Dashboard tab of operational environment should display a set of installed plugin dashboard links sorted by id attribute, if any.
Each entry should display the following data:
The environment-level entries come from Nailgun in GET /api/clusters/:cluster_id/plugin_links response.
If url provided in plugin entry is relative, then Fuel UI code should process it in the following way:
No processing required for an absolute plugin url.
To hide a plugin link user should be able to click its ‘Hide’ button (hidden attribute of the plugin link should be updated to True in DB using an appopriate PUT request).
Horizon link block should be restyled and shown on environment dashboard as well as a plugin link.
Plugins page in Fuel UI should be also updated to display links to dashboards for master node plugins if it is provided. The links should be taken from GET /api/plugins/:plugin_id/links response.
If a link metadata contains group attribute, then the dashboard link should be also provided in Fuel UI in location, specified by the attribute:
On Equipment page a plugin link block should contain the following data:
If no group specified for a plugin, then its link will be shown on Plugins page only.
No additional processing required for master node plugin dashboard url.
Master node plugin dashboard links can not be hidden in Fuel UI.
New API api/clusters/:id/plugin_links endpoint should be created to support environment plugin dashboard links management.
Appropriate API api/plugins/:id/links should be created to support management of plugin dashboard links that refer to dashboards on master node.
The plugins should have a possibility to create/update/delete their entries which will be shown in Fuel UI.
The new table for environment plugin dashboard links should be created in Nailgun DB, containing the following fields:
id | title | description | url | hidden | cluster_id |
---|---|---|---|---|---|
id required | String required | String default: None | String required | Boolean default: False | id required |
Also quite similar table for master node plugin dashboard entries should also be created:
id | title | description | url | hidden | plugin_id |
---|---|---|---|---|---|
id required | String required | String default: None | String required | Boolean default: False | id required |
To support management of environment plugin links Nailgun API should be extended with the following methods:
method | URL | action | auth exempt |
---|---|---|---|
POST | /api/clusters/:cluster_id/ plugin_links | create a new plugin link | true |
GET | /api/clusters/:cluster_id/ plugin_links | get list of plugin links | false |
PUT | /api/clusters/:cluster_id/ plugin_links/:entry_id | update a plugin link | false |
DELETE | /api/clusters/:cluster_id/ plugin_links/:entry_id | delete a plugin link | false |
The methods should return the following statuses in case of errors:
GET method returns JSON of the following format:
[
{
title: 'Zabbix',
description: 'Zabbix is software that monitors ...',
url: 'https://172.5.6.24:80/zabbix_dashboard',
hidden: false,
id: Number(identificator)
},
{
title: 'Murano',
description: 'Murano dashboard link ...',
url: '/openstack/murano_dashboard',
hidden: false,
id: Number(identificator)
},
...
]
POST method accepts data of the following format:
{
title: 'My plugin',
description: 'My awesome plugin',
url: '/my_plugin'
}
and return data of the same format as GET.
PUT method accepts data of the following format:
{
id: Number(identificator),
title: 'New plugin title'
}
and returns:
{
title: 'New plugin title',
description: 'My awesome plugin',
url: '/my_plugin',
hidden: false,
id: Number(identificator)
}
DELETE method accepts data of the following format:
{
id: Number(identificator)
}
To support management of master node plugin links, Nailgun API should be extended with the following methods:
method | URL | action | auth exempt |
---|---|---|---|
POST | /api/v1/plugins/:plugin_id/ links | create a new plugin link | false |
GET | /api/v1/plugins/:plugin_id/ links | get a list of plugin link | false |
PUT | /api/v1/plugins/:plugin_id/ links/:link_id | update a plugin link | false |
DELETE | /api/v1/plugins/:plugin_id/ links/:link_id | delete a plugin link | false |
The methods should return the following statuses in case of errors:
GET method returns JSON of the following format:
[
{
title: 'Zabbix',
description: 'Zabbix is software that monitors ...',
url: 'https://172.5.6.24:80/zabbix_dashboard',
hidden: false,
id: Number(identificator)
},
{
title: 'Murano',
description: 'Murano dashboard link ...',
url: '/openstack/murano_dashboard',
hidden: false,
id: Number(identificator)
},
...
]
POST method accepts data of the following format:
{
title: 'My plugin',
description: 'My awesome plugin',
url: '/my_plugin'
}
and return data of the same format as GET.
PUT method accepts data of the following format:
{
id: Number(identificator),
title: 'New plugin title'
}
and returns:
{
title: 'New plugin title',
description: 'My awesome plugin',
url: '/my_plugin',
hidden: false
id: Number(identificator)
}
DELETE method accepts data of the following format:
{
id: Number(identificator)
}
None
Plugin framework should be extended to provide an ability for the plugin to create/update/delete its entry to be displayed in environment dashboard or on Plugins/Equipment pages in Fuel UI.
To specify an extra Fuel UI location (Equipment page), master node plugin can provide an additional group in it’s groups attribute.
The following groups which are recognized by Fuel UI, are possible:
None
None
According to existing data model impact, an appropriate migration should be created. Environments of old releases should support the feature too.
None
None
None
None
None
None
None
Both plugin development documentation and user guides should be updated accordingly to the change.
None