octavia 14.0.0.0rc1__py3-none-any.whl → 15.0.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (307) hide show
  1. octavia/amphorae/backends/agent/agent_jinja_cfg.py +1 -4
  2. octavia/amphorae/backends/agent/api_server/amphora_info.py +5 -5
  3. octavia/amphorae/backends/agent/api_server/keepalived.py +26 -53
  4. octavia/amphorae/backends/agent/api_server/keepalivedlvs.py +44 -83
  5. octavia/amphorae/backends/agent/api_server/loadbalancer.py +94 -112
  6. octavia/amphorae/backends/agent/api_server/lvs_listener_base.py +1 -1
  7. octavia/amphorae/backends/agent/api_server/osutils.py +11 -8
  8. octavia/amphorae/backends/agent/api_server/plug.py +12 -13
  9. octavia/amphorae/backends/agent/api_server/server.py +4 -3
  10. octavia/amphorae/backends/agent/api_server/templates/keepalived_lvs_check_script.sh.j2 +0 -4
  11. octavia/amphorae/backends/agent/api_server/util.py +23 -68
  12. octavia/amphorae/backends/agent/templates/amphora_agent_conf.template +0 -3
  13. octavia/amphorae/backends/health_daemon/health_daemon.py +6 -7
  14. octavia/amphorae/backends/health_daemon/health_sender.py +2 -2
  15. octavia/amphorae/backends/utils/haproxy_query.py +3 -6
  16. octavia/amphorae/backends/utils/interface.py +11 -50
  17. octavia/amphorae/backends/utils/interface_file.py +29 -16
  18. octavia/amphorae/backends/utils/ip_advertisement.py +1 -1
  19. octavia/amphorae/backends/utils/keepalivedlvs_query.py +7 -8
  20. octavia/amphorae/backends/utils/network_namespace.py +3 -3
  21. octavia/amphorae/backends/utils/nftable_utils.py +33 -11
  22. octavia/amphorae/drivers/driver_base.py +2 -2
  23. octavia/amphorae/drivers/haproxy/rest_api_driver.py +26 -38
  24. octavia/amphorae/drivers/health/heartbeat_udp.py +1 -1
  25. octavia/amphorae/drivers/keepalived/jinja/jinja_cfg.py +1 -2
  26. octavia/amphorae/drivers/keepalived/jinja/templates/keepalived_base.template +0 -1
  27. octavia/amphorae/drivers/noop_driver/driver.py +1 -1
  28. octavia/api/app.py +1 -2
  29. octavia/api/common/pagination.py +16 -22
  30. octavia/api/common/types.py +1 -1
  31. octavia/api/drivers/amphora_driver/v2/driver.py +6 -6
  32. octavia/api/drivers/driver_agent/driver_listener.py +3 -3
  33. octavia/api/drivers/driver_agent/driver_updater.py +1 -1
  34. octavia/api/drivers/noop_driver/driver.py +1 -1
  35. octavia/api/root_controller.py +2 -2
  36. octavia/api/v2/controllers/base.py +2 -4
  37. octavia/api/v2/controllers/health_monitor.py +5 -3
  38. octavia/api/v2/controllers/listener.py +2 -2
  39. octavia/api/v2/controllers/load_balancer.py +7 -0
  40. octavia/api/v2/controllers/member.py +12 -2
  41. octavia/api/v2/types/amphora.py +1 -1
  42. octavia/api/v2/types/availability_zone_profile.py +1 -2
  43. octavia/api/v2/types/availability_zones.py +1 -2
  44. octavia/api/v2/types/flavor_profile.py +1 -1
  45. octavia/api/v2/types/flavors.py +1 -1
  46. octavia/api/v2/types/health_monitor.py +1 -1
  47. octavia/api/v2/types/l7policy.py +1 -1
  48. octavia/api/v2/types/l7rule.py +1 -1
  49. octavia/api/v2/types/listener.py +3 -3
  50. octavia/api/v2/types/load_balancer.py +3 -3
  51. octavia/api/v2/types/member.py +2 -2
  52. octavia/api/v2/types/pool.py +2 -2
  53. octavia/api/v2/types/quotas.py +2 -2
  54. octavia/certificates/common/barbican.py +1 -1
  55. octavia/certificates/common/cert.py +1 -1
  56. octavia/certificates/generator/cert_gen.py +1 -1
  57. octavia/certificates/generator/local.py +5 -5
  58. octavia/certificates/manager/cert_mgr.py +1 -1
  59. octavia/certificates/manager/local.py +20 -20
  60. octavia/cmd/agent.py +3 -3
  61. octavia/cmd/driver_agent.py +2 -3
  62. octavia/cmd/health_checker.py +4 -4
  63. octavia/cmd/interface.py +4 -4
  64. octavia/cmd/prometheus_proxy.py +11 -13
  65. octavia/common/base_taskflow.py +3 -3
  66. octavia/common/clients.py +4 -4
  67. octavia/common/config.py +18 -24
  68. octavia/common/constants.py +28 -35
  69. octavia/common/data_models.py +2 -2
  70. octavia/common/jinja/haproxy/combined_listeners/jinja_cfg.py +5 -5
  71. octavia/common/jinja/logging/logging_jinja_cfg.py +1 -1
  72. octavia/common/jinja/lvs/jinja_cfg.py +1 -1
  73. octavia/common/jinja/user_data_jinja_cfg.py +1 -1
  74. octavia/common/keystone.py +1 -1
  75. octavia/common/policy.py +2 -3
  76. octavia/common/stats.py +1 -1
  77. octavia/common/tls_utils/cert_parser.py +2 -1
  78. octavia/common/utils.py +3 -3
  79. octavia/common/validate.py +9 -13
  80. octavia/compute/compute_base.py +1 -1
  81. octavia/compute/drivers/noop_driver/driver.py +1 -1
  82. octavia/compute/drivers/nova_driver.py +1 -1
  83. octavia/controller/healthmanager/health_manager.py +1 -1
  84. octavia/controller/housekeeping/house_keeping.py +2 -2
  85. octavia/controller/queue/v2/consumer.py +1 -2
  86. octavia/controller/queue/v2/endpoints.py +1 -1
  87. octavia/controller/worker/amphora_rate_limit.py +6 -6
  88. octavia/controller/worker/task_utils.py +1 -1
  89. octavia/controller/worker/v2/controller_worker.py +3 -3
  90. octavia/controller/worker/v2/flows/amphora_flows.py +15 -4
  91. octavia/controller/worker/v2/flows/flow_utils.py +6 -5
  92. octavia/controller/worker/v2/flows/health_monitor_flows.py +1 -1
  93. octavia/controller/worker/v2/flows/l7policy_flows.py +1 -1
  94. octavia/controller/worker/v2/flows/l7rule_flows.py +1 -1
  95. octavia/controller/worker/v2/flows/listener_flows.py +18 -6
  96. octavia/controller/worker/v2/flows/load_balancer_flows.py +1 -1
  97. octavia/controller/worker/v2/flows/member_flows.py +12 -19
  98. octavia/controller/worker/v2/flows/pool_flows.py +1 -1
  99. octavia/controller/worker/v2/taskflow_jobboard_driver.py +17 -3
  100. octavia/controller/worker/v2/tasks/compute_tasks.py +1 -3
  101. octavia/controller/worker/v2/tasks/network_tasks.py +3 -4
  102. octavia/db/base_models.py +21 -9
  103. octavia/db/migration/alembic_migrations/versions/034756a182a2_amphora_add_image_id.py +2 -2
  104. octavia/db/migration/alembic_migrations/versions/034b2dc2f3e0_modernize_l7policy_fields.py +31 -31
  105. octavia/db/migration/alembic_migrations/versions/0f242cf02c74_add_provider_column.py +2 -2
  106. octavia/db/migration/alembic_migrations/versions/10d38216ad34_add_timestamps_to_amphora.py +4 -4
  107. octavia/db/migration/alembic_migrations/versions/11e4bb2bb8ef_fix_ipv6_vip.py +1 -1
  108. octavia/db/migration/alembic_migrations/versions/13500e2e978d_update_url_and_name_size.py +6 -6
  109. octavia/db/migration/alembic_migrations/versions/14892634e228_update_vip.py +5 -5
  110. octavia/db/migration/alembic_migrations/versions/186509101b9b_add_server_group_id_to_loadbalancer.py +2 -2
  111. octavia/db/migration/alembic_migrations/versions/1afc932f1ca2_l7rule_support_client_cert.py +3 -3
  112. octavia/db/migration/alembic_migrations/versions/1e4c1d83044c_keepalived_configuration_datamodel.py +26 -26
  113. octavia/db/migration/alembic_migrations/versions/2351ea316465_adding_terminate_https_tls_ref_support.py +4 -4
  114. octavia/db/migration/alembic_migrations/versions/256852d5ff7c_add_lb_network_ip_to_amphora.py +2 -2
  115. octavia/db/migration/alembic_migrations/versions/27e54d00c3cd_add_monitor_address_and_port_to_member.py +4 -4
  116. octavia/db/migration/alembic_migrations/versions/298eac0640a7_add_amphora_vrrp_port_id_and_ha_port_id.py +4 -4
  117. octavia/db/migration/alembic_migrations/versions/29ff921a6eb_shared_pools.py +3 -3
  118. octavia/db/migration/alembic_migrations/versions/2ad093f6353f_add_listener_client_ca_tls_certificate_.py +2 -2
  119. octavia/db/migration/alembic_migrations/versions/31f7653ded67_allow_multiple_vips_per_loadbalancer.py +10 -10
  120. octavia/db/migration/alembic_migrations/versions/32e5c35b26a8_add_l7policy_and_l7rule_quota.py +4 -4
  121. octavia/db/migration/alembic_migrations/versions/357d17a6d5ac_update_lb_and_amphora_data_model_for_.py +20 -20
  122. octavia/db/migration/alembic_migrations/versions/35dee79d5865_initial_create.py +185 -185
  123. octavia/db/migration/alembic_migrations/versions/36b94648fef8_add_timestamp.py +2 -2
  124. octavia/db/migration/alembic_migrations/versions/392fb85b4419_add_primary_key_to_spares_pool.py +1 -1
  125. octavia/db/migration/alembic_migrations/versions/3a1e1cdb7b27_rename_amphora_host_id.py +1 -1
  126. octavia/db/migration/alembic_migrations/versions/3b199c848b96_create_no_monitor_operational_status.py +1 -1
  127. octavia/db/migration/alembic_migrations/versions/3e5b37a0bdb9_add_vrrp_ip_and_ha_ip_to_amphora.py +4 -4
  128. octavia/db/migration/alembic_migrations/versions/3f8ff3be828e_create_quotas_table.py +12 -12
  129. octavia/db/migration/alembic_migrations/versions/43287cd10fef_make_pool_lb_algorithm_larger.py +6 -6
  130. octavia/db/migration/alembic_migrations/versions/443fe6676637_add_network_id_to_vip.py +2 -2
  131. octavia/db/migration/alembic_migrations/versions/44a2414dd683_adding_name_column_to_member_and_health_.py +1 -1
  132. octavia/db/migration/alembic_migrations/versions/458c9ee2a011_l7_policies_and_rules.py +57 -57
  133. octavia/db/migration/alembic_migrations/versions/46d914b2a5e5_seed_the_spares_pool_table.py +2 -2
  134. octavia/db/migration/alembic_migrations/versions/48660b6643f0_add_new_states_for_amphora.py +3 -3
  135. octavia/db/migration/alembic_migrations/versions/4aeb9e23ad43_add_draining_operating_status.py +1 -1
  136. octavia/db/migration/alembic_migrations/versions/4c094013699a_update_load_balancer_amphora.py +9 -9
  137. octavia/db/migration/alembic_migrations/versions/4f65b4f91c39_amphora_add_flavor_id.py +2 -2
  138. octavia/db/migration/alembic_migrations/versions/4faaa983e7a9_update_member_address_column.py +1 -1
  139. octavia/db/migration/alembic_migrations/versions/4fe8240425b4_update_vip_add_subnet_id.py +2 -2
  140. octavia/db/migration/alembic_migrations/versions/52377704420e_add_timestamps_to_healthmonitor.py +9 -9
  141. octavia/db/migration/alembic_migrations/versions/5309960964f8_add_proxy_protocol_for_pool.py +3 -3
  142. octavia/db/migration/alembic_migrations/versions/543f5d8e4e56_add_a_column_busy_in_table_amphora_health.py +2 -2
  143. octavia/db/migration/alembic_migrations/versions/55874a4ceed6_add_l7policy_action_redirect_prefix.py +5 -5
  144. octavia/db/migration/alembic_migrations/versions/5a3ee5472c31_add_cert_expiration__infor_in_amphora_table.py +4 -4
  145. octavia/db/migration/alembic_migrations/versions/62816c232310_fix_migration_for_mysql_5_7.py +1 -1
  146. octavia/db/migration/alembic_migrations/versions/6742ca1b27c2_add_l7policy_redirect_http_code.py +2 -2
  147. octavia/db/migration/alembic_migrations/versions/6ac558d7fc21_add_prometheus_listener_protocol.py +3 -3
  148. octavia/db/migration/alembic_migrations/versions/6ffc710674ef_spares_pool_table.py +2 -2
  149. octavia/db/migration/alembic_migrations/versions/7432f1d4ea83_add_http_host_head_inject_for_http_health_check.py +4 -4
  150. octavia/db/migration/alembic_migrations/versions/74aae261694c_extend_pool_for_backend_ca_and_crl.py +4 -4
  151. octavia/db/migration/alembic_migrations/versions/76aacf2e176c_extend_support_udp_protocol.py +3 -3
  152. octavia/db/migration/alembic_migrations/versions/80dba23a159f_tags_support.py +3 -3
  153. octavia/db/migration/alembic_migrations/versions/82b9402e71fd_update_vip_address_size.py +1 -1
  154. octavia/db/migration/alembic_migrations/versions/8ac4ed24df3a_add_availability_zone_to_lb.py +4 -4
  155. octavia/db/migration/alembic_migrations/versions/8b47b2546312_sctp_support.py +2 -2
  156. octavia/db/migration/alembic_migrations/versions/8c0851bdf6c3_change_tls_container_id_length_in_sni_.py +1 -1
  157. octavia/db/migration/alembic_migrations/versions/92fe9857279_create_healthmanager_table.py +3 -3
  158. octavia/db/migration/alembic_migrations/versions/9b5473976d6d_add_provisioning_status_to_objects.py +10 -10
  159. octavia/db/migration/alembic_migrations/versions/a1f689aecc1d_extend_pool_for_support_backend_reencryption.py +2 -2
  160. octavia/db/migration/alembic_migrations/versions/a7f187cd221f_add_tls_boolean_type_for_reencryption.py +2 -2
  161. octavia/db/migration/alembic_migrations/versions/b9c703669314_add_flavor_and_flavor_profile_table.py +18 -18
  162. octavia/db/migration/alembic_migrations/versions/ba35e0fb88e1_add_backup_field_to_member.py +2 -2
  163. octavia/db/migration/alembic_migrations/versions/bf171d0d91c3_amphora_add_cached_zone.py +2 -2
  164. octavia/db/migration/alembic_migrations/versions/c761c8a71579_add_availability_zone_table.py +15 -15
  165. octavia/db/migration/alembic_migrations/versions/d85ca7258d21_modernize_l7rule.py +13 -13
  166. octavia/db/migration/alembic_migrations/versions/da371b422669_allowed_cidr_for_listeners.py +7 -7
  167. octavia/db/migration/alembic_migrations/versions/dcf88e59aae4_add_lb_algorithm_source_ip_port.py +3 -3
  168. octavia/db/migration/alembic_migrations/versions/e37941b010db_add_lb_flavor_constraint.py +11 -11
  169. octavia/db/migration/alembic_migrations/versions/e6672bda93bf_add_ping_and_tlshello_monitor_types.py +3 -3
  170. octavia/db/migration/alembic_migrations/versions/e6ee84f0abf3_add_proxy_v2_pool_protocol.py +3 -3
  171. octavia/db/migration/alembic_migrations/versions/ebbcc72b4e5e_add_octavia_owned_vip_column_to_vip_.py +2 -2
  172. octavia/db/migration/alembic_migrations/versions/f21ae3f21adc_add_client_auth_option.py +6 -6
  173. octavia/db/migration/alembic_migrations/versions/fc5582da7d8a_create_amphora_build_rate_limit_tables.py +11 -11
  174. octavia/db/migration/alembic_migrations/versions/ffad172e98c1_add_certificate_revoke_list_option.py +2 -2
  175. octavia/db/models.py +1 -1
  176. octavia/db/repositories.py +3 -3
  177. octavia/distributor/drivers/driver_base.py +1 -1
  178. octavia/distributor/drivers/noop_driver/driver.py +1 -1
  179. octavia/hacking/checks.py +4 -4
  180. octavia/image/drivers/noop_driver/driver.py +1 -1
  181. octavia/image/image_base.py +1 -1
  182. octavia/network/base.py +1 -1
  183. octavia/network/drivers/neutron/allowed_address_pairs.py +11 -9
  184. octavia/network/drivers/neutron/base.py +3 -3
  185. octavia/network/drivers/noop_driver/driver.py +1 -1
  186. octavia/policies/amphora.py +6 -12
  187. octavia/policies/availability_zone.py +5 -10
  188. octavia/policies/availability_zone_profile.py +5 -15
  189. octavia/policies/base.py +1 -20
  190. octavia/policies/flavor.py +5 -10
  191. octavia/policies/flavor_profile.py +5 -10
  192. octavia/policies/healthmonitor.py +6 -12
  193. octavia/policies/l7policy.py +6 -12
  194. octavia/policies/l7rule.py +5 -10
  195. octavia/policies/listener.py +7 -14
  196. octavia/policies/loadbalancer.py +9 -18
  197. octavia/policies/member.py +5 -10
  198. octavia/policies/pool.py +6 -12
  199. octavia/policies/provider.py +1 -2
  200. octavia/policies/provider_availability_zone.py +1 -3
  201. octavia/policies/provider_flavor.py +1 -2
  202. octavia/policies/quota.py +6 -12
  203. octavia/statistics/stats_base.py +1 -1
  204. octavia/tests/common/constants.py +1 -1
  205. octavia/tests/common/data_model_helpers.py +10 -10
  206. octavia/tests/common/sample_data_models.py +1 -1
  207. octavia/tests/common/sample_haproxy_prometheus +17 -17
  208. octavia/tests/common/sample_octavia_prometheus +6 -6
  209. octavia/tests/common/utils.py +2 -2
  210. octavia/tests/functional/amphorae/backend/agent/api_server/test_keepalivedlvs.py +36 -62
  211. octavia/tests/functional/amphorae/backend/agent/api_server/test_server.py +135 -296
  212. octavia/tests/functional/api/drivers/driver_agent/test_driver_agent.py +10 -11
  213. octavia/tests/functional/api/v2/base.py +2 -3
  214. octavia/tests/functional/api/v2/test_amphora.py +6 -6
  215. octavia/tests/functional/api/v2/test_availability_zone_profiles.py +13 -14
  216. octavia/tests/functional/api/v2/test_availability_zones.py +19 -19
  217. octavia/tests/functional/api/v2/test_flavor_profiles.py +19 -20
  218. octavia/tests/functional/api/v2/test_flavors.py +25 -25
  219. octavia/tests/functional/api/v2/test_health_monitor.py +35 -18
  220. octavia/tests/functional/api/v2/test_l7policy.py +11 -11
  221. octavia/tests/functional/api/v2/test_l7rule.py +19 -20
  222. octavia/tests/functional/api/v2/test_listener.py +26 -28
  223. octavia/tests/functional/api/v2/test_load_balancer.py +17 -17
  224. octavia/tests/functional/api/v2/test_member.py +53 -21
  225. octavia/tests/functional/api/v2/test_pool.py +11 -11
  226. octavia/tests/functional/api/v2/test_provider.py +7 -7
  227. octavia/tests/functional/api/v2/test_quotas.py +9 -9
  228. octavia/tests/functional/db/test_models.py +1 -1
  229. octavia/tests/functional/db/test_repositories.py +2 -2
  230. octavia/tests/unit/amphorae/backends/agent/api_server/test_amphora_info.py +60 -61
  231. octavia/tests/unit/amphorae/backends/agent/api_server/test_keepalived.py +3 -3
  232. octavia/tests/unit/amphorae/backends/agent/api_server/test_keepalivedlvs.py +1 -19
  233. octavia/tests/unit/amphorae/backends/agent/api_server/test_loadbalancer.py +94 -34
  234. octavia/tests/unit/amphorae/backends/agent/api_server/test_osutils.py +19 -21
  235. octavia/tests/unit/amphorae/backends/agent/api_server/test_plug.py +9 -11
  236. octavia/tests/unit/amphorae/backends/agent/api_server/test_util.py +11 -25
  237. octavia/tests/unit/amphorae/backends/agent/test_agent_jinja_cfg.py +0 -13
  238. octavia/tests/unit/amphorae/backends/health_daemon/test_health_daemon.py +10 -10
  239. octavia/tests/unit/amphorae/backends/utils/test_haproxy_query.py +1 -1
  240. octavia/tests/unit/amphorae/backends/utils/test_interface.py +33 -94
  241. octavia/tests/unit/amphorae/backends/utils/test_interface_file.py +32 -32
  242. octavia/tests/unit/amphorae/backends/utils/test_network_namespace.py +4 -6
  243. octavia/tests/unit/amphorae/backends/utils/test_nftable_utils.py +28 -22
  244. octavia/tests/unit/amphorae/drivers/haproxy/test_rest_api_driver_1_0.py +77 -118
  245. octavia/tests/unit/amphorae/drivers/health/test_heartbeat_udp.py +8 -8
  246. octavia/tests/unit/amphorae/drivers/keepalived/jinja/test_jinja_cfg.py +0 -4
  247. octavia/tests/unit/api/common/test_pagination.py +84 -14
  248. octavia/tests/unit/api/v2/types/test_availability_zone_profile.py +1 -1
  249. octavia/tests/unit/api/v2/types/test_availability_zones.py +1 -1
  250. octavia/tests/unit/api/v2/types/test_flavor_profile.py +1 -1
  251. octavia/tests/unit/api/v2/types/test_flavors.py +1 -1
  252. octavia/tests/unit/api/v2/types/test_health_monitor.py +1 -1
  253. octavia/tests/unit/api/v2/types/test_listener.py +1 -1
  254. octavia/tests/unit/api/v2/types/test_load_balancer.py +1 -1
  255. octavia/tests/unit/api/v2/types/test_pool.py +1 -1
  256. octavia/tests/unit/base.py +1 -0
  257. octavia/tests/unit/certificates/generator/local_csr.py +1 -1
  258. octavia/tests/unit/certificates/generator/test_local.py +5 -5
  259. octavia/tests/unit/certificates/manager/test_barbican.py +2 -3
  260. octavia/tests/unit/certificates/manager/test_barbican_legacy.py +1 -1
  261. octavia/tests/unit/certificates/manager/test_local.py +13 -14
  262. octavia/tests/unit/cmd/test_health_checker.py +1 -1
  263. octavia/tests/unit/cmd/test_prometheus_proxy.py +8 -1
  264. octavia/tests/unit/common/jinja/haproxy/combined_listeners/test_jinja_cfg.py +171 -216
  265. octavia/tests/unit/common/jinja/logging/test_logging_jinja_cfg.py +1 -1
  266. octavia/tests/unit/common/sample_configs/sample_configs_combined.py +1 -2
  267. octavia/tests/unit/common/test_base_taskflow.py +1 -1
  268. octavia/tests/unit/common/test_decorators.py +2 -2
  269. octavia/tests/unit/common/test_policy.py +3 -6
  270. octavia/tests/unit/common/tls_utils/test_cert_parser.py +4 -1
  271. octavia/tests/unit/controller/worker/v2/flows/test_listener_flows.py +10 -15
  272. octavia/tests/unit/controller/worker/v2/flows/test_load_balancer_flows.py +4 -6
  273. octavia/tests/unit/controller/worker/v2/tasks/test_network_tasks.py +6 -2
  274. octavia/tests/unit/controller/worker/v2/tasks/test_retry_tasks.py +1 -1
  275. octavia/tests/unit/controller/worker/v2/test_controller_worker.py +56 -1
  276. octavia/tests/unit/controller/worker/v2/test_taskflow_jobboard_driver.py +348 -0
  277. octavia/tests/unit/hacking/test_checks.py +3 -3
  278. octavia/tests/unit/image/drivers/noop_driver/test_driver.py +1 -1
  279. octavia/tests/unit/image/drivers/test_glance_driver.py +1 -1
  280. octavia/tests/unit/network/drivers/neutron/test_base.py +1 -1
  281. octavia/tests/unit/statistics/drivers/test_update_db.py +1 -1
  282. octavia/tests/unit/statistics/test_stats_base.py +1 -1
  283. octavia/volume/drivers/noop_driver/driver.py +1 -1
  284. octavia/volume/volume_base.py +1 -1
  285. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.dist-info}/AUTHORS +6 -0
  286. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.dist-info}/METADATA +3 -5
  287. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.dist-info}/RECORD +302 -305
  288. octavia-15.0.0.dist-info/pbr.json +1 -0
  289. octavia/amphorae/backends/agent/api_server/templates/keepalived.sysvinit.j2 +0 -87
  290. octavia/amphorae/backends/agent/api_server/templates/keepalived.upstart.j2 +0 -29
  291. octavia/amphorae/backends/agent/api_server/templates/sysvinit.conf.j2 +0 -232
  292. octavia/amphorae/backends/agent/api_server/templates/upstart.conf.j2 +0 -71
  293. octavia-14.0.0.0rc1.dist-info/pbr.json +0 -1
  294. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/LICENSE +0 -0
  295. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/README.rst +0 -0
  296. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/README.rst +0 -0
  297. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/diskimage-create.sh +0 -0
  298. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/image-tests.sh +0 -0
  299. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/requirements.txt +0 -0
  300. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/test-requirements.txt +0 -0
  301. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/tox.ini +0 -0
  302. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/version.txt +0 -0
  303. {octavia-14.0.0.0rc1.data → octavia-15.0.0.data}/scripts/octavia-wsgi +0 -0
  304. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.dist-info}/LICENSE +0 -0
  305. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.dist-info}/WHEEL +0 -0
  306. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.dist-info}/entry_points.txt +0 -0
  307. {octavia-14.0.0.0rc1.dist-info → octavia-15.0.0.dist-info}/top_level.txt +0 -0
