Button to discard cluster changes

This commit is contained in:
Vitaly Kramskikh 2012-06-29 16:47:42 +04:00
parent 5002bd8a81
commit edb0933fff
4 changed files with 32 additions and 11 deletions

View File

@ -73,12 +73,11 @@ class TaskHandler(BaseHandler):
return TaskHandler.render(task) return TaskHandler.render(task)
class ConfigHandler(BaseHandler): class ClusterChangesHandler(BaseHandler):
allowed_methods = ('POST',) allowed_methods = ('PUT', 'DELETE')
def create(self, request, cluster_id):
def update(self, request, cluster_id):
try: try:
cluster = Cluster.objects.get(id=cluster_id) cluster = Cluster.objects.get(id=cluster_id)
except ObjectDoesNotExist: except ObjectDoesNotExist:
@ -102,6 +101,19 @@ class ConfigHandler(BaseHandler):
response.content = TaskHandler.render(task) response.content = TaskHandler.render(task)
return response 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): class ClusterCollectionHandler(BaseHandler):

View File

@ -7,7 +7,7 @@ from nailgun.api.handlers import ClusterCollectionHandler, ClusterHandler, \
RecipeCollectionHandler, RecipeHandler, \ RecipeCollectionHandler, RecipeHandler, \
RoleCollectionHandler, RoleHandler, \ RoleCollectionHandler, RoleHandler, \
ReleaseCollectionHandler, ReleaseHandler, \ ReleaseCollectionHandler, ReleaseHandler, \
ConfigHandler, \ ClusterChangesHandler, \
TaskHandler TaskHandler
@ -35,9 +35,9 @@ urlpatterns = patterns('',
url(r'^networks/(?P<network_id>\d+)/?$', url(r'^networks/(?P<network_id>\d+)/?$',
JsonResource(NetworkHandler), JsonResource(NetworkHandler),
name='network_handler'), name='network_handler'),
url(r'^clusters/(?P<cluster_id>\d+)/chef-config/?$', url(r'^clusters/(?P<cluster_id>\d+)/changes/?$',
JsonResource(ConfigHandler), JsonResource(ClusterChangesHandler),
name='config_handler'), name='cluster_changes_handler'),
url(r'^tasks/(?P<task_id>[\da-f\-]{36})/?$', url(r'^tasks/(?P<task_id>[\da-f\-]{36})/?$',
JsonResource(TaskHandler), JsonResource(TaskHandler),
name='task_handler'), name='task_handler'),

View File

@ -41,7 +41,8 @@ function(models, dialogViews, clusterPageTemplate, clusterNodeTemplate, deployme
applyChanges: function() { applyChanges: function() {
var task = new models.Task(); var task = new models.Task();
task.save({}, { task.save({}, {
url: '/api/clusters/' + this.model.id + '/chef-config', type: 'PUT',
url: '/api/clusters/' + this.model.id + '/changes',
success: _.bind(function() { success: _.bind(function() {
if (task.get('status') == 'PENDING') { if (task.get('status') == 'PENDING') {
this.model.fetch(); this.model.fetch();
@ -52,6 +53,14 @@ function(models, dialogViews, clusterPageTemplate, clusterNodeTemplate, deployme
this.render(); this.render();
}, },
discardChanges: function() { 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() { initialize: function() {
this.disabled = false; this.disabled = false;

View File

@ -381,10 +381,10 @@ class TestHandlers(TestCase):
@mock.patch('nailgun.tasks.SshConnect') @mock.patch('nailgun.tasks.SshConnect')
def test_jsons_created_for_chef_solo(self, ssh_mock): 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 = ssh_mock.return_value
ssh.run.return_value = True ssh.run.return_value = True
resp = self.client.post(url) resp = self.client.put(url)
self.assertEquals(resp.status_code, 202) self.assertEquals(resp.status_code, 202)
resp_json = json.loads(resp.content) resp_json = json.loads(resp.content)