paasta-tools 1.12.0__tar.gz → 1.13.0__tar.gz

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 (296) hide show
  1. {paasta-tools-1.12.0/paasta_tools.egg-info → paasta-tools-1.13.0}/PKG-INFO +1 -1
  2. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/__init__.py +1 -1
  3. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/api.py +19 -0
  4. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/client.py +8 -1
  5. paasta-tools-1.13.0/paasta_tools/api/tweens/__init__.py +6 -0
  6. paasta-tools-1.13.0/paasta_tools/api/tweens/auth.py +125 -0
  7. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/autoscaling_schema.json +1 -0
  8. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/kubernetes_tools.py +15 -0
  9. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/long_running_service_tools.py +2 -0
  10. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/setup_prometheus_adapter_config.py +78 -0
  11. {paasta-tools-1.12.0 → paasta-tools-1.13.0/paasta_tools.egg-info}/PKG-INFO +1 -1
  12. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools.egg-info/SOURCES.txt +1 -0
  13. paasta-tools-1.12.0/paasta_tools/tron/__init__.py +0 -0
  14. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/MANIFEST.in +0 -0
  15. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/README.md +0 -0
  16. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/k8s_itests/__init__.py +0 -0
  17. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/k8s_itests/test_autoscaling.py +0 -0
  18. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/k8s_itests/utils.py +0 -0
  19. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/adhoc_tools.py +0 -0
  20. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/__init__.py +0 -0
  21. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/api_docs/swagger.json +0 -0
  22. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/settings.py +0 -0
  23. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/tweens/profiling.py +0 -0
  24. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/tweens/request_logger.py +0 -0
  25. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/__init__.py +0 -0
  26. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/autoscaler.py +0 -0
  27. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/exception.py +0 -0
  28. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/flink.py +0 -0
  29. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/instance.py +0 -0
  30. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/pause_autoscaler.py +0 -0
  31. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/resources.py +0 -0
  32. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/service.py +0 -0
  33. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/version.py +0 -0
  34. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/apply_external_resources.py +0 -0
  35. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/async_utils.py +0 -0
  36. {paasta-tools-1.12.0/paasta_tools/api/tweens → paasta-tools-1.13.0/paasta_tools/autoscaling}/__init__.py +0 -0
  37. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
  38. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/autoscaling/forecasting.py +0 -0
  39. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
  40. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
  41. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/autoscaling/utils.py +0 -0
  42. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/bounce_lib.py +0 -0
  43. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/broadcast_log_to_services.py +0 -0
  44. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cassandracluster_tools.py +0 -0
  45. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_autoscaler_max_instances.py +0 -0
  46. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
  47. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_flink_services_health.py +0 -0
  48. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_kubernetes_api.py +0 -0
  49. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_kubernetes_services_replication.py +0 -0
  50. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_oom_events.py +0 -0
  51. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_services_replication_tools.py +0 -0
  52. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_spark_jobs.py +0 -0
  53. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
  54. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
  55. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
  56. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cleanup_tron_namespaces.py +0 -0
  57. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/__init__.py +0 -0
  58. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cli.py +0 -0
  59. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/__init__.py +0 -0
  60. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/autoscale.py +0 -0
  61. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/check.py +0 -0
  62. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/cook_image.py +0 -0
  63. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
  64. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/get_image_version.py +0 -0
  65. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
  66. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/info.py +0 -0
  67. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/itest.py +0 -0
  68. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/list.py +0 -0
  69. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/list_clusters.py +0 -0
  70. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
  71. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/list_namespaces.py +0 -0
  72. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/local_run.py +0 -0
  73. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/logs.py +0 -0
  74. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
  75. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/mesh_status.py +0 -0
  76. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
  77. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
  78. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/remote_run.py +0 -0
  79. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/rollback.py +0 -0
  80. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/secret.py +0 -0
  81. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/security_check.py +0 -0
  82. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/spark_run.py +0 -0
  83. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
  84. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/status.py +0 -0
  85. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/validate.py +0 -0
  86. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
  87. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm/__init__.py +0 -0
  88. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm/autosuggest.py +0 -0
  89. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm/template/README.md +0 -0
  90. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
  91. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
  92. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
  93. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
  94. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
  95. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm_cmd.py +0 -0
  96. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
  97. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
  98. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
  99. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
  100. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
  101. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/eks_schema.json +0 -0
  102. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/kubernetes_schema.json +0 -0
  103. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
  104. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/service_schema.json +0 -0
  105. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/smartstack_schema.json +0 -0
  106. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/tron_schema.json +0 -0
  107. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/utils.py +0 -0
  108. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/clusterman.py +0 -0
  109. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/config_utils.py +0 -0
  110. {paasta-tools-1.12.0/paasta_tools/autoscaling → paasta-tools-1.13.0/paasta_tools/contrib}/__init__.py +0 -0
  111. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
  112. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
  113. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/check_orphans.py +0 -0
  114. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
  115. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/create_paasta_playground.py +0 -0
  116. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
  117. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
  118. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/habitat_fixer.py +0 -0
  119. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/ide_helper.py +0 -0
  120. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
  121. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
  122. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/kill_bad_containers.py +0 -0
  123. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
  124. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/mock_patch_checker.py +0 -0
  125. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
  126. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/render_template.py +0 -0
  127. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
  128. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/service_shard_remove.py +0 -0
  129. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/service_shard_update.py +0 -0
  130. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/shared_ip_check.py +0 -0
  131. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
  132. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/delete_kubernetes_deployments.py +0 -0
  133. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/deployment_utils.py +0 -0
  134. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/docker_wrapper.py +0 -0
  135. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/docker_wrapper_imports.py +0 -0
  136. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/drain_lib.py +0 -0
  137. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/dump_locally_running_services.py +0 -0
  138. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/eks_tools.py +0 -0
  139. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/envoy_tools.py +0 -0
  140. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/firewall.py +0 -0
  141. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/firewall_logging.py +0 -0
  142. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/firewall_update.py +0 -0
  143. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/flink_tools.py +0 -0
  144. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/flinkeks_tools.py +0 -0
  145. {paasta-tools-1.12.0/paasta_tools/contrib → paasta-tools-1.13.0/paasta_tools/frameworks}/__init__.py +0 -0
  146. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
  147. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/frameworks/constraints.py +0 -0
  148. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/frameworks/native_scheduler.py +0 -0
  149. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/frameworks/native_service_config.py +0 -0
  150. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/frameworks/task_store.py +0 -0
  151. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/generate_all_deployments +0 -0
  152. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/generate_authenticating_services.py +0 -0
  153. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/generate_deployments_for_service.py +0 -0
  154. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/generate_services_file.py +0 -0
  155. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/generate_services_yaml.py +0 -0
  156. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/hacheck.py +0 -0
  157. {paasta-tools-1.12.0/paasta_tools/frameworks → paasta-tools-1.13.0/paasta_tools/instance}/__init__.py +0 -0
  158. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
  159. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/instance/kubernetes.py +0 -0
  160. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/iptables.py +0 -0
  161. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/kafkacluster_tools.py +0 -0
  162. {paasta-tools-1.12.0/paasta_tools/instance → paasta-tools-1.13.0/paasta_tools/kubernetes}/__init__.py +0 -0
  163. {paasta-tools-1.12.0/paasta_tools/kubernetes → paasta-tools-1.13.0/paasta_tools/kubernetes/application}/__init__.py +0 -0
  164. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/kubernetes/application/controller_wrappers.py +0 -0
  165. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/kubernetes/application/tools.py +0 -0
  166. {paasta-tools-1.12.0/paasta_tools/kubernetes/application → paasta-tools-1.13.0/paasta_tools/kubernetes/bin}/__init__.py +0 -0
  167. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
  168. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
  169. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
  170. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/list_kubernetes_service_instances.py +0 -0
  171. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/list_tron_namespaces.py +0 -0
  172. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/log_task_lifecycle_events.py +0 -0
  173. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mac_address.py +0 -0
  174. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/marathon_dashboard.py +0 -0
  175. {paasta-tools-1.12.0/paasta_tools/kubernetes/bin → paasta-tools-1.13.0/paasta_tools/mesos}/__init__.py +0 -0
  176. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/cfg.py +0 -0
  177. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/cluster.py +0 -0
  178. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/exceptions.py +0 -0
  179. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/framework.py +0 -0
  180. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/log.py +0 -0
  181. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/master.py +0 -0
  182. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/mesos_file.py +0 -0
  183. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/parallel.py +0 -0
  184. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/slave.py +0 -0
  185. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/task.py +0 -0
  186. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/util.py +0 -0
  187. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/zookeeper.py +0 -0
  188. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos_maintenance.py +0 -0
  189. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos_tools.py +0 -0
  190. {paasta-tools-1.12.0/paasta_tools/mesos → paasta-tools-1.13.0/paasta_tools/metrics}/__init__.py +0 -0
  191. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/metrics/metastatus_lib.py +0 -0
  192. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/metrics/metrics_lib.py +0 -0
  193. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/monitoring/__init__.py +0 -0
  194. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
  195. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/monitoring_tools.py +0 -0
  196. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/monkrelaycluster_tools.py +0 -0
  197. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/nrtsearchservice_tools.py +0 -0
  198. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
  199. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/oom_logger.py +0 -0
  200. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paasta_deploy_tron_jobs +0 -0
  201. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paasta_execute_docker_command.py +0 -0
  202. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paasta_native_serviceinit.py +0 -0
  203. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paasta_remote_run.py +0 -0
  204. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paasta_service_config_loader.py +0 -0
  205. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/__init__.py +0 -0
  206. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/api/__init__.py +0 -0
  207. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/api/autoscaler_api.py +0 -0
  208. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/api/default_api.py +0 -0
  209. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/api/resources_api.py +0 -0
  210. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/api/service_api.py +0 -0
  211. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/api_client.py +0 -0
  212. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/apis/__init__.py +0 -0
  213. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/configuration.py +0 -0
  214. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/exceptions.py +0 -0
  215. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/__init__.py +0 -0
  216. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/adhoc_launch_history.py +0 -0
  217. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +0 -0
  218. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/deploy_queue.py +0 -0
  219. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +0 -0
  220. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/envoy_backend.py +0 -0
  221. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/envoy_location.py +0 -0
  222. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/envoy_status.py +0 -0
  223. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/flink_cluster_overview.py +0 -0
  224. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/flink_config.py +0 -0
  225. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/flink_job.py +0 -0
  226. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/flink_job_details.py +0 -0
  227. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/flink_jobs.py +0 -0
  228. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/float_and_error.py +0 -0
  229. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/hpa_metric.py +0 -0
  230. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/inline_object.py +0 -0
  231. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/inline_response200.py +0 -0
  232. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/inline_response2001.py +0 -0
  233. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_bounce_status.py +0 -0
  234. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_mesh_status.py +0 -0
  235. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status.py +0 -0
  236. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status_adhoc.py +0 -0
  237. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +0 -0
  238. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status_flink.py +0 -0
  239. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +0 -0
  240. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +0 -0
  241. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +0 -0
  242. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +0 -0
  243. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status_tron.py +0 -0
  244. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_tasks.py +0 -0
  245. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/integer_and_error.py +0 -0
  246. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/kubernetes_container.py +0 -0
  247. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +0 -0
  248. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +0 -0
  249. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/kubernetes_pod.py +0 -0
  250. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +0 -0
  251. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +0 -0
  252. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +0 -0
  253. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/kubernetes_version.py +0 -0
  254. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/resource.py +0 -0
  255. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/resource_item.py +0 -0
  256. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/resource_value.py +0 -0
  257. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/smartstack_backend.py +0 -0
  258. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/smartstack_location.py +0 -0
  259. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/smartstack_status.py +0 -0
  260. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/task_tail_lines.py +0 -0
  261. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model_utils.py +0 -0
  262. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/models/__init__.py +0 -0
  263. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/rest.py +0 -0
  264. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/prune_completed_pods.py +0 -0
  265. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/puppet_service_tools.py +0 -0
  266. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/py.typed +0 -0
  267. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/remote_git.py +0 -0
  268. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
  269. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/run-paasta-api-playground.py +0 -0
  270. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/secret_providers/__init__.py +0 -0
  271. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/secret_providers/vault.py +0 -0
  272. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/secret_tools.py +0 -0
  273. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/setup_istio_mesh.py +0 -0
  274. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/setup_kubernetes_cr.py +0 -0
  275. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/setup_kubernetes_crd.py +0 -0
  276. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
  277. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/setup_kubernetes_job.py +0 -0
  278. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/setup_tron_namespace.py +0 -0
  279. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/slack.py +0 -0
  280. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/smartstack_tools.py +0 -0
  281. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/spark_tools.py +0 -0
  282. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
  283. {paasta-tools-1.12.0/paasta_tools/metrics → paasta-tools-1.13.0/paasta_tools/tron}/__init__.py +0 -0
  284. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/tron/client.py +0 -0
  285. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/tron/tron_command_context.py +0 -0
  286. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/tron/tron_timeutils.py +0 -0
  287. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/tron_tools.py +0 -0
  288. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/utils.py +0 -0
  289. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools.egg-info/dependency_links.txt +0 -0
  290. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools.egg-info/entry_points.txt +0 -0
  291. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools.egg-info/requires.txt +0 -0
  292. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools.egg-info/top_level.txt +0 -0
  293. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/pyproject.toml +0 -0
  294. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/requirements-minimal.txt +0 -0
  295. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/setup.cfg +0 -0
  296. {paasta-tools-1.12.0 → paasta-tools-1.13.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: paasta-tools
3
- Version: 1.12.0
3
+ Version: 1.13.0
4
4
  Summary: Tools for Yelps SOA infrastructure
5
5
  Home-page: UNKNOWN
6
6
  Author: Compute Infrastructure @ Yelp
@@ -17,4 +17,4 @@
17
17
  # setup phase, the dependencies may not exist on disk yet.
18
18
  #
19
19
  # Don't bump version manually. See `make release` docs in ./Makefile
20
- __version__ = "1.12.0"
20
+ __version__ = "1.13.0"
@@ -31,6 +31,7 @@ from wsgicors import CORS
31
31
  import paasta_tools.api
32
32
  from paasta_tools import kubernetes_tools
33
33
  from paasta_tools.api import settings
34
+ from paasta_tools.api.tweens import auth
34
35
  from paasta_tools.api.tweens import profiling
35
36
  from paasta_tools.api.tweens import request_logger
36
37
  from paasta_tools.utils import load_system_paasta_config
@@ -79,6 +80,18 @@ def parse_paasta_api_args():
79
80
  default=4,
80
81
  help="Number of gunicorn workers to run",
81
82
  )
