Make sure Octavia status reports has the member id
In case the member ID is missing from the report, the driver agent will fail. This patch: 1. remove the member from the report with a warning if id was not found 2. look for the id in the octavia DB while normalizing the member-ip Change-Id: I52fa087ea3d37c2e37250107ebdbeb97d6693f82
This commit is contained in:
parent
b34d844b04
commit
fda1ad4a28
|
@ -14,6 +14,7 @@
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import copy
|
import copy
|
||||||
|
import ipaddress
|
||||||
import socket
|
import socket
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
@ -563,16 +564,31 @@ class NSXOctaviaDriverEndpoint(driver_lib.DriverLibrary):
|
||||||
def update_loadbalancer_status(self, ctxt, status):
|
def update_loadbalancer_status(self, ctxt, status):
|
||||||
# refresh the driver lib session
|
# refresh the driver lib session
|
||||||
self.db_session = db_apis.get_session()
|
self.db_session = db_apis.get_session()
|
||||||
for member in status.get('members', []):
|
if status.get('members', []):
|
||||||
if member.get('id'):
|
# Make sure all the members have ids
|
||||||
pass
|
fixed_members = []
|
||||||
elif member.get('member_ip') and member.get('pool_id'):
|
for member in status['members']:
|
||||||
db_member = self.repositories.member.get(
|
if member.get('id'):
|
||||||
self.db_session,
|
fixed_members.append(member)
|
||||||
pool_id=member['pool_id'],
|
elif member.get('member_ip') and member.get('pool_id'):
|
||||||
ip_address=member['member_ip'])
|
# Find the member id by the normalized member-ip in the
|
||||||
if db_member:
|
# octavia DB
|
||||||
member['id'] = db_member.id
|
norm_ip = str(ipaddress.ip_address(member['member_ip']))
|
||||||
|
db_members, _ = self.repositories.member.get_all(
|
||||||
|
self.db_session,
|
||||||
|
pool_id=member['pool_id'])
|
||||||
|
for db_member in db_members:
|
||||||
|
norm_db = str(ipaddress.ip_address(
|
||||||
|
db_member.ip_address))
|
||||||
|
if norm_db == norm_ip:
|
||||||
|
member['id'] = db_member.id
|
||||||
|
fixed_members.append(member)
|
||||||
|
break
|
||||||
|
if not member.get('id'):
|
||||||
|
LOG.warning("update_loadbalancer_status: could not "
|
||||||
|
"find the ID of member %s of pool %s",
|
||||||
|
member['member_ip'], member['pool_id'])
|
||||||
|
status['members'] = fixed_members
|
||||||
try:
|
try:
|
||||||
return super(NSXOctaviaDriverEndpoint,
|
return super(NSXOctaviaDriverEndpoint,
|
||||||
self).update_loadbalancer_status(status)
|
self).update_loadbalancer_status(status)
|
||||||
|
|
Loading…
Reference in New Issue