paasta-tools 1.30.14__py3-none-any.whl → 1.31.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. paasta_tools/__init__.py +1 -1
  2. paasta_tools/cli/cmds/validate.py +5 -0
  3. paasta_tools/cli/schemas/autoscaling_schema.json +2 -1
  4. paasta_tools/kubernetes_tools.py +19 -8
  5. paasta_tools/long_running_service_tools.py +3 -0
  6. paasta_tools/setup_prometheus_adapter_config.py +82 -0
  7. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/setup_prometheus_adapter_config.py +82 -0
  8. {paasta_tools-1.30.14.dist-info → paasta_tools-1.31.1.dist-info}/METADATA +1 -1
  9. {paasta_tools-1.30.14.dist-info → paasta_tools-1.31.1.dist-info}/RECORD +64 -64
  10. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/apply_external_resources.py +0 -0
  11. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/bounce_log_latency_parser.py +0 -0
  12. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/check_autoscaler_max_instances.py +0 -0
  13. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/check_cassandracluster_services_replication.py +0 -0
  14. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/check_flink_services_health.py +0 -0
  15. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/check_kubernetes_api.py +0 -0
  16. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/check_kubernetes_services_replication.py +0 -0
  17. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/check_manual_oapi_changes.sh +0 -0
  18. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/check_oom_events.py +0 -0
  19. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/check_orphans.py +0 -0
  20. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/check_spark_jobs.py +0 -0
  21. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/cleanup_kubernetes_cr.py +0 -0
  22. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/cleanup_kubernetes_crd.py +0 -0
  23. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/cleanup_kubernetes_jobs.py +0 -0
  24. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/create_dynamodb_table.py +0 -0
  25. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/create_paasta_playground.py +0 -0
  26. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/delete_kubernetes_deployments.py +0 -0
  27. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/emit_allocated_cpu_metrics.py +0 -0
  28. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/generate_all_deployments +0 -0
  29. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/generate_authenticating_services.py +0 -0
  30. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/generate_deployments_for_service.py +0 -0
  31. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/generate_services_file.py +0 -0
  32. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/generate_services_yaml.py +0 -0
  33. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/get_running_task_allocation.py +0 -0
  34. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/habitat_fixer.py +0 -0
  35. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/ide_helper.py +0 -0
  36. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/is_pod_healthy_in_proxy.py +0 -0
  37. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/is_pod_healthy_in_smartstack.py +0 -0
  38. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/kill_bad_containers.py +0 -0
  39. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/kubernetes_remove_evicted_pods.py +0 -0
  40. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/mass-deploy-tag.sh +0 -0
  41. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/mock_patch_checker.py +0 -0
  42. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/paasta_cleanup_remote_run_resources.py +0 -0
  43. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/paasta_cleanup_stale_nodes.py +0 -0
  44. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/paasta_deploy_tron_jobs +0 -0
  45. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/paasta_execute_docker_command.py +0 -0
  46. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/paasta_secrets_sync.py +0 -0
  47. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/paasta_tabcomplete.sh +0 -0
  48. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/paasta_update_soa_memcpu.py +0 -0
  49. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/render_template.py +0 -0
  50. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/rightsizer_soaconfigs_update.py +0 -0
  51. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/service_shard_remove.py +0 -0
  52. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/service_shard_update.py +0 -0
  53. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/setup_istio_mesh.py +0 -0
  54. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/setup_kubernetes_cr.py +0 -0
  55. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/setup_kubernetes_crd.py +0 -0
  56. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/setup_kubernetes_internal_crd.py +0 -0
  57. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/setup_kubernetes_job.py +0 -0
  58. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/shared_ip_check.py +0 -0
  59. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/synapse_srv_namespaces_fact.py +0 -0
  60. {paasta_tools-1.30.14.data → paasta_tools-1.31.1.data}/scripts/timeouts_metrics_prom.py +0 -0
  61. {paasta_tools-1.30.14.dist-info → paasta_tools-1.31.1.dist-info}/WHEEL +0 -0
  62. {paasta_tools-1.30.14.dist-info → paasta_tools-1.31.1.dist-info}/entry_points.txt +0 -0
  63. {paasta_tools-1.30.14.dist-info → paasta_tools-1.31.1.dist-info}/licenses/LICENSE +0 -0
  64. {paasta_tools-1.30.14.dist-info → paasta_tools-1.31.1.dist-info}/top_level.txt +0 -0
paasta_tools/__init__.py CHANGED
@@ -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.14"
20
+ __version__ = "1.31.1"
@@ -64,6 +64,7 @@ from paasta_tools.long_running_service_tools import METRICS_PROVIDER_PISCINA
64
64
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_PROMQL
65
65
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_UWSGI
66
66
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_UWSGI_V2
67
+ from paasta_tools.long_running_service_tools import METRICS_PROVIDER_WORKER_LOAD
67
68
  from paasta_tools.secret_tools import get_secret_name_from_ref
68
69
  from paasta_tools.secret_tools import is_secret_ref
69
70
  from paasta_tools.secret_tools import is_shared_secret
@@ -163,6 +164,10 @@ INVALID_AUTOSCALING_FIELDS = {
163
164
  "desired_active_requests_per_replica",
164
165
  "prometheus-adapter-config",
165
166
  },
167
+ METRICS_PROVIDER_WORKER_LOAD: {
168
+ "desired_active_requests_per_replica",
169
+ "prometheus-adapter-config",
170
+ },
166
171
  METRICS_PROVIDER_PROMQL: {"desired_active_requests_per_replica"},
167
172
  }
168
173
 
@@ -10,8 +10,9 @@
10
10
  "cpu",
11
11
  "piscina",
12
12
  "gunicorn",
13
+ "active-requests",
13
14
  "arbitrary-promql",
14
- "active-requests"
15
+ "worker-load"
15
16
  ]
16
17
  },
17
18
  "decision_policy": {
@@ -151,6 +151,7 @@ from paasta_tools.long_running_service_tools import METRICS_PROVIDER_PISCINA
151
151
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_PROMQL
152
152
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_UWSGI
153
153
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_UWSGI_V2
154
+ from paasta_tools.long_running_service_tools import METRICS_PROVIDER_WORKER_LOAD
154
155
  from paasta_tools.long_running_service_tools import ServiceNamespaceConfig
155
156
  from paasta_tools.secret_tools import get_secret_name_from_ref
156
157
  from paasta_tools.secret_tools import is_secret_ref
@@ -874,7 +875,10 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
874
875
  ),
875
876
  ),
876
877
  )
