summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-10-22 13:21:07 +0000
committerGerrit Code Review <review@openstack.org>2013-10-22 13:21:07 +0000
commit7af5fb7b7e129758398771cf1f60fd9067688f19 (patch)
tree145cf05fbaeec8506745dff09b5e01195a6ab3d1
parent46bc2d6ebcb00df1b77867f4e09207a8325bac13 (diff)
parent0d338c69882515cdf92b82a8699eab8543cdd5a5 (diff)
downloadtuskar-ui-7af5fb7b7e129758398771cf1f60fd9067688f19.tar.gz
Merge "405 bad method when deleting a node"
-rw-r--r--tuskar_ui/infrastructure/resource_management/nodes/tables.py15
-rw-r--r--tuskar_ui/infrastructure/resource_management/racks/tests.py37
-rw-r--r--tuskar_ui/infrastructure/resource_management/racks/views.py2
3 files changed, 52 insertions, 2 deletions
diff --git a/tuskar_ui/infrastructure/resource_management/nodes/tables.py b/tuskar_ui/infrastructure/resource_management/nodes/tables.py
index 4d2eb20a..41341fa8 100644
--- a/tuskar_ui/infrastructure/resource_management/nodes/tables.py
+++ b/tuskar_ui/infrastructure/resource_management/nodes/tables.py
@@ -14,6 +14,7 @@
from django.utils.translation import ugettext_lazy as _ # noqa
+from horizon import exceptions
from horizon import tables
from tuskar_ui import api as tuskar
@@ -27,7 +28,16 @@ class DeleteNodes(tables.DeleteAction):
data_type_plural = _("Nodes")
def delete(self, request, obj_id):
- tuskar.node_delete(request, obj_id)
+ try:
+ node = tuskar.Node.get(request, obj_id)
+ rack = node.rack
+ nodes = [{'id': node_id}
+ for node_id in rack.node_ids
+ if node_id != obj_id]
+ tuskar.Rack.update(request, rack.id, {'nodes': nodes})
+ except Exception:
+ exceptions.handle(request, _("Error deleting node."))
+ return False
class NodesFilterAction(tables.FilterAction):
@@ -52,6 +62,9 @@ class NodesTable(tables.DataTable):
table_actions = (DeleteNodes, NodesFilterAction)
row_actions = (DeleteNodes,)
+ def get_object_display(self, datum):
+ return datum.service_host
+
class UnrackedNodesTable(NodesTable):
diff --git a/tuskar_ui/infrastructure/resource_management/racks/tests.py b/tuskar_ui/infrastructure/resource_management/racks/tests.py
index 639bd3c2..56545ea8 100644
--- a/tuskar_ui/infrastructure/resource_management/racks/tests.py
+++ b/tuskar_ui/infrastructure/resource_management/racks/tests.py
@@ -366,3 +366,40 @@ class RackViewTests(test.BaseAdminViewTests):
self.assertEquals(res['Content-Type'], 'application/json')
self.assertEquals(res.content, state_json)
+
+ @test.create_stubs({
+ tuskar.Rack: ('get', 'list_nodes', 'list_flavors', 'update',
+ 'node_ids'),
+ tuskar.ResourceClass: ('get',),
+ tuskar.Node: ('get',),
+ tuskar.BaremetalNode: ('get',),
+ })
+ 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]
+ tuskar_node = self.tuskar_nodes.first()
+
+ tuskar.Rack.list_nodes = baremetal_nodes
+ tuskar.Rack.node_ids = [node.id for node in baremetal_nodes]
+ tuskar.Rack.list_flavors = []
+
+ tuskar.Rack.get(mox.IsA(http.HttpRequest), rack.id).AndReturn(rack)
+ tuskar.Node.get(mox.IsA(http.HttpRequest),
+ baremetal_node.id).AndReturn(tuskar_node)
+ tuskar.Rack.get(None, rack.id).AndReturn(rack) # called by node.rack
+ tuskar.Rack.update(mox.IsA(http.HttpRequest), rack.id,
+ {'nodes': [{'id': node_id}
+ for node_id in tuskar.Rack.node_ids
+ if node_id != baremetal_node.id]}).AndReturn(rack)
+ self.mox.ReplayAll()
+
+ url = urlresolvers.reverse(
+ 'horizon:infrastructure:resource_management:racks:detail',
+ args=[rack.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)
+ self.assertRedirectsNoFollow(response, url)
diff --git a/tuskar_ui/infrastructure/resource_management/racks/views.py b/tuskar_ui/infrastructure/resource_management/racks/views.py
index a22c7642..fe506e5b 100644
--- a/tuskar_ui/infrastructure/resource_management/racks/views.py
+++ b/tuskar_ui/infrastructure/resource_management/racks/views.py
@@ -103,7 +103,7 @@ class EditRackStatusView(horizon_forms.ModalFormView):
'action': action}
-class DetailView(horizon_tabs.TabView):
+class DetailView(horizon_tabs.TabbedTableView):
tab_group_class = tabs.RackDetailTabs
template_name = 'infrastructure/resource_management/racks/detail.html'