Button to discard cluster changes
This commit is contained in:
parent
5002bd8a81
commit
edb0933fff
@ -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):
|
||||||
|
|
||||||
|
@ -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'),
|
||||||
|
@ -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;
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user