octavia 14.0.0.0rc1__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.0rc1.dist-info → octavia-15.0.0.0rc1.dist-info}/AUTHORS +6 -0
  286. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.0rc1.dist-info}/METADATA +3 -5
  287. {octavia-14.0.0.0rc1.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.0rc1.dist-info/pbr.json +0 -1
  294. {octavia-14.0.0.0rc1.data → octavia-15.0.0.0rc1.data}/data/share/octavia/LICENSE +0 -0
  295. {octavia-14.0.0.0rc1.data → octavia-15.0.0.0rc1.data}/data/share/octavia/README.rst +0 -0
  296. {octavia-14.0.0.0rc1.data → octavia-15.0.0.0rc1.data}/data/share/octavia/diskimage-create/README.rst +0 -0
  297. {octavia-14.0.0.0rc1.data → octavia-15.0.0.0rc1.data}/data/share/octavia/diskimage-create/diskimage-create.sh +0 -0
  298. {octavia-14.0.0.0rc1.data → octavia-15.0.0.0rc1.data}/data/share/octavia/diskimage-create/image-tests.sh +0 -0
  299. {octavia-14.0.0.0rc1.data → octavia-15.0.0.0rc1.data}/data/share/octavia/diskimage-create/requirements.txt +0 -0
  300. {octavia-14.0.0.0rc1.data → octavia-15.0.0.0rc1.data}/data/share/octavia/diskimage-create/test-requirements.txt +0 -0
  301. {octavia-14.0.0.0rc1.data → octavia-15.0.0.0rc1.data}/data/share/octavia/diskimage-create/tox.ini +0 -0
  302. {octavia-14.0.0.0rc1.data → octavia-15.0.0.0rc1.data}/data/share/octavia/diskimage-create/version.txt +0 -0
  303. {octavia-14.0.0.0rc1.data → octavia-15.0.0.0rc1.data}/scripts/octavia-wsgi +0 -0
  304. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.0rc1.dist-info}/LICENSE +0 -0
  305. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.0rc1.dist-info}/WHEEL +0 -0
  306. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.0rc1.dist-info}/entry_points.txt +0 -0
  307. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -70,7 +70,7 @@ class TestHaproxyAmphoraLoadBalancerDriverTest(base.TestCase):
70
70
  'api_version': API_VERSION}
71
71
  self.driver.clients[
72
72
  API_VERSION].get_info.return_value = {
73
- 'haproxy_version': u'1.6.3-1ubuntu0.1',
73
+ 'haproxy_version': '1.6.3-1ubuntu0.1',
74
74
  'api_version': API_VERSION}
75
75
  self.driver.jinja_combo = mock.MagicMock()
76
76
  self.driver.lvs_jinja = mock.MagicMock()
@@ -356,7 +356,7 @@ class TestHaproxyAmphoraLoadBalancerDriverTest(base.TestCase):
356
356
  self.driver.cert_manager.get_secret.return_value = fake_secret
357
357
  ref_md5 = md5(fake_secret, usedforsecurity=False).hexdigest() # nosec
358
358
  ref_id = hashlib.sha1(fake_secret).hexdigest() # nosec
359
- ref_name = '{id}.pem'.format(id=ref_id)
359
+ ref_name = f'{ref_id}.pem'
360
360
 
