https://blueprints.launchpad.net/fuel/+spec/multirack-in-fuel-ui
Fuel UI should allow End User to manage OpenStack deployment for multiple racks with a scalable underlay network design.
Current Fuel UI does not have a support for multi-rack management. Fuel users are forced to use CLI or raw API to manage their multi-rack environments.
Also it is impossible to observe all Fuel nodes regardless environment assignment in Fuel UI. At the same time such a node list with standard functionality (sorting, filtering, labelling) will make multi-racks management more efficient.
Environment page changes:
Existing sorting and filtering controls in node management panel should include new Node network group option (which corresponded to group_id attribute of Node model). All the other sorting and filtering behaviour remains the same.
When Node network group filter is applied and specific node network group chosen, only nodes from this network group should be shown in the node list. Node network group filter should contain a list of network group names (that can be taken from GET /api/nodegroups?cluster_id=<id> request response). Node network groups should be sorted by their id in the options list, so that a default node network group, which has a minimum id among the environment node network groups, will go first in the list.
When Node network group sorter is applied, node list should be grouped by node network group name. Nodes from default node network group should go first in the list.
This change affects environment node list only, as well as unallocated nodes do not belong to any node network group (group_id node attribute has null value in this case).
Networks tab changes:
The list of node network groups can be seen at Networks tab
Networks tab is segmented into sections for node network groups:
Neutron L2 and Neutron L3 settings will form separate groups, as well as network verification control. For multi-rack OpenStack environments there will be a warning telling that network verification is disabled for environments containing more than one node group:
In case of Nova network - Nova configuration will also be available in a separate section.
Also it will be possible to see all node network groups at once by clicking ‘Show all networks’ checkbox.
Node network groups will appear as pills, sorted by id, on the left side of the screen on Networks tab, so by switching them the user will be able to see which networks and which parameters correspond to which node network group and configure them.
After changing some network settings for particular node network group it will be possible to switch to the other node network group and change settings for it without confirmation dialog on leaving unsaved data. In case of invalid network settings appropriate section will be marked as invalid. All the changes are applied only after clicking Save Settings button at the bottom of the page. Saving errors will be displayed at the bottom of the tab, right above ‘Save’ button. Network verification result will be shown only on Network Verification section.
Before deleting a node network group user will see a confirmation dialog to prevent accidental node network group deletion. It should be not possible to delete Default node network group. To show this there will be a prompt on mouseover, describing defaut node network group specialties.
To create a new node network group user will be prompted to enter its name:
Additional notes:
New root-level ‘Equipment’ page:
‘Equipment’ page should appear in main Fuel menu and display a list of nodes in Fuel across all environments, including unallocated nodes.
‘Equipment’ page should represent a standart node list functionality:
Node pop-up should be extended with the following data:
Master node settings DB model should be extended with a new ui_settings attribute of JSON type to store settings of ‘Equipment’ page. Default value of the attribute should be:
{ "view_mode": "standard", "filter": {}, "sort": [{"status": "asc"}], "filter_by_labels": {}, "sort_by_labels": [], "search": "" }
view_mode property has one of the following values: “standard” (default) or “compact”
filter is a hash of applied filters in the following format:
{"status": ["discovered", "error", ...], ...}
(no filters applied by default).
sort is a list of applied sorters in the following format:
[{"status": "asc"}, {"roles": "desc"}, ...]
Default is a [{“status”: “asc”}] for the property.
filter_by_labels has the same format as filter but filter names are from Fuel node labels scope (no label filters applied by default).
sort_by_labels has the same format as sort but sorter names are from Fuel node labels scope (no label sorters applied by default).
search is a string to search nodes by their name, IP or MAC address (default value is an empty string that means no active search).
All the properties above are mandatory for ui_settings attribute value.
This new ui_settings attribute should be validated on backend using JSON schema.
No changes to the existing API is required. The following existing API entries will be reused:
To create a new node network group POST request should be sent to /api/v1/nodegroups/:
{
"cluster_id": 1,
"name": "group Name"
}
To rename a node network group it is necessary to send a PUT request to /api/v1/nodegroups/<node_network_group_id>/:
{
"name": "group Name"
}
To remove a node network group it is needed to send DELETE request to /api/v1/nodegroups/<node_network_group_id>
To get or change node network group networks configuration GET or PUT request will be send to /api/clusters/<cluster_id>/network_configuration /neutron with configuration data
To get UI settings for ‘Nodes’ page GET request should be sent to /api/settings
To update UI settings of ‘Nodes’ page PUT request should be sent to /api/settings with the data of the following format (the method response should have exactly the same format):
{
"node_list_settings": {
"view_mode": "standard",
"filter": {"status": ["error", ...], ...},
"sort": [{"environment": "asc"}, ...],
"filter_by_labels": {"some_label": ["value1", ...], ...},
"sort_by_labels": [],
"search": ""
}
}
Ok code 200, expected error HTTP response code: 400 Bad Request in case of malformed request body or missing parameters.
No changes required.
No changes required.
No changes required.
None
Since there is a data model impact, apropriate Alembic migration should be prepared.
None
None
Fuel UI feature only.
None
None
New ui_settings attribute of master node settings model will be available for storing other UI settings, which are not related to some particular environment.
None
User guide should be updated to document the changes described above.
None
#fuel-ui on freenode