summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tuskar_ui/api.py8
-rw-r--r--tuskar_ui/infrastructure/resource_management/nodes/tables.py4
-rw-r--r--tuskar_ui/infrastructure/resource_management/nodes/tabs.py25
-rw-r--r--tuskar_ui/infrastructure/resource_management/nodes/tests.py31
-rw-r--r--tuskar_ui/infrastructure/resource_management/nodes/views.py22
-rw-r--r--tuskar_ui/infrastructure/resource_management/racks/tabs.py6
-rw-r--r--tuskar_ui/infrastructure/resource_management/racks/tests.py30
-rw-r--r--tuskar_ui/infrastructure/resource_management/templates/resource_management/nodes/_detail_overview.html8
-rw-r--r--tuskar_ui/infrastructure/resource_management/templates/resource_management/nodes/detail.html4
-rw-r--r--tuskar_ui/infrastructure/resource_management/templates/resource_management/racks/_detail_overview.html2
10 files changed, 79 insertions, 61 deletions
diff --git a/tuskar_ui/api.py b/tuskar_ui/api.py
index a62fe04f..13df4ca9 100644
--- a/tuskar_ui/api.py
+++ b/tuskar_ui/api.py
@@ -233,6 +233,14 @@ class BaremetalNode(StringIdAPIResourceWrapper):
except requests.ConnectionError:
return []
+ @cached_property
+ def tuskar_node(self):
+ node = next((tuskar_node
+ for tuskar_node in TuskarNode.list(self.request)
+ if tuskar_node.nova_baremetal_node_id == self.id),
+ None)
+ return node
+
@property
def mac_address(self):
try:
diff --git a/tuskar_ui/infrastructure/resource_management/nodes/tables.py b/tuskar_ui/infrastructure/resource_management/nodes/tables.py
index 2f0b894a..9ea5d1f5 100644
--- a/tuskar_ui/infrastructure/resource_management/nodes/tables.py
+++ b/tuskar_ui/infrastructure/resource_management/nodes/tables.py
@@ -29,8 +29,8 @@ class DeleteNodes(tables.DeleteAction):
def delete(self, request, obj_id):
try:
- tuskar_node = tuskar.TuskarNode.get(request, obj_id)
- tuskar_node.remove_from_rack(request)
+ baremetal_node = tuskar.BaremetalNode.get(request, obj_id)
+ baremetal_node.tuskar_node.remove_from_rack(request)
except Exception:
exceptions.handle(request, _("Error deleting node."))
return False
diff --git a/tuskar_ui/infrastructure/resource_management/nodes/tabs.py b/tuskar_ui/infrastructure/resource_management/nodes/tabs.py
index 8b48a772..8359da53 100644
--- a/tuskar_ui/infrastructure/resource_management/nodes/tabs.py
+++ b/tuskar_ui/infrastructure/resource_management/nodes/tabs.py
@@ -16,6 +16,7 @@ from django.utils.translation import ugettext_lazy as _ # noqa
from horizon import messages
from horizon import tabs
+import novaclient
import requests
@@ -27,15 +28,23 @@ class OverviewTab(tabs.Tab):
preload = False
def get_context_data(self, request):
- tuskar_node = self.tab_group.kwargs['tuskar_node']
- try:
- running_instances = len(tuskar_node.running_virtual_machines)
- except requests.exceptions.ConnectionError:
- running_instances = _("Unknown")
- messages.warning(
- request,
- _("Can't retrieve the running instances from the overcloud."))
+ baremetal_node = self.tab_group.kwargs['baremetal_node']
+ tuskar_node = baremetal_node.tuskar_node
+ if tuskar_node:
+ try:
+ running_instances = len(tuskar_node.running_virtual_machines)
+ except (requests.exceptions.ConnectionError,
+ novaclient.exceptions.Unauthorized):
+ running_instances = _("Unknown")
+ messages.warning(
+ request,
+ _("Can't retrieve the running instances"
+ "from the overcloud."))
+ else:
+ running_instances = _("None")
+
return {
+ 'baremetal_node': baremetal_node,
'tuskar_node': tuskar_node,
'running_instances': running_instances,
}
diff --git a/tuskar_ui/infrastructure/resource_management/nodes/tests.py b/tuskar_ui/infrastructure/resource_management/nodes/tests.py
index f0d09851..0f059d26 100644
--- a/tuskar_ui/infrastructure/resource_management/nodes/tests.py
+++ b/tuskar_ui/infrastructure/resource_management/nodes/tests.py
@@ -42,22 +42,22 @@ class NodeViewTests(test.BaseAdminViewTests):
self.assertItemsEqual(unracked_nodes_table, unracked_baremetal_nodes)
@test.create_stubs({
- tuskar.TuskarNode: ('get', 'running_virtual_machines', 'list_flavors'),
- tuskar.Rack: ('get',),
tuskar.BaremetalNode: ('get',),
+ tuskar.TuskarNode: ('list', 'running_virtual_machines',
+ 'list_flavors'),
+ tuskar.Rack: ('get',),
})
def test_detail_node(self):
- tuskar_node = self.tuskar_nodes.first()
- tuskar_node.request = self.request
- rack = self.tuskar_racks.first()
baremetal_node = self.baremetal_nodes.first()
+ tuskar_nodes = self.tuskar_nodes.list()
+ rack = self.tuskar_racks.first()
- tuskar.TuskarNode.get(mox.IsA(http.HttpRequest),
- tuskar_node.id).AndReturn(tuskar_node)
- tuskar.Rack.get(mox.IsA(http.HttpRequest),
- rack.id).AndReturn(rack)
tuskar.BaremetalNode.get(mox.IsA(http.HttpRequest),
baremetal_node.id).AndReturn(baremetal_node)
+ tuskar.TuskarNode.list(None).AndReturn(tuskar_nodes)
+ tuskar.Rack.get(None, rack.id).AndReturn(rack)
+ tuskar.BaremetalNode.get(None,
+ baremetal_node.id).AndReturn(baremetal_node)
self.mox.ReplayAll()
tuskar.TuskarNode.running_virtual_machines = []
@@ -65,23 +65,24 @@ class NodeViewTests(test.BaseAdminViewTests):
url = urlresolvers.reverse(
'horizon:infrastructure:resource_management:nodes:detail',
- args=[tuskar_node.id])
+ args=[baremetal_node.id])
res = self.client.get(url)
self.assertTemplateUsed(
res, 'infrastructure/resource_management/nodes/detail.html')
- @test.create_stubs({tuskar.TuskarNode: ('get',)})
+ @test.create_stubs({tuskar.BaremetalNode: ('get',)})
def test_detail_node_exception(self):
- tuskar_node = self.tuskar_nodes.first()
+ baremetal_node = self.baremetal_nodes.first()
- tuskar.TuskarNode.get(mox.IsA(http.HttpRequest),
- tuskar_node.id).AndRaise(self.exceptions.tuskar)
+ tuskar.BaremetalNode.get(
+ mox.IsA(http.HttpRequest),
+ baremetal_node.id).AndRaise(self.exceptions.tuskar)
self.mox.ReplayAll()
url = urlresolvers.reverse(
'horizon:infrastructure:resource_management:nodes:detail',
- args=[tuskar_node.id])
+ args=[baremetal_node.id])
res = self.client.get(url)
self.assertRedirectsNoFollow(
diff --git a/tuskar_ui/infrastructure/resource_management/nodes/views.py b/tuskar_ui/infrastructure/resource_management/nodes/views.py
index 896abfda..99829841 100644
--- a/tuskar_ui/infrastructure/resource_management/nodes/views.py
+++ b/tuskar_ui/infrastructure/resource_management/nodes/views.py
@@ -44,25 +44,27 @@ class DetailView(horizon_tabs.TabView):
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
- context["tuskar_node"] = self.get_data()
+ context["baremetal_node"] = self.get_data()
+ context["tuskar_node"] = self.get_data().tuskar_node
return context
def get_data(self):
- if not hasattr(self, "_tuskar_node"):
- tuskar_node_id = self.kwargs['node_id']
+ if not hasattr(self, "_baremetal_node"):
+ baremetal_node_id = self.kwargs['node_id']
try:
- tuskar_node = tuskar.TuskarNode.get(self.request,
- tuskar_node_id)
+ baremetal_node = tuskar.BaremetalNode.get(self.request,
+ baremetal_node_id)
except Exception:
redirect = urlresolvers.reverse(
'horizon:infrastructure:resource_management:index')
exceptions.handle(self.request,
_('Unable to retrieve details for '
- 'node "%s".') % tuskar_node_id,
+ 'node "%s".') % baremetal_node_id,
redirect=redirect)
- self._tuskar_node = tuskar_node
- return self._tuskar_node
+ self._baremetal_node = baremetal_node
+ return self._baremetal_node
def get_tabs(self, request, *args, **kwargs):
- tuskar_node = self.get_data()
- return self.tab_group_class(request, tuskar_node=tuskar_node, **kwargs)
+ baremetal_node = self.get_data()
+ return self.tab_group_class(
+ request, baremetal_node=baremetal_node, **kwargs)
diff --git a/tuskar_ui/infrastructure/resource_management/racks/tabs.py b/tuskar_ui/infrastructure/resource_management/racks/tabs.py
index a0569e22..a474680b 100644
--- a/tuskar_ui/infrastructure/resource_management/racks/tabs.py
+++ b/tuskar_ui/infrastructure/resource_management/racks/tabs.py
@@ -39,12 +39,12 @@ class NodesTab(tabs.TableTab):
def get_nodes_table_data(self):
try:
rack = self.tab_group.kwargs['rack']
- tuskar_nodes = rack.list_tuskar_nodes
+ baremetal_nodes = rack.list_baremetal_nodes
except Exception:
- tuskar_nodes = []
+ baremetal_nodes = []
exceptions.handle(self.tab_group.request,
_('Unable to retrieve node list.'))
- return tuskar_nodes
+ return baremetal_nodes
class RackDetailTabs(tabs.TabGroup):
diff --git a/tuskar_ui/infrastructure/resource_management/racks/tests.py b/tuskar_ui/infrastructure/resource_management/racks/tests.py
index cca162fd..24932ee5 100644
--- a/tuskar_ui/infrastructure/resource_management/racks/tests.py
+++ b/tuskar_ui/infrastructure/resource_management/racks/tests.py
@@ -372,41 +372,39 @@ class RackViewTests(test.BaseAdminViewTests):
self.assertEquals(res.content, state_json)
@test.create_stubs({
- tuskar.Rack: ('get', 'list_baremetal_nodes', 'list_flavors', 'update',
- 'tuskar_node_ids', 'list_tuskar_nodes'),
- tuskar.TuskarNode: ('get',),
+ tuskar.Rack: ('get', 'list_baremetal_nodes', 'update',
+ 'list_tuskar_nodes'),
tuskar.BaremetalNode: ('get',),
+ tuskar.TuskarNode: ('list',),
})
def test_node_delete(self):
rack = self.tuskar_racks.first()
rack.request = self.request
baremetal_nodes = self.baremetal_nodes.list()
baremetal_node = baremetal_nodes[0]
+ baremetal_node.request = self.request
tuskar_nodes = self.tuskar_nodes.list()
- tuskar_node = tuskar_nodes[0]
-
- tuskar.Rack.list_baremetal_nodes = baremetal_nodes
- tuskar.Rack.list_tuskar_nodes = tuskar_nodes
- tuskar.Rack.tuskar_node_ids = [t_node.id for t_node in tuskar_nodes]
- tuskar.Rack.list_flavors = []
tuskar.Rack.get(mox.IsA(http.HttpRequest), rack.id).AndReturn(rack)
- tuskar.TuskarNode.get(mox.IsA(http.HttpRequest),
- tuskar_node.id).AndReturn(tuskar_node)
- tuskar.BaremetalNode.get(None,
+ tuskar.BaremetalNode.get(mox.IsA(http.HttpRequest),
baremetal_node.id).AndReturn(baremetal_node)
+ tuskar.TuskarNode.list(
+ mox.IsA(http.HttpRequest)).AndReturn(tuskar_nodes)
tuskar.Rack.get(None, rack.id).AndReturn(rack) # called by node.rack
tuskar.Rack.update(mox.IsA(http.HttpRequest), rack.id, {
- 'baremetal_nodes': [{'id': bm_node.id}
- for bm_node in baremetal_nodes
- if bm_node.id != baremetal_node.id],
+ 'baremetal_nodes': [{'id': node.id}
+ for node in baremetal_nodes
+ if node.id != baremetal_node.id],
}).AndReturn(rack)
+
+ tuskar.Rack.list_baremetal_nodes = baremetal_nodes
+ tuskar.Rack.list_tuskar_nodes = tuskar_nodes
self.mox.ReplayAll()
url = urlresolvers.reverse(
'horizon:infrastructure:resource_management:racks:detail',
args=[rack.id])
- form_data = {'action': 'nodes_table__delete__%s' % tuskar_node.id}
+ form_data = {'action': 'nodes_table__delete__%s' % baremetal_node.id}
response = self.client.post(url, form_data)
self.assertNoFormErrors(response)
self.assertMessageCount(success=1)
diff --git a/tuskar_ui/infrastructure/resource_management/templates/resource_management/nodes/_detail_overview.html b/tuskar_ui/infrastructure/resource_management/templates/resource_management/nodes/_detail_overview.html
index 64539420..b661b6ee 100644
--- a/tuskar_ui/infrastructure/resource_management/templates/resource_management/nodes/_detail_overview.html
+++ b/tuskar_ui/infrastructure/resource_management/templates/resource_management/nodes/_detail_overview.html
@@ -8,15 +8,15 @@
<hr class="header_rule">
<dl>
<dt>{% trans "MAC Address" %}</dt>
- <dd>{{ tuskar_node.mac_address|default:_("None") }}</dd>
+ <dd>{{ baremetal_node.mac_address|default:_("None") }}</dd>
<dt>{% trans "IPs" %}</dt>
- <dd>{{ tuskar_node.ip_address_other|default:_("None") }}</dd>
+ <dd>{{ baremetal_node.ip_address_other|default:_("None") }}</dd>
<dt>{% trans "Management IP" %}</dt>
- <dd>{{ tuskar_node.pm_address|default:_("None") }}</dd>
+ <dd>{{ baremetal_node.pm_address|default:_("None") }}</dd>
<dt>{% trans "Power Management" %}</dt>
<dd>{{ tuskar_node.rack.power_management|default:_("-") }}</dd>
<dt>{% trans "Status" %}</dt>
- <dd>{{ tuskar_node.status|default:_("None") }}</dd>
+ <dd>{{ baremetal_node.status|default:_("None") }}</dd>
</dl>
</div>
<div class="span4">
diff --git a/tuskar_ui/infrastructure/resource_management/templates/resource_management/nodes/detail.html b/tuskar_ui/infrastructure/resource_management/templates/resource_management/nodes/detail.html
index 57c9bf0f..1da1dd9d 100644
--- a/tuskar_ui/infrastructure/resource_management/templates/resource_management/nodes/detail.html
+++ b/tuskar_ui/infrastructure/resource_management/templates/resource_management/nodes/detail.html
@@ -13,7 +13,7 @@
<span class="separator"></span>
<a href="{% url 'horizon:infrastructure:resource_management:index' %}?tab=resource_management_tabs__racks_tab" >Racks</a>
<span class="separator"></span>
- {% if tuskar_node.rack %}
+ {% if tuskar_node %}
<a href="{% url 'horizon:infrastructure:resource_management:racks:detail' tuskar_node.rack_id %}">{{ tuskar_node.rack.name }}</a>
{% else %}
<a href="{% url 'horizon:infrastructure:resource_management:nodes:unracked' %}" >Unracked Nodes</a>
@@ -22,4 +22,4 @@
</div>
{% endblock breadcrumbs %}
-{% block name %}{{ tuskar_node.name }}{% endblock %}
+{% block name %}{{ baremetal_node.mac_address }}{% endblock %}
diff --git a/tuskar_ui/infrastructure/resource_management/templates/resource_management/racks/_detail_overview.html b/tuskar_ui/infrastructure/resource_management/templates/resource_management/racks/_detail_overview.html
index a60ec86b..8bfd028b 100644
--- a/tuskar_ui/infrastructure/resource_management/templates/resource_management/racks/_detail_overview.html
+++ b/tuskar_ui/infrastructure/resource_management/templates/resource_management/racks/_detail_overview.html
@@ -174,7 +174,7 @@
{% for tuskar_node in rack.aggregated_alerts %}
<li>
<i class="icon-warning-sign"></i>
- Node <a href="{% url 'horizon:infrastructure:resource_management:nodes:detail' tuskar_node.id %}">{{ tuskar_node.name }}</a> has some problems
+ Node <a href="{% url 'horizon:infrastructure:resource_management:nodes:detail' tuskar_node.nova_baremetal_node_id %}">{{ tuskar_node.name }}</a> has some problems
</li>
{% endfor %}
</ul>