361
361
  result = self.driver._process_secret(
362
362
  sample_listener, sample_listener.client_ca_tls_certificate_id,
@@ -419,10 +419,9 @@ class TestHaproxyAmphoraLoadBalancerDriverTest(base.TestCase):
419
419
  fake_pem = b'fake pem'
420
420
  mock_build_pem.return_value = fake_pem
421
421
  ref_md5 = md5(fake_pem, usedforsecurity=False).hexdigest() # nosec
422
- ref_name = '{id}.pem'.format(id=pool_cert.id)
423
- ref_path = '{cert_dir}/{lb_id}/{name}'.format(
424
- cert_dir=fake_cert_dir, lb_id=sample_listener.load_balancer.id,
425
- name=ref_name)
422
+ ref_name = f'{pool_cert.id}.pem'
423
+ ref_path = (f'{fake_cert_dir}/{sample_listener.load_balancer.id}/'
424
+ f'{ref_name}')
426
425
  ref_ca_name = 'fake_ca.pem'
427
426
  ref_ca_path = '{cert_dir}/{lb_id}/{name}'.format(
428
427
  cert_dir=fake_cert_dir, lb_id=sample_listener.load_balancer.id,
@@ -637,7 +636,7 @@ class TestHaproxyAmphoraLoadBalancerDriverTest(base.TestCase):
637
636
  # Ensure that at least one call in each pair has been seen
638
637
  if (dcp_calls[0] not in mock_calls and
639
638
  dcp_calls[1] not in mock_calls):
640
- raise Exception("%s not found in %s" % (dcp_calls, mock_calls))
639
+ raise Exception(f"{dcp_calls} not found in {mock_calls}")
641
640
 
642
641
  # Now just make sure we did an update and not a delete
643
642
  self.driver.clients[API_VERSION].delete_listener.assert_not_called()
@@ -951,7 +950,7 @@ class TestAmphoraAPIClientTest(base.TestCase):
951
950
  @requests_mock.mock()
952
951
  def test_get_api_version(self, mock_requests):
953
952
  ref_api_version = {'api_version': '0.1'}
954
- mock_requests.get('{base}/'.format(base=self.base_url),
953
+ mock_requests.get(f'{self.base_url}/',
955
954
  json=ref_api_version)
956
955
  result = self.driver.get_api_version(self.amp)
957
956
  self.assertEqual(ref_api_version, result)
@@ -960,7 +959,7 @@ class TestAmphoraAPIClientTest(base.TestCase):
960
959
  def test_get_info(self, m):
961
960
  info = {"hostname": "some_hostname", "version": "some_version",
962
961
  "api_version": "1.0", "uuid": FAKE_UUID_1}
963
- m.get("{base}/info".format(base=self.base_url_ver),
962
+ m.get(f"{self.base_url_ver}/info",
964
963
  json=info)
965
964
  information = self.driver.get_info(self.amp)
966
965
  self.assertEqual(info, information)
@@ -969,7 +968,7 @@ class TestAmphoraAPIClientTest(base.TestCase):
969
968
  def test_get_info_with_timeout_dict(self, m):
970
969
  info = {"hostname": "some_hostname", "version": "some_version",
971
970
  "api_version": "1.0", "uuid": FAKE_UUID_1}
972
- m.get("{base}/info".format(base=self.base_url_ver),
971
+ m.get(f"{self.base_url_ver}/info",
973
972
  json=info)
974
973
  timeout_dict = {
975
974
  constants.CONN_MAX_RETRIES: 100,
@@ -980,27 +979,27 @@ class TestAmphoraAPIClientTest(base.TestCase):
980
979
 
981
980
  @requests_mock.mock()
982
981
  def test_get_info_unauthorized(self, m):
983
- m.get("{base}/info".format(base=self.base_url_ver),
982
+ m.get(f"{self.base_url_ver}/info",
984
983
  status_code=401)
985
984
  self.assertRaises(exc.Unauthorized, self.driver.get_info, self.amp)
986
985
 
987
986
  @requests_mock.mock()
988
987
  def test_get_info_missing(self, m):
989
- m.get("{base}/info".format(base=self.base_url_ver),
988
+ m.get(f"{self.base_url_ver}/info",
990
989
  status_code=404,
991
990
  headers={'content-type': 'application/json'})
992
991
  self.assertRaises(exc.NotFound, self.driver.get_info, self.amp)
993
992
 
994
993
  @requests_mock.mock()
995
994
  def test_get_info_server_error(self, m):
996
- m.get("{base}/info".format(base=self.base_url_ver),
995
+ m.get(f"{self.base_url_ver}/info",
997
996
  status_code=500)
998
997
  self.assertRaises(exc.InternalServerError, self.driver.get_info,
999
998
  self.amp)
1000
999
 
1001
1000
  @requests_mock.mock()
1002
1001
  def test_get_info_service_unavailable(self, m):
1003
- m.get("{base}/info".format(base=self.base_url_ver),
1002
+ m.get(f"{self.base_url_ver}/info",
1004
1003
  status_code=503)
1005
1004
  self.assertRaises(exc.ServiceUnavailable, self.driver.get_info,
1006
1005
  self.amp)
@@ -1011,34 +1010,34 @@ class TestAmphoraAPIClientTest(base.TestCase):
1011
1010
  "api_version": "1.0", "uuid": FAKE_UUID_1,
1012
1011
  "network_tx": "some_tx", "network_rx": "some_rx",
1013
1012
  "active": True, "haproxy_count": 10}
1014
- m.get("{base}/details".format(base=self.base_url_ver),
1013
+ m.get(f"{self.base_url_ver}/details",
1015
1014
  json=details)
1016
1015
  amp_details = self.driver.get_details(self.amp)
1017
1016
  self.assertEqual(details, amp_details)
1018
1017
 
1019
1018
  @requests_mock.mock()
1020
1019
  def test_get_details_unauthorized(self, m):
1021
- m.get("{base}/details".format(base=self.base_url_ver),
1020
+ m.get(f"{self.base_url_ver}/details",
1022
1021
  status_code=401)
1023
1022
  self.assertRaises(exc.Unauthorized, self.driver.get_details, self.amp)
1024
1023
 
1025
1024
  @requests_mock.mock()
1026
1025
  def test_get_details_missing(self, m):
1027
- m.get("{base}/details".format(base=self.base_url_ver),
1026
+ m.get(f"{self.base_url_ver}/details",
1028
1027
  status_code=404,
1029
1028
  headers={'content-type': 'application/json'})
1030
1029
  self.assertRaises(exc.NotFound, self.driver.get_details, self.amp)
1031
1030
 
1032
1031
  @requests_mock.mock()
1033
1032
  def test_get_details_server_error(self, m):
1034
- m.get("{base}/details".format(base=self.base_url_ver),
1033
+ m.get(f"{self.base_url_ver}/details",
1035
1034
  status_code=500)
1036
1035
  self.assertRaises(exc.InternalServerError, self.driver.get_details,
1037
1036
  self.amp)
1038
1037
 
1039
1038
  @requests_mock.mock()
1040
1039
  def test_get_details_service_unavailable(self, m):
1041
- m.get("{base}/details".format(base=self.base_url_ver),
1040
+ m.get(f"{self.base_url_ver}/details",
1042
1041
  status_code=503)
1043
1042
  self.assertRaises(exc.ServiceUnavailable, self.driver.get_details,
1044
1043
  self.amp)
@@ -1047,21 +1046,21 @@ class TestAmphoraAPIClientTest(base.TestCase):
1047
1046
  def test_get_all_listeners(self, m):
1048
1047
  listeners = [{"status": "ONLINE", "provisioning_status": "ACTIVE",
1049
1048
  "type": "PASSIVE", "uuid": FAKE_UUID_1}]
1050
- m.get("{base}/listeners".format(base=self.base_url_ver),
1049
+ m.get(f"{self.base_url_ver}/listeners",
1051
1050
  json=listeners)
1052
1051
  all_listeners = self.driver.get_all_listeners(self.amp)
1053
1052
  self.assertEqual(listeners, all_listeners)
1054
1053
 
1055
1054
  @requests_mock.mock()
1056
1055
  def test_get_all_listeners_unauthorized(self, m):
1057
- m.get("{base}/listeners".format(base=self.base_url_ver),
1056
+ m.get(f"{self.base_url_ver}/listeners",
1058
1057
  status_code=401)
1059
1058
  self.assertRaises(exc.Unauthorized, self.driver.get_all_listeners,
1060
1059
  self.amp)
1061
1060
 
1062
1061
  @requests_mock.mock()
1063
1062
  def test_get_all_listeners_missing(self, m):
1064
- m.get("{base}/listeners".format(base=self.base_url_ver),
1063
+ m.get(f"{self.base_url_ver}/listeners",
1065
1064
  status_code=404,
1066
1065
  headers={'content-type': 'application/json'})
1067
1066
  self.assertRaises(exc.NotFound, self.driver.get_all_listeners,
@@ -1069,95 +1068,85 @@ class TestAmphoraAPIClientTest(base.TestCase):
1069
1068
 
1070
1069
  @requests_mock.mock()
1071
1070
  def test_get_all_listeners_server_error(self, m):
1072
- m.get("{base}/listeners".format(base=self.base_url_ver),
1071
+ m.get(f"{self.base_url_ver}/listeners",
1073
1072
  status_code=500)
1074
1073
  self.assertRaises(exc.InternalServerError,
1075
1074
  self.driver.get_all_listeners, self.amp)
1076
1075
 
1077
1076
  @requests_mock.mock()
1078
1077
  def test_get_all_listeners_service_unavailable(self, m):
1079
- m.get("{base}/listeners".format(base=self.base_url_ver),
1078
+ m.get(f"{self.base_url_ver}/listeners",
1080
1079
  status_code=503)
1081
1080
  self.assertRaises(exc.ServiceUnavailable,
1082
1081
  self.driver.get_all_listeners, self.amp)
1083
1082
 
1084
1083
  @requests_mock.mock()
1085
1084
  def test_start_loadbalancer(self, m):
1086
- m.put("{base}/loadbalancer/{loadbalancer_id}/start".format(
1087
- base=self.base_url_ver, loadbalancer_id=FAKE_UUID_1))
1085
+ m.put(f"{self.base_url_ver}/loadbalancer/{FAKE_UUID_1}/start")
1088
1086
  self.driver.start_listener(self.amp, FAKE_UUID_1)
1089
1087
  self.assertTrue(m.called)
1090
1088
 
1091
1089
  @requests_mock.mock()
1092
1090
  def test_start_loadbalancer_missing(self, m):
1093
- m.put("{base}/loadbalancer/{loadbalancer_id}/start".format(
1094
- base=self.base_url_ver, loadbalancer_id=FAKE_UUID_1),
1095
- status_code=404,
1096
- headers={'content-type': 'application/json'})
1091
+ m.put(f"{self.base_url_ver}/loadbalancer/{FAKE_UUID_1}/start",
1092
+ status_code=404,
1093
+ headers={'content-type': 'application/json'})
1097
1094
  self.assertRaises(exc.NotFound, self.driver.start_listener,
1098
1095
  self.amp, FAKE_UUID_1)
1099
1096
 
1100
1097
  @requests_mock.mock()
1101
1098
  def test_start_loadbalancer_unauthorized(self, m):
1102
- m.put("{base}/loadbalancer/{loadbalancer_id}/start".format(
1103
- base=self.base_url_ver, loadbalancer_id=FAKE_UUID_1),
1104
- status_code=401)
1099
+ m.put(f"{self.base_url_ver}/loadbalancer/{FAKE_UUID_1}/start",
1100
+ status_code=401)
1105
1101
  self.assertRaises(exc.Unauthorized, self.driver.start_listener,
1106
1102
  self.amp, FAKE_UUID_1)
1107
1103
 
1108
1104
  @requests_mock.mock()
1109
1105
  def test_start_loadbalancer_server_error(self, m):
1110
- m.put("{base}/loadbalancer/{loadbalancer_id}/start".format(
1111
- base=self.base_url_ver, loadbalancer_id=FAKE_UUID_1),
1112
- status_code=500)
1106
+ m.put(f"{self.base_url_ver}/loadbalancer/{FAKE_UUID_1}/start",
1107
+ status_code=500)
1113
1108
  self.assertRaises(exc.InternalServerError, self.driver.start_listener,
1114
1109
  self.amp, FAKE_UUID_1)
1115
1110
 
1116
1111
  @requests_mock.mock()
1117
1112
  def test_start_loadbalancer_service_unavailable(self, m):
1118
- m.put("{base}/loadbalancer/{loadbalancer_id}/start".format(
1119
- base=self.base_url_ver, loadbalancer_id=FAKE_UUID_1),
1120
- status_code=503)
1113
+ m.put(f"{self.base_url_ver}/loadbalancer/{FAKE_UUID_1}/start",
1114
+ status_code=503)
1121
1115
  self.assertRaises(exc.ServiceUnavailable, self.driver.start_listener,
1122
1116
  self.amp, FAKE_UUID_1)
1123
1117
 
1124
1118
  @requests_mock.mock()
1125
1119
  def test_delete_listener(self, m):
1126
- m.delete("{base}/listeners/{listener_id}".format(
1127
- base=self.base_url_ver, listener_id=FAKE_UUID_1), json={})
1120
+ m.delete(f"{self.base_url_ver}/listeners/{FAKE_UUID_1}", json={})
1128
1121
  self.driver.delete_listener(self.amp, FAKE_UUID_1)
1129
1122
  self.assertTrue(m.called)
1130
1123
 
1131
1124
  @requests_mock.mock()
1132
1125
  def test_delete_listener_missing(self, m):
1133
- m.delete("{base}/listeners/{listener_id}".format(
1134
- base=self.base_url_ver, listener_id=FAKE_UUID_1),
1135
- status_code=404,
1136
- headers={'content-type': 'application/json'})
1126
+ m.delete(f"{self.base_url_ver}/listeners/{FAKE_UUID_1}",
1127
+ status_code=404,
1128
+ headers={'content-type': 'application/json'})
1137
1129
  self.driver.delete_listener(self.amp, FAKE_UUID_1)
1138
1130
  self.assertTrue(m.called)
1139
1131
 
1140
1132
  @requests_mock.mock()
1141
1133
  def test_delete_listener_unauthorized(self, m):
1142
- m.delete("{base}/listeners/{listener_id}".format(
1143
- base=self.base_url_ver, listener_id=FAKE_UUID_1),
1144
- status_code=401)
1134
+ m.delete(f"{self.base_url_ver}/listeners/{FAKE_UUID_1}",
1135
+ status_code=401)
1145
1136
  self.assertRaises(exc.Unauthorized, self.driver.delete_listener,
1146
1137
  self.amp, FAKE_UUID_1)
1147
1138
 
1148
1139
  @requests_mock.mock()
1149
1140
  def test_delete_listener_server_error(self, m):
1150
- m.delete("{base}/listeners/{listener_id}".format(
1151
- base=self.base_url_ver, listener_id=FAKE_UUID_1),
1152
- status_code=500)
1141
+ m.delete(f"{self.base_url_ver}/listeners/{FAKE_UUID_1}",
1142
+ status_code=500)
1153
1143
  self.assertRaises(exc.InternalServerError, self.driver.delete_listener,
1154
1144
  self.amp, FAKE_UUID_1)
1155
1145
 
1156
1146
  @requests_mock.mock()
1157
1147
  def test_delete_listener_service_unavailable(self, m):
1158
- m.delete("{base}/listeners/{listener_id}".format(
1159
- base=self.base_url_ver, listener_id=FAKE_UUID_1),
1160
- status_code=503)
1148
+ m.delete(f"{self.base_url_ver}/listeners/{FAKE_UUID_1}",
1149
+ status_code=503)
1161
1150
  self.assertRaises(exc.ServiceUnavailable, self.driver.delete_listener,
1162
1151
  self.amp, FAKE_UUID_1)
1163
1152
 
@@ -1214,14 +1203,14 @@ class TestAmphoraAPIClientTest(base.TestCase):
1214
1203
 
1215
1204
  @requests_mock.mock()
1216
1205
  def test_update_cert_for_rotation(self, m):
1217
- m.put("{base}/certificate".format(base=self.base_url_ver))
1206
+ m.put(f"{self.base_url_ver}/certificate")
1218
1207
  resp_body = self.driver.update_cert_for_rotation(self.amp,
1219
1208
  "some_file")
1220
1209
  self.assertEqual(200, resp_body.status_code)
1221
1210
 
1222
1211
  @requests_mock.mock()
1223
1212
  def test_update_invalid_cert_for_rotation(self, m):
1224
- m.put("{base}/certificate".format(base=self.base_url_ver),
1213
+ m.put(f"{self.base_url_ver}/certificate",
1225
1214
  status_code=400)
1226
1215
  self.assertRaises(exc.InvalidRequest,
1227
1216
  self.driver.update_cert_for_rotation, self.amp,
@@ -1229,7 +1218,7 @@ class TestAmphoraAPIClientTest(base.TestCase):
1229
1218
 
1230
1219
  @requests_mock.mock()
1231
1220
  def test_update_cert_for_rotation_unauthorized(self, m):
1232
- m.put("{base}/certificate".format(base=self.base_url_ver),
1221
+ m.put(f"{self.base_url_ver}/certificate",
1233
1222
  status_code=401)
1234
1223
  self.assertRaises(exc.Unauthorized,
1235
1224
  self.driver.update_cert_for_rotation, self.amp,
@@ -1237,7 +1226,7 @@ class TestAmphoraAPIClientTest(base.TestCase):
1237
1226
 
1238
1227
  @requests_mock.mock()
1239
1228
  def test_update_cert_for_rotation_error(self, m):
1240
- m.put("{base}/certificate".format(base=self.base_url_ver),
1229
+ m.put(f"{self.base_url_ver}/certificate",
1241
1230
  status_code=500)
1242
1231
  self.assertRaises(exc.InternalServerError,
1243
1232
  self.driver.update_cert_for_rotation, self.amp,
@@ -1245,7 +1234,7 @@ class TestAmphoraAPIClientTest(base.TestCase):
1245
1234
 
1246
1235
  @requests_mock.mock()
1247
1236
  def test_update_cert_for_rotation_unavailable(self, m):
1248
- m.put("{base}/certificate".format(base=self.base_url_ver),
1237
+ m.put(f"{self.base_url_ver}/certificate",
1249
1238
  status_code=503)
1250
1239
  self.assertRaises(exc.ServiceUnavailable,
1251
1240
  self.driver.update_cert_for_rotation, self.amp,
@@ -1356,10 +1345,8 @@ class TestAmphoraAPIClientTest(base.TestCase):
1356
1345
  def test_upload_config(self, m):
1357
1346
  config = {"name": "fake_config"}
1358
1347
  m.put(
1359
- "{base}/loadbalancer/{"
1360
- "amphora_id}/{loadbalancer_id}/haproxy".format(
1361
- amphora_id=self.amp.id, base=self.base_url_ver,
1362
- loadbalancer_id=FAKE_UUID_1),
1348
+ f"{self.base_url_ver}/loadbalancer/{self.amp.id}/"
1349
+ f"{FAKE_UUID_1}/haproxy",
1363
1350
  json=config)
1364
1351
  self.driver.upload_config(self.amp, FAKE_UUID_1,
1365
1352
  config)
@@ -1369,10 +1356,8 @@ class TestAmphoraAPIClientTest(base.TestCase):
1369
1356
  def test_upload_invalid_config(self, m):
1370
1357
  config = '{"name": "bad_config"}'
1371
1358
  m.put(
1372
- "{base}/loadbalancer/{"
1373
- "amphora_id}/{loadbalancer_id}/haproxy".format(
1374
- amphora_id=self.amp.id, base=self.base_url_ver,
1375
- loadbalancer_id=FAKE_UUID_1),
1359
+ f"{self.base_url_ver}/loadbalancer/{self.amp.id}/"
1360
+ f"{FAKE_UUID_1}/haproxy",
1376
1361
  status_code=400)
1377
1362
  self.assertRaises(exc.InvalidRequest, self.driver.upload_config,
1378
1363
  self.amp, FAKE_UUID_1, config)
@@ -1381,10 +1366,8 @@ class TestAmphoraAPIClientTest(base.TestCase):
1381
1366
  def test_upload_config_unauthorized(self, m):
1382
1367
  config = '{"name": "bad_config"}'
1383
1368
  m.put(
1384
- "{base}/loadbalancer/{"
1385
- "amphora_id}/{loadbalancer_id}/haproxy".format(
1386
- amphora_id=self.amp.id, base=self.base_url_ver,
1387
- loadbalancer_id=FAKE_UUID_1),
1369
+ f"{self.base_url_ver}/loadbalancer/{self.amp.id}/"
1370
+ f"{FAKE_UUID_1}/haproxy",
1388
1371
  status_code=401)
1389
1372
  self.assertRaises(exc.Unauthorized, self.driver.upload_config,
1390
1373
  self.amp, FAKE_UUID_1, config)
@@ -1393,10 +1376,8 @@ class TestAmphoraAPIClientTest(base.TestCase):
1393
1376
  def test_upload_config_server_error(self, m):
1394
1377
  config = '{"name": "bad_config"}'
1395
1378
  m.put(
1396
- "{base}/loadbalancer/{"
1397
- "amphora_id}/{loadbalancer_id}/haproxy".format(
1398
- amphora_id=self.amp.id, base=self.base_url_ver,
1399
- loadbalancer_id=FAKE_UUID_1),
1379
+ f"{self.base_url_ver}/loadbalancer/{self.amp.id}/"
1380
+ f"{FAKE_UUID_1}/haproxy",
1400
1381
  status_code=500)
1401
1382
  self.assertRaises(exc.InternalServerError, self.driver.upload_config,
1402
1383
  self.amp, FAKE_UUID_1, config)
@@ -1405,10 +1386,8 @@ class TestAmphoraAPIClientTest(base.TestCase):
1405
1386
  def test_upload_config_service_unavailable(self, m):
1406
1387
  config = '{"name": "bad_config"}'
1407
1388
  m.put(
1408
- "{base}/loadbalancer/{"
1409
- "amphora_id}/{loadbalancer_id}/haproxy".format(
1410
- amphora_id=self.amp.id, base=self.base_url_ver,
1411
- loadbalancer_id=FAKE_UUID_1),
1389
+ f"{self.base_url_ver}/loadbalancer/{self.amp.id}/"
1390
+ f"{FAKE_UUID_1}/haproxy",
1412
1391
  status_code=503)
1413
1392
  self.assertRaises(exc.ServiceUnavailable, self.driver.upload_config,
1414
1393
  self.amp, FAKE_UUID_1, config)
@@ -1417,10 +1396,8 @@ class TestAmphoraAPIClientTest(base.TestCase):
1417
1396
  def test_upload_udp_config(self, m):
1418
1397
  config = {"name": "fake_config"}
1419
1398
  m.put(
1420
- "{base}/listeners/"
1421
- "{amphora_id}/{listener_id}/udp_listener".format(
1422
- amphora_id=self.amp.id, base=self.base_url_ver,
1423
- listener_id=FAKE_UUID_1),
1399
+ f"{self.base_url_ver}/listeners/{self.amp.id}/"
1400
+ f"{FAKE_UUID_1}/udp_listener",
1424
1401
  json=config)
1425
1402
  self.driver.upload_udp_config(self.amp, FAKE_UUID_1, config)
1426
1403
  self.assertTrue(m.called)
@@ -1429,10 +1406,8 @@ class TestAmphoraAPIClientTest(base.TestCase):
1429
1406
  def test_upload_udp_invalid_config(self, m):
1430
1407
  config = '{"name": "bad_config"}'
1431
1408
  m.put(
1432
- "{base}/listeners/"
1433
- "{amphora_id}/{listener_id}/udp_listener".format(
1434
- amphora_id=self.amp.id, base=self.base_url_ver,
1435
- listener_id=FAKE_UUID_1),
1409
+ f"{self.base_url_ver}/listeners/{self.amp.id}/"
1410
+ f"{FAKE_UUID_1}/udp_listener",
1436
1411
  status_code=400)
1437
1412
  self.assertRaises(exc.InvalidRequest, self.driver.upload_udp_config,
1438
1413
  self.amp, FAKE_UUID_1, config)
@@ -1441,10 +1416,8 @@ class TestAmphoraAPIClientTest(base.TestCase):
1441
1416
  def test_upload_udp_config_unauthorized(self, m):
1442
1417
  config = '{"name": "bad_config"}'
1443
1418
  m.put(
1444
- "{base}/listeners/"
1445
- "{amphora_id}/{listener_id}/udp_listener".format(
1446
- amphora_id=self.amp.id, base=self.base_url_ver,
1447
- listener_id=FAKE_UUID_1),
1419
+ f"{self.base_url_ver}/listeners/{self.amp.id}/"
1420
+ f"{FAKE_UUID_1}/udp_listener",
1448
1421
  status_code=401)
1449
1422
  self.assertRaises(exc.Unauthorized, self.driver.upload_udp_config,
1450
1423
  self.amp, FAKE_UUID_1, config)
@@ -1453,10 +1426,8 @@ class TestAmphoraAPIClientTest(base.TestCase):
1453
1426
  def test_upload_udp_config_server_error(self, m):
1454
1427
  config = '{"name": "bad_config"}'
1455
1428
  m.put(
1456
- "{base}/listeners/"
1457
- "{amphora_id}/{listener_id}/udp_listener".format(
1458
- amphora_id=self.amp.id, base=self.base_url_ver,
1459
- listener_id=FAKE_UUID_1),
1429
+ f"{self.base_url_ver}/listeners/{self.amp.id}/"
1430
+ f"{FAKE_UUID_1}/udp_listener",
1460
1431
  status_code=500)
1461
1432
  self.assertRaises(exc.InternalServerError,
1462
1433
  self.driver.upload_udp_config,
@@ -1466,10 +1437,8 @@ class TestAmphoraAPIClientTest(base.TestCase):
1466
1437
  def test_upload_udp_config_service_unavailable(self, m):
1467
1438
  config = '{"name": "bad_config"}'
1468
1439
  m.put(
1469
- "{base}/listeners/"
1470
- "{amphora_id}/{listener_id}/udp_listener".format(
1471
- amphora_id=self.amp.id, base=self.base_url_ver,
1472
- listener_id=FAKE_UUID_1),
1440
+ f"{self.base_url_ver}/listeners/{self.amp.id}/"
1441
+ f"{FAKE_UUID_1}/udp_listener",
1473
1442
  status_code=503)
1474
1443
  self.assertRaises(exc.ServiceUnavailable,
1475
1444
  self.driver.upload_udp_config,
@@ -1477,18 +1446,14 @@ class TestAmphoraAPIClientTest(base.TestCase):
1477
1446
 
1478
1447
  @requests_mock.mock()
1479
1448
  def test_plug_vip(self, m):
1480
- m.post("{base}/plug/vip/{vip}".format(
1481
- base=self.base_url_ver, vip=FAKE_IP)
1482
- )
1449
+ m.post(f"{self.base_url_ver}/plug/vip/{FAKE_IP}")
1483
1450
  self.driver.plug_vip(self.amp, FAKE_IP, self.subnet_info)
1484
1451
  self.assertTrue(m.called)
1485
1452
 
1486
1453
  @requests_mock.mock()
1487
1454
  def test_plug_vip_api_not_ready(self, m):
1488
- m.post("{base}/plug/vip/{vip}".format(
1489
- base=self.base_url_ver, vip=FAKE_IP),
1490
- status_code=404, headers={'content-type': 'text/html'}
1491
- )
1455
+ m.post(f"{self.base_url_ver}/plug/vip/{FAKE_IP}",
1456
+ status_code=404, headers={'content-type': 'text/html'})
1492
1457
  self.assertRaises(driver_except.TimeOutException,
1493
1458
  self.driver.plug_vip,
1494
1459
  self.amp, FAKE_IP, self.subnet_info)
@@ -1496,26 +1461,21 @@ class TestAmphoraAPIClientTest(base.TestCase):
1496
1461
 
1497
1462
  @requests_mock.mock()
1498
1463
  def test_plug_network(self, m):
1499
- m.post("{base}/plug/network".format(
1500
- base=self.base_url_ver)
1501
- )
1464
+ m.post(f"{self.base_url_ver}/plug/network")
1502
1465
  self.driver.plug_network(self.amp, self.port_info)
1503
1466
  self.assertTrue(m.called)
1504
1467
 
1505
1468
  @requests_mock.mock()
1506
1469
  def test_upload_vrrp_config(self, m):
1507
1470
  config = '{"name": "bad_config"}'
1508
- m.put("{base}/vrrp/upload".format(
1509
- base=self.base_url_ver)
1510
- )
1471
+ m.put(f"{self.base_url_ver}/vrrp/upload")
1511
1472
  self.driver.upload_vrrp_config(self.amp, config)
1512
1473
  self.assertTrue(m.called)
1513
1474
 
1514
1475
  @requests_mock.mock()
1515
1476
  def test_vrrp_action(self, m):
1516
1477
  action = 'start'
1517
- m.put("{base}/vrrp/{action}".format(base=self.base_url_ver,
1518
- action=action))
1478
+ m.put(f"{self.base_url_ver}/vrrp/{action}")
1519
1479
  self.driver._vrrp_action(action, self.amp)
1520
1480
  self.assertTrue(m.called)
1521
1481
 
@@ -1523,8 +1483,7 @@ class TestAmphoraAPIClientTest(base.TestCase):
1523
1483
  def test_get_interface(self, m):
1524
1484
  interface = [{"interface": "eth1"}]
1525
1485
  ip_addr = '192.51.100.1'
1526
- m.get("{base}/interface/{ip_addr}".format(base=self.base_url_ver,
1527
- ip_addr=ip_addr),
1486
+ m.get(f"{self.base_url_ver}/interface/{ip_addr}",
1528
1487
  json=interface)
1529
1488
  self.driver.get_interface(self.amp, ip_addr)
1530
1489
  self.assertTrue(m.called)
@@ -1538,13 +1497,13 @@ class TestAmphoraAPIClientTest(base.TestCase):
1538
1497
 
1539
1498
  @requests_mock.mock()
1540
1499
  def test_update_agent_config(self, m):
1541
- m.put("{base}/config".format(base=self.base_url_ver))
1500
+ m.put(f"{self.base_url_ver}/config")
1542
1501
  resp_body = self.driver.update_agent_config(self.amp, "some_file")
1543
1502
  self.assertEqual(200, resp_body.status_code)
1544
1503
 
1545
1504
  @requests_mock.mock()
1546
1505
  def test_update_agent_config_error(self, m):
1547
- m.put("{base}/config".format(base=self.base_url_ver), status_code=500)
1506
+ m.put(f"{self.base_url_ver}/config", status_code=500)
1548
1507
  self.assertRaises(exc.InternalServerError,
1549
1508
  self.driver.update_agent_config, self.amp,
1550
1509
  "some_file")
@@ -124,7 +124,7 @@ class TestHeartbeatUDP(base.TestCase):
124
124
  }
125
125
  },
126
126
  "pools": {
127
- "pool-id-1:{}".format(self.listener_id): {
127
+ f"pool-id-1:{self.listener_id}": {
128
128
  "status": constants.UP,
129
129
  "members": {
130
130
  "member-id-1": {
@@ -160,7 +160,7 @@ class TestHeartbeatUDP(base.TestCase):
160
160
  }
161
161
  },
162
162
  "pools": {
163
- "pool-id-1:{}".format(self.listener_id): {
163
+ f"pool-id-1:{self.listener_id}": {
164
164
  "status": constants.UP,
165
165
  "members": {
166
166
  "member-id-1": {
@@ -296,7 +296,7 @@ class TestUpdateHealthDb(base.TestCase):
296
296
  FAKE_UUID_1 = uuidutils.generate_uuid()
297
297
 
298
298
  def setUp(self):
299
- super(TestUpdateHealthDb, self).setUp()
299
+ super().setUp()
300
300
 
301
301
  session_patch = mock.patch('octavia.db.api.get_session')
302
302
  self.addCleanup(session_patch.stop)
@@ -353,7 +353,7 @@ class TestUpdateHealthDb(base.TestCase):
353
353
  mock_listener1.default_pool = mock_pool1
354
354
  for i in range(members):
355
355
  mock_member_x = mock.Mock()
356
- mock_member_x.id = 'member-id-%s' % (i + 1)
356
+ mock_member_x.id = f'member-id-{i + 1}'
357
357
  if health_monitor:
358
358
  mock_member_x.operating_status = 'NOTHING_MATCHABLE'
359
359
  else:
@@ -381,7 +381,7 @@ class TestUpdateHealthDb(base.TestCase):
381
381
  member_operating_status = constants.NO_MONITOR
382
382
 
383
383
  for i in range(members):
384
- member_id = 'member-id-%s' % (i + 1)
384
+ member_id = f'member-id-{i + 1}'
385
385
  members_dict[member_id] = {
386
386
  constants.OPERATING_STATUS: member_operating_status}
387
387
 
@@ -1245,7 +1245,7 @@ class TestUpdateHealthDb(base.TestCase):
1245
1245
  # Build our own custom listeners/pools/members
1246
1246
  for i in [1, 2, 3, 4, 5]:
1247
1247
 
1248
- lb_ref['listeners']['listener-id-%s' % i] = {
1248
+ lb_ref['listeners'][f'listener-id-{i}'] = {
1249
1249
  constants.OPERATING_STATUS: 'bogus',
1250
1250
  'protocol': constants.PROTOCOL_TCP,
1251
1251
  'enabled': True}
@@ -1255,9 +1255,9 @@ class TestUpdateHealthDb(base.TestCase):
1255
1255
  constants.OPERATING_STATUS: 'bogus'}, 'member-id-31': {
1256
1256
  constants.OPERATING_STATUS: 'bogus'}}
1257
1257
  else:
1258
- members_dict = {'member-id-%s' % i: {
1258
+ members_dict = {f'member-id-{i}': {
1259
1259
  constants.OPERATING_STATUS: 'bogus'}}
1260
- lb_ref['pools']['pool-id-%s' % i] = {
1260
+ lb_ref['pools'][f'pool-id-{i}'] = {
1261
1261
  'members': members_dict, constants.OPERATING_STATUS: 'bogus'}
1262
1262
 
1263
1263
  self.amphora_repo.get_lb_for_health_update.return_value = lb_ref
@@ -71,7 +71,6 @@ class TestVRRPRestDriver(base.TestCase):
71
71
  "}\n"
72
72
  "\n"
73
73
  "vrrp_instance TESTGROUP {\n"
74
- " state MASTER\n"
75
74
  " interface eth1\n"
76
75
  " virtual_router_id 1\n"
77
76
  " priority 100\n"
@@ -124,7 +123,6 @@ class TestVRRPRestDriver(base.TestCase):
124
123
  "}\n"
125
124
  "\n"
126
125
  "vrrp_instance TESTGROUP {\n"
127
- " state MASTER\n"
128
126
  " interface eth1\n"
129
127
  " virtual_router_id 1\n"
130
128
  " priority 100\n"
@@ -170,7 +168,6 @@ class TestVRRPRestDriver(base.TestCase):
170
168
  "}\n"
171
169
  "\n"
172
170
  "vrrp_instance TESTGROUP {\n"
173
- " state MASTER\n"
174
171
  " interface eth1\n"
175
172
  " virtual_router_id 1\n"
176
173
  " priority 100\n"
@@ -220,7 +217,6 @@ class TestVRRPRestDriver(base.TestCase):
220
217
  "}\n"
221
218
  "\n"
222
219
  "vrrp_instance TESTGROUP {\n"
223
- " state MASTER\n"
224
220
  " interface eth1\n"
225
221
  " virtual_router_id 1\n"
226
222
  " priority 100\n"