octavia 14.0.0__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.dist-info → octavia-15.0.0.dist-info}/AUTHORS +6 -0
  286. {octavia-14.0.0.dist-info → octavia-15.0.0.dist-info}/METADATA +3 -5
  287. {octavia-14.0.0.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.dist-info/pbr.json +0 -1
  294. {octavia-14.0.0.data → octavia-15.0.0.data}/data/share/octavia/LICENSE +0 -0
  295. {octavia-14.0.0.data → octavia-15.0.0.data}/data/share/octavia/README.rst +0 -0
  296. {octavia-14.0.0.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/README.rst +0 -0
  297. {octavia-14.0.0.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/diskimage-create.sh +0 -0
  298. {octavia-14.0.0.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/image-tests.sh +0 -0
  299. {octavia-14.0.0.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/requirements.txt +0 -0
  300. {octavia-14.0.0.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/test-requirements.txt +0 -0
  301. {octavia-14.0.0.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/tox.ini +0 -0
  302. {octavia-14.0.0.data → octavia-15.0.0.data}/data/share/octavia/diskimage-create/version.txt +0 -0
  303. {octavia-14.0.0.data → octavia-15.0.0.data}/scripts/octavia-wsgi +0 -0
  304. {octavia-14.0.0.dist-info → octavia-15.0.0.dist-info}/LICENSE +0 -0
  305. {octavia-14.0.0.dist-info → octavia-15.0.0.dist-info}/WHEEL +0 -0
  306. {octavia-14.0.0.dist-info → octavia-15.0.0.dist-info}/entry_points.txt +0 -0
  307. {octavia-14.0.0.dist-info → octavia-15.0.0.dist-info}/top_level.txt +0 -0
@@ -25,7 +25,7 @@ TEMPLATES_DIR = (os.path.dirname(os.path.realpath(__file__)) +
25
25
  constants.AGENT_API_TEMPLATES + '/')
26
26
 
27
27
 
28
- class AgentJinjaTemplater(object):
28
+ class AgentJinjaTemplater:
29
29
 
30
30
  def __init__(self):
31
31
  template_loader = jinja2.FileSystemLoader(searchpath=os.path.dirname(
@@ -52,9 +52,6 @@ class AgentJinjaTemplater(object):
52
52
  'haproxy_cmd': CONF.haproxy_amphora.haproxy_cmd,
53
53
  'heartbeat_interval': CONF.health_manager.heartbeat_interval,
54
54
  'heartbeat_key': CONF.health_manager.heartbeat_key,
55
- 'use_upstart': CONF.haproxy_amphora.use_upstart,
56
- 'respawn_count': CONF.haproxy_amphora.respawn_count,
57
- 'respawn_interval': CONF.haproxy_amphora.respawn_interval,
58
55
  'amphora_udp_driver': CONF.amphora_agent.amphora_udp_driver,
59
56
  'agent_tls_protocol': CONF.amphora_agent.agent_tls_protocol,
60
57
  'topology': topology,
@@ -30,7 +30,7 @@ from octavia.common import exceptions
30
30
  LOG = logging.getLogger(__name__)
31
31
 
32
32
 
33
- class AmphoraInfo(object):
33
+ class AmphoraInfo:
34
34
  def __init__(self, osutils):
35
35
  self._osutils = osutils
36
36
 
@@ -105,7 +105,7 @@ class AmphoraInfo(object):
105
105
  def _get_version_of_installed_package(self, name):
106
106
 
107
107
  cmd = self._osutils.cmd_get_version_of_installed_package(name)
108
- version = subprocess.check_output(cmd.split())
108
+ version = subprocess.check_output(cmd.split(), encoding='utf-8')
109
109
  return version
110
110
 
111
111
  def _count_haproxy_processes(self, lb_list):
@@ -129,13 +129,13 @@ class AmphoraInfo(object):
129
129
  extend_data = {}
130
130
  for extend in extend_info:
131
131
  package_version = self._get_version_of_installed_package(extend)
132
- extend_data['%s_version' % extend] = package_version
132
+ extend_data[f'{extend}_version'] = package_version
133
133
  return extend_data
134
134
 
135
135
  def _get_meminfo(self):
136
136
  re_parser = re.compile(r'^(?P<key>\S*):\s*(?P<value>\d*)\s*kB')
137
137
  result = {}
138
- with open('/proc/meminfo', 'r', encoding='utf-8') as meminfo:
138
+ with open('/proc/meminfo', encoding='utf-8') as meminfo:
139
139
  for line in meminfo:
140
140
  match = re_parser.match(line)
141
141
  if not match:
@@ -199,7 +199,7 @@ class AmphoraInfo(object):
199
199
  def _get_active_tuned_profiles(self) -> str:
200
200
  """Returns the active TuneD profile(s)"""
201
201
  try:
202
- with open("/etc/tuned/active_profile", "r", encoding="utf-8") as f:
202
+ with open("/etc/tuned/active_profile", encoding="utf-8") as f:
203
203
  return f.read(1024).strip()
204
204
  except OSError as ex:
205
205
  LOG.debug("Reading active TuneD profiles failed: %r", ex)
@@ -34,13 +34,11 @@ LOG = logging.getLogger(__name__)
34
34
 
35
35
  j2_env = jinja2.Environment(autoescape=True, loader=jinja2.FileSystemLoader(
36
36
  os.path.dirname(os.path.realpath(__file__)) + consts.AGENT_API_TEMPLATES))
37
- UPSTART_TEMPLATE = j2_env.get_template(consts.KEEPALIVED_JINJA2_UPSTART)
38
- SYSVINIT_TEMPLATE = j2_env.get_template(consts.KEEPALIVED_JINJA2_SYSVINIT)
39
37
  SYSTEMD_TEMPLATE = j2_env.get_template(consts.KEEPALIVED_JINJA2_SYSTEMD)
40
38
  check_script_template = j2_env.get_template(consts.CHECK_SCRIPT_CONF)
41
39
 
42
40
 
43
- class Keepalived(object):
41
+ class Keepalived:
44
42
 
45
43
  def upload_keepalived_config(self):
46
44
  stream = loadbalancer.Wrapped(flask.request.stream)
@@ -60,33 +58,17 @@ class Keepalived(object):
60
58
  f.write(b)
61
59
  b = stream.read(BUFFER)
62
60
 
63
- init_system = util.get_os_init_system()
64
-
65
- file_path = util.keepalived_init_path(init_system)
66
-
67
- if init_system == consts.INIT_SYSTEMD:
68
- template = SYSTEMD_TEMPLATE
69
- init_enable_cmd = "systemctl enable octavia-keepalived"
70
-
71
- # Render and install the network namespace systemd service
72
- util.install_netns_systemd_service()
73
- util.run_systemctl_command(
74
- consts.ENABLE, consts.AMP_NETNS_SVC_PREFIX)
75
- elif init_system == consts.INIT_UPSTART:
76
- template = UPSTART_TEMPLATE
77
- elif init_system == consts.INIT_SYSVINIT:
78
- template = SYSVINIT_TEMPLATE
79
- init_enable_cmd = "insserv {file}".format(file=file_path)
80
- else:
81
- raise util.UnknownInitError()
82
-
83
- if init_system == consts.INIT_SYSTEMD:
84
- # mode 00644
85
- mode = stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH
86
- else:
87
- # mode 00755
88
- mode = (stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP |
89
- stat.S_IROTH | stat.S_IXOTH)
61
+ file_path = util.keepalived_init_path()
62
+
63
+ template = SYSTEMD_TEMPLATE
64
+
65
+ # Render and install the network namespace systemd service
66
+ util.install_netns_systemd_service()
67
+ util.run_systemctl_command(
68
+ consts.ENABLE, consts.AMP_NETNS_SVC_PREFIX, False)
69
+
70
+ # mode 00644
71
+ mode = stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH
90
72
  if not os.path.exists(file_path):
91
73
  with os.fdopen(os.open(file_path, flags, mode), 'w') as text_file:
92
74
  text = template.render(
@@ -117,16 +99,13 @@ class Keepalived(object):
117
99
  util.vrrp_check_script_update(None, consts.AMP_ACTION_START)
118
100
 
119
101
  # Make sure the new service is enabled on boot
120
- if init_system != consts.INIT_UPSTART:
121
- try:
122
- subprocess.check_output(init_enable_cmd.split(),
123
- stderr=subprocess.STDOUT)
124
- except subprocess.CalledProcessError as e:
125
- LOG.debug('Failed to enable octavia-keepalived service: '
126
- '%(err)s %(output)s', {'err': e, 'output': e.output})
127
- return webob.Response(json={
128
- 'message': "Error enabling octavia-keepalived service",
129
- 'details': e.output}, status=500)
102
+ try:
103
+ util.run_systemctl_command(consts.ENABLE,
104
+ consts.KEEPALIVED_SYSTEMD)
105
+ except subprocess.CalledProcessError as e:
106
+ return webob.Response(json={
107
+ 'message': "Error enabling octavia-keepalived service",
108
+ 'details': e.output}, status=500)
130
109
 
131
110
  res = webob.Response(json={'message': 'OK'}, status=200)
132
111
  res.headers['ETag'] = stream.get_md5()
@@ -140,37 +119,31 @@ class Keepalived(object):
140
119
  consts.AMP_ACTION_RELOAD]:
141
120
  return webob.Response(json={
142
121
  'message': 'Invalid Request',
143
- 'details': "Unknown action: {0}".format(action)}, status=400)
122
+ 'details': f"Unknown action: {action}"}, status=400)
144
123
 
145
124
  if action == consts.AMP_ACTION_START:
146
125
  keepalived_pid_path = util.keepalived_pid_path()
147
126
  try:
148
127
  # Is there a pid file for keepalived?
149
- with open(keepalived_pid_path,
150
- 'r', encoding='utf-8') as pid_file:
128
+ with open(keepalived_pid_path, encoding='utf-8') as pid_file:
151
129
  pid = int(pid_file.readline())
152
130
  os.kill(pid, 0)
153
131
 
154
132
  # If we got here, it means the keepalived process is running.
155
133
  # We should reload it instead of trying to start it again.
156
134
  action = consts.AMP_ACTION_RELOAD
157
- except (IOError, OSError):
135
+ except OSError:
158
136
  pass
159
137
 
160
- cmd = ("/usr/sbin/service octavia-keepalived {action}".format(
161
- action=action))
162
-
163
138
  try:
164
- subprocess.check_output(cmd.split(), stderr=subprocess.STDOUT)
139
+ util.run_systemctl_command(action,
140
+ consts.KEEPALIVED_SYSTEMD)
165
141
  except subprocess.CalledProcessError as e:
166
- LOG.debug('Failed to %s octavia-keepalived service: %s %s',
167
- action, e, e.output)
168
142
  return webob.Response(json={
169
- 'message': "Failed to {0} octavia-keepalived service".format(
170
- action),
143
+ 'message': f"Failed to {action} octavia-keepalived service",
171
144
  'details': e.output}, status=500)
172
145
 
173
146
  return webob.Response(
174
147
  json={'message': 'OK',
175
- 'details': 'keepalived {action}ed'.format(action=action)},
148
+ 'details': f'keepalived {action}ed'},
176
149
  status=202)
@@ -38,8 +38,6 @@ LOG = logging.getLogger(__name__)
38
38
 
39
39
  j2_env = jinja2.Environment(autoescape=True, loader=jinja2.FileSystemLoader(
40
40
  os.path.dirname(os.path.realpath(__file__)) + consts.AGENT_API_TEMPLATES))
41
- UPSTART_TEMPLATE = j2_env.get_template(consts.KEEPALIVED_JINJA2_UPSTART)
42
- SYSVINIT_TEMPLATE = j2_env.get_template(consts.KEEPALIVED_JINJA2_SYSVINIT)
43
41
  SYSTEMD_TEMPLATE = j2_env.get_template(consts.KEEPALIVED_JINJA2_SYSTEMD)
44
42
  check_script_file_template = j2_env.get_template(
45
43
  consts.KEEPALIVED_CHECK_SCRIPT)
@@ -92,32 +90,18 @@ class KeepalivedLvs(lvs_listener_base.LvsListenerApiServerBase):
92
90
  f.write(b)
93
91
  b = stream.read(BUFFER)
94
92
 
95
- init_system = util.get_os_init_system()
93
+ file_path = util.keepalived_lvs_init_path(listener_id)
96
94
 
97
- file_path = util.keepalived_lvs_init_path(init_system, listener_id)
95
+ template = SYSTEMD_TEMPLATE
98
96
 
99
- if init_system == consts.INIT_SYSTEMD:
100
- template = SYSTEMD_TEMPLATE
101
-
102
- # Render and install the network namespace systemd service
103
- util.install_netns_systemd_service()
104
- util.run_systemctl_command(
105
- consts.ENABLE, consts.AMP_NETNS_SVC_PREFIX)
106
- elif init_system == consts.INIT_UPSTART:
107
- template = UPSTART_TEMPLATE
108
- elif init_system == consts.INIT_SYSVINIT:
109
- template = SYSVINIT_TEMPLATE
110
- else:
111
- raise util.UnknownInitError()
97
+ # Render and install the network namespace systemd service
98
+ util.install_netns_systemd_service()
99
+ util.run_systemctl_command(
100
+ consts.ENABLE, consts.AMP_NETNS_SVC_PREFIX, False)
112
101
 
113
102
  # Render and install the keepalivedlvs init script
114
- if init_system == consts.INIT_SYSTEMD:
115
- # mode 00644
116
- mode = stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH
117
- else:
118
- # mode 00755
119
- mode = (stat.S_IRWXU | stat.S_IRGRP | stat.S_IXGRP |
120
- stat.S_IROTH | stat.S_IXOTH)
103
+ # mode 00644
104
+ mode = stat.S_IRUSR | stat.S_IWUSR | stat.S_IRGRP | stat.S_IROTH
121
105
  keepalived_pid, vrrp_pid, check_pid = util.keepalived_lvs_pids_path(
122
106
  listener_id)
123
107
  if not os.path.exists(file_path):
@@ -136,22 +120,15 @@ class KeepalivedLvs(lvs_listener_base.LvsListenerApiServerBase):
136
120
  text_file.write(text)
137
121
 
138
122
  # Make sure the keepalivedlvs service is enabled on boot
139
- if init_system == consts.INIT_SYSTEMD:
123
+ try:
140
124
  util.run_systemctl_command(
141
- consts.ENABLE, "octavia-keepalivedlvs-%s" % str(listener_id))
142
- elif init_system == consts.INIT_SYSVINIT:
143
- init_enable_cmd = "insserv {file}".format(file=file_path)
144
- try:
145
- subprocess.check_output(init_enable_cmd.split(),
146
- stderr=subprocess.STDOUT)
147
- except subprocess.CalledProcessError as e:
148
- LOG.debug('Failed to enable '
149
- 'octavia-keepalivedlvs service: '
150
- '%(err)s', {'err': str(e)})
151
- return webob.Response(json={
152
- 'message': ("Error enabling "
153
- "octavia-keepalivedlvs service"),
154
- 'details': e.output}, status=500)
125
+ consts.ENABLE,
126
+ consts.KEEPALIVEDLVS_SYSTEMD % listener_id)
127
+ except subprocess.CalledProcessError as e:
128
+ return webob.Response(json={
129
+ 'message': ("Error enabling "
130
+ "octavia-keepalivedlvs service"),
131
+ 'details': e.output}, status=500)
155
132
 
156
133
  if NEED_CHECK:
157
134
  # inject the check script for keepalived process
@@ -165,7 +142,6 @@ class KeepalivedLvs(lvs_listener_base.LvsListenerApiServerBase):
165
142
  'w') as script_file:
166
143
  text = check_script_file_template.render(
167
144
  consts=consts,
168
- init_system=init_system,
169
145
  keepalived_lvs_pid_dir=util.keepalived_lvs_dir()
170
146
  )
171
147
  script_file.write(text)
@@ -180,8 +156,8 @@ class KeepalivedLvs(lvs_listener_base.LvsListenerApiServerBase):
180
156
  raise exceptions.HTTPException(
181
157
  response=webob.Response(json={
182
158
  'message': 'UDP Listener Not Found',
183
- 'details': "No UDP listener with UUID: {0}".format(
184
- listener_id)}, status=404))
159
+ 'details': f"No UDP listener with UUID: {listener_id}"},
160
+ status=404))
185
161
 
186
162
  def get_lvs_listener_config(self, listener_id):
187
163
  """Gets the keepalivedlvs config
@@ -190,7 +166,7 @@ class KeepalivedLvs(lvs_listener_base.LvsListenerApiServerBase):
190
166
  """
191
167
  self._check_lvs_listener_exists(listener_id)
192
168
  with open(util.keepalived_lvs_cfg_path(listener_id),
193
- 'r', encoding='utf-8') as file:
169
+ encoding='utf-8') as file:
194
170
  cfg = file.read()
