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
@@ -76,7 +76,7 @@ class TestL7Policy(base.BaseAPITest):
76
76
  'is_admin_project': True,
77
77
  'service_project_domain_id': None,
78
78
  'service_project_id': None,
79
- 'roles': ['load-balancer_member'],
79
+ 'roles': ['load-balancer_member', 'member'],
80
80
  'user_id': None,
81
81
  'is_admin': False,
82
82
  'service_user_domain_id': None,
@@ -209,7 +209,7 @@ class TestL7Policy(base.BaseAPITest):
209
209
  'is_admin_project': True,
210
210
  'service_project_domain_id': None,
211
211
  'service_project_id': None,
212
- 'roles': ['load-balancer_member'],
212
+ 'roles': ['load-balancer_member', 'member'],
213
213
  'user_id': None,
214
214
  'is_admin': False,
215
215
  'service_user_domain_id': None,
@@ -523,9 +523,9 @@ class TestL7Policy(base.BaseAPITest):
523
523
  l7pos = self.get(self.L7POLICIES_PATH, params={
524
524
  'fields': ['id', 'project_id']}).json
525
525
  for l7po in l7pos['l7policies']:
526
- self.assertIn(u'id', l7po)
527
- self.assertIn(u'project_id', l7po)
528
- self.assertNotIn(u'description', l7po)
526
+ self.assertIn('id', l7po)
527
+ self.assertIn('project_id', l7po)
528
+ self.assertNotIn('description', l7po)
529
529
 
530
530
  def test_get_one_fields_filter(self):
