octavia 13.0.0.0rc1__py3-none-any.whl → 14.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. octavia/amphorae/backends/agent/api_server/lvs_listener_base.py +1 -1
  2. octavia/amphorae/backends/agent/api_server/osutils.py +5 -5
  3. octavia/amphorae/backends/agent/api_server/plug.py +3 -2
  4. octavia/amphorae/backends/agent/api_server/rules_schema.py +52 -0
  5. octavia/amphorae/backends/agent/api_server/server.py +28 -1
  6. octavia/amphorae/backends/utils/interface.py +45 -6
  7. octavia/amphorae/backends/utils/interface_file.py +9 -6
  8. octavia/amphorae/backends/utils/nftable_utils.py +125 -0
  9. octavia/amphorae/drivers/driver_base.py +27 -0
  10. octavia/amphorae/drivers/haproxy/rest_api_driver.py +42 -10
  11. octavia/amphorae/drivers/health/heartbeat_udp.py +2 -2
  12. octavia/amphorae/drivers/keepalived/vrrp_rest_driver.py +2 -1
  13. octavia/amphorae/drivers/noop_driver/driver.py +25 -0
  14. octavia/api/app.py +3 -0
  15. octavia/api/common/pagination.py +2 -2
  16. octavia/api/drivers/amphora_driver/flavor_schema.py +6 -1
  17. octavia/api/root_controller.py +4 -1
  18. octavia/api/v2/controllers/health_monitor.py +0 -1
  19. octavia/api/v2/controllers/l7policy.py +0 -1
  20. octavia/api/v2/controllers/l7rule.py +0 -1
  21. octavia/api/v2/controllers/listener.py +0 -1
  22. octavia/api/v2/controllers/load_balancer.py +13 -7
  23. octavia/api/v2/controllers/member.py +6 -3
  24. octavia/api/v2/controllers/pool.py +6 -7
  25. octavia/api/v2/types/load_balancer.py +5 -1
  26. octavia/api/v2/types/pool.py +1 -1
  27. octavia/certificates/common/pkcs12.py +9 -9
  28. octavia/certificates/manager/barbican.py +24 -16
  29. octavia/certificates/manager/castellan_mgr.py +12 -7
  30. octavia/certificates/manager/local.py +4 -4
  31. octavia/certificates/manager/noop.py +106 -0
  32. octavia/cmd/driver_agent.py +1 -1
  33. octavia/cmd/health_checker.py +0 -4
  34. octavia/cmd/health_manager.py +1 -5
  35. octavia/cmd/house_keeping.py +1 -1
  36. octavia/cmd/interface.py +0 -4
  37. octavia/cmd/octavia_worker.py +0 -4
  38. octavia/cmd/prometheus_proxy.py +0 -5
  39. octavia/cmd/status.py +0 -6
  40. octavia/common/base_taskflow.py +1 -1
  41. octavia/common/clients.py +15 -3
  42. octavia/common/config.py +24 -6
  43. octavia/common/constants.py +34 -0
  44. octavia/common/data_models.py +3 -1
  45. octavia/common/exceptions.py +11 -0
  46. octavia/common/jinja/haproxy/combined_listeners/templates/macros.j2 +7 -5
  47. octavia/common/keystone.py +7 -7
  48. octavia/common/tls_utils/cert_parser.py +24 -10
  49. octavia/common/utils.py +6 -0
  50. octavia/common/validate.py +2 -2
  51. octavia/compute/drivers/nova_driver.py +23 -5
  52. octavia/controller/worker/task_utils.py +28 -6
  53. octavia/controller/worker/v2/controller_worker.py +49 -15
  54. octavia/controller/worker/v2/flows/amphora_flows.py +120 -21
  55. octavia/controller/worker/v2/flows/flow_utils.py +15 -13
  56. octavia/controller/worker/v2/flows/listener_flows.py +95 -5
  57. octavia/controller/worker/v2/flows/load_balancer_flows.py +74 -30
  58. octavia/controller/worker/v2/taskflow_jobboard_driver.py +17 -1
  59. octavia/controller/worker/v2/tasks/amphora_driver_tasks.py +145 -24
  60. octavia/controller/worker/v2/tasks/compute_tasks.py +1 -1
  61. octavia/controller/worker/v2/tasks/database_tasks.py +72 -41
  62. octavia/controller/worker/v2/tasks/lifecycle_tasks.py +97 -41
  63. octavia/controller/worker/v2/tasks/network_tasks.py +57 -60
  64. octavia/controller/worker/v2/tasks/shim_tasks.py +28 -0
  65. octavia/db/migration/alembic_migrations/versions/55874a4ceed6_add_l7policy_action_redirect_prefix.py +1 -1
  66. octavia/db/migration/alembic_migrations/versions/5a3ee5472c31_add_cert_expiration__infor_in_amphora_table.py +1 -1
  67. octavia/db/migration/alembic_migrations/versions/6742ca1b27c2_add_l7policy_redirect_http_code.py +1 -1
  68. octavia/db/migration/alembic_migrations/versions/db2a73e82626_add_vnic_type_for_vip.py +36 -0
  69. octavia/db/models.py +1 -0
  70. octavia/db/prepare.py +1 -1
  71. octavia/db/repositories.py +53 -34
  72. octavia/distributor/drivers/driver_base.py +1 -1
  73. octavia/network/base.py +3 -16
  74. octavia/network/data_models.py +4 -1
  75. octavia/network/drivers/neutron/allowed_address_pairs.py +27 -26
  76. octavia/network/drivers/noop_driver/driver.py +10 -23
  77. octavia/tests/common/sample_certs.py +115 -0
  78. octavia/tests/common/sample_haproxy_prometheus +1 -1
  79. octavia/tests/functional/amphorae/backend/agent/api_server/test_server.py +37 -0
  80. octavia/tests/functional/api/test_healthcheck.py +2 -2
  81. octavia/tests/functional/api/v2/base.py +1 -1
  82. octavia/tests/functional/api/v2/test_listener.py +45 -0
  83. octavia/tests/functional/api/v2/test_load_balancer.py +17 -0
  84. octavia/tests/functional/db/base.py +9 -0
  85. octavia/tests/functional/db/test_models.py +2 -1
  86. octavia/tests/functional/db/test_repositories.py +55 -99
  87. octavia/tests/unit/amphorae/backends/agent/api_server/test_osutils.py +4 -2
  88. octavia/tests/unit/amphorae/backends/utils/test_interface.py +201 -1
  89. octavia/tests/unit/amphorae/backends/utils/test_keepalivedlvs_query.py +1 -1
  90. octavia/tests/unit/amphorae/backends/utils/test_nftable_utils.py +194 -0
  91. octavia/tests/unit/amphorae/drivers/haproxy/test_rest_api_driver.py +27 -5
  92. octavia/tests/unit/amphorae/drivers/haproxy/test_rest_api_driver_1_0.py +15 -2
  93. octavia/tests/unit/amphorae/drivers/keepalived/test_vrrp_rest_driver.py +17 -0
  94. octavia/tests/unit/amphorae/drivers/noop_driver/test_driver.py +2 -1
  95. octavia/tests/unit/api/v2/types/test_pool.py +71 -0
  96. octavia/tests/unit/certificates/manager/test_barbican.py +3 -3
  97. octavia/tests/unit/certificates/manager/test_noop.py +53 -0
  98. octavia/tests/unit/common/jinja/haproxy/combined_listeners/test_jinja_cfg.py +16 -17
  99. octavia/tests/unit/common/sample_configs/sample_configs_combined.py +5 -3
  100. octavia/tests/unit/common/test_config.py +35 -0
  101. octavia/tests/unit/common/test_keystone.py +32 -0
  102. octavia/tests/unit/common/test_utils.py +39 -0
  103. octavia/tests/unit/compute/drivers/test_nova_driver.py +22 -0
  104. octavia/tests/unit/controller/worker/test_task_utils.py +58 -2
  105. octavia/tests/unit/controller/worker/v2/flows/test_amphora_flows.py +28 -5
  106. octavia/tests/unit/controller/worker/v2/flows/test_listener_flows.py +64 -16
  107. octavia/tests/unit/controller/worker/v2/flows/test_load_balancer_flows.py +49 -9
  108. octavia/tests/unit/controller/worker/v2/tasks/test_amphora_driver_tasks.py +265 -17
  109. octavia/tests/unit/controller/worker/v2/tasks/test_database_tasks.py +101 -1
  110. octavia/tests/unit/controller/worker/v2/tasks/test_database_tasks_quota.py +19 -19
  111. octavia/tests/unit/controller/worker/v2/tasks/test_network_tasks.py +105 -42
  112. octavia/tests/unit/controller/worker/v2/tasks/test_shim_tasks.py +33 -0
  113. octavia/tests/unit/controller/worker/v2/test_controller_worker.py +85 -42
  114. octavia/tests/unit/network/drivers/neutron/test_allowed_address_pairs.py +48 -51
  115. octavia/tests/unit/network/drivers/neutron/test_utils.py +2 -0
  116. octavia/tests/unit/network/drivers/noop_driver/test_driver.py +0 -7
  117. {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/diskimage-create/README.rst +6 -1
  118. {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/diskimage-create/diskimage-create.sh +10 -4
  119. {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/diskimage-create/requirements.txt +0 -2
  120. {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/diskimage-create/tox.ini +30 -13
  121. {octavia-13.0.0.0rc1.dist-info → octavia-14.0.0.dist-info}/AUTHORS +5 -0
  122. {octavia-13.0.0.0rc1.dist-info → octavia-14.0.0.dist-info}/METADATA +6 -6
  123. {octavia-13.0.0.0rc1.dist-info → octavia-14.0.0.dist-info}/RECORD +134 -126
  124. {octavia-13.0.0.0rc1.dist-info → octavia-14.0.0.dist-info}/entry_points.txt +1 -1
  125. octavia-14.0.0.dist-info/pbr.json +1 -0
  126. octavia-13.0.0.0rc1.dist-info/pbr.json +0 -1
  127. {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/LICENSE +0 -0
  128. {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/README.rst +0 -0
  129. {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/diskimage-create/image-tests.sh +0 -0
  130. {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/diskimage-create/test-requirements.txt +0 -0
  131. {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/diskimage-create/version.txt +0 -0
  132. {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/scripts/octavia-wsgi +0 -0
  133. {octavia-13.0.0.0rc1.dist-info → octavia-14.0.0.dist-info}/LICENSE +0 -0
  134. {octavia-13.0.0.0rc1.dist-info → octavia-14.0.0.dist-info}/WHEEL +0 -0
  135. {octavia-13.0.0.0rc1.dist-info → octavia-14.0.0.dist-info}/top_level.txt +0 -0
@@ -70,7 +70,7 @@ _db_load_balancer_mock = mock.MagicMock()
70
70
  _load_balancer_mock = {
71
71
  constants.LOADBALANCER_ID: LB_ID,
72
72
  constants.TOPOLOGY: constants.TOPOLOGY_SINGLE,
73
- constants.FLAVOR_ID: None,
73
+ constants.FLAVOR_ID: 1,
74
74
  constants.AVAILABILITY_ZONE: None,
75
75
  constants.SERVER_GROUP_ID: None
76
76
  }
@@ -133,7 +133,7 @@ class TestControllerWorker(base.TestCase):
133
133
  _db_load_balancer_mock.amphorae = _db_amphora_mock
134
134
  _db_load_balancer_mock.vip = _vip_mock
135
135
  _db_load_balancer_mock.id = LB_ID
136
- _db_load_balancer_mock.flavor_id = None
136
+ _db_load_balancer_mock.flavor_id = 1
137
137
  _db_load_balancer_mock.availability_zone = None
138
138
  _db_load_balancer_mock.server_group_id = None
139
139
  _db_load_balancer_mock.project_id = PROJECT_ID
@@ -331,7 +331,10 @@ class TestControllerWorker(base.TestCase):
331
331
  cw.update_health_monitor(_health_mon_mock,
332
332
  HEALTH_UPDATE_DICT)
333
333
 
334
+ @mock.patch('octavia.db.repositories.FlavorRepository.'
335
+ 'get_flavor_metadata_dict', return_value={})
334
336
  def test_create_listener(self,
337
+ mock_get_flavor_dict,
335
338
  mock_api_get_session,
336
339
  mock_dyn_log_listener,
337
340
  mock_taskflow_load,
@@ -355,14 +358,19 @@ class TestControllerWorker(base.TestCase):
355
358
  provider_lb = provider_utils.db_loadbalancer_to_provider_loadbalancer(
356
359
  _db_load_balancer_mock).to_dict(recurse=True)
357
360
 
361
+ flavor_dict = {constants.LOADBALANCER_TOPOLOGY:
362
+ constants.TOPOLOGY_SINGLE}
358
363
  (cw.services_controller.run_poster.
359
364
  assert_called_once_with(
360
- flow_utils.get_create_listener_flow, store={
361
- constants.LOADBALANCER: provider_lb,
362
- constants.LOADBALANCER_ID: LB_ID,
363
- constants.LISTENERS: [listener_dict]}))
365
+ flow_utils.get_create_listener_flow, flavor_dict=flavor_dict,
366
+ store={constants.LOADBALANCER: provider_lb,
367
+ constants.LOADBALANCER_ID: LB_ID,
368
+ constants.LISTENERS: [listener_dict]}))
364
369
 
370
+ @mock.patch('octavia.db.repositories.FlavorRepository.'
371
+ 'get_flavor_metadata_dict', return_value={})
365
372
  def test_delete_listener(self,
373
+ mock_get_flavor_dict,
366
374
  mock_api_get_session,
367
375
  mock_dyn_log_listener,
368
376
  mock_taskflow_load,
@@ -375,6 +383,13 @@ class TestControllerWorker(base.TestCase):
375
383
  mock_health_mon_repo_get,
376
384
  mock_amp_repo_get):
377
385
 
386
+ load_balancer_mock = mock.MagicMock()
387
+ load_balancer_mock.provisioning_status = constants.PENDING_UPDATE
388
+ load_balancer_mock.id = LB_ID
389
+ load_balancer_mock.flavor_id = 1
390
+ load_balancer_mock.topology = constants.TOPOLOGY_SINGLE
391
+ mock_lb_repo_get.return_value = load_balancer_mock
392
+
378
393
  _flow_mock.reset_mock()
379
394
 
380
395
  listener_dict = {constants.LISTENER_ID: LISTENER_ID,
@@ -383,14 +398,19 @@ class TestControllerWorker(base.TestCase):
383
398
  cw = controller_worker.ControllerWorker()
384
399
  cw.delete_listener(listener_dict)
385
400
 
401
+ flavor_dict = {constants.LOADBALANCER_TOPOLOGY:
402
+ constants.TOPOLOGY_SINGLE}
386
403
  (cw.services_controller.run_poster.
387
404
  assert_called_once_with(
388
- flow_utils.get_delete_listener_flow,
405
+ flow_utils.get_delete_listener_flow, flavor_dict=flavor_dict,
389
406
  store={constants.LISTENER: self.ref_listener_dict,
390
407
  constants.LOADBALANCER_ID: LB_ID,
391
408
  constants.PROJECT_ID: PROJECT_ID}))
392
409
 
410
+ @mock.patch('octavia.db.repositories.FlavorRepository.'
411
+ 'get_flavor_metadata_dict', return_value={})
393
412
  def test_update_listener(self,
413
+ mock_get_flavor_dict,
394
414
  mock_api_get_session,
395
415
  mock_dyn_log_listener,
396
416
  mock_taskflow_load,
@@ -406,6 +426,8 @@ class TestControllerWorker(base.TestCase):
406
426
  load_balancer_mock = mock.MagicMock()
407
427
  load_balancer_mock.provisioning_status = constants.PENDING_UPDATE
408
428
  load_balancer_mock.id = LB_ID
429
+ load_balancer_mock.flavor_id = None
430
+ load_balancer_mock.topology = constants.TOPOLOGY_SINGLE
409
431
  mock_lb_repo_get.return_value = load_balancer_mock
410
432
 
411
433
  _flow_mock.reset_mock()
@@ -416,8 +438,11 @@ class TestControllerWorker(base.TestCase):
416
438
  cw = controller_worker.ControllerWorker()
417
439
  cw.update_listener(listener_dict, LISTENER_UPDATE_DICT)
418
440
 
441
+ flavor_dict = {constants.LOADBALANCER_TOPOLOGY:
442
+ constants.TOPOLOGY_SINGLE}
419
443
  (cw.services_controller.run_poster.
420
444
  assert_called_once_with(flow_utils.get_update_listener_flow,
445
+ flavor_dict=flavor_dict,
421
446
  store={constants.LISTENER: listener_dict,
422
447
  constants.UPDATE_DICT:
423
448
  LISTENER_UPDATE_DICT,
@@ -425,10 +450,13 @@ class TestControllerWorker(base.TestCase):
425
450
  constants.LISTENERS:
426
451
  [listener_dict]}))
427
452
 
453
+ @mock.patch('octavia.db.repositories.FlavorRepository.'
454
+ 'get_flavor_metadata_dict', return_value={})
428
455
  @mock.patch("octavia.controller.worker.v2.controller_worker."
429
456
  "ControllerWorker._get_db_obj_until_pending_update")
430
457
  def test_update_listener_timeout(self,
431
458
  mock__get_db_obj_until_pending,
459
+ mock_get_flavor_dict,
432
460
  mock_api_get_session,
433
461
  mock_dyn_log_listener,
434
462
  mock_taskflow_load,
@@ -443,6 +471,7 @@ class TestControllerWorker(base.TestCase):
443
471
  load_balancer_mock = mock.MagicMock()
444
472
  load_balancer_mock.provisioning_status = constants.PENDING_UPDATE
445
473
  load_balancer_mock.id = LB_ID
474
+ load_balancer_mock.flavor_id = 1
446
475
  _flow_mock.reset_mock()
447
476
  _listener_mock.provisioning_status = constants.PENDING_UPDATE
448
477
  last_attempt_mock = mock.MagicMock()
@@ -522,7 +551,8 @@ class TestControllerWorker(base.TestCase):
522
551
 
523
552
  cw.services_controller.run_poster.assert_called_with(
524
553
  flow_utils.get_create_load_balancer_flow,
525
- constants.TOPOLOGY_SINGLE, listeners=[], store=store)
554
+ constants.TOPOLOGY_SINGLE, listeners=[],
555
+ flavor_dict=None, store=store)
526
556
  self.assertEqual(4, mock_lb_repo_get.call_count)
527
557
 
528
558
  def test_create_load_balancer_active_standby(
@@ -561,7 +591,8 @@ class TestControllerWorker(base.TestCase):
561
591
 
562
592
  cw.services_controller.run_poster.assert_called_with(
563
593
  flow_utils.get_create_load_balancer_flow,
564
- constants.TOPOLOGY_ACTIVE_STANDBY, listeners=[], store=store)
594
+ constants.TOPOLOGY_ACTIVE_STANDBY, listeners=[],
595
+ flavor_dict=None, store=store)
565
596
 
566
597
  def test_create_load_balancer_full_graph_single(
567
598
  self,
@@ -603,7 +634,8 @@ class TestControllerWorker(base.TestCase):
603
634
 
604
635
  cw.services_controller.run_poster.assert_called_with(
605
636
  flow_utils.get_create_load_balancer_flow,
606
- constants.TOPOLOGY_SINGLE, listeners=dict_listeners, store=store)
637
+ constants.TOPOLOGY_SINGLE, listeners=dict_listeners,
638
+ flavor_dict=None, store=store)
607
639
 
608
640
  def test_create_load_balancer_full_graph_active_standby(
609
641
  self,
@@ -650,7 +682,7 @@ class TestControllerWorker(base.TestCase):
650
682
  cw.services_controller.run_poster.assert_called_with(
651
683
  flow_utils.get_create_load_balancer_flow,
652
684
  constants.TOPOLOGY_ACTIVE_STANDBY, listeners=dict_listeners,
653
- store=store)
685
+ store=store, flavor_dict=None)
654
686
 
655
687
  @mock.patch('octavia.controller.worker.v2.flows.load_balancer_flows.'
656
688
  'LoadBalancerFlows.get_create_load_balancer_flow')
@@ -695,7 +727,8 @@ class TestControllerWorker(base.TestCase):
695
727
  cw.create_load_balancer(_load_balancer_mock)
696
728
 
697
729
  mock_get_create_load_balancer_flow.assert_called_with(
698
- constants.TOPOLOGY_SINGLE, listeners=dict_listeners)
730
+ constants.TOPOLOGY_SINGLE, listeners=dict_listeners,
731
+ flavor_dict=None)
699
732
  mock_base_taskflow_load.assert_called_with(
700
733
  mock_get_create_load_balancer_flow.return_value, store=store)
701
734
 
@@ -1461,12 +1494,13 @@ class TestControllerWorker(base.TestCase):
1461
1494
  mock_amphora.load_balancer_id = LB_ID
1462
1495
  mock_amphora.status = constants.AMPHORA_READY
1463
1496
  mock_amp_repo_get.return_value = mock_amphora
1497
+ flavor_dict = {constants.LOADBALANCER_TOPOLOGY:
1498
+ constants.TOPOLOGY_SINGLE}
1464
1499
  expected_stored_params = {
1465
1500
  constants.AVAILABILITY_ZONE: {},
1466
1501
  constants.BUILD_TYPE_PRIORITY:
1467
1502
  constants.LB_CREATE_FAILOVER_PRIORITY,
1468
- constants.FLAVOR: {constants.LOADBALANCER_TOPOLOGY:
1469
- constants.TOPOLOGY_SINGLE},
1503
+ constants.FLAVOR: flavor_dict,
1470
1504
  constants.LOADBALANCER: mock_provider_lb.to_dict(),
1471
1505
  constants.LOADBALANCER_ID: LB_ID,
1472
1506
  constants.SERVER_GROUP_ID: None,
@@ -1479,7 +1513,8 @@ class TestControllerWorker(base.TestCase):
1479
1513
 
1480
1514
  cw.services_controller.run_poster.assert_called_once_with(
1481
1515
  flow_utils.get_failover_amphora_flow,
1482
- mock_amphora.to_dict(), 1, store=expected_stored_params)
1516
+ mock_amphora.to_dict(), 1, flavor_dict=flavor_dict,
1517
+ store=expected_stored_params)
1483
1518
 
1484
1519
  @mock.patch('octavia.db.repositories.AvailabilityZoneRepository.'
1485
1520
  'get_availability_zone_metadata_dict', return_value={})
@@ -1516,12 +1551,13 @@ class TestControllerWorker(base.TestCase):
1516
1551
  mock_amphora.load_balancer_id = LB_ID
1517
1552
  mock_amphora.status = constants.AMPHORA_READY
1518
1553
  mock_amp_repo_get.return_value = mock_amphora
1554
+ flavor_dict = {constants.LOADBALANCER_TOPOLOGY:
1555
+ constants.TOPOLOGY_ACTIVE_STANDBY}
1519
1556
  expected_stored_params = {
1520
1557
  constants.AVAILABILITY_ZONE: {},
1521
1558
  constants.BUILD_TYPE_PRIORITY:
1522
1559
  constants.LB_CREATE_FAILOVER_PRIORITY,
1523
- constants.FLAVOR: {constants.LOADBALANCER_TOPOLOGY:
1524
- constants.TOPOLOGY_ACTIVE_STANDBY},
1560
+ constants.FLAVOR: flavor_dict,
1525
1561
  constants.LOADBALANCER: mock_provider_lb.to_dict(),
1526
1562
  constants.LOADBALANCER_ID: LB_ID,
1527
1563
  constants.SERVER_GROUP_ID: None,
@@ -1534,7 +1570,8 @@ class TestControllerWorker(base.TestCase):
1534
1570
 
1535
1571
  cw.services_controller.run_poster.assert_called_once_with(
1536
1572
  flow_utils.get_failover_amphora_flow,
1537
- mock_amphora.to_dict(), 2, store=expected_stored_params)
1573
+ mock_amphora.to_dict(), 2, flavor_dict=flavor_dict,
1574
+ store=expected_stored_params)
1538
1575
 
1539
1576
  @mock.patch('octavia.db.repositories.AvailabilityZoneRepository.'
1540
1577
  'get_availability_zone_metadata_dict', return_value={})
@@ -1571,12 +1608,13 @@ class TestControllerWorker(base.TestCase):
1571
1608
  mock_amphora.load_balancer_id = LB_ID
1572
1609
  mock_amphora.status = constants.AMPHORA_READY
1573
1610
  mock_amp_repo_get.return_value = mock_amphora
1611
+ flavor_dict = {constants.LOADBALANCER_TOPOLOGY:
1612
+ constants.TOPOLOGY_ACTIVE_STANDBY}
1574
1613
  expected_stored_params = {
1575
1614
  constants.AVAILABILITY_ZONE: {},
1576
1615
  constants.BUILD_TYPE_PRIORITY:
1577
1616
  constants.LB_CREATE_FAILOVER_PRIORITY,
1578
- constants.FLAVOR: {constants.LOADBALANCER_TOPOLOGY:
1579
- constants.TOPOLOGY_ACTIVE_STANDBY},
1617
+ constants.FLAVOR: flavor_dict,
1580
1618
  constants.LOADBALANCER: mock_provider_lb.to_dict(),
1581
1619
  constants.LOADBALANCER_ID: LB_ID,
1582
1620
  constants.SERVER_GROUP_ID: SERVER_GROUP_ID,
@@ -1589,7 +1627,8 @@ class TestControllerWorker(base.TestCase):
1589
1627
 
1590
1628
  cw.services_controller.run_poster.assert_called_once_with(
1591
1629
  flow_utils.get_failover_amphora_flow,
1592
- mock_amphora.to_dict(), 2, store=expected_stored_params)
1630
+ mock_amphora.to_dict(), 2, flavor_dict=flavor_dict,
1631
+ store=expected_stored_params)
1593
1632
 
1594
1633
  @mock.patch('octavia.api.drivers.utils.'
1595
1634
  'db_loadbalancer_to_provider_loadbalancer')
@@ -1623,12 +1662,12 @@ class TestControllerWorker(base.TestCase):
1623
1662
  mock_amphora.load_balancer_id = LB_ID
1624
1663
  mock_amphora.status = constants.AMPHORA_READY
1625
1664
  mock_amp_repo_get.return_value = mock_amphora
1665
+ flavor_dict = {constants.LOADBALANCER_TOPOLOGY: mock_lb.topology}
1626
1666
  expected_stored_params = {
1627
1667
  constants.AVAILABILITY_ZONE: {},
1628
1668
  constants.BUILD_TYPE_PRIORITY:
1629
1669
  constants.LB_CREATE_FAILOVER_PRIORITY,
1630
- constants.FLAVOR: {constants.LOADBALANCER_TOPOLOGY:
1631
- mock_lb.topology},
1670
+ constants.FLAVOR: flavor_dict,
1632
1671
  constants.LOADBALANCER: mock_provider_lb.to_dict(),
1633
1672
  constants.LOADBALANCER_ID: LB_ID,
1634
1673
  constants.SERVER_GROUP_ID: SERVER_GROUP_ID,
@@ -1641,7 +1680,8 @@ class TestControllerWorker(base.TestCase):
1641
1680
 
1642
1681
  cw.services_controller.run_poster.assert_called_once_with(
1643
1682
  flow_utils.get_failover_amphora_flow,
1644
- mock_amphora.to_dict(), None, store=expected_stored_params)
1683
+ mock_amphora.to_dict(), None, flavor_dict=flavor_dict,
1684
+ store=expected_stored_params)
1645
1685
 
1646
1686
  @mock.patch('octavia.db.repositories.FlavorRepository.'
1647
1687
  'get_flavor_metadata_dict', return_value={})
@@ -1678,13 +1718,13 @@ class TestControllerWorker(base.TestCase):
1678
1718
  mock_amphora.load_balancer_id = LB_ID
1679
1719
  mock_amphora.status = constants.AMPHORA_READY
1680
1720
  mock_amp_repo_get.return_value = mock_amphora
1721
+ flavor_dict = {constants.LOADBALANCER_TOPOLOGY:
1722
+ constants.TOPOLOGY_SINGLE, 'taste': 'spicy'}
1681
1723
  expected_stored_params = {
1682
1724
  constants.AVAILABILITY_ZONE: {},
1683
1725
  constants.BUILD_TYPE_PRIORITY:
1684
1726
  constants.LB_CREATE_FAILOVER_PRIORITY,
1685
- constants.FLAVOR: {constants.LOADBALANCER_TOPOLOGY:
1686
- constants.TOPOLOGY_SINGLE,
1687
- 'taste': 'spicy'},
1727
+ constants.FLAVOR: flavor_dict,
1688
1728
  constants.LOADBALANCER: mock_provider_lb.to_dict(),
1689
1729
  constants.LOADBALANCER_ID: LB_ID,
1690
1730
  constants.SERVER_GROUP_ID: None,
@@ -1698,7 +1738,8 @@ class TestControllerWorker(base.TestCase):
1698
1738
 
1699
1739
  cw.services_controller.run_poster.assert_called_once_with(
1700
1740
  flow_utils.get_failover_amphora_flow,
1701
- mock_amphora.to_dict(), 1, store=expected_stored_params)
1741
+ mock_amphora.to_dict(), 1, flavor_dict=flavor_dict,
1742
+ store=expected_stored_params)
1702
1743
 
1703
1744
  @mock.patch('octavia.db.repositories.AvailabilityZoneRepository.'
1704
1745
  'get_availability_zone_metadata_dict', return_value={})
@@ -1735,12 +1776,13 @@ class TestControllerWorker(base.TestCase):
1735
1776
  mock_amphora.load_balancer_id = LB_ID
1736
1777
  mock_amphora.status = constants.AMPHORA_READY
1737
1778
  mock_amp_repo_get.return_value = mock_amphora
1779
+ flavor_dict = {constants.LOADBALANCER_TOPOLOGY:
1780
+ constants.TOPOLOGY_SINGLE}
1738
1781
  expected_stored_params = {
1739
1782
  constants.AVAILABILITY_ZONE: {'planet': 'jupiter'},
1740
1783
  constants.BUILD_TYPE_PRIORITY:
1741
1784
  constants.LB_CREATE_FAILOVER_PRIORITY,
1742
- constants.FLAVOR: {constants.LOADBALANCER_TOPOLOGY:
1743
- constants.TOPOLOGY_SINGLE},
1785
+ constants.FLAVOR: flavor_dict,
1744
1786
  constants.LOADBALANCER: mock_provider_lb.to_dict(),
1745
1787
  constants.LOADBALANCER_ID: LB_ID,
1746
1788
  constants.SERVER_GROUP_ID: None,
@@ -1752,12 +1794,10 @@ class TestControllerWorker(base.TestCase):
1752
1794
  cw.services_controller.reset_mock()
1753
1795
  cw.failover_amphora(AMP_ID)
1754
1796
 
1755
- print(cw, flush=True)
1756
- print(cw.services_controller, flush=True)
1757
- print(cw.services_controller.run_poster, flush=True)
1758
1797
  cw.services_controller.run_poster.assert_called_once_with(
1759
1798
  flow_utils.get_failover_amphora_flow,
1760
- mock_amphora.to_dict(), 1, store=expected_stored_params)
1799
+ mock_amphora.to_dict(), 1, flavor_dict=flavor_dict,
1800
+ store=expected_stored_params)
1761
1801
 
1762
1802
  @mock.patch('octavia.api.drivers.utils.'
1763
1803
  'db_loadbalancer_to_provider_loadbalancer')
@@ -1794,12 +1834,13 @@ class TestControllerWorker(base.TestCase):
1794
1834
  mock_amphora.load_balancer_id = LB_ID
1795
1835
  mock_amphora.status = constants.AMPHORA_READY
1796
1836
  mock_amp_repo_get.return_value = mock_amphora
1837
+ flavor_dict = {constants.LOADBALANCER_TOPOLOGY:
1838
+ constants.TOPOLOGY_SINGLE}
1797
1839
  expected_stored_params = {
1798
1840
  constants.AVAILABILITY_ZONE: {},
1799
1841
  constants.BUILD_TYPE_PRIORITY:
1800
1842
  constants.LB_CREATE_FAILOVER_PRIORITY,
1801
- constants.FLAVOR: {constants.LOADBALANCER_TOPOLOGY:
1802
- constants.TOPOLOGY_SINGLE},
1843
+ constants.FLAVOR: flavor_dict,
1803
1844
  constants.LOADBALANCER: mock_provider_lb.to_dict(),
1804
1845
  constants.LOADBALANCER_ID: LB_ID,
1805
1846
  constants.SERVER_GROUP_ID: None,
@@ -1813,12 +1854,10 @@ class TestControllerWorker(base.TestCase):
1813
1854
  cw.services_controller.reset_mock()
1814
1855
  cw.failover_amphora(AMP_ID)
1815
1856
 
1816
- print(cw, flush=True)
1817
- print(cw.services_controller, flush=True)
1818
- print(cw.services_controller.run_poster, flush=True)
1819
1857
  cw.services_controller.run_poster.assert_called_once_with(
1820
1858
  flow_utils.get_failover_amphora_flow,
1821
- mock_amphora.to_dict(), 1, store=expected_stored_params)
1859
+ mock_amphora.to_dict(), 1, flavor_dict=flavor_dict,
1860
+ store=expected_stored_params)
1822
1861
 
1823
1862
  @mock.patch('octavia.controller.worker.v2.flows.amphora_flows.'
1824
1863
  'AmphoraFlows.get_failover_amphora_flow')
@@ -1931,7 +1970,7 @@ class TestControllerWorker(base.TestCase):
1931
1970
  cw.services_controller.run_poster.assert_called_once_with(
1932
1971
  flow_utils.get_failover_amphora_flow,
1933
1972
  mock_amphora.to_dict(),
1934
- None, store=expected_stored_params)
1973
+ None, flavor_dict={}, store=expected_stored_params)
1935
1974
 
1936
1975
  @mock.patch('octavia.db.repositories.AmphoraHealthRepository.delete')
1937
1976
  def test_failover_deleted_amphora(self,
@@ -2036,7 +2075,7 @@ class TestControllerWorker(base.TestCase):
2036
2075
  mock_member_repo_get, mock_l7rule_repo_get, mock_l7policy_repo_get,
2037
2076
  mock_listener_repo_get, mock_lb_repo_get, mock_health_mon_repo_get,
2038
2077
  mock_amp_repo_get):
2039
- # Case where the amps can't see eachother and somehow end up with
2078
+ # Case where the amps can't see each other and somehow end up with
2040
2079
  # two amphora with an interface. This is highly unlikely as the
2041
2080
  # higher priority amphora should get the IP in a net split, but
2042
2081
  # let's test the code for this odd case.
@@ -2085,10 +2124,13 @@ class TestControllerWorker(base.TestCase):
2085
2124
  cw._get_amphorae_for_failover,
2086
2125
  load_balancer_mock)
2087
2126
 
2127
+ @mock.patch('octavia.db.repositories.FlavorRepository.'
2128
+ 'get_flavor_metadata_dict')
2088
2129
  @mock.patch('octavia.controller.worker.v2.controller_worker.'
2089
2130
  'ControllerWorker._get_amphorae_for_failover')
2090
2131
  def test_failover_loadbalancer_single(self,
2091
2132
  mock_get_amps_for_failover,
2133
+ mock_get_flavor_dict,
2092
2134
  mock_api_get_session,
2093
2135
  mock_dyn_log_listener,
2094
2136
  mock_taskflow_load,
@@ -2103,6 +2145,7 @@ class TestControllerWorker(base.TestCase):
2103
2145
  _flow_mock.reset_mock()
2104
2146
  mock_lb_repo_get.return_value = _db_load_balancer_mock
2105
2147
  mock_get_amps_for_failover.return_value = [_amphora_mock]
2148
+ mock_get_flavor_dict.return_value = {}
2106
2149
  provider_lb = provider_utils.db_loadbalancer_to_provider_loadbalancer(
2107
2150
  _db_load_balancer_mock).to_dict()
2108
2151