octavia 14.0.0__py3-none-any.whl → 15.0.0.0rc1__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.dist-info → octavia-15.0.0.0rc1.dist-info}/AUTHORS +6 -0
  286. {octavia-14.0.0.dist-info → octavia-15.0.0.0rc1.dist-info}/METADATA +3 -5
  287. {octavia-14.0.0.dist-info → octavia-15.0.0.0rc1.dist-info}/RECORD +302 -305
  288. octavia-15.0.0.0rc1.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.dist-info/pbr.json +0 -1
  294. {octavia-14.0.0.data → octavia-15.0.0.0rc1.data}/data/share/octavia/LICENSE +0 -0
  295. {octavia-14.0.0.data → octavia-15.0.0.0rc1.data}/data/share/octavia/README.rst +0 -0
  296. {octavia-14.0.0.data → octavia-15.0.0.0rc1.data}/data/share/octavia/diskimage-create/README.rst +0 -0
  297. {octavia-14.0.0.data → octavia-15.0.0.0rc1.data}/data/share/octavia/diskimage-create/diskimage-create.sh +0 -0
  298. {octavia-14.0.0.data → octavia-15.0.0.0rc1.data}/data/share/octavia/diskimage-create/image-tests.sh +0 -0
  299. {octavia-14.0.0.data → octavia-15.0.0.0rc1.data}/data/share/octavia/diskimage-create/requirements.txt +0 -0
  300. {octavia-14.0.0.data → octavia-15.0.0.0rc1.data}/data/share/octavia/diskimage-create/test-requirements.txt +0 -0
  301. {octavia-14.0.0.data → octavia-15.0.0.0rc1.data}/data/share/octavia/diskimage-create/tox.ini +0 -0
  302. {octavia-14.0.0.data → octavia-15.0.0.0rc1.data}/data/share/octavia/diskimage-create/version.txt +0 -0
  303. {octavia-14.0.0.data → octavia-15.0.0.0rc1.data}/scripts/octavia-wsgi +0 -0
  304. {octavia-14.0.0.dist-info → octavia-15.0.0.0rc1.dist-info}/LICENSE +0 -0
  305. {octavia-14.0.0.dist-info → octavia-15.0.0.0rc1.dist-info}/WHEEL +0 -0
  306. {octavia-14.0.0.dist-info → octavia-15.0.0.0rc1.dist-info}/entry_points.txt +0 -0
  307. {octavia-14.0.0.dist-info → octavia-15.0.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -558,6 +558,13 @@ class LoadBalancersController(base.BaseController):
558
558
  subnet_id=add_vip.subnet_id)
559
559
 
560
560
  if listeners or pools:
561
+ # expire_all is required here, it ensures that the loadbalancer
562
+ # will be re-fetched with its associated vip in _graph_create.
563
+ # without expire_all the vip attributes that have been updated
564
+ # just before this call may not be set correctly in the
565
+ # loadbalancer object.
566
+ lock_session.expire_all()
567
+
561
568
  db_pools, db_lists = self._graph_create(
562
569
  lock_session, db_lb, listeners, pools)
563
570
 
@@ -31,6 +31,7 @@ from octavia.common import data_models
31
31
  from octavia.common import exceptions
32
32
  from octavia.common import validate
33
33
  from octavia.db import prepare as db_prepare
34
+ from octavia.i18n import _
34
35
 
35
36
 
36
37
  LOG = logging.getLogger(__name__)
@@ -365,12 +366,21 @@ class MembersController(MemberController):
365
366
  # Find members that are brand new or updated
366
367
  new_members = []
367
368
  updated_members = []
369
+ updated_member_uniques = set()
368
370
  for m in members:
369
- if (m.address, m.protocol_port) not in old_member_uniques:
371
+ key = (m.address, m.protocol_port)
372
+ if key not in old_member_uniques:
370
373
  validate.ip_not_reserved(m.address)
371
374
  new_members.append(m)
372
375
  else:
