Merge "NSXv: eliminate task use from NAT update"
This commit is contained in:
commit
ebc341b7a9
@ -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:
|
||||
|
@ -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)
|
||||
|
@ -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']
|
||||
|
Loading…
x
Reference in New Issue
Block a user