Merge "NSXv: eliminate task use from NAT update"

This commit is contained in:
Jenkins 2016-08-03 19:38:46 +00:00 committed by Gerrit Code Review
commit ebc341b7a9
3 changed files with 17 additions and 57 deletions

View File

@ -582,37 +582,7 @@ class EdgeApplianceDriver(object):
e.response)
raise e
def _update_nat_rule(self, task):
# TODO(fank): use POST for optimization
# return rule_id for future reference
edge_id = task.userdata['edge_id']
if task != self.updated_task['nat'][edge_id]:
# this task does not have the latest config, abort now
# for speedup
return task_constants.TaskStatus.ABORT
rules = task.userdata['rules']
LOG.debug("VCNS: start updating nat rules: %s", rules)
nat = {
'featureType': 'nat',
'rules': {
'natRulesDtos': rules
}
}
try:
self.vcns.update_nat_config(edge_id, nat)
status = task_constants.TaskStatus.COMPLETED
except exceptions.VcnsApiException as e:
LOG.exception(_LE("VCNS: Failed to create snat rule:\n%s"),
e.response)
status = task_constants.TaskStatus.ERROR
return status
def update_nat_rules(self, router_id, edge_id, snats, dnats,
jobdata=None):
def update_nat_rules(self, edge_id, snats, dnats):
LOG.debug("VCNS: update nat rule\n"
"SNAT:%(snat)s\n"
"DNAT:%(dnat)s\n", {
@ -638,18 +608,20 @@ class EdgeApplianceDriver(object):
'snat', snat['src'], snat['translated'], vnic_index=vnic_index
))
userdata = {
'edge_id': edge_id,
'rules': nat_rules,
'jobdata': jobdata,
nat = {
'featureType': 'nat',
'rules': {
'natRulesDtos': nat_rules
}
}
task_name = "update-nat-%s" % edge_id
task = tasks.Task(task_name, router_id, self._update_nat_rule,
userdata=userdata)
task.add_result_monitor(self.callbacks.nat_update_result)
self.updated_task['nat'][edge_id] = task
self.task_manager.add(task)
return task
try:
self.vcns.update_nat_config(edge_id, nat)
return True
except exceptions.VcnsApiException as e:
LOG.exception(_LE("VCNS: Failed to create snat rule:\n%s"),
e.response)
return False
def update_routes(self, edge_id, gateway, routes):
if gateway:

View File

@ -2192,9 +2192,7 @@ def _delete_interface(nsxv_manager, context, router_id, network_id,
def update_nat_rules(nsxv_manager, context, router_id, snat, dnat):
binding = nsxv_db.get_nsxv_router_binding(context.session, router_id)
if binding:
task = nsxv_manager.update_nat_rules(
router_id, binding['edge_id'], snat, dnat)
task.wait(task_const.TaskState.RESULT)
nsxv_manager.update_nat_rules(binding['edge_id'], snat, dnat)
else:
LOG.warning(_LW("Bindings do not exists for %s"), router_id)
@ -2309,6 +2307,3 @@ class NsxVCallbacks(object):
def interface_update_result(self, task):
LOG.debug("interface_update_result %d", task.status)
def nat_update_result(self, task):
LOG.debug("nat_update_result %d", task.status)

View File

@ -360,10 +360,6 @@ class VcnsDriverTestCase(base.BaseTestCase):
if task.status == ts_const.TaskStatus.COMPLETED:
task.userdata['jobdata']['edge_delete_result'] = True
def nat_update_result(self, task):
if task.status == ts_const.TaskStatus.COMPLETED:
task.userdata['jobdata']['nat_update_result'] = True
def interface_update_result(self, task):
if task.status == ts_const.TaskStatus.COMPLETED:
task.userdata['jobdata']['interface_update_result'] = True
@ -404,7 +400,6 @@ class VcnsDriverTestCase(base.BaseTestCase):
def test_update_nat_rules(self):
self._deploy_edge()
jobdata = {}
snats = [{
'src': '192.168.1.0/24',
'translated': '10.0.0.1'
@ -424,10 +419,8 @@ class VcnsDriverTestCase(base.BaseTestCase):
'translated': '192.168.2.1'
}
]
task = self.vcns_driver.update_nat_rules(
'router-id', self.edge_id, snats, dnats, jobdata=jobdata)
task.wait(ts_const.TaskState.RESULT)
self.assertTrue(jobdata.get('nat_update_result'))
result = self.vcns_driver.update_nat_rules(self.edge_id, snats, dnats)
self.assertTrue(result)
natcfg = self.vcns_driver.get_nat_config(self.edge_id)
rules = natcfg['rules']['natRulesDtos']