@@ -89,7 +89,7 @@ class TestMember(base.BaseAPITest):
89
89
  'is_admin_project': True,
90
90
  'service_project_domain_id': None,
91
91
  'service_project_id': None,
92
- 'roles': ['load-balancer_member'],
92
+ 'roles': ['load-balancer_member', 'member'],
93
93
  'user_id': None,
94
94
  'is_admin': False,
95
95
  'service_user_domain_id': None,
@@ -194,7 +194,7 @@ class TestMember(base.BaseAPITest):
194
194
  'is_admin_project': True,
195
195
  'service_project_domain_id': None,
196
196
  'service_project_id': None,
197
- 'roles': ['load-balancer_member'],
197
+ 'roles': ['load-balancer_member', 'member'],
198
198
  'user_id': None,
199
199
  'is_admin': False,
200
200
  'service_user_domain_id': None,
@@ -352,10 +352,10 @@ class TestMember(base.BaseAPITest):
352
352
  members = self.get(self.members_path, params={
353
353
  'fields': ['id', 'address']}).json
354
354
  for member in members['members']:
355
- self.assertIn(u'id', member)
356
- self.assertIn(u'address', member)
357
- self.assertNotIn(u'name', member)
358
- self.assertNotIn(u'monitor_address', member)
355
+ self.assertIn('id', member)
356
+ self.assertIn('address', member)
357
+ self.assertNotIn('name', member)
358
+ self.assertNotIn('monitor_address', member)
359
359
 
