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
@@ -109,8 +109,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
109
109
|
vip = lb.vip
|
110
110
|
sec_grp_id = 'lb-sec-grp1'
|
111
111
|
show_port = self.driver.network_proxy.get_port
|
112
|
-
show_port.return_value = Port(
|
113
|
-
device_owner=allowed_address_pairs.OCTAVIA_OWNER)
|
112
|
+
show_port.return_value = Port(device_owner=constants.OCTAVIA_OWNER)
|
114
113
|
delete_port = self.driver.network_proxy.delete_port
|
115
114
|
delete_sec_grp = self.driver.network_proxy.delete_security_group
|
116
115
|
list_security_groups = self.driver.network_proxy.find_security_group
|
@@ -122,13 +121,35 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
122
121
|
delete_port.assert_has_calls(calls, any_order=True)
|
123
122
|
delete_sec_grp.assert_called_once_with(sec_grp_id)
|
124
123
|
|
124
|
+
def test_deallocate_vip_no_vrrp_port(self):
|
125
|
+
lb = dmh.generate_load_balancer_tree()
|
126
|
+
lb.vip.load_balancer = lb
|
127
|
+
# amphora 0 doesn't have a vrrp_port_id
|
128
|
+
lb.amphorae[0].vrrp_port_id = None
|
129
|
+
vip = lb.vip
|
130
|
+
sec_grp_id = 'lb-sec-grp1'
|
131
|
+
show_port = self.driver.network_proxy.get_port
|
132
|
+
show_port.return_value = Port(
|
133
|
+
device_owner=constants.OCTAVIA_OWNER)
|
134
|
+
delete_port = self.driver.network_proxy.delete_port
|
135
|
+
delete_sec_grp = self.driver.network_proxy.delete_security_group
|
136
|
+
list_security_groups = self.driver.network_proxy.find_security_group
|
137
|
+
list_security_groups.return_value = SecurityGroup(id=sec_grp_id)
|
138
|
+
self.driver.deallocate_vip(vip)
|
139
|
+
# not called for lb.amphorae[0]
|
140
|
+
calls = [mock.call(vip.port_id),
|
141
|
+
mock.call(lb.amphorae[1].vrrp_port_id)]
|
142
|
+
delete_port.assert_has_calls(calls, any_order=True)
|
143
|
+
self.assertEqual(2, delete_port.call_count)
|
144
|
+
delete_sec_grp.assert_called_once_with(sec_grp_id)
|
145
|
+
|
125
146
|
def test_deallocate_vip_no_port(self):
|
126
147
|
lb = dmh.generate_load_balancer_tree()
|
127
148
|
lb.vip.load_balancer = lb
|
128
149
|
vip = lb.vip
|
129
150
|
sec_grp_id = 'lb-sec-grp1'
|
130
151
|
show_port = self.driver.network_proxy.get_port
|
131
|
-
port = Port(device_owner=
|
152
|
+
port = Port(device_owner=constants.OCTAVIA_OWNER)
|
132
153
|
show_port.side_effect = [port, Exception]
|
133
154
|
list_security_groups = self.driver.network_proxy.find_security_group
|
134
155
|
list_security_groups.return_value = SecurityGroup(id=sec_grp_id)
|
@@ -142,7 +163,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
142
163
|
sec_grp_id = 'lb-sec-grp1'
|
143
164
|
show_port = self.driver.network_proxy.get_port
|
144
165
|
show_port.return_value = Port(
|
145
|
-
device_owner=
|
166
|
+
device_owner=constants.OCTAVIA_OWNER)
|
146
167
|
delete_port = self.driver.network_proxy.delete_port
|
147
168
|
delete_port.side_effect = os_exceptions.ResourceNotFound
|
148
169
|
delete_sec_grp = self.driver.network_proxy.delete_security_group
|
@@ -161,7 +182,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
161
182
|
vip = lb.vip
|
162
183
|
show_port = self.driver.network_proxy.get_port
|
163
184
|
show_port.return_value = Port(
|
164
|
-
device_owner=
|
185
|
+
device_owner=constants.OCTAVIA_OWNER)
|
165
186
|
delete_port = self.driver.network_proxy.delete_port
|
166
187
|
delete_sec_grp = self.driver.network_proxy.delete_security_group
|
167
188
|
list_security_groups = self.driver.network_proxy.find_security_group
|
@@ -176,7 +197,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
176
197
|
vip.load_balancer = lb
|
177
198
|
show_port = self.driver.network_proxy.get_port
|
178
199
|
show_port.return_value = Port(
|
179
|
-
device_owner=
|
200
|
+
device_owner=constants.OCTAVIA_OWNER)
|
180
201
|
delete_port = self.driver.network_proxy.delete_port
|
181
202
|
delete_port.side_effect = [None, None, TypeError]
|
182
203
|
self.assertRaises(network_base.DeallocateVIPException,
|
@@ -192,7 +213,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
192
213
|
vip = lb.vip
|
193
214
|
show_port = self.driver.network_proxy.get_port
|
194
215
|
show_port.return_value = Port(
|
195
|
-
device_owner=
|
216
|
+
device_owner=constants.OCTAVIA_OWNER)
|
196
217
|
delete_port = self.driver.network_proxy.delete_port
|
197
218
|
list_ports = self.driver.network_proxy.ports
|
198
219
|
find_security_group = self.driver.network_proxy.find_security_group
|
@@ -234,7 +255,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
234
255
|
vip.load_balancer = lb
|
235
256
|
show_port = self.driver.network_proxy.get_port
|
236
257
|
show_port.return_value = Port(
|
237
|
-
device_owner=
|
258
|
+
device_owner=constants.OCTAVIA_OWNER)
|
238
259
|
update_port = self.driver.network_proxy.update_port
|
239
260
|
update_port.side_effect = os_exceptions.ResourceNotFound
|
240
261
|
self.driver.deallocate_vip(vip)
|
@@ -295,25 +316,6 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
295
316
|
self.driver.plug_aap_port, lb, lb.vip,
|
296
317
|
lb.amphorae[0], subnet)
|
297
318
|
|
298
|
-
@mock.patch('octavia.network.drivers.neutron.allowed_address_pairs.'
|
299
|
-
'AllowedAddressPairsDriver.update_vip_sg')
|
300
|
-
@mock.patch('octavia.network.drivers.neutron.allowed_address_pairs.'
|
301
|
-
'AllowedAddressPairsDriver.get_subnet')
|
302
|
-
@mock.patch('octavia.network.drivers.neutron.allowed_address_pairs.'
|
303
|
-
'AllowedAddressPairsDriver.plug_aap_port')
|
304
|
-
def test_plug_vip(self, mock_plug_aap, mock_get_subnet,
|
305
|
-
mock_update_vip_sg):
|
306
|
-
lb = dmh.generate_load_balancer_tree()
|
307
|
-
subnet = mock.MagicMock()
|
308
|
-
mock_get_subnet.return_value = subnet
|
309
|
-
mock_plug_aap.side_effect = lb.amphorae
|
310
|
-
amps = self.driver.plug_vip(lb, lb.vip)
|
311
|
-
|
312
|
-
mock_update_vip_sg.assert_called_with(lb, lb.vip)
|
313
|
-
mock_get_subnet.assert_called_with(lb.vip.subnet_id)
|
314
|
-
for amp in amps:
|
315
|
-
mock_plug_aap.assert_any_call(lb, lb.vip, amp, subnet)
|
316
|
-
|
317
319
|
@mock.patch('octavia.common.utils.get_vip_security_group_name')
|
318
320
|
def test_update_vip_sg(self, mock_get_sg_name):
|
319
321
|
LB_ID = uuidutils.generate_uuid()
|
@@ -554,8 +556,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
554
556
|
show_port = self.driver.network_proxy.get_port
|
555
557
|
show_port.return_value = bad_existing_port
|
556
558
|
port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
|
557
|
-
port_create_dict['device_owner'] =
|
558
|
-
allowed_address_pairs.OCTAVIA_OWNER)
|
559
|
+
port_create_dict['device_owner'] = constants.OCTAVIA_OWNER
|
559
560
|
port_create_dict['device_id'] = 'lb-1'
|
560
561
|
create_port = self.driver.network_proxy.create_port
|
561
562
|
create_port.return_value = port_create_dict
|
@@ -575,7 +576,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
575
576
|
'name': 'octavia-lb-1',
|
576
577
|
'network_id': t_constants.MOCK_NETWORK_ID,
|
577
578
|
'device_id': 'lb-1',
|
578
|
-
'device_owner':
|
579
|
+
'device_owner': constants.OCTAVIA_OWNER,
|
579
580
|
'admin_state_up': False,
|
580
581
|
'project_id': 'test-project',
|
581
582
|
'fixed_ips': [{'subnet_id': t_constants.MOCK_SUBNET_ID}]
|
@@ -597,8 +598,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
597
598
|
def test_allocate_vip_when_port_not_found(self, mock_check_ext,
|
598
599
|
mock_get_port):
|
599
600
|
port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
|
600
|
-
port_create_dict['device_owner'] =
|
601
|
-
allowed_address_pairs.OCTAVIA_OWNER)
|
601
|
+
port_create_dict['device_owner'] = constants.OCTAVIA_OWNER
|
602
602
|
port_create_dict['device_id'] = 'lb-1'
|
603
603
|
create_port = self.driver.network_proxy.create_port
|
604
604
|
create_port.return_value = port_create_dict
|
@@ -617,7 +617,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
617
617
|
'name': 'octavia-lb-1',
|
618
618
|
'network_id': t_constants.MOCK_NETWORK_ID,
|
619
619
|
'device_id': 'lb-1',
|
620
|
-
'device_owner':
|
620
|
+
'device_owner': constants.OCTAVIA_OWNER,
|
621
621
|
'admin_state_up': False,
|
622
622
|
'project_id': 'test-project',
|
623
623
|
'fixed_ips': [{'subnet_id': t_constants.MOCK_SUBNET_ID}]
|
@@ -657,8 +657,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
657
657
|
'_check_extension_enabled', return_value=True)
|
658
658
|
def test_allocate_vip_when_no_port_provided(self, mock_check_ext):
|
659
659
|
port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
|
660
|
-
port_create_dict['device_owner'] =
|
661
|
-
allowed_address_pairs.OCTAVIA_OWNER)
|
660
|
+
port_create_dict['device_owner'] = constants.OCTAVIA_OWNER
|
662
661
|
port_create_dict['device_id'] = 'lb-1'
|
663
662
|
create_port = self.driver.network_proxy.create_port
|
664
663
|
create_port.return_value = port_create_dict
|
@@ -677,7 +676,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
677
676
|
'name': 'octavia-lb-1',
|
678
677
|
'network_id': t_constants.MOCK_NETWORK_ID,
|
679
678
|
'device_id': 'lb-1',
|
680
|
-
'device_owner':
|
679
|
+
'device_owner': constants.OCTAVIA_OWNER,
|
681
680
|
'admin_state_up': False,
|
682
681
|
'project_id': 'test-project',
|
683
682
|
'fixed_ips': [{'ip_address': t_constants.MOCK_IP_ADDRESS,
|
@@ -695,8 +694,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
695
694
|
'_check_extension_enabled', return_value=True)
|
696
695
|
def test_allocate_vip_when_no_port_fixed_ip(self, mock_check_ext):
|
697
696
|
port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
|
698
|
-
port_create_dict['device_owner'] =
|
699
|
-
allowed_address_pairs.OCTAVIA_OWNER)
|
697
|
+
port_create_dict['device_owner'] = constants.OCTAVIA_OWNER
|
700
698
|
port_create_dict['device_id'] = 'lb-1'
|
701
699
|
create_port = self.driver.network_proxy.create_port
|
702
700
|
create_port.return_value = port_create_dict
|
@@ -715,7 +713,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
715
713
|
'name': 'octavia-lb-1',
|
716
714
|
'network_id': t_constants.MOCK_NETWORK_ID,
|
717
715
|
'device_id': 'lb-1',
|
718
|
-
'device_owner':
|
716
|
+
'device_owner': constants.OCTAVIA_OWNER,
|
719
717
|
'admin_state_up': False,
|
720
718
|
'project_id': 'test-project',
|
721
719
|
'fixed_ips': [{'subnet_id': t_constants.MOCK_SUBNET_ID,
|
@@ -733,8 +731,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
733
731
|
'_check_extension_enabled', return_value=True)
|
734
732
|
def test_allocate_vip_when_no_port_no_fixed_ip(self, mock_check_ext):
|
735
733
|
port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
|
736
|
-
port_create_dict['device_owner'] =
|
737
|
-
allowed_address_pairs.OCTAVIA_OWNER)
|
734
|
+
port_create_dict['device_owner'] = constants.OCTAVIA_OWNER
|
738
735
|
port_create_dict['device_id'] = 'lb-1'
|
739
736
|
create_port = self.driver.network_proxy.create_port
|
740
737
|
create_port.return_value = port_create_dict
|
@@ -751,7 +748,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
751
748
|
'name': 'octavia-lb-1',
|
752
749
|
'network_id': t_constants.MOCK_NETWORK_ID,
|
753
750
|
'device_id': 'lb-1',
|
754
|
-
'device_owner':
|
751
|
+
'device_owner': constants.OCTAVIA_OWNER,
|
755
752
|
'admin_state_up': False,
|
756
753
|
'project_id': 'test-project'}
|
757
754
|
create_port.assert_called_once_with(**exp_create_port_call)
|
@@ -764,8 +761,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
764
761
|
'_check_extension_enabled', return_value=False)
|
765
762
|
def test_allocate_vip_when_no_port_provided_tenant(self, mock_check_ext):
|
766
763
|
port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
|
767
|
-
port_create_dict['device_owner'] =
|
768
|
-
allowed_address_pairs.OCTAVIA_OWNER)
|
764
|
+
port_create_dict['device_owner'] = constants.OCTAVIA_OWNER
|
769
765
|
port_create_dict['device_id'] = 'lb-1'
|
770
766
|
create_port = self.driver.network_proxy.create_port
|
771
767
|
create_port.return_value = port_create_dict
|
@@ -784,7 +780,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
784
780
|
'name': 'octavia-lb-1',
|
785
781
|
'network_id': t_constants.MOCK_NETWORK_ID,
|
786
782
|
'device_id': 'lb-1',
|
787
|
-
'device_owner':
|
783
|
+
'device_owner': constants.OCTAVIA_OWNER,
|
788
784
|
'admin_state_up': False,
|
789
785
|
'tenant_id': 'test-project',
|
790
786
|
'fixed_ips': [{'ip_address': t_constants.MOCK_IP_ADDRESS,
|
@@ -802,8 +798,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
802
798
|
'_check_extension_enabled', return_value=False)
|
803
799
|
def test_allocate_vip_with_additional_vips(self, mock_check_ext):
|
804
800
|
port_create_dict = Port(**t_constants.MOCK_NEUTRON_PORT.to_dict())
|
805
|
-
port_create_dict['device_owner'] =
|
806
|
-
allowed_address_pairs.OCTAVIA_OWNER)
|
801
|
+
port_create_dict['device_owner'] = constants.OCTAVIA_OWNER
|
807
802
|
port_create_dict['device_id'] = 'lb-1'
|
808
803
|
create_port = self.driver.network_proxy.create_port
|
809
804
|
create_port.return_value = port_create_dict
|
@@ -827,7 +822,7 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
827
822
|
'name': 'octavia-lb-1',
|
828
823
|
'network_id': t_constants.MOCK_NETWORK_ID,
|
829
824
|
'device_id': 'lb-1',
|
830
|
-
'device_owner':
|
825
|
+
'device_owner': constants.OCTAVIA_OWNER,
|
831
826
|
'admin_state_up': False,
|
832
827
|
'tenant_id': 'test-project',
|
833
828
|
'fixed_ips': [
|
@@ -1576,7 +1571,8 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1576
1571
|
'project_id': t_constants.MOCK_PROJECT_ID,
|
1577
1572
|
'qos_policy_id': QOS_POLICY_ID,
|
1578
1573
|
'security_group_ids': [],
|
1579
|
-
'status': t_constants.MOCK_STATUS
|
1574
|
+
'status': t_constants.MOCK_STATUS,
|
1575
|
+
'vnic_type': constants.VNIC_TYPE_NORMAL}
|
1580
1576
|
|
1581
1577
|
self.driver.network_proxy.create_port.side_effect = [
|
1582
1578
|
MOCK_NEUTRON_PORT, MOCK_NEUTRON_PORT, Exception('boom')]
|
@@ -1592,13 +1588,14 @@ class TestAllowedAddressPairsDriver(base.TestCase):
|
|
1592
1588
|
self.driver.network_proxy.create_port.assert_called_once_with(
|
1593
1589
|
**{
|
1594
1590
|
'network_id': NETWORK_ID, 'admin_state_up': ADMIN_STATE_UP,
|
1595
|
-
'device_owner':
|
1591
|
+
'device_owner': constants.OCTAVIA_OWNER,
|
1596
1592
|
'allowed_address_pairs': [
|
1597
1593
|
{'ip_address': IP_ADDRESS2}, {'ip_address': IP_ADDRESS3}],
|
1598
1594
|
'fixed_ips': [{
|
1599
1595
|
'subnet_id': SUBNET1_ID, 'ip_address': IP_ADDRESS1}],
|
1600
1596
|
'name': FAKE_NAME, 'qos_policy_id': QOS_POLICY_ID,
|
1601
|
-
'security_groups': [SECURITY_GROUP_ID]
|
1597
|
+
'security_groups': [SECURITY_GROUP_ID],
|
1598
|
+
'binding_vnic_type': constants.VNIC_TYPE_NORMAL})
|
1602
1599
|
|
1603
1600
|
# Test minimal successful path
|
1604
1601
|
result = self.driver.create_port(NETWORK_ID)
|
@@ -11,6 +11,7 @@
|
|
11
11
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
12
12
|
# License for the specific language governing permissions and limitations
|
13
13
|
# under the License.
|
14
|
+
from octavia.common import constants
|
14
15
|
from octavia.network.drivers.neutron import utils
|
15
16
|
from octavia.tests.common import constants as t_constants
|
16
17
|
from octavia.tests.unit import base
|
@@ -67,6 +68,7 @@ class TestNeutronUtils(base.TestCase):
|
|
67
68
|
admin_state_up=t_constants.MOCK_ADMIN_STATE_UP,
|
68
69
|
fixed_ips=[],
|
69
70
|
security_group_ids=[],
|
71
|
+
vnic_type=constants.VNIC_TYPE_NORMAL,
|
70
72
|
)
|
71
73
|
self._compare_ignore_value_none(model_obj.to_dict(), assert_dict)
|
72
74
|
fixed_ips = t_constants.MOCK_NEUTRON_PORT['fixed_ips']
|
@@ -88,13 +88,6 @@ class TestNoopNetworkDriver(base.TestCase):
|
|
88
88
|
self.driver.driver.networkconfigconfig[
|
89
89
|
self.vip.ip_address])
|
90
90
|
|
91
|
-
def test_plug_vip(self):
|
92
|
-
self.driver.plug_vip(self.load_balancer, self.vip)
|
93
|
-
self.assertEqual((self.load_balancer, self.vip,
|
94
|
-
'plug_vip'),
|
95
|
-
self.driver.driver.networkconfigconfig[(
|
96
|
-
self.load_balancer.id, self.vip.ip_address)])
|
97
|
-
|
98
91
|
def test_update_vip_sg(self):
|
99
92
|
self.driver.update_vip_sg(self.load_balancer, self.vip)
|
100
93
|
self.assertEqual((self.load_balancer, self.vip,
|
{octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/diskimage-create/README.rst
RENAMED
@@ -107,7 +107,7 @@ Command syntax:
|
|
107
107
|
[-f]
|
108
108
|
[-g **repository branch** | stable/train | stable/stein | ... ]
|
109
109
|
[-h]
|
110
|
-
[-i **ubuntu-minimal** | fedora | centos-minimal | rhel ]
|
110
|
+
[-i **ubuntu-minimal** | fedora | centos-minimal | rhel | rocky ]
|
111
111
|
[-k <kernel package name> ]
|
112
112
|
[-l <log file> ]
|
113
113
|
[-m]
|
@@ -274,6 +274,11 @@ OCTAVIA_REPO_PATH
|
|
274
274
|
- Default: <directory above the script location>
|
275
275
|
- Reference: https://github.com/openstack/octavia
|
276
276
|
|
277
|
+
DIB_OCTAVIA_AMP_USE_NFTABLES
|
278
|
+
- Boolean that configures nftables inside the amphora image
|
279
|
+
- Required for SR-IOV enabled amphora
|
280
|
+
- Default: True
|
281
|
+
|
277
282
|
Using distribution packages for amphora agent
|
278
283
|
---------------------------------------------
|
279
284
|
By default, amphora agent is installed from Octavia Git repository.
|
@@ -28,7 +28,7 @@ usage() {
|
|
28
28
|
echo " [-f]"
|
29
29
|
echo " [-g **repository branch** | stable/train | stable/stein | ... ]"
|
30
30
|
echo " [-h]"
|
31
|
-
echo " [-i **ubuntu-minimal** | fedora | centos-minimal | rhel ]"
|
31
|
+
echo " [-i **ubuntu-minimal** | fedora | centos-minimal | rhel | rocky ]"
|
32
32
|
echo " [-k <kernel package name> ]"
|
33
33
|
echo " [-l <log file> ]"
|
34
34
|
echo " [-m]"
|
@@ -150,6 +150,7 @@ while getopts "a:b:c:d:efg:hi:k:l:mno:pt:r:s:vw:xy" opt; do
|
|
150
150
|
[ "$AMP_BASEOS" != "fedora" ] && \
|
151
151
|
[ "$AMP_BASEOS" != "centos" ] && \
|
152
152
|
[ "$AMP_BASEOS" != "centos-minimal" ] && \
|
153
|
+
[ "$AMP_BASEOS" != "rocky" ] && \
|
153
154
|
[ "$AMP_BASEOS" != "rhel" ]; then
|
154
155
|
echo "Error: Unsupported base OS $AMP_BASEOS specified"
|
155
156
|
exit 3
|
@@ -160,6 +161,9 @@ while getopts "a:b:c:d:efg:hi:k:l:mno:pt:r:s:vw:xy" opt; do
|
|
160
161
|
if [ "$AMP_BASEOS" == "centos" ]; then
|
161
162
|
AMP_BASEOS="centos-minimal"
|
162
163
|
fi
|
164
|
+
if [ "$AMP_BASEOS" == "rocky" ]; then
|
165
|
+
AMP_BASEOS="rocky-container"
|
166
|
+
fi
|
163
167
|
;;
|
164
168
|
k)
|
165
169
|
AMP_KERNEL=$OPTARG
|
@@ -245,6 +249,8 @@ elif [ "${AMP_BASEOS}" = "centos-minimal" ]; then
|
|
245
249
|
export DIB_RELEASE=${AMP_DIB_RELEASE:-"9-stream"}
|
246
250
|
elif [ "${AMP_BASEOS}" = "fedora" ]; then
|
247
251
|
export DIB_RELEASE=${AMP_DIB_RELEASE:-"28"}
|
252
|
+
elif [ "${AMP_BASEOS}" = "rocky-container" ]; then
|
253
|
+
export DIB_RELEASE=${AMP_DIB_RELEASE:-"9"}
|
248
254
|
fi
|
249
255
|
|
250
256
|
AMP_OUTPUTFILENAME=${AMP_OUTPUTFILENAME:-"$PWD/amphora-x64-haproxy.qcow2"}
|
@@ -304,7 +310,7 @@ else
|
|
304
310
|
fi
|
305
311
|
|
306
312
|
# Make sure we have a value set for DIB_OCTAVIA_AMP_USE_NFTABLES
|
307
|
-
export DIB_OCTAVIA_AMP_USE_NFTABLES=${DIB_OCTAVIA_AMP_USE_NFTABLES:-
|
313
|
+
export DIB_OCTAVIA_AMP_USE_NFTABLES=${DIB_OCTAVIA_AMP_USE_NFTABLES:-True}
|
308
314
|
|
309
315
|
export CLOUD_INIT_DATASOURCES=${CLOUD_INIT_DATASOURCES:-"ConfigDrive"}
|
310
316
|
|
@@ -454,7 +460,7 @@ AMP_element_sequence="$AMP_element_sequence cloud-init-datasources"
|
|
454
460
|
AMP_element_sequence="$AMP_element_sequence remove-default-ints"
|
455
461
|
|
456
462
|
# SELinux systems
|
457
|
-
if [ "${AMP_BASEOS}" = "centos-minimal" ] || [ "${AMP_BASEOS}" = "fedora" ] || [ "${AMP_BASEOS}" = "rhel" ]; then
|
463
|
+
if [ "${AMP_BASEOS}" = "centos-minimal" ] || [ "${AMP_BASEOS}" = "fedora" ] || [ "${AMP_BASEOS}" = "rhel" ] || [ "${AMP_BASEOS}" = "rocky-container" ]; then
|
458
464
|
if [ "$AMP_ENABLE_FULL_MAC_SECURITY" -ne 1 ]; then
|
459
465
|
AMP_element_sequence="$AMP_element_sequence selinux-permissive"
|
460
466
|
else
|
@@ -464,7 +470,7 @@ if [ "${AMP_BASEOS}" = "centos-minimal" ] || [ "${AMP_BASEOS}" = "fedora" ] || [
|
|
464
470
|
fi
|
465
471
|
|
466
472
|
# Disable the dnf makecache timer
|
467
|
-
if [ "${AMP_BASEOS}" = "centos-minimal" ] || [ "${AMP_BASEOS}" = "fedora" ] || [ "${AMP_BASEOS}" = "rhel" ]; then
|
473
|
+
if [ "${AMP_BASEOS}" = "centos-minimal" ] || [ "${AMP_BASEOS}" = "fedora" ] || [ "${AMP_BASEOS}" = "rhel" ] || [ "${AMP_BASEOS}" = "rocky-container" ]; then
|
468
474
|
AMP_element_sequence="$AMP_element_sequence disable-makecache"
|
469
475
|
fi
|
470
476
|
|
{octavia-13.0.0.0rc1.data → octavia-14.0.0.data}/data/share/octavia/diskimage-create/tox.ini
RENAMED
@@ -1,36 +1,53 @@
|
|
1
1
|
[tox]
|
2
|
-
minversion =
|
2
|
+
minversion = 3.18
|
3
3
|
envlist = bashate,docs,build,test
|
4
|
-
skipsdist = True
|
5
4
|
|
6
5
|
[testenv]
|
7
6
|
basepython = python3
|
8
7
|
envdir = {toxworkdir}/venv
|
9
8
|
setenv = VIRTUAL_ENV={envdir}
|
10
|
-
passenv =
|
9
|
+
passenv =
|
10
|
+
http_proxy
|
11
|
+
HTTP_PROXY
|
12
|
+
https_proxy
|
13
|
+
HTTPS_PROXY
|
14
|
+
no_proxy
|
15
|
+
NO_PROXY
|
16
|
+
DIB_*
|
17
|
+
CLOUD_INIT_DATASOURCES
|
18
|
+
OCTAVIA_REPO_PATH
|
11
19
|
install_command = pip install -U {opts} {packages}
|
12
20
|
deps = -r{toxinidir}/requirements.txt
|
13
21
|
-r{toxinidir}/test-requirements.txt
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
22
|
+
allowlist_externals =
|
23
|
+
virt-filesystems
|
24
|
+
virt-inspector
|
25
|
+
awk
|
26
|
+
mkdir
|
27
|
+
rm
|
19
28
|
|
20
29
|
[testenv:docs]
|
21
30
|
commands = doc8 README.rst ../elements/haproxy-octavia/README.rst ../elements/root-passwd/README.rst
|
22
31
|
|
23
32
|
[testenv:bashate]
|
24
|
-
commands =
|
25
|
-
|
33
|
+
commands =
|
34
|
+
bashate diskimage-create.sh
|
35
|
+
bashate image-tests.sh
|
26
36
|
|
27
37
|
[testenv:build]
|
28
38
|
# NOTE: specify cache directory explicitly with -c as the `diskimage-create.sh`
|
29
39
|
# default is based off of `$HOME` which is not passed on in a `tox` environment.
|
30
|
-
commands =
|
40
|
+
commands =
|
41
|
+
./diskimage-create.sh -o {toxinidir}/amphora-x64-haproxy -w {toxworkdir} -c {toxworkdir}/.cache
|
42
|
+
allowlist_externals =
|
43
|
+
./diskimage-create.sh
|
44
|
+
|
31
45
|
|
32
46
|
[testenv:test]
|
33
47
|
# Work around tox limitations with command pipes
|
34
48
|
# https://bitbucket.org/hpk42/tox/issue/73/pipe-output-of-command-into-file
|
35
|
-
commands =
|
36
|
-
|
49
|
+
commands =
|
50
|
+
./image-tests.sh {toxinidir}/.amp_tox_test
|
51
|
+
rm -rf {toxinidir}/.amp_tox_test
|
52
|
+
allowlist_externals =
|
53
|
+
./image-tests.sh
|
@@ -105,6 +105,7 @@ Itzik Brown <itzikb@redhat.com>
|
|
105
105
|
Jacky Hu <hudayou@hotmail.com>
|
106
106
|
James Arendt <james.arendt@hp.com>
|
107
107
|
James E. Blair <jeblair@redhat.com>
|
108
|
+
James Page <james.page@canonical.com>
|
108
109
|
James Page <james.page@ubuntu.com>
|
109
110
|
Jamie Lennox <jamielennox@gmail.com>
|
110
111
|
Jason Niesz <Jason.Niesz@walmart.com>
|
@@ -157,8 +158,10 @@ Mohammed Naser <mnaser@vexxhost.com>
|
|
157
158
|
Monty Taylor <mordred@inaugust.com>
|
158
159
|
Nakul Dahiwade <nakul.dahiwade@intel.com>
|
159
160
|
Nam Nguyen Hoai <namnh@vn.fujitsu.com>
|
161
|
+
Natzcheng <chenggang01@inspur.com>
|
160
162
|
Ngo Quoc Cuong <cuongnq@vn.fujitsu.com>
|
161
163
|
Nguyen Hai <nguyentrihai93@gmail.com>
|
164
|
+
Nguyen Ngoc Hieu <hieunn23@fpt.com>
|
162
165
|
Nguyen Van Trung <trungnv@vn.fujitsu.com>
|
163
166
|
Nir Magnezi <nmagnezi@redhat.com>
|
164
167
|
Noboru Iwamatsu <n_iwamatsu@jp.fujitsu.com>
|
@@ -198,6 +201,7 @@ Stephen Balukoff <stephen@balukoff.com>
|
|
198
201
|
Stephen Finucane <stephenfin@redhat.com>
|
199
202
|
Susanne Balle <sleipnir012@gmail.com>
|
200
203
|
Sven Wegener <sven.wegener@inovex.de>
|
204
|
+
Takashi Kajinami <kajinamit@oss.nttdata.com>
|
201
205
|
Takashi Kajinami <tkajinam@redhat.com>
|
202
206
|
Takashi Natsume <takanattie@gmail.com>
|
203
207
|
Tatsuma Matsuki <matsuki.tatsuma@jp.fujitsu.com>
|
@@ -214,6 +218,7 @@ Tuan Do Anh <tuanda@vn.fujitsu.com>
|
|
214
218
|
Vadim Ponomarev <velizarx@gmail.com>
|
215
219
|
Valeria Perelman <perelman@il.ibm.com>
|
216
220
|
Van Hung Pham <hungpv@vn.fujitsu.com>
|
221
|
+
Vasyl Saienko <vsaienko@mirantis.com>
|
217
222
|
Vieri <15050873171@163.com>
|
218
223
|
Vlad Gusev <vlad.esten@gmail.com>
|
219
224
|
Vu Cong Tuan <tuanvc@vn.fujitsu.com>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: octavia
|
3
|
-
Version:
|
3
|
+
Version: 14.0.0
|
4
4
|
Summary: OpenStack Octavia Scalable Load Balancer as a Service
|
5
5
|
Home-page: https://docs.openstack.org/octavia/latest/
|
6
6
|
Author: OpenStack
|
@@ -19,6 +19,7 @@ Classifier: Programming Language :: Python :: 3
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.8
|
20
20
|
Classifier: Programming Language :: Python :: 3.9
|
21
21
|
Classifier: Programming Language :: Python :: 3.10
|
22
|
+
Classifier: Programming Language :: Python :: 3.11
|
22
23
|
Requires-Python: >=3.8
|
23
24
|
Requires-Dist: Flask (!=0.11,>=0.10)
|
24
25
|
Requires-Dist: Jinja2 (>=2.10)
|
@@ -54,7 +55,6 @@ Requires-Dist: oslo.utils (>=4.7.0)
|
|
54
55
|
Requires-Dist: pbr (>=3.1.1)
|
55
56
|
Requires-Dist: pecan (>=1.3.2)
|
56
57
|
Requires-Dist: psutil (>=5.7.1)
|
57
|
-
Requires-Dist: pyOpenSSL (>=19.1.0)
|
58
58
|
Requires-Dist: pyasn1 (!=0.2.3,>=0.1.8)
|
59
59
|
Requires-Dist: pyasn1-modules (>=0.0.6)
|
60
60
|
Requires-Dist: python-barbicanclient (>=4.5.2)
|
@@ -67,11 +67,11 @@ Requires-Dist: rfc3986 (>=1.2.0)
|
|
67
67
|
Requires-Dist: setproctitle (>=1.1.10)
|
68
68
|
Requires-Dist: simplejson (>=3.13.2)
|
69
69
|
Requires-Dist: stevedore (>=1.20.0)
|
70
|
-
Requires-Dist: taskflow (>=
|
70
|
+
Requires-Dist: taskflow (>=5.5.0)
|
71
71
|
Requires-Dist: tenacity (>=5.0.4)
|
72
72
|
Requires-Dist: pyroute2 (>=0.5.14) ; (sys_platform!='win32')
|
73
73
|
Provides-Extra: redis
|
74
|
-
Requires-Dist: redis (>=
|
74
|
+
Requires-Dist: redis (>=3.4.0) ; extra == 'redis'
|
75
75
|
Provides-Extra: test
|
76
76
|
Requires-Dist: WebTest (>=2.0.26) ; extra == 'test'
|
77
77
|
Requires-Dist: bandit (!=1.6.0,>=1.1.0) ; extra == 'test'
|
@@ -79,8 +79,8 @@ Requires-Dist: bashate (>=0.5.1) ; extra == 'test'
|
|
79
79
|
Requires-Dist: coverage (!=4.4,>=4.0) ; extra == 'test'
|
80
80
|
Requires-Dist: doc8 (>=0.6.0) ; extra == 'test'
|
81
81
|
Requires-Dist: fixtures (>=3.0.0) ; extra == 'test'
|
82
|
-
Requires-Dist: flake8-import-order (
|
83
|
-
Requires-Dist: hacking (
|
82
|
+
Requires-Dist: flake8-import-order (<0.19.0,>=0.18.0) ; extra == 'test'
|
83
|
+
Requires-Dist: hacking (<6.2.0,>=6.1.0) ; extra == 'test'
|
84
84
|
Requires-Dist: oslotest (>=3.2.0) ; extra == 'test'
|
85
85
|
Requires-Dist: pylint (>=2.5.3) ; extra == 'test'
|
86
86
|
Requires-Dist: python-subunit (>=1.0.0) ; extra == 'test'
|