octavia 14.0.0.0rc1__py3-none-any.whl → 15.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 (307) hide show
  1. octavia/amphorae/backends/agent/agent_jinja_cfg.py +1 -4
  2. octavia/amphorae/backends/agent/api_server/amphora_info.py +5 -5
  3. octavia/amphorae/backends/agent/api_server/keepalived.py +26 -53
  4. octavia/amphorae/backends/agent/api_server/keepalivedlvs.py +44 -83
  5. octavia/amphorae/backends/agent/api_server/loadbalancer.py +94 -112
  6. octavia/amphorae/backends/agent/api_server/lvs_listener_base.py +1 -1
  7. octavia/amphorae/backends/agent/api_server/osutils.py +11 -8
  8. octavia/amphorae/backends/agent/api_server/plug.py +12 -13
  9. octavia/amphorae/backends/agent/api_server/server.py +4 -3
  10. octavia/amphorae/backends/agent/api_server/templates/keepalived_lvs_check_script.sh.j2 +0 -4
  11. octavia/amphorae/backends/agent/api_server/util.py +23 -68
  12. octavia/amphorae/backends/agent/templates/amphora_agent_conf.template +0 -3
  13. octavia/amphorae/backends/health_daemon/health_daemon.py +6 -7
  14. octavia/amphorae/backends/health_daemon/health_sender.py +2 -2
  15. octavia/amphorae/backends/utils/haproxy_query.py +3 -6
  16. octavia/amphorae/backends/utils/interface.py +11 -50
  17. octavia/amphorae/backends/utils/interface_file.py +29 -16
  18. octavia/amphorae/backends/utils/ip_advertisement.py +1 -1
  19. octavia/amphorae/backends/utils/keepalivedlvs_query.py +7 -8
  20. octavia/amphorae/backends/utils/network_namespace.py +3 -3
  21. octavia/amphorae/backends/utils/nftable_utils.py +33 -11
  22. octavia/amphorae/drivers/driver_base.py +2 -2
  23. octavia/amphorae/drivers/haproxy/rest_api_driver.py +26 -38
  24. octavia/amphorae/drivers/health/heartbeat_udp.py +1 -1
  25. octavia/amphorae/drivers/keepalived/jinja/jinja_cfg.py +1 -2
  26. octavia/amphorae/drivers/keepalived/jinja/templates/keepalived_base.template +0 -1
  27. octavia/amphorae/drivers/noop_driver/driver.py +1 -1
  28. octavia/api/app.py +1 -2
  29. octavia/api/common/pagination.py +16 -22
  30. octavia/api/common/types.py +1 -1
  31. octavia/api/drivers/amphora_driver/v2/driver.py +6 -6
  32. octavia/api/drivers/driver_agent/driver_listener.py +3 -3
  33. octavia/api/drivers/driver_agent/driver_updater.py +1 -1
  34. octavia/api/drivers/noop_driver/driver.py +1 -1
  35. octavia/api/root_controller.py +2 -2
  36. octavia/api/v2/controllers/base.py +2 -4
  37. octavia/api/v2/controllers/health_monitor.py +5 -3
  38. octavia/api/v2/controllers/listener.py +2 -2
  39. octavia/api/v2/controllers/load_balancer.py +7 -0
  40. octavia/api/v2/controllers/member.py +12 -2
  41. octavia/api/v2/types/amphora.py +1 -1
  42. octavia/api/v2/types/availability_zone_profile.py +1 -2
  43. octavia/api/v2/types/availability_zones.py +1 -2
  44. octavia/api/v2/types/flavor_profile.py +1 -1
  45. octavia/api/v2/types/flavors.py +1 -1
  46. octavia/api/v2/types/health_monitor.py +1 -1
  47. octavia/api/v2/types/l7policy.py +1 -1
  48. octavia/api/v2/types/l7rule.py +1 -1
  49. octavia/api/v2/types/listener.py +3 -3
  50. octavia/api/v2/types/load_balancer.py +3 -3
  51. octavia/api/v2/types/member.py +2 -2
  52. octavia/api/v2/types/pool.py +2 -2
  53. octavia/api/v2/types/quotas.py +2 -2
  54. octavia/certificates/common/barbican.py +1 -1
  55. octavia/certificates/common/cert.py +1 -1
  56. octavia/certificates/generator/cert_gen.py +1 -1
  57. octavia/certificates/generator/local.py +5 -5
  58. octavia/certificates/manager/cert_mgr.py +1 -1
  59. octavia/certificates/manager/local.py +20 -20
  60. octavia/cmd/agent.py +3 -3
  61. octavia/cmd/driver_agent.py +2 -3
  62. octavia/cmd/health_checker.py +4 -4
  63. octavia/cmd/interface.py +4 -4
  64. octavia/cmd/prometheus_proxy.py +11 -13
  65. octavia/common/base_taskflow.py +3 -3
  66. octavia/common/clients.py +4 -4
  67. octavia/common/config.py +18 -24
  68. octavia/common/constants.py +28 -35
  69. octavia/common/data_models.py +2 -2
  70. octavia/common/jinja/haproxy/combined_listeners/jinja_cfg.py +5 -5
  71. octavia/common/jinja/logging/logging_jinja_cfg.py +1 -1
  72. octavia/common/jinja/lvs/jinja_cfg.py +1 -1
  73. octavia/common/jinja/user_data_jinja_cfg.py +1 -1
  74. octavia/common/keystone.py +1 -1
  75. octavia/common/policy.py +2 -3
  76. octavia/common/stats.py +1 -1
  77. octavia/common/tls_utils/cert_parser.py +2 -1
  78. octavia/common/utils.py +3 -3
  79. octavia/common/validate.py +9 -13
  80. octavia/compute/compute_base.py +1 -1
  81. octavia/compute/drivers/noop_driver/driver.py +1 -1
  82. octavia/compute/drivers/nova_driver.py +1 -1
  83. octavia/controller/healthmanager/health_manager.py +1 -1
  84. octavia/controller/housekeeping/house_keeping.py +2 -2
  85. octavia/controller/queue/v2/consumer.py +1 -2
  86. octavia/controller/queue/v2/endpoints.py +1 -1
  87. octavia/controller/worker/amphora_rate_limit.py +6 -6
  88. octavia/controller/worker/task_utils.py +1 -1
  89. octavia/controller/worker/v2/controller_worker.py +3 -3
  90. octavia/controller/worker/v2/flows/amphora_flows.py +15 -4
  91. octavia/controller/worker/v2/flows/flow_utils.py +6 -5
  92. octavia/controller/worker/v2/flows/health_monitor_flows.py +1 -1
  93. octavia/controller/worker/v2/flows/l7policy_flows.py +1 -1
  94. octavia/controller/worker/v2/flows/l7rule_flows.py +1 -1
  95. octavia/controller/worker/v2/flows/listener_flows.py +18 -6
  96. octavia/controller/worker/v2/flows/load_balancer_flows.py +1 -1
  97. octavia/controller/worker/v2/flows/member_flows.py +12 -19
  98. octavia/controller/worker/v2/flows/pool_flows.py +1 -1
  99. octavia/controller/worker/v2/taskflow_jobboard_driver.py +17 -3
  100. octavia/controller/worker/v2/tasks/compute_tasks.py +1 -3
  101. octavia/controller/worker/v2/tasks/network_tasks.py +3 -4
  102. octavia/db/base_models.py +21 -9
  103. octavia/db/migration/alembic_migrations/versions/034756a182a2_amphora_add_image_id.py +2 -2
  104. octavia/db/migration/alembic_migrations/versions/034b2dc2f3e0_modernize_l7policy_fields.py +31 -31
  105. octavia/db/migration/alembic_migrations/versions/0f242cf02c74_add_provider_column.py +2 -2
  106. octavia/db/migration/alembic_migrations/versions/10d38216ad34_add_timestamps_to_amphora.py +4 -4
  107. octavia/db/migration/alembic_migrations/versions/11e4bb2bb8ef_fix_ipv6_vip.py +1 -1
  108. octavia/db/migration/alembic_migrations/versions/13500e2e978d_update_url_and_name_size.py +6 -6
  109. octavia/db/migration/alembic_migrations/versions/14892634e228_update_vip.py +5 -5
  110. octavia/db/migration/alembic_migrations/versions/186509101b9b_add_server_group_id_to_loadbalancer.py +2 -2
  111. octavia/db/migration/alembic_migrations/versions/1afc932f1ca2_l7rule_support_client_cert.py +3 -3
  112. octavia/db/migration/alembic_migrations/versions/1e4c1d83044c_keepalived_configuration_datamodel.py +26 -26
  113. octavia/db/migration/alembic_migrations/versions/2351ea316465_adding_terminate_https_tls_ref_support.py +4 -4
  114. octavia/db/migration/alembic_migrations/versions/256852d5ff7c_add_lb_network_ip_to_amphora.py +2 -2
  115. octavia/db/migration/alembic_migrations/versions/27e54d00c3cd_add_monitor_address_and_port_to_member.py +4 -4
  116. octavia/db/migration/alembic_migrations/versions/298eac0640a7_add_amphora_vrrp_port_id_and_ha_port_id.py +4 -4
  117. octavia/db/migration/alembic_migrations/versions/29ff921a6eb_shared_pools.py +3 -3
  118. octavia/db/migration/alembic_migrations/versions/2ad093f6353f_add_listener_client_ca_tls_certificate_.py +2 -2
  119. octavia/db/migration/alembic_migrations/versions/31f7653ded67_allow_multiple_vips_per_loadbalancer.py +10 -10
  120. octavia/db/migration/alembic_migrations/versions/32e5c35b26a8_add_l7policy_and_l7rule_quota.py +4 -4
  121. octavia/db/migration/alembic_migrations/versions/357d17a6d5ac_update_lb_and_amphora_data_model_for_.py +20 -20
  122. octavia/db/migration/alembic_migrations/versions/35dee79d5865_initial_create.py +185 -185
  123. octavia/db/migration/alembic_migrations/versions/36b94648fef8_add_timestamp.py +2 -2
  124. octavia/db/migration/alembic_migrations/versions/392fb85b4419_add_primary_key_to_spares_pool.py +1 -1
  125. octavia/db/migration/alembic_migrations/versions/3a1e1cdb7b27_rename_amphora_host_id.py +1 -1
  126. octavia/db/migration/alembic_migrations/versions/3b199c848b96_create_no_monitor_operational_status.py +1 -1
  127. octavia/db/migration/alembic_migrations/versions/3e5b37a0bdb9_add_vrrp_ip_and_ha_ip_to_amphora.py +4 -4
  128. octavia/db/migration/alembic_migrations/versions/3f8ff3be828e_create_quotas_table.py +12 -12
  129. octavia/db/migration/alembic_migrations/versions/43287cd10fef_make_pool_lb_algorithm_larger.py +6 -6
  130. octavia/db/migration/alembic_migrations/versions/443fe6676637_add_network_id_to_vip.py +2 -2
  131. octavia/db/migration/alembic_migrations/versions/44a2414dd683_adding_name_column_to_member_and_health_.py +1 -1
  132. octavia/db/migration/alembic_migrations/versions/458c9ee2a011_l7_policies_and_rules.py +57 -57
  133. octavia/db/migration/alembic_migrations/versions/46d914b2a5e5_seed_the_spares_pool_table.py +2 -2
  134. octavia/db/migration/alembic_migrations/versions/48660b6643f0_add_new_states_for_amphora.py +3 -3
  135. octavia/db/migration/alembic_migrations/versions/4aeb9e23ad43_add_draining_operating_status.py +1 -1
  136. octavia/db/migration/alembic_migrations/versions/4c094013699a_update_load_balancer_amphora.py +9 -9
  137. octavia/db/migration/alembic_migrations/versions/4f65b4f91c39_amphora_add_flavor_id.py +2 -2
  138. octavia/db/migration/alembic_migrations/versions/4faaa983e7a9_update_member_address_column.py +1 -1
  139. octavia/db/migration/alembic_migrations/versions/4fe8240425b4_update_vip_add_subnet_id.py +2 -2
  140. octavia/db/migration/alembic_migrations/versions/52377704420e_add_timestamps_to_healthmonitor.py +9 -9
  141. octavia/db/migration/alembic_migrations/versions/5309960964f8_add_proxy_protocol_for_pool.py +3 -3
  142. octavia/db/migration/alembic_migrations/versions/543f5d8e4e56_add_a_column_busy_in_table_amphora_health.py +2 -2
  143. octavia/db/migration/alembic_migrations/versions/55874a4ceed6_add_l7policy_action_redirect_prefix.py +5 -5
  144. octavia/db/migration/alembic_migrations/versions/5a3ee5472c31_add_cert_expiration__infor_in_amphora_table.py +4 -4
  145. octavia/db/migration/alembic_migrations/versions/62816c232310_fix_migration_for_mysql_5_7.py +1 -1
  146. octavia/db/migration/alembic_migrations/versions/6742ca1b27c2_add_l7policy_redirect_http_code.py +2 -2
  147. octavia/db/migration/alembic_migrations/versions/6ac558d7fc21_add_prometheus_listener_protocol.py +3 -3
  148. octavia/db/migration/alembic_migrations/versions/6ffc710674ef_spares_pool_table.py +2 -2
  149. octavia/db/migration/alembic_migrations/versions/7432f1d4ea83_add_http_host_head_inject_for_http_health_check.py +4 -4
  150. octavia/db/migration/alembic_migrations/versions/74aae261694c_extend_pool_for_backend_ca_and_crl.py +4 -4
  151. octavia/db/migration/alembic_migrations/versions/76aacf2e176c_extend_support_udp_protocol.py +3 -3
  152. octavia/db/migration/alembic_migrations/versions/80dba23a159f_tags_support.py +3 -3
  153. octavia/db/migration/alembic_migrations/versions/82b9402e71fd_update_vip_address_size.py +1 -1
  154. octavia/db/migration/alembic_migrations/versions/8ac4ed24df3a_add_availability_zone_to_lb.py +4 -4
  155. octavia/db/migration/alembic_migrations/versions/8b47b2546312_sctp_support.py +2 -2
  156. octavia/db/migration/alembic_migrations/versions/8c0851bdf6c3_change_tls_container_id_length_in_sni_.py +1 -1
  157. octavia/db/migration/alembic_migrations/versions/92fe9857279_create_healthmanager_table.py +3 -3
  158. octavia/db/migration/alembic_migrations/versions/9b5473976d6d_add_provisioning_status_to_objects.py +10 -10
  159. octavia/db/migration/alembic_migrations/versions/a1f689aecc1d_extend_pool_for_support_backend_reencryption.py +2 -2
  160. octavia/db/migration/alembic_migrations/versions/a7f187cd221f_add_tls_boolean_type_for_reencryption.py +2 -2
  161. octavia/db/migration/alembic_migrations/versions/b9c703669314_add_flavor_and_flavor_profile_table.py +18 -18
  162. octavia/db/migration/alembic_migrations/versions/ba35e0fb88e1_add_backup_field_to_member.py +2 -2
  163. octavia/db/migration/alembic_migrations/versions/bf171d0d91c3_amphora_add_cached_zone.py +2 -2
  164. octavia/db/migration/alembic_migrations/versions/c761c8a71579_add_availability_zone_table.py +15 -15
  165. octavia/db/migration/alembic_migrations/versions/d85ca7258d21_modernize_l7rule.py +13 -13
  166. octavia/db/migration/alembic_migrations/versions/da371b422669_allowed_cidr_for_listeners.py +7 -7
  167. octavia/db/migration/alembic_migrations/versions/dcf88e59aae4_add_lb_algorithm_source_ip_port.py +3 -3
  168. octavia/db/migration/alembic_migrations/versions/e37941b010db_add_lb_flavor_constraint.py +11 -11
  169. octavia/db/migration/alembic_migrations/versions/e6672bda93bf_add_ping_and_tlshello_monitor_types.py +3 -3
  170. octavia/db/migration/alembic_migrations/versions/e6ee84f0abf3_add_proxy_v2_pool_protocol.py +3 -3
  171. octavia/db/migration/alembic_migrations/versions/ebbcc72b4e5e_add_octavia_owned_vip_column_to_vip_.py +2 -2
  172. octavia/db/migration/alembic_migrations/versions/f21ae3f21adc_add_client_auth_option.py +6 -6
  173. octavia/db/migration/alembic_migrations/versions/fc5582da7d8a_create_amphora_build_rate_limit_tables.py +11 -11
  174. octavia/db/migration/alembic_migrations/versions/ffad172e98c1_add_certificate_revoke_list_option.py +2 -2
  175. octavia/db/models.py +1 -1
  176. octavia/db/repositories.py +3 -3
  177. octavia/distributor/drivers/driver_base.py +1 -1
  178. octavia/distributor/drivers/noop_driver/driver.py +1 -1
  179. octavia/hacking/checks.py +4 -4
  180. octavia/image/drivers/noop_driver/driver.py +1 -1
  181. octavia/image/image_base.py +1 -1
  182. octavia/network/base.py +1 -1
  183. octavia/network/drivers/neutron/allowed_address_pairs.py +11 -9
  184. octavia/network/drivers/neutron/base.py +3 -3
  185. octavia/network/drivers/noop_driver/driver.py +1 -1
  186. octavia/policies/amphora.py +6 -12
  187. octavia/policies/availability_zone.py +5 -10
  188. octavia/policies/availability_zone_profile.py +5 -15
  189. octavia/policies/base.py +1 -20
  190. octavia/policies/flavor.py +5 -10
  191. octavia/policies/flavor_profile.py +5 -10
  192. octavia/policies/healthmonitor.py +6 -12
  193. octavia/policies/l7policy.py +6 -12
  194. octavia/policies/l7rule.py +5 -10
  195. octavia/policies/listener.py +7 -14
  196. octavia/policies/loadbalancer.py +9 -18
  197. octavia/policies/member.py +5 -10
  198. octavia/policies/pool.py +6 -12
  199. octavia/policies/provider.py +1 -2
  200. octavia/policies/provider_availability_zone.py +1 -3
  201. octavia/policies/provider_flavor.py +1 -2
  202. octavia/policies/quota.py +6 -12
  203. octavia/statistics/stats_base.py +1 -1
  204. octavia/tests/common/constants.py +1 -1
  205. octavia/tests/common/data_model_helpers.py +10 -10
  206. octavia/tests/common/sample_data_models.py +1 -1
  207. octavia/tests/common/sample_haproxy_prometheus +17 -17
  208. octavia/tests/common/sample_octavia_prometheus +6 -6
  209. octavia/tests/common/utils.py +2 -2
  210. octavia/tests/functional/amphorae/backend/agent/api_server/test_keepalivedlvs.py +36 -62
  211. octavia/tests/functional/amphorae/backend/agent/api_server/test_server.py +135 -296
  212. octavia/tests/functional/api/drivers/driver_agent/test_driver_agent.py +10 -11
  213. octavia/tests/functional/api/v2/base.py +2 -3
  214. octavia/tests/functional/api/v2/test_amphora.py +6 -6
  215. octavia/tests/functional/api/v2/test_availability_zone_profiles.py +13 -14
  216. octavia/tests/functional/api/v2/test_availability_zones.py +19 -19
  217. octavia/tests/functional/api/v2/test_flavor_profiles.py +19 -20
  218. octavia/tests/functional/api/v2/test_flavors.py +25 -25
  219. octavia/tests/functional/api/v2/test_health_monitor.py +35 -18
  220. octavia/tests/functional/api/v2/test_l7policy.py +11 -11
  221. octavia/tests/functional/api/v2/test_l7rule.py +19 -20
  222. octavia/tests/functional/api/v2/test_listener.py +26 -28
  223. octavia/tests/functional/api/v2/test_load_balancer.py +17 -17
  224. octavia/tests/functional/api/v2/test_member.py +53 -21
  225. octavia/tests/functional/api/v2/test_pool.py +11 -11
  226. octavia/tests/functional/api/v2/test_provider.py +7 -7
  227. octavia/tests/functional/api/v2/test_quotas.py +9 -9
  228. octavia/tests/functional/db/test_models.py +1 -1
  229. octavia/tests/functional/db/test_repositories.py +2 -2
  230. octavia/tests/unit/amphorae/backends/agent/api_server/test_amphora_info.py +60 -61
  231. octavia/tests/unit/amphorae/backends/agent/api_server/test_keepalived.py +3 -3
  232. octavia/tests/unit/amphorae/backends/agent/api_server/test_keepalivedlvs.py +1 -19
  233. octavia/tests/unit/amphorae/backends/agent/api_server/test_loadbalancer.py +94 -34
  234. octavia/tests/unit/amphorae/backends/agent/api_server/test_osutils.py +19 -21
  235. octavia/tests/unit/amphorae/backends/agent/api_server/test_plug.py +9 -11
  236. octavia/tests/unit/amphorae/backends/agent/api_server/test_util.py +11 -25
  237. octavia/tests/unit/amphorae/backends/agent/test_agent_jinja_cfg.py +0 -13
  238. octavia/tests/unit/amphorae/backends/health_daemon/test_health_daemon.py +10 -10
  239. octavia/tests/unit/amphorae/backends/utils/test_haproxy_query.py +1 -1
  240. octavia/tests/unit/amphorae/backends/utils/test_interface.py +33 -94
  241. octavia/tests/unit/amphorae/backends/utils/test_interface_file.py +32 -32
  242. octavia/tests/unit/amphorae/backends/utils/test_network_namespace.py +4 -6
  243. octavia/tests/unit/amphorae/backends/utils/test_nftable_utils.py +28 -22
  244. octavia/tests/unit/amphorae/drivers/haproxy/test_rest_api_driver_1_0.py +77 -118
  245. octavia/tests/unit/amphorae/drivers/health/test_heartbeat_udp.py +8 -8
  246. octavia/tests/unit/amphorae/drivers/keepalived/jinja/test_jinja_cfg.py +0 -4
  247. octavia/tests/unit/api/common/test_pagination.py +84 -14
  248. octavia/tests/unit/api/v2/types/test_availability_zone_profile.py +1 -1
  249. octavia/tests/unit/api/v2/types/test_availability_zones.py +1 -1
  250. octavia/tests/unit/api/v2/types/test_flavor_profile.py +1 -1
  251. octavia/tests/unit/api/v2/types/test_flavors.py +1 -1
  252. octavia/tests/unit/api/v2/types/test_health_monitor.py +1 -1
  253. octavia/tests/unit/api/v2/types/test_listener.py +1 -1
  254. octavia/tests/unit/api/v2/types/test_load_balancer.py +1 -1
  255. octavia/tests/unit/api/v2/types/test_pool.py +1 -1
  256. octavia/tests/unit/base.py +1 -0
  257. octavia/tests/unit/certificates/generator/local_csr.py +1 -1
  258. octavia/tests/unit/certificates/generator/test_local.py +5 -5
  259. octavia/tests/unit/certificates/manager/test_barbican.py +2 -3
  260. octavia/tests/unit/certificates/manager/test_barbican_legacy.py +1 -1
  261. octavia/tests/unit/certificates/manager/test_local.py +13 -14
  262. octavia/tests/unit/cmd/test_health_checker.py +1 -1
  263. octavia/tests/unit/cmd/test_prometheus_proxy.py +8 -1
  264. octavia/tests/unit/common/jinja/haproxy/combined_listeners/test_jinja_cfg.py +171 -216
  265. octavia/tests/unit/common/jinja/logging/test_logging_jinja_cfg.py +1 -1
  266. octavia/tests/unit/common/sample_configs/sample_configs_combined.py +1 -2
  267. octavia/tests/unit/common/test_base_taskflow.py +1 -1
  268. octavia/tests/unit/common/test_decorators.py +2 -2
  269. octavia/tests/unit/common/test_policy.py +3 -6
  270. octavia/tests/unit/common/tls_utils/test_cert_parser.py +4 -1
  271. octavia/tests/unit/controller/worker/v2/flows/test_listener_flows.py +10 -15
  272. octavia/tests/unit/controller/worker/v2/flows/test_load_balancer_flows.py +4 -6
  273. octavia/tests/unit/controller/worker/v2/tasks/test_network_tasks.py +6 -2
  274. octavia/tests/unit/controller/worker/v2/tasks/test_retry_tasks.py +1 -1
  275. octavia/tests/unit/controller/worker/v2/test_controller_worker.py +56 -1
  276. octavia/tests/unit/controller/worker/v2/test_taskflow_jobboard_driver.py +348 -0
  277. octavia/tests/unit/hacking/test_checks.py +3 -3
  278. octavia/tests/unit/image/drivers/noop_driver/test_driver.py +1 -1
  279. octavia/tests/unit/image/drivers/test_glance_driver.py +1 -1
  280. octavia/tests/unit/network/drivers/neutron/test_base.py +1 -1
  281. octavia/tests/unit/statistics/drivers/test_update_db.py +1 -1
  282. octavia/tests/unit/statistics/test_stats_base.py +1 -1
  283. octavia/volume/drivers/noop_driver/driver.py +1 -1
  284. octavia/volume/volume_base.py +1 -1
  285. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.dist-info}/AUTHORS +6 -0
  286. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.dist-info}/METADATA +3 -5
  287. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.dist-info}/RECORD +302 -305
  288. octavia-15.0.0.dist-info/pbr.json +1 -0
  289. octavia/amphorae/backends/agent/api_server/templates/keepalived.sysvinit.j2 +0 -87
  290. octavia/amphorae/backends/agent/api_server/templates/keepalived.upstart.j2 +0 -29
  291. octavia/amphorae/backends/agent/api_server/templates/sysvinit.conf.j2 +0 -232
  292. octavia/amphorae/backends/agent/api_server/templates/upstart.conf.j2 +0 -71
  293. octavia-14.0.0.0rc1.dist-info/pbr.json +0 -1
  294. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/LICENSE +0 -0
  295. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/README.rst +0 -0
  296. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/README.rst +0 -0
  297. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/diskimage-create.sh +0 -0
  298. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/image-tests.sh +0 -0
  299. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/requirements.txt +0 -0
  300. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/test-requirements.txt +0 -0
  301. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/tox.ini +0 -0
  302. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/version.txt +0 -0
  303. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/scripts/octavia-wsgi +0 -0
  304. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.dist-info}/LICENSE +0 -0
  305. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.dist-info}/WHEEL +0 -0
  306. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.dist-info}/entry_points.txt +0 -0
  307. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.dist-info}/top_level.txt +0 -0