373
- m.id = old_member_uniques[(m.address, m.protocol_port)]
376
+ m.id = old_member_uniques[key]
377
+ if key in updated_member_uniques:
378
+ LOG.error("Member %s is updated multiple times in "
379
+ "the same batch request.", m.id)
380
+ raise exceptions.ValidationException(
381
+ detail=_("Member must be updated only once in the "
382
+ "same request."))
383
+ updated_member_uniques.add(key)
374
384
  updated_members.append(m)
375
385
 
376
386
  # Find members that are deleted
@@ -47,7 +47,7 @@ class AmphoraResponse(BaseAmphoraType):
47
47
 
48
48
  @classmethod
49
49
  def from_data_model(cls, data_model, children=False):
50
- amphorae = super(AmphoraResponse, cls).from_data_model(
50
+ amphorae = super().from_data_model(
51
51
  data_model, children=children)
52
52
 
53
53
  return amphorae
@@ -31,8 +31,7 @@ class AvailabilityZoneProfileResponse(BaseAvailabilityZoneProfileType):
31
31
 
32
32
  @classmethod
33
33
  def from_data_model(cls, data_model, children=False):
34
- availability_zone_profile = super(
35
- AvailabilityZoneProfileResponse, cls).from_data_model(
34
+ availability_zone_profile = super().from_data_model(
36
35
  data_model, children=children)
37
36
  return availability_zone_profile
38
37
 
@@ -31,8 +31,7 @@ class AvailabilityZoneResponse(BaseAvailabilityZoneType):
31
31
 
32
32
  @classmethod
33
33
  def from_data_model(cls, data_model, children=False):
34
- availability_zone = super(
35
- AvailabilityZoneResponse, cls).from_data_model(
34
+ availability_zone = super().from_data_model(
36
35
  data_model, children=children)
37
36
  return availability_zone
38
37
 
@@ -31,7 +31,7 @@ class FlavorProfileResponse(BaseFlavorProfileType):
31
31
 
32
32
  @classmethod
33
33
  def from_data_model(cls, data_model, children=False):
34
- flavorprofile = super(FlavorProfileResponse, cls).from_data_model(
34
+ flavorprofile = super().from_data_model(
35
35
  data_model, children=children)
36
36
  return flavorprofile
37
37
 
@@ -32,7 +32,7 @@ class FlavorResponse(BaseFlavorType):
32
32
 
33
33
  @classmethod
34
34
  def from_data_model(cls, data_model, children=False):
35
- flavor = super(FlavorResponse, cls).from_data_model(
35
+ flavor = super().from_data_model(
36
36
  data_model, children=children)
37
37
  return flavor
38
38
 
@@ -50,7 +50,7 @@ class HealthMonitorResponse(BaseHealthMonitorType):
50
50
 
51
51
  @classmethod
52
52
  def from_data_model(cls, data_model, children=False):
53
- healthmonitor = super(HealthMonitorResponse, cls).from_data_model(
53
+ healthmonitor = super().from_data_model(
54
54
  data_model, children=children)
55
55
 
56
56
  if cls._full_response():
@@ -48,7 +48,7 @@ class L7PolicyResponse(BaseL7PolicyType):
48
48
 
49
49
  @classmethod
50
50
  def from_data_model(cls, data_model, children=False):
51
- policy = super(L7PolicyResponse, cls).from_data_model(
51
+ policy = super().from_data_model(
52
52
  data_model, children=children)
53
53
 
54
54
  if cls._full_response():
@@ -41,7 +41,7 @@ class L7RuleResponse(BaseL7Type):
41
41
 
42
42
  @classmethod
43
43
  def from_data_model(cls, data_model, children=False):
44
- rule = super(L7RuleResponse, cls).from_data_model(
44
+ rule = super().from_data_model(
45
45
  data_model, children=children)
46
46
  return rule
47
47
 
@@ -69,7 +69,7 @@ class ListenerResponse(BaseListenerType):
69
69
 
70
70
  @classmethod
71
71
  def from_data_model(cls, data_model, children=False):
72
- listener = super(ListenerResponse, cls).from_data_model(
72
+ listener = super().from_data_model(
73
73
  data_model, children=children)
74
74
 
75
75
  listener.sni_container_refs = [
@@ -274,7 +274,7 @@ class ListenerStatusResponse(BaseListenerType):
274
274
 
275
275
  @classmethod
276
276
  def from_data_model(cls, data_model, children=False):
277
- listener = super(ListenerStatusResponse, cls).from_data_model(
277
+ listener = super().from_data_model(
278
278
  data_model, children=children)
279
279
 
280
280
  pool_model = pool.PoolStatusResponse
@@ -297,7 +297,7 @@ class ListenerStatisticsResponse(BaseListenerType):
297
297
 
298
298
  @classmethod
299
299
  def from_data_model(cls, data_model, children=False):
300
- result = super(ListenerStatisticsResponse, cls).from_data_model(
300
+ result = super().from_data_model(
301
301
  data_model, children=children)
302
302
  return result
303
303
 
@@ -69,7 +69,7 @@ class LoadBalancerResponse(BaseLoadBalancerType):
69
69
 
70
70
  @classmethod
71
71
  def from_data_model(cls, data_model, children=False):
72
- result = super(LoadBalancerResponse, cls).from_data_model(
72
+ result = super().from_data_model(
73
73
  data_model, children=children)
74
74
  if data_model.vip:
75
75
  result.vip_subnet_id = data_model.vip.subnet_id
@@ -169,7 +169,7 @@ class LoadBalancerStatusResponse(BaseLoadBalancerType):
169
169
 
170
170
  @classmethod
171
171
  def from_data_model(cls, data_model, children=False):
172
- result = super(LoadBalancerStatusResponse, cls).from_data_model(
172
+ result = super().from_data_model(
173
173
  data_model, children=children)
174
174
  listener_model = listener.ListenerStatusResponse
175
175
  result.listeners = [
@@ -198,7 +198,7 @@ class LoadBalancerStatisticsResponse(BaseLoadBalancerType):
198
198
 
199
199
  @classmethod
200
200
  def from_data_model(cls, data_model, children=False):
201
- result = super(LoadBalancerStatisticsResponse, cls).from_data_model(
201
+ result = super().from_data_model(
202
202
  data_model, children=children)
203
203
  return result
204
204
 
@@ -45,7 +45,7 @@ class MemberResponse(BaseMemberType):
45
45
 
46
46
  @classmethod
47
47
  def from_data_model(cls, data_model, children=False):
48
- member = super(MemberResponse, cls).from_data_model(
48
+ member = super().from_data_model(
49
49
  data_model, children=children)
50
50
  return member
51
51
 
@@ -142,7 +142,7 @@ class MemberStatusResponse(BaseMemberType):
142
142
 
143
143
  @classmethod
144
144
  def from_data_model(cls, data_model, children=False):
145
- member = super(MemberStatusResponse, cls).from_data_model(
145
+ member = super().from_data_model(
146
146
  data_model, children=children)
147
147
 
148
148
  if not member.name:
@@ -96,7 +96,7 @@ class PoolResponse(BasePoolType):
96
96
 
97
97
  @classmethod
98
98
  def from_data_model(cls, data_model, children=False):
99
- pool = super(PoolResponse, cls).from_data_model(
99
+ pool = super().from_data_model(
100
100
  data_model, children=children)
101
101
  if data_model.session_persistence:
102
102
  pool.session_persistence = (
@@ -240,7 +240,7 @@ class PoolStatusResponse(BasePoolType):
240
240
 
241
241
  @classmethod
242
242
  def from_data_model(cls, data_model, children=False):
243
- pool = super(PoolStatusResponse, cls).from_data_model(
243
+ pool = super().from_data_model(
244
244
  data_model, children=children)
245
245
 
246
246
  member_model = member.MemberStatusResponse
@@ -56,7 +56,7 @@ class QuotaResponse(base.BaseType):
56
56
 
57
57
  @classmethod
58
58
  def from_data_model(cls, data_model, children=False):
59
- quotas = super(QuotaResponse, cls).from_data_model(
59
+ quotas = super().from_data_model(
60
60
  data_model, children=children)
61
61
  quotas.quota = QuotaBase.from_data_model(data_model)
62
62
  return quotas
@@ -83,7 +83,7 @@ class QuotaAllBase(base.BaseType):
83
83
 
84
84
  @classmethod
85
85
  def from_data_model(cls, data_model, children=False):
86
- quotas = super(QuotaAllBase, cls).from_data_model(
86
+ quotas = super().from_data_model(
87
87
  data_model, children=children)
88
88
  # For backwards compatibility, remove in T
89
89
  quotas.load_balancer = quotas.loadbalancer
@@ -61,7 +61,7 @@ class BarbicanCert(cert.Cert):
61
61
  return None
62
62
 
63
63
 
64
- class BarbicanAuth(object, metaclass=abc.ABCMeta):
64
+ class BarbicanAuth(metaclass=abc.ABCMeta):
65
65
  @abc.abstractmethod
66
66
  def get_barbican_client(self, project_id):
67
67
  """Creates a Barbican client object.
@@ -16,7 +16,7 @@
16
16
  import abc
17
17
 
18
18
 
19
- class Cert(object, metaclass=abc.ABCMeta):
19
+ class Cert(metaclass=abc.ABCMeta):
20
20
  """Base class to represent all certificates."""
21
21
 
22
22
  @abc.abstractmethod
@@ -19,7 +19,7 @@ Certificate Generator API
19
19
  import abc
20
20
 
21
21
 
22
- class CertGenerator(object, metaclass=abc.ABCMeta):
22
+ class CertGenerator(metaclass=abc.ABCMeta):
23
23
  """Base Cert Generator Interface
24
24
 
25
25
  A Certificate Generator is responsible for generating private keys,
@@ -47,9 +47,9 @@ class LocalCertGenerator(cert_gen.CertGenerator):
47
47
  try:
48
48
  with open(CONF.certificates.ca_certificate, 'rb') as fp:
49
49
  fp.read()
50
- except IOError as e:
50
+ except OSError as e:
51
51
  raise exceptions.CertificateGenerationException(
52
- msg="Failed to load CA Certificate {0}."
52
+ msg="Failed to load CA Certificate {}."
53
53
  .format(CONF.certificates.ca_certificate)
54
54
  ) from e
55
55
  if not ca_key:
@@ -57,9 +57,9 @@ class LocalCertGenerator(cert_gen.CertGenerator):
57
57
  try:
58
58
  with open(CONF.certificates.ca_private_key, 'rb') as fp:
59
59
  fp.read()
60
- except IOError as e:
60
+ except OSError as e:
61
61
  raise exceptions.CertificateGenerationException(
62
- msg="Failed to load CA Private Key {0}."
62
+ msg="Failed to load CA Private Key {}."
63
63
  .format(CONF.certificates.ca_private_key)
64
64
  ) from e
65
65
  if not ca_key_pass:
@@ -96,7 +96,7 @@ class LocalCertGenerator(cert_gen.CertGenerator):
96
96
  algorithm = getattr(hashes, ca_digest.upper())()
97
97
  except AttributeError as e:
98
98
  raise crypto_exceptions.UnsupportedAlgorithm(
99
- "Supplied digest method not found: %s" % ca_digest
99
+ f"Supplied digest method not found: {ca_digest}"
100
100
  ) from e
101
101
 
102
102
  if not ca_cert:
@@ -19,7 +19,7 @@ Certificate manager API
19
19
  import abc
20
20
 
21
21
 
22
- class CertManager(object, metaclass=abc.ABCMeta):
22
+ class CertManager(metaclass=abc.ABCMeta):
23
23
  """Base Cert Manager Interface
24
24
 
25
25
  A Cert Manager is responsible for managing certificates for TLS.
@@ -57,20 +57,20 @@ class LocalCertManager(cert_mgr.CertManager):
57
57
 
58
58
  LOG.info("Storing certificate data on the local filesystem.")
59
59
  try:
60
- filename_certificate = "{0}.crt".format(filename_base)
60
+ filename_certificate = f"{filename_base}.crt"
61
61
  flags = os.O_WRONLY | os.O_CREAT
62
62
  mode = stat.S_IRUSR | stat.S_IWUSR # mode 0600
63
63
  with os.fdopen(os.open(
64
64
  filename_certificate, flags, mode), 'w') as cert_file:
65
65
  cert_file.write(certificate)
66
66
 
67
- filename_private_key = "{0}.key".format(filename_base)
67
+ filename_private_key = f"{filename_base}.key"
68
68
  with os.fdopen(os.open(
69
69
  filename_private_key, flags, mode), 'w') as key_file:
70
70
  key_file.write(private_key)
71
71
 
72
72
  if intermediates:
73
- filename_intermediates = "{0}.int".format(filename_base)
73
+ filename_intermediates = f"{filename_base}.int"
74
74
  if isinstance(intermediates, bytes):
75
75
  intermediates = intermediates.decode('utf-8')
76
76
  with os.fdopen(os.open(
@@ -78,14 +78,14 @@ class LocalCertManager(cert_mgr.CertManager):
78
78
  int_file.write(intermediates)
79
79
 
80
80
  if private_key_passphrase:
81
- filename_pkp = "{0}.pass".format(filename_base)
81
+ filename_pkp = f"{filename_base}.pass"
82
82
  if isinstance(private_key_passphrase, bytes):
83
83
  private_key_passphrase = private_key_passphrase.decode(
84
84
  'utf-8')
85
85
  with os.fdopen(os.open(
86
86
  filename_pkp, flags, mode), 'w') as pass_file:
87
87
  pass_file.write(private_key_passphrase)
88
- except IOError as ioe:
88
+ except OSError as ioe:
89
89
  LOG.error("Failed to store certificate.")
90
90
  raise exceptions.CertificateStorageException(message=ioe.message)
91
91
 
@@ -106,10 +106,10 @@ class LocalCertManager(cert_mgr.CertManager):
106
106
 
107
107
  filename_base = os.path.join(CONF.certificates.storage_path, cert_ref)
108
108
 
109
- filename_certificate = "{0}.crt".format(filename_base)
110
- filename_private_key = "{0}.key".format(filename_base)
111
- filename_intermediates = "{0}.int".format(filename_base)
112
- filename_pkp = "{0}.pass".format(filename_base)
109
+ filename_certificate = f"{filename_base}.crt"
110
+ filename_private_key = f"{filename_base}.key"
111
+ filename_intermediates = f"{filename_base}.int"
112
+ filename_pkp = f"{filename_base}.pass"
113
113
 
114
114
  cert_data = {}
115
115
 
@@ -117,14 +117,14 @@ class LocalCertManager(cert_mgr.CertManager):
117
117
  try:
118
118
  with os.fdopen(os.open(filename_certificate, flags)) as cert_file:
119
119
  cert_data['certificate'] = cert_file.read()
120
- except IOError as e:
120
+ except OSError as e:
121
121
  LOG.error("Failed to read certificate for %s.", cert_ref)
122
122
  raise exceptions.CertificateStorageException(
123
123
  msg="Certificate could not be read.") from e
124
124
  try:
125
125
  with os.fdopen(os.open(filename_private_key, flags)) as key_file:
126
126
  cert_data['private_key'] = key_file.read()
127
- except IOError as e:
127
+ except OSError as e:
128
128
  LOG.error("Failed to read private key for %s", cert_ref)
129
129
  raise exceptions.CertificateStorageException(
130
130
  msg="Private Key could not be read.") from e
@@ -134,13 +134,13 @@ class LocalCertManager(cert_mgr.CertManager):
134
134
  cert_data['intermediates'] = int_file.read()
135
135
  cert_data['intermediates'] = list(
136
136
  cert_parser.get_intermediates_pems(cert_data['intermediates']))
137
- except IOError:
137
+ except OSError:
138
138
  pass
139
139
 
140
140
  try:
141
141
  with os.fdopen(os.open(filename_pkp, flags)) as pass_file:
142
142
  cert_data['private_key_passphrase'] = pass_file.read()
143
- except IOError:
143
+ except OSError:
144
144
  pass
145
145
 
146
146
  return local_common.LocalCert(**cert_data)
@@ -159,17 +159,17 @@ class LocalCertManager(cert_mgr.CertManager):
159
159
 
160
160
  filename_base = os.path.join(CONF.certificates.storage_path, cert_ref)
161
161
 
162
- filename_certificate = "{0}.crt".format(filename_base)
163
- filename_private_key = "{0}.key".format(filename_base)
164
- filename_intermediates = "{0}.int".format(filename_base)
165
- filename_pkp = "{0}.pass".format(filename_base)
162
+ filename_certificate = f"{filename_base}.crt"
163
+ filename_private_key = f"{filename_base}.key"
164
+ filename_intermediates = f"{filename_base}.int"
165
+ filename_pkp = f"{filename_base}.pass"
166
166
 
167
167
  try:
168
168
  os.remove(filename_certificate)
169
169
  os.remove(filename_private_key)
170
170
  os.remove(filename_intermediates)
171
171
  os.remove(filename_pkp)
172
- except IOError as ioe:
172
+ except OSError as ioe:
173
173
  LOG.error("Failed to delete certificate %s", cert_ref)
174
174
  raise exceptions.CertificateStorageException(message=ioe.message)
175
175
 
@@ -196,7 +196,7 @@ class LocalCertManager(cert_mgr.CertManager):
196
196
  filename_base = os.path.join(CONF.certificates.storage_path,
197
197
  secret_ref)
198
198
 
199
- filename_secret = "{0}.crt".format(filename_base)
199
+ filename_secret = f"{filename_base}.crt"
200
200
 
201
201
  secret_data = None
202
202
 
@@ -204,7 +204,7 @@ class LocalCertManager(cert_mgr.CertManager):
204
204
  try:
205
205
  with os.fdopen(os.open(filename_secret, flags)) as secret_file:
206
206
  secret_data = secret_file.read()
207
- except IOError as e:
207
+ except OSError as e:
208
208
  LOG.error("Failed to read secret for %s.", secret_ref)
209
209
  raise exceptions.CertificateRetrievalException(
210
210
  ref=secret_ref) from e
octavia/cmd/agent.py CHANGED
@@ -75,14 +75,14 @@ def main():
75
75
  'certfile': CONF.amphora_agent.agent_server_cert,
76
76
  'ca_certs': CONF.amphora_agent.agent_server_ca,
77
77
  'cert_reqs': ssl.CERT_REQUIRED,
78
- 'ssl_version': getattr(ssl, "PROTOCOL_%s" % proto),
78
+ 'ssl_version': getattr(ssl, f"PROTOCOL_{proto}"),
79
79
  'preload_app': True,
80
80
  'accesslog': '/var/log/amphora-agent.log',
81
81
  'errorlog': '/var/log/amphora-agent.log',
82
82
  'loglevel': 'debug',
83
83
  'syslog': True,
84
- 'syslog_facility': 'local{}'.format(
85
- CONF.amphora_agent.administrative_log_facility),
84
+ 'syslog_facility': (
85
+ f'local{CONF.amphora_agent.administrative_log_facility}'),
86
86
  'syslog_addr': 'unix://run/rsyslog/octavia/log#dgram',
87
87
 
88
88
  }
@@ -55,10 +55,9 @@ def _process_wrapper(exit_event, proc_name, function, agent_name=None):
55
55
  signal.signal(signal.SIGINT, signal.SIG_IGN)
56
56
  signal.signal(signal.SIGHUP, _mutate_config)
57
57
  if agent_name:
58
- process_title = 'octavia-driver-agent - {} -- {}'.format(
59
- proc_name, agent_name)
58
+ process_title = f'octavia-driver-agent - {proc_name} -- {agent_name}'
60
59
  else:
61
- process_title = 'octavia-driver-agent - {}'.format(proc_name)
60
+ process_title = f'octavia-driver-agent - {proc_name}'
62
61
  setproctitle.setproctitle(process_title)
63
62
  while not exit_event.is_set():
64
63
  try:
@@ -186,7 +186,7 @@ def sctp_health_check(ip_address, port, timeout=2):
186
186
 
187
187
  data = _sctp_build_init_packet(src_port, port, tag)
188
188
 
189
- print("Sending INIT packet to {}:{}".format(ip_address, port))
189
+ print(f"Sending INIT packet to {ip_address}:{port}")
190
190
  s.send(data)
191
191
 
192
192
  start = time.time()
@@ -211,13 +211,13 @@ def sctp_health_check(ip_address, port, timeout=2):
211
211
  print("Received ABORT")
212
212
  ret = 1
213
213
  else: # Others: unknown error
214
- print("Received {} Type chunk".format(response_type))
214
+ print(f"Received {response_type} Type chunk")
215
215
  send_abort = True
216
216
  ret = 3
217
217
 
218
218
  break
219
219
  else:
220
- print("Timeout after {} seconds.".format(timeout))
220
+ print(f"Timeout after {timeout} seconds.")
221
221
  # Timeout
222
222
  ret = 2
223
223
 
@@ -260,5 +260,5 @@ def main():
260
260
  ret = sctp_health_check(destination, port, timeout=default_timeout)
261
261
  sys.exit(ret)
262
262
  else:
263
- print("Unsupported protocol '{}'".format(protocol))
263
+ print(f"Unsupported protocol '{protocol}'")
264
264
  sys.exit(1)
octavia/cmd/interface.py CHANGED
@@ -34,7 +34,7 @@ def interfaces_find(interface_controller, name):
34
34
  if name in all_interfaces:
35
35
  return [all_interfaces[name]]
36
36
 
37
- msg = "Could not find interface '{}'.".format(name)
37
+ msg = f"Could not find interface '{name}'."
38
38
  raise InterfaceException(msg=msg)
39
39
 
40
40
 
@@ -61,7 +61,7 @@ def interface_cmd(interface_name, action):
61
61
  action_fn = interface_controller.down
62
62
  else:
63
63
  raise InterfaceException(
64
- msg="Unknown action '{}'".format(action))
64
+ msg=f"Unknown action '{action}'")
65
65
 
66
66
  interfaces = interfaces_find(interface_controller,
67
67
  interface_name)
@@ -76,11 +76,11 @@ def main():
76
76
  action = sys.argv[-2]
77
77
  interface_name = sys.argv[-1]
78
78
  except IndexError:
79
- print("usage: {} [up|down] <interface>".format(sys.argv[0]))
79
+ print(f"usage: {sys.argv[0]} [up|down] <interface>")
80
80
  sys.exit(1)
81
81
 
82
82
  try:
83
83
  interface_cmd(interface_name, action)
84
84
  except Exception as e:
85
- print("Error: {}".format(e))
85
+ print(f"Error: {e}")
86
86
  sys.exit(2)
@@ -99,8 +99,8 @@ METRIC_MAP = {
99
99
  ("octavia_loadbalancer_current_frontend_ssl_key_rate ", None, None),
100
100
  "haproxy_process_max_frontend_ssl_key_rate ":
101
101
  ("octavia_loadbalancer_max_frontend_ssl_key_rate ", None, None),
102
- "haproxy_process_frontent_ssl_reuse ":
103
- ("octavia_loadbalancer_frontent_ssl_reuse ", None, None),
102
+ "haproxy_process_frontend_ssl_reuse ":
103
+ ("octavia_loadbalancer_frontend_ssl_reuse ", None, None),
104
104
  "haproxy_process_current_backend_ssl_key_rate ":
105
105
  ("octavia_loadbalancer_current_backend_ssl_key_rate ", None, None),
106
106
  "haproxy_process_max_backend_ssl_key_rate ":
@@ -123,8 +123,8 @@ METRIC_MAP = {
123
123
  # Listener metrics
124
124
  "haproxy_frontend_status ":
125
125
  ("octavia_listener_status ",
126
- "# HELP octavia_listener_status Current status of the listener. "
127
- "0=OFFLINE, 1=ONLINE, 2=DEGRADED.\n", None),
126
+ "# HELP octavia_listener_status Current status of the listener.\n",
127
+ None),
128
128
  "haproxy_frontend_status{":
129
129
  ("octavia_listener_status{", None, {"proxy=": "listener="}),
130
130
  "haproxy_frontend_current_sessions ":
@@ -263,8 +263,7 @@ METRIC_MAP = {
263
263
  # Pool Metrics
264
264
  "haproxy_backend_status ":
265
265
  ("octavia_pool_status ",
266
- "# HELP octavia_pool_status Current status of the pool. 0=OFFLINE, "
267
- "1=ONLINE.\n", None),
266
+ "# HELP octavia_pool_status Current status of the pool.\n", None),
268
267
  "haproxy_backend_status{":
269
268
  ("octavia_pool_status{", None, {"proxy=": "pool="}),
270
269
  "haproxy_backend_current_sessions ":
@@ -475,8 +474,7 @@ METRIC_MAP = {
475
474
  # Member Metrics
476
475
  "haproxy_server_status ":
477
476
  ("octavia_member_status ",
478
- "# HELP octavia_member_status Current status of the member. "
479
- "0=ERROR, 1=ONLINE, 2=OFFLINE, 3=DRAIN.\n", None),
477
+ "# HELP octavia_member_status Current status of the member.\n", None),
480
478
  "haproxy_server_status{":
481
479
  ("octavia_member_status{", None,
482
480
  {"proxy=": "pool=", "server=": "member="}),
@@ -682,14 +680,14 @@ METRIC_MAP = {
682
680
  "haproxy_server_http_responses_total{":
683
681
  ("octavia_member_http_responses_total{", None,
684
682
  {"proxy=": "pool=", "server=": "member="}),
685
- "haproxy_server_server_idle_connections_current ":
683
+ "haproxy_server_idle_connections_current ":
686
684
  ("octavia_member_idle_connections_current ", None, None),
687
- "haproxy_server_server_idle_connections_current{":
685
+ "haproxy_server_idle_connections_current{":
688
686
  ("octavia_member_idle_connections_current{", None,
689
687
  {"proxy=": "pool=", "server=": "member="}),
690
- "haproxy_server_server_idle_connections_limit ":
688
+ "haproxy_server_idle_connections_limit ":
691
689
  ("octavia_member_idle_connections_limit ", None, None),
692
- "haproxy_server_server_idle_connections_limit{":
690
+ "haproxy_server_idle_connections_limit{":
693
691
  ("octavia_member_idle_connections_limit{", None,
694
692
  {"proxy=": "pool=", "server=": "member="}),
695
693
  }
@@ -751,7 +749,7 @@ class PrometheusProxy(SimpleHTTPRequestHandler):
751
749
  metrics_buffer += line.replace(match,
752
750
  map_tuple[0])
753
751
  elif PRINT_REJECTED:
754
- print("REJECTED: %s" % line)
752
+ print(f"REJECTED: {line}")
755
753
  except Exception as e:
756
754
  print(str(e), flush=True)
757
755
  traceback.print_tb(e.__traceback__)
@@ -75,7 +75,7 @@ class FilteredJob(Job):
75
75
  # filter out private information from details
76
76
  cls_name = type(self).__name__
77
77
  details = _details_filter(self.details)
78
- return "%s: %s (priority=%s, uuid=%s, details=%s)" % (
78
+ return "{}: {} (priority={}, uuid={}, details={})".format(
79
79
  cls_name, self.name, self.priority,
80
80
  self.uuid, details)
81
81
 
@@ -90,7 +90,7 @@ class JobDetailsFilter(log.logging.Filter):
90
90
  return True
91
91
 
92
92
 
93
- class BaseTaskFlowEngine(object):
93
+ class BaseTaskFlowEngine:
94
94
  """This is the task flow engine
95
95
 
96
96
  Use this engine to start/load flows in the
@@ -164,7 +164,7 @@ class RedisDynamicLoggingConductor(DynamicLoggingConductor):
164
164
  return listeners
165
165
 
166
166
 
167
- class TaskFlowServiceController(object):
167
+ class TaskFlowServiceController:
168
168
 
169
169
  def __init__(self, driver):
170
170
  self.driver = driver