paasta-tools 1.30.7__tar.gz → 1.35.4__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 (358) hide show
  1. {paasta_tools-1.30.7/paasta_tools.egg-info → paasta_tools-1.35.4}/PKG-INFO +3 -3
  2. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/__init__.py +1 -1
  3. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/api_docs/swagger.json +5 -0
  4. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/views/instance.py +9 -2
  5. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/async_utils.py +4 -1
  6. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/bounce_lib.py +8 -5
  7. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/check_services_replication_tools.py +10 -4
  8. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/check_spark_jobs.py +1 -1
  9. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cli.py +4 -4
  10. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/local_run.py +111 -23
  11. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/logs.py +29 -7
  12. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/mark_for_deployment.py +11 -3
  13. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/mesh_status.py +1 -1
  14. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/remote_run.py +10 -1
  15. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/rollback.py +1 -1
  16. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/secret.py +2 -2
  17. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/spark_run.py +5 -3
  18. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/status.py +53 -27
  19. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/validate.py +225 -4
  20. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/schemas/autoscaling_schema.json +3 -2
  21. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/schemas/eks_schema.json +23 -1
  22. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/schemas/smartstack_schema.json +12 -0
  23. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/utils.py +32 -19
  24. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/check_orphans.py +1 -1
  25. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/get_running_task_allocation.py +1 -1
  26. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/instance/hpa_metrics_parser.py +3 -5
  27. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/instance/kubernetes.py +60 -26
  28. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/kubernetes/application/controller_wrappers.py +23 -2
  29. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/kubernetes/remote_run.py +2 -2
  30. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/kubernetes_tools.py +42 -67
  31. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/long_running_service_tools.py +8 -1
  32. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/metrics/metastatus_lib.py +0 -24
  33. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/metrics/metrics_lib.py +12 -3
  34. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/kubernetes_version.py +3 -0
  35. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/setup_kubernetes_job.py +43 -1
  36. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/setup_prometheus_adapter_config.py +82 -0
  37. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/setup_tron_namespace.py +2 -2
  38. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/tron_tools.py +4 -1
  39. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/utils.py +27 -9
  40. {paasta_tools-1.30.7 → paasta_tools-1.35.4/paasta_tools.egg-info}/PKG-INFO +3 -3
  41. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools.egg-info/SOURCES.txt +0 -5
  42. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools.egg-info/requires.txt +1 -1
  43. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/requirements-minimal.txt +2 -1
  44. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/setup.py +1 -1
  45. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_kubernetes_tools.py +546 -28
  46. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_setup_kubernetes_job.py +106 -0
  47. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_setup_prometheus_adapter_config.py +65 -0
  48. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_tron_tools.py +1 -0
  49. paasta_tools-1.30.7/paasta_tools/frameworks/adhoc_scheduler.py +0 -71
  50. paasta_tools-1.30.7/paasta_tools/frameworks/native_scheduler.py +0 -652
  51. paasta_tools-1.30.7/paasta_tools/frameworks/task_store.py +0 -245
  52. paasta_tools-1.30.7/paasta_tools/mesos_maintenance.py +0 -848
  53. paasta_tools-1.30.7/paasta_tools/paasta_native_serviceinit.py +0 -21
  54. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/LICENSE +0 -0
  55. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/MANIFEST.in +0 -0
  56. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/README.md +0 -0
  57. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/k8s_itests/__init__.py +0 -0
  58. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/k8s_itests/test_autoscaling.py +0 -0
  59. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/k8s_itests/utils.py +0 -0
  60. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/adhoc_tools.py +0 -0
  61. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/__init__.py +0 -0
  62. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/api.py +0 -0
  63. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/client.py +0 -0
  64. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/settings.py +0 -0
  65. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/tweens/__init__.py +0 -0
  66. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/tweens/auth.py +0 -0
  67. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/tweens/profiling.py +0 -0
  68. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/tweens/request_logger.py +0 -0
  69. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/views/__init__.py +0 -0
  70. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/views/autoscaler.py +0 -0
  71. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/views/exception.py +0 -0
  72. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/views/flink.py +0 -0
  73. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/views/pause_autoscaler.py +0 -0
  74. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/views/remote_run.py +0 -0
  75. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/views/resources.py +0 -0
  76. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/views/service.py +0 -0
  77. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/api/views/version.py +0 -0
  78. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/apply_external_resources.py +0 -0
  79. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/autoscaling/__init__.py +0 -0
  80. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
  81. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/autoscaling/forecasting.py +0 -0
  82. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
  83. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
  84. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/autoscaling/utils.py +0 -0
  85. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/broadcast_log_to_services.py +0 -0
  86. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cassandracluster_tools.py +0 -0
  87. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/check_autoscaler_max_instances.py +0 -0
  88. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
  89. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/check_flink_services_health.py +0 -0
  90. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/check_kubernetes_api.py +0 -0
  91. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/check_kubernetes_services_replication.py +0 -0
  92. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/check_oom_events.py +0 -0
  93. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cleanup_expired_autoscaling_overrides.py +0 -0
  94. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
  95. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
  96. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
  97. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cleanup_tron_namespaces.py +0 -0
  98. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/__init__.py +0 -0
  99. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/authentication.py +0 -0
  100. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/__init__.py +0 -0
  101. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/autoscale.py +0 -0
  102. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/check.py +0 -0
  103. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/cook_image.py +0 -0
  104. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
  105. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/get_image_version.py +0 -0
  106. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
  107. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/info.py +0 -0
  108. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/itest.py +0 -0
  109. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/list.py +0 -0
  110. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/list_clusters.py +0 -0
  111. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
  112. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/list_namespaces.py +0 -0
  113. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
  114. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
  115. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/security_check.py +0 -0
  116. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
  117. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
  118. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/fsm/__init__.py +0 -0
  119. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/fsm/autosuggest.py +0 -0
  120. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/fsm/template/README.md +0 -0
  121. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
  122. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
  123. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
  124. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
  125. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
  126. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/fsm_cmd.py +0 -0
  127. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
  128. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
  129. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
  130. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
  131. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
  132. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/schemas/kubernetes_schema.json +0 -0
  133. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
  134. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/schemas/service_schema.json +0 -0
  135. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/cli/schemas/tron_schema.json +0 -0
  136. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/clusterman.py +0 -0
  137. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/config_utils.py +0 -0
  138. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/__init__.py +0 -0
  139. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
  140. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
  141. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
  142. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/create_paasta_playground.py +0 -0
  143. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
  144. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/habitat_fixer.py +0 -0
  145. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/ide_helper.py +0 -0
  146. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
  147. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
  148. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/kill_bad_containers.py +0 -0
  149. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
  150. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/mock_patch_checker.py +0 -0
  151. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
  152. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/render_template.py +0 -0
  153. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
  154. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/service_shard_remove.py +0 -0
  155. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/service_shard_update.py +0 -0
  156. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/shared_ip_check.py +0 -0
  157. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
  158. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/delete_kubernetes_deployments.py +0 -0
  159. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/deployment_utils.py +0 -0
  160. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/docker_wrapper.py +0 -0
  161. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/docker_wrapper_imports.py +0 -0
  162. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/drain_lib.py +0 -0
  163. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/dump_locally_running_services.py +0 -0
  164. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/eks_tools.py +0 -0
  165. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/envoy_tools.py +0 -0
  166. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/firewall.py +0 -0
  167. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/firewall_logging.py +0 -0
  168. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/firewall_update.py +0 -0
  169. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/flink_tools.py +0 -0
  170. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/flinkeks_tools.py +0 -0
  171. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/frameworks/__init__.py +0 -0
  172. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/frameworks/constraints.py +0 -0
  173. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/frameworks/native_service_config.py +0 -0
  174. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/generate_all_deployments +0 -0
  175. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/generate_authenticating_services.py +0 -0
  176. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/generate_deployments_for_service.py +0 -0
  177. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/generate_services_file.py +0 -0
  178. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/generate_services_yaml.py +0 -0
  179. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/hacheck.py +0 -0
  180. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/instance/__init__.py +0 -0
  181. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/iptables.py +0 -0
  182. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/kafkacluster_tools.py +0 -0
  183. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/kubernetes/__init__.py +0 -0
  184. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/kubernetes/application/__init__.py +0 -0
  185. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/kubernetes/application/tools.py +0 -0
  186. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/kubernetes/bin/__init__.py +0 -0
  187. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
  188. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/kubernetes/bin/paasta_cleanup_remote_run_resources.py +0 -0
  189. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
  190. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
  191. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/list_kubernetes_service_instances.py +0 -0
  192. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/list_tron_namespaces.py +0 -0
  193. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/mac_address.py +0 -0
  194. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/marathon_dashboard.py +0 -0
  195. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/mesos/__init__.py +0 -0
  196. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/mesos/cfg.py +0 -0
  197. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/mesos/cluster.py +0 -0
  198. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/mesos/exceptions.py +0 -0
  199. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/mesos/framework.py +0 -0
  200. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/mesos/log.py +0 -0
  201. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/mesos/master.py +0 -0
  202. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/mesos/mesos_file.py +0 -0
  203. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/mesos/parallel.py +0 -0
  204. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/mesos/slave.py +0 -0
  205. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/mesos/task.py +0 -0
  206. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/mesos/util.py +0 -0
  207. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/mesos/zookeeper.py +0 -0
  208. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/mesos_tools.py +0 -0
  209. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/metrics/__init__.py +0 -0
  210. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/monitoring/__init__.py +0 -0
  211. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
  212. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/monitoring_tools.py +0 -0
  213. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/monkrelaycluster_tools.py +0 -0
  214. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/nrtsearchservice_tools.py +0 -0
  215. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
  216. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/oom_logger.py +0 -0
  217. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paasta_deploy_tron_jobs +0 -0
  218. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paasta_execute_docker_command.py +0 -0
  219. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paasta_service_config_loader.py +0 -0
  220. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/__init__.py +0 -0
  221. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/api/__init__.py +0 -0
  222. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/api/autoscaler_api.py +0 -0
  223. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/api/default_api.py +0 -0
  224. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/api/remote_run_api.py +0 -0
  225. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/api/resources_api.py +0 -0
  226. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/api/service_api.py +0 -0
  227. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/api_client.py +0 -0
  228. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/apis/__init__.py +0 -0
  229. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/configuration.py +0 -0
  230. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/exceptions.py +0 -0
  231. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/__init__.py +0 -0
  232. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/adhoc_launch_history.py +0 -0
  233. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +0 -0
  234. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/autoscaling_override.py +0 -0
  235. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/deploy_queue.py +0 -0
  236. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +0 -0
  237. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/envoy_backend.py +0 -0
  238. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/envoy_location.py +0 -0
  239. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/envoy_status.py +0 -0
  240. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/flink_cluster_overview.py +0 -0
  241. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/flink_config.py +0 -0
  242. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/flink_job.py +0 -0
  243. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/flink_job_details.py +0 -0
  244. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/flink_jobs.py +0 -0
  245. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/float_and_error.py +0 -0
  246. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/hpa_metric.py +0 -0
  247. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/inline_object.py +0 -0
  248. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/inline_response200.py +0 -0
  249. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/inline_response2001.py +0 -0
  250. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/inline_response202.py +0 -0
  251. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/inline_response403.py +0 -0
  252. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/instance_bounce_status.py +0 -0
  253. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/instance_mesh_status.py +0 -0
  254. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/instance_status.py +0 -0
  255. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/instance_status_adhoc.py +0 -0
  256. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +0 -0
  257. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/instance_status_flink.py +0 -0
  258. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +0 -0
  259. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +0 -0
  260. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +0 -0
  261. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +0 -0
  262. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/instance_status_tron.py +0 -0
  263. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/instance_tasks.py +0 -0
  264. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/integer_and_error.py +0 -0
  265. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/kubernetes_container.py +0 -0
  266. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +0 -0
  267. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +0 -0
  268. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/kubernetes_pod.py +0 -0
  269. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +0 -0
  270. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +0 -0
  271. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +0 -0
  272. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/remote_run_outcome.py +0 -0
  273. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/remote_run_start.py +0 -0
  274. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/remote_run_stop.py +0 -0
  275. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/remote_run_token.py +0 -0
  276. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/resource.py +0 -0
  277. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/resource_item.py +0 -0
  278. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/resource_value.py +0 -0
  279. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/smartstack_backend.py +0 -0
  280. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/smartstack_location.py +0 -0
  281. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/smartstack_status.py +0 -0
  282. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model/task_tail_lines.py +0 -0
  283. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/model_utils.py +0 -0
  284. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/models/__init__.py +0 -0
  285. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/paastaapi/rest.py +0 -0
  286. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/prune_completed_pods.py +0 -0
  287. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/puppet_service_tools.py +0 -0
  288. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/py.typed +0 -0
  289. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/remote_git.py +0 -0
  290. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
  291. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/run-paasta-api-playground.py +0 -0
  292. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/secret_providers/__init__.py +0 -0
  293. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/secret_providers/vault.py +0 -0
  294. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/secret_tools.py +0 -0
  295. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/setup_istio_mesh.py +0 -0
  296. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/setup_kubernetes_cr.py +0 -0
  297. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/setup_kubernetes_crd.py +0 -0
  298. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
  299. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/slack.py +0 -0
  300. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/smartstack_tools.py +0 -0
  301. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/spark_tools.py +0 -0
  302. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
  303. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/tron/__init__.py +0 -0
  304. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/tron/client.py +0 -0
  305. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/tron/tron_command_context.py +0 -0
  306. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/tron/tron_timeutils.py +0 -0
  307. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools/yaml_tools.py +0 -0
  308. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools.egg-info/dependency_links.txt +0 -0
  309. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools.egg-info/entry_points.txt +0 -0
  310. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/paasta_tools.egg-info/top_level.txt +0 -0
  311. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/pyproject.toml +0 -0
  312. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/setup.cfg +0 -0
  313. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_adhoc_tools.py +0 -0
  314. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_apply_external_resources.py +0 -0
  315. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_async_utils.py +0 -0
  316. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_bounce_lib.py +0 -0
  317. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_check_flink_services_health.py +0 -0
  318. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_check_kubernetes_services_replication.py +0 -0
  319. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_check_oom_events.py +0 -0
  320. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_check_service_replication_tools.py +0 -0
  321. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_check_spark_jobs.py +0 -0
  322. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_cleanup_kubernetes_jobs.py +0 -0
  323. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_config_utils.py +0 -0
  324. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_delete_kubernetes_deployments.py +0 -0
  325. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_deployment_utils.py +0 -0
  326. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_docker_wrapper.py +0 -0
  327. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_drain_lib.py +0 -0
  328. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_eks_tools.py +0 -0
  329. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_envoy_tools.py +0 -0
  330. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_firewall.py +0 -0
  331. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_firewall_logging.py +0 -0
  332. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_firewall_update.py +0 -0
  333. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_flink_tools.py +0 -0
  334. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_flinkeks_tools.py +0 -0
  335. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_generate_authenticating_services.py +0 -0
  336. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_generate_deployments_for_service.py +0 -0
  337. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_generate_services_file.py +0 -0
  338. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_generate_services_yaml.py +0 -0
  339. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_hacheck.py +0 -0
  340. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_iptables.py +0 -0
  341. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_list_kubernetes_service_instances.py +0 -0
  342. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_long_running_service_tools.py +0 -0
  343. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_mac_address.py +0 -0
  344. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_mesos_tools.py +0 -0
  345. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_monitoring_tools.py +0 -0
  346. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_nrtsearchserviceseks_tools.py +0 -0
  347. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_oom_logger.py +0 -0
  348. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_paasta_execute_docker_command.py +0 -0
  349. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_paasta_service_config_loader.py +0 -0
  350. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_puppet_service_tools.py +0 -0
  351. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_remote_git.py +0 -0
  352. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_secret_tools.py +0 -0
  353. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_setup_istio_mesh.py +0 -0
  354. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_setup_kubernetes_cr.py +0 -0
  355. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_slack.py +0 -0
  356. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_smartstack_tools.py +0 -0
  357. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_spark_tools.py +0 -0
  358. {paasta_tools-1.30.7 → paasta_tools-1.35.4}/tests/test_utils.py +0 -0
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: paasta-tools
3
- Version: 1.30.7
3
+ Version: 1.35.4
4
4
  Summary: Tools for Yelps SOA infrastructure
