paasta-tools 1.34.0__py3-none-any.whl → 1.35.5__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/remote_run.py +9 -0
- 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 +217 -1
- paasta_tools/cli/schemas/smartstack_schema.json +12 -0
- 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.34.0.data → paasta_tools-1.35.5.data}/scripts/paasta_update_soa_memcpu.py +10 -14
- {paasta_tools-1.34.0.dist-info → paasta_tools-1.35.5.dist-info}/METADATA +2 -2
- {paasta_tools-1.34.0.dist-info → paasta_tools-1.35.5.dist-info}/RECORD +72 -72
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/apply_external_resources.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/bounce_log_latency_parser.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/check_autoscaler_max_instances.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/check_cassandracluster_services_replication.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/check_flink_services_health.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/check_kubernetes_api.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/check_kubernetes_services_replication.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/check_manual_oapi_changes.sh +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/check_oom_events.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/check_orphans.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/check_spark_jobs.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/cleanup_kubernetes_cr.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/cleanup_kubernetes_crd.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/cleanup_kubernetes_jobs.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/create_dynamodb_table.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/create_paasta_playground.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/delete_kubernetes_deployments.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/emit_allocated_cpu_metrics.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/generate_all_deployments +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/generate_authenticating_services.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/generate_deployments_for_service.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/generate_services_file.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/generate_services_yaml.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/get_running_task_allocation.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/habitat_fixer.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/ide_helper.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/is_pod_healthy_in_proxy.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/is_pod_healthy_in_smartstack.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/kill_bad_containers.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/kubernetes_remove_evicted_pods.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/mass-deploy-tag.sh +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/mock_patch_checker.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/paasta_cleanup_remote_run_resources.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/paasta_cleanup_stale_nodes.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/paasta_deploy_tron_jobs +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/paasta_execute_docker_command.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/paasta_secrets_sync.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/paasta_tabcomplete.sh +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/render_template.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/rightsizer_soaconfigs_update.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/service_shard_remove.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/service_shard_update.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/setup_istio_mesh.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/setup_kubernetes_cr.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/setup_kubernetes_crd.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/setup_kubernetes_internal_crd.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/setup_kubernetes_job.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/setup_prometheus_adapter_config.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/shared_ip_check.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/synapse_srv_namespaces_fact.py +0 -0
- {paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/timeouts_metrics_prom.py +0 -0
- {paasta_tools-1.34.0.dist-info → paasta_tools-1.35.5.dist-info}/WHEEL +0 -0
- {paasta_tools-1.34.0.dist-info → paasta_tools-1.35.5.dist-info}/entry_points.txt +0 -0
- {paasta_tools-1.34.0.dist-info → paasta_tools-1.35.5.dist-info}/licenses/LICENSE +0 -0
- {paasta_tools-1.34.0.dist-info → paasta_tools-1.35.5.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():
|
|
@@ -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
|
|
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}")
|
|
@@ -22,6 +22,7 @@ from datetime import datetime
|
|
|
22
22
|
from functools import lru_cache
|
|
23
23
|
from functools import partial
|
|
24
24
|
from glob import glob
|
|
25
|
+
from pathlib import Path
|
|
25
26
|
from typing import Any
|
|
26
27
|
from typing import Callable
|
|
27
28
|
from typing import cast
|
|
@@ -34,6 +35,9 @@ from typing import Union
|
|
|
34
35
|
|
|
35
36
|
import pytz
|
|
36
37
|
from croniter import croniter
|
|
38
|
+
from environment_tools.type_utils import available_location_types
|
|
39
|
+
from environment_tools.type_utils import compare_types
|
|
40
|
+
from environment_tools.type_utils import convert_location_type
|
|
37
41
|
from jsonschema import Draft4Validator
|
|
38
42
|
from jsonschema import exceptions
|
|
39
43
|
from jsonschema import FormatChecker
|
|
@@ -121,6 +125,7 @@ SCHEMA_TYPES = {
|
|
|
121
125
|
"rollback", # automatic rollbacks during deployments
|
|
122
126
|
"tron", # batch workloads
|
|
123
127
|
"eks", # eks workloads
|
|
128
|
+
"smartstack", # mesh configs
|
|
124
129
|
"autotuned_defaults/kubernetes",
|
|
125
130
|
"autotuned_defaults/cassandracluster",
|
|
126
131
|
}
|
|
@@ -171,6 +176,26 @@ INVALID_AUTOSCALING_FIELDS = {
|
|
|
171
176
|
METRICS_PROVIDER_PROMQL: {"desired_active_requests_per_replica"},
|
|
172
177
|
}
|
|
173
178
|
|
|
179
|
+
# Listener names in Envoy cannot exceed 128 characters and use the
|
|
180
|
+
# following format:
|
|
181
|
+
# service_name.namespace.listener
|
|
182
|
+
# This naming scheme leaves 128 - 10 = 118 characters
|
|
183
|
+
# for the Smartstack service name and namespace.
|
|
184
|
+
# See COREBACK-6303 for more context.
|
|
185
|
+
MAX_ENVOY_NAME_LEN = 118
|
|
186
|
+
|
|
187
|
+
# Socket names cannot exceed 108 characters, and the longest socket
|
|
188
|
+
# name generated by HAProxy uses the following format:
|
|
189
|
+
# /var/run/synapse/sockets/service_name.namespace.LONGPID.sock.tmp
|
|
190
|
+
# This naming scheme leaves 108 - 43 = 65 characters combined for the
|
|
191
|
+
# Smartstack service name and namespace. We leave a generous buffer
|
|
192
|
+
# to arrive at a maximum name length of 55, in case e.g. the .sock
|
|
193
|
+
# suffix is renamed to a longer name for certain sockets.
|
|
194
|
+
# See SMTSTK-204 for more context.
|
|
195
|
+
# NOTE: the above is mostly still true - but the path we use is now /var/run/envoy/sockets/...
|
|
196
|
+
# so we may want to adjust this a tad in the future ;)
|
|
197
|
+
MAX_SMARTSTACK_NAME_LEN = 55
|
|
198
|
+
|
|
174
199
|
|
|
175
200
|
class ConditionConfig(TypedDict, total=False):
|
|
176
201
|
"""
|
|
@@ -983,6 +1008,191 @@ def validate_cpu_burst(service_path: str) -> bool:
|
|
|
983
1008
|
return returncode
|
|
984
1009
|
|
|
985
1010
|
|
|
1011
|
+
def _check_smartstack_name_length_envoy(service: str, namespace: str) -> None:
|
|
1012
|
+
"""Ensures that Smartstack service name and namespace does not
|
|
1013
|
+
exceed the limit on the length of Envoy's listener names
|
|
1014
|
+
"""
|
|
1015
|
+
if len(service) + len(namespace) > MAX_ENVOY_NAME_LEN:
|
|
1016
|
+
raise ValueError(
|
|
1017
|
+
"Service name and namespace exceeds max listener name length in Envoy. Note that the full listener name "
|
|
1018
|
+
'is "{}.{}.listener". Please rename so that the combined length of the service name and namespace does '
|
|
1019
|
+
"not exceed {} characters".format(service, namespace, MAX_ENVOY_NAME_LEN),
|
|
1020
|
+
)
|
|
1021
|
+
|
|
1022
|
+
|
|
1023
|
+
def _check_smartstack_name_length(service: str, namespace: str) -> None:
|
|
1024
|
+
"""Ensure that Smartstack name does not
|
|
1025
|
+
exceed limits on HAProxy socket name
|
|
1026
|
+
"""
|
|
1027
|
+
if len(service + namespace) > MAX_SMARTSTACK_NAME_LEN:
|
|
1028
|
+
socket_name = "/var/run/synapse/sockets/{}.{}.sock.LONGPID.tmp".format(
|
|
1029
|
+
service,
|
|
1030
|
+
namespace,
|
|
1031
|
+
)
|
|
1032
|
+
raise ValueError(
|
|
1033
|
+
"Name exceeds max socket name length. Note that the full socket name under the HAProxy naming scheme "
|
|
1034
|
+
'is "{}". Please rename so that the combined length of the service name and namespace does not '
|
|
1035
|
+
"exceed {} characters".format(socket_name, MAX_SMARTSTACK_NAME_LEN),
|
|
1036
|
+
)
|
|
1037
|
+
|
|
1038
|
+
|
|
1039
|
+
@lru_cache()
|
|
1040
|
+
def _get_etc_services() -> list[str]:
|
|
1041
|
+
with open("/etc/services") as f:
|
|
1042
|
+
return f.read().splitlines()
|
|
1043
|
+
|
|
1044
|
+
|
|
1045
|
+
@lru_cache()
|
|
1046
|
+
def _get_etc_services_entry(port_lookup: int) -> str | None:
|
|
1047
|
+
entries = _get_etc_services()
|
|
1048
|
+
for entry in entries:
|
|
1049
|
+
try:
|
|
1050
|
+
service = entry.split()[0]
|
|
1051
|
+
port = entry.split()[1]
|
|
1052
|
+
if port.startswith("%s/" % str(port_lookup)):
|
|
1053
|
+
return service
|
|
1054
|
+
except IndexError:
|
|
1055
|
+
continue
|
|
1056
|
+
return None
|
|
1057
|
+
|
|
1058
|
+
|
|
1059
|
+
def _check_proxy_port_in_use(service: str, namespace: str, port: int) -> bool:
|
|
1060
|
+
if port is None:
|
|
1061
|
+
return False
|
|
1062
|
+
|
|
1063
|
+
# TODO(luisp): this should probably check the distributed /nail/etc/services
|
|
1064
|
+
# smartstack.yamls OR we should more automatically manage /etc/services
|
|
1065
|
+
etc_services_entry = _get_etc_services_entry(port)
|
|
1066
|
+
if etc_services_entry is None:
|
|
1067
|
+
return False
|
|
1068
|
+
elif f"{service}.{namespace}" == etc_services_entry:
|
|
1069
|
+
return False
|
|
1070
|
+
else:
|
|
1071
|
+
raise ValueError(
|
|
1072
|
+
(
|
|
1073
|
+
"port {} is already in use by {} according to /etc/services, it cannot be used by "
|
|
1074
|
+
"{}.{}. Please either pick a different port or update /etc/services via puppet"
|
|
1075
|
+
).format(port, etc_services_entry, service, namespace),
|
|
1076
|
+
)
|
|
1077
|
+
|
|
1078
|
+
|
|
1079
|
+
def _check_advertise_discover(
|
|
1080
|
+
smartstack_data: dict[str, Any]
|
|
1081
|
+
) -> None: # XXX: we should use a TypedDict here
|
|
1082
|
+
"""Need to ensure a few properties about smartstack files
|
|
1083
|
+
1) discover is a member of advertise
|
|
1084
|
+
2) discovery and advertise contain valid locations
|
|
1085
|
+
3) extra_advertise contains valid locations
|
|
1086
|
+
4) rhs of extra_advertise are >= discover type
|
|
1087
|
+
"""
|
|
1088
|
+
|
|
1089
|
+
def assert_valid_type(location_type: str) -> None:
|
|
1090
|
+
if location_type not in available_location_types():
|
|
1091
|
+
raise ValueError(
|
|
1092
|
+
'Location type "{}" not a valid Yelp location type'.format(
|
|
1093
|
+
location_type,
|
|
1094
|
+
),
|
|
1095
|
+
)
|
|
1096
|
+
|
|
1097
|
+
def assert_valid_location(location_string: str) -> None:
|
|
1098
|
+
try:
|
|
1099
|
+
typ, loc = location_string.split(":")
|
|
1100
|
+
assert len(convert_location_type(loc, typ, typ)) == 1
|
|
1101
|
+
except Exception:
|
|
1102
|
+
raise ValueError(
|
|
1103
|
+
'Location string "{}" not a valid Yelp location'.format(
|
|
1104
|
+
location_string,
|
|
1105
|
+
),
|
|
1106
|
+
)
|
|
1107
|
+
|
|
1108
|
+
advertise = smartstack_data.get("advertise", ["region"])
|
|
1109
|
+
discover = smartstack_data.get("discover", "region")
|
|
1110
|
+
if discover not in advertise:
|
|
1111
|
+
raise ValueError(
|
|
1112
|
+
'discover key "{}" not a member of advertise "{}"'.format(
|
|
1113
|
+
discover,
|
|
1114
|
+
advertise,
|
|
1115
|
+
),
|
|
1116
|
+
)
|
|
1117
|
+
for location_type in [discover] + advertise:
|
|
1118
|
+
assert_valid_type(location_type)
|
|
1119
|
+
|
|
1120
|
+
extra_advertisements = smartstack_data.get("extra_advertise", {})
|
|
1121
|
+
for source, destinations in extra_advertisements.items():
|
|
1122
|
+
assert_valid_location(source)
|
|
1123
|
+
for destination in destinations:
|
|
1124
|
+
assert_valid_location(destination)
|
|
1125
|
+
dest_type = destination.split(":")[0]
|
|
1126
|
+
if compare_types(dest_type, discover) > 0:
|
|
1127
|
+
raise ValueError(
|
|
1128
|
+
'Right hand side "{}" less general than discover type "{}". Your advertisement would potentially '
|
|
1129
|
+
"result in more hosts seeing your service than intended. Please change the type of your RHS to be "
|
|
1130
|
+
">= the discover type".format(destination, discover),
|
|
1131
|
+
)
|
|
1132
|
+
|
|
1133
|
+
|
|
1134
|
+
def _check_smartstack_valid_proxy(proxied_through: str, soa_dir: str) -> None:
|
|
1135
|
+
"""Checks whether its parameter is a valid Smartstack namespace. Can be used for proxied_through or clb_proxy."""
|
|
1136
|
+
proxy_service, proxy_namespace = proxied_through.split(".")
|
|
1137
|
+
proxy_smartstack_filename = Path(soa_dir) / proxy_service / "smartstack.yaml"
|
|
1138
|
+
try:
|
|
1139
|
+
yaml_data = get_config_file_dict(proxy_smartstack_filename)
|
|
1140
|
+
if proxy_namespace not in yaml_data:
|
|
1141
|
+
raise ValueError(
|
|
1142
|
+
f"{proxied_through} is not a valid Smartstack namespace to proxy through: "
|
|
1143
|
+
f"{proxy_namespace} not found in {proxy_smartstack_filename}.",
|
|
1144
|
+
)
|
|
1145
|
+
except FileNotFoundError:
|
|
1146
|
+
raise ValueError(
|
|
1147
|
+
f"{proxied_through} is not a valid Smartstack namespace to proxy through: "
|
|
1148
|
+
f"{proxy_smartstack_filename} does not exist.",
|
|
1149
|
+
)
|
|
1150
|
+
|
|
1151
|
+
|
|
1152
|
+
def _check_smartstack_proxied_through(
|
|
1153
|
+
smartstack_data: dict[str, Any],
|
|
1154
|
+
soa_dir: str,
|
|
1155
|
+
) -> None: # XXX: we should use a TypedDict here
|
|
1156
|
+
"""Checks the proxied_through field of a Smartstack namespace refers to another valid Smartstack namespace"""
|
|
1157
|
+
if "proxied_through" not in smartstack_data:
|
|
1158
|
+
return
|
|
1159
|
+
|
|
1160
|
+
proxied_through = smartstack_data["proxied_through"]
|
|
1161
|
+
_check_smartstack_valid_proxy(proxied_through, soa_dir)
|
|
1162
|
+
|
|
1163
|
+
|
|
1164
|
+
def validate_smartstack(service_path: str) -> bool:
|
|
1165
|
+
if not os.path.exists(os.path.join(service_path, "smartstack.yaml")):
|
|
1166
|
+
# not every service is mesh-registered, exit early if this is the case
|
|
1167
|
+
return True
|
|
1168
|
+
|
|
1169
|
+
config = get_config_file_dict(os.path.join(service_path, "smartstack.yaml"))
|
|
1170
|
+
if not config:
|
|
1171
|
+
print(
|
|
1172
|
+
failure(
|
|
1173
|
+
"smartstack.yaml is empty - if this service is not mesh-registered, please remove this file.",
|
|
1174
|
+
"http://paasta.readthedocs.io/en/latest/yelpsoa_configs.html",
|
|
1175
|
+
)
|
|
1176
|
+
)
|
|
1177
|
+
return False
|
|
1178
|
+
|
|
1179
|
+
soa_dir, service = path_to_soa_dir_service(service_path)
|
|
1180
|
+
for namespace, namespace_config in config.items():
|
|
1181
|
+
# XXX(luisp): these should all really either return bools or be enforced in the schema
|
|
1182
|
+
# ...i'm mostly leaving these as-is since i'm trying to remove some internal code that
|
|
1183
|
+
# duplicates a bunch of paasta validate checks (i.e., py-gitolite)
|
|
1184
|
+
_check_smartstack_name_length_envoy(service, namespace)
|
|
1185
|
+
if namespace_config["proxy_port"]:
|
|
1186
|
+
_check_smartstack_name_length(service, namespace)
|
|
1187
|
+
proxy_port = namespace_config["proxy_port"]
|
|
1188
|
+
_check_proxy_port_in_use(service, namespace, proxy_port)
|
|
1189
|
+
_check_advertise_discover(namespace_config)
|
|
1190
|
+
_check_smartstack_proxied_through(namespace_config, soa_dir)
|
|
1191
|
+
|
|
1192
|
+
print(success("All SmartStack configs are valid"))
|
|
1193
|
+
return True
|
|
1194
|
+
|
|
1195
|
+
|
|
986
1196
|
def paasta_validate_soa_configs(
|
|
987
1197
|
service: str, service_path: str, verbose: bool = False
|
|
988
1198
|
) -> bool:
|
|
@@ -1005,6 +1215,7 @@ def paasta_validate_soa_configs(
|
|
|
1005
1215
|
validate_secrets,
|
|
1006
1216
|
validate_min_max_instances,
|
|
1007
1217
|
validate_cpu_burst,
|
|
1218
|
+
validate_smartstack,
|
|
1008
1219
|
]
|
|
1009
1220
|
|
|
1010
1221
|
# NOTE: we're explicitly passing a list comprehension to all()
|
|
@@ -1018,8 +1229,13 @@ def paasta_validate(args):
|
|
|
1018
1229
|
|
|
1019
1230
|
:param args: argparse.Namespace obj created from sys.args by cli
|
|
1020
1231
|
"""
|
|
1021
|
-
service_path = get_service_path(args.service, args.yelpsoa_config_root)
|
|
1022
1232
|
service = args.service or guess_service_name()
|
|
1233
|
+
service_path = get_service_path(service, args.yelpsoa_config_root)
|
|
1234
|
+
|
|
1235
|
+
# not much we can do if we have no path to inspect ;)
|
|
1236
|
+
if not service_path:
|
|
1237
|
+
return 1
|
|
1238
|
+
|
|
1023
1239
|
if not paasta_validate_soa_configs(service, service_path, args.verbose):
|
|
1024
1240
|
print("Invalid configs found. Please try again.")
|
|
1025
1241
|
return 1
|
|
@@ -62,6 +62,11 @@
|
|
|
62
62
|
"minimum": 0,
|
|
63
63
|
"maximum": 60000
|
|
64
64
|
},
|
|
65
|
+
"timeout_client_ms": {
|
|
66
|
+
"type": "integer",
|
|
67
|
+
"minimum": 0,
|
|
68
|
+
"maximum": 86400000
|
|
69
|
+
},
|
|
65
70
|
"timeout_server_ms": {
|
|
66
71
|
"type": "integer",
|
|
67
72
|
"minimum": 0,
|
|
@@ -132,6 +137,10 @@
|
|
|
132
137
|
"CLUSTER_PROVIDED"
|
|
133
138
|
]
|
|
134
139
|
},
|
|
140
|
+
"choice_count": {
|
|
141
|
+
"type": "integer",
|
|
142
|
+
"minimum": 1
|
|
143
|
+
},
|
|
135
144
|
"chaos": {
|
|
136
145
|
"type": "object",
|
|
137
146
|
"additionalProperties": {
|
|
@@ -156,6 +165,9 @@
|
|
|
156
165
|
"proxied_through": {
|
|
157
166
|
"type": "string"
|
|
158
167
|
},
|
|
168
|
+
"clb_proxy": {
|
|
169
|
+
"type": "string"
|
|
170
|
+
},
|
|
159
171
|
"fixed_delay": {
|
|
160
172
|
"type": "object",
|
|
161
173
|
"additionalProperties": {
|
|
@@ -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.
|
|
3
|
+
Version: 1.35.5
|
|
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=vyHhw7Ta273K-6gvYGiHIhG3O4UVwKmL16i-Y3Nh1wo,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
|
-
paasta_tools/cli/cmds/remote_run.py,sha256=
|
|
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=2Z0UildDGNnjm3X6eoMsgMlgzfBalUYADweFQeMBHFk,49740
|
|
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
|
|
@@ -154,7 +154,7 @@ paasta_tools/cli/schemas/eks_schema.json,sha256=ZKLsUgcDEMVAaYYhNy0anpwM_zeTrTYm
|
|
|
154
154
|
paasta_tools/cli/schemas/kubernetes_schema.json,sha256=ED9dgIBTDFe57AXcuNqEomv2oqhVmS-Ohuz5rNaqOxM,40763
|
|
155
155
|
paasta_tools/cli/schemas/rollback_schema.json,sha256=LJW9wINcIIa7-QrJmzmFx44OLw4TlLpPdEWuHDxd9cQ,6442
|
|
156
156
|
paasta_tools/cli/schemas/service_schema.json,sha256=6wiKhmd0-i3dGS8QUOkwsIbAWrUkKpiLbmZBve7xLGQ,785
|
|
157
|
-
paasta_tools/cli/schemas/smartstack_schema.json,sha256=
|
|
157
|
+
paasta_tools/cli/schemas/smartstack_schema.json,sha256=Kvoh1E7xXUhCeGgYEe9ZhyrRKdJE9k-8LgmQvRtsB_w,11031
|
|
158
158
|
paasta_tools/cli/schemas/tron_schema.json,sha256=2G0hY8V7odgOhQJWu5k735LMPyzP6rNkU4hK6IqhKRo,28168
|
|
159
159
|
paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json,sha256=W9wKEHLZpGvh5h-MK05Zw-3o0RM2TF645HLdMQligTc,1158
|
|
160
160
|
paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json,sha256=xfaobvcV1WF7YC9YGt7D25a8p3Dv0zIKmGt0L29nPlg,3612
|
|
@@ -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.
|
|
291
|
-
paasta_tools-1.
|
|
292
|
-
paasta_tools-1.
|
|
293
|
-
paasta_tools-1.
|
|
294
|
-
paasta_tools-1.
|
|
295
|
-
paasta_tools-1.
|
|
296
|
-
paasta_tools-1.
|
|
297
|
-
paasta_tools-1.
|
|
298
|
-
paasta_tools-1.
|
|
299
|
-
paasta_tools-1.
|
|
300
|
-
paasta_tools-1.
|
|
301
|
-
paasta_tools-1.
|
|
302
|
-
paasta_tools-1.
|
|
303
|
-
paasta_tools-1.
|
|
304
|
-
paasta_tools-1.
|
|
305
|
-
paasta_tools-1.
|
|
306
|
-
paasta_tools-1.
|
|
307
|
-
paasta_tools-1.
|
|
308
|
-
paasta_tools-1.
|
|
309
|
-
paasta_tools-1.
|
|
310
|
-
paasta_tools-1.
|
|
311
|
-
paasta_tools-1.
|
|
312
|
-
paasta_tools-1.
|
|
313
|
-
paasta_tools-1.
|
|
314
|
-
paasta_tools-1.
|
|
315
|
-
paasta_tools-1.
|
|
316
|
-
paasta_tools-1.
|
|
317
|
-
paasta_tools-1.
|
|
318
|
-
paasta_tools-1.
|
|
319
|
-
paasta_tools-1.
|
|
320
|
-
paasta_tools-1.
|
|
321
|
-
paasta_tools-1.
|
|
322
|
-
paasta_tools-1.
|
|
323
|
-
paasta_tools-1.
|
|
324
|
-
paasta_tools-1.
|
|
325
|
-
paasta_tools-1.
|
|
326
|
-
paasta_tools-1.
|
|
327
|
-
paasta_tools-1.
|
|
328
|
-
paasta_tools-1.
|
|
329
|
-
paasta_tools-1.
|
|
330
|
-
paasta_tools-1.
|
|
331
|
-
paasta_tools-1.
|
|
332
|
-
paasta_tools-1.
|
|
333
|
-
paasta_tools-1.
|
|
334
|
-
paasta_tools-1.
|
|
335
|
-
paasta_tools-1.
|
|
336
|
-
paasta_tools-1.
|
|
337
|
-
paasta_tools-1.
|
|
338
|
-
paasta_tools-1.
|
|
339
|
-
paasta_tools-1.
|
|
340
|
-
paasta_tools-1.
|
|
341
|
-
paasta_tools-1.
|
|
342
|
-
paasta_tools-1.
|
|
343
|
-
paasta_tools-1.
|
|
344
|
-
paasta_tools-1.
|
|
345
|
-
paasta_tools-1.
|
|
346
|
-
paasta_tools-1.
|
|
347
|
-
paasta_tools-1.
|
|
290
|
+
paasta_tools-1.35.5.data/scripts/apply_external_resources.py,sha256=BOIdCQ5Md9RI3enzqbIWQge3clkXhPybAmLE3hqfDwQ,3347
|
|
291
|
+
paasta_tools-1.35.5.data/scripts/bounce_log_latency_parser.py,sha256=dC06a0a5LdtPJ8xo88QWe5DMH_vwVB1BNbkFH7kJ3j0,2225
|
|
292
|
+
paasta_tools-1.35.5.data/scripts/check_autoscaler_max_instances.py,sha256=2z6ifSU26-ULOK-FXp75b45mCdjSJnuvU8TxvapB8Wk,9423
|
|
293
|
+
paasta_tools-1.35.5.data/scripts/check_cassandracluster_services_replication.py,sha256=mKlCK9pRNzxnOt41wA6CtDQIHhcky438i044kA6pbEc,1127
|
|
294
|
+
paasta_tools-1.35.5.data/scripts/check_flink_services_health.py,sha256=ElYa1hr6KUcXuu0B8Nf-dt2Vfyo5FrwF5gVV4QBX7Lg,7162
|
|
295
|
+
paasta_tools-1.35.5.data/scripts/check_kubernetes_api.py,sha256=BhOqJkkKNJPfonfIPonW5dlIubd1ji-3ppjXHomNwzM,1522
|
|
296
|
+
paasta_tools-1.35.5.data/scripts/check_kubernetes_services_replication.py,sha256=LCLlumReRdy9Cw_sPpqanjPcBlbcrJDiECaYYru5Cwk,5751
|
|
297
|
+
paasta_tools-1.35.5.data/scripts/check_manual_oapi_changes.sh,sha256=1IdphwXP7xnMNS7huZ3FeEHy67-nY4n3ydHmbojQvJg,879
|
|
298
|
+
paasta_tools-1.35.5.data/scripts/check_oom_events.py,sha256=tUr14T2LYEgqwpAq4vkZ_Z0VTPOfQg7yrSSkwGQ86Hg,7801
|
|
299
|
+
paasta_tools-1.35.5.data/scripts/check_orphans.py,sha256=9PmzRUZ1HwCcmTm4J1xTznz7hZl8fKsu1wdXUDufXJs,9984
|
|
300
|
+
paasta_tools-1.35.5.data/scripts/check_spark_jobs.py,sha256=W4HUIbX_ylxl4DlqcdmoRWDbKYgPEr04OM-DLvfnXE8,7316
|
|
301
|
+
paasta_tools-1.35.5.data/scripts/cleanup_kubernetes_cr.py,sha256=m-w_wuTuVG9FlwQQkxXYgri5DTGac9Nc2pbK4k1FNDE,4659
|
|
302
|
+
paasta_tools-1.35.5.data/scripts/cleanup_kubernetes_crd.py,sha256=p9eLk-0-pU-hcVg-GAM92h1ZdQqlvmYhBzUFCiMPYR8,4478
|
|
303
|
+
paasta_tools-1.35.5.data/scripts/cleanup_kubernetes_jobs.py,sha256=7LHB4tsz1kt-zygssIfQbBY6c3LSqXYDUILvHkSfBog,12433
|
|
304
|
+
paasta_tools-1.35.5.data/scripts/create_dynamodb_table.py,sha256=9wJftWGgNtvLnpXeUqpoMXBIIep1hNySf0YiQmzpl5c,1167
|
|
305
|
+
paasta_tools-1.35.5.data/scripts/create_paasta_playground.py,sha256=jzoE5e1pxWeVXwCEkD9O0jefOhEnIlSa3QMP9PC2f0M,3239
|
|
306
|
+
paasta_tools-1.35.5.data/scripts/delete_kubernetes_deployments.py,sha256=de4C-5yqEuCeJXp6zhbc0v-c0LOElr4qabLnOTRcX4o,3124
|
|
307
|
+
paasta_tools-1.35.5.data/scripts/emit_allocated_cpu_metrics.py,sha256=Cjd3xoOJoYSP3ciSAlZ7fh6_z678KpYt43Xh-WVCY1M,1859
|
|
308
|
+
paasta_tools-1.35.5.data/scripts/generate_all_deployments,sha256=Qr5B0zogTOr8Lcn_7dpORixpGIJcXZ_pWz_ZlWnmsik,248
|
|
309
|
+
paasta_tools-1.35.5.data/scripts/generate_authenticating_services.py,sha256=r5AQyquVm8_rbAhBETUU2ZHZvolpqZZTakW3lKFiOqw,2982
|
|
310
|
+
paasta_tools-1.35.5.data/scripts/generate_deployments_for_service.py,sha256=FAFzIAtKY7GsA13s-ssCMH7T-_p9B1pBtyyYFzsCZ6k,9822
|
|
311
|
+
paasta_tools-1.35.5.data/scripts/generate_services_file.py,sha256=w3Wyyn9ZkjfrvkT0SnTbh5mrTZJnjhTC2JIqLBpb6-g,3583
|
|
312
|
+
paasta_tools-1.35.5.data/scripts/generate_services_yaml.py,sha256=XyIUsHa1BPLqeklayaFewX69-6GT_luaSLS_TMDLkQ0,991
|
|
313
|
+
paasta_tools-1.35.5.data/scripts/get_running_task_allocation.py,sha256=NGYO2td42XQOduUmvgz0CZw0ir36bY6fUe3VOR1Ln6E,10876
|
|
314
|
+
paasta_tools-1.35.5.data/scripts/habitat_fixer.py,sha256=hCC7fEnxrBOmiCJj4rPwhGlae9JsYg_gltk10l-FwaE,2625
|
|
315
|
+
paasta_tools-1.35.5.data/scripts/ide_helper.py,sha256=QUVWxIeh54IhTn3HEhBrmJKvtgw6RDv9smoJ-6pZA4c,12348
|
|
316
|
+
paasta_tools-1.35.5.data/scripts/is_pod_healthy_in_proxy.py,sha256=MiY85MJDXcN9oS8d840WG1iYDIzzO9lmk_NC0i_CrQg,4321
|
|
317
|
+
paasta_tools-1.35.5.data/scripts/is_pod_healthy_in_smartstack.py,sha256=z3uP9sgwLwg94BubFgBKare2t1L5qhcY48MWsJxjxPY,1697
|
|
318
|
+
paasta_tools-1.35.5.data/scripts/kill_bad_containers.py,sha256=oNY5x0Zg0eu34cXhFy60I7WRlqg4PKD_6xWi0eoRTCA,3832
|
|
319
|
+
paasta_tools-1.35.5.data/scripts/kubernetes_remove_evicted_pods.py,sha256=D9Ovdc9Xer_Qf3vM5CtPVcKvnMwLiC0H-WQmQGXrBKM,5274
|
|
320
|
+
paasta_tools-1.35.5.data/scripts/mass-deploy-tag.sh,sha256=cfPgDDvAOhy3ijTUocklogzoIY8hfoE6T5QI-0aqcfM,1578
|
|
321
|
+
paasta_tools-1.35.5.data/scripts/mock_patch_checker.py,sha256=Q6Je8QjmfLzdnv_6JR6ehh2kA5SUxmeZGeLI2WC3BSY,2559
|
|
322
|
+
paasta_tools-1.35.5.data/scripts/paasta_cleanup_remote_run_resources.py,sha256=4oN9UwnR7q6aEEyFUhVrT41VSeQJ2YS3upFpbZQXNUI,4558
|
|
323
|
+
paasta_tools-1.35.5.data/scripts/paasta_cleanup_stale_nodes.py,sha256=C-DmEVgtienoMgJnIeESvFqWcJOW2SOGoS1l8RXA8NE,6304
|
|
324
|
+
paasta_tools-1.35.5.data/scripts/paasta_deploy_tron_jobs,sha256=fFN2aP5FNSm5WfDV3yvLpihXaKkAF65MRXFcN2iD7S4,106
|
|
325
|
+
paasta_tools-1.35.5.data/scripts/paasta_execute_docker_command.py,sha256=6kh7h2bleQbNULc37MiRsfnk9MDHqVv30UQdg3rF3kQ,4086
|
|
326
|
+
paasta_tools-1.35.5.data/scripts/paasta_secrets_sync.py,sha256=sMdyWMt9BU5CmWHIRwzhpFKve7zxFHkygt_SNTJutWM,28766
|
|
327
|
+
paasta_tools-1.35.5.data/scripts/paasta_tabcomplete.sh,sha256=qbQKSriz_L4MogA12L_8i-tg0Lplpshbk_FUMjK6uG0,929
|
|
328
|
+
paasta_tools-1.35.5.data/scripts/paasta_update_soa_memcpu.py,sha256=WsbOFy80rbCxTSo4mbn9ok-cIETyBeCyGB8yFAOwdvc,20536
|
|
329
|
+
paasta_tools-1.35.5.data/scripts/render_template.py,sha256=KcKfeSP2a9f6fMDRhnjX7OJaHmFIBtCJcHhUI_B7p9Y,3975
|
|
330
|
+
paasta_tools-1.35.5.data/scripts/rightsizer_soaconfigs_update.py,sha256=0UPVtDyX6wXXurv7l5fiKuzXH8VEszKx_V7UqDm6Ck0,10493
|
|
331
|
+
paasta_tools-1.35.5.data/scripts/service_shard_remove.py,sha256=WCvCxu3GTYEa3cYnWybTOiuHN14axj0x5_-snVd-mqE,4927
|
|
332
|
+
paasta_tools-1.35.5.data/scripts/service_shard_update.py,sha256=AajuRS4s-HXhEcIIYK2dsyBSdCjZbh4x6Po48ipl7M4,13346
|
|
333
|
+
paasta_tools-1.35.5.data/scripts/setup_istio_mesh.py,sha256=LbLxeI_DnhNXkyCgG-GxutlNu9_vcIitorYr4I9x4CY,11575
|
|
334
|
+
paasta_tools-1.35.5.data/scripts/setup_kubernetes_cr.py,sha256=xsZJ_X1YpQ0NExyY1cXFH8KW2_vAgctCwdrW0bu102s,14931
|
|
335
|
+
paasta_tools-1.35.5.data/scripts/setup_kubernetes_crd.py,sha256=QCiFOcSmE0nMEheIb7IUnYMUn0heh1kHyMFBCm7XIRU,4020
|
|
336
|
+
paasta_tools-1.35.5.data/scripts/setup_kubernetes_internal_crd.py,sha256=dDyAOKFow7yeHWGa197angYwGTDWNyR7vZ6Cx5JlS6k,4629
|
|
337
|
+
paasta_tools-1.35.5.data/scripts/setup_kubernetes_job.py,sha256=H2VuRaCpBj-J2Qc3DmIMutGuDL8nlfabshEiCGNNqmY,19095
|
|
338
|
+
paasta_tools-1.35.5.data/scripts/setup_prometheus_adapter_config.py,sha256=JzvztaJ__5MOAV6pD5Vj3mamARh6TZUCzYdlqhWDOOY,43962
|
|
339
|
+
paasta_tools-1.35.5.data/scripts/shared_ip_check.py,sha256=dbMwCwDLy9hCIbVWV1rk0FKuBkZNuQtM59hGVKxV2B4,2464
|
|
340
|
+
paasta_tools-1.35.5.data/scripts/synapse_srv_namespaces_fact.py,sha256=HFX0zIXkXIjtAw8zrA7mUiy6NOKR11eBzE39R3aZv_E,1408
|
|
341
|
+
paasta_tools-1.35.5.data/scripts/timeouts_metrics_prom.py,sha256=icK1j72-e-hvbUGs3LtcaMn9KBMopD9cGv5UUVo-OSc,2607
|
|
342
|
+
paasta_tools-1.35.5.dist-info/licenses/LICENSE,sha256=Tcxn8PpeSjHDwUTemLW_thUNxcOOm612dK_no2ebEpo,10837
|
|
343
|
+
paasta_tools-1.35.5.dist-info/METADATA,sha256=pMjJ86MofTz2YR62FThTv7LV8fp-Wj3GTBEqNbBTM78,2250
|
|
344
|
+
paasta_tools-1.35.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
345
|
+
paasta_tools-1.35.5.dist-info/entry_points.txt,sha256=qokGSdKYA6AjtdMM_BjmCAOMghMsjOpcAdL9e4fY6D8,1179
|
|
346
|
+
paasta_tools-1.35.5.dist-info/top_level.txt,sha256=6vZZAZ7bbaDxuXZjNYixDwzkrezpNgDQHpS0ikvFOk4,24
|
|
347
|
+
paasta_tools-1.35.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/check_autoscaler_max_instances.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta_tools-1.34.0.data → paasta_tools-1.35.5.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.34.0.data → paasta_tools-1.35.5.data}/scripts/delete_kubernetes_deployments.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/generate_authenticating_services.py
RENAMED
|
File without changes
|
{paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/generate_deployments_for_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/get_running_task_allocation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/is_pod_healthy_in_smartstack.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/kubernetes_remove_evicted_pods.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/paasta_cleanup_remote_run_resources.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/paasta_execute_docker_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.34.0.data → paasta_tools-1.35.5.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.34.0.data → paasta_tools-1.35.5.data}/scripts/setup_kubernetes_internal_crd.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta_tools-1.34.0.data → paasta_tools-1.35.5.data}/scripts/setup_prometheus_adapter_config.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta_tools-1.34.0.data → paasta_tools-1.35.5.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
|