195
171
  resp = webob.Response(cfg, content_type='text/plain')
196
172
  return resp
@@ -202,7 +178,7 @@ class KeepalivedLvs(lvs_listener_base.LvsListenerApiServerBase):
202
178
  consts.AMP_ACTION_RELOAD]:
203
179
  return webob.Response(json={
204
180
  'message': 'Invalid Request',
205
- 'details': "Unknown action: {0}".format(action)}, status=400)
181
+ 'details': f"Unknown action: {action}"}, status=400)
206
182
 
207
183
  # When octavia requests a reload of keepalived, force a restart since
208
184
  # a keepalived reload doesn't restore members in their initial state.
@@ -216,25 +192,19 @@ class KeepalivedLvs(lvs_listener_base.LvsListenerApiServerBase):
216
192
  if consts.OFFLINE == self._check_lvs_listener_status(listener_id):
217
193
  action = consts.AMP_ACTION_START
218
194
 
219
- cmd = ("/usr/sbin/service "
220
- "octavia-keepalivedlvs-{listener_id} "
221
- "{action}".format(listener_id=listener_id, action=action))
222
-
223
195
  try:
224
- subprocess.check_output(cmd.split(), stderr=subprocess.STDOUT)
196
+ util.run_systemctl_command(
197
+ action, consts.KEEPALIVEDLVS_SYSTEMD % listener_id)
225
198
  except subprocess.CalledProcessError as e:
