From 81134bdfec79c8019c26e7846d31a2b2952965a0 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitriev Date: Mon, 1 Mar 2021 15:24:06 -0500 Subject: [PATCH] Fix failover of az-specific loadbalancers There is a bug exists in CalculateAmphoraDelta class If there is no such a key as constants.MANAGEMENT_NETWORK in availability_zone dictionary, method get will return None It means that management_nets list will become [None], not CONF.controller_worker.amp_boot_network_list as it supposes to be It breaks the following failover flow Story: 2008669 Task: 41957 Change-Id: I435c40a5493828bce24c2850182f0ddc8e5bdd1f --- octavia/controller/worker/v1/tasks/network_tasks.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/octavia/controller/worker/v1/tasks/network_tasks.py b/octavia/controller/worker/v1/tasks/network_tasks.py index 24d8ecfe6a..53abc698b2 100644 --- a/octavia/controller/worker/v1/tasks/network_tasks.py +++ b/octavia/controller/worker/v1/tasks/network_tasks.py @@ -59,10 +59,10 @@ class CalculateAmphoraDelta(BaseNetworkTask): if vrrp_port is None: vrrp_port = self.network_driver.get_port(amphora.vrrp_port_id) - if availability_zone: - management_nets = ( - [availability_zone.get(constants.MANAGEMENT_NETWORK)] or - CONF.controller_worker.amp_boot_network_list) + if (availability_zone and + availability_zone.get(constants.MANAGEMENT_NETWORK)): + management_nets = [availability_zone.get( + constants.MANAGEMENT_NETWORK)] else: management_nets = CONF.controller_worker.amp_boot_network_list desired_network_ids = {vrrp_port.network_id}.union(management_nets)