paasta-tools 1.35.1__py3-none-any.whl → 1.35.6__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.
- paasta_tools/__init__.py +1 -1
- paasta_tools/cli/cmds/mark_for_deployment.py +1 -1
- paasta_tools/cli/cmds/secret.py +2 -2
- paasta_tools/cli/cmds/spark_run.py +2 -0
- paasta_tools/cli/cmds/status.py +1 -1
- paasta_tools/cli/cmds/validate.py +72 -18
- paasta_tools/contrib/paasta_update_soa_memcpu.py +10 -14
- paasta_tools/kubernetes/application/controller_wrappers.py +23 -2
- paasta_tools/kubernetes_tools.py +14 -9
- paasta_tools/long_running_service_tools.py +4 -0
- paasta_tools/tron_tools.py +3 -0
- paasta_tools/utils.py +11 -1
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/paasta_update_soa_memcpu.py +10 -14
- {paasta_tools-1.35.1.dist-info → paasta_tools-1.35.6.dist-info}/METADATA +2 -2
- {paasta_tools-1.35.1.dist-info → paasta_tools-1.35.6.dist-info}/RECORD +70 -70
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/apply_external_resources.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/bounce_log_latency_parser.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/check_autoscaler_max_instances.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/check_cassandracluster_services_replication.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/check_flink_services_health.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/check_kubernetes_api.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/check_kubernetes_services_replication.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/check_manual_oapi_changes.sh +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/check_oom_events.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/check_orphans.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/check_spark_jobs.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/cleanup_kubernetes_cr.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/cleanup_kubernetes_crd.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/cleanup_kubernetes_jobs.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/create_dynamodb_table.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/create_paasta_playground.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/delete_kubernetes_deployments.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/emit_allocated_cpu_metrics.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/generate_all_deployments +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/generate_authenticating_services.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/generate_deployments_for_service.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/generate_services_file.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/generate_services_yaml.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/get_running_task_allocation.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/habitat_fixer.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/ide_helper.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/is_pod_healthy_in_proxy.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/is_pod_healthy_in_smartstack.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/kill_bad_containers.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/kubernetes_remove_evicted_pods.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/mass-deploy-tag.sh +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/mock_patch_checker.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/paasta_cleanup_remote_run_resources.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/paasta_cleanup_stale_nodes.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/paasta_deploy_tron_jobs +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/paasta_execute_docker_command.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/paasta_secrets_sync.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/paasta_tabcomplete.sh +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/render_template.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/rightsizer_soaconfigs_update.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/service_shard_remove.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/service_shard_update.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/setup_istio_mesh.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/setup_kubernetes_cr.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/setup_kubernetes_crd.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/setup_kubernetes_internal_crd.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/setup_kubernetes_job.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/setup_prometheus_adapter_config.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/shared_ip_check.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/synapse_srv_namespaces_fact.py +0 -0
- {paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/timeouts_metrics_prom.py +0 -0
- {paasta_tools-1.35.1.dist-info → paasta_tools-1.35.6.dist-info}/WHEEL +0 -0
- {paasta_tools-1.35.1.dist-info → paasta_tools-1.35.6.dist-info}/entry_points.txt +0 -0
- {paasta_tools-1.35.1.dist-info → paasta_tools-1.35.6.dist-info}/licenses/LICENSE +0 -0
- {paasta_tools-1.35.1.dist-info → paasta_tools-1.35.6.dist-info}/top_level.txt +0 -0
paasta_tools/__init__.py
CHANGED
|
@@ -1851,7 +1851,7 @@ async def wait_for_deployment(
|
|
|
1851
1851
|
system_paasta_config.get_mark_for_deployment_default_time_before_first_diagnosis()
|
|
1852
1852
|
)
|
|
1853
1853
|
|
|
1854
|
-
with progressbar.ProgressBar(
|
|
1854
|
+
with progressbar.ProgressBar(max_value=total_instances) as bar:
|
|
1855
1855
|
instance_done_futures = []
|
|
1856
1856
|
with concurrent.futures.ThreadPoolExecutor(max_workers=max_workers) as executor:
|
|
1857
1857
|
for cluster, instance_configs in instance_configs_per_cluster.items():
|
paasta_tools/cli/cmds/secret.py
CHANGED
|
@@ -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", "
|
|
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": "
|
|
459
|
+
"vault_auth_method": "okta", # must use Okta to get 2FA push
|
|
460
460
|
},
|
|
461
461
|
)
|
|
462
462
|
secret_provider.write_secret(
|
|
@@ -897,6 +897,8 @@ 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()
|
paasta_tools/cli/cmds/status.py
CHANGED
|
@@ -891,7 +891,7 @@ def _print_flink_status_from_job_manager(
|
|
|
891
891
|
|
|
892
892
|
# Print Flink Costs Link
|
|
893
893
|
output.append(
|
|
894
|
-
f" Flink Cost: https://
|
|
894
|
+
f" Flink Cost: https://app.cloudzero.com/explorer?activeCostType=invoiced_amortized_cost&partitions=costcontext%3AResource%20Summary&dateRange=Last%2030%20Days&costcontext%3AKube%20Paasta%20Cluster={cluster}&costcontext%3APaasta%20Instance={instance}&costcontext%3APaasta%20Service={service}&showRightFlyout=filters"
|
|
895
895
|
)
|
|
896
896
|
|
|
897
897
|
output.append(f"{OUTPUT_HORIZONTAL_RULE}")
|
|
@@ -369,11 +369,9 @@ def get_config_file_dict(file_path: str, use_ruamel: bool = False) -> Dict[Any,
|
|
|
369
369
|
# sets disk: 100 -> an instance uses that template and overwrites
|
|
370
370
|
# it with disk: 1000)
|
|
371
371
|
ruamel_loader.allow_duplicate_keys = True
|
|
372
|
-
# we
|
|
373
|
-
#
|
|
374
|
-
|
|
375
|
-
SafeConstructor.flatten_mapping
|
|
376
|
-
)
|
|
372
|
+
# Note: we do NOT use flatten_mapping here because it breaks simple
|
|
373
|
+
# override patterns. For nested merge patterns, we load a flattened
|
|
374
|
+
# version separately for comment detection only.
|
|
377
375
|
return ruamel_loader.load(config_file)
|
|
378
376
|
else:
|
|
379
377
|
return yaml.safe_load(config_file)
|
|
@@ -637,7 +635,22 @@ def validate_unique_instance_names(service_path):
|
|
|
637
635
|
return check_passed
|
|
638
636
|
|
|
639
637
|
|
|
640
|
-
def
|
|
638
|
+
def _get_config_flattened(file_path: str) -> CommentedMap:
|
|
639
|
+
"""Load config with flatten_mapping enabled (for nested merge pattern comment detection)"""
|
|
640
|
+
config_file = get_file_contents(file_path)
|
|
641
|
+
ruamel_loader = YAML(typ="rt")
|
|
642
|
+
ruamel_loader.allow_duplicate_keys = True
|
|
643
|
+
ruamel_loader.Constructor.flatten_mapping = SafeConstructor.flatten_mapping
|
|
644
|
+
return ruamel_loader.load(config_file)
|
|
645
|
+
|
|
646
|
+
|
|
647
|
+
def _get_comments_for_key(
|
|
648
|
+
data: CommentedMap,
|
|
649
|
+
key: Any,
|
|
650
|
+
full_config: Optional[Dict[Any, Any]] = None,
|
|
651
|
+
key_value: Any = None,
|
|
652
|
+
full_config_flattened: Optional[Dict[Any, Any]] = None,
|
|
653
|
+
) -> Optional[str]:
|
|
641
654
|
# this is a little weird, but ruamel is returning a list that looks like:
|
|
642
655
|
# [None, None, CommentToken(...), None] for some reason instead of just a
|
|
643
656
|
# single string
|
|
@@ -654,6 +667,31 @@ def _get_comments_for_key(data: CommentedMap, key: Any) -> Optional[str]:
|
|
|
654
667
|
|
|
655
668
|
raw_comments = [*_flatten_comments(data.ca.items.get(key, []))]
|
|
656
669
|
if not raw_comments:
|
|
670
|
+
# If we didn't find a comment in the instance itself, check if this key
|
|
671
|
+
# might be inherited from a template. Look for ANY other instance/template
|
|
672
|
+
# in the config that has the same key with the same value and a comment.
|
|
673
|
+
if full_config is not None and key_value is not None:
|
|
674
|
+
for config_key, config_value in full_config.items():
|
|
675
|
+
if isinstance(config_value, CommentedMap):
|
|
676
|
+
if config_value.get(key) == key_value:
|
|
677
|
+
other_comments = [
|
|
678
|
+
*_flatten_comments(config_value.ca.items.get(key, []))
|
|
679
|
+
]
|
|
680
|
+
if other_comments:
|
|
681
|
+
return "".join(other_comments)
|
|
682
|
+
|
|
683
|
+
# If still not found and we have a flattened config, check there
|
|
684
|
+
# (flattened config is needed for nested merges)
|
|
685
|
+
if full_config_flattened is not None:
|
|
686
|
+
for config_key, config_value in full_config_flattened.items():
|
|
687
|
+
if isinstance(config_value, CommentedMap):
|
|
688
|
+
if config_value.get(key) == key_value:
|
|
689
|
+
flattened_comments = [
|
|
690
|
+
*_flatten_comments(config_value.ca.items.get(key, []))
|
|
691
|
+
]
|
|
692
|
+
if flattened_comments:
|
|
693
|
+
return "".join(flattened_comments)
|
|
694
|
+
|
|
657
695
|
# return None so that we don't return an empty string below if there really aren't
|
|
658
696
|
# any comments
|
|
659
697
|
return None
|
|
@@ -802,12 +840,13 @@ def validate_autoscaling_configs(service_path: str) -> bool:
|
|
|
802
840
|
|
|
803
841
|
# we need access to the comments, so we need to read the config with ruamel to be able
|
|
804
842
|
# to actually get them in a "nice" automated fashion
|
|
843
|
+
config_file_path = os.path.join(
|
|
844
|
+
soa_dir,
|
|
845
|
+
service,
|
|
846
|
+
f"{instance_config.get_instance_type()}-{cluster}.yaml",
|
|
847
|
+
)
|
|
805
848
|
config = get_config_file_dict(
|
|
806
|
-
|
|
807
|
-
soa_dir,
|
|
808
|
-
service,
|
|
809
|
-
f"{instance_config.get_instance_type()}-{cluster}.yaml",
|
|
810
|
-
),
|
|
849
|
+
config_file_path,
|
|
811
850
|
use_ruamel=True,
|
|
812
851
|
)
|
|
813
852
|
if config[instance].get("cpus") is None:
|
|
@@ -822,8 +861,15 @@ def validate_autoscaling_configs(service_path: str) -> bool:
|
|
|
822
861
|
# cpu autoscaled, but using autotuned values - can skip
|
|
823
862
|
continue
|
|
824
863
|
|
|
864
|
+
# Load flattened config for comment detection (handles nested merges)
|
|
865
|
+
config_flattened = _get_config_flattened(config_file_path)
|
|
866
|
+
|
|
825
867
|
cpu_comment = _get_comments_for_key(
|
|
826
|
-
data=config[instance],
|
|
868
|
+
data=config[instance],
|
|
869
|
+
key="cpus",
|
|
870
|
+
full_config=config,
|
|
871
|
+
key_value=config[instance].get("cpus"),
|
|
872
|
+
full_config_flattened=config_flattened,
|
|
827
873
|
)
|
|
828
874
|
# we could probably have a separate error message if there's a comment that doesn't match
|
|
829
875
|
# the ack pattern, but that seems like overkill - especially for something that could cause
|
|
@@ -965,12 +1011,13 @@ def validate_cpu_burst(service_path: str) -> bool:
|
|
|
965
1011
|
if is_k8s_service and not should_skip_cpu_burst_validation:
|
|
966
1012
|
# we need access to the comments, so we need to read the config with ruamel to be able
|
|
967
1013
|
# to actually get them in a "nice" automated fashion
|
|
1014
|
+
config_file_path = os.path.join(
|
|
1015
|
+
soa_dir,
|
|
1016
|
+
service,
|
|
1017
|
+
f"{instance_config.get_instance_type()}-{cluster}.yaml",
|
|
1018
|
+
)
|
|
968
1019
|
config = get_config_file_dict(
|
|
969
|
-
|
|
970
|
-
soa_dir,
|
|
971
|
-
service,
|
|
972
|
-
f"{instance_config.get_instance_type()}-{cluster}.yaml",
|
|
973
|
-
),
|
|
1020
|
+
config_file_path,
|
|
974
1021
|
use_ruamel=True,
|
|
975
1022
|
)
|
|
976
1023
|
|
|
@@ -981,8 +1028,15 @@ def validate_cpu_burst(service_path: str) -> bool:
|
|
|
981
1028
|
# under the threshold - can also skip
|
|
982
1029
|
continue
|
|
983
1030
|
|
|
1031
|
+
# Load flattened config for comment detection (handles nested merges)
|
|
1032
|
+
config_flattened = _get_config_flattened(config_file_path)
|
|
1033
|
+
|
|
984
1034
|
burst_comment = _get_comments_for_key(
|
|
985
|
-
data=config[instance],
|
|
1035
|
+
data=config[instance],
|
|
1036
|
+
key="cpu_burst_add",
|
|
1037
|
+
full_config=config,
|
|
1038
|
+
key_value=config[instance].get("cpu_burst_add"),
|
|
1039
|
+
full_config_flattened=config_flattened,
|
|
986
1040
|
)
|
|
987
1041
|
# we could probably have a separate error message if there's a comment that doesn't match
|
|
988
1042
|
# the ack pattern, but that seems like overkill - especially for something that could cause
|
|
@@ -181,6 +181,9 @@ def get_report_from_splunk(creds, app, filename, criteria_filter):
|
|
|
181
181
|
"date": d["result"]["_time"].split(" ")[0],
|
|
182
182
|
"instance": criteria.split(" ")[2],
|
|
183
183
|
"money": d["result"].get("estimated_monthly_savings", 0),
|
|
184
|
+
"old_cpus": d["result"].get("current_cpus"),
|
|
185
|
+
"old_disk": d["result"].get("current_disk"),
|
|
186
|
+
"old_mem": d["result"].get("current_mem"),
|
|
184
187
|
"owner": d["result"].get("service_owner", "Unavailable"),
|
|
185
188
|
"project": d["result"].get("project", "Unavailable"),
|
|
186
189
|
"service": criteria.split(" ")[0],
|
|
@@ -192,24 +195,17 @@ def get_report_from_splunk(creds, app, filename, criteria_filter):
|
|
|
192
195
|
"max_instances": d["result"].get("suggested_max_instances"),
|
|
193
196
|
"mem": d["result"].get("suggested_mem"),
|
|
194
197
|
"min_instances": d["result"].get("suggested_min_instances"),
|
|
195
|
-
"old_cpus": d["result"].get("current_cpus"),
|
|
196
|
-
"old_disk": d["result"].get("current_disk"),
|
|
197
|
-
"old_mem": d["result"].get("current_mem"),
|
|
198
198
|
}
|
|
199
199
|
|
|
200
200
|
# the report we get is all strings, so we need to convert them to the right types
|
|
201
201
|
field_conversions = {
|
|
202
|
-
"
|
|
203
|
-
"
|
|
204
|
-
"
|
|
205
|
-
"
|
|
206
|
-
"
|
|
207
|
-
"
|
|
208
|
-
"
|
|
209
|
-
"suggested_min_instances": int,
|
|
210
|
-
# not quite sure why these are floats...they're ints in soaconfigs
|
|
211
|
-
"current_disk": _force_str_to_int,
|
|
212
|
-
"current_mem": _force_str_to_int,
|
|
202
|
+
"cpus": float,
|
|
203
|
+
"cpu_burst_add": float,
|
|
204
|
+
"disk": int,
|
|
205
|
+
"hacheck_cpus": float,
|
|
206
|
+
"max_instances": int,
|
|
207
|
+
"mem": int,
|
|
208
|
+
"min_instances": int,
|
|
213
209
|
}
|
|
214
210
|
|
|
215
211
|
# merge results if we've already seen rows for this service
|
|
@@ -173,19 +173,31 @@ class Application(ABC):
|
|
|
173
173
|
self, kube_client: KubeClient, namespace: str
|
|
174
174
|
) -> V1PodDisruptionBudget:
|
|
175
175
|
max_unavailable: Union[str, int]
|
|
176
|
+
|
|
177
|
+
system_paasta_config = load_system_paasta_config()
|
|
178
|
+
|
|
176
179
|
if "bounce_margin_factor" in self.soa_config.config_dict:
|
|
177
180
|
max_unavailable = (
|
|
178
181
|
f"{int((1 - self.soa_config.get_bounce_margin_factor()) * 100)}%"
|
|
179
182
|
)
|
|
180
183
|
else:
|
|
181
|
-
system_paasta_config = load_system_paasta_config()
|
|
182
184
|
max_unavailable = system_paasta_config.get_pdb_max_unavailable()
|
|
183
185
|
|
|
186
|
+
if "unhealthy_pod_eviction_policy" in self.soa_config.config_dict:
|
|
187
|
+
unhealthy_pod_eviction_policy = (
|
|
188
|
+
self.soa_config.get_unhealthy_pod_eviction_policy()
|
|
189
|
+
)
|
|
190
|
+
else:
|
|
191
|
+
unhealthy_pod_eviction_policy = (
|
|
192
|
+
system_paasta_config.get_unhealthy_pod_eviction_policy()
|
|
193
|
+
)
|
|
194
|
+
|
|
184
195
|
pdr = pod_disruption_budget_for_service_instance(
|
|
185
196
|
service=self.kube_deployment.service,
|
|
186
197
|
instance=self.kube_deployment.instance,
|
|
187
198
|
max_unavailable=max_unavailable,
|
|
188
199
|
namespace=namespace,
|
|
200
|
+
unhealthy_pod_eviction_policy=unhealthy_pod_eviction_policy,
|
|
189
201
|
)
|
|
190
202
|
try:
|
|
191
203
|
existing_pdr = kube_client.policy.read_namespaced_pod_disruption_budget(
|
|
@@ -198,12 +210,21 @@ class Application(ABC):
|
|
|
198
210
|
raise
|
|
199
211
|
|
|
200
212
|
if existing_pdr:
|
|
213
|
+
"""
|
|
214
|
+
Update the pod disruption budget only if spec.max_unavailable
|
|
215
|
+
or spec.unhealthy_pod_eviction_policy have changed;
|
|
216
|
+
ignore changes to other fields
|
|
217
|
+
"""
|
|
201
218
|
if existing_pdr.spec.min_available is not None:
|
|
202
219
|
logging.info(
|
|
203
220
|
"Not updating poddisruptionbudget: can't have both "
|
|
204
221
|
"min_available and max_unavailable"
|
|
205
222
|
)
|
|
206
|
-
elif
|
|
223
|
+
elif (
|
|
224
|
+
existing_pdr.spec.max_unavailable != pdr.spec.max_unavailable
|
|
225
|
+
or existing_pdr.spec.unhealthy_pod_eviction_policy
|
|
226
|
+
!= pdr.spec.unhealthy_pod_eviction_policy
|
|
227
|
+
):
|
|
207
228
|
logging.info(f"Updating poddisruptionbudget {pdr.metadata.name}")
|
|
208
229
|
return kube_client.policy.patch_namespaced_pod_disruption_budget(
|
|
209
230
|
name=pdr.metadata.name, namespace=pdr.metadata.namespace, body=pdr
|
paasta_tools/kubernetes_tools.py
CHANGED
|
@@ -3374,21 +3374,26 @@ def pod_disruption_budget_for_service_instance(
|
|
|
3374
3374
|
instance: str,
|
|
3375
3375
|
max_unavailable: Union[str, int],
|
|
3376
3376
|
namespace: str,
|
|
3377
|
+
unhealthy_pod_eviction_policy: str,
|
|
3377
3378
|
) -> V1PodDisruptionBudget:
|
|
3379
|
+
selector = V1LabelSelector(
|
|
3380
|
+
match_labels={
|
|
3381
|
+
"paasta.yelp.com/service": service,
|
|
3382
|
+
"paasta.yelp.com/instance": instance,
|
|
3383
|
+
}
|
|
3384
|
+
)
|
|
3385
|
+
spec = V1PodDisruptionBudgetSpec(
|
|
3386
|
+
max_unavailable=max_unavailable,
|
|
3387
|
+
unhealthy_pod_eviction_policy=unhealthy_pod_eviction_policy,
|
|
3388
|
+
selector=selector,
|
|
3389
|
+
)
|
|
3390
|
+
|
|
3378
3391
|
return V1PodDisruptionBudget(
|
|
3379
3392
|
metadata=V1ObjectMeta(
|
|
3380
3393
|
name=get_kubernetes_app_name(service, instance),
|
|
3381
3394
|
namespace=namespace,
|
|
3382
3395
|
),
|
|
3383
|
-
spec=
|
|
3384
|
-
max_unavailable=max_unavailable,
|
|
3385
|
-
selector=V1LabelSelector(
|
|
3386
|
-
match_labels={
|
|
3387
|
-
"paasta.yelp.com/service": service,
|
|
3388
|
-
"paasta.yelp.com/instance": instance,
|
|
3389
|
-
}
|
|
3390
|
-
),
|
|
3391
|
-
),
|
|
3396
|
+
spec=spec,
|
|
3392
3397
|
)
|
|
3393
3398
|
|
|
3394
3399
|
|
|
@@ -88,6 +88,7 @@ class LongRunningServiceConfigDict(InstanceConfigDict, total=False):
|
|
|
88
88
|
bounce_margin_factor: float
|
|
89
89
|
should_ping_for_unhealthy_pods: bool
|
|
90
90
|
weight: int
|
|
91
|
+
unhealthy_pod_eviction_policy: str
|
|
91
92
|
|
|
92
93
|
|
|
93
94
|
class ServiceNamespaceConfig(dict):
|
|
@@ -413,6 +414,9 @@ class LongRunningServiceConfig(InstanceConfig):
|
|
|
413
414
|
def get_bounce_margin_factor(self) -> float:
|
|
414
415
|
return self.config_dict.get("bounce_margin_factor", 0.95)
|
|
415
416
|
|
|
417
|
+
def get_unhealthy_pod_eviction_policy(self) -> str:
|
|
418
|
+
return self.config_dict.get("unhealthy_pod_eviction_policy", "IfHealthyBudget")
|
|
419
|
+
|
|
416
420
|
def get_should_ping_for_unhealthy_pods(self, default: bool) -> bool:
|
|
417
421
|
return self.config_dict.get("should_ping_for_unhealthy_pods", default)
|
|
418
422
|
|
paasta_tools/tron_tools.py
CHANGED
|
@@ -506,6 +506,9 @@ class TronActionConfig(InstanceConfig):
|
|
|
506
506
|
# XXX: update PAASTA_RESOURCE_* env vars to use the correct value from spark_args and set
|
|
507
507
|
# these to the correct values for the executors as part of the driver commandline
|
|
508
508
|
|
|
509
|
+
# our internal Spark configuration service needs this to determine if any special behavior is required
|
|
510
|
+
env["SPARK_DRIVER_TYPE"] = "tron"
|
|
511
|
+
|
|
509
512
|
return env
|
|
510
513
|
|
|
511
514
|
def get_iam_role(self) -> str:
|
paasta_tools/utils.py
CHANGED
|
@@ -2070,6 +2070,7 @@ class SystemPaastaConfigDict(TypedDict, total=False):
|
|
|
2070
2070
|
default_spark_driver_pool_override: str
|
|
2071
2071
|
readonly_docker_registry_auth_file: str
|
|
2072
2072
|
private_docker_registries: List[str]
|
|
2073
|
+
unhealthy_pod_eviction_policy: str
|
|
2073
2074
|
|
|
2074
2075
|
|
|
2075
2076
|
def load_system_paasta_config(
|
|
@@ -2855,6 +2856,15 @@ class SystemPaastaConfig:
|
|
|
2855
2856
|
"""Get all the internal Docker registries without generally-available RO creds."""
|
|
2856
2857
|
return set(self.config_dict.get("private_docker_registries", []))
|
|
2857
2858
|
|
|
2859
|
+
def get_unhealthy_pod_eviction_policy(self) -> str:
|
|
2860
|
+
"""
|
|
2861
|
+
Get the unhealthy pod eviction policy for the cluster. Posible values:
|
|
2862
|
+
* IfHealthyBudget: unhealthy pods will only be evicted wrt to PodDisruptionBudget
|
|
2863
|
+
* AlwaysAllow: evict unhealthy pods regardless of the PodDisruptionBudget status.
|
|
2864
|
+
Defaults to IfHealthyBudget
|
|
2865
|
+
"""
|
|
2866
|
+
return self.config_dict.get("unhealthy_pod_eviction_policy", "IfHealthyBudget")
|
|
2867
|
+
|
|
2858
2868
|
|
|
2859
2869
|
def _run(
|
|
2860
2870
|
command: Union[str, List[str]],
|
|
@@ -3468,7 +3478,7 @@ def get_docker_host() -> str:
|
|
|
3468
3478
|
|
|
3469
3479
|
|
|
3470
3480
|
def get_docker_client() -> APIClient:
|
|
3471
|
-
client_opts = kwargs_from_env(
|
|
3481
|
+
client_opts = kwargs_from_env()
|
|
3472
3482
|
if "base_url" in client_opts:
|
|
3473
3483
|
return APIClient(**client_opts)
|
|
3474
3484
|
else:
|
|
@@ -181,6 +181,9 @@ def get_report_from_splunk(creds, app, filename, criteria_filter):
|
|
|
181
181
|
"date": d["result"]["_time"].split(" ")[0],
|
|
182
182
|
"instance": criteria.split(" ")[2],
|
|
183
183
|
"money": d["result"].get("estimated_monthly_savings", 0),
|
|
184
|
+
"old_cpus": d["result"].get("current_cpus"),
|
|
185
|
+
"old_disk": d["result"].get("current_disk"),
|
|
186
|
+
"old_mem": d["result"].get("current_mem"),
|
|
184
187
|
"owner": d["result"].get("service_owner", "Unavailable"),
|
|
185
188
|
"project": d["result"].get("project", "Unavailable"),
|
|
186
189
|
"service": criteria.split(" ")[0],
|
|
@@ -192,24 +195,17 @@ def get_report_from_splunk(creds, app, filename, criteria_filter):
|
|
|
192
195
|
"max_instances": d["result"].get("suggested_max_instances"),
|
|
193
196
|
"mem": d["result"].get("suggested_mem"),
|
|
194
197
|
"min_instances": d["result"].get("suggested_min_instances"),
|
|
195
|
-
"old_cpus": d["result"].get("current_cpus"),
|
|
196
|
-
"old_disk": d["result"].get("current_disk"),
|
|
197
|
-
"old_mem": d["result"].get("current_mem"),
|
|
198
198
|
}
|
|
199
199
|
|
|
200
200
|
# the report we get is all strings, so we need to convert them to the right types
|
|
201
201
|
field_conversions = {
|
|
202
|
-
"
|
|
203
|
-
"
|
|
204
|
-
"
|
|
205
|
-
"
|
|
206
|
-
"
|
|
207
|
-
"
|
|
208
|
-
"
|
|
209
|
-
"suggested_min_instances": int,
|
|
210
|
-
# not quite sure why these are floats...they're ints in soaconfigs
|
|
211
|
-
"current_disk": _force_str_to_int,
|
|
212
|
-
"current_mem": _force_str_to_int,
|
|
202
|
+
"cpus": float,
|
|
203
|
+
"cpu_burst_add": float,
|
|
204
|
+
"disk": int,
|
|
205
|
+
"hacheck_cpus": float,
|
|
206
|
+
"max_instances": int,
|
|
207
|
+
"mem": int,
|
|
208
|
+
"min_instances": int,
|
|
213
209
|
}
|
|
214
210
|
|
|
215
211
|
# merge results if we've already seen rows for this service
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: paasta-tools
|
|
3
|
-
Version: 1.35.
|
|
3
|
+
Version: 1.35.6
|
|
4
4
|
Summary: Tools for Yelps SOA infrastructure
|
|
5
5
|
Author: Compute Infrastructure @ Yelp
|
|
6
6
|
Author-email: compute-infra@yelp.com
|
|
@@ -54,7 +54,7 @@ Requires-Dist: python-dateutil>=2.4.0
|
|
|
54
54
|
Requires-Dist: python-iptables
|
|
55
55
|
Requires-Dist: pytimeparse>=1.1.0
|
|
56
56
|
Requires-Dist: pytz>=2014.10
|
|
57
|
-
Requires-Dist: requests
|
|
57
|
+
Requires-Dist: requests>=2.18.4
|
|
58
58
|
Requires-Dist: requests-cache>=0.4.10
|
|
59
59
|
Requires-Dist: retry
|
|
60
60
|
Requires-Dist: ruamel.yaml
|
|
@@ -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=
|
|
4
|
+
paasta_tools/__init__.py,sha256=1uC7HaQ-9m8S_NIIHcWYdHXQRQeFFVUzftrJMumI4e8,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=
|
|
47
|
+
paasta_tools/kubernetes_tools.py,sha256=yFZsRtJLU_YIfZKE3F0hGn4PWpaHtmW5wTTYk_et58E,181757
|
|
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=
|
|
50
|
+
paasta_tools/long_running_service_tools.py,sha256=oMimyMLoCO0xfvHpPm6ca0E2sKW_MfVGnVRSdZmqz8Y,26584
|
|
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
|
|
@@ -77,8 +77,8 @@ paasta_tools/slack.py,sha256=WEJsTcr2vCdftG4bVkePNBFaC2hzEzMDwglHA0UC0s8,2700
|
|
|
77
77
|
paasta_tools/smartstack_tools.py,sha256=J0mPialC9KFW9mW0fOUCj040VyowEjQgBI_s13fzEgE,25557
|
|
78
78
|
paasta_tools/spark_tools.py,sha256=qZIa1g9JQrX3Nndd3vsblJ3nfXEhSMyizmOTQfFP2k8,9749
|
|
79
79
|
paasta_tools/synapse_srv_namespaces_fact.py,sha256=XG_Fgr_3D-MaEYkhKyQSmKHbOyZp9zwpevyTX4BOLWE,1421
|
|
80
|
-
paasta_tools/tron_tools.py,sha256=
|
|
81
|
-
paasta_tools/utils.py,sha256=
|
|
80
|
+
paasta_tools/tron_tools.py,sha256=f6yrjnkN0vumMDVvOFYMTuY9_54hBwC0P4Ls-dn0bQs,56063
|
|
81
|
+
paasta_tools/utils.py,sha256=BHeqclWCPtqqHBN5n7pULytA3INPn71V66uLlvjCoQw,149983
|
|
82
82
|
paasta_tools/yaml_tools.py,sha256=4gXbrFQWWihp9edKt4J14MWcdS8r8sYJAsMYmmL3byk,1263
|
|
83
83
|
paasta_tools/api/__init__.py,sha256=H0VmJeHyCSXD9GbiEjjQwcB_sKOcoBiyK-IEJMmtCyQ,578
|
|
84
84
|
paasta_tools/api/api.py,sha256=SwlBbwH9e8ihnBSSkLU65CHrnzyQeDHPfRg_ik5LWZU,9859
|
|
@@ -126,18 +126,18 @@ paasta_tools/cli/cmds/list_deploy_queue.py,sha256=IqtsblfL0LpZyp-cwaRHpo6tAfvo5I
|
|
|
126
126
|
paasta_tools/cli/cmds/list_namespaces.py,sha256=KPszBdsOAqRaPECUF1HgCFm1BYQqfBPTG3dwAsvywm4,3138
|
|
127
127
|
paasta_tools/cli/cmds/local_run.py,sha256=5dUBZR_ziVGHDVhk2NtDO6HPQVYWDywOIjUK55HLwiQ,54541
|
|
128
128
|
paasta_tools/cli/cmds/logs.py,sha256=fx4hdmHssPNRpmqEuyLLxnBAbevrDG-r89VULr89bzE,58922
|
|
129
|
-
paasta_tools/cli/cmds/mark_for_deployment.py,sha256=
|
|
129
|
+
paasta_tools/cli/cmds/mark_for_deployment.py,sha256=Fg5WNA4H5hDHK-_qJwr6TCplnMH3aJoltqMYSEsC5D4,76714
|
|
130
130
|
paasta_tools/cli/cmds/mesh_status.py,sha256=KpNfSomS5Uh98szloSpFh3qn0-IYHq4M37BS92t5mdc,6124
|
|
131
131
|
paasta_tools/cli/cmds/pause_service_autoscaler.py,sha256=3Ie0wTkpRkl-Uja33WzWkPmBa5EJcPxMNAcZ8_P1LSo,3494
|
|
132
132
|
paasta_tools/cli/cmds/push_to_registry.py,sha256=F7hWPY7MFtqznUfmJoQ0QPc5zAF5BS30_FWdQOrIqME,9736
|
|
133
133
|
paasta_tools/cli/cmds/remote_run.py,sha256=4Pf43qmImuWavIjPwiAdOuHyKw9zN9Vex4xNxf0ESPw,16383
|
|
134
134
|
paasta_tools/cli/cmds/rollback.py,sha256=2Wc4JWEudCKRHVWibeASNrF56xJ9xbvANT-_nmCuFHE,13840
|
|
135
|
-
paasta_tools/cli/cmds/secret.py,sha256=
|
|
135
|
+
paasta_tools/cli/cmds/secret.py,sha256=oLuu0_ip1dDwGobncnszMlg2vaPhCJxnDSEh2DVjGdQ,19699
|
|
136
136
|
paasta_tools/cli/cmds/security_check.py,sha256=IEtcM0Hv2BWcavCjWcnPbyfrLcCRYC8jHLiHDj020z4,2377
|
|
137
|
-
paasta_tools/cli/cmds/spark_run.py,sha256=
|
|
137
|
+
paasta_tools/cli/cmds/spark_run.py,sha256=ApxCKLxYH7qFirhO90T_a6y9l_c6AbsDMa5cS2cAzRA,51442
|
|
138
138
|
paasta_tools/cli/cmds/start_stop_restart.py,sha256=MIMShmHer_uPEsLCb3qDaBOYyHSgqDHrLHEVFCcxaE0,14600
|
|
139
|
-
paasta_tools/cli/cmds/status.py,sha256=
|
|
140
|
-
paasta_tools/cli/cmds/validate.py,sha256=
|
|
139
|
+
paasta_tools/cli/cmds/status.py,sha256=Naw1eZMlFgIt1LuLo8lGwB1aLDeifHgUyVltMFAfz1k,87878
|
|
140
|
+
paasta_tools/cli/cmds/validate.py,sha256=6sxAxjbxEIAxG-D_KlN9UhZBgKeoVs5vpyMGXku7w2Q,52495
|
|
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
|
|
@@ -173,7 +173,7 @@ paasta_tools/contrib/is_pod_healthy_in_smartstack.py,sha256=CWNIiwm-1FpXT5hpmZFA
|
|
|
173
173
|
paasta_tools/contrib/kill_bad_containers.py,sha256=DVpemHWcH_gxlXK_9KS5pGOLbgbpwqN04lx1qyC0_Yk,3861
|
|
174
174
|
paasta_tools/contrib/mass-deploy-tag.sh,sha256=cfPgDDvAOhy3ijTUocklogzoIY8hfoE6T5QI-0aqcfM,1578
|
|
175
175
|
paasta_tools/contrib/mock_patch_checker.py,sha256=3FUebvAPiyrlFwjz7BIC5JQBcB9bRLXsq3Y1smftGDk,2576
|
|
176
|
-
paasta_tools/contrib/paasta_update_soa_memcpu.py,sha256=
|
|
176
|
+
paasta_tools/contrib/paasta_update_soa_memcpu.py,sha256=iwriXBQk_x68Yjbmpw5fFhwW58gbGWUSp2VvTRxug2U,20550
|
|
177
177
|
paasta_tools/contrib/render_template.py,sha256=S8_U0zOIQra67RxvqumZ2F0OU8-jXx7Qmd32uQOsM50,3992
|
|
178
178
|
paasta_tools/contrib/rightsizer_soaconfigs_update.py,sha256=0UPVtDyX6wXXurv7l5fiKuzXH8VEszKx_V7UqDm6Ck0,10493
|
|
179
179
|
paasta_tools/contrib/service_shard_remove.py,sha256=WCvCxu3GTYEa3cYnWybTOiuHN14axj0x5_-snVd-mqE,4927
|
|
@@ -189,7 +189,7 @@ paasta_tools/instance/kubernetes.py,sha256=teCBM2Xn-6cp6DJAfMokRc5OXtwbe8gb56ECd
|
|
|
189
189
|
paasta_tools/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
190
190
|
paasta_tools/kubernetes/remote_run.py,sha256=dj_hGNoze4wfMC12l4zHHoMsw9Ae8g30q-0bJLPWyCw,18994
|
|
191
191
|
paasta_tools/kubernetes/application/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
192
|
-
paasta_tools/kubernetes/application/controller_wrappers.py,sha256=
|
|
192
|
+
paasta_tools/kubernetes/application/controller_wrappers.py,sha256=vZL7clRzsWjXgUCDXsu4mijKl7GPEDA6vsqdcsiZKwc,20084
|
|
193
193
|
paasta_tools/kubernetes/application/tools.py,sha256=-qbkn4ynM_LFa-NfiDMFZ3G4jty93DWKbx3_Go3OIIo,3618
|
|
194
194
|
paasta_tools/kubernetes/bin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
195
195
|
paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py,sha256=_IkK7vm3FlOF5hYq1M2Xf5DIu-j5d7HJUVmoVetCB94,5287
|
|
@@ -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.35.
|
|
291
|
-
paasta_tools-1.35.
|
|
292
|
-
paasta_tools-1.35.
|
|
293
|
-
paasta_tools-1.35.
|
|
294
|
-
paasta_tools-1.35.
|
|
295
|
-
paasta_tools-1.35.
|
|
296
|
-
paasta_tools-1.35.
|
|
297
|
-
paasta_tools-1.35.
|
|
298
|
-
paasta_tools-1.35.
|
|
299
|
-
paasta_tools-1.35.
|
|
300
|
-
paasta_tools-1.35.
|
|
301
|
-
paasta_tools-1.35.
|
|
302
|
-
paasta_tools-1.35.
|
|
303
|
-
paasta_tools-1.35.
|
|
304
|
-
paasta_tools-1.35.
|
|
305
|
-
paasta_tools-1.35.
|
|
306
|
-
paasta_tools-1.35.
|
|
307
|
-
paasta_tools-1.35.
|
|
308
|
-
paasta_tools-1.35.
|
|
309
|
-
paasta_tools-1.35.
|
|
310
|
-
paasta_tools-1.35.
|
|
311
|
-
paasta_tools-1.35.
|
|
312
|
-
paasta_tools-1.35.
|
|
313
|
-
paasta_tools-1.35.
|
|
314
|
-
paasta_tools-1.35.
|
|
315
|
-
paasta_tools-1.35.
|
|
316
|
-
paasta_tools-1.35.
|
|
317
|
-
paasta_tools-1.35.
|
|
318
|
-
paasta_tools-1.35.
|
|
319
|
-
paasta_tools-1.35.
|
|
320
|
-
paasta_tools-1.35.
|
|
321
|
-
paasta_tools-1.35.
|
|
322
|
-
paasta_tools-1.35.
|
|
323
|
-
paasta_tools-1.35.
|
|
324
|
-
paasta_tools-1.35.
|
|
325
|
-
paasta_tools-1.35.
|
|
326
|
-
paasta_tools-1.35.
|
|
327
|
-
paasta_tools-1.35.
|
|
328
|
-
paasta_tools-1.35.
|
|
329
|
-
paasta_tools-1.35.
|
|
330
|
-
paasta_tools-1.35.
|
|
331
|
-
paasta_tools-1.35.
|
|
332
|
-
paasta_tools-1.35.
|
|
333
|
-
paasta_tools-1.35.
|
|
334
|
-
paasta_tools-1.35.
|
|
335
|
-
paasta_tools-1.35.
|
|
336
|
-
paasta_tools-1.35.
|
|
337
|
-
paasta_tools-1.35.
|
|
338
|
-
paasta_tools-1.35.
|
|
339
|
-
paasta_tools-1.35.
|
|
340
|
-
paasta_tools-1.35.
|
|
341
|
-
paasta_tools-1.35.
|
|
342
|
-
paasta_tools-1.35.
|
|
343
|
-
paasta_tools-1.35.
|
|
344
|
-
paasta_tools-1.35.
|
|
345
|
-
paasta_tools-1.35.
|
|
346
|
-
paasta_tools-1.35.
|
|
347
|
-
paasta_tools-1.35.
|
|
290
|
+
paasta_tools-1.35.6.data/scripts/apply_external_resources.py,sha256=BOIdCQ5Md9RI3enzqbIWQge3clkXhPybAmLE3hqfDwQ,3347
|
|
291
|
+
paasta_tools-1.35.6.data/scripts/bounce_log_latency_parser.py,sha256=dC06a0a5LdtPJ8xo88QWe5DMH_vwVB1BNbkFH7kJ3j0,2225
|
|
292
|
+
paasta_tools-1.35.6.data/scripts/check_autoscaler_max_instances.py,sha256=2z6ifSU26-ULOK-FXp75b45mCdjSJnuvU8TxvapB8Wk,9423
|
|
293
|
+
paasta_tools-1.35.6.data/scripts/check_cassandracluster_services_replication.py,sha256=mKlCK9pRNzxnOt41wA6CtDQIHhcky438i044kA6pbEc,1127
|
|
294
|
+
paasta_tools-1.35.6.data/scripts/check_flink_services_health.py,sha256=ElYa1hr6KUcXuu0B8Nf-dt2Vfyo5FrwF5gVV4QBX7Lg,7162
|
|
295
|
+
paasta_tools-1.35.6.data/scripts/check_kubernetes_api.py,sha256=BhOqJkkKNJPfonfIPonW5dlIubd1ji-3ppjXHomNwzM,1522
|
|
296
|
+
paasta_tools-1.35.6.data/scripts/check_kubernetes_services_replication.py,sha256=LCLlumReRdy9Cw_sPpqanjPcBlbcrJDiECaYYru5Cwk,5751
|
|
297
|
+
paasta_tools-1.35.6.data/scripts/check_manual_oapi_changes.sh,sha256=1IdphwXP7xnMNS7huZ3FeEHy67-nY4n3ydHmbojQvJg,879
|
|
298
|
+
paasta_tools-1.35.6.data/scripts/check_oom_events.py,sha256=tUr14T2LYEgqwpAq4vkZ_Z0VTPOfQg7yrSSkwGQ86Hg,7801
|
|
299
|
+
paasta_tools-1.35.6.data/scripts/check_orphans.py,sha256=9PmzRUZ1HwCcmTm4J1xTznz7hZl8fKsu1wdXUDufXJs,9984
|
|
300
|
+
paasta_tools-1.35.6.data/scripts/check_spark_jobs.py,sha256=W4HUIbX_ylxl4DlqcdmoRWDbKYgPEr04OM-DLvfnXE8,7316
|
|
301
|
+
paasta_tools-1.35.6.data/scripts/cleanup_kubernetes_cr.py,sha256=m-w_wuTuVG9FlwQQkxXYgri5DTGac9Nc2pbK4k1FNDE,4659
|
|
302
|
+
paasta_tools-1.35.6.data/scripts/cleanup_kubernetes_crd.py,sha256=p9eLk-0-pU-hcVg-GAM92h1ZdQqlvmYhBzUFCiMPYR8,4478
|
|
303
|
+
paasta_tools-1.35.6.data/scripts/cleanup_kubernetes_jobs.py,sha256=7LHB4tsz1kt-zygssIfQbBY6c3LSqXYDUILvHkSfBog,12433
|
|
304
|
+
paasta_tools-1.35.6.data/scripts/create_dynamodb_table.py,sha256=9wJftWGgNtvLnpXeUqpoMXBIIep1hNySf0YiQmzpl5c,1167
|
|
305
|
+
paasta_tools-1.35.6.data/scripts/create_paasta_playground.py,sha256=jzoE5e1pxWeVXwCEkD9O0jefOhEnIlSa3QMP9PC2f0M,3239
|
|
306
|
+
paasta_tools-1.35.6.data/scripts/delete_kubernetes_deployments.py,sha256=de4C-5yqEuCeJXp6zhbc0v-c0LOElr4qabLnOTRcX4o,3124
|
|
307
|
+
paasta_tools-1.35.6.data/scripts/emit_allocated_cpu_metrics.py,sha256=Cjd3xoOJoYSP3ciSAlZ7fh6_z678KpYt43Xh-WVCY1M,1859
|
|
308
|
+
paasta_tools-1.35.6.data/scripts/generate_all_deployments,sha256=Qr5B0zogTOr8Lcn_7dpORixpGIJcXZ_pWz_ZlWnmsik,248
|
|
309
|
+
paasta_tools-1.35.6.data/scripts/generate_authenticating_services.py,sha256=r5AQyquVm8_rbAhBETUU2ZHZvolpqZZTakW3lKFiOqw,2982
|
|
310
|
+
paasta_tools-1.35.6.data/scripts/generate_deployments_for_service.py,sha256=FAFzIAtKY7GsA13s-ssCMH7T-_p9B1pBtyyYFzsCZ6k,9822
|
|
311
|
+
paasta_tools-1.35.6.data/scripts/generate_services_file.py,sha256=w3Wyyn9ZkjfrvkT0SnTbh5mrTZJnjhTC2JIqLBpb6-g,3583
|
|
312
|
+
paasta_tools-1.35.6.data/scripts/generate_services_yaml.py,sha256=XyIUsHa1BPLqeklayaFewX69-6GT_luaSLS_TMDLkQ0,991
|
|
313
|
+
paasta_tools-1.35.6.data/scripts/get_running_task_allocation.py,sha256=NGYO2td42XQOduUmvgz0CZw0ir36bY6fUe3VOR1Ln6E,10876
|
|
314
|
+
paasta_tools-1.35.6.data/scripts/habitat_fixer.py,sha256=hCC7fEnxrBOmiCJj4rPwhGlae9JsYg_gltk10l-FwaE,2625
|
|
315
|
+
paasta_tools-1.35.6.data/scripts/ide_helper.py,sha256=QUVWxIeh54IhTn3HEhBrmJKvtgw6RDv9smoJ-6pZA4c,12348
|
|
316
|
+
paasta_tools-1.35.6.data/scripts/is_pod_healthy_in_proxy.py,sha256=MiY85MJDXcN9oS8d840WG1iYDIzzO9lmk_NC0i_CrQg,4321
|
|
317
|
+
paasta_tools-1.35.6.data/scripts/is_pod_healthy_in_smartstack.py,sha256=z3uP9sgwLwg94BubFgBKare2t1L5qhcY48MWsJxjxPY,1697
|
|
318
|
+
paasta_tools-1.35.6.data/scripts/kill_bad_containers.py,sha256=oNY5x0Zg0eu34cXhFy60I7WRlqg4PKD_6xWi0eoRTCA,3832
|
|
319
|
+
paasta_tools-1.35.6.data/scripts/kubernetes_remove_evicted_pods.py,sha256=D9Ovdc9Xer_Qf3vM5CtPVcKvnMwLiC0H-WQmQGXrBKM,5274
|
|
320
|
+
paasta_tools-1.35.6.data/scripts/mass-deploy-tag.sh,sha256=cfPgDDvAOhy3ijTUocklogzoIY8hfoE6T5QI-0aqcfM,1578
|
|
321
|
+
paasta_tools-1.35.6.data/scripts/mock_patch_checker.py,sha256=Q6Je8QjmfLzdnv_6JR6ehh2kA5SUxmeZGeLI2WC3BSY,2559
|
|
322
|
+
paasta_tools-1.35.6.data/scripts/paasta_cleanup_remote_run_resources.py,sha256=4oN9UwnR7q6aEEyFUhVrT41VSeQJ2YS3upFpbZQXNUI,4558
|
|
323
|
+
paasta_tools-1.35.6.data/scripts/paasta_cleanup_stale_nodes.py,sha256=C-DmEVgtienoMgJnIeESvFqWcJOW2SOGoS1l8RXA8NE,6304
|
|
324
|
+
paasta_tools-1.35.6.data/scripts/paasta_deploy_tron_jobs,sha256=fFN2aP5FNSm5WfDV3yvLpihXaKkAF65MRXFcN2iD7S4,106
|
|
325
|
+
paasta_tools-1.35.6.data/scripts/paasta_execute_docker_command.py,sha256=6kh7h2bleQbNULc37MiRsfnk9MDHqVv30UQdg3rF3kQ,4086
|
|
326
|
+
paasta_tools-1.35.6.data/scripts/paasta_secrets_sync.py,sha256=sMdyWMt9BU5CmWHIRwzhpFKve7zxFHkygt_SNTJutWM,28766
|
|
327
|
+
paasta_tools-1.35.6.data/scripts/paasta_tabcomplete.sh,sha256=qbQKSriz_L4MogA12L_8i-tg0Lplpshbk_FUMjK6uG0,929
|
|
328
|
+
paasta_tools-1.35.6.data/scripts/paasta_update_soa_memcpu.py,sha256=WsbOFy80rbCxTSo4mbn9ok-cIETyBeCyGB8yFAOwdvc,20536
|
|
329
|
+
paasta_tools-1.35.6.data/scripts/render_template.py,sha256=KcKfeSP2a9f6fMDRhnjX7OJaHmFIBtCJcHhUI_B7p9Y,3975
|
|
330
|
+
paasta_tools-1.35.6.data/scripts/rightsizer_soaconfigs_update.py,sha256=0UPVtDyX6wXXurv7l5fiKuzXH8VEszKx_V7UqDm6Ck0,10493
|
|
331
|
+
paasta_tools-1.35.6.data/scripts/service_shard_remove.py,sha256=WCvCxu3GTYEa3cYnWybTOiuHN14axj0x5_-snVd-mqE,4927
|
|
332
|
+
paasta_tools-1.35.6.data/scripts/service_shard_update.py,sha256=AajuRS4s-HXhEcIIYK2dsyBSdCjZbh4x6Po48ipl7M4,13346
|
|
333
|
+
paasta_tools-1.35.6.data/scripts/setup_istio_mesh.py,sha256=LbLxeI_DnhNXkyCgG-GxutlNu9_vcIitorYr4I9x4CY,11575
|
|
334
|
+
paasta_tools-1.35.6.data/scripts/setup_kubernetes_cr.py,sha256=xsZJ_X1YpQ0NExyY1cXFH8KW2_vAgctCwdrW0bu102s,14931
|
|
335
|
+
paasta_tools-1.35.6.data/scripts/setup_kubernetes_crd.py,sha256=QCiFOcSmE0nMEheIb7IUnYMUn0heh1kHyMFBCm7XIRU,4020
|
|
336
|
+
paasta_tools-1.35.6.data/scripts/setup_kubernetes_internal_crd.py,sha256=dDyAOKFow7yeHWGa197angYwGTDWNyR7vZ6Cx5JlS6k,4629
|
|
337
|
+
paasta_tools-1.35.6.data/scripts/setup_kubernetes_job.py,sha256=H2VuRaCpBj-J2Qc3DmIMutGuDL8nlfabshEiCGNNqmY,19095
|
|
338
|
+
paasta_tools-1.35.6.data/scripts/setup_prometheus_adapter_config.py,sha256=JzvztaJ__5MOAV6pD5Vj3mamARh6TZUCzYdlqhWDOOY,43962
|
|
339
|
+
paasta_tools-1.35.6.data/scripts/shared_ip_check.py,sha256=dbMwCwDLy9hCIbVWV1rk0FKuBkZNuQtM59hGVKxV2B4,2464
|
|
340
|
+
paasta_tools-1.35.6.data/scripts/synapse_srv_namespaces_fact.py,sha256=HFX0zIXkXIjtAw8zrA7mUiy6NOKR11eBzE39R3aZv_E,1408
|
|
341
|
+
paasta_tools-1.35.6.data/scripts/timeouts_metrics_prom.py,sha256=icK1j72-e-hvbUGs3LtcaMn9KBMopD9cGv5UUVo-OSc,2607
|
|
342
|
+
paasta_tools-1.35.6.dist-info/licenses/LICENSE,sha256=Tcxn8PpeSjHDwUTemLW_thUNxcOOm612dK_no2ebEpo,10837
|
|
343
|
+
paasta_tools-1.35.6.dist-info/METADATA,sha256=fK7ajdx6QGiMfWBDB-_3Yw4TR56hKBuchASP41L-2vk,2250
|
|
344
|
+
paasta_tools-1.35.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
345
|
+
paasta_tools-1.35.6.dist-info/entry_points.txt,sha256=qokGSdKYA6AjtdMM_BjmCAOMghMsjOpcAdL9e4fY6D8,1179
|
|
346
|
+
paasta_tools-1.35.6.dist-info/top_level.txt,sha256=6vZZAZ7bbaDxuXZjNYixDwzkrezpNgDQHpS0ikvFOk4,24
|
|
347
|
+
paasta_tools-1.35.6.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/check_autoscaler_max_instances.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/check_flink_services_health.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/delete_kubernetes_deployments.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/generate_authenticating_services.py
RENAMED
|
File without changes
|
{paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/generate_deployments_for_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/get_running_task_allocation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/is_pod_healthy_in_smartstack.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/kubernetes_remove_evicted_pods.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/paasta_cleanup_remote_run_resources.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/paasta_execute_docker_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/rightsizer_soaconfigs_update.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/setup_kubernetes_internal_crd.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/setup_prometheus_adapter_config.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta_tools-1.35.1.data → paasta_tools-1.35.6.data}/scripts/synapse_srv_namespaces_fact.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|