877
- elif provider["type"] == METRICS_PROVIDER_UWSGI_V2:
878
+ elif provider["type"] in {
879
+ METRICS_PROVIDER_UWSGI_V2,
880
+ METRICS_PROVIDER_WORKER_LOAD,
881
+ }:
878
882
  return V2MetricSpec(
879
883
  type="Object",
880
884
  object=V2ObjectMetricSource(
@@ -2445,22 +2449,29 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
2445
2449
 
2446
2450
  # not all services use autoscaling, so we label those that do in order to have
2447
2451
  # prometheus selectively discover/scrape them
2448
- if self.should_use_metrics_provider(METRICS_PROVIDER_UWSGI):
2449
- # UWSGI no longer needs a label to indicate it needs to be scraped as all pods are checked for the uwsgi stats port by our centralized uwsgi-exporter
2450
- # But we do still need deploy_group for relabeling properly
2451
- # this should probably eventually be made into a default label,
2452
+ metrics_providers_needing_deploy_group = [
2453
+ METRICS_PROVIDER_UWSGI,
2454
+ METRICS_PROVIDER_PISCINA,
2455
+ METRICS_PROVIDER_GUNICORN,
2456
+ METRICS_PROVIDER_WORKER_LOAD,
2457
+ ]
2458
+
2459
+ if any(
2460
+ self.should_use_metrics_provider(provider)
2461
+ for provider in metrics_providers_needing_deploy_group
2462
+ ):
2463
+ # Deploy group is needed for Prometheus relabeling properly
2464
+ # This should probably eventually be made into a default label,
2452
2465
  # but for now we're fine with it being behind these feature toggles.
2453
- # ideally, we'd also have the docker image here for ease-of-use
2466
+ # Ideally, we'd also have the docker image here for ease-of-use
2454
2467
  # in Prometheus relabeling, but that information is over the
2455
2468
  # character limit for k8s labels (63 chars)
2456
2469
  labels["paasta.yelp.com/deploy_group"] = self.get_deploy_group()
2457
2470
 
2458
2471
  if self.should_use_metrics_provider(METRICS_PROVIDER_PISCINA):
2459
- labels["paasta.yelp.com/deploy_group"] = self.get_deploy_group()
2460
2472
  labels["paasta.yelp.com/scrape_piscina_prometheus"] = "true"
2461
2473
 
2462
2474
  if self.should_use_metrics_provider(METRICS_PROVIDER_GUNICORN):
2463
- labels["paasta.yelp.com/deploy_group"] = self.get_deploy_group()
2464
2475
  labels["paasta.yelp.com/scrape_gunicorn_prometheus"] = "true"
2465
2476
 
2466
2477
  # the default AWS LB Controller behavior is to enable this by-namespace
@@ -41,6 +41,7 @@ DEFAULT_ACTIVE_REQUESTS_AUTOSCALING_MOVING_AVERAGE_WINDOW = 1800
41
41
  DEFAULT_UWSGI_AUTOSCALING_MOVING_AVERAGE_WINDOW = 1800
42
42
  DEFAULT_PISCINA_AUTOSCALING_MOVING_AVERAGE_WINDOW = 1800
43
43
  DEFAULT_GUNICORN_AUTOSCALING_MOVING_AVERAGE_WINDOW = 1800
44
+ DEFAULT_WORKER_LOAD_AUTOSCALING_MOVING_AVERAGE_WINDOW = 1800
44
45
 
45
46
  METRICS_PROVIDER_CPU = "cpu"
46
47
  METRICS_PROVIDER_UWSGI = "uwsgi"
@@ -49,6 +50,7 @@ METRICS_PROVIDER_GUNICORN = "gunicorn"
49
50
  METRICS_PROVIDER_PISCINA = "piscina"
50
51
  METRICS_PROVIDER_ACTIVE_REQUESTS = "active-requests"
51
52
  METRICS_PROVIDER_PROMQL = "arbitrary-promql"
53
+ METRICS_PROVIDER_WORKER_LOAD = "worker-load"
52
54
 
53
55
  ALL_METRICS_PROVIDERS = [
54
56
  METRICS_PROVIDER_CPU,
@@ -58,6 +60,7 @@ ALL_METRICS_PROVIDERS = [
58
60
  METRICS_PROVIDER_PISCINA,
59
61
  METRICS_PROVIDER_ACTIVE_REQUESTS,
60
62
  METRICS_PROVIDER_PROMQL,
63
+ METRICS_PROVIDER_WORKER_LOAD,
61
64
  ]
62
65
 
63
66
 
@@ -53,6 +53,9 @@ from paasta_tools.long_running_service_tools import (
53
53
  from paasta_tools.long_running_service_tools import (
54
54
  DEFAULT_UWSGI_AUTOSCALING_MOVING_AVERAGE_WINDOW,
55
55
  )
56
+ from paasta_tools.long_running_service_tools import (
57
+ DEFAULT_WORKER_LOAD_AUTOSCALING_MOVING_AVERAGE_WINDOW,
58
+ )
56
59
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_ACTIVE_REQUESTS
57
60
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_CPU
58
61
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_GUNICORN
@@ -60,6 +63,7 @@ from paasta_tools.long_running_service_tools import METRICS_PROVIDER_PISCINA
60
63
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_PROMQL
61
64
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_UWSGI
62
65
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_UWSGI_V2
66
+ from paasta_tools.long_running_service_tools import METRICS_PROVIDER_WORKER_LOAD
63
67
  from paasta_tools.paasta_service_config_loader import PaastaServiceConfigLoader
64
68
  from paasta_tools.utils import DEFAULT_SOA_DIR
65
69
  from paasta_tools.utils import get_services_for_cluster
@@ -214,6 +218,10 @@ def create_instance_scaling_rule(
214
218
  return create_instance_uwsgi_v2_scaling_rule(
215
219
  service, instance_config, metrics_provider_config, paasta_cluster
216
220
  )
221
+ if metrics_provider_config["type"] == METRICS_PROVIDER_WORKER_LOAD:
222
+ return create_instance_worker_load_scaling_rule(
223
+ service, instance_config, metrics_provider_config, paasta_cluster
224
+ )
217
225
  if metrics_provider_config["type"] == METRICS_PROVIDER_PISCINA:
218
226
  return create_instance_piscina_scaling_rule(
219
227
  service, instance_config, metrics_provider_config, paasta_cluster
@@ -523,6 +531,80 @@ def create_instance_uwsgi_v2_scaling_rule(
523
531
  }
524
532
 
525
533
 
534
+ def create_instance_worker_load_scaling_rule(
535
+ service: str,
536
+ instance_config: KubernetesDeploymentConfig,
537
+ metrics_provider_config: MetricsProviderDict,
538
+ paasta_cluster: str,
539
+ ) -> PrometheusAdapterRule:
540
+ """
541
+ Creates a Prometheus adapter rule config for a given service instance using generic worker_busy metric.
542
+ """
543
+ instance = instance_config.instance
544
+ moving_average_window = metrics_provider_config.get(
545
+ "moving_average_window_seconds",
546
+ DEFAULT_WORKER_LOAD_AUTOSCALING_MOVING_AVERAGE_WINDOW,
547
+ )
548
+ deployment_name = get_kubernetes_app_name(service=service, instance=instance)
549
+
550
+ # In order for autoscaling to work safely while a service migrates from one namespace to another, the HPA needs to
551
+ # make sure that the deployment in the new namespace is scaled up enough to handle _all_ the load.
552
+ # This is because once the new deployment is 100% healthy, cleanup_kubernetes_job will delete the deployment out of
553
+ # the old namespace all at once, suddenly putting all the load onto the deployment in the new namespace.
554
+ # To ensure this, we must NOT filter on namespace in worker_filter_terms (which is used when calculating total_load.
555
+ # This makes sure that desired_instances includes load from all namespaces.
556
+ worker_filter_terms = f"paasta_cluster='{paasta_cluster}',paasta_service='{service}',paasta_instance='{instance}'"
557
+
558
+ # k8s:deployment:pods_status_ready is a metric created by summing kube_pod_status_ready
559
+ # over paasta service/instance/cluster. it counts the number of ready pods in a paasta
560
+ # deployment.
561
+ ready_pods = f"""
562
+ (sum(
563
+ k8s:deployment:pods_status_ready{{{worker_filter_terms}}} >= 0
564
+ or
565
+ max_over_time(
566
+ k8s:deployment:pods_status_ready{{{worker_filter_terms}}}[{DEFAULT_EXTRAPOLATION_TIME}s]
567
+ )
568
+ ) by (kube_deployment))
569
+ """
570
+ load_per_instance = f"""
571
+ avg(
572
+ worker_busy{{{worker_filter_terms}}}
573
+ ) by (kube_pod, kube_deployment)
574
+ """
575
+ missing_instances = f"""
576
+ clamp_min(
577
+ {ready_pods} - count({load_per_instance}) by (kube_deployment),
578
+ 0
579
+ )
580
+ """
581
+ total_load = f"""
582
+ (
583
+ sum(
584
+ {load_per_instance}
585
+ ) by (kube_deployment)
586
+ +
587
+ {missing_instances}
588
+ )
589
+ """
590
+ total_load_smoothed = f"""
591
+ avg_over_time(
592
+ (
593
+ {total_load}
594
+ )[{moving_average_window}s:]
595
+ )
596
+ """
597
+
598
+ metric_name = f"{deployment_name}-worker-load-prom"
599
+
600
+ return {
601
+ "name": {"as": metric_name},
602
+ "seriesQuery": f"worker_busy{{{worker_filter_terms}}}",
603
+ "resources": {"template": "kube_<<.Resource>>"},
604
+ "metricsQuery": _minify_promql(total_load_smoothed),
605
+ }
606
+
607
+
526
608
  def create_instance_piscina_scaling_rule(
527
609
  service: str,
528
610
  instance_config: KubernetesDeploymentConfig,
@@ -53,6 +53,9 @@ from paasta_tools.long_running_service_tools import (
53
53
  from paasta_tools.long_running_service_tools import (
54
54
  DEFAULT_UWSGI_AUTOSCALING_MOVING_AVERAGE_WINDOW,
55
55
  )
56
+ from paasta_tools.long_running_service_tools import (
57
+ DEFAULT_WORKER_LOAD_AUTOSCALING_MOVING_AVERAGE_WINDOW,
58
+ )
56
59
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_ACTIVE_REQUESTS
57
60
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_CPU
58
61
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_GUNICORN
@@ -60,6 +63,7 @@ from paasta_tools.long_running_service_tools import METRICS_PROVIDER_PISCINA
60
63
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_PROMQL
61
64
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_UWSGI
62
65
  from paasta_tools.long_running_service_tools import METRICS_PROVIDER_UWSGI_V2
66
+ from paasta_tools.long_running_service_tools import METRICS_PROVIDER_WORKER_LOAD
63
67
  from paasta_tools.paasta_service_config_loader import PaastaServiceConfigLoader
64
68
  from paasta_tools.utils import DEFAULT_SOA_DIR
65
69
  from paasta_tools.utils import get_services_for_cluster
@@ -214,6 +218,10 @@ def create_instance_scaling_rule(
214
218
  return create_instance_uwsgi_v2_scaling_rule(
215
219
  service, instance_config, metrics_provider_config, paasta_cluster
216
220
  )
221
+ if metrics_provider_config["type"] == METRICS_PROVIDER_WORKER_LOAD:
222
+ return create_instance_worker_load_scaling_rule(
223
+ service, instance_config, metrics_provider_config, paasta_cluster
224
+ )
217
225
  if metrics_provider_config["type"] == METRICS_PROVIDER_PISCINA:
218
226
  return create_instance_piscina_scaling_rule(
219
227
  service, instance_config, metrics_provider_config, paasta_cluster
@@ -523,6 +531,80 @@ def create_instance_uwsgi_v2_scaling_rule(
523
531
  }
524
532
 
525
533
 
534
+ def create_instance_worker_load_scaling_rule(
535
+ service: str,
536
+ instance_config: KubernetesDeploymentConfig,
537
+ metrics_provider_config: MetricsProviderDict,
538
+ paasta_cluster: str,
539
+ ) -> PrometheusAdapterRule:
540
+ """
541
+ Creates a Prometheus adapter rule config for a given service instance using generic worker_busy metric.
542
+ """
543
+ instance = instance_config.instance
544
+ moving_average_window = metrics_provider_config.get(
545
+ "moving_average_window_seconds",
546
+ DEFAULT_WORKER_LOAD_AUTOSCALING_MOVING_AVERAGE_WINDOW,
547
+ )
548
+ deployment_name = get_kubernetes_app_name(service=service, instance=instance)
549
+
550
+ # In order for autoscaling to work safely while a service migrates from one namespace to another, the HPA needs to
551
+ # make sure that the deployment in the new namespace is scaled up enough to handle _all_ the load.
552
+ # This is because once the new deployment is 100% healthy, cleanup_kubernetes_job will delete the deployment out of
553
+ # the old namespace all at once, suddenly putting all the load onto the deployment in the new namespace.
554
+ # To ensure this, we must NOT filter on namespace in worker_filter_terms (which is used when calculating total_load.
555
+ # This makes sure that desired_instances includes load from all namespaces.
556
+ worker_filter_terms = f"paasta_cluster='{paasta_cluster}',paasta_service='{service}',paasta_instance='{instance}'"
557
+
558
+ # k8s:deployment:pods_status_ready is a metric created by summing kube_pod_status_ready
559
+ # over paasta service/instance/cluster. it counts the number of ready pods in a paasta
560
+ # deployment.
561
+ ready_pods = f"""
562
+ (sum(
563
+ k8s:deployment:pods_status_ready{{{worker_filter_terms}}} >= 0
564
+ or
565
+ max_over_time(
566
+ k8s:deployment:pods_status_ready{{{worker_filter_terms}}}[{DEFAULT_EXTRAPOLATION_TIME}s]
567
+ )
568
+ ) by (kube_deployment))
569
+ """
570
+ load_per_instance = f"""
571
+ avg(
572
+ worker_busy{{{worker_filter_terms}}}
573
+ ) by (kube_pod, kube_deployment)
574
+ """
575
+ missing_instances = f"""
576
+ clamp_min(
577
+ {ready_pods} - count({load_per_instance}) by (kube_deployment),
578
+ 0
579
+ )
580
+ """
581
+ total_load = f"""
582
+ (
583
+ sum(
584
+ {load_per_instance}
585
+ ) by (kube_deployment)
586
+ +
587
+ {missing_instances}
588
+ )
589
+ """
590
+ total_load_smoothed = f"""
591
+ avg_over_time(
592
+ (
593
+ {total_load}
594
+ )[{moving_average_window}s:]
595
+ )
596
+ """
597
+
598
+ metric_name = f"{deployment_name}-worker-load-prom"
599
+
600
+ return {
601
+ "name": {"as": metric_name},
602
+ "seriesQuery": f"worker_busy{{{worker_filter_terms}}}",
603
+ "resources": {"template": "kube_<<.Resource>>"},
604
+ "metricsQuery": _minify_promql(total_load_smoothed),
605
+ }
606
+
607
+
526
608
  def create_instance_piscina_scaling_rule(
527
609
  service: str,
528
610
  instance_config: KubernetesDeploymentConfig,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: paasta-tools
3
- Version: 1.30.14
3
+ Version: 1.31.1
4
4
  Summary: Tools for Yelps SOA infrastructure
5
5
  Author: Compute Infrastructure @ Yelp
6
6
  Author-email: compute-infra@yelp.com
@@ -1,7 +1,7 @@
1
1
  k8s_itests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  k8s_itests/test_autoscaling.py,sha256=gX30L1wG1sDBaM0wE2aYR4OqHPSLvQBZ6LV0mLTrXZA,536
3
3
  k8s_itests/utils.py,sha256=PNibpYR0-g8Jcts9CjpkNb3oVzmdk9tZQrrNRuATCCM,966
4
- paasta_tools/__init__.py,sha256=D1cwj9AcJ_qGTbtsK9OdOmM15eXQswQOHYSr3p6t5kQ,866
4
+ paasta_tools/__init__.py,sha256=QR2D-Ykd4kxKzD-2jDMsbgZQVE0VO5SHvZt_GndMiHM,865
5
5
  paasta_tools/adhoc_tools.py,sha256=OfhyZwilB93kNX8r4Nq_KyZCvsZ4rNX-FBcQAi41KCM,4751
6
6
  paasta_tools/apply_external_resources.py,sha256=DHZJ8zkGQKTBR6Ku2lNxnrdHo8rD7PD0rZEN2yloOn8,3375
7
7
  paasta_tools/async_utils.py,sha256=LOpYxaN-8u7js6IlibPRGq9OtgWFig59LGeIFgW9PsA,3591
@@ -44,10 +44,10 @@ paasta_tools/generate_services_yaml.py,sha256=BM760XGEOmLeJcEm0ez5nBZ2NmFJWsNXbZ
44
44
  paasta_tools/hacheck.py,sha256=GtQd32G4JoB2bOWqzH9h9NPrkg8a50i-iXAblfYz2p4,2748
45
45
  paasta_tools/iptables.py,sha256=SQ7hutHarfCd13oAknKv_h9rUuln4rf11W6C2HHUy9g,7518
46
46
  paasta_tools/kafkacluster_tools.py,sha256=NMfowdpYhFpXW55MKx_eX6rrQj5Fn-5M_9ryZKd749A,4992
47
- paasta_tools/kubernetes_tools.py,sha256=-7z7rWIR5Fw7ZdpZhJ-sPzx3N0THm0NXwIehU5pnj90,181536
47
+ paasta_tools/kubernetes_tools.py,sha256=rKbYziz4AAuAqtGaGMiPeshS71Q-k4Sg7G9RCyv0zPg,181665
48
48
  paasta_tools/list_kubernetes_service_instances.py,sha256=UEPiTqNxUAqUgSyPzJlNcrI2W4HBwpngzDM1QD6AAVQ,3910
49
49
  paasta_tools/list_tron_namespaces.py,sha256=wfSkPY9_C-RkORmnon3DWL2lVZ4GNSSDG9VkFrDfY1E,1679
50
- paasta_tools/long_running_service_tools.py,sha256=ssm7Mp7nQZe8-EPhQk4RSSdmXJ2zZ5DZ8GsjbCTYR_Y,26260
50
+ paasta_tools/long_running_service_tools.py,sha256=RphI6rDE4BK2zN2bfM900abuj7kDn7YXUcMq4pQVyO4,26400
51
51
  paasta_tools/mac_address.py,sha256=YWEXbRSBwJXrH--iDDFqBV0BWjRH9DedbPcKFPk36A0,1324
52
52
  paasta_tools/marathon_dashboard.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
53
53
  paasta_tools/mesos_tools.py,sha256=WWRC4bGuEXqF1Y0MR3_EjvgaFSPBRlPYXI419CWnNKY,35540
@@ -71,7 +71,7 @@ paasta_tools/setup_kubernetes_cr.py,sha256=s7oOAKopjs_RzmKMptlkEKTDCvLbvCLO1ilYw
71
71
  paasta_tools/setup_kubernetes_crd.py,sha256=kDpZKbpQa8niY-dhEKf_Q5IE5h7yDRES_Wg-2atJ6kY,4033
72
72
  paasta_tools/setup_kubernetes_internal_crd.py,sha256=bkc4t2hUM9JoTIVDnfZWsVkoQ-IlRoTI-E_FISLGpk4,4642
73
73
  paasta_tools/setup_kubernetes_job.py,sha256=uWXOwG_c-vnoeCmQC1Ode-zBQRz3655qVNy6aGHidXo,19108
74
- paasta_tools/setup_prometheus_adapter_config.py,sha256=DCA0-AY8dPivV5D4FxMGY1wIoIvWXXWV_3V5O1LJBXc,40741
74
+ paasta_tools/setup_prometheus_adapter_config.py,sha256=gNqwpCpXiMp9TIjQn2b71MGYqn14Rtsbivr-9TaJiCI,43975
75
75
  paasta_tools/setup_tron_namespace.py,sha256=SnXD98BdC0gyqH2Ii_J10Xvy9i9zpPMzmvmZAN35q0Y,9743
76
76
  paasta_tools/slack.py,sha256=WEJsTcr2vCdftG4bVkePNBFaC2hzEzMDwglHA0UC0s8,2700
77
77
  paasta_tools/smartstack_tools.py,sha256=J0mPialC9KFW9mW0fOUCj040VyowEjQgBI_s13fzEgE,25557
@@ -137,7 +137,7 @@ paasta_tools/cli/cmds/security_check.py,sha256=IEtcM0Hv2BWcavCjWcnPbyfrLcCRYC8jH
137
137
  paasta_tools/cli/cmds/spark_run.py,sha256=NEPPCf5pvkW0Kn9SKAaazZn3ge4HhidWVAm-hEQybnk,51355
138
138
  paasta_tools/cli/cmds/start_stop_restart.py,sha256=MIMShmHer_uPEsLCb3qDaBOYyHSgqDHrLHEVFCcxaE0,14600
139
139
  paasta_tools/cli/cmds/status.py,sha256=AFpWJ4OFTOEZwFfx4Z3tft7CzEm9eMzek4tmxwY-Lr4,87659
140
- paasta_tools/cli/cmds/validate.py,sha256=nzTaeVB6aKGP7YzpPxxR3e6L4QuoJLm5gAgWivyzDHY,40557
140
+ paasta_tools/cli/cmds/validate.py,sha256=dcVIDhjefS2-C2zbltusFVZ1gablVsP44L1zK9DEp_M,40765
141
141
  paasta_tools/cli/cmds/wait_for_deployment.py,sha256=8vPnJ6vXxJCfxQ20PTI3RgrH8mbNe-NuU663SbSXobk,9298
142
142
  paasta_tools/cli/fsm/__init__.py,sha256=H0VmJeHyCSXD9GbiEjjQwcB_sKOcoBiyK-IEJMmtCyQ,578
143
143
  paasta_tools/cli/fsm/autosuggest.py,sha256=M4pxd4khsS5NWnSRihJe4ODvMr0XmwHdfLyaPh0w3m4,2789
@@ -148,7 +148,7 @@ paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml,sha256=GF
148
148
  paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml,sha256=3wnLrysDet3ohGjzJB0Mp8wKBBggqkUEPvYpCeX1Nu0,319
149
149
  paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml,sha256=wumi_bbh3fwz8UngyV6tL5ntMzbDNJn7StXyYpr6Weg,129
150
150
  paasta_tools/cli/schemas/adhoc_schema.json,sha256=AYQ-yt_E7Px2JXLIInyEVCtEHT6UaWwIt_UuhGyqNFQ,6996
151
- paasta_tools/cli/schemas/autoscaling_schema.json,sha256=PjXvCZN9YklGttwmyg8QKSrwwUQLenmu3r8Tw4m77JM,2807
151
+ paasta_tools/cli/schemas/autoscaling_schema.json,sha256=-JzNBjfEqynrMyWwb7X6h6RHsd_DoghsiH6gqxxQWcE,2842
152
152
  paasta_tools/cli/schemas/deploy_schema.json,sha256=NwxiTm-rncX4n5ql3mJ09pj2zfG5pDfFJnANP7A0XSM,5301
153
153
  paasta_tools/cli/schemas/eks_schema.json,sha256=ED9dgIBTDFe57AXcuNqEomv2oqhVmS-Ohuz5rNaqOxM,40763
154
154
  paasta_tools/cli/schemas/kubernetes_schema.json,sha256=ED9dgIBTDFe57AXcuNqEomv2oqhVmS-Ohuz5rNaqOxM,40763
@@ -287,61 +287,61 @@ paasta_tools/tron/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
287
287
  paasta_tools/tron/client.py,sha256=ypWjM4bZCzQWLn-qe1driqAxvF0ux8dROuFUv63dryA,5562
288
288
  paasta_tools/tron/tron_command_context.py,sha256=c6mph_DAt7pjcE3Uo271haJ0DfxJzfvcRhR2o-UmOeY,5379
289
289
  paasta_tools/tron/tron_timeutils.py,sha256=vDn04K7A3Xbs3lM04EgLuViC8AavOc5qyo8J5MC5nLk,3054
290
- paasta_tools-1.30.14.data/scripts/apply_external_resources.py,sha256=BOIdCQ5Md9RI3enzqbIWQge3clkXhPybAmLE3hqfDwQ,3347
291
- paasta_tools-1.30.14.data/scripts/bounce_log_latency_parser.py,sha256=dC06a0a5LdtPJ8xo88QWe5DMH_vwVB1BNbkFH7kJ3j0,2225
292
- paasta_tools-1.30.14.data/scripts/check_autoscaler_max_instances.py,sha256=2z6ifSU26-ULOK-FXp75b45mCdjSJnuvU8TxvapB8Wk,9423
293
- paasta_tools-1.30.14.data/scripts/check_cassandracluster_services_replication.py,sha256=mKlCK9pRNzxnOt41wA6CtDQIHhcky438i044kA6pbEc,1127
294
- paasta_tools-1.30.14.data/scripts/check_flink_services_health.py,sha256=ElYa1hr6KUcXuu0B8Nf-dt2Vfyo5FrwF5gVV4QBX7Lg,7162
295
- paasta_tools-1.30.14.data/scripts/check_kubernetes_api.py,sha256=BhOqJkkKNJPfonfIPonW5dlIubd1ji-3ppjXHomNwzM,1522
296
- paasta_tools-1.30.14.data/scripts/check_kubernetes_services_replication.py,sha256=LCLlumReRdy9Cw_sPpqanjPcBlbcrJDiECaYYru5Cwk,5751
297
- paasta_tools-1.30.14.data/scripts/check_manual_oapi_changes.sh,sha256=1IdphwXP7xnMNS7huZ3FeEHy67-nY4n3ydHmbojQvJg,879
298
- paasta_tools-1.30.14.data/scripts/check_oom_events.py,sha256=tUr14T2LYEgqwpAq4vkZ_Z0VTPOfQg7yrSSkwGQ86Hg,7801
299
- paasta_tools-1.30.14.data/scripts/check_orphans.py,sha256=9PmzRUZ1HwCcmTm4J1xTznz7hZl8fKsu1wdXUDufXJs,9984
300
- paasta_tools-1.30.14.data/scripts/check_spark_jobs.py,sha256=W4HUIbX_ylxl4DlqcdmoRWDbKYgPEr04OM-DLvfnXE8,7316
301
- paasta_tools-1.30.14.data/scripts/cleanup_kubernetes_cr.py,sha256=m-w_wuTuVG9FlwQQkxXYgri5DTGac9Nc2pbK4k1FNDE,4659
302
- paasta_tools-1.30.14.data/scripts/cleanup_kubernetes_crd.py,sha256=p9eLk-0-pU-hcVg-GAM92h1ZdQqlvmYhBzUFCiMPYR8,4478
303
- paasta_tools-1.30.14.data/scripts/cleanup_kubernetes_jobs.py,sha256=7LHB4tsz1kt-zygssIfQbBY6c3LSqXYDUILvHkSfBog,12433
304
- paasta_tools-1.30.14.data/scripts/create_dynamodb_table.py,sha256=9wJftWGgNtvLnpXeUqpoMXBIIep1hNySf0YiQmzpl5c,1167
305
- paasta_tools-1.30.14.data/scripts/create_paasta_playground.py,sha256=jzoE5e1pxWeVXwCEkD9O0jefOhEnIlSa3QMP9PC2f0M,3239
306
- paasta_tools-1.30.14.data/scripts/delete_kubernetes_deployments.py,sha256=de4C-5yqEuCeJXp6zhbc0v-c0LOElr4qabLnOTRcX4o,3124
307
- paasta_tools-1.30.14.data/scripts/emit_allocated_cpu_metrics.py,sha256=Cjd3xoOJoYSP3ciSAlZ7fh6_z678KpYt43Xh-WVCY1M,1859
308
- paasta_tools-1.30.14.data/scripts/generate_all_deployments,sha256=Qr5B0zogTOr8Lcn_7dpORixpGIJcXZ_pWz_ZlWnmsik,248
309
- paasta_tools-1.30.14.data/scripts/generate_authenticating_services.py,sha256=r5AQyquVm8_rbAhBETUU2ZHZvolpqZZTakW3lKFiOqw,2982
310
- paasta_tools-1.30.14.data/scripts/generate_deployments_for_service.py,sha256=FAFzIAtKY7GsA13s-ssCMH7T-_p9B1pBtyyYFzsCZ6k,9822
311
- paasta_tools-1.30.14.data/scripts/generate_services_file.py,sha256=w3Wyyn9ZkjfrvkT0SnTbh5mrTZJnjhTC2JIqLBpb6-g,3583
312
- paasta_tools-1.30.14.data/scripts/generate_services_yaml.py,sha256=XyIUsHa1BPLqeklayaFewX69-6GT_luaSLS_TMDLkQ0,991
313
- paasta_tools-1.30.14.data/scripts/get_running_task_allocation.py,sha256=NGYO2td42XQOduUmvgz0CZw0ir36bY6fUe3VOR1Ln6E,10876
314
- paasta_tools-1.30.14.data/scripts/habitat_fixer.py,sha256=hCC7fEnxrBOmiCJj4rPwhGlae9JsYg_gltk10l-FwaE,2625
315
- paasta_tools-1.30.14.data/scripts/ide_helper.py,sha256=QUVWxIeh54IhTn3HEhBrmJKvtgw6RDv9smoJ-6pZA4c,12348
316
- paasta_tools-1.30.14.data/scripts/is_pod_healthy_in_proxy.py,sha256=MiY85MJDXcN9oS8d840WG1iYDIzzO9lmk_NC0i_CrQg,4321
317
- paasta_tools-1.30.14.data/scripts/is_pod_healthy_in_smartstack.py,sha256=z3uP9sgwLwg94BubFgBKare2t1L5qhcY48MWsJxjxPY,1697
318
- paasta_tools-1.30.14.data/scripts/kill_bad_containers.py,sha256=oNY5x0Zg0eu34cXhFy60I7WRlqg4PKD_6xWi0eoRTCA,3832
319
- paasta_tools-1.30.14.data/scripts/kubernetes_remove_evicted_pods.py,sha256=D9Ovdc9Xer_Qf3vM5CtPVcKvnMwLiC0H-WQmQGXrBKM,5274
320
- paasta_tools-1.30.14.data/scripts/mass-deploy-tag.sh,sha256=cfPgDDvAOhy3ijTUocklogzoIY8hfoE6T5QI-0aqcfM,1578
321
- paasta_tools-1.30.14.data/scripts/mock_patch_checker.py,sha256=Q6Je8QjmfLzdnv_6JR6ehh2kA5SUxmeZGeLI2WC3BSY,2559
322
- paasta_tools-1.30.14.data/scripts/paasta_cleanup_remote_run_resources.py,sha256=4oN9UwnR7q6aEEyFUhVrT41VSeQJ2YS3upFpbZQXNUI,4558
323
- paasta_tools-1.30.14.data/scripts/paasta_cleanup_stale_nodes.py,sha256=C-DmEVgtienoMgJnIeESvFqWcJOW2SOGoS1l8RXA8NE,6304
324
- paasta_tools-1.30.14.data/scripts/paasta_deploy_tron_jobs,sha256=fFN2aP5FNSm5WfDV3yvLpihXaKkAF65MRXFcN2iD7S4,106
325
- paasta_tools-1.30.14.data/scripts/paasta_execute_docker_command.py,sha256=6kh7h2bleQbNULc37MiRsfnk9MDHqVv30UQdg3rF3kQ,4086
326
- paasta_tools-1.30.14.data/scripts/paasta_secrets_sync.py,sha256=sMdyWMt9BU5CmWHIRwzhpFKve7zxFHkygt_SNTJutWM,28766
327
- paasta_tools-1.30.14.data/scripts/paasta_tabcomplete.sh,sha256=qbQKSriz_L4MogA12L_8i-tg0Lplpshbk_FUMjK6uG0,929
328
- paasta_tools-1.30.14.data/scripts/paasta_update_soa_memcpu.py,sha256=5fShpZYpb7EeoC70cWdICnNHjHAaNU5mTHaAc3mloIs,20813
329
- paasta_tools-1.30.14.data/scripts/render_template.py,sha256=KcKfeSP2a9f6fMDRhnjX7OJaHmFIBtCJcHhUI_B7p9Y,3975
330
- paasta_tools-1.30.14.data/scripts/rightsizer_soaconfigs_update.py,sha256=0UPVtDyX6wXXurv7l5fiKuzXH8VEszKx_V7UqDm6Ck0,10493
331
- paasta_tools-1.30.14.data/scripts/service_shard_remove.py,sha256=WCvCxu3GTYEa3cYnWybTOiuHN14axj0x5_-snVd-mqE,4927
332
- paasta_tools-1.30.14.data/scripts/service_shard_update.py,sha256=AajuRS4s-HXhEcIIYK2dsyBSdCjZbh4x6Po48ipl7M4,13346
333
- paasta_tools-1.30.14.data/scripts/setup_istio_mesh.py,sha256=LbLxeI_DnhNXkyCgG-GxutlNu9_vcIitorYr4I9x4CY,11575
334
- paasta_tools-1.30.14.data/scripts/setup_kubernetes_cr.py,sha256=xsZJ_X1YpQ0NExyY1cXFH8KW2_vAgctCwdrW0bu102s,14931
335
- paasta_tools-1.30.14.data/scripts/setup_kubernetes_crd.py,sha256=QCiFOcSmE0nMEheIb7IUnYMUn0heh1kHyMFBCm7XIRU,4020
336
- paasta_tools-1.30.14.data/scripts/setup_kubernetes_internal_crd.py,sha256=dDyAOKFow7yeHWGa197angYwGTDWNyR7vZ6Cx5JlS6k,4629
337
- paasta_tools-1.30.14.data/scripts/setup_kubernetes_job.py,sha256=H2VuRaCpBj-J2Qc3DmIMutGuDL8nlfabshEiCGNNqmY,19095
338
- paasta_tools-1.30.14.data/scripts/setup_prometheus_adapter_config.py,sha256=51iFbtMu7MZzv9PVuQftJ59BUVBKdeC7G_zkt9-IXdc,40728
339
- paasta_tools-1.30.14.data/scripts/shared_ip_check.py,sha256=dbMwCwDLy9hCIbVWV1rk0FKuBkZNuQtM59hGVKxV2B4,2464
340
- paasta_tools-1.30.14.data/scripts/synapse_srv_namespaces_fact.py,sha256=HFX0zIXkXIjtAw8zrA7mUiy6NOKR11eBzE39R3aZv_E,1408
341
- paasta_tools-1.30.14.data/scripts/timeouts_metrics_prom.py,sha256=icK1j72-e-hvbUGs3LtcaMn9KBMopD9cGv5UUVo-OSc,2607
342
- paasta_tools-1.30.14.dist-info/licenses/LICENSE,sha256=Tcxn8PpeSjHDwUTemLW_thUNxcOOm612dK_no2ebEpo,10837
343
- paasta_tools-1.30.14.dist-info/METADATA,sha256=z8zV4-DY7ywgF40oVHyPssFkUmY-LimmzzRoiZqA44s,2260
344
- paasta_tools-1.30.14.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
345
- paasta_tools-1.30.14.dist-info/entry_points.txt,sha256=qokGSdKYA6AjtdMM_BjmCAOMghMsjOpcAdL9e4fY6D8,1179
346
- paasta_tools-1.30.14.dist-info/top_level.txt,sha256=6vZZAZ7bbaDxuXZjNYixDwzkrezpNgDQHpS0ikvFOk4,24
347
- paasta_tools-1.30.14.dist-info/RECORD,,
290
+ paasta_tools-1.31.1.data/scripts/apply_external_resources.py,sha256=BOIdCQ5Md9RI3enzqbIWQge3clkXhPybAmLE3hqfDwQ,3347
291
+ paasta_tools-1.31.1.data/scripts/bounce_log_latency_parser.py,sha256=dC06a0a5LdtPJ8xo88QWe5DMH_vwVB1BNbkFH7kJ3j0,2225
292
+ paasta_tools-1.31.1.data/scripts/check_autoscaler_max_instances.py,sha256=2z6ifSU26-ULOK-FXp75b45mCdjSJnuvU8TxvapB8Wk,9423
293
+ paasta_tools-1.31.1.data/scripts/check_cassandracluster_services_replication.py,sha256=mKlCK9pRNzxnOt41wA6CtDQIHhcky438i044kA6pbEc,1127
294
+ paasta_tools-1.31.1.data/scripts/check_flink_services_health.py,sha256=ElYa1hr6KUcXuu0B8Nf-dt2Vfyo5FrwF5gVV4QBX7Lg,7162
295
+ paasta_tools-1.31.1.data/scripts/check_kubernetes_api.py,sha256=BhOqJkkKNJPfonfIPonW5dlIubd1ji-3ppjXHomNwzM,1522
296
+ paasta_tools-1.31.1.data/scripts/check_kubernetes_services_replication.py,sha256=LCLlumReRdy9Cw_sPpqanjPcBlbcrJDiECaYYru5Cwk,5751
297
+ paasta_tools-1.31.1.data/scripts/check_manual_oapi_changes.sh,sha256=1IdphwXP7xnMNS7huZ3FeEHy67-nY4n3ydHmbojQvJg,879
298
+ paasta_tools-1.31.1.data/scripts/check_oom_events.py,sha256=tUr14T2LYEgqwpAq4vkZ_Z0VTPOfQg7yrSSkwGQ86Hg,7801
299
+ paasta_tools-1.31.1.data/scripts/check_orphans.py,sha256=9PmzRUZ1HwCcmTm4J1xTznz7hZl8fKsu1wdXUDufXJs,9984
300
+ paasta_tools-1.31.1.data/scripts/check_spark_jobs.py,sha256=W4HUIbX_ylxl4DlqcdmoRWDbKYgPEr04OM-DLvfnXE8,7316
301
+ paasta_tools-1.31.1.data/scripts/cleanup_kubernetes_cr.py,sha256=m-w_wuTuVG9FlwQQkxXYgri5DTGac9Nc2pbK4k1FNDE,4659
302
+ paasta_tools-1.31.1.data/scripts/cleanup_kubernetes_crd.py,sha256=p9eLk-0-pU-hcVg-GAM92h1ZdQqlvmYhBzUFCiMPYR8,4478
303
+ paasta_tools-1.31.1.data/scripts/cleanup_kubernetes_jobs.py,sha256=7LHB4tsz1kt-zygssIfQbBY6c3LSqXYDUILvHkSfBog,12433
304
+ paasta_tools-1.31.1.data/scripts/create_dynamodb_table.py,sha256=9wJftWGgNtvLnpXeUqpoMXBIIep1hNySf0YiQmzpl5c,1167
305
+ paasta_tools-1.31.1.data/scripts/create_paasta_playground.py,sha256=jzoE5e1pxWeVXwCEkD9O0jefOhEnIlSa3QMP9PC2f0M,3239
306
+ paasta_tools-1.31.1.data/scripts/delete_kubernetes_deployments.py,sha256=de4C-5yqEuCeJXp6zhbc0v-c0LOElr4qabLnOTRcX4o,3124
307
+ paasta_tools-1.31.1.data/scripts/emit_allocated_cpu_metrics.py,sha256=Cjd3xoOJoYSP3ciSAlZ7fh6_z678KpYt43Xh-WVCY1M,1859
308
+ paasta_tools-1.31.1.data/scripts/generate_all_deployments,sha256=Qr5B0zogTOr8Lcn_7dpORixpGIJcXZ_pWz_ZlWnmsik,248
309
+ paasta_tools-1.31.1.data/scripts/generate_authenticating_services.py,sha256=r5AQyquVm8_rbAhBETUU2ZHZvolpqZZTakW3lKFiOqw,2982
310
+ paasta_tools-1.31.1.data/scripts/generate_deployments_for_service.py,sha256=FAFzIAtKY7GsA13s-ssCMH7T-_p9B1pBtyyYFzsCZ6k,9822
311
+ paasta_tools-1.31.1.data/scripts/generate_services_file.py,sha256=w3Wyyn9ZkjfrvkT0SnTbh5mrTZJnjhTC2JIqLBpb6-g,3583
312
+ paasta_tools-1.31.1.data/scripts/generate_services_yaml.py,sha256=XyIUsHa1BPLqeklayaFewX69-6GT_luaSLS_TMDLkQ0,991
313
+ paasta_tools-1.31.1.data/scripts/get_running_task_allocation.py,sha256=NGYO2td42XQOduUmvgz0CZw0ir36bY6fUe3VOR1Ln6E,10876
314
+ paasta_tools-1.31.1.data/scripts/habitat_fixer.py,sha256=hCC7fEnxrBOmiCJj4rPwhGlae9JsYg_gltk10l-FwaE,2625
315
+ paasta_tools-1.31.1.data/scripts/ide_helper.py,sha256=QUVWxIeh54IhTn3HEhBrmJKvtgw6RDv9smoJ-6pZA4c,12348
316
+ paasta_tools-1.31.1.data/scripts/is_pod_healthy_in_proxy.py,sha256=MiY85MJDXcN9oS8d840WG1iYDIzzO9lmk_NC0i_CrQg,4321
317
+ paasta_tools-1.31.1.data/scripts/is_pod_healthy_in_smartstack.py,sha256=z3uP9sgwLwg94BubFgBKare2t1L5qhcY48MWsJxjxPY,1697
318
+ paasta_tools-1.31.1.data/scripts/kill_bad_containers.py,sha256=oNY5x0Zg0eu34cXhFy60I7WRlqg4PKD_6xWi0eoRTCA,3832
319
+ paasta_tools-1.31.1.data/scripts/kubernetes_remove_evicted_pods.py,sha256=D9Ovdc9Xer_Qf3vM5CtPVcKvnMwLiC0H-WQmQGXrBKM,5274
320
+ paasta_tools-1.31.1.data/scripts/mass-deploy-tag.sh,sha256=cfPgDDvAOhy3ijTUocklogzoIY8hfoE6T5QI-0aqcfM,1578
321
+ paasta_tools-1.31.1.data/scripts/mock_patch_checker.py,sha256=Q6Je8QjmfLzdnv_6JR6ehh2kA5SUxmeZGeLI2WC3BSY,2559
322
+ paasta_tools-1.31.1.data/scripts/paasta_cleanup_remote_run_resources.py,sha256=4oN9UwnR7q6aEEyFUhVrT41VSeQJ2YS3upFpbZQXNUI,4558
323
+ paasta_tools-1.31.1.data/scripts/paasta_cleanup_stale_nodes.py,sha256=C-DmEVgtienoMgJnIeESvFqWcJOW2SOGoS1l8RXA8NE,6304
324
+ paasta_tools-1.31.1.data/scripts/paasta_deploy_tron_jobs,sha256=fFN2aP5FNSm5WfDV3yvLpihXaKkAF65MRXFcN2iD7S4,106
325
+ paasta_tools-1.31.1.data/scripts/paasta_execute_docker_command.py,sha256=6kh7h2bleQbNULc37MiRsfnk9MDHqVv30UQdg3rF3kQ,4086
326
+ paasta_tools-1.31.1.data/scripts/paasta_secrets_sync.py,sha256=sMdyWMt9BU5CmWHIRwzhpFKve7zxFHkygt_SNTJutWM,28766
327
+ paasta_tools-1.31.1.data/scripts/paasta_tabcomplete.sh,sha256=qbQKSriz_L4MogA12L_8i-tg0Lplpshbk_FUMjK6uG0,929
328
+ paasta_tools-1.31.1.data/scripts/paasta_update_soa_memcpu.py,sha256=5fShpZYpb7EeoC70cWdICnNHjHAaNU5mTHaAc3mloIs,20813
329
+ paasta_tools-1.31.1.data/scripts/render_template.py,sha256=KcKfeSP2a9f6fMDRhnjX7OJaHmFIBtCJcHhUI_B7p9Y,3975
330
+ paasta_tools-1.31.1.data/scripts/rightsizer_soaconfigs_update.py,sha256=0UPVtDyX6wXXurv7l5fiKuzXH8VEszKx_V7UqDm6Ck0,10493
331
+ paasta_tools-1.31.1.data/scripts/service_shard_remove.py,sha256=WCvCxu3GTYEa3cYnWybTOiuHN14axj0x5_-snVd-mqE,4927
332
+ paasta_tools-1.31.1.data/scripts/service_shard_update.py,sha256=AajuRS4s-HXhEcIIYK2dsyBSdCjZbh4x6Po48ipl7M4,13346
333
+ paasta_tools-1.31.1.data/scripts/setup_istio_mesh.py,sha256=LbLxeI_DnhNXkyCgG-GxutlNu9_vcIitorYr4I9x4CY,11575
334
+ paasta_tools-1.31.1.data/scripts/setup_kubernetes_cr.py,sha256=xsZJ_X1YpQ0NExyY1cXFH8KW2_vAgctCwdrW0bu102s,14931
335
+ paasta_tools-1.31.1.data/scripts/setup_kubernetes_crd.py,sha256=QCiFOcSmE0nMEheIb7IUnYMUn0heh1kHyMFBCm7XIRU,4020
336
+ paasta_tools-1.31.1.data/scripts/setup_kubernetes_internal_crd.py,sha256=dDyAOKFow7yeHWGa197angYwGTDWNyR7vZ6Cx5JlS6k,4629
337
+ paasta_tools-1.31.1.data/scripts/setup_kubernetes_job.py,sha256=H2VuRaCpBj-J2Qc3DmIMutGuDL8nlfabshEiCGNNqmY,19095
338
+ paasta_tools-1.31.1.data/scripts/setup_prometheus_adapter_config.py,sha256=JzvztaJ__5MOAV6pD5Vj3mamARh6TZUCzYdlqhWDOOY,43962
339
+ paasta_tools-1.31.1.data/scripts/shared_ip_check.py,sha256=dbMwCwDLy9hCIbVWV1rk0FKuBkZNuQtM59hGVKxV2B4,2464
340
+ paasta_tools-1.31.1.data/scripts/synapse_srv_namespaces_fact.py,sha256=HFX0zIXkXIjtAw8zrA7mUiy6NOKR11eBzE39R3aZv_E,1408
341
+ paasta_tools-1.31.1.data/scripts/timeouts_metrics_prom.py,sha256=icK1j72-e-hvbUGs3LtcaMn9KBMopD9cGv5UUVo-OSc,2607
342
+ paasta_tools-1.31.1.dist-info/licenses/LICENSE,sha256=Tcxn8PpeSjHDwUTemLW_thUNxcOOm612dK_no2ebEpo,10837
343
+ paasta_tools-1.31.1.dist-info/METADATA,sha256=bshpsfdnyfqEZIMVyPIFZeHRtmOrYKAeBtZrGLK5NkI,2259
344
+ paasta_tools-1.31.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
345
+ paasta_tools-1.31.1.dist-info/entry_points.txt,sha256=qokGSdKYA6AjtdMM_BjmCAOMghMsjOpcAdL9e4fY6D8,1179
346
+ paasta_tools-1.31.1.dist-info/top_level.txt,sha256=6vZZAZ7bbaDxuXZjNYixDwzkrezpNgDQHpS0ikvFOk4,24
347
+ paasta_tools-1.31.1.dist-info/RECORD,,