paasta-tools 1.4.8__tar.gz → 1.4.10__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.4.8/paasta_tools.egg-info → paasta-tools-1.4.10}/PKG-INFO +1 -1
  2. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/__init__.py +1 -1
  3. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/smartstack_schema.json +32 -0
  4. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes/application/controller_wrappers.py +21 -0
  5. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes_tools.py +14 -14
  6. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/setup_kubernetes_job.py +1 -0
  7. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/setup_tron_namespace.py +40 -0
  8. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/spark_tools.py +21 -0
  9. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/tron_tools.py +61 -20
  10. {paasta-tools-1.4.8 → paasta-tools-1.4.10/paasta_tools.egg-info}/PKG-INFO +1 -1
  11. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/MANIFEST.in +0 -0
  12. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/README.md +0 -0
  13. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/k8s_itests/__init__.py +0 -0
  14. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/k8s_itests/test_autoscaling.py +0 -0
  15. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/k8s_itests/utils.py +0 -0
  16. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/adhoc_tools.py +0 -0
  17. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/__init__.py +0 -0
  18. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/api.py +0 -0
  19. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/api_docs/swagger.json +0 -0
  20. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/client.py +0 -0
  21. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/settings.py +0 -0
  22. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/tweens/__init__.py +0 -0
  23. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/tweens/profiling.py +0 -0
  24. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/tweens/request_logger.py +0 -0
  25. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/__init__.py +0 -0
  26. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/autoscaler.py +0 -0
  27. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/exception.py +0 -0
  28. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/flink.py +0 -0
  29. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/instance.py +0 -0
  30. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/pause_autoscaler.py +0 -0
  31. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/resources.py +0 -0
  32. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/service.py +0 -0
  33. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/version.py +0 -0
  34. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/apply_external_resources.py +0 -0
  35. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/async_utils.py +0 -0
  36. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/autoscaling/__init__.py +0 -0
  37. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
  38. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/autoscaling/forecasting.py +0 -0
  39. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
  40. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
  41. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/autoscaling/utils.py +0 -0
  42. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/bounce_lib.py +0 -0
  43. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/broadcast_log_to_services.py +0 -0
  44. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cassandracluster_tools.py +0 -0
  45. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/check_autoscaler_max_instances.py +0 -0
  46. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
  47. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/check_flink_services_health.py +0 -0
  48. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/check_kubernetes_api.py +0 -0
  49. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/check_kubernetes_services_replication.py +0 -0
  50. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/check_oom_events.py +0 -0
  51. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/check_services_replication_tools.py +0 -0
  52. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/check_spark_jobs.py +0 -0
  53. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
  54. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
  55. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
  56. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cleanup_tron_namespaces.py +0 -0
  57. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/__init__.py +0 -0
  58. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cli.py +0 -0
  59. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/__init__.py +0 -0
  60. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/autoscale.py +0 -0
  61. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/check.py +0 -0
  62. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/cook_image.py +0 -0
  63. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
  64. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/get_image_version.py +0 -0
  65. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
  66. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/info.py +0 -0
  67. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/itest.py +0 -0
  68. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/list.py +0 -0
  69. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/list_clusters.py +0 -0
  70. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
  71. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/local_run.py +0 -0
  72. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/logs.py +0 -0
  73. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
  74. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/mesh_status.py +0 -0
  75. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
  76. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
  77. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/remote_run.py +0 -0
  78. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/rollback.py +0 -0
  79. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/secret.py +0 -0
  80. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/security_check.py +0 -0
  81. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/spark_run.py +0 -0
  82. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
  83. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/status.py +0 -0
  84. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/validate.py +0 -0
  85. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
  86. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm/__init__.py +0 -0
  87. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm/autosuggest.py +0 -0
  88. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm/template/README.md +0 -0
  89. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
  90. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
  91. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
  92. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
  93. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
  94. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm_cmd.py +0 -0
  95. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
  96. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
  97. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/autoscaling_schema.json +0 -0
  98. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
  99. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
  100. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
  101. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/eks_schema.json +0 -0
  102. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/kubernetes_schema.json +0 -0
  103. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
  104. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/service_schema.json +0 -0
  105. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/tron_schema.json +0 -0
  106. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/utils.py +0 -0
  107. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/clusterman.py +0 -0
  108. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/config_utils.py +0 -0
  109. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/__init__.py +0 -0
  110. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
  111. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
  112. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/check_orphans.py +0 -0
  113. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
  114. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/create_paasta_playground.py +0 -0
  115. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
  116. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
  117. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/habitat_fixer.py +0 -0
  118. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/ide_helper.py +0 -0
  119. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
  120. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
  121. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/kill_bad_containers.py +0 -0
  122. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
  123. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/mock_patch_checker.py +0 -0
  124. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
  125. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/render_template.py +0 -0
  126. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
  127. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/service_shard_remove.py +0 -0
  128. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/service_shard_update.py +0 -0
  129. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/shared_ip_check.py +0 -0
  130. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
  131. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/delete_kubernetes_deployments.py +0 -0
  132. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/deployment_utils.py +0 -0
  133. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/docker_wrapper.py +0 -0
  134. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/docker_wrapper_imports.py +0 -0
  135. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/drain_lib.py +0 -0
  136. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/dump_locally_running_services.py +0 -0
  137. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/eks_tools.py +0 -0
  138. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/envoy_tools.py +0 -0
  139. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/firewall.py +0 -0
  140. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/firewall_logging.py +0 -0
  141. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/firewall_update.py +0 -0
  142. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/flink_tools.py +0 -0
  143. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/flinkeks_tools.py +0 -0
  144. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/frameworks/__init__.py +0 -0
  145. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
  146. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/frameworks/constraints.py +0 -0
  147. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/frameworks/native_scheduler.py +0 -0
  148. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/frameworks/native_service_config.py +0 -0
  149. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/frameworks/task_store.py +0 -0
  150. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/generate_all_deployments +0 -0
  151. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/generate_authenticating_services.py +0 -0
  152. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/generate_deployments_for_service.py +0 -0
  153. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/generate_services_file.py +0 -0
  154. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/generate_services_yaml.py +0 -0
  155. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/hacheck.py +0 -0
  156. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/instance/__init__.py +0 -0
  157. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
  158. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/instance/kubernetes.py +0 -0
  159. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/iptables.py +0 -0
  160. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kafkacluster_tools.py +0 -0
  161. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes/__init__.py +0 -0
  162. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes/application/__init__.py +0 -0
  163. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes/application/tools.py +0 -0
  164. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes/bin/__init__.py +0 -0
  165. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
  166. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
  167. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
  168. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/list_kubernetes_service_instances.py +0 -0
  169. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/list_tron_namespaces.py +0 -0
  170. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/log_task_lifecycle_events.py +0 -0
  171. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/long_running_service_tools.py +0 -0
  172. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mac_address.py +0 -0
  173. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/marathon_dashboard.py +0 -0
  174. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/__init__.py +0 -0
  175. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/cfg.py +0 -0
  176. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/cluster.py +0 -0
  177. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/exceptions.py +0 -0
  178. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/framework.py +0 -0
  179. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/log.py +0 -0
  180. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/master.py +0 -0
  181. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/mesos_file.py +0 -0
  182. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/parallel.py +0 -0
  183. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/slave.py +0 -0
  184. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/task.py +0 -0
  185. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/util.py +0 -0
  186. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/zookeeper.py +0 -0
  187. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos_maintenance.py +0 -0
  188. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos_tools.py +0 -0
  189. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/metrics/__init__.py +0 -0
  190. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/metrics/metastatus_lib.py +0 -0
  191. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/metrics/metrics_lib.py +0 -0
  192. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/monitoring/__init__.py +0 -0
  193. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
  194. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/monitoring/kill_orphaned_docker_containers.py +0 -0
  195. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/monitoring_tools.py +0 -0
  196. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/monkrelaycluster_tools.py +0 -0
  197. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/nrtsearchservice_tools.py +0 -0
  198. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
  199. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/oom_logger.py +0 -0
  200. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paasta_deploy_tron_jobs +0 -0
  201. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paasta_execute_docker_command.py +0 -0
  202. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paasta_native_serviceinit.py +0 -0
  203. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paasta_remote_run.py +0 -0
  204. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paasta_service_config_loader.py +0 -0
  205. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/__init__.py +0 -0
  206. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/api/__init__.py +0 -0
  207. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/api/autoscaler_api.py +0 -0
  208. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/api/default_api.py +0 -0
  209. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/api/resources_api.py +0 -0
  210. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/api/service_api.py +0 -0
  211. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/api_client.py +0 -0
  212. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/apis/__init__.py +0 -0
  213. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/configuration.py +0 -0
  214. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/exceptions.py +0 -0
  215. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/__init__.py +0 -0
  216. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/adhoc_launch_history.py +0 -0
  217. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +0 -0
  218. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/deploy_queue.py +0 -0
  219. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +0 -0
  220. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/envoy_backend.py +0 -0
  221. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/envoy_location.py +0 -0
  222. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/envoy_status.py +0 -0
  223. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/flink_cluster_overview.py +0 -0
  224. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/flink_config.py +0 -0
  225. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/flink_job.py +0 -0
  226. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/flink_job_details.py +0 -0
  227. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/flink_jobs.py +0 -0
  228. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/float_and_error.py +0 -0
  229. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/hpa_metric.py +0 -0
  230. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/inline_object.py +0 -0
  231. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/inline_response200.py +0 -0
  232. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/inline_response2001.py +0 -0
  233. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_bounce_status.py +0 -0
  234. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_mesh_status.py +0 -0
  235. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status.py +0 -0
  236. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_adhoc.py +0 -0
  237. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +0 -0
  238. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_flink.py +0 -0
  239. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +0 -0
  240. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +0 -0
  241. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +0 -0
  242. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +0 -0
  243. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_tron.py +0 -0
  244. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_vitesscluster.py +0 -0
  245. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_tasks.py +0 -0
  246. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/integer_and_error.py +0 -0
  247. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/kubernetes_container.py +0 -0
  248. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +0 -0
  249. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +0 -0
  250. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/kubernetes_pod.py +0 -0
  251. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +0 -0
  252. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +0 -0
  253. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +0 -0
  254. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/kubernetes_version.py +0 -0
  255. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/resource.py +0 -0
  256. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/resource_item.py +0 -0
  257. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/resource_value.py +0 -0
  258. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/smartstack_backend.py +0 -0
  259. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/smartstack_location.py +0 -0
  260. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/smartstack_status.py +0 -0
  261. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/task_tail_lines.py +0 -0
  262. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model_utils.py +0 -0
  263. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/models/__init__.py +0 -0
  264. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/rest.py +0 -0
  265. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/prune_completed_pods.py +0 -0
  266. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/puppet_service_tools.py +0 -0
  267. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/py.typed +0 -0
  268. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/remote_git.py +0 -0
  269. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
  270. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/run-paasta-api-playground.py +0 -0
  271. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/secret_providers/__init__.py +0 -0
  272. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/secret_providers/vault.py +0 -0
  273. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/secret_tools.py +0 -0
  274. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/setup_istio_mesh.py +0 -0
  275. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/setup_kubernetes_cr.py +0 -0
  276. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/setup_kubernetes_crd.py +0 -0
  277. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
  278. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/setup_prometheus_adapter_config.py +0 -0
  279. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/slack.py +0 -0
  280. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/smartstack_tools.py +0 -0
  281. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
  282. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/tron/__init__.py +0 -0
  283. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/tron/client.py +0 -0
  284. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/tron/tron_command_context.py +0 -0
  285. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/tron/tron_timeutils.py +0 -0
  286. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/utils.py +0 -0
  287. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/vitesscluster_tools.py +0 -0
  288. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools.egg-info/SOURCES.txt +0 -0
  289. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools.egg-info/dependency_links.txt +0 -0
  290. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools.egg-info/entry_points.txt +0 -0
  291. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools.egg-info/requires.txt +0 -0
  292. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools.egg-info/top_level.txt +0 -0
  293. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/pyproject.toml +0 -0
  294. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/requirements-minimal.txt +0 -0
  295. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/setup.cfg +0 -0
  296. {paasta-tools-1.4.8 → paasta-tools-1.4.10}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: paasta-tools