@@ -103,6 +103,16 @@ class TestPaginationHelper(base.TestCase):
103
103
  helper.apply(query_mock, models.LoadBalancer)
104
104
  self.assertEqual(params, helper.filters)
105
105
 
106
+ @mock.patch('octavia.api.common.pagination.request')
107
+ def test_filter_with_booleans(self, request_mock):
108
+ params = {'backup': 'True', 'admin_state_up': 'false'}
109
+ expected_params = {'backup': True, 'enabled': False}
110
+ helper = pagination.PaginationHelper(params)
111
+ query_mock = mock.MagicMock()
112
+
113
+ helper.apply(query_mock, models.Member)
114
+ self.assertEqual(expected_params, helper.filters)
115
+
106
116
  @mock.patch('octavia.api.common.pagination.request')
107
117
  def test_filter_mismatched_params(self, request_mock):
108
118
  params = {
@@ -180,11 +190,8 @@ class TestPaginationHelper(base.TestCase):
180
190
  self.assertEqual(links[0].rel, "next")
181
191
  self.assertEqual(
182
192
  links[0].href,
183
- "{path_url}?limit={limit}&marker={marker}".format(
184
- path_url=request_mock.path_url,
185
- limit=params['limit'],
186
- marker=member1.id
187
- ))
193
+ f"{request_mock.path_url}?limit={params['limit']}&"
194
+ f"marker={member1.id}")
188
195
 
