Fix load balancer update with provider filtered params
When only setting tags to an existing load balancer, the amphora driver would try to apply QoS policy on VRRP ports even if no policy is defined. This raised an NetworkException that led load balancers to go into ERROR. Task: 37589 Story: 2006922 Change-Id: I48315f8f293811e1d99584ea36da05c4211cf275
This commit is contained in:
parent
e0ae8a3cac
commit
2cfcd71a86
@ -594,7 +594,7 @@ class ApplyQos(BaseNetworkTask):
|
||||
"""Apply qos policy on the vrrp ports which are related with vip."""
|
||||
qos_policy_id = loadbalancer.vip.qos_policy_id
|
||||
if not qos_policy_id and (
|
||||
update_dict and (
|
||||
not update_dict or (
|
||||
'vip' not in update_dict or
|
||||
'qos_policy_id' not in update_dict['vip'])):
|
||||
return
|
||||
|
@ -683,7 +683,7 @@ class ApplyQos(BaseNetworkTask):
|
||||
"""Apply qos policy on the vrrp ports which are related with vip."""
|
||||
qos_policy_id = loadbalancer['vip_qos_policy_id']
|
||||
if not qos_policy_id and (
|
||||
update_dict and (
|
||||
not update_dict or (
|
||||
'vip' not in update_dict or
|
||||
'qos_policy_id' not in update_dict[constants.VIP])):
|
||||
return
|
||||
|
@ -571,6 +571,22 @@ class TestNetworkTasks(base.TestCase):
|
||||
t_constants.MOCK_QOS_POLICY_ID1, mock.ANY)
|
||||
self.assertEqual(2, mock_driver.apply_qos_on_port.call_count)
|
||||
|
||||
mock_driver.reset_mock()
|
||||
update_dict = {'description': 'fool',
|
||||
'vip': {
|
||||
'qos_policy_id': t_constants.MOCK_QOS_POLICY_ID1}}
|
||||
tmp_lb.amphorae = AMPS_DATA
|
||||
tmp_lb.topology = constants.TOPOLOGY_ACTIVE_STANDBY
|
||||
net.execute(tmp_lb, update_dict=update_dict)
|
||||
mock_driver.apply_qos_on_port.assert_called_with(
|
||||
t_constants.MOCK_QOS_POLICY_ID1, mock.ANY)
|
||||
self.assertEqual(2, mock_driver.apply_qos_on_port.call_count)
|
||||
|
||||
mock_driver.reset_mock()
|
||||
update_dict = {}
|
||||
net.execute(null_qos_lb, update_dict=update_dict)
|
||||
self.assertEqual(0, mock_driver.apply_qos_on_port.call_count)
|
||||
|
||||
# revert
|
||||
mock_driver.reset_mock()
|
||||
tmp_lb.amphorae = [AMPS_DATA[0]]
|
||||
|
@ -636,6 +636,22 @@ class TestNetworkTasks(base.TestCase):
|
||||
t_constants.MOCK_QOS_POLICY_ID1, mock.ANY)
|
||||
self.assertEqual(2, mock_driver.apply_qos_on_port.call_count)
|
||||
|
||||
mock_driver.reset_mock()
|
||||
update_dict = {'description': 'fool',
|
||||
'vip': {
|
||||
'qos_policy_id': t_constants.MOCK_QOS_POLICY_ID1}}
|
||||
tmp_lb.amphorae = AMPS_DATA
|
||||
tmp_lb.topology = constants.TOPOLOGY_ACTIVE_STANDBY
|
||||
net.execute(pr_tm_dict, update_dict=update_dict)
|
||||
mock_driver.apply_qos_on_port.assert_called_with(
|
||||
t_constants.MOCK_QOS_POLICY_ID1, mock.ANY)
|
||||
self.assertEqual(2, mock_driver.apply_qos_on_port.call_count)
|
||||
|
||||
mock_driver.reset_mock()
|
||||
update_dict = {}
|
||||
net.execute(null_qos_lb_dict, update_dict=update_dict)
|
||||
self.assertEqual(0, mock_driver.apply_qos_on_port.call_count)
|
||||
|
||||
# revert
|
||||
mock_driver.reset_mock()
|
||||
mock_get_lb.reset_mock()
|
||||
|
@ -0,0 +1,5 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
Fixed an issue where load balancers would go into ERROR when
|
||||
setting data not visible to providers (e.g. tags).
|
Loading…
x
Reference in New Issue
Block a user