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
@@ -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=allowed_address_pairs.OCTAVIA_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=allowed_address_pairs.OCTAVIA_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=allowed_address_pairs.OCTAVIA_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=allowed_address_pairs.OCTAVIA_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=allowed_address_pairs.OCTAVIA_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=allowed_address_pairs.OCTAVIA_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': allowed_address_pairs.OCTAVIA_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': allowed_address_pairs.OCTAVIA_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': allowed_address_pairs.OCTAVIA_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': allowed_address_pairs.OCTAVIA_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': allowed_address_pairs.OCTAVIA_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': allowed_address_pairs.OCTAVIA_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': allowed_address_pairs.OCTAVIA_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': allowed_address_pairs.OCTAVIA_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,
@@ -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:-False}
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
 
@@ -1,3 +1 @@
1
1
  diskimage-builder>=2.24.0
2
- PyYAML
3
- six>=1.9.0
@@ -1,36 +1,53 @@
1
1
  [tox]
2
- minversion = 1.8
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 = http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY DIB_* CLOUD_INIT_DATASOURCES OCTAVIA_REPO_PATH
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
- whitelist_externals = virt-filesystems
15
- virt-inspector
16
- awk
17
- mkdir
18
- rm
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 = bashate diskimage-create.sh
25
- bashate image-tests.sh
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 = ./diskimage-create.sh -o {toxinidir}/amphora-x64-haproxy -w {toxworkdir} -c {toxworkdir}/.cache
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 = ./image-tests.sh {toxinidir}/.amp_tox_test
36
- rm -rf {toxinidir}/.amp_tox_test
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: 13.0.0.0rc1
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 (>=4.4.0)
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 (>=2.10.0) ; extra == '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 (==0.12) ; extra == 'test'
83
- Requires-Dist: hacking (>=3.0) ; extra == 'test'
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'