189
196
  @mock.patch('octavia.api.common.pagination.request')
190
197
  def test_make_links_prev(self, request_mock):
@@ -200,17 +207,13 @@ class TestPaginationHelper(base.TestCase):
200
207
  self.assertEqual(links[0].rel, "previous")
201
208
  self.assertEqual(
202
209
  links[1].href,
203
- "{path_url}?limit={limit}&marker={marker}".format(
204
- path_url=request_mock.path_url,
205
- limit=params['limit'],
206
- marker=member1.id))
210
+ f"{request_mock.path_url}?limit={params['limit']}&"
211
+ f"marker={member1.id}")
207
212
  self.assertEqual(links[1].rel, "next")
208
213
  self.assertEqual(
209
214
  links[1].href,
210
- "{path_url}?limit={limit}&marker={marker}".format(
211
- path_url=request_mock.path_url,
212
- limit=params['limit'],
213
- marker=member1.id))
215
+ f"{request_mock.path_url}?limit={params['limit']}&"
216
+ f"marker={member1.id}")
214
217
 
215
218
  @mock.patch('octavia.api.common.pagination.request')
216
219
  def test_make_links_with_configured_url(self, request_mock):
@@ -227,12 +230,46 @@ class TestPaginationHelper(base.TestCase):
227
230
  helper = pagination.PaginationHelper(params)
