paasta-tools 1.14.4__tar.gz → 1.16.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 (302) hide show
  1. {paasta-tools-1.14.4/paasta_tools.egg-info → paasta-tools-1.16.0}/PKG-INFO +1 -1
  2. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/__init__.py +1 -1
  3. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/check_flink_services_health.py +5 -6
  4. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/check_kubernetes_services_replication.py +8 -9
  5. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/check_services_replication_tools.py +72 -25
  6. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/spark_run.py +90 -1
  7. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/schemas/eks_schema.json +13 -0
  8. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/schemas/kubernetes_schema.json +13 -0
  9. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/schemas/tron_schema.json +11 -1
  10. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/envoy_tools.py +11 -5
  11. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/kubernetes_tools.py +25 -2
  12. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/tron_tools.py +6 -5
  13. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/utils.py +22 -0
  14. {paasta-tools-1.14.4 → paasta-tools-1.16.0/paasta_tools.egg-info}/PKG-INFO +1 -1
  15. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools.egg-info/requires.txt +1 -1
  16. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/requirements-minimal.txt +1 -1
  17. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/MANIFEST.in +0 -0
  18. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/README.md +0 -0
  19. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/k8s_itests/__init__.py +0 -0
  20. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/k8s_itests/test_autoscaling.py +0 -0
  21. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/k8s_itests/utils.py +0 -0
  22. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/adhoc_tools.py +0 -0
  23. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/__init__.py +0 -0
  24. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/api.py +0 -0
  25. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/api_docs/swagger.json +0 -0
  26. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/client.py +0 -0
  27. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/settings.py +0 -0
  28. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/tweens/__init__.py +0 -0
  29. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/tweens/auth.py +0 -0
  30. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/tweens/profiling.py +0 -0
  31. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/tweens/request_logger.py +0 -0
  32. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/views/__init__.py +0 -0
  33. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/views/autoscaler.py +0 -0
  34. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/views/exception.py +0 -0
  35. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/views/flink.py +0 -0
  36. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/views/instance.py +0 -0
  37. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/views/pause_autoscaler.py +0 -0
  38. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/views/remote_run.py +0 -0
  39. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/views/resources.py +0 -0
  40. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/views/service.py +0 -0
  41. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/api/views/version.py +0 -0
  42. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/apply_external_resources.py +0 -0
  43. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/async_utils.py +0 -0
  44. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/autoscaling/__init__.py +0 -0
  45. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
  46. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/autoscaling/forecasting.py +0 -0
  47. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
  48. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
  49. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/autoscaling/utils.py +0 -0
  50. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/bounce_lib.py +0 -0
  51. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/broadcast_log_to_services.py +0 -0
  52. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cassandracluster_tools.py +0 -0
  53. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/check_autoscaler_max_instances.py +0 -0
  54. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
  55. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/check_kubernetes_api.py +0 -0
  56. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/check_oom_events.py +0 -0
  57. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/check_spark_jobs.py +0 -0
  58. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
  59. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
  60. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
  61. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cleanup_tron_namespaces.py +0 -0
  62. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/__init__.py +0 -0
  63. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cli.py +0 -0
  64. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/__init__.py +0 -0
  65. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/autoscale.py +0 -0
  66. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/check.py +0 -0
  67. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/cook_image.py +0 -0
  68. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
  69. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/get_image_version.py +0 -0
  70. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
  71. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/info.py +0 -0
  72. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/itest.py +0 -0
  73. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/list.py +0 -0
  74. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/list_clusters.py +0 -0
  75. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
  76. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/list_namespaces.py +0 -0
  77. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/local_run.py +0 -0
  78. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/logs.py +0 -0
  79. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
  80. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/mesh_status.py +0 -0
  81. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
  82. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
  83. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/remote_run.py +0 -0
  84. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/rollback.py +0 -0
  85. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/secret.py +0 -0
  86. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/security_check.py +0 -0
  87. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
  88. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/status.py +0 -0
  89. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/validate.py +0 -0
  90. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
  91. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/fsm/__init__.py +0 -0
  92. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/fsm/autosuggest.py +0 -0
  93. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/fsm/template/README.md +0 -0
  94. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
  95. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
  96. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
  97. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
  98. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
  99. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/fsm_cmd.py +0 -0
  100. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
  101. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
  102. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/schemas/autoscaling_schema.json +0 -0
  103. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
  104. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
  105. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
  106. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
  107. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/schemas/service_schema.json +0 -0
  108. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/schemas/smartstack_schema.json +0 -0
  109. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/cli/utils.py +0 -0
  110. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/clusterman.py +0 -0
  111. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/config_utils.py +0 -0
  112. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/__init__.py +0 -0
  113. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
  114. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
  115. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/check_orphans.py +0 -0
  116. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
  117. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/create_paasta_playground.py +0 -0
  118. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
  119. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
  120. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/habitat_fixer.py +0 -0
  121. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/ide_helper.py +0 -0
  122. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
  123. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
  124. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/kill_bad_containers.py +0 -0
  125. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
  126. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/mock_patch_checker.py +0 -0
  127. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
  128. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/render_template.py +0 -0
  129. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
  130. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/service_shard_remove.py +0 -0
  131. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/service_shard_update.py +0 -0
  132. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/shared_ip_check.py +0 -0
  133. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
  134. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/delete_kubernetes_deployments.py +0 -0
  135. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/deployment_utils.py +0 -0
  136. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/docker_wrapper.py +0 -0
  137. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/docker_wrapper_imports.py +0 -0
  138. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/drain_lib.py +0 -0
  139. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/dump_locally_running_services.py +0 -0
  140. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/eks_tools.py +0 -0
  141. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/firewall.py +0 -0
  142. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/firewall_logging.py +0 -0
  143. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/firewall_update.py +0 -0
  144. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/flink_tools.py +0 -0
  145. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/flinkeks_tools.py +0 -0
  146. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/frameworks/__init__.py +0 -0
  147. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
  148. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/frameworks/constraints.py +0 -0
  149. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/frameworks/native_scheduler.py +0 -0
  150. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/frameworks/native_service_config.py +0 -0
  151. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/frameworks/task_store.py +0 -0
  152. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/generate_all_deployments +0 -0
  153. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/generate_authenticating_services.py +0 -0
  154. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/generate_deployments_for_service.py +0 -0
  155. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/generate_services_file.py +0 -0
  156. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/generate_services_yaml.py +0 -0
  157. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/hacheck.py +0 -0
  158. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/instance/__init__.py +0 -0
  159. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
  160. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/instance/kubernetes.py +0 -0
  161. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/iptables.py +0 -0
  162. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/kafkacluster_tools.py +0 -0
  163. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/kubernetes/__init__.py +0 -0
  164. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/kubernetes/application/__init__.py +0 -0
  165. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/kubernetes/application/controller_wrappers.py +0 -0
  166. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/kubernetes/application/tools.py +0 -0
  167. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/kubernetes/bin/__init__.py +0 -0
  168. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
  169. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/kubernetes/bin/paasta_cleanup_remote_run_resources.py +0 -0
  170. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
  171. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
  172. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/kubernetes/remote_run.py +0 -0
  173. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/list_kubernetes_service_instances.py +0 -0
  174. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/list_tron_namespaces.py +0 -0
  175. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/long_running_service_tools.py +0 -0
  176. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/mac_address.py +0 -0
  177. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/marathon_dashboard.py +0 -0
  178. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/mesos/__init__.py +0 -0
  179. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/mesos/cfg.py +0 -0
  180. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/mesos/cluster.py +0 -0
  181. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/mesos/exceptions.py +0 -0
  182. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/mesos/framework.py +0 -0
  183. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/mesos/log.py +0 -0
  184. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/mesos/master.py +0 -0
  185. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/mesos/mesos_file.py +0 -0
  186. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/mesos/parallel.py +0 -0
  187. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/mesos/slave.py +0 -0
  188. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/mesos/task.py +0 -0
  189. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/mesos/util.py +0 -0
  190. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/mesos/zookeeper.py +0 -0
  191. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/mesos_maintenance.py +0 -0
  192. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/mesos_tools.py +0 -0
  193. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/metrics/__init__.py +0 -0
  194. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/metrics/metastatus_lib.py +0 -0
  195. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/metrics/metrics_lib.py +0 -0
  196. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/monitoring/__init__.py +0 -0
  197. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
  198. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/monitoring_tools.py +0 -0
  199. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/monkrelaycluster_tools.py +0 -0
  200. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/nrtsearchservice_tools.py +0 -0
  201. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
  202. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/oom_logger.py +0 -0
  203. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paasta_deploy_tron_jobs +0 -0
  204. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paasta_execute_docker_command.py +0 -0
  205. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paasta_native_serviceinit.py +0 -0
  206. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paasta_service_config_loader.py +0 -0
  207. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/__init__.py +0 -0
  208. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/api/__init__.py +0 -0
  209. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/api/autoscaler_api.py +0 -0
  210. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/api/default_api.py +0 -0
  211. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/api/remote_run_api.py +0 -0
  212. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/api/resources_api.py +0 -0
  213. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/api/service_api.py +0 -0
  214. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/api_client.py +0 -0
  215. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/apis/__init__.py +0 -0
  216. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/configuration.py +0 -0
  217. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/exceptions.py +0 -0
  218. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/__init__.py +0 -0
  219. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/adhoc_launch_history.py +0 -0
  220. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +0 -0
  221. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/deploy_queue.py +0 -0
  222. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +0 -0
  223. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/envoy_backend.py +0 -0
  224. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/envoy_location.py +0 -0
  225. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/envoy_status.py +0 -0
  226. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/flink_cluster_overview.py +0 -0
  227. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/flink_config.py +0 -0
  228. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/flink_job.py +0 -0
  229. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/flink_job_details.py +0 -0
  230. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/flink_jobs.py +0 -0
  231. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/float_and_error.py +0 -0
  232. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/hpa_metric.py +0 -0
  233. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/inline_object.py +0 -0
  234. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/inline_response200.py +0 -0
  235. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/inline_response2001.py +0 -0
  236. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/instance_bounce_status.py +0 -0
  237. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/instance_mesh_status.py +0 -0
  238. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/instance_status.py +0 -0
  239. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/instance_status_adhoc.py +0 -0
  240. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +0 -0
  241. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/instance_status_flink.py +0 -0
  242. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +0 -0
  243. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +0 -0
  244. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +0 -0
  245. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +0 -0
  246. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/instance_status_tron.py +0 -0
  247. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/instance_tasks.py +0 -0
  248. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/integer_and_error.py +0 -0
  249. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/kubernetes_container.py +0 -0
  250. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +0 -0
  251. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +0 -0
  252. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/kubernetes_pod.py +0 -0
  253. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +0 -0
  254. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +0 -0
  255. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +0 -0
  256. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/kubernetes_version.py +0 -0
  257. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/remote_run_outcome.py +0 -0
  258. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/remote_run_start.py +0 -0
  259. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/remote_run_stop.py +0 -0
  260. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/remote_run_token.py +0 -0
  261. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/resource.py +0 -0
  262. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/resource_item.py +0 -0
  263. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/resource_value.py +0 -0
  264. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/smartstack_backend.py +0 -0
  265. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/smartstack_location.py +0 -0
  266. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/smartstack_status.py +0 -0
  267. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model/task_tail_lines.py +0 -0
  268. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/model_utils.py +0 -0
  269. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/models/__init__.py +0 -0
  270. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/paastaapi/rest.py +0 -0
  271. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/prune_completed_pods.py +0 -0
  272. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/puppet_service_tools.py +0 -0
  273. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/py.typed +0 -0
  274. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/remote_git.py +0 -0
  275. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
  276. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/run-paasta-api-playground.py +0 -0
  277. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/secret_providers/__init__.py +0 -0
  278. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/secret_providers/vault.py +0 -0
  279. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/secret_tools.py +0 -0
  280. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/setup_istio_mesh.py +0 -0
  281. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/setup_kubernetes_cr.py +0 -0
  282. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/setup_kubernetes_crd.py +0 -0
  283. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
  284. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/setup_kubernetes_job.py +0 -0
  285. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/setup_prometheus_adapter_config.py +0 -0
  286. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/setup_tron_namespace.py +0 -0
  287. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/slack.py +0 -0
  288. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/smartstack_tools.py +0 -0
  289. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/spark_tools.py +0 -0
  290. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
  291. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/tron/__init__.py +0 -0
  292. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/tron/client.py +0 -0
  293. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/tron/tron_command_context.py +0 -0
  294. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/tron/tron_timeutils.py +0 -0
  295. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools/yaml_tools.py +0 -0
  296. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools.egg-info/SOURCES.txt +0 -0
  297. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools.egg-info/dependency_links.txt +0 -0
  298. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools.egg-info/entry_points.txt +0 -0
  299. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/paasta_tools.egg-info/top_level.txt +0 -0
  300. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/pyproject.toml +0 -0
  301. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/setup.cfg +0 -0
  302. {paasta-tools-1.14.4 → paasta-tools-1.16.0}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: paasta-tools