226
- LOG.debug('Failed to %s keepalivedlvs listener %s',
227
- listener_id + ' : ' + action, str(e))
228
199
  return webob.Response(json={
229
- 'message': ("Failed to {0} keepalivedlvs listener {1}"
230
- .format(action, listener_id)),
200
+ 'message': (f"Failed to {action} keepalivedlvs listener "
201
+ f"{listener_id}"),
231
202
  'details': e.output}, status=500)
232
203
 
233
204
  return webob.Response(
234
205
  json={'message': 'OK',
235
- 'details': 'keepalivedlvs listener {listener_id} '
236
- '{action}ed'.format(listener_id=listener_id,
237
- action=action)},
206
+ 'details': (f'keepalivedlvs listener {listener_id} '
207
+ f'{action}ed')},
238
208
  status=202)
239
209
 
240
210
  def _check_lvs_listener_status(self, listener_id):
@@ -243,7 +213,7 @@ class KeepalivedLvs(lvs_listener_base.LvsListenerApiServerBase):
243
213
  '/proc', util.get_keepalivedlvs_pid(listener_id))):
244
214
  # Check if the listener is disabled
245
215
  with open(util.keepalived_lvs_cfg_path(listener_id),
246
- 'r', encoding='utf-8') as file:
216
+ encoding='utf-8') as file:
247
217
  cfg = file.read()