83
+ parser.add_argument(
84
+ "--auth-endpoint",
85
+ type=str,
86
+ default="",
87
+ help="External API authorization endpoint",
88
+ )
89
+ parser.add_argument(
90
+ "--auth-enforce",
91
+ action="store_true",
92
+ default=False,
93
+ help="Enforce API authorization",
94
+ )
82
95
  args = parser.parse_args()
83
96
  return args
84
97
 
@@ -105,6 +118,7 @@ def make_app(global_config=None):
105
118
 
106
119
  config.include("pyramid_swagger")
107
120
  config.include(request_logger)
121
+ config.include(auth)
108
122
 
109
123
  config.add_route(
110
124
  "flink.service.instance.jobs", "/v1/flink/{service}/{instance}/jobs"
@@ -257,6 +271,11 @@ def main(argv=None):
257
271
  if args.cluster:
258
272
  os.environ["PAASTA_API_CLUSTER"] = args.cluster
259
273
 
274
+ if args.auth_endpoint:
275
+ os.environ["PAASTA_API_AUTH_ENDPOINT"] = args.auth_endpoint
276
+ if args.auth_enforce:
277
+ os.environ["PAASTA_API_AUTH_ENFORCE"] = "1"
278
+
260
279
  gunicorn_args = [
261
280
  "gunicorn",
262
281
  "-w",
@@ -48,6 +48,7 @@ def get_paasta_oapi_client_by_url(
48
48
  cert_file: Optional[str] = None,
49
49
  key_file: Optional[str] = None,
50
50
  ssl_ca_cert: Optional[str] = None,
51
+ auth_token: str = "",
51
52
  ) -> PaastaOApiClient:
52
53
  server_variables = dict(scheme=parsed_url.scheme, host=parsed_url.netloc)
53
54
  config = paastaapi.Configuration(
@@ -63,6 +64,9 @@ def get_paasta_oapi_client_by_url(
63
64
  client.rest_client.pool_manager.connection_pool_kw[
64
65
  "timeout"
65
66
  ] = load_system_paasta_config().get_api_client_timeout()
67
+ # SEC-19555: support auth in PaaSTA APIs
68
+ if auth_token:
69
+ client.set_default_header("Authorization", f"Bearer {auth_token}")
66
70
  return PaastaOApiClient(
67
71
  autoscaler=paastaapis.AutoscalerApi(client),
68
72
  default=paastaapis.DefaultApi(client),
@@ -79,6 +83,7 @@ def get_paasta_oapi_client(
79
83
  cluster: str = None,
80
84
  system_paasta_config: SystemPaastaConfig = None,
81
85
  http_res: bool = False,
86
+ auth_token: str = "",
82
87
  ) -> Optional[PaastaOApiClient]:
83
88
  if not system_paasta_config:
84
89
  system_paasta_config = load_system_paasta_config()
@@ -94,4 +99,6 @@ def get_paasta_oapi_client(
94
99
  parsed = urlparse(api_endpoints[cluster])
95
100
  cert_file = key_file = ssl_ca_cert = None
96
101
 
97
- return get_paasta_oapi_client_by_url(parsed, cert_file, key_file, ssl_ca_cert)
102
+ return get_paasta_oapi_client_by_url(
103
+ parsed, cert_file, key_file, ssl_ca_cert, auth_token
104
+ )
@@ -0,0 +1,6 @@
1
+ from typing import Callable
2
+
3
+ from pyramid.request import Request
4
+ from pyramid.response import Response
5
+
6
+ Handler = Callable[[Request], Response]
@@ -0,0 +1,125 @@
1
+ #!/usr/bin/env python
2
+ # Copyright 2015-2016 Yelp Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ import json
16
+ import logging
17
+ import os
18
+ from typing import NamedTuple
19
+ from typing import Optional
20
+
21
+ import cachetools.func
22
+ import pyramid
23
+ import requests
24
+ from pyramid.config import Configurator
25
+ from pyramid.httpexceptions import HTTPForbidden
26
+ from pyramid.registry import Registry
27
+ from pyramid.request import Request
28
+ from pyramid.response import Response
29
+
30
+ from paasta_tools.api.tweens import Handler
31
+
32
+
33
+ logger = logging.getLogger(__name__)
34
+ AUTH_CACHE_SIZE = 50000
35
+ AUTH_CACHE_TTL = 30 * 60
36
+
37
+
38
+ class AuthorizationOutcome(NamedTuple):
39
+ authorized: bool
40
+ reason: str
41
+
42
+
43
+ class AuthTweenFactory:
44
+ def __init__(self, handler: Handler, registry: Registry) -> None:
45
+ self.handler = handler
46
+ self.registry = registry
47
+ self.enforce = bool(os.getenv("PAASTA_API_AUTH_ENFORCE", ""))
48
+ self.endpoint = os.getenv("PAASTA_API_AUTH_ENDPOINT")
49
+ self.session = requests.Session()
50
+
51
+ def __call__(self, request: Request) -> Response:
52
+ """
53
+ Extracts relevant metadata from request, and checks if it is authorized
54
+ """
55
+ token = request.headers.get("Authorization", "").strip()
56
+ token = token.split()[-1] if token else "" # removes "Bearer" prefix
57
+ auth_outcome = self.is_request_authorized(
58
+ request.path,
59
+ token,
60
+ request.method,
61
+ request.swagger_data.get("service", None),
62
+ )
63
+ if self.enforce and not auth_outcome.authorized:
64
+ return HTTPForbidden(
65
+ body=json.dumps({"reason": auth_outcome.reason}),
66
+ headers={"X-Auth-Failure-Reason": auth_outcome.reason},
67
+ content_type="application/json",
68
+ charset="utf-8",
69
+ )
70
+ return self.handler(request)
71
+
72
+ @cachetools.func.ttl_cache(maxsize=AUTH_CACHE_SIZE, ttl=AUTH_CACHE_TTL)
73
+ def is_request_authorized(
74
+ self,
75
+ path: str,
76
+ token: str,
77
+ method: str,
78
+ service: Optional[str],
79
+ ) -> AuthorizationOutcome:
80
+ """Check if API request is authorized
81
+
82
+ :param str path: API path
83
+ :param str token: authentication token
84
+ :param str method: http method
85
+ :return: auth outcome
86
+ """
87
+ try:
88
+ response = self.session.post(
89
+ url=self.endpoint,
90
+ json={
91
+ "input": {
92
+ "path": path,
93
+ "backend": "paasta",
94
+ "token": token,
95
+ "method": method,
96
+ "service": service,
97
+ },
98
+ },
99
+ timeout=2,
100
+ ).json()
101
+ except Exception as e:
102
+ logger.exception(f"Issue communicating with auth endpoint: {e}")
103
+ return AuthorizationOutcome(False, "Auth backend error")
104
+
105
+ auth_result_allowed = response.get("result", {}).get("allowed")
106
+ if auth_result_allowed is None:
107
+ return AuthorizationOutcome(False, "Malformed auth response")
108
+
109
+ if not auth_result_allowed:
110
+ reason = response["result"].get("reason", "Denied")
111
+ return AuthorizationOutcome(False, reason)
112
+
113
+ reason = response["result"].get("reason", "Ok")
114
+ return AuthorizationOutcome(True, reason)
115
+
116
+
117
+ def includeme(config: Configurator):
118
+ if os.getenv("PAASTA_API_AUTH_ENDPOINT"):
119
+ config.add_tween(
120
+ "paasta_tools.api.tweens.auth.AuthTweenFactory",
121
+ under=(
122
+ pyramid.tweens.INGRESS,
123
+ "paasta_tools.api.tweens.request_logger.request_logger_tween_factory",
124
+ ),
125
+ )
@@ -6,6 +6,7 @@
6
6
  "type": {
7
7
  "enum": [
8
8
  "uwsgi",
9
+ "uwsgi-v2",
9
10
  "cpu",
10
11
  "piscina",
11
12
  "gunicorn",
@@ -148,6 +148,7 @@ from paasta_tools.long_running_service_tools import METRICS_PROVIDER_GUNICORN
148
148
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_PISCINA
149
149
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_PROMQL
150
150
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_UWSGI
151
+ from paasta_tools.long_running_service_tools import METRICS_PROVIDER_UWSGI_V2
151
152
  from paasta_tools.long_running_service_tools import ServiceNamespaceConfig
152
153
  from paasta_tools.secret_tools import get_secret_name_from_ref
153
154
  from paasta_tools.secret_tools import is_secret_ref
@@ -857,6 +858,20 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
857
858
  ),
858
859
  ),
859
860
  )
861
+ elif provider["type"] == METRICS_PROVIDER_UWSGI_V2:
862
+ return V2MetricSpec(
863
+ type="Object",
864
+ object=V2ObjectMetricSource(
865
+ metric=V2MetricIdentifier(name=prometheus_hpa_metric_name),
866
+ described_object=V2CrossVersionObjectReference(
867
+ api_version="apps/v1", kind="Deployment", name=name
868
+ ),
869
+ target=V2MetricTarget(
870
+ type="AverageValue",
871
+ average_value=target,
872
+ ),
873
+ ),
874
+ )
860
875
 
861
876
  log.error(
862
877
  f"Unknown metrics_provider specified: {provider['type']} for\
@@ -44,6 +44,7 @@ DEFAULT_GUNICORN_AUTOSCALING_MOVING_AVERAGE_WINDOW = 1800
44
44
 
45
45
  METRICS_PROVIDER_CPU = "cpu"
46
46
  METRICS_PROVIDER_UWSGI = "uwsgi"
47
+ METRICS_PROVIDER_UWSGI_V2 = "uwsgi-v2"
47
48
  METRICS_PROVIDER_GUNICORN = "gunicorn"
48
49
  METRICS_PROVIDER_PISCINA = "piscina"
49
50
  METRICS_PROVIDER_ACTIVE_REQUESTS = "active-requests"
@@ -52,6 +53,7 @@ METRICS_PROVIDER_PROMQL = "arbitrary_promql"
52
53
  ALL_METRICS_PROVIDERS = [
53
54
  METRICS_PROVIDER_CPU,
54
55
  METRICS_PROVIDER_UWSGI,
56
+ METRICS_PROVIDER_UWSGI_V2,
55
57
  METRICS_PROVIDER_GUNICORN,
56
58
  METRICS_PROVIDER_PISCINA,
57
59
  METRICS_PROVIDER_ACTIVE_REQUESTS,
@@ -59,6 +59,7 @@ from paasta_tools.long_running_service_tools import METRICS_PROVIDER_GUNICORN
59
59
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_PISCINA
60
60
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_PROMQL
61
61
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_UWSGI
62
+ from paasta_tools.long_running_service_tools import METRICS_PROVIDER_UWSGI_V2
62
63
  from paasta_tools.paasta_service_config_loader import PaastaServiceConfigLoader
63
64
  from paasta_tools.utils import DEFAULT_SOA_DIR
64
65
  from paasta_tools.utils import get_services_for_cluster
@@ -209,6 +210,10 @@ def create_instance_scaling_rule(
209
210
  return create_instance_uwsgi_scaling_rule(
210
211
  service, instance_config, metrics_provider_config, paasta_cluster
211
212
  )
213
+ if metrics_provider_config["type"] == METRICS_PROVIDER_UWSGI_V2:
214
+ return create_instance_uwsgi_v2_scaling_rule(
215
+ service, instance_config, metrics_provider_config, paasta_cluster
216
+ )
212
217
  if metrics_provider_config["type"] == METRICS_PROVIDER_PISCINA:
213
218
  return create_instance_piscina_scaling_rule(
214
219
  service, instance_config, metrics_provider_config, paasta_cluster
@@ -445,6 +450,79 @@ def create_instance_uwsgi_scaling_rule(
445
450
  }
446
451
 
447
452
 
453
+ def create_instance_uwsgi_v2_scaling_rule(
454
+ service: str,
455
+ instance_config: KubernetesDeploymentConfig,
456
+ metrics_provider_config: MetricsProviderDict,
457
+ paasta_cluster: str,
458
+ ) -> PrometheusAdapterRule:
459
+ """
460
+ Creates a Prometheus adapter rule config for a given service instance.
461
+ """
462
+ instance = instance_config.instance
463
+ moving_average_window = metrics_provider_config.get(
464
+ "moving_average_window_seconds", DEFAULT_UWSGI_AUTOSCALING_MOVING_AVERAGE_WINDOW
465
+ )
466
+ deployment_name = get_kubernetes_app_name(service=service, instance=instance)
467
+
468
+ # In order for autoscaling to work safely while a service migrates from one namespace to another, the HPA needs to
469
+ # make sure that the deployment in the new namespace is scaled up enough to handle _all_ the load.
470
+ # This is because once the new deployment is 100% healthy, cleanup_kubernetes_job will delete the deployment out of
471
+ # the old namespace all at once, suddenly putting all the load onto the deployment in the new namespace.
472
+ # To ensure this, we must NOT filter on namespace in worker_filter_terms (which is used when calculating total_load.
473
+ # This makes sure that desired_instances includes load from all namespaces.
474
+ worker_filter_terms = f"paasta_cluster='{paasta_cluster}',paasta_service='{service}',paasta_instance='{instance}'"
475
+
476
+ # k8s:deployment:pods_status_ready is a metric created by summing kube_pod_status_ready
477
+ # over paasta service/instance/cluster. it counts the number of ready pods in a paasta
478
+ # deployment.
479
+ ready_pods = f"""
480
+ (sum(
481
+ k8s:deployment:pods_status_ready{{{worker_filter_terms}}} >= 0
482
+ or
483
+ max_over_time(
484
+ k8s:deployment:pods_status_ready{{{worker_filter_terms}}}[{DEFAULT_EXTRAPOLATION_TIME}s]
485
+ )
486
+ ) by (kube_deployment))
487
+ """
488
+ load_per_instance = f"""
489
+ avg(
490
+ uwsgi_worker_busy{{{worker_filter_terms}}}
491
+ ) by (kube_pod, kube_deployment)
492
+ """
493
+ missing_instances = f"""
494
+ clamp_min(
495
+ {ready_pods} - count({load_per_instance}) by (kube_deployment),
496
+ 0
497
+ )
498
+ """
499
+ total_load = f"""
500
+ (
501
+ sum(
502
+ {load_per_instance}
503
+ ) by (kube_deployment)
504
+ +
505
+ {missing_instances}
506
+ )
507
+ """
508
+ total_load_smoothed = f"""
509
+ avg_over_time(
510
+ (
511
+ {total_load}
512
+ )[{moving_average_window}s:]
513
+ )
514
+ """
515
+
516
+ metric_name = f"{deployment_name}-uwsgi-v2-prom"
517
+
518
+ return {
519
+ "name": {"as": metric_name},
520
+ "seriesQuery": f"uwsgi_worker_busy{{{worker_filter_terms}}}",
521
+ "resources": {"template": "kube_<<.Resource>>"},
522
+ "metricsQuery": _minify_promql(total_load_smoothed),
523
+ }
524
+
525
+
448
526
  def create_instance_piscina_scaling_rule(
449
527
  service: str,
450
528
  instance_config: KubernetesDeploymentConfig,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: paasta-tools
3
- Version: 1.12.0
3
+ Version: 1.13.0
4
4
  Summary: Tools for Yelps SOA infrastructure
5
5
  Home-page: UNKNOWN
6
6
  Author: Compute Infrastructure @ Yelp
@@ -99,6 +99,7 @@ paasta_tools/api/client.py
99
99
  paasta_tools/api/settings.py
100
100
  paasta_tools/api/api_docs/swagger.json
101
101
  paasta_tools/api/tweens/__init__.py
102
+ paasta_tools/api/tweens/auth.py
102
103
  paasta_tools/api/tweens/profiling.py
103
104
  paasta_tools/api/tweens/request_logger.py
104
105
  paasta_tools/api/views/__init__.py
File without changes
File without changes
File without changes