228
231
  links = helper._make_links(model_list)
229
232
  self.assertEqual(links[0].rel, "previous")
233
+ self.assertEqual(
234
+ links[0].href,
235
+ ("{base_uri}{path}?limit={limit}&marker={marker}"
236
+ "&page_reverse=True").format(
237
+ base_uri=api_base_uri,
238
+ path=request_mock.path,
239
+ limit=params['limit'],
240
+ marker=member1.id
241
+ ))
242
+ self.assertEqual(links[1].rel, "next")
230
243
  self.assertEqual(
231
244
  links[1].href,
232
245
  "{base_uri}{path}?limit={limit}&marker={marker}".format(
233
246
  base_uri=api_base_uri,
234
247
  path=request_mock.path,
235
248
  limit=params['limit'],
249
+ marker=member1.id))
250
+
251
+ @mock.patch('octavia.api.common.pagination.request')
252
+ def test_make_links_with_zero_limit(self, request_mock):
253
+ request_mock.path = "/lbaas/v2/pools/1/members"
254
+ request_mock.path_url = "http://localhost" + request_mock.path
255
+ api_base_uri = "https://127.0.0.1"
256
+ conf = self.useFixture(oslo_fixture.Config(cfg.CONF))
257
+ conf.config(group='api_settings', api_base_uri=api_base_uri)
258
+ member1 = models.Member()
259
+ member1.id = uuidutils.generate_uuid()
260
+ model_list = [member1]
261
+
262
+ params = {'limit': 0, 'marker': member1.id}
263
+ helper = pagination.PaginationHelper(params)
264
+ links = helper._make_links(model_list)
265
+ self.assertEqual(links[0].rel, "previous")
266
+ self.assertEqual(
267
+ links[0].href,
268
+ ("{base_uri}{path}?limit={limit}&marker={marker}"
269
+ "&page_reverse=True").format(
270
+ base_uri=api_base_uri,
271
+ path=request_mock.path,
272
+ limit=None,
236
273
  marker=member1.id
237
274
  ))
