Merge "NSXv: eliminate task use from NAT update"
This commit is contained in:
commit
ebc341b7a9
@ -582,37 +582,7 @@ class EdgeApplianceDriver(object):
|
|||||||
e.response)
|
e.response)
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
def _update_nat_rule(self, task):
|
def update_nat_rules(self, edge_id, snats, dnats):
|
||||||
# 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):
|
|
||||||
LOG.debug("VCNS: update nat rule\n"
|
LOG.debug("VCNS: update nat rule\n"
|
||||||
"SNAT:%(snat)s\n"
|
"SNAT:%(snat)s\n"
|
||||||
"DNAT:%(dnat)s\n", {
|
"DNAT:%(dnat)s\n", {
|
||||||
@ -638,18 +608,20 @@ class EdgeApplianceDriver(object):
|
|||||||
'snat', snat['src'], snat['translated'], vnic_index=vnic_index
|
'snat', snat['src'], snat['translated'], vnic_index=vnic_index
|
||||||
))
|
))
|
||||||
|
|
||||||
userdata = {
|
nat = {
|
||||||
'edge_id': edge_id,
|
'featureType': 'nat',
|
||||||
'rules': nat_rules,
|
'rules': {
|
||||||
'jobdata': jobdata,
|
'natRulesDtos': nat_rules
|
||||||
|
}
|
||||||
}
|
}
|
||||||
task_name = "update-nat-%s" % edge_id
|
|
||||||
task = tasks.Task(task_name, router_id, self._update_nat_rule,
|
try:
|
||||||
userdata=userdata)
|
self.vcns.update_nat_config(edge_id, nat)
|
||||||
task.add_result_monitor(self.callbacks.nat_update_result)
|
return True
|
||||||
self.updated_task['nat'][edge_id] = task
|
except exceptions.VcnsApiException as e:
|
||||||
self.task_manager.add(task)
|
LOG.exception(_LE("VCNS: Failed to create snat rule:\n%s"),
|
||||||
return task
|
e.response)
|
||||||
|
return False
|
||||||
|
|
||||||
def update_routes(self, edge_id, gateway, routes):
|
def update_routes(self, edge_id, gateway, routes):
|
||||||
if gateway:
|
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):
|
def update_nat_rules(nsxv_manager, context, router_id, snat, dnat):
|
||||||
binding = nsxv_db.get_nsxv_router_binding(context.session, router_id)
|
binding = nsxv_db.get_nsxv_router_binding(context.session, router_id)
|
||||||
if binding:
|
if binding:
|
||||||
task = nsxv_manager.update_nat_rules(
|
nsxv_manager.update_nat_rules(binding['edge_id'], snat, dnat)
|
||||||
router_id, binding['edge_id'], snat, dnat)
|
|
||||||
task.wait(task_const.TaskState.RESULT)
|
|
||||||
else:
|
else:
|
||||||
LOG.warning(_LW("Bindings do not exists for %s"), router_id)
|
LOG.warning(_LW("Bindings do not exists for %s"), router_id)
|
||||||
|
|
||||||
@ -2309,6 +2307,3 @@ class NsxVCallbacks(object):
|
|||||||
|
|
||||||
def interface_update_result(self, task):
|
def interface_update_result(self, task):
|
||||||
LOG.debug("interface_update_result %d", task.status)
|
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:
|
if task.status == ts_const.TaskStatus.COMPLETED:
|
||||||
task.userdata['jobdata']['edge_delete_result'] = True
|
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):
|
def interface_update_result(self, task):
|
||||||
if task.status == ts_const.TaskStatus.COMPLETED:
|
if task.status == ts_const.TaskStatus.COMPLETED:
|
||||||
task.userdata['jobdata']['interface_update_result'] = True
|
task.userdata['jobdata']['interface_update_result'] = True
|
||||||
@ -404,7 +400,6 @@ class VcnsDriverTestCase(base.BaseTestCase):
|
|||||||
|
|
||||||
def test_update_nat_rules(self):
|
def test_update_nat_rules(self):
|
||||||
self._deploy_edge()
|
self._deploy_edge()
|
||||||
jobdata = {}
|
|
||||||
snats = [{
|
snats = [{
|
||||||
'src': '192.168.1.0/24',
|
'src': '192.168.1.0/24',
|
||||||
'translated': '10.0.0.1'
|
'translated': '10.0.0.1'
|
||||||
@ -424,10 +419,8 @@ class VcnsDriverTestCase(base.BaseTestCase):
|
|||||||
'translated': '192.168.2.1'
|
'translated': '192.168.2.1'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
task = self.vcns_driver.update_nat_rules(
|
result = self.vcns_driver.update_nat_rules(self.edge_id, snats, dnats)
|
||||||
'router-id', self.edge_id, snats, dnats, jobdata=jobdata)
|
self.assertTrue(result)
|
||||||
task.wait(ts_const.TaskState.RESULT)
|
|
||||||
self.assertTrue(jobdata.get('nat_update_result'))
|
|
||||||
|
|
||||||
natcfg = self.vcns_driver.get_nat_config(self.edge_id)
|
natcfg = self.vcns_driver.get_nat_config(self.edge_id)
|
||||||
rules = natcfg['rules']['natRulesDtos']
|
rules = natcfg['rules']['natRulesDtos']
|
||||||
|
Loading…
x
Reference in New Issue
Block a user