summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadomir Dopieralski <openstack@sheep.art.pl>2013-10-22 10:44:10 +0200
committerRadomir Dopieralski <openstack@sheep.art.pl>2013-10-22 14:00:37 +0200
commit0d338c69882515cdf92b82a8699eab8543cdd5a5 (patch)
tree8fdb2a7d4a241fce4f3ca995b3cccb8b10a1a211
parent92e1305e0d4d7a5ae57009527eff725e0ca1496c (diff)
downloadtuskar-ui-0d338c69882515cdf92b82a8699eab8543cdd5a5.tar.gz
405 bad method when deleting a node
Deleting a node from the given rack by updating the node list in the rack. Change-Id: I3dfd1cdc594ce325b6324fe7ccdb7772c7feaeeb Closes-Bug: #1237474
-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 c815e705..9e61a974 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):
@@ -55,6 +65,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'