3
- Version: 1.14.4
3
+ Version: 1.16.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.14.4"
20
+ __version__ = "1.16.0"
@@ -17,6 +17,8 @@ Usage: ./check_flink_services_health.py [options]
17
17
  """
18
18
  import datetime
19
19
  import logging
20
+ from typing import Dict
21
+ from typing import List
20
22
  from typing import Sequence
21
23
  from typing import Tuple
22
24
 
@@ -27,7 +29,6 @@ from paasta_tools import flinkeks_tools
27
29
  from paasta_tools.check_services_replication_tools import main
28
30
  from paasta_tools.check_services_replication_tools import parse_args
29
31
  from paasta_tools.flink_tools import FlinkDeploymentConfig
30
- from paasta_tools.kubernetes_tools import filter_pods_by_service_instance
31
32
  from paasta_tools.kubernetes_tools import is_pod_ready
32
33
  from paasta_tools.kubernetes_tools import V1Pod
33
34
  from paasta_tools.monitoring_tools import check_under_replication
@@ -132,14 +133,12 @@ def get_cr_name(si_pods: Sequence[V1Pod]) -> str:
132
133
 
133
134
  def check_flink_service_health(
134
135
  instance_config: FlinkDeploymentConfig,
135
- all_pods: Sequence[V1Pod],
136
+ pods_by_service_instance: Dict[str, Dict[str, List[V1Pod]]],
136
137
  replication_checker: KubeSmartstackEnvoyReplicationChecker,
137
138
  dry_run: bool = False,
138
139
  ) -> None:
139
- si_pods = filter_pods_by_service_instance(
140
- pod_list=all_pods,
141
- service=instance_config.service,
142
- instance=instance_config.instance,
140
+ si_pods = pods_by_service_instance.get(instance_config.service, {}).get(
141
+ instance_config.instance, []
143
142
  )
144
143
  taskmanagers_expected_cnt = instance_config.config_dict.get(
145
144
  "taskmanager", {"instances": 10}
@@ -31,8 +31,9 @@ CRITICAL. If replication_threshold is defined in the yelpsoa config for a servic
31
31
  instance then it will be used instead.
32
32
  """