248
218
  m = re.search('virtual_server', cfg)
249
219
  if m:
@@ -280,12 +250,12 @@ class KeepalivedLvs(lvs_listener_base.LvsListenerApiServerBase):
280
250
  if os.path.exists(keepalived_pid) and os.path.exists(
281
251
  os.path.join('/proc',
282
252
  util.get_keepalivedlvs_pid(listener_id))):
283
- cmd = ("/usr/sbin/service "
284
- "octavia-keepalivedlvs-{0} stop".format(listener_id))
285
253
  try:
286
- subprocess.check_output(cmd.split(), stderr=subprocess.STDOUT)
254
+ util.run_systemctl_command(
255
+ consts.STOP,
256
+ consts.KEEPALIVEDLVS_SYSTEMD % listener_id)
287
257
  except subprocess.CalledProcessError as e:
288
- LOG.error("Failed to stop keepalivedlvs service: %s", str(e))
258
+ LOG.error("Failed to stop keepalivedlvs service: %s", e)
289
259
  return webob.Response(json={
290
260
  'message': "Error stopping keepalivedlvs",
291
261
  'details': e.output}, status=500)
@@ -300,30 +270,21 @@ class KeepalivedLvs(lvs_listener_base.LvsListenerApiServerBase):
300
270
  os.remove(pid)