360
360
  def test_get_one_fields_filter(self):
361
361
  member1 = self.create_member(
@@ -365,10 +365,10 @@ class TestMember(base.BaseAPITest):
365
365
  member = self.get(
366
366
  self.member_path.format(member_id=member1.get('id')),
367
367
  params={'fields': ['id', 'address']}).json.get(self.root_tag)
368
- self.assertIn(u'id', member)
369
- self.assertIn(u'address', member)
370
- self.assertNotIn(u'name', member)
371
- self.assertNotIn(u'monitor_address', member)
368
+ self.assertIn('id', member)
369
+ self.assertIn('address', member)
370
+ self.assertNotIn('name', member)
371
+ self.assertNotIn('monitor_address', member)
372
372
 
373
373
  def test_get_all_filter(self):
374
374
  mem1 = self.create_member(self.pool_id,
@@ -529,7 +529,7 @@ class TestMember(base.BaseAPITest):
529
529
  'is_admin_project': True,
530
530
  'service_project_domain_id': None,
531
531
  'service_project_id': None,
532
- 'roles': ['load-balancer_member'],
532
+ 'roles': ['load-balancer_member', 'member'],
533
533
  'user_id': None,
534
534
  'is_admin': False,
535
535
  'service_user_domain_id': None,
@@ -591,7 +591,7 @@ class TestMember(base.BaseAPITest):
591
591
  self.set_object_status(self.pool_repo, pool1_id,
592
592
  provisioning_status=constants.ERROR)
593
593
  api_member = self.create_member(pool1_id, '192.0.2.1', 80, status=409)
594
- ref_msg = 'Pool %s is immutable and cannot be updated.' % pool1_id
594
+ ref_msg = f'Pool {pool1_id} is immutable and cannot be updated.'
595
595
  self.assertEqual(ref_msg, api_member.get('faultstring'))
596
596
 
597
597
  # TODO(rm_work) Remove after deprecation of project_id in POST (R series)
@@ -689,7 +689,7 @@ class TestMember(base.BaseAPITest):
689
689
  # Order matters here
690
690
  provider_creates += provider_updates
691
691
 
692
- mock_provider.assert_called_once_with(u'noop_driver',
692
+ mock_provider.assert_called_once_with('noop_driver',
693
693
  mock_driver.member_batch_update,
694
694
  self.pool_id, provider_creates)
695
695
 
@@ -732,7 +732,7 @@ class TestMember(base.BaseAPITest):
732
732
  provider_dict['name'] = None
733
733
  provider_members.append(driver_dm.Member(**provider_dict))
734
734
 
735
- mock_provider.assert_called_once_with(u'noop_driver',
735
+ mock_provider.assert_called_once_with('noop_driver',
736
736
  mock_driver.member_batch_update,
737
737
  self.pool_id, provider_members)
738
738
 
@@ -792,7 +792,7 @@ class TestMember(base.BaseAPITest):
792
792
  req_dict = [member1, member2, member5, member6]
793
793
  body = {self.root_tag_list: req_dict}
794
794
  path = self.MEMBERS_PATH.format(pool_id=self.pool_id)
795
- path = "{}?additive_only=True".format(path)
795
+ path = f"{path}?additive_only=True"
796
796
  self.put(path, body, status=202)
797
797
  returned_members = self.get(
798
798
  self.MEMBERS_PATH.format(pool_id=self.pool_id)
@@ -834,7 +834,7 @@ class TestMember(base.BaseAPITest):
834
834
  provider_creates += provider_updates
835
835
  provider_creates += provider_ignored
836
836
 
837
- mock_provider.assert_called_once_with(u'noop_driver',
837
+ mock_provider.assert_called_once_with('noop_driver',
838
838
  mock_driver.member_batch_update,
839
839
  self.pool_id, provider_creates)
840
840
 
@@ -885,7 +885,7 @@ class TestMember(base.BaseAPITest):
885
885
  del provider_dict['subnet_id']
886
886
  provider_members.append(driver_dm.Member(**provider_dict))
887
887
 
888
- mock_provider.assert_called_once_with(u'noop_driver',
888
+ mock_provider.assert_called_once_with('noop_driver',
889
889
  mock_driver.member_batch_update,
890
890
  self.pool_id, provider_members)
891
891
 
@@ -913,6 +913,38 @@ class TestMember(base.BaseAPITest):
913
913
  m_subnet_exists.assert_called_once_with(
914
914
  member1['subnet_id'], context=mock.ANY)
915
915
 
916
+ @mock.patch('octavia.api.drivers.driver_factory.get_driver')
917
+ @mock.patch('octavia.api.drivers.utils.call_provider')
918
+ def test_update_members_member_duplicate(
919
+ self, mock_provider, mock_get_driver):
920
+ mock_driver = mock.MagicMock()
921
+ mock_driver.name = 'noop_driver'
922
+ mock_get_driver.return_value = mock_driver
923
+ subnet_id = uuidutils.generate_uuid()
924
+
925
+ member1 = {'address': '192.0.2.1', 'protocol_port': 80,
926
+ 'project_id': self.project_id, 'subnet_id': subnet_id}
927
+
928
+ req_dict = [member1]
929
+ body = {self.root_tag_list: req_dict}
930
+ path = self.MEMBERS_PATH.format(pool_id=self.pool_id)
931
+ self.put(path, body, status=202)
932
+
933
+ self.set_lb_status(self.lb_id)
934
+
935
+ # Same member (same address and protocol_port) updated twice in the
936
+ # same PUT request
937
+ member1 = {'address': '192.0.2.1', 'protocol_port': 80,
938
+ 'project_id': self.project_id, 'subnet_id': subnet_id,
939
+ 'name': 'member1'}
940
+ member2 = {'address': '192.0.2.1', 'protocol_port': 80,
941
+ 'project_id': self.project_id, 'subnet_id': subnet_id,
942
+ 'name': 'member2'}
943
+
944
+ req_dict = [member1, member2]
945
+ body = {self.root_tag_list: req_dict}
946
+ self.put(path, body, status=400)
947
+
916
948
  @mock.patch('octavia.api.drivers.driver_factory.get_driver')
917
949
  @mock.patch('octavia.api.drivers.utils.call_provider')
918
950
  def test_update_members_subnet_not_found(
@@ -971,7 +1003,7 @@ class TestMember(base.BaseAPITest):
971
1003
  rm['protocol_port'],
972
1004
  rm['provisioning_status']), expected_members)
973
1005
 
974
- mock_provider.assert_called_once_with(u'noop_driver',
1006
+ mock_provider.assert_called_once_with('noop_driver',
975
1007
  mock_driver.member_batch_update,
976
1008
  self.pool_id, provider_members)
977
1009
 
@@ -1146,7 +1178,7 @@ class TestMember(base.BaseAPITest):
1146
1178
  'is_admin_project': True,
1147
1179
  'service_project_domain_id': None,
1148
1180
  'service_project_id': None,
1149
- 'roles': ['load-balancer_member'],
1181
+ 'roles': ['load-balancer_member', 'member'],
1150
1182
  'user_id': None,
1151
1183
  'is_admin': False,
1152
1184
  'service_user_domain_id': None,
@@ -1328,7 +1360,7 @@ class TestMember(base.BaseAPITest):
1328
1360
  'is_admin_project': True,
1329
1361
  'service_project_domain_id': None,
1330
1362
  'service_project_id': None,
1331
- 'roles': ['load-balancer_member'],
1363
+ 'roles': ['load-balancer_member', 'member'],
1332
1364
  'user_id': None,
1333
1365
  'is_admin': False,
1334
1366
  'service_user_domain_id': None,
@@ -1402,7 +1434,7 @@ class TestMember(base.BaseAPITest):
1402
1434
  member_path = self.MEMBERS_PATH.format(
1403
1435
  pool_id=bad_pool_id) + '/' + api_member['id']
1404
1436
  result = self.delete(member_path, status=404).json
1405
- ref_msg = 'Member %s not found.' % api_member['id']
1437
+ ref_msg = f"Member {api_member['id']} not found."
1406
1438
  self.assertEqual(ref_msg, result.get('faultstring'))
1407
1439
 
1408
1440
  @mock.patch('octavia.api.drivers.utils.call_provider')
@@ -105,7 +105,7 @@ class TestPool(base.BaseAPITest):
105
105
  'is_admin_project': True,
106
106
  'service_project_domain_id': None,
107
107
  'service_project_id': None,
108
- 'roles': ['load-balancer_member'],
108
+ 'roles': ['load-balancer_member', 'member'],
109
109
  'user_id': None,
110
110
  'is_admin': False,
111
111
  'service_user_domain_id': None,
@@ -247,7 +247,7 @@ class TestPool(base.BaseAPITest):
247
247
  'is_admin_project': True,
248
248
  'service_project_domain_id': None,
249
249
  'service_project_id': None,
250
- 'roles': ['load-balancer_member'],
250
+ 'roles': ['load-balancer_member', 'member'],
251
251
  'user_id': None,
252
252
  'is_admin': False,
253
253
  'service_user_domain_id': None,
@@ -553,9 +553,9 @@ class TestPool(base.BaseAPITest):
553
553
  pools = self.get(self.POOLS_PATH, params={
554
554
  'fields': ['id', 'project_id']}).json
555
555
  for pool in pools['pools']:
556
- self.assertIn(u'id', pool)
557
- self.assertIn(u'project_id', pool)
558
- self.assertNotIn(u'description', pool)
556
+ self.assertIn('id', pool)
557
+ self.assertIn('project_id', pool)
558
+ self.assertNotIn('description', pool)
559
559
 
560
560
  def test_get_one_fields_filter(self):
561
561
  pool1 = self.create_pool(
@@ -568,9 +568,9 @@ class TestPool(base.BaseAPITest):
568
568
  pool = self.get(
569
569
  self.POOL_PATH.format(pool_id=pool1.get('id')),
570
570
  params={'fields': ['id', 'project_id']}).json.get(self.root_tag)
571
- self.assertIn(u'id', pool)
572
- self.assertIn(u'project_id', pool)
573
- self.assertNotIn(u'description', pool)
571
+ self.assertIn('id', pool)
572
+ self.assertIn('project_id', pool)
573
+ self.assertNotIn('description', pool)
574
574
 
575
575
  def test_get_all_filter(self):
576
576
  po1 = self.create_pool(
@@ -742,7 +742,7 @@ class TestPool(base.BaseAPITest):
742
742
  'is_admin_project': True,
743
743
  'service_project_domain_id': None,
744
744
  'service_project_id': None,
745
- 'roles': ['load-balancer_member'],
745
+ 'roles': ['load-balancer_member', 'member'],
746
746
  'user_id': None,
747
747
  'is_admin': False,
748
748
  'service_user_domain_id': None,
@@ -1274,7 +1274,7 @@ class TestPool(base.BaseAPITest):
1274
1274
  'is_admin_project': True,
1275
1275
  'service_project_domain_id': None,
1276
1276
  'service_project_id': None,
1277
- 'roles': ['load-balancer_member'],
1277
+ 'roles': ['load-balancer_member', 'member'],
1278
1278
  'user_id': None,
1279
1279
  'is_admin': False,
1280
1280
  'service_user_domain_id': None,
@@ -2102,7 +2102,7 @@ class TestPool(base.BaseAPITest):
2102
2102
  'is_admin_project': True,
2103
2103
  'service_project_domain_id': None,
2104
2104
  'service_project_id': None,
2105
- 'roles': ['load-balancer_member'],
2105
+ 'roles': ['load-balancer_member', 'member'],
2106
2106
  'user_id': None,
2107
2107
  'is_admin': False,
2108
2108
  'service_user_domain_id': None,
@@ -33,10 +33,10 @@ class TestProvider(base.BaseAPITest):
33
33
  super().setUp()
34
34
 
35
35
  def test_get_all_providers(self):
36
- octavia_dict = {u'description': u'Octavia driver.',
37
- u'name': u'octavia'}
38
- amphora_dict = {u'description': u'Amp driver.', u'name': u'amphora'}
39
- noop_dict = {u'description': u'NoOp driver.', u'name': u'noop_driver'}
36
+ octavia_dict = {'description': 'Octavia driver.',
37
+ 'name': 'octavia'}
38
+ amphora_dict = {'description': 'Amp driver.', 'name': 'amphora'}
39
+ noop_dict = {'description': 'NoOp driver.', 'name': 'noop_driver'}
40
40
  providers = self.get(self.PROVIDERS_PATH).json.get(self.root_tag_list)
41
41
  self.assertEqual(4, len(providers))
42
42
  self.assertIn(octavia_dict, providers)
@@ -44,9 +44,9 @@ class TestProvider(base.BaseAPITest):
44
44
  self.assertIn(noop_dict, providers)
45
45
 
46
46
  def test_get_all_providers_fields(self):
47
- octavia_dict = {u'name': u'octavia'}
48
- amphora_dict = {u'name': u'amphora'}
49
- noop_dict = {u'name': u'noop_driver'}
47
+ octavia_dict = {'name': 'octavia'}
48
+ amphora_dict = {'name': 'amphora'}
49
+ noop_dict = {'name': 'noop_driver'}
50
50
  providers = self.get(self.PROVIDERS_PATH, params={'fields': ['name']})
51
51
  providers_list = providers.json.get(self.root_tag_list)
52
52
  self.assertEqual(4, len(providers_list))
@@ -394,7 +394,7 @@ class TestQuotas(base.BaseAPITest):
394
394
  'is_admin_project': True,
395
395
  'service_project_domain_id': None,
396
396
  'service_project_id': None,
397
- 'roles': ['load-balancer_member'],
397
+ 'roles': ['load-balancer_member', 'member'],
398
398
  'user_id': None,
399
399
  'is_admin': False,
400
400
  'service_user_domain_id': None,
@@ -440,7 +440,7 @@ class TestQuotas(base.BaseAPITest):
440
440
  'is_admin_project': True,
441
441
  'service_project_domain_id': None,
442
442
  'service_project_id': None,
443
- 'roles': ['load-balancer_observer'],
443
+ 'roles': ['load-balancer_observer', 'reader'],
444
444
  'user_id': None,
445
445
  'is_admin': False,
446
446
  'service_user_domain_id': None,
@@ -480,18 +480,18 @@ class TestQuotas(base.BaseAPITest):
480
480
  self._assert_quotas_equal(quotas, quota2)
481
481
 
482
482
  def test_get_Authorized_member(self):
483
- self._test_get_Authorized('load-balancer_member')
483
+ self._test_get_Authorized(['load-balancer_member', 'member'])
484
484
 
485
485
  def test_get_Authorized_observer(self):
486
- self._test_get_Authorized('load-balancer_observer')
486
+ self._test_get_Authorized(['load-balancer_observer', 'reader'])
487
487
 
488
488
  def test_get_Authorized_global_observer(self):
489
- self._test_get_Authorized('load-balancer_global_observer')
489
+ self._test_get_Authorized(['load-balancer_global_observer'])
490
490
 
491
491
  def test_get_Authorized_quota_admin(self):
492
- self._test_get_Authorized('load-balancer_quota_admin')
492
+ self._test_get_Authorized(['load-balancer_quota_admin'])
493
493
 
494
- def _test_get_Authorized(self, role):
494
+ def _test_get_Authorized(self, roles):
495
495
  project1_id = uuidutils.generate_uuid()
496
496
  quota1 = self.create_quota(
497
497
  project_id=project1_id, lb_quota=1, member_quota=1
@@ -509,7 +509,7 @@ class TestQuotas(base.BaseAPITest):
509
509
  'is_admin_project': True,
510
510
  'service_project_domain_id': None,
511
511
  'service_project_id': None,
512
- 'roles': [role],
512
+ 'roles': roles,
513
513
  'user_id': None,
514
514
  'is_admin': False,
515
515
  'service_user_domain_id': None,
@@ -704,7 +704,7 @@ class TestQuotas(base.BaseAPITest):
704
704
  'is_admin_project': True,
705
705
  'service_project_domain_id': None,
706
706
  'service_project_id': None,
707
- 'roles': ['load-balancer_member'],
707
+ 'roles': ['load-balancer_member', 'member'],
708
708
  'user_id': None,
709
709
  'is_admin': False,
710
710
  'service_user_domain_id': None,
@@ -24,7 +24,7 @@ from octavia.tests.functional.db import base
24
24
  from sqlalchemy.orm import collections
25
25
 
26
26
 
27
- class ModelTestMixin(object):
27
+ class ModelTestMixin:
28
28
 
29
29
  FAKE_IP = '10.0.0.1'
30
30
  FAKE_UUID_1 = uuidutils.generate_uuid()
@@ -128,8 +128,8 @@ class AllRepositoriesTest(base.OctaviaDBTestBase):
128
128
  'additional_vip')
129
129
  for repo_attr in repo_attr_names:
130
130
  single_repo = getattr(self.repos, repo_attr, None)
131
- message = ("Class Repositories should have %s instance"
132
- " variable.") % repo_attr
131
+ message = (f"Class Repositories should have {repo_attr} instance "
132
+ f"variable.")
133
133
  self.assertIsNotNone(single_repo, message=message)
134
134
  message = (("instance variable, %(repo_name)s, of class "
135
135
  "Repositories should be an instance of %(base)s") %
@@ -155,36 +155,36 @@ class TestAmphoraInfo(base.TestCase):
155
155
  m_count.return_value = 5
156
156
  original_version = api_server.VERSION
157
157
  api_server.VERSION = self.API_VERSION
158
- expected_dict = {u'active': True,
158
+ expected_dict = {'active': True,
159
159
  'active_tuned_profiles': '',
160
- u'api_version': self.API_VERSION,
161
- u'cpu': {u'soft_irq': u'8336',
162
- u'system': u'52554',
163
- u'total': 7503411,
164
- u'user': u'252551'},
160
+ 'api_version': self.API_VERSION,
161
+ 'cpu': {'soft_irq': '8336',
162
+ 'system': '52554',
163
+ 'total': 7503411,
164
+ 'user': '252551'},
165
165
  'cpu_count': os.cpu_count(),
166
- u'disk': {u'available': 109079126016,
167
- u'used': 25718685696},
168
- u'haproxy_count': 5,
169
- u'haproxy_version': self.HAPROXY_VERSION,
170
- u'hostname': u'FAKE_HOST',
171
- u'listeners': sorted([self.FAKE_LISTENER_ID_1,
172
- self.FAKE_LISTENER_ID_2]),
173
- u'load': [u'0.09', u'0.11', u'0.10'],
174
- u'memory': {u'buffers': 344792,
175
- u'cached': 4271856,
176
- u'free': 12685624,
177
- u'shared': 9520,
178
- u'slab': 534384,
179
- u'swap_used': 0,
180
- u'total': 21692784},
181
- u'networks': {u'eth1': {u'network_rx': 996,
182
- u'network_tx': 418},
183
- u'eth2': {u'network_rx': 848,
184
- u'network_tx': 578}},
185
- u'packages': {},
186
- u'topology': u'SINGLE',
187
- u'topology_status': u'OK'}
166
+ 'disk': {'available': 109079126016,
167
+ 'used': 25718685696},
168
+ 'haproxy_count': 5,
169
+ 'haproxy_version': self.HAPROXY_VERSION,
170
+ 'hostname': 'FAKE_HOST',
171
+ 'listeners': sorted([self.FAKE_LISTENER_ID_1,
172
+ self.FAKE_LISTENER_ID_2]),
173
+ 'load': ['0.09', '0.11', '0.10'],
174
+ 'memory': {'buffers': 344792,
175
+ 'cached': 4271856,
176
+ 'free': 12685624,
177
+ 'shared': 9520,
178
+ 'slab': 534384,
179
+ 'swap_used': 0,
180
+ 'total': 21692784},
181
+ 'networks': {'eth1': {'network_rx': 996,
182
+ 'network_tx': 418},
183
+ 'eth2': {'network_rx': 848,
184
+ 'network_tx': 578}},
185
+ 'packages': {},
186
+ 'topology': 'SINGLE',
187
+ 'topology_status': 'OK'}
188
188
  self.useFixture(test_utils.OpenFixture('/etc/tuned/active_profile'))
189
189
  actual = self.amp_info.compile_amphora_details()
190
190
  self.assertEqual(expected_dict, actual.json)
@@ -243,41 +243,40 @@ class TestAmphoraInfo(base.TestCase):
243
243
  mock_get_lb.return_value = [self.LB_ID_1]
244
244
  original_version = api_server.VERSION
245
245
  api_server.VERSION = self.API_VERSION
246
- expected_dict = {u'active': True,
246
+ expected_dict = {'active': True,
247
247
  'active_tuned_profiles': '',
248
- u'api_version': self.API_VERSION,
249
- u'cpu': {u'soft_irq': u'8336',
250
- u'system': u'52554',
251
- u'total': 7503411,
252
- u'user': u'252551'},
248
+ 'api_version': self.API_VERSION,
249
+ 'cpu': {'soft_irq': '8336',
250
+ 'system': '52554',
251
+ 'total': 7503411,
252
+ 'user': '252551'},
253
253
  'cpu_count': os.cpu_count(),
254
- u'disk': {u'available': 109079126016,
255
- u'used': 25718685696},
256
- u'haproxy_count': 5,
257
- u'haproxy_version': self.HAPROXY_VERSION,
258
- u'keepalived_version': self.KEEPALIVED_VERSION,
259
- u'ipvsadm_version': self.IPVSADM_VERSION,
260
- u'lvs_listener_process_count': 1,
261
- u'hostname': u'FAKE_HOST',
262
- u'listeners': sorted(list(set(
263
- [self.FAKE_LISTENER_ID_3,
264
- self.FAKE_LISTENER_ID_4,
265
- 'sample_listener_id_1']))),
266
- u'load': [u'0.09', u'0.11', u'0.10'],
267
- u'memory': {u'buffers': 344792,
268
- u'cached': 4271856,
269
- u'free': 12685624,
270
- u'shared': 9520,
271
- u'slab': 534384,
272
- u'swap_used': 0,
273
- u'total': 21692784},
274
- u'networks': {u'eth1': {u'network_rx': 996,
275
- u'network_tx': 418},
276
- u'eth2': {u'network_rx': 848,
277
- u'network_tx': 578}},
278
- u'packages': {},
279
- u'topology': u'SINGLE',
280
- u'topology_status': u'OK'}
254
+ 'disk': {'available': 109079126016,
255
+ 'used': 25718685696},
256
+ 'haproxy_count': 5,
257
+ 'haproxy_version': self.HAPROXY_VERSION,
258
+ 'keepalived_version': self.KEEPALIVED_VERSION,
259
+ 'ipvsadm_version': self.IPVSADM_VERSION,
260
+ 'lvs_listener_process_count': 1,
261
+ 'hostname': 'FAKE_HOST',
262
+ 'listeners': sorted(list({self.FAKE_LISTENER_ID_3,
263
+ self.FAKE_LISTENER_ID_4,
264
+ 'sample_listener_id_1'})),
265
+ 'load': ['0.09', '0.11', '0.10'],
266
+ 'memory': {'buffers': 344792,
267
+ 'cached': 4271856,
268
+ 'free': 12685624,
269
+ 'shared': 9520,
270
+ 'slab': 534384,
271
+ 'swap_used': 0,
272
+ 'total': 21692784},
273
+ 'networks': {'eth1': {'network_rx': 996,
274
+ 'network_tx': 418},
275
+ 'eth2': {'network_rx': 848,
276
+ 'network_tx': 578}},
277
+ 'packages': {},
278
+ 'topology': 'SINGLE',
279
+ 'topology_status': 'OK'}
281
280
  self.useFixture(test_utils.OpenFixture('/etc/tuned/active_profile'))
282
281
  actual = self.amp_info.compile_amphora_details(self.lvs_driver)
283
282
  self.assertEqual(expected_dict, actual.json)
@@ -32,10 +32,10 @@ class KeepalivedTestCase(base.TestCase):
32
32
  @mock.patch('subprocess.check_output')
33
33
  def test_manager_keepalived_service(self, mock_check_output):
34
34
  res = self.test_keepalived.manager_keepalived_service('start')
35
- cmd = ("/usr/sbin/service octavia-keepalived {action}".format(
36
- action='start'))
35
+ cmd = 'systemctl start octavia-keepalived.service'
37
36
  mock_check_output.assert_called_once_with(cmd.split(),
38
- stderr=subprocess.STDOUT)
37
+ stderr=subprocess.STDOUT,
38
+ encoding='utf-8')
39
39
  self.assertEqual(202, res.status_code)
40
40
 
41
41
  res = self.test_keepalived.manager_keepalived_service('restart')
@@ -16,7 +16,6 @@ from unittest import mock
16
16
  from oslo_utils import uuidutils
17
17
 
18
18
  from octavia.amphorae.backends.agent.api_server import keepalivedlvs
19
- from octavia.amphorae.backends.agent.api_server import util
20
19
  from octavia.tests.unit import base
21
20
 
22
21
 
@@ -36,24 +35,7 @@ class KeepalivedLvsTestCase(base.TestCase):
36
35
  mock.call(
37
36
  json=dict(message='UDP Listener Not Found',
38
37
  details="No UDP listener with UUID: "
39
- "{0}".format(self.FAKE_ID)), status=404),
38
+ "{}".format(self.FAKE_ID)), status=404),
40
39
  mock.call(json={'message': 'OK'})
41
40
  ]
42
41
  m_webob.Response.assert_has_calls(calls)
43
-
44
- @mock.patch('octavia.amphorae.backends.agent.api_server.util.'
45
- 'get_os_init_system')
46
- @mock.patch('octavia.amphorae.backends.agent.api_server.util.'
47
- 'get_keepalivedlvs_pid')
48
- @mock.patch('subprocess.check_output')
49
- @mock.patch('os.remove')
50
- @mock.patch('os.path.exists')
51
- def test_delete_lvs_listener_unsupported_sysinit(self, m_exist, m_remove,
52
- m_check_output, mget_pid,
53
- m_init_sys):
54
- m_exist.return_value = True
55
- mget_pid.return_value = '0'
56
- self.assertRaises(
57
- util.UnknownInitError,
58
- self.test_keepalivedlvs.delete_lvs_listener,
59
- self.FAKE_ID)