3
- Version: 1.4.8
3
+ Version: 1.4.10
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.4.8"
20
+ __version__ = "1.4.10"
@@ -227,6 +227,38 @@
227
227
  "vip_upgrade": {
228
228
  "type": "string",
229
229
  "description": "The service namespace that this namespace will route to (via Envoy) if a request has the X-Ctx-Vip header."
230
+ },
231
+ "monitoring": {
232
+ "type": "object",
233
+ "properties": {
234
+ "team": {
235
+ "type": "string"
236
+ },
237
+ "slack_channel": {
238
+ "type": "string"
239
+ },
240
+ "project": {
241
+ "type": "string"
242
+ },
243
+ "ticket": {
244
+ "type": "boolean"
245
+ },
246
+ "page": {
247
+ "type": "boolean"
248
+ },
249
+ "page_nonprod": {
250
+ "type": "boolean"
251
+ },
252
+ "error_threshold_ratio": {
253
+ "type": "number",
254
+ "minimum": 0,
255
+ "maximum": 1
256
+ },
257
+ "minimum_error_rps": {
258
+ "type": "integer",
259
+ "minimum": 0
260
+ }
261
+ }
230
262
  }
231
263
  },
232
264
  "required": [
@@ -15,6 +15,7 @@ from paasta_tools.eks_tools import load_eks_service_config_no_cache
15
15
  from paasta_tools.kubernetes_tools import create_deployment
16
16
  from paasta_tools.kubernetes_tools import create_pod_disruption_budget
17
17
  from paasta_tools.kubernetes_tools import create_stateful_set
18
+ from paasta_tools.kubernetes_tools import ensure_service_account
18
19
  from paasta_tools.kubernetes_tools import KubeClient
19
20
  from paasta_tools.kubernetes_tools import KubeDeployment
20
21
  from paasta_tools.kubernetes_tools import KubernetesDeploymentConfig
@@ -120,6 +121,26 @@ class Application(ABC):
120
121
  """
121
122
  self.ensure_pod_disruption_budget(kube_client, self.soa_config.get_namespace())
122
123
 
124
+ def update_dependency_api_objects(self, kube_client: KubeClient) -> None:
125
+ """
126
+ Update related Kubernetes API objects that should be updated before the main object,
127
+ such as service accounts.
128
+ :param kube_client:
129
+ """
130
+ self.ensure_service_account(kube_client)
131
+
132
+ def ensure_service_account(self, kube_client: KubeClient) -> None:
133
+ """
134
+ Ensure that the service account for this application exists
135
+ :param kube_client:
136
+ """
137
+ if self.soa_config.get_iam_role():
138
+ ensure_service_account(
139
+ iam_role=self.soa_config.get_iam_role(),
140
+ namespace=self.soa_config.get_namespace(),
141
+ kube_client=kube_client,
142
+ )
143
+
123
144
  def delete_pod_disruption_budget(self, kube_client: KubeClient) -> None:
124
145
  try:
125
146
  kube_client.policy.delete_namespaced_pod_disruption_budget(
@@ -2220,9 +2220,9 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
2220
2220
  annotations["iam.amazonaws.com/role"] = ""
2221
2221
  iam_role = self.get_iam_role()
2222
2222
  if iam_role:
2223
- pod_spec_kwargs[
2224
- "service_account_name"
2225
- ] = create_or_find_service_account_name(iam_role, self.get_namespace())
2223
+ pod_spec_kwargs["service_account_name"] = get_service_account_name(
2224
+ iam_role
2225
+ )
2226
2226
  if fs_group is None:
2227
2227
  # We need some reasoable default for group id of a process
2228
2228
  # running inside the container. Seems like most of such
@@ -4050,12 +4050,9 @@ def get_all_limit_ranges(
4050
4050
  _RE_NORMALIZE_IAM_ROLE = re.compile(r"[^0-9a-zA-Z]+")
4051
4051
 
4052
4052
 
4053
- def create_or_find_service_account_name(
4053
+ def get_service_account_name(
4054
4054
  iam_role: str,
4055
- namespace: str,
4056
4055
  k8s_role: Optional[str] = None,
4057
- kubeconfig_file: Optional[str] = None,
4058
- dry_run: bool = False,
4059
4056
  ) -> str:
4060
4057
  # the service account is expected to always be prefixed with paasta- as using the actual namespace
4061
4058
  # potentially wastes a lot of characters (e.g., paasta-nrtsearchservices) that could be used for
@@ -4081,12 +4078,17 @@ def create_or_find_service_account_name(
4081
4078
  "Expected at least one of iam_role or k8s_role to be passed in!"
4082
4079
  )
4083
4080
 
4084
- # if someone is dry-running paasta_setup_tron_namespace or some other tool that
4085
- # calls this function, we probably don't want to mutate k8s state :)
4086
- if dry_run:
4087
- return sa_name
4081
+ return sa_name
4082
+
4083
+
4084
+ def ensure_service_account(
4085
+ iam_role: str,
4086
+ namespace: str,
4087
+ kube_client: KubeClient,
4088
+ k8s_role: Optional[str] = None,
4089
+ ) -> None:
4090
+ sa_name = get_service_account_name(iam_role, k8s_role)
4088
4091
 
4089
- kube_client = KubeClient(config_file=kubeconfig_file)
4090
4092
  if not any(
4091
4093
  sa.metadata and sa.metadata.name == sa_name
4092
4094
  for sa in get_all_service_accounts(kube_client, namespace)
@@ -4135,8 +4137,6 @@ def create_or_find_service_account_name(
4135
4137
  namespace=namespace, body=role_binding
4136
4138
  )
4137
4139
 
4138
- return sa_name
4139
-
4140
4140
 
4141
4141
  def mode_to_int(mode: Optional[Union[str, int]]) -> Optional[int]:
4142
4142
  if mode is not None:
@@ -281,6 +281,7 @@ def setup_kube_deployments(
281
281
  "paasta_namespace": app.kube_deployment.namespace,
282
282
  }
283
283
  try:
284
+ app.update_dependency_api_objects(kube_client)
284
285
  if (
285
286
  app.kube_deployment.service,
286
287
  app.kube_deployment.instance,
@@ -26,8 +26,13 @@ import sys
26
26
 
27
27
  import ruamel.yaml as yaml
28
28
 
29
+ from paasta_tools import spark_tools
29
30
  from paasta_tools import tron_tools
31
+ from paasta_tools.kubernetes_tools import ensure_service_account
32
+ from paasta_tools.kubernetes_tools import KubeClient
33
+ from paasta_tools.tron_tools import KUBERNETES_NAMESPACE
30
34
  from paasta_tools.tron_tools import MASTER_NAMESPACE
35
+ from paasta_tools.utils import load_system_paasta_config
31
36
 
32
37
  log = logging.getLogger(__name__)
33
38
 
@@ -63,6 +68,37 @@ def parse_args():
63
68
  return args
64
69
 
65
70
 
71
+ def ensure_service_accounts(raw_config: str) -> None:
72
+ # NOTE: these are lru_cache'd so it should be fine to call these for every service
73
+ system_paasta_config = load_system_paasta_config()
74
+ kube_client = KubeClient()
75
+ # this is kinda silly, but the tron create_config functions return strings
76
+ # we should refactor to pass the dicts around until the we're going to send the config to tron
77
+ # (where we can finally convert it to a string)
78
+ config = yaml.safe_load(raw_config)
79
+ for _, job in config.get("jobs", {}).items():
80
+ for _, action in job.get("actions", {}).items():
81
+ if action.get("service_account_name") is not None:
82
+ ensure_service_account(
83
+ action["service_account_name"],
84
+ namespace=KUBERNETES_NAMESPACE,
85
+ kube_client=kube_client,
86
+ )
87
+ # spark executors are special in that we want the SA to exist in two namespaces:
88
+ # the tron namespace - for the spark driver
89
+ # and the spark namespace - for the spark executor
90
+ if action.get("executor") == "spark":
91
+ # this kubeclient creation is lru_cache'd so it should be fine to call this for every spark action
92
+ spark_kube_client = KubeClient(
93
+ config_file=system_paasta_config.get_spark_kubeconfig()
94
+ )
95
+ ensure_service_account(
96
+ action["service_account_name"],
97
+ namespace=spark_tools.SPARK_EXECUTOR_NAMESPACE,
98
+ kube_client=spark_kube_client,
99
+ )
100
+
101
+
66
102
  def main():
67
103
  args = parse_args()
68
104
  log_level = logging.DEBUG if args.verbose else logging.INFO
@@ -133,6 +169,10 @@ def main():
133
169
  log.info(f"{new_config}")
134
170
  updated.append(service)
135
171
  else:
172
+ # PaaSTA will not necessarily have created the SAs we want to use
173
+ # ...so let's go ahead and create them!
174
+ ensure_service_accounts(new_config)
175
+
136
176
  if client.update_namespace(service, new_config):
137
177
  updated.append(service)
138
178
  log.debug(f"Updated {service}")
@@ -6,6 +6,7 @@ from typing import Any
6
6
  from typing import cast
7
7
  from typing import Dict
8
8
  from typing import List
9
+ from typing import Literal
9
10
  from typing import Mapping
10
11
  from typing import Set
11
12
 
@@ -23,6 +24,7 @@ SPARK_DRIVER_POOL = "stable"
23
24
  SPARK_JOB_USER = "TRON"
24
25
  SPARK_PROMETHEUS_SHARD = "ml-compute"
25
26
  SPARK_DNS_POD_TEMPLATE = "/nail/srv/configs/spark_dns_pod_template.yaml"
27
+ MEM_MULTIPLIER = {"k": 1024, "m": 1024**2, "g": 1024**3, "t": 1024**4}
26
28
 
27
29
  log = logging.getLogger(__name__)
28
30
 
@@ -247,3 +249,22 @@ def get_spark_driver_monitoring_labels(
247
249
  "spark.yelp.com/driver_ui_port": ui_port_str,
248
250
  }
249
251
  return labels
252
+
253
+
254
+ def get_spark_memory_in_unit(mem: str, unit: Literal["k", "m", "g", "t"]) -> float:
255
+ """
256
+ Converts Spark memory to the desired unit.
257
+ mem is the same format as JVM memory strings: just number or number followed by 'k', 'm', 'g' or 't'.
258
+ unit can be 'k', 'm', 'g' or 't'.
259
+ Returns memory as a float converted to the desired unit.
260
+ """
261
+ try:
262
+ memory_bytes = float(mem)
263
+ except ValueError:
264
+ try:
265
+ memory_bytes = float(mem[:-1]) * MEM_MULTIPLIER[mem[-1]]
266
+ except (ValueError, IndexError):
267
+ print(f"Unable to parse memory value {mem}. Defaulting to 2 GB.")
268
+ memory_bytes = 2147483648 # default to 2 GB
269
+ memory_unit = memory_bytes / MEM_MULTIPLIER[unit]
270
+ return memory_unit
@@ -62,7 +62,7 @@ from paasta_tools import spark_tools
62
62
 
63
63
  from paasta_tools.kubernetes_tools import (
64
64
  allowlist_denylist_to_requirements,
65
- create_or_find_service_account_name,
65
+ get_service_account_name,
66
66
  limit_size_with_hash,
67
67
  raw_selectors_to_requirements,
68
68
  to_node_label,
@@ -280,9 +280,40 @@ class TronActionConfig(InstanceConfig):
280
280
  soa_dir=soa_dir,
281
281
  )
282
282
  self.job, self.action = decompose_instance(instance)
283
+
283
284
  # Indicate whether this config object is created for validation
284
285
  self.for_validation = for_validation
285
286
 
287
+ self.action_spark_config = None
288
+ if self.get_executor() == "spark":
289
+ # build the complete Spark configuration
290
+ # TODO: add conditional check for Spark specific commands spark-submit, pyspark etc ?
291
+ self.action_spark_config = self.build_spark_config()
292
+
293
+ def get_cpus(self) -> float:
294
+ # set Spark driver pod CPU if it is specified by Spark arguments
295
+ if (
296
+ self.action_spark_config
297
+ and "spark.driver.cores" in self.action_spark_config
298
+ ):
299
+ return float(self.action_spark_config["spark.driver.cores"])
300
+ # we fall back to this default if there's no spark.driver.cores config
301
+ return super().get_cpus()
302
+
303
+ def get_mem(self) -> float:
304
+ # set Spark driver pod memory if it is specified by Spark arguments
305
+ if (
306
+ self.action_spark_config
307
+ and "spark.driver.memory" in self.action_spark_config
308
+ ):
309
+ return int(
310
+ spark_tools.get_spark_memory_in_unit(
311
+ self.action_spark_config["spark.driver.memory"], "m"
312
+ )
313
+ )
314
+ # we fall back to this default if there's no spark.driver.memory config
315
+ return super().get_mem()
316
+
286
317
  def build_spark_config(self) -> Dict[str, str]:
287
318
  system_paasta_config = load_system_paasta_config()
288
319
  resolved_cluster = system_paasta_config.get_eks_cluster_aliases().get(
@@ -354,15 +385,11 @@ class TronActionConfig(InstanceConfig):
354
385
  "spark.kubernetes.executor.label.yelp.com/owner", self.get_team()
355
386
  )
356
387
 
357
- # We need to make sure the Service Account used by the executors has been created.
358
388
  # We are using the Service Account created using the provided or default IAM role.
359
389
  spark_conf[
360
390
  "spark.kubernetes.authenticate.executor.serviceAccountName"
361
- ] = create_or_find_service_account_name(
391
+ ] = get_service_account_name(
362
392
  iam_role=self.get_spark_executor_iam_role(),
363
- namespace=spark_tools.SPARK_EXECUTOR_NAMESPACE,
364
- kubeconfig_file=system_paasta_config.get_spark_kubeconfig(),
365
- dry_run=self.for_validation,
366
393
  )
367
394
 
368
395
  return spark_conf
@@ -440,7 +467,6 @@ class TronActionConfig(InstanceConfig):
440
467
  system_paasta_config: Optional["SystemPaastaConfig"] = None,
441
468
  ) -> Dict[str, str]:
442
469
  env = super().get_env(system_paasta_config=system_paasta_config)
443
-
444
470
  if self.get_executor() == "spark":
445
471
  # Required by some sdks like boto3 client. Throws NoRegionError otherwise.
446
472
  # AWS_REGION takes precedence if set.
@@ -605,6 +631,20 @@ class TronActionConfig(InstanceConfig):
605
631
  error_msgs.append(
606
632
  f"{self.get_job_name()}.{self.get_action_name()} must have a deploy_group set"
607
633
  )
634
+ # We are not allowing users to specify `cpus` and `mem` configuration if the action is a Spark job
635
+ # with driver running on k8s (executor: spark), because we derive these values from `spark.driver.cores`
636
+ # and `spark.driver.memory` in order to avoid confusion.
637
+ if self.get_executor() == "spark":
638
+ if "cpus" in self.config_dict:
639
+ error_msgs.append(
640
+ f"{self.get_job_name()}.{self.get_action_name()} is a Spark job. `cpus` config is not allowed. "
641
+ f"Please specify the driver cores using `spark.driver.cores`."
642
+ )
643
+ if "mem" in self.config_dict:
644
+ error_msgs.append(
645
+ f"{self.get_job_name()}.{self.get_action_name()} is a Spark job. `mem` config is not allowed. "
646
+ f"Please specify the driver memory using `spark.driver.memory`."
647
+ )
608
648
  return error_msgs
609
649
 
610
650
  def get_pool(self) -> str:
@@ -952,20 +992,14 @@ def format_tron_action_dict(action_config: TronActionConfig):
952
992
 
953
993
  result["labels"]["yelp.com/owner"] = "compute_infra_platform_experience"
954
994
 
955
- # create_or_find_service_account_name requires k8s credentials, and we don't
956
- # have those available for CI to use (nor do we check these for normal PaaSTA
957
- # services, so we're not doing anything "new" by skipping this)
958
995
  if (
959
996
  action_config.get_iam_role_provider() == "aws"
960
997
  and action_config.get_iam_role()
961
- and not action_config.for_validation
962
998
  ):
963
999
  # this service account will be used for normal Tron batches as well as for Spark drivers
964
- result["service_account_name"] = create_or_find_service_account_name(
1000
+ result["service_account_name"] = get_service_account_name(
965
1001
  iam_role=action_config.get_iam_role(),
966
- namespace=EXECUTOR_TYPE_TO_NAMESPACE[executor],
967
1002
  k8s_role=None,
968
- dry_run=action_config.for_validation,
969
1003
  )
970
1004
 
971
1005
  # service account token volumes for service authentication
@@ -975,21 +1009,26 @@ def format_tron_action_dict(action_config: TronActionConfig):
975
1009
  if executor == "spark":
976
1010
  is_mrjob = action_config.config_dict.get("mrjob", False)
977
1011
  system_paasta_config = load_system_paasta_config()
978
- # inject spark configs to the original spark-submit command
979
- spark_config = action_config.build_spark_config()
1012
+ # inject additional Spark configs in case of Spark commands
980
1013
  result["command"] = spark_tools.build_spark_command(
981
1014
  result["command"],
982
- spark_config,
1015
+ action_config.action_spark_config,
983
1016
  is_mrjob,
984
1017
  action_config.config_dict.get(
985
1018
  "max_runtime", spark_tools.DEFAULT_SPARK_RUNTIME_TIMEOUT
986
1019
  ),
987
1020
  )
1021
+ # point to the KUBECONFIG needed by Spark driver
988
1022
  result["env"]["KUBECONFIG"] = system_paasta_config.get_spark_kubeconfig()
1023
+
989
1024
  # spark, unlike normal batches, needs to expose several ports for things like the spark
990
1025
  # ui and for executor->driver communication
991
1026
  result["ports"] = list(
992
- set(spark_tools.get_spark_ports_from_config(spark_config))
1027
+ set(
1028
+ spark_tools.get_spark_ports_from_config(
1029
+ action_config.action_spark_config
1030
+ )
1031
+ )
993
1032
  )
994
1033
  # mount KUBECONFIG file for Spark drivers to communicate with EKS cluster
995
1034
  extra_volumes.append(
@@ -1003,10 +1042,12 @@ def format_tron_action_dict(action_config: TronActionConfig):
1003
1042
  )
1004
1043
  # Add pod annotations and labels for Spark monitoring metrics
1005
1044
  monitoring_annotations = (
1006
- spark_tools.get_spark_driver_monitoring_annotations(spark_config)
1045
+ spark_tools.get_spark_driver_monitoring_annotations(
1046
+ action_config.action_spark_config
1047
+ )
1007
1048
  )
1008
1049
  monitoring_labels = spark_tools.get_spark_driver_monitoring_labels(
1009
- spark_config
1050
+ action_config.action_spark_config
1010
1051
  )
1011
1052
  result["annotations"].update(monitoring_annotations)
1012
1053
  result["labels"].update(monitoring_labels)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: paasta-tools
3
- Version: 1.4.8
3
+ Version: 1.4.10
4
4
  Summary: Tools for Yelps SOA infrastructure
5
5
  Home-page: UNKNOWN
6
6
  Author: Compute Infrastructure @ Yelp
File without changes
File without changes