238
275
  self.assertEqual(links[1].rel, "next")
@@ -241,5 +278,38 @@ class TestPaginationHelper(base.TestCase):
241
278
  "{base_uri}{path}?limit={limit}&marker={marker}".format(
242
279
  base_uri=api_base_uri,
243
280
  path=request_mock.path,
244
- limit=params['limit'],
281
+ limit=None,
282
+ marker=member1.id))
283
+
284
+ @mock.patch('octavia.api.common.pagination.request')
285
+ def test_make_links_with_negative_limit(self, request_mock):
286
+ request_mock.path = "/lbaas/v2/pools/1/members"
287
+ request_mock.path_url = "http://localhost" + request_mock.path
288
+ api_base_uri = "https://127.0.0.1"
289
+ conf = self.useFixture(oslo_fixture.Config(cfg.CONF))
290
+ conf.config(group='api_settings', api_base_uri=api_base_uri)
291
+ member1 = models.Member()
292
+ member1.id = uuidutils.generate_uuid()
293
+ model_list = [member1]
294
+
295
+ params = {'limit': -1, 'marker': member1.id}
296
+ helper = pagination.PaginationHelper(params)
297
+ links = helper._make_links(model_list)
298
+ self.assertEqual(links[0].rel, "previous")
299
+ self.assertEqual(
300
+ links[0].href,
301
+ ("{base_uri}{path}?limit={limit}&marker={marker}"
302
+ "&page_reverse=True").format(
303
+ base_uri=api_base_uri,
304
+ path=request_mock.path,
305
+ limit=None,
306
+ marker=member1.id
307
+ ))
308
+ self.assertEqual(links[1].rel, "next")
309
+ self.assertEqual(
310
+ links[1].href,
311
+ "{base_uri}{path}?limit={limit}&marker={marker}".format(
312
+ base_uri=api_base_uri,
313
+ path=request_mock.path,
314
+ limit=None,
245
315
  marker=member1.id))