301
271
 
302
272
  # disable the service
303
- init_system = util.get_os_init_system()
304
- init_path = util.keepalived_lvs_init_path(init_system, listener_id)
273
+ init_path = util.keepalived_lvs_init_path(listener_id)
305
274
 
306
- if init_system == consts.INIT_SYSTEMD:
275
+ try:
307
276
  util.run_systemctl_command(
308
- consts.DISABLE, "octavia-keepalivedlvs-%s" % str(listener_id))
309
- elif init_system == consts.INIT_SYSVINIT:
310
- init_disable_cmd = "insserv -r {file}".format(file=init_path)
311
- elif init_system != consts.INIT_UPSTART:
312
- raise util.UnknownInitError()
313
-
314
- if init_system == consts.INIT_SYSVINIT:
315
- try:
316
- subprocess.check_output(init_disable_cmd.split(),
317
- stderr=subprocess.STDOUT)
318
- except subprocess.CalledProcessError as e:
319
- LOG.error("Failed to disable "
320
- "octavia-keepalivedlvs-%(list)s service: "
321
- "%(err)s", {'list': listener_id, 'err': str(e)})
322
- return webob.Response(json={
323
- 'message': (
324
- "Error disabling octavia-keepalivedlvs-"
325
- "{0} service".format(listener_id)),
326
- 'details': e.output}, status=500)
277
+ consts.DISABLE,
278
+ consts.KEEPALIVEDLVS_SYSTEMD % listener_id)
279
+ except subprocess.CalledProcessError as e:
280
+ LOG.error("Failed to disable "
281
+ "octavia-keepalivedlvs-%(list)s service: "
282
+ "%(err)s", {'list': listener_id, 'err': str(e)})
283
+ return webob.Response(json={
284
+ 'message': (
285
+ f"Error disabling octavia-keepalivedlvs-{listener_id} "
286
+ "service"),
287
+ 'details': e.output}, status=500)
327
288
 
328
289
  # delete init script ,config file and log file for that listener
329
290
  if os.path.exists(init_path):