531
531
  l7p1 = self.create_l7policy(
@@ -536,9 +536,9 @@ class TestL7Policy(base.BaseAPITest):
536
536
  l7po = self.get(
537
537
  self.L7POLICY_PATH.format(l7policy_id=l7p1.get('id')),
538
538
  params={'fields': ['id', 'project_id']}).json.get(self.root_tag)
539
- self.assertIn(u'id', l7po)
540
- self.assertIn(u'project_id', l7po)
541
- self.assertNotIn(u'description', l7po)
539
+ self.assertIn('id', l7po)
540
+ self.assertIn('project_id', l7po)
541
+ self.assertNotIn('description', l7po)
542
542
 
543
543
  def test_get_all_filter(self):
544
544
  policy1 = self.create_l7policy(
@@ -685,7 +685,7 @@ class TestL7Policy(base.BaseAPITest):
685
685
  'is_admin_project': True,
686
686
  'service_project_domain_id': None,
687
687
  'service_project_id': None,
688
- 'roles': ['load-balancer_member'],
688
+ 'roles': ['load-balancer_member', 'member'],
689
689
  'user_id': None,
690
690
  'is_admin': False,
691
691
  'service_user_domain_id': None,
@@ -919,7 +919,7 @@ class TestL7Policy(base.BaseAPITest):
919
919
  'is_admin_project': True,
920
920
  'service_project_domain_id': None,
921
921
  'service_project_id': None,
922
- 'roles': ['load-balancer_member'],
922
+ 'roles': ['load-balancer_member', 'member'],
923
923
  'user_id': None,
924
924
  'is_admin': False,
925
925
  'service_user_domain_id': None,
@@ -1165,7 +1165,7 @@ class TestL7Policy(base.BaseAPITest):
1165
1165
  'is_admin_project': True,
1166
1166
  'service_project_domain_id': None,
1167
1167
  'service_project_id': None,
1168
- 'roles': ['load-balancer_member'],
1168
+ 'roles': ['load-balancer_member', 'member'],
1169
1169
  'user_id': None,
1170
1170
  'is_admin': False,
1171
1171
  'service_user_domain_id': None,
@@ -76,7 +76,7 @@ class TestL7Rule(base.BaseAPITest):
76
76
  'is_admin_project': True,
77
77
  'service_project_domain_id': None,
78
78
  'service_project_id': None,
79
- 'roles': ['load-balancer_member'],
79
+ 'roles': ['load-balancer_member', 'member'],
80
80
  'user_id': None,
81
81
  'is_admin': False,
82
82
  'service_user_domain_id': None,
@@ -175,7 +175,7 @@ class TestL7Rule(base.BaseAPITest):
175
175
  'is_admin_project': True,
176
176
  'service_project_domain_id': None,
177
177
  'service_project_id': None,
178
- 'roles': ['load-balancer_member'],
178
+ 'roles': ['load-balancer_member', 'member'],
179
179
  'user_id': None,
180
180
  'is_admin': False,
181
181
  'service_user_domain_id': None,
@@ -356,9 +356,9 @@ class TestL7Rule(base.BaseAPITest):
356
356
  l7rus = self.get(self.l7rules_path, params={
357
357
  'fields': ['id', 'compare_type']}).json
358
358
  for l7ru in l7rus['rules']:
359
- self.assertIn(u'id', l7ru)
360
- self.assertIn(u'compare_type', l7ru)
361
- self.assertNotIn(u'project_id', l7ru)
359
+ self.assertIn('id', l7ru)
360
+ self.assertIn('compare_type', l7ru)
361
+ self.assertNotIn('project_id', l7ru)
362
362
 
363
363
  def test_get_one_fields_filter(self):
364
364
  l7r1 = self.create_l7rule(
@@ -370,9 +370,9 @@ class TestL7Rule(base.BaseAPITest):
370
370
  l7ru = self.get(
371
371
  self.l7rule_path.format(l7rule_id=l7r1.get('id')),
372
372
  params={'fields': ['id', 'compare_type']}).json.get(self.root_tag)
373
- self.assertIn(u'id', l7ru)
374
- self.assertIn(u'compare_type', l7ru)
375
- self.assertNotIn(u'project_id', l7ru)
373
+ self.assertIn('id', l7ru)
374
+ self.assertIn('compare_type', l7ru)
375
+ self.assertNotIn('project_id', l7ru)
376
376
 
377
377
  def test_get_all_filter(self):
378
378
  ru1 = self.create_l7rule(
@@ -542,7 +542,7 @@ class TestL7Rule(base.BaseAPITest):
542
542
  'is_admin_project': True,
543
543
  'service_project_domain_id': None,
544
544
  'service_project_id': None,
545
- 'roles': ['load-balancer_member'],
545
+ 'roles': ['load-balancer_member', 'member'],
546
546
  'user_id': None,
547
547
  'is_admin': False,
548
548
  'service_user_domain_id': None,
@@ -599,8 +599,7 @@ class TestL7Rule(base.BaseAPITest):
599
599
  l7policy_id, constants.L7RULE_TYPE_HOST_NAME,
600
600
  constants.L7RULE_COMPARE_TYPE_EQUAL_TO,
601
601
  'www.example.com', status=409)
602
- ref_msg = ('L7Policy %s is immutable and cannot be updated.' %
603
- l7policy_id)
602
+ ref_msg = f'L7Policy {l7policy_id} is immutable and cannot be updated.'
604
603
  self.assertEqual(ref_msg, api_l7rule.get('faultstring'))
605
604
 
606
605
  def test_create_path_rule(self):
@@ -797,7 +796,7 @@ class TestL7Rule(base.BaseAPITest):
797
796
  'key': 'no-need-key'}
798
797
  response = req_func(first_req_arg, self._build_body(l7rule),
799
798
  status=400).json
800
- self.assertIn('L7rule type {0} does not use the "key" field.'.format(
799
+ self.assertIn('L7rule type {} does not use the "key" field.'.format(
801
800
  constants.L7RULE_TYPE_SSL_CONN_HAS_CERT),
802
801
  response.get('faultstring'))
803
802
 
@@ -806,7 +805,7 @@ class TestL7Rule(base.BaseAPITest):
806
805
  response = req_func(first_req_arg, self._build_body(l7rule),
807
806
  status=400).json
808
807
  self.assertIn(
809
- 'L7rule value {0} is not a boolean True string.'.format(
808
+ 'L7rule value {} is not a boolean True string.'.format(
810
809
  l7rule['value']), response.get('faultstring'))
811
810
 
812
811
  l7rule['value'] = 'tRUe'
@@ -814,7 +813,7 @@ class TestL7Rule(base.BaseAPITest):
814
813
  response = req_func(first_req_arg, self._build_body(l7rule),
815
814
  status=400).json
816
815
  self.assertIn(
817
- 'L7rule type {0} only supports the {1} compare type.'.format(
816
+ 'L7rule type {} only supports the {} compare type.'.format(
818
817
  constants.L7RULE_TYPE_SSL_CONN_HAS_CERT,
819
818
  constants.L7RULE_COMPARE_TYPE_EQUAL_TO),
820
819
  response.get('faultstring'))
@@ -829,14 +828,14 @@ class TestL7Rule(base.BaseAPITest):
829
828
  response = req_func(first_req_arg, self._build_body(l7rule),
830
829
  status=400).json
831
830
  self.assertIn(
832
- 'L7rule type {0} does not use the "key" field.'.format(
831
+ 'L7rule type {} does not use the "key" field.'.format(
833
832
  l7rule['type']), response.get('faultstring'))
834
833
 
835
834
  l7rule.pop('key')
836
835
  response = req_func(first_req_arg, self._build_body(l7rule),
837
836
  status=400).json
838
837
  self.assertIn(
839
- 'L7rule type {0} needs a int value, which is >= 0'.format(
838
+ 'L7rule type {} needs a int value, which is >= 0'.format(
840
839
  l7rule['type']), response.get('faultstring'))
841
840
 
842
841
  l7rule['value'] = '0'
@@ -844,7 +843,7 @@ class TestL7Rule(base.BaseAPITest):
844
843
  response = req_func(first_req_arg, self._build_body(l7rule),
845
844
  status=400).json
846
845
  self.assertIn(
847
- 'L7rule type {0} only supports the {1} compare type.'.format(
846
+ 'L7rule type {} only supports the {} compare type.'.format(
848
847
  l7rule['type'], constants.L7RULE_COMPARE_TYPE_EQUAL_TO),
849
848
  response.get('faultstring'))
850
849
 
@@ -861,7 +860,7 @@ class TestL7Rule(base.BaseAPITest):
861
860
  response = req_func(first_req_arg, self._build_body(l7rule),
862
861
  status=400).json
863
862
  self.assertIn(
864
- 'L7rule type {0} needs to specify a key and a value.'.format(
863
+ 'L7rule type {} needs to specify a key and a value.'.format(
865
864
  l7rule['type']), response.get('faultstring'))
866
865
 
867
866
  l7rule['key'] = 'NOT_SUPPORTED_DN_FIELD'
@@ -922,7 +921,7 @@ class TestL7Rule(base.BaseAPITest):
922
921
  'is_admin_project': True,
923
922
  'service_project_domain_id': None,
924
923
  'service_project_id': None,
925
- 'roles': ['load-balancer_member'],
924
+ 'roles': ['load-balancer_member', 'member'],
926
925
  'user_id': None,
927
926
  'is_admin': False,
928
927
  'service_user_domain_id': None,
@@ -1126,7 +1125,7 @@ class TestL7Rule(base.BaseAPITest):
1126
1125
  'is_admin_project': True,
1127
1126
  'service_project_domain_id': None,
1128
1127
  'service_project_id': None,
1129
- 'roles': ['load-balancer_member'],
1128
+ 'roles': ['load-balancer_member', 'member'],
1130
1129
  'user_id': None,
1131
1130
  'is_admin': False,
1132
1131
  'service_user_domain_id': None,
@@ -112,7 +112,7 @@ class TestListener(base.BaseAPITest):
112
112
  'is_admin_project': True,
113
113
  'service_project_domain_id': None,
114
114
  'service_project_id': None,
115
- 'roles': ['load-balancer_member'],
115
+ 'roles': ['load-balancer_member', 'member'],
116
116
  'user_id': None,
117
117
  'is_admin': False,
118
118
  'service_user_domain_id': None,
@@ -383,9 +383,9 @@ class TestListener(base.BaseAPITest):
383
383
  lis = self.get(self.LISTENERS_PATH, params={
384
384
  'fields': ['id', 'project_id']}).json
385
385
  for li in lis['listeners']:
386
- self.assertIn(u'id', li)
387
- self.assertIn(u'project_id', li)
388
- self.assertNotIn(u'description', li)
386
+ self.assertIn('id', li)
387
+ self.assertIn('project_id', li)
388
+ self.assertNotIn('description', li)
389
389
 
390
390
  def test_get_one_fields_filter(self):
391
391
  listener1 = self.create_listener(
@@ -396,9 +396,9 @@ class TestListener(base.BaseAPITest):
396
396
  li = self.get(
397
397
  self.LISTENER_PATH.format(listener_id=listener1.get('id')),
398
398
  params={'fields': ['id', 'project_id']}).json.get(self.root_tag)
399
- self.assertIn(u'id', li)
400
- self.assertIn(u'project_id', li)
401
- self.assertNotIn(u'description', li)
399
+ self.assertIn('id', li)
400
+ self.assertIn('project_id', li)
401
+ self.assertNotIn('description', li)
402
402
 
403
403
  def test_get_all_filter(self):
404
404
  li1 = self.create_listener(constants.PROTOCOL_HTTP,
@@ -558,7 +558,7 @@ class TestListener(base.BaseAPITest):
558
558
  'is_admin_project': True,
559
559
  'service_project_domain_id': None,
560
560
  'service_project_id': None,
561
- 'roles': ['load-balancer_member'],
561
+ 'roles': ['load-balancer_member', 'member'],
562
562
  'user_id': None,
563
563
  'is_admin': False,
564
564
  'service_user_domain_id': None,
@@ -699,11 +699,10 @@ class TestListener(base.BaseAPITest):
699
699
  optionals.update({field[0]: 1})
700
700
  fault = resp.get('faultstring')
701
701
  self.assertIn(
702
- 'Invalid input for field/attribute {0}'.format(
703
- field[0]), fault)
702
+ f'Invalid input for field/attribute {field[0]}', fault)
704
703
  self.assertIn(
705
- 'Value should be lower or equal to {0}'.format(
706
- constants.MAX_TIMEOUT), fault)
704
+ f'Value should be lower or equal to {constants.MAX_TIMEOUT}',
705
+ fault)
707
706
 
708
707
  def test_create_with_timeouts_too_low(self):
709
708
  optionals = {
@@ -717,8 +716,8 @@ class TestListener(base.BaseAPITest):
717
716
  self.assertIn(
718
717
  'Invalid input for field/attribute timeout_tcp_inspect', fault)
719
718
  self.assertIn(
720
- 'Value should be greater or equal to {0}'.format(
721
- constants.MIN_TIMEOUT), fault)
719
+ f'Value should be greater or equal to {constants.MIN_TIMEOUT}',
720
+ fault)
722
721
 
723
722
  def test_create_udp_case(self):
724
723
  api_listener = self.create_listener(constants.PROTOCOL_UDP, 6666,
@@ -807,7 +806,7 @@ class TestListener(base.BaseAPITest):
807
806
  self.assertIn(
808
807
  'Certificate container references are not allowed on ', fault)
809
808
  self.assertIn(
810
- '{} protocol listeners.'.format(constants.PROTOCOL_TCP), fault)
809
+ f'{constants.PROTOCOL_TCP} protocol listeners.', fault)
811
810
 
812
811
  def test_create_without_certs_if_terminated_https(self):
813
812
  optionals = {
@@ -977,7 +976,7 @@ class TestListener(base.BaseAPITest):
977
976
  'is_admin_project': True,
978
977
  'service_project_domain_id': None,
979
978
  'service_project_id': None,
980
- 'roles': ['load-balancer_member'],
979
+ 'roles': ['load-balancer_member', 'member'],
981
980
  'user_id': None,
982
981
  'is_admin': False,
983
982
  'service_user_domain_id': None,
@@ -1276,7 +1275,7 @@ class TestListener(base.BaseAPITest):
1276
1275
  self._test_create_with_allowed_cidrs(allowed_cidrs, lb_id)
1277
1276
 
1278
1277
  def test_create_with_bad_allowed_cidrs(self):
1279
- allowed_cidrs = [u'10.0.1.0/33', u'172.16.55.1.0/25']
1278
+ allowed_cidrs = ['10.0.1.0/33', '172.16.55.1.0/25']
1280
1279
  lb_listener = {
1281
1280
  'protocol': constants.PROTOCOL_TCP,
1282
1281
  'protocol_port': 80,
@@ -1715,8 +1714,7 @@ class TestListener(base.BaseAPITest):
1715
1714
  fault = response.get('faultstring')
1716
1715
  self.assertIn(
1717
1716
  'Certificate container references are not allowed on ', fault)
1718
- self.assertIn('{} protocol listeners.'.format(
1719
- constants.PROTOCOL_TCP), fault)
1717
+ self.assertIn(f'{constants.PROTOCOL_TCP} protocol listeners.', fault)
1720
1718
 
1721
1719
  def test_update_with_ca_cert(self):
1722
1720
  self.cert_manager_mock().get_secret.return_value = (
@@ -2108,7 +2106,7 @@ class TestListener(base.BaseAPITest):
2108
2106
  'is_admin_project': True,
2109
2107
  'service_project_domain_id': None,
2110
2108
  'service_project_id': None,
2111
- 'roles': ['load-balancer_member'],
2109
+ 'roles': ['load-balancer_member', 'member'],
2112
2110
  'user_id': None,
2113
2111
  'is_admin': False,
2114
2112
  'service_user_domain_id': None,
@@ -2269,7 +2267,7 @@ class TestListener(base.BaseAPITest):
2269
2267
  'is_admin_project': True,
2270
2268
  'service_project_domain_id': None,
2271
2269
  'service_project_id': None,
2272
- 'roles': ['load-balancer_member'],
2270
+ 'roles': ['load-balancer_member', 'member'],
2273
2271
  'user_id': None,
2274
2272
  'is_admin': False,
2275
2273
  'service_user_domain_id': None,
@@ -2576,7 +2574,7 @@ class TestListener(base.BaseAPITest):
2576
2574
  default_tls_container_ref=cert_id,
2577
2575
  status=400)
2578
2576
  self.assertIn(
2579
- 'The selected protocol is not allowed in this deployment: {0}'
2577
+ 'The selected protocol is not allowed in this deployment: {}'
2580
2578
  .format(constants.PROTOCOL_TERMINATED_HTTPS),
2581
2579
  listener.get('faultstring'))
2582
2580
 
@@ -2776,9 +2774,9 @@ class TestListener(base.BaseAPITest):
2776
2774
  lb_listener['insert_headers'] = header
2777
2775
  body = self._build_body(lb_listener)
2778
2776
  listener = self.post(self.LISTENERS_PATH, body, status=400).json
2779
- self.assertIn('{0} is not a valid option for {1}'.format(
2777
+ self.assertIn('{} is not a valid option for {}'.format(
2780
2778
  [name],
2781
- '%s protocol listener.' % constants.PROTOCOL_HTTP),
2779
+ f'{constants.PROTOCOL_HTTP} protocol listener.'),
2782
2780
  listener.get('faultstring'))
2783
2781
 
2784
2782
  @mock.patch('octavia.common.tls_utils.cert_parser.load_certificates_data')
@@ -2829,9 +2827,9 @@ class TestListener(base.BaseAPITest):
2829
2827
  listener_id=listener['listener'].get('id'))
2830
2828
  update_listener = self.put(
2831
2829
  listener_path, new_listener, status=400).json
2832
- self.assertIn('{0} is not a valid option for {1}'.format(
2833
- '[\'X-Bad-Header\']', 'insert_headers'),
2834
- update_listener.get('faultstring'))
2830
+ self.assertIn('[\'X-Bad-Header\'] is not a valid option for '
2831
+ 'insert_headers',
2832
+ update_listener.get('faultstring'))
2835
2833
 
2836
2834
  # test client certificate http headers
2837
2835
  header = {}
@@ -2928,7 +2926,7 @@ class TestListener(base.BaseAPITest):
2928
2926
  'is_admin_project': True,
2929
2927
  'service_project_domain_id': None,
2930
2928
  'service_project_id': None,
2931
- 'roles': ['load-balancer_member'],
2929
+ 'roles': ['load-balancer_member', 'member'],
2932
2930
  'user_id': None,
2933
2931
  'is_admin': False,
2934
2932
  'service_user_domain_id': None,
@@ -156,7 +156,7 @@ class TestLoadBalancer(base.BaseAPITest):
156
156
  ".NoopManager.get_subnet") as mock_get_subnet:
157
157
  mock_get_subnet.side_effect = network_base.SubnetNotFound
158
158
  response = self.post(self.LBS_PATH, body, status=400)
159
- err_msg = 'Subnet {} not found.'.format(subnet_id)
159
+ err_msg = f'Subnet {subnet_id} not found.'
160
160
  self.assertEqual(err_msg, response.json.get('faultstring'))
161
161
 
162
162
  def test_create_with_invalid_vip_network_subnet(self):
@@ -172,7 +172,7 @@ class TestLoadBalancer(base.BaseAPITest):
172
172
  ".NoopManager.get_network") as mock_get_network:
173
173
  mock_get_network.return_value = network
174
174
  response = self.post(self.LBS_PATH, body, status=400)
175
- err_msg = 'Subnet {} not found.'.format(subnet_id)
175
+ err_msg = f'Subnet {subnet_id} not found.'
176
176
  self.assertEqual(err_msg, response.json.get('faultstring'))
177
177
 
178
178
  def test_create_with_vip_subnet_fills_network(self):
@@ -850,7 +850,7 @@ class TestLoadBalancer(base.BaseAPITest):
850
850
  mock_get_subnet.return_value = subnet
851
851
  mock_get_qos.side_effect = Exception()
852
852
  response = self.post(self.LBS_PATH, body, status=400)
853
- err_msg = "qos_policy %s not found." % qos_policy_id
853
+ err_msg = f"qos_policy {qos_policy_id} not found."
854
854
  self.assertEqual(err_msg, response.json.get('faultstring'))
855
855
 
856
856
  def test_create_with_long_name(self):
@@ -995,7 +995,7 @@ class TestLoadBalancer(base.BaseAPITest):
995
995
  'is_admin_project': True,
996
996
  'service_project_domain_id': None,
997
997
  'service_project_id': None,
998
- 'roles': ['load-balancer_member'],
998
+ 'roles': ['load-balancer_member', 'member'],
999
999
  'user_id': None,
1000
1000
  'is_admin': False,
1001
1001
  'service_user_domain_id': None,
@@ -1306,7 +1306,7 @@ class TestLoadBalancer(base.BaseAPITest):
1306
1306
  'is_admin_project': True,
1307
1307
  'service_project_domain_id': None,
1308
1308
  'service_project_id': None,
1309
- 'roles': ['load-balancer_member'],
1309
+ 'roles': ['load-balancer_member', 'member'],
1310
1310
  'user_id': None,
1311
1311
  'is_admin': False,
1312
1312
  'service_user_domain_id': None,
@@ -1414,7 +1414,7 @@ class TestLoadBalancer(base.BaseAPITest):
1414
1414
  name='lb3', project_id=project_id)
1415
1415
  auth_strategy = self.conf.conf.api_settings.get('auth_strategy')
1416
1416
  self.conf.config(group='api_settings', auth_strategy=constants.TESTING)
1417
- LB_PROJECT_PATH = '{}?project_id={}'.format(self.LBS_PATH, project_id)
1417
+ LB_PROJECT_PATH = f'{self.LBS_PATH}?project_id={project_id}'
1418
1418
  with mock.patch.object(octavia.common.context.RequestContext,
1419
1419
  'project_id',
1420
1420
  self.project_id):
@@ -1567,9 +1567,9 @@ class TestLoadBalancer(base.BaseAPITest):
1567
1567
  lbs = self.get(self.LBS_PATH, params={
1568
1568
  'fields': ['id', 'project_id']}).json
1569
1569
  for lb in lbs['loadbalancers']:
1570
- self.assertIn(u'id', lb)
1571
- self.assertIn(u'project_id', lb)
1572
- self.assertNotIn(u'description', lb)
1570
+ self.assertIn('id', lb)
1571
+ self.assertIn('project_id', lb)
1572
+ self.assertNotIn('description', lb)
1573
1573
 
1574
1574
  def test_get_one_fields_filter(self):
1575
1575
  lb1 = self.create_load_balancer(
@@ -1579,9 +1579,9 @@ class TestLoadBalancer(base.BaseAPITest):
1579
1579
  lb = self.get(
1580
1580
  self.LB_PATH.format(lb_id=lb1.get('id')),
1581
1581
  params={'fields': ['id', 'project_id']}).json.get(self.root_tag)
1582
- self.assertIn(u'id', lb)
1583
- self.assertIn(u'project_id', lb)
1584
- self.assertNotIn(u'description', lb)
1582
+ self.assertIn('id', lb)
1583
+ self.assertIn('project_id', lb)
1584
+ self.assertNotIn('description', lb)
1585
1585
 
1586
1586
  def test_get_all_admin_state_up_filter(self):
1587
1587
  self.create_load_balancer(uuidutils.generate_uuid(),
@@ -1892,7 +1892,7 @@ class TestLoadBalancer(base.BaseAPITest):
1892
1892
  'is_admin_project': True,
1893
1893
  'service_project_domain_id': None,
1894
1894
  'service_project_id': None,
1895
- 'roles': ['load-balancer_member'],
1895
+ 'roles': ['load-balancer_member', 'member'],
1896
1896
  'user_id': None,
1897
1897
  'is_admin': False,
1898
1898
  'service_user_domain_id': None,
@@ -2092,7 +2092,7 @@ class TestLoadBalancer(base.BaseAPITest):
2092
2092
  'is_admin_project': True,
2093
2093
  'service_project_domain_id': None,
2094
2094
  'service_project_id': None,
2095
- 'roles': ['load-balancer_member'],
2095
+ 'roles': ['load-balancer_member', 'member'],
2096
2096
  'user_id': None,
2097
2097
  'is_admin': False,
2098
2098
  'service_user_domain_id': None,
@@ -2276,7 +2276,7 @@ class TestLoadBalancer(base.BaseAPITest):
2276
2276
  'is_admin_project': True,
2277
2277
  'service_project_domain_id': None,
2278
2278
  'service_project_id': None,
2279
- 'roles': ['load-balancer_member'],
2279
+ 'roles': ['load-balancer_member', 'member'],
2280
2280
  'user_id': None,
2281
2281
  'is_admin': False,
2282
2282
  'service_user_domain_id': None,
@@ -4008,7 +4008,7 @@ class TestLoadBalancerGraph(base.BaseAPITest):
4008
4008
  'is_admin_project': True,
4009
4009
  'service_project_domain_id': None,
4010
4010
  'service_project_id': None,
4011
- 'roles': ['load-balancer_member'],
4011
+ 'roles': ['load-balancer_member', 'member'],
4012
4012
  'user_id': None,
4013
4013
  'is_admin': False,
4014
4014
  'service_user_domain_id': None,
@@ -4111,7 +4111,7 @@ class TestLoadBalancerGraph(base.BaseAPITest):
4111
4111
  'is_admin_project': True,
4112
4112
  'service_project_domain_id': None,
4113
4113
  'service_project_id': None,
4114
- 'roles': ['load-balancer_member'],
4114
+ 'roles': ['load-balancer_member', 'member'],
4115
4115
  'user_id': None,
4116
4116
  'is_admin': False,
4117
4117
  'service_user_domain_id': None,