diff --git a/vmware_nsx/plugins/nsx_v/vshield/edge_appliance_driver.py b/vmware_nsx/plugins/nsx_v/vshield/edge_appliance_driver.py index 2c921aa9c7..f4b75ffaa4 100644 --- a/vmware_nsx/plugins/nsx_v/vshield/edge_appliance_driver.py +++ b/vmware_nsx/plugins/nsx_v/vshield/edge_appliance_driver.py @@ -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: diff --git a/vmware_nsx/plugins/nsx_v/vshield/edge_utils.py b/vmware_nsx/plugins/nsx_v/vshield/edge_utils.py index 48dccc6b64..b9ee28b43e 100644 --- a/vmware_nsx/plugins/nsx_v/vshield/edge_utils.py +++ b/vmware_nsx/plugins/nsx_v/vshield/edge_utils.py @@ -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) diff --git a/vmware_nsx/tests/unit/nsx_v/vshield/test_vcns_driver.py b/vmware_nsx/tests/unit/nsx_v/vshield/test_vcns_driver.py index 7a2b707227..d8d0a6841b 100644 --- a/vmware_nsx/tests/unit/nsx_v/vshield/test_vcns_driver.py +++ b/vmware_nsx/tests/unit/nsx_v/vshield/test_vcns_driver.py @@ -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']