5
5
  Author: Compute Infrastructure @ Yelp
6
6
  Author-email: compute-infra@yelp.com
7
7
  Provides: paasta_tools
8
- Requires-Python: >=3.8.0
8
+ Requires-Python: >=3.9.0
9
9
  License-File: LICENSE
10
10
  Requires-Dist: a-sync>=0.5.0
11
11
  Requires-Dist: aiohttp>=3.5.4
@@ -34,7 +34,7 @@ Requires-Dist: ipaddress>=1.0.22
34
34
  Requires-Dist: isodate>=0.7.2
35
35
  Requires-Dist: jsonschema[format]
36
36
  Requires-Dist: kazoo>=2.0.0
37
- Requires-Dist: kubernetes<26.0.0,>=18.20.0
37
+ Requires-Dist: kubernetes<35.0.0,>=29.0.0
38
38
  Requires-Dist: ldap3
39
39
  Requires-Dist: manhole
40
40
  Requires-Dist: mypy-extensions>=0.3.0
@@ -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.30.7"
20
+ __version__ = "1.35.4"
@@ -1788,6 +1788,11 @@
1788
1788
  "KubernetesVersion": {
1789
1789
  "type": "object",
1790
1790
  "properties": {
1791
+ "container_port": {
1792
+ "description": "Port the container is expecting to receive traffic on",
1793
+ "type": "integer",
1794
+ "format": "int32"
1795
+ },
1791
1796
  "type": {
1792
1797
  "description": "Type of version (ReplicaSet or ControllerRevision)",
1793
1798
  "type": "string"
@@ -26,6 +26,7 @@ from typing import Mapping
26
26
  from typing import Optional
27
27
 
28
28
  import a_sync
29
+ from pyramid.request import Request
29
30
  from pyramid.response import Response
30
31
  from pyramid.view import view_config
31
32
 
@@ -139,7 +140,10 @@ def no_configuration_for_service_message(cluster, service, instance):
139
140
  @view_config(
140
141
  route_name="service.instance.status", request_method="GET", renderer="json"
141
142
  )
142
- def instance_status(request):
143
+ def instance_status(
144
+ request: Request,
145
+ ) -> dict[str, Any]: # godspeed to anyone typing the retval here
146
+ # NOTE: swagger_data is populated by pyramid_swagger
143
147
  service = request.swagger_data.get("service")
144
148
  instance = request.swagger_data.get("instance")
145
149
  verbose = request.swagger_data.get("verbose") or 0
@@ -353,7 +357,10 @@ def get_deployment_version(
353
357
  request_method="GET",
354
358
  renderer="json",
355
359
  )
356
- def instance_mesh_status(request):
360
+ def instance_mesh_status(
361
+ request: Request,
362
+ ) -> dict[str, Any]: # godspeed to anyone typing the retval here
363
+ # NOTE: swagger_data is populated by pyramid_swagger
357
364
  service = request.swagger_data.get("service")
358
365
  instance = request.swagger_data.get("instance")
359
366
  include_envoy = request.swagger_data.get("include_envoy")
@@ -3,9 +3,11 @@ import functools
3
3
  import time
4
4
  import weakref
5
5
  from collections import defaultdict
6
+ from typing import Any
6
7
  from typing import AsyncIterable
7
8
  from typing import Awaitable
8
9
  from typing import Callable
10
+ from typing import Coroutine
9
11
  from typing import Dict
10
12
  from typing import List
11
13
  from typing import Optional
@@ -97,7 +99,8 @@ async def aiter_to_list(
97
99
  def async_timeout(
98
100
  seconds: int = 10,
99
101
  ) -> Callable[
100
- [Callable[..., Awaitable[T]]], Callable[..., Awaitable[T]] # wrapped # inner
102
+ [Callable[..., Coroutine[Any, Any, T]]],
103
+ Callable[..., Coroutine[Any, Any, T]], # wrapped # inner
101
104
  ]:
102
105
  def outer(wrapped):
103
106
  @functools.wraps(wrapped)
@@ -42,11 +42,14 @@ BounceMethodResult = TypedDict(
42
42
 
43
43
  BounceMethod = Callable[
44
44
  [
45
- Arg(BounceMethodConfigDict, "new_config"),
46
- Arg(bool, "new_app_running"),
47
- Arg(Collection, "happy_new_tasks"),
48
- Arg(Sequence, "old_non_draining_tasks"),
49
- DefaultArg(float, "margin_factor"),
45
+ Arg(
46
+ BounceMethodConfigDict,
47
+ "new_config", # noqa: F821 # flake8 false-positive, these are not var references
48
+ ),
49
+ Arg(bool, "new_app_running"), # noqa: F821 # flake8 false-positive
50
+ Arg(Collection, "happy_new_tasks"), # noqa: F821 # flake8 false-positive
51
+ Arg(Sequence, "old_non_draining_tasks"), # noqa: F821 # flake8 false-positive
52
+ DefaultArg(float, "margin_factor"), # noqa: F821 # flake8 false-positive
50
53
  ],
51
54
  BounceMethodResult,
52
55
  ]
@@ -56,10 +56,16 @@ log = logging.getLogger(__name__)
56
56
 
57
57
  CheckServiceReplication = Callable[
58
58
  [
59
- Arg(InstanceConfig_T, "instance_config"),
60
- Arg(Dict[str, Dict[str, List[V1Pod]]], "pods_by_service_instance"),
61
- Arg(Any, "replication_checker"),
62
- NamedArg(bool, "dry_run"),
59
+ Arg(
60
+ InstanceConfig_T,
61
+ "instance_config", # noqa: F821 # flake8 false-positive, these are not var references
62
+ ),
63
+ Arg(
64
+ Dict[str, Dict[str, List[V1Pod]]],
65
+ "pods_by_service_instance", # noqa: F821 # flake8 false-positive
66
+ ),
67
+ Arg(Any, "replication_checker"), # noqa: F821 # flake8 false-positive
68
+ NamedArg(bool, "dry_run"), # noqa: F821 # flake8 false-positive
63
69
  ],
64
70
  Optional[bool],
65
71
  ]
@@ -124,7 +124,7 @@ def format_framework(info):
124
124
  def format_message_for_service(service, frameworks):
125
125
  output = f"Found the following long-running Spark frameworks associated with service {service}.\n"
126
126
  output += (
127
- f"Please check why they are still running and terminate if appropriate.\n\n"
127
+ "Please check why they are still running and terminate if appropriate.\n\n"
128
128
  )
129
129
  output += "\n".join(format_framework(f) for f in frameworks)
130
130
  return output
@@ -68,7 +68,7 @@ class PrintsHelpOnErrorArgumentParser(argparse.ArgumentParser):
68
68
  def list_external_commands():
69
69
  p = subprocess.check_output(["/bin/bash", "-p", "-c", "compgen -A command paasta-"])
70
70
  lines = p.decode("utf-8").strip().split("\n")
71
- return {l.replace("paasta-", "", 1) for l in lines}
71
+ return {line.replace("paasta-", "", 1) for line in lines}
72
72
 
73
73
 
74
74
  def calling_external_command():
@@ -132,10 +132,10 @@ PAASTA_SUBCOMMANDS = {
132
132
  }
133
133
 
134
134
 
135
- def get_argparser(commands=None):
135
+ def get_argparser(commands: list[str] | None = None) -> argparse.ArgumentParser:
136
136
  """Create and return argument parser for a set of subcommands.
137
137
 
138
- :param commands: Union[None, List[str]] If `commands` argument is `None`,
138
+ :param commands: list[str] | None: If `commands` argument is `None`,
139
139
  add full parsers for all subcommands, if `commands` is empty list -
140
140
  add thin parsers for all subcommands, otherwise - add full parsers for
141
141
  subcommands in the argument.
@@ -170,7 +170,7 @@ def get_argparser(commands=None):
170
170
 
171
171
  # Adding a separate help subparser allows us to respond to "help" without --help
172
172
  help_parser = subparsers.add_parser(
173
- "help", help=f"run `paasta <subcommand> -h` for help"
173
+ "help", help="run `paasta <subcommand> -h` for help"
174
174
  )
175
175
  help_parser.set_defaults(command=None)
176
176
 
@@ -12,6 +12,7 @@
12
12
  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
13
  # See the License for the specific language governing permissions and
14
14
  # limitations under the License.
15
+ import base64
15
16
  import datetime
16
17
  import json
17
18
  import os
@@ -31,7 +32,9 @@ from urllib.parse import urlparse
31
32
  import boto3
32
33
  import requests
33
34
  from docker import errors
35
+ from docker.api.client import APIClient
34
36
  from mypy_extensions import TypedDict
37
+ from service_configuration_lib import read_service_configuration
35
38
 
36
39
  from paasta_tools.adhoc_tools import get_default_interactive_config
37
40
  from paasta_tools.cli.authentication import get_service_auth_token
@@ -612,26 +615,83 @@ class LostContainerException(Exception):
612
615
  pass
613
616
 
614
617
 
615
- def docker_pull_image(docker_url):
616
- """Pull an image via ``docker pull``. Uses the actual pull command instead of the python
617
- bindings due to the docker auth/registry transition. Once we are past Docker 1.6
618
- we can use better credential management, but for now this function assumes the
619
- user running the command has already been authorized for the registry"""
618
+ class DockerAuthConfig(TypedDict):
619
+ username: str
620
+ password: str
621
+
622
+
623
+ def get_readonly_docker_registry_auth_config(
624
+ docker_url: str,
625
+ ) -> DockerAuthConfig | None:
626
+ system_paasta_config = load_system_paasta_config()
627
+ config_path = system_paasta_config.get_readonly_docker_registry_auth_file()
628
+
629
+ try:
630
+ with open(config_path) as f:
631
+ docker_config = json.load(f)
632
+ except Exception:
633
+ print(
634
+ PaastaColors.yellow(
635
+ "Warning: unable to load read-only docker registry credentials."
636
+ ),
637
+ file=sys.stderr,
638
+ )
639
+ # the best we can do is try to pull with whatever auth the user has configured locally
640
+ # i.e., root-owned docker config in /root/.docker/config.json
641
+ return None
642
+ registry = docker_url.split("/")[0]
643
+
644
+ # find matching auth config - our usual ro config will have at least two entries
645
+ # at the time this comment was written
646
+ auths = docker_config
647
+ for auth_url, auth_data in auths.items():
648
+ if registry in auth_url:
649
+ # Decode the base64 auth string if present
650
+ if "auth" in auth_data:
651
+ auth_string = base64.b64decode(auth_data["auth"]).decode("utf-8")
652
+ username, password = auth_string.split(":", 1)
653
+ return {"username": username, "password": password}
654
+
655
+ # we'll hit this for registries like docker-dev or extra-private internal registries
656
+ return None
657
+
658
+
659
+ def docker_pull_image(docker_client: APIClient, docker_url: str) -> None:
660
+ """Pull an image using the docker-py library with read-only registry credentials"""
620
661
  print(
621
- "Please wait while the image (%s) is pulled (times out after 30m)..."
622
- % docker_url,
662
+ f"Please wait while the image ({docker_url}) is pulled (times out after 30m)...",
623
663
  file=sys.stderr,
624
664
  )
625
- with Timeout(
626
- seconds=1800, error_message=f"Timed out pulling docker image from {docker_url}"
627
- ), open(os.devnull, mode="wb") as DEVNULL:
628
- ret, _ = _run("docker pull %s" % docker_url, stream=True, stdin=DEVNULL)
629
- if ret != 0:
630
- print(
631
- "\nPull failed. Are you authorized to run docker commands?",
632
- file=sys.stderr,
633
- )
634
- sys.exit(ret)
665
+
666
+ auth_config = get_readonly_docker_registry_auth_config(docker_url)
667
+ if not auth_config:
668
+ print(
669
+ PaastaColors.yellow(
670
+ "Warning: No read-only docker registry credentials found, attempting to pull without them."
671
+ ),
672
+ file=sys.stderr,
673
+ )
674
+
675
+ try:
676
+ with Timeout(
677
+ seconds=1800,
678
+ error_message=f"Timed out pulling docker image from {docker_url}",
679
+ ):
680
+ # this is slightly funky since pull() returns the output line-by-line, but as a dict
681
+ # ...that we then need to format back to the usual `docker pull` output
682
+ # :p
683
+ for line in docker_client.pull(
684
+ docker_url, auth_config=auth_config, stream=True, decode=True
685
+ ):
686
+ # not all lines have an 'id' key :(
687
+ id_prefix = f"{line['id']}: " if "id" in line else ""
688
+ print(f"{id_prefix}{line['status']}", file=sys.stderr)
689
+ except Exception as e:
690
+ print(
691
+ f"\nPull failed. Error: {e}",
692
+ file=sys.stderr,
693
+ )
694
+ sys.exit(1)
635
695
 
636
696
 
637
697
  def get_container_id(docker_client, container_name):
@@ -1226,7 +1286,7 @@ def configure_and_run_docker_container(
1226
1286
  return 1
1227
1287
 
1228
1288
  if pull_image:
1229
- docker_pull_image(docker_url)
1289
+ docker_pull_image(docker_client, docker_url)
1230
1290
 
1231
1291
  for volume in instance_config.get_volumes(
1232
1292
  system_paasta_config.get_volumes(),
@@ -1302,10 +1362,40 @@ def docker_config_available():
1302
1362
  )
1303
1363
 
1304
1364
 
1365
+ def should_reexec_as_root(
1366
+ service: str, skip_secrets: bool, action: str, soa_dir: str = DEFAULT_SOA_DIR
1367
+ ) -> bool:
1368
+ # local-run can't pull secrets from Vault in prod without a root-owned token
1369
+ need_vault_token = not skip_secrets and action == "pull"
1370
+
1371
+ # there are some special teams with their own private docker registries and no ro creds
1372
+ # however, we don't know what registry is to be used without loading the service config
1373
+ service_info = read_service_configuration(service, soa_dir)
1374
+ # technically folks can set the standard registry as a value here, but atm no one is doing that :p
1375
+ registry_override = service_info.get("docker_registry")
1376
+ # note: we could also have a list of registries that have ro creds, but this seems fine for now
1377
+ uses_private_registry = (
1378
+ registry_override
1379
+ and registry_override
1380
+ in load_system_paasta_config().get_private_docker_registries()
1381
+ )
1382
+ need_docker_config = uses_private_registry and action == "pull"
1383
+
1384
+ return (need_vault_token or need_docker_config) and os.geteuid() != 0
1385
+
1386
+
1305
1387
  def paasta_local_run(args):
1306
- if args.action == "pull" and os.geteuid() != 0 and not docker_config_available():
1307
- print("Re-executing paasta local-run --pull with sudo..")
1308
- os.execvp("sudo", ["sudo", "-H"] + sys.argv)
1388
+ service = figure_out_service_name(args, soa_dir=args.yelpsoa_config_root)
1389
+ if should_reexec_as_root(
1390
+ service, args.skip_secrets, args.action, args.yelpsoa_config_root
1391
+ ):
1392
+ # XXX: we should re-architect this to not need sudo, but for now,
1393
+ # re-exec ourselves with sudo to get access to the paasta vault token
1394
+ # NOTE: once we do that, we can also remove the venv check above :)
1395
+ print(
1396
+ "Re-executing paasta local-run --pull with sudo for Vault/Docker registry access..."
1397
+ )
1398
+ os.execvp("sudo", ["sudo", "-H", "/usr/bin/paasta"] + sys.argv[1:])
1309
1399
  if args.action == "build" and not makefile_responds_to("cook-image"):
1310
1400
  print(
1311
1401
  "A local Makefile with a 'cook-image' target is required for --build",
@@ -1332,8 +1422,6 @@ def paasta_local_run(args):
1332
1422
 
1333
1423
  local_run_config = system_paasta_config.get_local_run_config()
1334
1424
 
1335
- service = figure_out_service_name(args, soa_dir=args.yelpsoa_config_root)
1336
-
1337
1425
  if args.cluster:
1338
1426
  cluster = args.cluster
1339
1427
  else:
@@ -30,6 +30,7 @@ from typing import Callable
30
30
  from typing import ContextManager
31
31
  from typing import Dict
32
32
  from typing import Iterable
33
+ from typing import Iterator
33
34
  from typing import List
34
35
  from typing import Mapping
35
36
  from typing import MutableSequence
@@ -52,10 +53,31 @@ try:
52
53
  except ImportError:
53
54
  scribereader = None
54
55
 
56
+ # NOTE: this is an internal-only package, so we won't be able to typecheck against it with mypy
57
+ # without these hacky inlined stubs
55
58
  try:
56
59
  from logreader.readers import S3LogsReader
60
+
61
+ s3reader_available = True
57
62
  except ImportError:
58
- S3LogsReader = None
63
+ s3reader_available = False
64
+
65
+ class S3LogsReader: # type: ignore[no-redef] # stub class for internal-only package
66
+ def __init__(self, superregion: str) -> None:
67
+ raise ImportError(
68
+ "logreader (internal Yelp package) is not available - unable to display logs."
69
+ )
70
+
71
+ def get_log_reader(
72
+ self,
73
+ log_name: str,
74
+ start_datetime: datetime.datetime,
75
+ end_datetime: datetime.datetime,
76
+ ) -> Iterator[str]:
77
+ raise NotImplementedError(
78
+ "logreader (internal Yelp package) is not available - unable to display logs."
79
+ )
80
+
59
81
 
60
82
  from pytimeparse.timeparse import timeparse
61
83
 
@@ -156,7 +178,7 @@ def add_subparser(subparsers) -> None:
156
178
  dest="soa_dir",
157
179
  metavar="SOA_DIR",
158
180
  default=DEFAULT_SOA_DIR,
159
- help=f"Define a different soa config directory. Defaults to %(default)s.",
181
+ help="Define a different soa config directory. Defaults to %(default)s.",
160
182
  )
161
183
 
162
184
  status_parser.add_argument(
@@ -1174,7 +1196,7 @@ class VectorLogsReader(LogReader):
1174
1196
  ) -> None:
1175
1197
  super().__init__()
1176
1198
 
1177
- if S3LogsReader is None:
1199
+ if not s3reader_available:
1178
1200
  raise Exception("yelp_clog package must be available to use S3LogsReader")
1179
1201
 
1180
1202
  self.cluster_map = cluster_map
@@ -1226,16 +1248,16 @@ class VectorLogsReader(LogReader):
1226
1248
  except ValueError:
1227
1249
  timestamp = pytz.utc.localize(datetime.datetime.min)
1228
1250
 
1229
- line = {"raw_line": line, "sort_key": timestamp}
1230
- aggregated_logs.append(line)
1251
+ formatted_line = {"raw_line": line, "sort_key": timestamp}
1252
+ aggregated_logs.append(formatted_line)
1231
1253
 
1232
1254
  aggregated_logs = list(
1233
1255
  {line["raw_line"]: line for line in aggregated_logs}.values()
1234
1256
  )
1235
1257
  aggregated_logs.sort(key=lambda log_line: log_line["sort_key"])
1236
1258
 
1237
- for line in aggregated_logs:
1238
- print_log(line["raw_line"], levels, raw_mode, strip_headers)
1259
+ for formatted_line in aggregated_logs:
1260
+ print_log(formatted_line["raw_line"], levels, raw_mode, strip_headers)
1239
1261
 
1240
1262
  def tail_logs(
1241
1263
  self,
@@ -1157,7 +1157,7 @@ class MarkForDeploymentProcess(RollbackSlackDeploymentProcess):
1157
1157
 
1158
1158
  def on_enter_deploy_errored(self) -> None:
1159
1159
  report_waiting_aborted(self.service, self.deploy_group)
1160
- self.update_slack_status(f"Deploy aborted, but it will still try to converge.")
1160
+ self.update_slack_status("Deploy aborted, but it will still try to converge.")
1161
1161
  self.send_manual_rollback_instructions()
1162
1162
  if self.deploy_group_is_set_to_notify("notify_after_abort"):
1163
1163
  self.ping_authors("Deploy errored")
@@ -1264,7 +1264,15 @@ class MarkForDeploymentProcess(RollbackSlackDeploymentProcess):
1264
1264
  self.ping_authors()
1265
1265
 
1266
1266
  def send_manual_rollback_instructions(self) -> None:
1267
- if self.deployment_version != self.old_deployment_version:
1267
+ # NOTE: new deploy groups are not exactly a particularly frequent occurrence, but
1268
+ # we want to prevent sending messages that look like
1269
+ # `If you need to roll back manually, run: paasta rollback --service $S --deploy-group $G --commit None`
1270
+ # since that's not actually valid/actionable.
1271
+ # thus the seemingly out-of-nowhere old_git_sha check: new deploy groups won't have value set there.
1272
+ if (
1273
+ self.deployment_version != self.old_deployment_version
1274
+ and self.old_git_sha is not None
1275
+ ):
1268
1276
  extra_rollback_args = ""
1269
1277
  if self.old_deployment_version.image_version:
1270
1278
  extra_rollback_args = (
@@ -1317,7 +1325,7 @@ class MarkForDeploymentProcess(RollbackSlackDeploymentProcess):
1317
1325
  inactive_button_texts = {
1318
1326
  "forward": f"Continue Forward to {version_short_str} :arrow_forward:",
1319
1327
  "complete": f"Complete deploy to {version_short_str} :white_check_mark:",
1320
- "snooze": f"Reset countdown",
1328
+ "snooze": "Reset countdown",
1321
1329
  "enable_auto_rollbacks": "Enable auto rollbacks :eyes:",
1322
1330
  "disable_auto_rollbacks": "Disable auto rollbacks :close_eyes_monkey:",
1323
1331
  }
@@ -124,7 +124,7 @@ def paasta_mesh_status_on_api_endpoint(
124
124
  [PaastaColors.red(f"Could not connect to API: {exc.__class__.__name__}")],
125
125
  )
126
126
  except Exception as e:
127
- output = [PaastaColors.red(f"Exception when talking to the API:")]
127
+ output = [PaastaColors.red("Exception when talking to the API:")]
128
128
  output.extend(str(e).split("\n"))
129
129
  return 1, output
130
130
 
@@ -116,7 +116,7 @@ def paasta_remote_run_copy(
116
116
  )
117
117
  if poll_response.status != 200:
118
118
  print(
119
- f"Unable to find running remote-run pod: have you started one with `paasta remote-run start`?"
119
+ "Unable to find running remote-run pod: have you started one with `paasta remote-run start`?"
120
120
  )
121
121
  return 1
122
122
 
@@ -295,11 +295,19 @@ def paasta_remote_run_stop(
295
295
 
296
296
 
297
297
  def add_common_args_to_parser(parser: argparse.ArgumentParser):
298
+ def _validate_service_name(name: str) -> str:
299
+ if name not in _list_services_and_toolboxes():
300
+ raise ValueError(f"{name} is not a known service name")
301
+ return name
302
+
298
303
  service_arg = parser.add_argument(
299
304
  "-s",
300
305
  "--service",
301
306
  help="The name of the service you wish to inspect. Required.",
302
307
  required=True,
308
+ # not using `choices` for validation to avoid the help text
309
+ # for the command being incredibly large
310
+ type=_validate_service_name,
303
311
  )
304
312
  service_arg.completer = lazy_choices_completer(_list_services_and_toolboxes) # type: ignore
305
313
  instance_or_toolbox = parser.add_mutually_exclusive_group()
@@ -323,6 +331,7 @@ def add_common_args_to_parser(parser: argparse.ArgumentParser):
323
331
  "--cluster",
324
332
  help="The name of the cluster you wish to run your task on. Required.",
325
333
  required=True,
334
+ choices=list_clusters(),
326
335
  )
327
336
  cluster_arg.completer = lazy_choices_completer(list_clusters) # type: ignore
328
337
 
@@ -340,7 +340,7 @@ def paasta_rollback(args: argparse.Namespace) -> int:
340
340
  )
341
341
  print(
342
342
  PaastaColors.yellow(
343
- f"WARNING: Failing to do so means that Jenkins will redeploy the latest code on the next scheduled build!"
343
+ "WARNING: Failing to do so means that Jenkins will redeploy the latest code on the next scheduled build!"
344
344
  )
345
345
  )
346
346
 
@@ -212,7 +212,7 @@ def _add_vault_auth_args(parser: argparse.ArgumentParser):
212
212
  dest="vault_auth_method",
213
213
  required=False,
214
214
  default="token",
215
- choices=["token", "ldap"],
215
+ choices=["token", "okta"],
216
216
  )
217
217
  parser.add_argument(
218
218
  "--vault-token-file",
@@ -456,7 +456,7 @@ def paasta_secret(args):
456
456
  "vault_token_file": args.vault_token_file,
457
457
  # best solution so far is to change the below string to "token",
458
458
  # so that token file is picked up from argparse
459
- "vault_auth_method": "ldap", # must have LDAP to get 2FA push for prod
459
+ "vault_auth_method": "okta", # must use Okta to get 2FA push
460
460
  },
461
461
  )
462
462
  secret_provider.write_secret(
@@ -897,20 +897,22 @@ def configure_and_run_docker_container(
897
897
  )
898
898
  ) # type:ignore
899
899
  environment.update(extra_driver_envs)
900
+ if "jupyter-lab" == args.cmd:
901
+ environment["SPARK_DRIVER_TYPE"] = "jupyter"
900
902
 
901
903
  if args.use_service_auth_token:
902
904
  environment["YELP_SVC_AUTHZ_TOKEN"] = get_service_auth_token()
903
905
 
904
906
  webui_url = get_webui_url(spark_conf["spark.ui.port"])
905
- webui_url_msg = PaastaColors.green(f"\nSpark monitoring URL: ") + f"{webui_url}\n"
907
+ webui_url_msg = PaastaColors.green("\nSpark monitoring URL: ") + f"{webui_url}\n"
906
908
 
907
909
  docker_cmd = get_docker_cmd(args, instance_config, spark_conf_str)
908
910
  if "history-server" in docker_cmd:
909
- print(PaastaColors.green(f"\nSpark history server URL: ") + f"{webui_url}\n")
911
+ print(PaastaColors.green("\nSpark history server URL: ") + f"{webui_url}\n")
910
912
  elif any(c in docker_cmd for c in ["pyspark", "spark-shell", "spark-submit"]):
911
913
  grafana_url = get_grafana_url(spark_conf)
912
914
  dashboard_url_msg = (
913
- PaastaColors.green(f"\nGrafana dashboard: ") + f"{grafana_url}\n"
915
+ PaastaColors.green("\nGrafana dashboard: ") + f"{grafana_url}\n"
914
916
  )
915
917
  print(webui_url_msg)
916
918
  print(dashboard_url_msg)