33
33
  import logging
34
+ from typing import Dict
35
+ from typing import List
34
36
  from typing import Optional
35
- from typing import Sequence
36
37
  from typing import Union
37
38
 
38
39
  from paasta_tools import eks_tools
@@ -41,7 +42,6 @@ from paasta_tools import monitoring_tools
41
42
  from paasta_tools.check_services_replication_tools import main
42
43
  from paasta_tools.check_services_replication_tools import parse_args
43
44
  from paasta_tools.eks_tools import EksDeploymentConfig
44
- from paasta_tools.kubernetes_tools import filter_pods_by_service_instance
45
45
  from paasta_tools.kubernetes_tools import is_pod_ready
46
46
  from paasta_tools.kubernetes_tools import KubernetesDeploymentConfig
47
47
  from paasta_tools.kubernetes_tools import V1Pod
@@ -56,14 +56,13 @@ DEFAULT_ALERT_AFTER = "10m"
56
56
  def check_healthy_kubernetes_tasks_for_service_instance(
57
57
  instance_config: Union[KubernetesDeploymentConfig, EksDeploymentConfig],
58
58
  expected_count: int,
59
- all_pods: Sequence[V1Pod],
59
+ pods_by_service_instance: Dict[str, Dict[str, List[V1Pod]]],
60
60
  dry_run: bool = False,
61
61
  ) -> None:
