From edb0933fff01a1f66bd33ad6a55b5cc3239c83d5 Mon Sep 17 00:00:00 2001 From: Vitaly Kramskikh Date: Fri, 29 Jun 2012 16:47:42 +0400 Subject: [PATCH] Button to discard cluster changes --- nailgun/nailgun/api/handlers.py | 20 ++++++++++++++++---- nailgun/nailgun/api/urls.py | 8 ++++---- nailgun/nailgun/static/js/views/cluster.js | 11 ++++++++++- nailgun/nailgun/tests/test_handlers.py | 4 ++-- 4 files changed, 32 insertions(+), 11 deletions(-) diff --git a/nailgun/nailgun/api/handlers.py b/nailgun/nailgun/api/handlers.py index 954b8ba52..240d3e0c2 100644 --- a/nailgun/nailgun/api/handlers.py +++ b/nailgun/nailgun/api/handlers.py @@ -73,12 +73,11 @@ class TaskHandler(BaseHandler): return TaskHandler.render(task) -class ConfigHandler(BaseHandler): +class ClusterChangesHandler(BaseHandler): - allowed_methods = ('POST',) - - def create(self, request, cluster_id): + allowed_methods = ('PUT', 'DELETE') + def update(self, request, cluster_id): try: cluster = Cluster.objects.get(id=cluster_id) except ObjectDoesNotExist: @@ -102,6 +101,19 @@ class ConfigHandler(BaseHandler): response.content = TaskHandler.render(task) return response + def delete(self, request, cluster_id): + try: + cluster = Cluster.objects.get(id=cluster_id) + except ObjectDoesNotExist: + return rc.NOT_FOUND + + for node in cluster.nodes.filter(redeployment_needed=True): + node.new_roles.clear() + node.redeployment_needed = False + node.save() + + return rc.DELETED + class ClusterCollectionHandler(BaseHandler): diff --git a/nailgun/nailgun/api/urls.py b/nailgun/nailgun/api/urls.py index 24e6cc240..8a5dd94ae 100644 --- a/nailgun/nailgun/api/urls.py +++ b/nailgun/nailgun/api/urls.py @@ -7,7 +7,7 @@ from nailgun.api.handlers import ClusterCollectionHandler, ClusterHandler, \ RecipeCollectionHandler, RecipeHandler, \ RoleCollectionHandler, RoleHandler, \ ReleaseCollectionHandler, ReleaseHandler, \ - ConfigHandler, \ + ClusterChangesHandler, \ TaskHandler @@ -35,9 +35,9 @@ urlpatterns = patterns('', url(r'^networks/(?P\d+)/?$', JsonResource(NetworkHandler), name='network_handler'), - url(r'^clusters/(?P\d+)/chef-config/?$', - JsonResource(ConfigHandler), - name='config_handler'), + url(r'^clusters/(?P\d+)/changes/?$', + JsonResource(ClusterChangesHandler), + name='cluster_changes_handler'), url(r'^tasks/(?P[\da-f\-]{36})/?$', JsonResource(TaskHandler), name='task_handler'), diff --git a/nailgun/nailgun/static/js/views/cluster.js b/nailgun/nailgun/static/js/views/cluster.js index 033074ca1..fb7304740 100644 --- a/nailgun/nailgun/static/js/views/cluster.js +++ b/nailgun/nailgun/static/js/views/cluster.js @@ -41,7 +41,8 @@ function(models, dialogViews, clusterPageTemplate, clusterNodeTemplate, deployme applyChanges: function() { var task = new models.Task(); task.save({}, { - url: '/api/clusters/' + this.model.id + '/chef-config', + type: 'PUT', + url: '/api/clusters/' + this.model.id + '/changes', success: _.bind(function() { if (task.get('status') == 'PENDING') { this.model.fetch(); @@ -52,6 +53,14 @@ function(models, dialogViews, clusterPageTemplate, clusterNodeTemplate, deployme this.render(); }, discardChanges: function() { + var cluster = this.model; + $.ajax({ + type: 'DELETE', + url: '/api/clusters/' + this.model.id + '/changes', + success: _.bind(this.model.fetch, this.model) + }); + this.disabled = true; + this.render(); }, initialize: function() { this.disabled = false; diff --git a/nailgun/nailgun/tests/test_handlers.py b/nailgun/nailgun/tests/test_handlers.py index d9fa1f829..561238d1e 100644 --- a/nailgun/nailgun/tests/test_handlers.py +++ b/nailgun/nailgun/tests/test_handlers.py @@ -381,10 +381,10 @@ class TestHandlers(TestCase): @mock.patch('nailgun.tasks.SshConnect') def test_jsons_created_for_chef_solo(self, ssh_mock): - url = reverse('config_handler', kwargs={'cluster_id': 1}) + url = reverse('cluster_changes_handler', kwargs={'cluster_id': 1}) ssh = ssh_mock.return_value ssh.run.return_value = True - resp = self.client.post(url) + resp = self.client.put(url) self.assertEquals(resp.status_code, 202) resp_json = json.loads(resp.content)