@@ -20,7 +20,7 @@ from octavia.common import constants
20
20
  from octavia.tests.unit.api.common import base
21
21
 
22
22
 
23
- class TestAvailabilityZoneProfile(object):
23
+ class TestAvailabilityZoneProfile:
24
24
 
25
25
  _type = None
26
26
 
@@ -20,7 +20,7 @@ from octavia.api.v2.types import availability_zones as availability_zone_type
20
20
  from octavia.tests.unit.api.common import base
21
21
 
22
22
 
23
- class TestAvailabilityZone(object):
23
+ class TestAvailabilityZone:
24
24
 
25
25
  _type = None
26
26
 
@@ -20,7 +20,7 @@ from octavia.common import constants
20
20
  from octavia.tests.unit.api.common import base
21
21
 
22
22
 
23
- class TestFlavorProfile(object):
23
+ class TestFlavorProfile:
24
24
 
25
25
  _type = None
26
26
 
@@ -20,7 +20,7 @@ from octavia.api.v2.types import flavors as flavor_type
20
20
  from octavia.tests.unit.api.common import base
21
21
 
22
22
 
23
- class TestFlavor(object):
23
+ class TestFlavor:
24
24
 
25
25
  _type = None
26
26
 
@@ -22,7 +22,7 @@ from octavia.common import constants
22
22
  from octavia.tests.unit.api.v2.types import base
