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.
- octavia/amphorae/backends/agent/api_server/lvs_listener_base.py +1 -1
- octavia/amphorae/backends/agent/api_server/osutils.py +5 -5
- octavia/amphorae/backends/agent/api_server/plug.py +3 -2
- octavia/amphorae/backends/agent/api_server/rules_schema.py +52 -0
- octavia/amphorae/backends/agent/api_server/server.py +28 -1
- octavia/amphorae/backends/utils/interface.py +45 -6
- octavia/amphorae/backends/utils/interface_file.py +9 -6
- octavia/amphorae/backends/utils/nftable_utils.py +125 -0
- octavia/amphorae/drivers/driver_base.py +27 -0
- octavia/amphorae/drivers/haproxy/rest_api_driver.py +42 -10
- octavia/amphorae/drivers/health/heartbeat_udp.py +2 -2
- octavia/amphorae/drivers/keepalived/vrrp_rest_driver.py +2 -1
- octavia/amphorae/drivers/noop_driver/driver.py +25 -0
- octavia/api/app.py +3 -0
- octavia/api/common/pagination.py +2 -2
- octavia/api/drivers/amphora_driver/flavor_schema.py +6 -1
- octavia/api/root_controller.py +4 -1
- octavia/api/v2/controllers/health_monitor.py +0 -1
- octavia/api/v2/controllers/l7policy.py +0 -1
- octavia/api/v2/controllers/l7rule.py +0 -1
- octavia/api/v2/controllers/listener.py +0 -1
- octavia/api/v2/controllers/load_balancer.py +13 -7
- octavia/api/v2/controllers/member.py +6 -3
- octavia/api/v2/controllers/pool.py +6 -7
- octavia/api/v2/types/load_balancer.py +5 -1
- octavia/api/v2/types/pool.py +1 -1
- octavia/certificates/common/pkcs12.py +9 -9
- octavia/certificates/manager/barbican.py +24 -16
- octavia/certificates/manager/castellan_mgr.py +12 -7
- octavia/certificates/manager/local.py +4 -4
- octavia/certificates/manager/noop.py +106 -0
- octavia/cmd/driver_agent.py +1 -1
- octavia/cmd/health_checker.py +0 -4
- octavia/cmd/health_manager.py +1 -5
- octavia/cmd/house_keeping.py +1 -1
- octavia/cmd/interface.py +0 -4
- octavia/cmd/octavia_worker.py +0 -4
- octavia/cmd/prometheus_proxy.py +0 -5
- octavia/cmd/status.py +0 -6
- octavia/common/base_taskflow.py +1 -1
- octavia/common/clients.py +15 -3
- octavia/common/config.py +24 -6
- octavia/common/constants.py +34 -0
- octavia/common/data_models.py +3 -1
- octavia/common/exceptions.py +11 -0
- octavia/common/jinja/haproxy/combined_listeners/templates/macros.j2 +7 -5
- octavia/common/keystone.py +7 -7
- octavia/common/tls_utils/cert_parser.py +24 -10
- octavia/common/utils.py +6 -0
- octavia/common/validate.py +2 -2
- octavia/compute/drivers/nova_driver.py +23 -5
- octavia/controller/worker/task_utils.py +28 -6
- octavia/controller/worker/v2/controller_worker.py +49 -15
- octavia/controller/worker/v2/flows/amphora_flows.py +120 -21
- octavia/controller/worker/v2/flows/flow_utils.py +15 -13
- octavia/controller/worker/v2/flows/listener_flows.py +95 -5
- octavia/controller/worker/v2/flows/load_balancer_flows.py +74 -30
- octavia/controller/worker/v2/taskflow_jobboard_driver.py +17 -1
- octavia/controller/worker/v2/tasks/amphora_driver_tasks.py +145 -24
- octavia/controller/worker/v2/tasks/compute_tasks.py +1 -1
- octavia/controller/worker/v2/tasks/database_tasks.py +72 -41
- octavia/controller/worker/v2/tasks/lifecycle_tasks.py +97 -41
- octavia/controller/worker/v2/tasks/network_tasks.py +57 -60
- octavia/controller/worker/v2/tasks/shim_tasks.py +28 -0
- octavia/db/migration/alembic_migrations/versions/55874a4ceed6_add_l7policy_action_redirect_prefix.py +1 -1
- octavia/db/migration/alembic_migrations/versions/5a3ee5472c31_add_cert_expiration__infor_in_amphora_table.py +1 -1
- octavia/db/migration/alembic_migrations/versions/6742ca1b27c2_add_l7policy_redirect_http_code.py +1 -1
- octavia/db/migration/alembic_migrations/versions/db2a73e82626_add_vnic_type_for_vip.py +36 -0
- octavia/db/models.py +1 -0
- octavia/db/prepare.py +1 -1
- octavia/db/repositories.py +53 -34
- octavia/distributor/drivers/driver_base.py +1 -1
- octavia/network/base.py +3 -16
- octavia/network/data_models.py +4 -1
- octavia/network/drivers/neutron/allowed_address_pairs.py +27 -26
- octavia/network/drivers/noop_driver/driver.py +10 -23
- octavia/tests/common/sample_certs.py +115 -0
- octavia/tests/common/sample_haproxy_prometheus +1 -1
- octavia/tests/functional/amphorae/backend/agent/api_server/test_server.py +37 -0
- octavia/tests/functional/api/test_healthcheck.py +2 -2
- octavia/tests/functional/api/v2/base.py +1 -1
- octavia/tests/functional/api/v2/test_listener.py +45 -0
- octavia/tests/functional/api/v2/test_load_balancer.py +17 -0
- octavia/tests/functional/db/base.py +9 -0
- octavia/tests/functional/db/test_models.py +2 -1
- octavia/tests/functional/db/test_repositories.py +55 -99
- octavia/tests/unit/amphorae/backends/agent/api_server/test_osutils.py +4 -2
- octavia/tests/unit/amphorae/backends/utils/test_interface.py +201 -1
- octavia/tests/unit/amphorae/backends/utils/test_keepalivedlvs_query.py +1 -1
- octavia/tests/unit/amphorae/backends/utils/test_nftable_utils.py +194 -0
- octavia/tests/unit/amphorae/drivers/haproxy/test_rest_api_driver.py +27 -5
- octavia/tests/unit/amphorae/drivers/haproxy/test_rest_api_driver_1_0.py +15 -2
- octavia/tests/unit/amphorae/drivers/keepalived/test_vrrp_rest_driver.py +17 -0
- octavia/tests/unit/amphorae/drivers/noop_driver/test_driver.py +2 -1
- octavia/tests/unit/api/v2/types/test_pool.py +71 -0
- octavia/tests/unit/certificates/manager/test_barbican.py +3 -3
- octavia/tests/unit/certificates/manager/test_noop.py +53 -0
- octavia/tests/unit/common/jinja/haproxy/combined_listeners/test_jinja_cfg.py +16 -17
- octavia/tests/unit/common/sample_configs/sample_configs_combined.py +5 -3
- octavia/tests/unit/common/test_config.py +35 -0
- octavia/tests/unit/common/test_keystone.py +32 -0
- octavia/tests/unit/common/test_utils.py +39 -0
- octavia/tests/unit/compute/drivers/test_nova_driver.py +22 -0
- octavia/tests/unit/controller/worker/test_task_utils.py +58 -2
- octavia/tests/unit/controller/worker/v2/flows/test_amphora_flows.py +28 -5
- octavia/tests/unit/controller/worker/v2/flows/test_listener_flows.py +64 -16
- octavia/tests/unit/controller/worker/v2/flows/test_load_balancer_flows.py +49 -9
- octavia/tests/unit/controller/worker/v2/tasks/test_amphora_driver_tasks.py +265 -17
- octavia/tests/unit/controller/worker/v2/tasks/test_database_tasks.py +101 -1
- octavia/tests/unit/controller/worker/v2/tasks/test_database_tasks_quota.py +19 -19
- octavia/tests/unit/controller/worker/v2/tasks/test_network_tasks.py +105 -42
- octavia/tests/unit/controller/worker/v2/tasks/test_shim_tasks.py +33 -0
- octavia/tests/unit/controller/worker/v2/test_controller_worker.py +85 -42
- octavia/tests/unit/network/drivers/neutron/test_allowed_address_pairs.py +48 -51
- octavia/tests/unit/network/drivers/neutron/test_utils.py +2 -0
- octavia/tests/unit/network/drivers/noop_driver/test_driver.py +0 -7
- {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/diskimage-create/README.rst +6 -1
- {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/diskimage-create/diskimage-create.sh +10 -4
- {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/diskimage-create/requirements.txt +0 -2
- {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/diskimage-create/tox.ini +30 -13
- {octavia-13.0.0.0rc1.dist-info → octavia-14.0.0.dist-info}/AUTHORS +5 -0
- {octavia-13.0.0.0rc1.dist-info → octavia-14.0.0.dist-info}/METADATA +6 -6
- {octavia-13.0.0.0rc1.dist-info → octavia-14.0.0.dist-info}/RECORD +134 -126
- {octavia-13.0.0.0rc1.dist-info → octavia-14.0.0.dist-info}/entry_points.txt +1 -1
- octavia-14.0.0.dist-info/pbr.json +1 -0
- octavia-13.0.0.0rc1.dist-info/pbr.json +0 -1
- {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/LICENSE +0 -0
- {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/README.rst +0 -0
- {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/diskimage-create/image-tests.sh +0 -0
- {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/diskimage-create/test-requirements.txt +0 -0
- {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/diskimage-create/version.txt +0 -0
- {octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/scripts/octavia-wsgi +0 -0
- {octavia-13.0.0.0rc1.dist-info → octavia-14.0.0.dist-info}/LICENSE +0 -0
- {octavia-13.0.0.0rc1.dist-info → octavia-14.0.0.dist-info}/WHEEL +0 -0
- {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:
|
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 =
|
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,
|
361
|
-
|
362
|
-
|
363
|
-
|
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=[],
|
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=[],
|
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,
|
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:
|
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,
|
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:
|
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,
|
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:
|
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,
|
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:
|
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,
|
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:
|
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,
|
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:
|
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,
|
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:
|
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,
|
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
|
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
|
|