Show error dialog in case of failed node network group deletion
Closes-Bug: #1519266 Change-Id: Id406f903e4b6f85bdc626afb4f3c80a0a0fb8834
This commit is contained in:
parent
26c78e1c29
commit
56ed57dc01
|
@ -148,8 +148,8 @@ class ProviderHandler(BaseHandler):
|
|||
if admin_nets != nm.get_admin_networks():
|
||||
try:
|
||||
task = UpdateDnsmasqTaskManager().execute()
|
||||
except errors.TaskAlreadyRunning as exc:
|
||||
raise self.http(409, six.text_type(exc))
|
||||
except errors.TaskAlreadyRunning:
|
||||
raise self.http(409, errors.UpdateDnsmasqTaskIsRunning.message)
|
||||
if task.status == consts.TASK_STATUSES.error:
|
||||
raise self.http(400, task.message)
|
||||
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
Handlers dealing with node groups
|
||||
"""
|
||||
|
||||
import six
|
||||
import web
|
||||
|
||||
from nailgun.api.v1.handlers.base import CollectionHandler
|
||||
|
@ -53,8 +52,8 @@ class NodeGroupHandler(SingleHandler):
|
|||
db().flush()
|
||||
try:
|
||||
task = UpdateDnsmasqTaskManager().execute()
|
||||
except errors.TaskAlreadyRunning as exc:
|
||||
raise self.http(409, six.text_type(exc))
|
||||
except errors.TaskAlreadyRunning:
|
||||
raise self.http(409, errors.UpdateDnsmasqTaskIsRunning.message)
|
||||
if task.status == consts.TASK_STATUSES.error:
|
||||
raise self.http(400, task.message)
|
||||
raise web.webapi.HTTPError(
|
||||
|
|
|
@ -87,6 +87,9 @@ default_messages = {
|
|||
"NetworkTemplateMissingNetworkGroup": "Network group is missing",
|
||||
"DuplicatedVIPNames": ("Cannot assign VIPs for the cluster due to "
|
||||
"overlapping of names of the VIPs"),
|
||||
"UpdateDnsmasqTaskIsRunning": ("update_dnsmasq task is not finished "
|
||||
"after the previous configuration change. "
|
||||
"Please try again after a few seconds."),
|
||||
|
||||
# RPC errors
|
||||
"CannotFindTask": "Cannot find task",
|
||||
|
|
|
@ -435,7 +435,7 @@ class EnvironmentManager(object):
|
|||
|
||||
return ng
|
||||
|
||||
def delete_node_group(self, ng_id, api=True):
|
||||
def delete_node_group(self, ng_id, status_code=200, api=True):
|
||||
if api:
|
||||
return self.app.delete(
|
||||
reverse(
|
||||
|
@ -443,7 +443,7 @@ class EnvironmentManager(object):
|
|||
kwargs={'obj_id': ng_id}
|
||||
),
|
||||
headers=self.default_headers,
|
||||
expect_errors=False
|
||||
expect_errors=(status_code != 200)
|
||||
)
|
||||
else:
|
||||
ng = db().query(NodeGroup).get(ng_id)
|
||||
|
|
|
@ -1169,3 +1169,20 @@ class TestUpdateDnsmasqTaskManagers(BaseIntegrationTest):
|
|||
update_task = self.db.query(models.Task).filter_by(
|
||||
name=consts.TASK_NAMES.update_dnsmasq).first()
|
||||
self.assertEqual(update_task.status, consts.TASK_STATUSES.running)
|
||||
|
||||
@mock.patch('nailgun.task.task.rpc.cast')
|
||||
def test_node_group_deletion_failed_while_previous_in_progress(self,
|
||||
mocked_rpc):
|
||||
ng1 = self.env.create_node_group(name='ng_1').json_body
|
||||
ng2 = self.env.create_node_group(name='ng_2').json_body
|
||||
self.assertEqual(mocked_rpc.call_count, 0)
|
||||
|
||||
self.env.delete_node_group(ng1['id'])
|
||||
self.assertEqual(mocked_rpc.call_count, 1)
|
||||
# delete other node group
|
||||
# request should be rejected as previous update_dnsmasq task is still
|
||||
# in progress
|
||||
resp = self.env.delete_node_group(ng2['id'], status_code=409)
|
||||
self.assertEqual(resp.status_code, 409)
|
||||
# no more calls were made
|
||||
self.assertEqual(mocked_rpc.call_count, 1)
|
||||
|
|
|
@ -647,6 +647,7 @@
|
|||
"node_network_group_duplicate_error": "This node network group name is already taken",
|
||||
"node_network_group_default_name": "This name is assigned to default node network group",
|
||||
"node_network_group_creation_error": "Node Network Group Creation Error",
|
||||
"node_network_group_deletion_error": "Node Network Group Deletion Error",
|
||||
"default_node_network_group_info": "This node network group uses shared admin network and cannot be deleted",
|
||||
"save_changes_warning": "It is necessary to save changes before creating a new node network group",
|
||||
"verification_multirack_warning": "Network verification is disabled for environments containing more than one node network group",
|
||||
|
|
|
@ -804,16 +804,17 @@ function($, _, i18n, Backbone, React, models, dispatcher, utils, dialogs, compon
|
|||
return fieldsWithVerificationErrors;
|
||||
},
|
||||
removeNodeNetworkGroup: function() {
|
||||
var nodeNetworkGroup = this.nodeNetworkGroups.find({name: this.props.activeNetworkSectionName});
|
||||
dialogs.RemoveNodeNetworkGroupDialog
|
||||
.show({
|
||||
showUnsavedChangesWarning: this.hasChanges()
|
||||
})
|
||||
.then(() => {
|
||||
var currentNodeNetworkGroup = this.nodeNetworkGroups.findWhere({name: this.props.activeNetworkSectionName});
|
||||
this.props.nodeNetworkGroups.remove(currentNodeNetworkGroup);
|
||||
return currentNodeNetworkGroup.destroy();
|
||||
})
|
||||
.then(() => this.props.cluster.get('networkConfiguration').fetch())
|
||||
.show({showUnsavedChangesWarning: this.hasChanges()})
|
||||
.then(() => nodeNetworkGroup.destroy({wait: true}))
|
||||
.then(
|
||||
() => this.props.cluster.get('networkConfiguration').fetch(),
|
||||
(response) => utils.showErrorDialog({
|
||||
title: i18n(networkTabNS + 'node_network_group_deletion_error'),
|
||||
response: response
|
||||
})
|
||||
)
|
||||
.then(this.updateInitialConfiguration);
|
||||
},
|
||||
addNodeNetworkGroup: function(hasChanges) {
|
||||
|
|
Loading…
Reference in New Issue