62
- si_pods = filter_pods_by_service_instance(
63
- pod_list=all_pods,
64
- service=instance_config.service,
65
- instance=instance_config.instance,
62
+ si_pods = pods_by_service_instance.get(instance_config.service, {}).get(
63
+ instance_config.instance, []
66
64
  )
65
+
67
66
  num_healthy_tasks = len([pod for pod in si_pods if is_pod_ready(pod)])
68
67
  log.info(
69
68
  f"Checking {instance_config.service}.{instance_config.instance} in kubernetes as it is not in smartstack"
@@ -78,7 +77,7 @@ def check_healthy_kubernetes_tasks_for_service_instance(
78
77
 
79
78
  def check_kubernetes_pod_replication(
80
79
  instance_config: Union[KubernetesDeploymentConfig, EksDeploymentConfig],
81
- all_pods: Sequence[V1Pod],
80
+ pods_by_service_instance: Dict[str, Dict[str, List[V1Pod]]],
82
81
  replication_checker: KubeSmartstackEnvoyReplicationChecker,
83
82
  dry_run: bool = False,
84
83
  ) -> Optional[bool]:
@@ -126,7 +125,7 @@ def check_kubernetes_pod_replication(
126
125
  check_healthy_kubernetes_tasks_for_service_instance(
127
126
  instance_config=instance_config,
128
127
  expected_count=expected_count,
129
- all_pods=all_pods,
128
+ pods_by_service_instance=pods_by_service_instance,
130
129
  dry_run=dry_run,
131
130
  )
132
131
  return None
@@ -14,12 +14,16 @@
14
14
  import argparse
15
15
  import logging
16
16
  import sys
17
+ from multiprocessing import Pool
18
+ from os import cpu_count
17
19
  from typing import Any
18
20
  from typing import Callable
19
- from typing import Container
21
+ from typing import cast
22
+ from typing import Dict
20
23
  from typing import List
21
24
  from typing import Optional
22
25
  from typing import Sequence
26
+ from typing import Set
23
27
  from typing import Tuple
24
28
  from typing import Type
25
29
 
@@ -29,6 +33,7 @@ from mypy_extensions import NamedArg
29
33
  from paasta_tools.kubernetes_tools import get_all_managed_namespaces
30
34
  from paasta_tools.kubernetes_tools import get_all_nodes
31
35
  from paasta_tools.kubernetes_tools import get_all_pods
36
+ from paasta_tools.kubernetes_tools import group_pods_by_service_instance
32
37
  from paasta_tools.kubernetes_tools import KubeClient
33
38
  from paasta_tools.kubernetes_tools import V1Node
34
39
  from paasta_tools.kubernetes_tools import V1Pod
@@ -52,7 +57,7 @@ log = logging.getLogger(__name__)
52
57
  CheckServiceReplication = Callable[
53
58
  [
54
59
  Arg(InstanceConfig_T, "instance_config"),
55
- Arg(Sequence[V1Pod], "all_pods"),
60
+ Arg(Dict[str, Dict[str, List[V1Pod]]], "pods_by_service_instance"),
56
61
  Arg(Any, "replication_checker"),
57
62
  NamedArg(bool, "dry_run"),
58
63
  ],
@@ -102,16 +107,6 @@ def parse_args() -> argparse.Namespace:
102
107
  dest="dry_run",
103
108
  help="Print Sensu alert events and metrics instead of sending them",
104
109
  )
105
- parser.add_argument(
106
- "--additional-namespaces",
107
- help="full names of namespaces to check services replication for that don't match --namespace-prefix"
108
- "Used only when service is kubernetes",
109
- dest="additional_namespaces",
110
- nargs="+",
111
- # we default this to paasta since we always want to run this check on paasta namespace
112
- # to avoid having two cron jobs running with two different namespace-prefix
113
- default=["paasta"],
114
- )
115
110
  parser.add_argument(
116
111
  "--eks",
117
112
  help="This flag checks k8 services running on EKS",
@@ -131,7 +126,7 @@ def check_services_replication(
131
126
  instance_type_class: Type[InstanceConfig_T],
132
127
  check_service_replication: CheckServiceReplication,
133
128
  replication_checker: ReplicationChecker,
134
- all_pods: Sequence[V1Pod],
129
+ pods_by_service_instance: Dict[str, Dict[str, List[V1Pod]]],
135
130
  dry_run: bool = False,
136
131
  ) -> Tuple[int, int]:
137
132
  service_instances_set = set(service_instances)
@@ -151,7 +146,7 @@ def check_services_replication(
151
146
  if instance_config.get_docker_image():
152
147
  is_well_replicated = check_service_replication(
153
148
  instance_config=instance_config,
154
- all_pods=all_pods,
149
+ pods_by_service_instance=pods_by_service_instance,
155
150
  replication_checker=replication_checker,
156
151
  dry_run=dry_run,
157
152
  )
@@ -211,14 +206,14 @@ def main(
211
206
  system_paasta_config=system_paasta_config,
212
207
  )
213
208
  else:
214
- pods, nodes = get_kubernetes_pods_and_nodes(
215
- additional_namespaces=args.additional_namespaces,
216
- )
209
+ pods, nodes = get_kubernetes_pods_and_nodes()
217
210
  replication_checker = KubeSmartstackEnvoyReplicationChecker(
218
211
  nodes=nodes,
219
212
  system_paasta_config=system_paasta_config,
220
213
  )
221
214
 
215
+ pods_by_service_instance = group_pods_by_service_instance(pods)
216
+
222
217
  count_under_replicated, total = check_services_replication(
223
218
  soa_dir=args.soa_dir,
224
219
  cluster=cluster,
@@ -226,7 +221,7 @@ def main(
226
221
  instance_type_class=instance_type_class,
227
222
  check_service_replication=check_service_replication,
228
223
  replication_checker=replication_checker,
229
- all_pods=pods,
224
+ pods_by_service_instance=pods_by_service_instance,
230
225
  dry_run=args.dry_run,
231
226
  )
232
227
  pct_under_replicated = 0 if total == 0 else 100 * count_under_replicated / total
@@ -256,21 +251,73 @@ def main(
256
251
  sys.exit(exit_code)
257
252
 
258
253
 
254
+ # XXX: is there a base class for the k8s clientlib models that we could use to type `obj`?
255
+ def set_local_vars_configuration_to_none(obj: Any, visited: Set[int] = None) -> None:
256
+ """
257
+ Recursive function to ensure that k8s clientlib objects are pickleable.
258
+
259
+ Without this, k8s clientlib objects can't be used by multiprocessing functions
260
+ as those pickle data to shuttle between processes.
261
+ """
262
+ if visited is None:
263
+ visited = set()
264
+
265
+ # Avoid infinite recursion for objects that have already been visited
266
+ obj_id = id(obj)
267
+ if obj_id in visited:
268
+ return
269
+ visited.add(obj_id)
270
+
271
+ # if the object has the attribute, set it to None to essentially delete it
272
+ if hasattr(obj, "local_vars_configuration"):
273
+ setattr(obj, "local_vars_configuration", None)
274
+
275
+ # recursively check attributes of the object
276
+ if hasattr(obj, "__dict__"):
277
+ for attr_name, attr_value in obj.__dict__.items():
278
+ set_local_vars_configuration_to_none(attr_value, visited)
279
+
280
+ # if the object is iterable/a collection, iterate over its elements
281
+ elif isinstance(obj, (list, tuple, set)):
282
+ for item in obj:
283
+ set_local_vars_configuration_to_none(item, visited)
284
+ elif isinstance(obj, dict):
285
+ for value in obj.values():
286
+ set_local_vars_configuration_to_none(value, visited)
287
+
288
+
289
+ def __fetch_pods(namespace: str) -> List[V1Pod]:
290
+ kube_client = KubeClient()
291
+ pods = get_all_pods(kube_client, namespace)
292
+ for pod in pods:
293
+ # this is pretty silly, but V1Pod cannot be pickled otherwise since the local_vars_configuration member
294
+ # is not picklable - and pretty much every k8s model has this member ;_;
295
+ set_local_vars_configuration_to_none(pod)
296
+ return pods
297
+
298
+
299
+ def __get_all_pods_parallel(from_namespaces: Set[str]) -> List[V1Pod]:
300
+ all_pods: List[V1Pod] = []
301
+ with Pool() as pool:
302
+ for pod_list in pool.imap_unordered(
303
+ __fetch_pods,
304
+ from_namespaces,
305
+ chunksize=len(from_namespaces) // cast(int, cpu_count()),
306
+ ):
307
+ all_pods.extend(pod_list)
308
+ return all_pods
309
+
310
+
259
311
  def get_kubernetes_pods_and_nodes(
260
312
  namespace: Optional[str] = None,
261
- additional_namespaces: Optional[Container[str]] = None,
262
313
  ) -> Tuple[List[V1Pod], List[V1Node]]:
263
314
  kube_client = KubeClient()
264
315
 
265
- all_pods: List[V1Pod] = []
266
316
  if namespace:
267
317
  all_pods = get_all_pods(kube_client=kube_client, namespace=namespace)
268
318
  else:
269
- all_managed_namespaces = get_all_managed_namespaces(kube_client)
270
- for managed_namespace in all_managed_namespaces:
271
- all_pods.extend(
272
- get_all_pods(kube_client=kube_client, namespace=managed_namespace)
273
- )
319
+ all_managed_namespaces = set(get_all_managed_namespaces(kube_client))
320
+ all_pods = __get_all_pods_parallel(all_managed_namespaces)
274
321
 
275
322
  all_nodes = get_all_nodes(kube_client)
276
323
 
@@ -12,6 +12,7 @@ from typing import Dict
12
12
  from typing import List
13
13
  from typing import Mapping
14
14
  from typing import Optional
15
+ from typing import Set
15
16
  from typing import Tuple
16
17
  from typing import Union
17
18
 
@@ -31,6 +32,7 @@ from paasta_tools.cli.utils import get_service_auth_token
31
32
  from paasta_tools.cli.utils import lazy_choices_completer
32
33
  from paasta_tools.cli.utils import list_instances
33
34
  from paasta_tools.clusterman import get_clusterman_metrics
35
+ from paasta_tools.kubernetes_tools import get_service_account_name
34
36
  from paasta_tools.spark_tools import auto_add_timeout_for_spark_job
35
37
  from paasta_tools.spark_tools import create_spark_config_str
36
38
  from paasta_tools.spark_tools import DEFAULT_SPARK_RUNTIME_TIMEOUT
@@ -38,6 +40,7 @@ from paasta_tools.spark_tools import DEFAULT_SPARK_SERVICE
38
40
  from paasta_tools.spark_tools import get_volumes_from_spark_k8s_configs
39
41
  from paasta_tools.spark_tools import get_webui_url
40
42
  from paasta_tools.spark_tools import inject_spark_conf_str
43
+ from paasta_tools.tron_tools import load_tron_instance_configs
41
44
  from paasta_tools.utils import _run
42
45
  from paasta_tools.utils import DEFAULT_SOA_DIR
43
46
  from paasta_tools.utils import filter_templates_from_config
@@ -419,6 +422,29 @@ def add_subparser(subparsers):
419
422
  default=False,
420
423
  )
421
424
 
425
+ aws_group.add_argument(
426
+ "--force-pod-identity",
427
+ help=(
428
+ "Normally the spark executor will use the pod identity defined "
429
+ "for the relevant instance in yelpsoa-configs. If the instance "
430
+ "isn't setup there yet, you can override the IAM role arn here."
431
+ " However, it must already be set for a different instance of "
432
+ "the service. Must be used with --executor-pod-identity."
433
+ ),
434
+ default=None,
435
+ )
436
+
437
+ aws_group.add_argument(
438
+ "--executor-pod-identity",
439
+ help=(
440
+ "Launch the executor pod with pod-identity derived from "
441
+ "the iam_role settings attached to the instance settings in "
442
+ "SOA configs. See also --force-pod-identity."
443
+ ),
444
+ action="store_true",
445
+ default=False,
446
+ )
447
+
422
448
  jupyter_group = list_parser.add_argument_group(
423
449
  title="Jupyter kernel culling options",
424
450
  description="Idle kernels will be culled by default. Idle "
@@ -627,6 +653,19 @@ def get_spark_env(
627
653
  return spark_env
628
654
 
629
655
 
656
+ def get_all_iam_roles_for_service(
657
+ service: str,
658
+ cluster: str,
659
+ ) -> Set[str]:
660
+ tron_instance_configs = load_tron_instance_configs(service, cluster)
661
+ roles = set()
662
+ for action in tron_instance_configs:
663
+ role = action.get_iam_role()
664
+ if role:
665
+ roles.add(role)
666
+ return roles
667
+
668
+
630
669
  def _parse_user_spark_args(
631
670
  spark_args: str,
632
671
  ) -> Dict[str, str]:
@@ -1205,6 +1244,47 @@ def paasta_spark_run(args: argparse.Namespace) -> int:
1205
1244
  )
1206
1245
  return 1
1207
1246
 
1247
+ service_account_name = None
1248
+ iam_role = instance_config.get_iam_role()
1249
+ if args.executor_pod_identity and not (iam_role or args.force_pod_identity):
1250
+ print(
1251
+ "--executor-pod-identity set but no iam_role settings found.",
1252
+ file=sys.stderr,
1253
+ )
1254
+ return 1
1255
+ if args.executor_pod_identity:
1256
+ if args.force_pod_identity:
1257
+ if args.yelpsoa_config_root != DEFAULT_SOA_DIR:
1258
+ print(
1259
+ "--force-pod-identity cannot be used with --yelpsoa-config-root",
1260
+ file=sys.stderr,
1261
+ )
1262
+ return 1
1263
+
1264
+ allowed_iam_roles = get_all_iam_roles_for_service(
1265
+ args.service, args.cluster
1266
+ )
1267
+ if args.force_pod_identity not in allowed_iam_roles:
1268
+ print(
1269
+ f"{args.force_pod_identity} is not an allowed role for this service. "
1270
+ f"Allowed roles are: {allowed_iam_roles}.",
1271
+ file=sys.stderr,
1272
+ )
1273
+ return 1
1274
+
1275
+ service_account_name = get_service_account_name(args.force_pod_identity)
1276
+ else:
1277
+ service_account_name = get_service_account_name(iam_role)
1278
+ if (
1279
+ not args.aws_credentials_yaml
1280
+ and not args.aws_profile
1281
+ and not args.assume_aws_role
1282
+ ):
1283
+ args.aws_credentials_yaml = (
1284
+ system_paasta_config.get_default_spark_iam_user()
1285
+ )
1286
+ log.info(f"Running executor with service account {service_account_name}")
1287
+
1208
1288
  aws_creds = get_aws_credentials(
1209
1289
  service=args.service,
1210
1290
  aws_credentials_yaml=args.aws_credentials_yaml,
@@ -1213,6 +1293,14 @@ def paasta_spark_run(args: argparse.Namespace) -> int:
1213
1293
  session_duration=args.aws_role_duration,
1214
1294
  use_web_identity=args.use_web_identity,
1215
1295
  )
1296
+
1297
+ # If executor pods use a service account, they don't need static aws creds
1298
+ # but the driver still does
1299
+ if service_account_name:
1300
+ executor_aws_creds = None
1301
+ else:
1302
+ executor_aws_creds = aws_creds
1303
+
1216
1304
  docker_image_digest = get_docker_image(args, instance_config)
1217
1305
  if docker_image_digest is None:
1218
1306
  return 1
@@ -1254,11 +1342,12 @@ def paasta_spark_run(args: argparse.Namespace) -> int:
1254
1342
  paasta_service=args.service,
1255
1343
  paasta_instance=paasta_instance,
1256
1344
  extra_volumes=cast(List[Mapping[str, str]], volumes),
1257
- aws_creds=aws_creds,
1345
+ aws_creds=executor_aws_creds,
1258
1346
  aws_region=args.aws_region,
1259
1347
  force_spark_resource_configs=args.force_spark_resource_configs,
1260
1348
  use_eks=True,
1261
1349
  k8s_server_address=k8s_server_address,
1350
+ service_account_name=service_account_name,
1262
1351
  )
1263
1352
 
1264
1353
  return configure_and_run_docker_container(
@@ -502,6 +502,19 @@
502
502
  },
503
503
  "page": {
504
504
  "type": "boolean"
505
+ },
506
+ "alert_after": {
507
+ "oneOf": [
508
+ {
509
+ "type": "string",
510
+ "pattern": "^[1-9]+[0-9]*[YMWDhms]$",
511
+ "$comment": "See https://pysensu-yelp.readthedocs.io/en/latest/#pysensu_yelp.human_to_seconds"
512
+ },
513
+ {
514
+ "type": "integer",
515
+ "minimum": 0
516
+ }
517
+ ]
505
518
  }
506
519
  },
507
520
  "additionalProperties": true
@@ -502,6 +502,19 @@
502
502
  },
503
503
  "page": {
504
504
  "type": "boolean"
505
+ },
506
+ "alert_after": {
507
+ "oneOf": [
508
+ {
509
+ "type": "string",
510
+ "pattern": "^[1-9]+[0-9]*[YMWDhms]$",
511
+ "$comment": "See https://pysensu-yelp.readthedocs.io/en/latest/#pysensu_yelp.human_to_seconds"
512
+ },
513
+ {
514
+ "type": "integer",
515
+ "minimum": 0
516
+ }
517
+ ]
505
518
  }
506
519
  },
507
520
  "additionalProperties": true
@@ -622,7 +622,17 @@
622
622
  "type": "string"
623
623
  },
624
624
  "alert_after": {
625
- "type": "string"
625
+ "oneOf": [
626
+ {
627
+ "type": "string",
628
+ "pattern": "^[1-9]+[0-9]*[YMWDhms]$",
629
+ "$comment": "See https://pysensu-yelp.readthedocs.io/en/latest/#pysensu_yelp.human_to_seconds"
630
+ },
631
+ {
632
+ "type": "integer",
633
+ "minimum": 0
634
+ }
635
+ ]
626
636
  },
627
637
  "check_that_every_day_has_a_successful_run": {
628
638
  "type": "boolean"
@@ -204,6 +204,7 @@ def get_multiple_backends(
204
204
  envoy_host: str,
205
205
  envoy_admin_port: int,
206
206
  envoy_admin_endpoint_format: str,
207
+ resolve_hostnames: bool = True,
207
208
  ) -> Dict[str, List[Tuple[EnvoyBackend, bool]]]:
208
209
  """Fetches JSON from Envoy admin's /clusters endpoint and returns a list of backends.
209
210
 
@@ -247,11 +248,15 @@ def get_multiple_backends(
247
248
  casper_endpoint_found = True
248
249
  continue
249
250
 
250
- try:
251
- hostname = socket.gethostbyaddr(address)[0].split(".")[0]
252
- except socket.herror:
253
- # Default to the raw IP address if we can't lookup the hostname
254
- hostname = address
251
+ hostname = address
252
+ if resolve_hostnames:
253
+ try:
254
+ hostname = socket.gethostbyaddr(address)[0].split(".")[
255
+ 0
256
+ ]
257
+ except socket.herror:
258
+ # Default to the raw IP address if we can't lookup the hostname
259
+ pass
255
260
 
256
261
  cluster_backends.append(
257
262
  (
@@ -352,6 +357,7 @@ def get_replication_for_all_services(
352
357
  envoy_host=envoy_host,
353
358
  envoy_admin_port=envoy_admin_port,
354
359
  envoy_admin_endpoint_format=envoy_admin_endpoint_format,
360
+ resolve_hostnames=False, # we're not really going to use the hostnames, so skip fetching them to save time
355
361
  )
356
362
  return collections.Counter(
357
363
  [
@@ -3439,8 +3439,11 @@ def get_pods_by_node(kube_client: KubeClient, node: V1Node) -> Sequence[V1Pod]:
3439
3439
  ).items
3440
3440
 
3441
3441
 
3442
- def get_all_pods(kube_client: KubeClient, namespace: str) -> List[V1Pod]:
3443
- return kube_client.core.list_namespaced_pod(namespace=namespace).items
3442
+ def get_all_pods(kube_client: KubeClient, namespace: Optional[str]) -> List[V1Pod]:
3443
+ if namespace:
3444
+ return kube_client.core.list_namespaced_pod(namespace=namespace).items
3445
+ else:
3446
+ return kube_client.core.list_pod_for_all_namespaces().items
3444
3447
 
3445
3448
 
3446
3449
  @time_cache(ttl=300)
@@ -3461,6 +3464,26 @@ def filter_pods_by_service_instance(
3461
3464
  ]
3462
3465
 
3463
3466
 
3467
+ def group_pods_by_service_instance(
3468
+ pods: Sequence[V1Pod],
3469
+ ) -> Dict[str, Dict[str, List[V1Pod]]]:
3470
+ pods_by_service_instance: Dict[str, Dict[str, List[V1Pod]]] = {}
3471
+ for pod in pods:
3472
+ if pod.metadata.labels is not None:
3473
+ service = pod.metadata.labels.get("paasta.yelp.com/service")
3474
+ instance = pod.metadata.labels.get("paasta.yelp.com/instance")
3475
+
3476
+ if service and instance:
3477
+ if service not in pods_by_service_instance:
3478
+ pods_by_service_instance[service] = {}
3479
+ if instance not in pods_by_service_instance[service]:
3480
+ pods_by_service_instance[service][instance] = []
3481
+
3482
+ pods_by_service_instance[service][instance].append(pod)
3483
+
3484
+ return pods_by_service_instance
3485
+
3486
+
3464
3487
  def _is_it_ready(
3465
3488
  it: Union[V1Pod, V1Node],
3466
3489
  ) -> bool:
@@ -697,13 +697,14 @@ class TronActionConfig(InstanceConfig):
697
697
  override this value. To control this, we have an optional config item that we'll puppet onto Tron masters
698
698
  which this function will read.
699
699
  """
700
- return (
701
- self.config_dict.get(
700
+ if self.get_executor() == "spark":
701
+ pool = load_system_paasta_config().get_default_spark_driver_pool_override()
702
+ else:
703
+ pool = self.config_dict.get(
702
704
  "pool", load_system_paasta_config().get_tron_default_pool_override()
703
705
  )
704
- if not self.get_executor() == "spark"
705
- else spark_tools.SPARK_DRIVER_POOL
706
- )
706
+
707
+ return pool
707
708
 
708
709
  def get_spark_executor_pool(self) -> str:
709
710
  return self.config_dict.get("pool", DEFAULT_SPARK_EXECUTOR_POOL)
@@ -123,6 +123,10 @@ DEFAULT_CPU_BURST_ADD = 1
123
123
 
124
124
  DEFAULT_SOA_CONFIGS_GIT_URL = "sysgit.yelpcorp.com"
125
125
 
126
+ # To ensure the Spark driver not being interrupted due to spot instances,
127
+ # we use stable pool for drivers
128
+ DEFAULT_SPARK_DRIVER_POOL = "stable"
129
+
126
130
  log = logging.getLogger(__name__)
127
131
  log.addHandler(logging.NullHandler())
128
132
 
@@ -2044,6 +2048,8 @@ class SystemPaastaConfigDict(TypedDict, total=False):
2044
2048
  uses_bulkdata_default: bool
2045
2049
  enable_automated_redeploys_default: bool
2046
2050
  enable_tron_tsc: bool
2051
+ default_spark_iam_user: str
2052
+ default_spark_driver_pool_override: str
2047
2053
 
2048
2054
 
2049
2055
  def load_system_paasta_config(
@@ -2142,6 +2148,22 @@ class SystemPaastaConfig:
2142
2148
  def get_spark_use_eks_default(self) -> bool:
2143
2149
  return self.config_dict.get("spark_use_eks_default", False)
2144
2150
 
2151
+ def get_default_spark_iam_user(self) -> str:
2152
+ return self.config_dict.get(
2153
+ "default_spark_iam_user", "/etc/boto_cfg/mrjob.yaml"
2154
+ )
2155
+
2156
+ def get_default_spark_driver_pool_override(self) -> str:
2157
+ """
2158
+ If defined, fetches the override for what pool to run a Spark driver in.
2159
+ Otherwise, returns the default Spark driver pool.
2160
+
2161
+ :returns: The default_spark_driver_pool_override specified in the paasta configuration
2162
+ """
2163
+ return self.config_dict.get(
2164
+ "default_spark_driver_pool_override", DEFAULT_SPARK_DRIVER_POOL
2165
+ )
2166
+
2145
2167
  def get_sidecar_requirements_config(
2146
2168
  self,
2147
2169
  ) -> Dict[str, KubeContainerResourceRequest]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: paasta-tools
3
- Version: 1.14.4
3
+ Version: 1.16.0
4
4
  Summary: Tools for Yelps SOA infrastructure
5
5
  Home-page: UNKNOWN
6
6
  Author: Compute Infrastructure @ Yelp
@@ -49,7 +49,7 @@ requests-cache>=0.4.10
49
49
  retry
50
50
  ruamel.yaml
51
51
  sensu-plugin
52
- service-configuration-lib>=3.1.1
52
+ service-configuration-lib>=3.2.0
53
53
  signalfx
54
54
  slackclient>=1.2.1
55
55
  sticht>=1.1.0
@@ -56,7 +56,7 @@ requests-cache >= 0.4.10
56
56
  retry
57
57
  ruamel.yaml
58
58
  sensu-plugin
59
- service-configuration-lib >= 3.1.1
59
+ service-configuration-lib >= 3.2.0
60
60
  signalfx
61
61
  slackclient >= 1.2.1
62
62
  sticht >= 1.1.0
File without changes
File without changes