23
23
 
24
24
 
25
- class TestHealthMonitor(object):
25
+ class TestHealthMonitor:
26
26
 
27
27
  _type = None
28
28
 
@@ -22,7 +22,7 @@ from octavia.common import constants
22
22
  from octavia.tests.unit.api.common import base
23
23
 
24
24
 
25
- class TestListener(object):
25
+ class TestListener:
26
26
 
27
27
  _type = None
28
28
 
@@ -21,7 +21,7 @@ from octavia.api.v2.types import load_balancer as lb_type
21
21
  from octavia.tests.unit.api.common import base
22
22
 
23
23
 
24
- class TestLoadBalancer(object):
24
+ class TestLoadBalancer:
25
25
 
26
26
  _type = None
27
27
 
@@ -26,7 +26,7 @@ from octavia.common import data_models
26
26
  from octavia.tests.unit.api.common import base
27
27
 
28
28
 
29
- class TestSessionPersistence(object):
29
+ class TestSessionPersistence:
30
30
 
31
31
  _type = None
32
32
 
@@ -35,6 +35,7 @@ class TestCase(testtools.TestCase):
35
35
  config.register_cli_opts()
36
36
  self.addCleanup(mock.patch.stopall)
37
37
  self.addCleanup(self.clean_caches)
38
+ self.addCleanup(cfg.CONF.reset)
38
39
 
39
40
  self.warning_fixture = self.useFixture(oc_fixtures.WarningsFixture())
40
41
 
@@ -34,7 +34,7 @@ class BaseLocalCSRTestCase(base.TestCase):
34
34
  )
35
35
  csr = x509.CertificateSigningRequestBuilder().subject_name(
36
36
  x509.Name([
37
- x509.NameAttribute(x509.oid.NameOID.COMMON_NAME, u"test"),
37
+ x509.NameAttribute(x509.oid.NameOID.COMMON_NAME, "test"),
38
38
  ])).sign(csr_key, hashes.SHA256(), backends.default_backend())
39
39
  self.certificate_signing_request = csr.public_bytes(
40
40
  serialization.Encoding.PEM)
@@ -39,13 +39,13 @@ class TestLocalGenerator(local_csr.BaseLocalCSRTestCase):
39
39
  ca_cert = ca_cert.not_valid_after(valid_until_datetime)
40
40
  ca_cert = ca_cert.serial_number(1)
41
41
  subject_name = x509.Name([
42
- x509.NameAttribute(x509.oid.NameOID.COUNTRY_NAME, u"US"),
42
+ x509.NameAttribute(x509.oid.NameOID.COUNTRY_NAME, "US"),
43
43
  x509.NameAttribute(x509.oid.NameOID.STATE_OR_PROVINCE_NAME,
44
- u"Oregon"),
45
- x509.NameAttribute(x509.oid.NameOID.LOCALITY_NAME, u"Springfield"),
44
+ "Oregon"),
45
+ x509.NameAttribute(x509.oid.NameOID.LOCALITY_NAME, "Springfield"),
46
46
  x509.NameAttribute(x509.oid.NameOID.ORGANIZATION_NAME,
47
- u"Springfield Nuclear Power Plant"),
48
- x509.NameAttribute(x509.oid.NameOID.COMMON_NAME, u"maggie1"),
47
+ "Springfield Nuclear Power Plant"),
48
+ x509.NameAttribute(x509.oid.NameOID.COMMON_NAME, "maggie1"),
49
49
  ])
50
50
  ca_cert = ca_cert.subject_name(subject_name)
51
51
  ca_cert = ca_cert.issuer_name(subject_name)
@@ -34,9 +34,8 @@ class TestBarbicanManager(base.TestCase):
34
34
  self.barbican_endpoint = 'http://localhost:9311/v1'
35
35
  self.secret_uuid = uuid.uuid4()
36
36
 
37
- self.secret_ref = '{0}/secrets/{1}'.format(
38
- self.barbican_endpoint, self.secret_uuid
39
- )
37
+ self.secret_ref = (f'{self.barbican_endpoint}/secrets/'
38
+ f'{self.secret_uuid}')
40
39
 
41
40
  self.name = 'My Fancy Cert'
