diff --git a/libra/api/controllers/load_balancers.py b/libra/api/controllers/load_balancers.py index 8d2fe68a..2e5f00df 100644 --- a/libra/api/controllers/load_balancers.py +++ b/libra/api/controllers/load_balancers.py @@ -333,9 +333,10 @@ class LoadBalancersController(RestController): session.rollback() raise ExhaustedError('No virtual IPs available') vip.device = device.id - submit_vip_job( - 'ASSIGN', device.name, str(ipaddress.IPv4Address(vip.ip)) - ) + + # For use after transaction + device_name = device.name + vip_ip = vip.ip else: virtual_id = body.virtualIps[0].id # This is an additional load balancer @@ -453,6 +454,11 @@ class LoadBalancersController(RestController): submit_job( 'UPDATE', device.name, device.id, lb.id ) + if body.virtualIps == Unset: + submit_vip_job( + 'ASSIGN', device_name, str(ipaddress.IPv4Address(vip_ip)) + ) + return return_data @wsme_pecan.wsexpose(None, body=LBPut, status_code=202) diff --git a/libra/common/api/gearman_client.py b/libra/common/api/gearman_client.py index cee95180..cf06f71a 100644 --- a/libra/common/api/gearman_client.py +++ b/libra/common/api/gearman_client.py @@ -109,6 +109,11 @@ class GearmanClientThread(object): self.logger.error( "Failed to assign IP {0} to device {1}".format(self.lbid, data) ) + with db_session() as session: + device = session.query(Device).\ + filter(Device.name == data).first() + errmsg = 'Floating IP assign failed' + self._set_error(device.id, errmsg, session) def send_remove(self, data): job_data = { diff --git a/libra/mgm/controllers/vip.py b/libra/mgm/controllers/vip.py index ab4babd9..22e2d8d8 100644 --- a/libra/mgm/controllers/vip.py +++ b/libra/mgm/controllers/vip.py @@ -78,6 +78,10 @@ class AssignIpController(object): ) try: node_id = nova.get_node(self.msg['name']) + self.logger.info( + 'Node name {0} identified as ID {1}' + .format(self.msg['name'], node_id) + ) nova.vip_assign(node_id, self.msg['ip']) if cfg.CONF['mgm']['tcp_check_port']: self.check_ip(self.msg['ip'],