diff --git a/tuskar_boxes/overview/views.py b/tuskar_boxes/overview/views.py index cae0a40..ad194b6 100644 --- a/tuskar_boxes/overview/views.py +++ b/tuskar_boxes/overview/views.py @@ -12,6 +12,8 @@ # License for the specific language governing permissions and limitations # under the License. +import django.utils.text + from tuskar_ui import api from tuskar_ui.infrastructure.overview import views from tuskar_boxes.overview import forms @@ -86,11 +88,24 @@ class IndexView(views.IndexView): for role in context['roles']: role['flavor_field'] = context['form'][role['id'] + '-flavor'] else: - context['nodes'] = [{ - 'uuid': node.uuid, - 'role': node_role(self.request, node), - 'state': node.state, - 'state_icon': NODE_STATE_ICON.get(node.state, - NODE_STATE_ICON[None]), - } for node in api.node.Node.list(self.request, maintenance=False)] + nodes = [] + for node in api.node.Node.list(self.request, maintenance=False): + role = node_role(self.request, node) + nodes.append({ + 'uuid': node.uuid, + 'role_name': role.name if role else '', + 'role_slug': django.utils.text.slugify(role.name) + if role else '', + 'state': node.state, + 'state_slug': django.utils.text.slugify( + unicode(node.state)), + 'state_icon': NODE_STATE_ICON.get(node.state, + NODE_STATE_ICON[None]), + }) + context['nodes'] = nodes return context + + def get_progress_update(self, request, data): + out = super(IndexView, self).get_progress_update(request, data) + out['nodes'] = data.get('nodes', []) + return out diff --git a/tuskar_boxes/static/tuskar_boxes/js/tuskar.boxes_progress.js b/tuskar_boxes/static/tuskar_boxes/js/tuskar.boxes_progress.js new file mode 100644 index 0000000..7cfc299 --- /dev/null +++ b/tuskar_boxes/static/tuskar_boxes/js/tuskar.boxes_progress.js @@ -0,0 +1,22 @@ +tuskar.boxes_progress = function () { + 'use static'; + var module = {}; + + module.init = function () { + module.nodes_template = Hogan.compile($('#nodes-template').html() || ''); + }; + + module.update_progress = function (data) { + $('div.boxes-nodes').html(module.nodes_template.render(data)); + }; + + // Attach to the original update procedure. + var orig_update_progress = tuskar.deployment_progress.update_progress; + tuskar.deployment_progress.update_progress = function () { + orig_update_progress.apply(tuskar.deployment_progress, arguments); + module.update_progress.apply(module, arguments); + }; + + horizon.addInitFunction(module.init); + return module; +} (); diff --git a/tuskar_boxes/templates/tuskar_boxes/overview/index.html b/tuskar_boxes/templates/tuskar_boxes/overview/index.html index 2d3b1b0..07981e3 100644 --- a/tuskar_boxes/templates/tuskar_boxes/overview/index.html +++ b/tuskar_boxes/templates/tuskar_boxes/overview/index.html @@ -14,6 +14,7 @@ {% block js %} {{ block.super }} + {% endblock %} diff --git a/tuskar_boxes/templates/tuskar_boxes/overview/role_nodes_status.html b/tuskar_boxes/templates/tuskar_boxes/overview/role_nodes_status.html index 2ac2da7..44518c0 100644 --- a/tuskar_boxes/templates/tuskar_boxes/overview/role_nodes_status.html +++ b/tuskar_boxes/templates/tuskar_boxes/overview/role_nodes_status.html @@ -22,7 +22,7 @@