42
41
  self.secret_pkcs12 = secrets.Secret(
@@ -39,7 +39,7 @@ class TestBarbicanManager(base.TestCase):
39
39
  self.private_key_uuid = uuidutils.generate_uuid()
40
40
  self.private_key_passphrase_uuid = uuidutils.generate_uuid()
41
41
 
42
- self.container_ref = '{0}/containers/{1}'.format(
42
+ self.container_ref = '{}/containers/{}'.format(
43
43
  self.barbican_endpoint, self.container_uuid
44
44
  )
45
45
 
@@ -62,13 +62,13 @@ class TestLocalManager(base.TestCase):
62
62
  mode = stat.S_IRUSR | stat.S_IWUSR # mode 0600
63
63
  open_mock.assert_has_calls([
64
64
  mock.call(
65
- os.path.join('/tmp/{0}.crt'.format(cert_id)), flags, mode),
65
+ os.path.join(f'/tmp/{cert_id}.crt'), flags, mode),
66
66
  mock.call(
67
- os.path.join('/tmp/{0}.key'.format(cert_id)), flags, mode),
67
+ os.path.join(f'/tmp/{cert_id}.key'), flags, mode),
68
68
  mock.call(
69
- os.path.join('/tmp/{0}.int'.format(cert_id)), flags, mode),
69
+ os.path.join(f'/tmp/{cert_id}.int'), flags, mode),
70
70
  mock.call(
71
- os.path.join('/tmp/{0}.pass'.format(cert_id)), flags, mode)
71
+ os.path.join(f'/tmp/{cert_id}.pass'), flags, mode)
72
72
  ], any_order=True)
73
73
 
74
74
  # Verify the writes were made
@@ -98,10 +98,10 @@ class TestLocalManager(base.TestCase):
98
98
  # Verify the correct files were opened
99
99
  flags = os.O_RDONLY
100
100
  open_mock.assert_has_calls([
101
- mock.call(os.path.join('/tmp/{0}.crt'.format(cert_id)), flags),
102
- mock.call(os.path.join('/tmp/{0}.key'.format(cert_id)), flags),
103
- mock.call(os.path.join('/tmp/{0}.int'.format(cert_id)), flags),
104
- mock.call(os.path.join('/tmp/{0}.pass'.format(cert_id)), flags)
101
+ mock.call(os.path.join(f'/tmp/{cert_id}.crt'), flags),
102
+ mock.call(os.path.join(f'/tmp/{cert_id}.key'), flags),
103
+ mock.call(os.path.join(f'/tmp/{cert_id}.int'), flags),
104
+ mock.call(os.path.join(f'/tmp/{cert_id}.pass'), flags)
105
105
  ], any_order=True)
106
106
 
107
107
  # The returned data should be a Cert object
@@ -117,10 +117,10 @@ class TestLocalManager(base.TestCase):
117
117
 
118
118
  # Verify the correct files were removed
119
119
  remove_mock.assert_has_calls([
120
- mock.call(os.path.join('/tmp/{0}.crt'.format(cert_id))),
121
- mock.call(os.path.join('/tmp/{0}.key'.format(cert_id))),
122
- mock.call(os.path.join('/tmp/{0}.int'.format(cert_id))),
123
- mock.call(os.path.join('/tmp/{0}.pass'.format(cert_id)))
120
+ mock.call(os.path.join(f'/tmp/{cert_id}.crt')),
121
+ mock.call(os.path.join(f'/tmp/{cert_id}.key')),
122
+ mock.call(os.path.join(f'/tmp/{cert_id}.int')),
123
+ mock.call(os.path.join(f'/tmp/{cert_id}.pass'))
124
124
  ], any_order=True)
125
125
 
126
126
  def test_store_cert(self):
@@ -151,8 +151,7 @@ class TestLocalManager(base.TestCase):
151
151
 
152
152
  # Verify the correct files were opened
153
153
  flags = os.O_RDONLY
154
- open_mock.assert_called_once_with('/tmp/{0}.crt'.format(secret_id),
155
- flags)
154
+ open_mock.assert_called_once_with(f'/tmp/{secret_id}.crt', flags)
156
155
 
157
156
  # Test failure path
158
157
  with mock.patch('os.open', open_mock), mock.patch.object(
@@ -28,7 +28,7 @@ CONF = cfg.CONF
28
28
  class TestHealthCheckerCMD(base.TestCase):
29
29
 
30
30
  def setUp(self):
31
- super(TestHealthCheckerCMD, self).setUp()
31
+ super().setUp()
32
32
  self.CONF = self.useFixture(oslo_fixture.Config(cfg.CONF))
33
33
 
34
34
  def test_crc32c(self):
@@ -147,6 +147,7 @@ class TestPrometheusProxyCMD(base.TestCase):
147
147
  mock_http.shutdown.assert_called_once()
148
148
 
149
149
  @mock.patch('threading.Thread')
150
+ @mock.patch('http.server.ThreadingHTTPServer.__init__')
150
151
  @mock.patch('http.server.ThreadingHTTPServer.serve_forever')
151
152
  @mock.patch('octavia.amphorae.backends.utils.network_namespace.'
152
153
  'NetworkNamespace.__exit__')
@@ -155,12 +156,18 @@ class TestPrometheusProxyCMD(base.TestCase):
155
156
  @mock.patch('octavia.cmd.prometheus_proxy.EXIT_EVENT')
156
157
  @mock.patch('octavia.cmd.prometheus_proxy.SignalHandler')
157
158
  def test_main(self, mock_signal_handler, mock_exit_event, mock_netns_enter,
158
- mock_netns_exit, mock_serve_forever, mock_thread):
159
+ mock_netns_exit, mock_serve_forever, mock_server_init,
160
+ mock_thread):
159
161
 
160
162
  mock_exit_event.is_set.side_effect = [False, False, True]
161
163
  mock_netns_enter.side_effect = [Exception('boom'), True]
162
164
 
165
+ mock_server_init.return_value = None
166
+
163
167
  prometheus_proxy.main()
164
168
 
165
169
  mock_signal_handler.assert_called_once()
170
+ mock_server_init.assert_called_once_with(
171
+ ('127.0.0.1', 9102),
172
+ prometheus_proxy.PrometheusProxy)
166
173
  mock_serve_forever.assert_called_once()