paasta-tools 1.33.4__py3-none-any.whl → 1.35.0__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/validate.py +217 -1
- paasta_tools/cli/schemas/eks_schema.json +23 -1
- paasta_tools/cli/schemas/smartstack_schema.json +12 -0
- paasta_tools/instance/hpa_metrics_parser.py +3 -5
- paasta_tools/kubernetes/remote_run.py +2 -2
- paasta_tools/kubernetes_tools.py +7 -3
- paasta_tools/utils.py +1 -0
- {paasta_tools-1.33.4.dist-info → paasta_tools-1.35.0.dist-info}/METADATA +2 -2
- {paasta_tools-1.33.4.dist-info → paasta_tools-1.35.0.dist-info}/RECORD +66 -66
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/apply_external_resources.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/bounce_log_latency_parser.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/check_autoscaler_max_instances.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/check_cassandracluster_services_replication.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/check_flink_services_health.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/check_kubernetes_api.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/check_kubernetes_services_replication.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/check_manual_oapi_changes.sh +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/check_oom_events.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/check_orphans.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/check_spark_jobs.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/cleanup_kubernetes_cr.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/cleanup_kubernetes_crd.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/cleanup_kubernetes_jobs.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/create_dynamodb_table.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/create_paasta_playground.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/delete_kubernetes_deployments.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/emit_allocated_cpu_metrics.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/generate_all_deployments +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/generate_authenticating_services.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/generate_deployments_for_service.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/generate_services_file.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/generate_services_yaml.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/get_running_task_allocation.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/habitat_fixer.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/ide_helper.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/is_pod_healthy_in_proxy.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/is_pod_healthy_in_smartstack.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/kill_bad_containers.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/kubernetes_remove_evicted_pods.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/mass-deploy-tag.sh +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/mock_patch_checker.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/paasta_cleanup_remote_run_resources.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/paasta_cleanup_stale_nodes.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/paasta_deploy_tron_jobs +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/paasta_execute_docker_command.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/paasta_secrets_sync.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/paasta_tabcomplete.sh +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/paasta_update_soa_memcpu.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/render_template.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/rightsizer_soaconfigs_update.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/service_shard_remove.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/service_shard_update.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/setup_istio_mesh.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/setup_kubernetes_cr.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/setup_kubernetes_crd.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/setup_kubernetes_internal_crd.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/setup_kubernetes_job.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/setup_prometheus_adapter_config.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/shared_ip_check.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/synapse_srv_namespaces_fact.py +0 -0
- {paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/timeouts_metrics_prom.py +0 -0
- {paasta_tools-1.33.4.dist-info → paasta_tools-1.35.0.dist-info}/WHEEL +0 -0
- {paasta_tools-1.33.4.dist-info → paasta_tools-1.35.0.dist-info}/entry_points.txt +0 -0
- {paasta_tools-1.33.4.dist-info → paasta_tools-1.35.0.dist-info}/licenses/LICENSE +0 -0
- {paasta_tools-1.33.4.dist-info → paasta_tools-1.35.0.dist-info}/top_level.txt +0 -0
paasta_tools/__init__.py
CHANGED
|
@@ -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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json-schema.org/draft-04/schema#",
|
|
3
|
-
"description": "http://paasta.readthedocs.io/en/latest/yelpsoa_configs.html#
|
|
3
|
+
"description": "http://paasta.readthedocs.io/en/latest/yelpsoa_configs.html#eks-clustername-yaml",
|
|
4
4
|
"type": "object",
|
|
5
5
|
"additionalProperties": false,
|
|
6
6
|
"minProperties": 1,
|
|
@@ -955,6 +955,28 @@
|
|
|
955
955
|
},
|
|
956
956
|
"max_skew": {
|
|
957
957
|
"type": "integer"
|
|
958
|
+
},
|
|
959
|
+
"match_label_keys": {
|
|
960
|
+
"type": "array",
|
|
961
|
+
"items": {
|
|
962
|
+
"allOf": [
|
|
963
|
+
{
|
|
964
|
+
"type": "string",
|
|
965
|
+
"pattern": "^([a-zA-Z0-9]([-a-zA-Z0-9_.]*[a-zA-Z0-9])?/)?[a-zA-Z0-9]([-a-zA-Z0-9_.]*[a-zA-Z0-9])?$",
|
|
966
|
+
"maxLength": 63
|
|
967
|
+
},
|
|
968
|
+
{
|
|
969
|
+
"not": {
|
|
970
|
+
"enum": [
|
|
971
|
+
"paasta.yelp.com/service",
|
|
972
|
+
"paasta.yelp.com/instance"
|
|
973
|
+
]
|
|
974
|
+
}
|
|
975
|
+
}
|
|
976
|
+
],
|
|
977
|
+
"$comment": "Valid Kubernetes label key: optional prefix (DNS subdomain) followed by '/' and name segment (max 63 chars each)"
|
|
978
|
+
},
|
|
979
|
+
"uniqueItems": true
|
|
958
980
|
}
|
|
959
981
|
},
|
|
960
982
|
"required": []
|
|
@@ -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": {
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
from typing import Optional
|
|
2
2
|
|
|
3
|
-
from kubernetes.client
|
|
4
|
-
V2beta2ObjectMetricStatus,
|
|
5
|
-
)
|
|
3
|
+
from kubernetes.client import V2ObjectMetricStatus
|
|
6
4
|
from mypy_extensions import TypedDict
|
|
7
5
|
|
|
8
6
|
|
|
@@ -102,7 +100,7 @@ class HPAMetricsParser:
|
|
|
102
100
|
)
|
|
103
101
|
|
|
104
102
|
def parse_object_metric(
|
|
105
|
-
self, metric_spec:
|
|
103
|
+
self, metric_spec: V2ObjectMetricStatus, status: HPAMetricsDict
|
|
106
104
|
) -> None:
|
|
107
105
|
status["name"] = metric_spec.metric.name
|
|
108
106
|
status["target_value"] = (
|
|
@@ -112,7 +110,7 @@ class HPAMetricsParser:
|
|
|
112
110
|
)
|
|
113
111
|
|
|
114
112
|
def parse_object_metric_current(
|
|
115
|
-
self, metric_spec:
|
|
113
|
+
self, metric_spec: V2ObjectMetricStatus, status: HPAMetricsDict
|
|
116
114
|
) -> None:
|
|
117
115
|
status["name"] = metric_spec.metric.name
|
|
118
116
|
status["current_value"] = (
|
|
@@ -20,6 +20,7 @@ from typing import Sequence
|
|
|
20
20
|
from typing import TypedDict
|
|
21
21
|
|
|
22
22
|
from kubernetes.client import AuthenticationV1TokenRequest
|
|
23
|
+
from kubernetes.client import RbacV1Subject
|
|
23
24
|
from kubernetes.client import V1Job
|
|
24
25
|
from kubernetes.client import V1ObjectMeta
|
|
25
26
|
from kubernetes.client import V1Pod
|
|
@@ -28,7 +29,6 @@ from kubernetes.client import V1Role
|
|
|
28
29
|
from kubernetes.client import V1RoleBinding
|
|
29
30
|
from kubernetes.client import V1RoleRef
|
|
30
31
|
from kubernetes.client import V1ServiceAccount
|
|
31
|
-
from kubernetes.client import V1Subject
|
|
32
32
|
from kubernetes.client import V1TokenRequestSpec
|
|
33
33
|
from kubernetes.client.exceptions import ApiException
|
|
34
34
|
|
|
@@ -522,7 +522,7 @@ def bind_role_to_service_account(
|
|
|
522
522
|
name=role,
|
|
523
523
|
),
|
|
524
524
|
subjects=[
|
|
525
|
-
|
|
525
|
+
RbacV1Subject(
|
|
526
526
|
kind="ServiceAccount",
|
|
527
527
|
name=service_account,
|
|
528
528
|
),
|
paasta_tools/kubernetes_tools.py
CHANGED
|
@@ -50,6 +50,7 @@ from kubernetes import client as kube_client
|
|
|
50
50
|
from kubernetes import config as kube_config
|
|
51
51
|
from kubernetes.client import CoreV1Event
|
|
52
52
|
from kubernetes.client import models
|
|
53
|
+
from kubernetes.client import RbacV1Subject
|
|
53
54
|
from kubernetes.client import V1Affinity
|
|
54
55
|
from kubernetes.client import V1AWSElasticBlockStoreVolumeSource
|
|
55
56
|
from kubernetes.client import V1Capabilities
|
|
@@ -113,7 +114,6 @@ from kubernetes.client import V1ServiceAccount
|
|
|
113
114
|
from kubernetes.client import V1ServiceAccountTokenProjection
|
|
114
115
|
from kubernetes.client import V1StatefulSet
|
|
115
116
|
from kubernetes.client import V1StatefulSetSpec
|
|
116
|
-
from kubernetes.client import V1Subject
|
|
117
117
|
from kubernetes.client import V1TCPSocketAction
|
|
118
118
|
from kubernetes.client import V1TopologySpreadConstraint
|
|
119
119
|
from kubernetes.client import V1Volume
|
|
@@ -2992,7 +2992,7 @@ def ensure_paasta_api_rolebinding(kube_client: KubeClient, namespace: str) -> No
|
|
|
2992
2992
|
name="paasta-api-server-per-namespace",
|
|
2993
2993
|
),
|
|
2994
2994
|
subjects=[
|
|
2995
|
-
|
|
2995
|
+
RbacV1Subject(
|
|
2996
2996
|
kind="User",
|
|
2997
2997
|
name="yelp.com/paasta-api-server",
|
|
2998
2998
|
),
|
|
@@ -4172,6 +4172,10 @@ def create_pod_topology_spread_constraints(
|
|
|
4172
4172
|
when_unsatisfiable=constraint.get(
|
|
4173
4173
|
"when_unsatisfiable", "ScheduleAnyway"
|
|
4174
4174
|
),
|
|
4175
|
+
# we might want to default this to someting else in the future
|
|
4176
|
+
# but for now, make this opt-in
|
|
4177
|
+
# (null or empty list means only match against the labelSelector)
|
|
4178
|
+
match_label_keys=constraint.get("match_label_keys", None),
|
|
4175
4179
|
)
|
|
4176
4180
|
)
|
|
4177
4181
|
|
|
@@ -4375,7 +4379,7 @@ def ensure_service_account(
|
|
|
4375
4379
|
name=k8s_role,
|
|
4376
4380
|
),
|
|
4377
4381
|
subjects=[
|
|
4378
|
-
|
|
4382
|
+
RbacV1Subject(
|
|
4379
4383
|
kind="ServiceAccount",
|
|
4380
4384
|
namespace=namespace,
|
|
4381
4385
|
name=sa_name,
|
paasta_tools/utils.py
CHANGED
|
@@ -1950,6 +1950,7 @@ class TopologySpreadConstraintDict(TypedDict, total=False):
|
|
|
1950
1950
|
topology_key: str
|
|
1951
1951
|
when_unsatisfiable: Literal["ScheduleAnyway", "DoNotSchedule"]
|
|
1952
1952
|
max_skew: int
|
|
1953
|
+
match_label_keys: List[str]
|
|
1953
1954
|
|
|
1954
1955
|
|
|
1955
1956
|
class SystemPaastaConfigDict(TypedDict, total=False):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: paasta-tools
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.35.0
|
|
4
4
|
Summary: Tools for Yelps SOA infrastructure
|
|
5
5
|
Author: Compute Infrastructure @ Yelp
|
|
6
6
|
Author-email: compute-infra@yelp.com
|
|
@@ -34,7 +34,7 @@ Requires-Dist: ipaddress>=1.0.22
|
|
|
34
34
|
Requires-Dist: isodate>=0.7.2
|
|
35
35
|
Requires-Dist: jsonschema[format]
|
|
36
36
|
Requires-Dist: kazoo>=2.0.0
|
|
37
|
-
Requires-Dist: kubernetes<
|
|
37
|
+
Requires-Dist: kubernetes<35.0.0,>=29.0.0
|
|
38
38
|
Requires-Dist: ldap3
|
|
39
39
|
Requires-Dist: manhole
|
|
40
40
|
Requires-Dist: mypy-extensions>=0.3.0
|
|
@@ -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=OHNQAVWBDTjpYwvUv2yT_ymseoY56x-Vc9cF-ojcPPk,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,7 +44,7 @@ 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=yUoWHz7dtiILz3w4x96doQsJjqShHDTjkQabiwA0AQ4,181659
|
|
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
50
|
paasta_tools/long_running_service_tools.py,sha256=RphI6rDE4BK2zN2bfM900abuj7kDn7YXUcMq4pQVyO4,26400
|
|
@@ -78,7 +78,7 @@ paasta_tools/smartstack_tools.py,sha256=J0mPialC9KFW9mW0fOUCj040VyowEjQgBI_s13fz
|
|
|
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
80
|
paasta_tools/tron_tools.py,sha256=XJjuLp98zdaJeZt7Wg55t7G8lhTffL5HuA1G_mkiekA,55901
|
|
81
|
-
paasta_tools/utils.py,sha256=
|
|
81
|
+
paasta_tools/utils.py,sha256=zgcrS2bc5sP_LIfOEs1olzXChArxp8TSIOiTMzDpmlo,149501
|
|
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
|
|
@@ -137,7 +137,7 @@ paasta_tools/cli/cmds/security_check.py,sha256=IEtcM0Hv2BWcavCjWcnPbyfrLcCRYC8jH
|
|
|
137
137
|
paasta_tools/cli/cmds/spark_run.py,sha256=NEPPCf5pvkW0Kn9SKAaazZn3ge4HhidWVAm-hEQybnk,51355
|
|
138
138
|
paasta_tools/cli/cmds/start_stop_restart.py,sha256=MIMShmHer_uPEsLCb3qDaBOYyHSgqDHrLHEVFCcxaE0,14600
|
|
139
139
|
paasta_tools/cli/cmds/status.py,sha256=c3AlD3nhR638nk0KD5PV_ULG3Yr39T0SvZBbR1kFa20,87784
|
|
140
|
-
paasta_tools/cli/cmds/validate.py,sha256=
|
|
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
|
|
@@ -150,11 +150,11 @@ paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml,sha256=wu
|
|
|
150
150
|
paasta_tools/cli/schemas/adhoc_schema.json,sha256=AYQ-yt_E7Px2JXLIInyEVCtEHT6UaWwIt_UuhGyqNFQ,6996
|
|
151
151
|
paasta_tools/cli/schemas/autoscaling_schema.json,sha256=-JzNBjfEqynrMyWwb7X6h6RHsd_DoghsiH6gqxxQWcE,2842
|
|
152
152
|
paasta_tools/cli/schemas/deploy_schema.json,sha256=NwxiTm-rncX4n5ql3mJ09pj2zfG5pDfFJnANP7A0XSM,5301
|
|
153
|
-
paasta_tools/cli/schemas/eks_schema.json,sha256=
|
|
153
|
+
paasta_tools/cli/schemas/eks_schema.json,sha256=ZKLsUgcDEMVAaYYhNy0anpwM_zeTrTYmd3nIZtX_I40,42066
|
|
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
|
|
@@ -184,10 +184,10 @@ paasta_tools/frameworks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG
|
|
|
184
184
|
paasta_tools/frameworks/constraints.py,sha256=1ctyAzrAZlplcJp9pQ4zSuc-by988bQJrSdwxHOLsWY,2969
|
|
185
185
|
paasta_tools/frameworks/native_service_config.py,sha256=C9fThwq2g0TnNQhRbK5Pz3RwfO23GLUZWFKwh8KdAUE,9182
|
|
186
186
|
paasta_tools/instance/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
187
|
-
paasta_tools/instance/hpa_metrics_parser.py,sha256=
|
|
187
|
+
paasta_tools/instance/hpa_metrics_parser.py,sha256=EtV-DB5Ty1uNeQwy3qnUxCytpJPKwy8h0gR20Y15w2U,4311
|
|
188
188
|
paasta_tools/instance/kubernetes.py,sha256=teCBM2Xn-6cp6DJAfMokRc5OXtwbe8gb56ECdIUGFME,49113
|
|
189
189
|
paasta_tools/kubernetes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
190
|
-
paasta_tools/kubernetes/remote_run.py,sha256=
|
|
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
192
|
paasta_tools/kubernetes/application/controller_wrappers.py,sha256=H43lZoTIT94ZAU6ZSBGc21YzVkJuxPtA5Y3MSJYJ3k4,19292
|
|
193
193
|
paasta_tools/kubernetes/application/tools.py,sha256=-qbkn4ynM_LFa-NfiDMFZ3G4jty93DWKbx3_Go3OIIo,3618
|
|
@@ -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.0.data/scripts/apply_external_resources.py,sha256=BOIdCQ5Md9RI3enzqbIWQge3clkXhPybAmLE3hqfDwQ,3347
|
|
291
|
+
paasta_tools-1.35.0.data/scripts/bounce_log_latency_parser.py,sha256=dC06a0a5LdtPJ8xo88QWe5DMH_vwVB1BNbkFH7kJ3j0,2225
|
|
292
|
+
paasta_tools-1.35.0.data/scripts/check_autoscaler_max_instances.py,sha256=2z6ifSU26-ULOK-FXp75b45mCdjSJnuvU8TxvapB8Wk,9423
|
|
293
|
+
paasta_tools-1.35.0.data/scripts/check_cassandracluster_services_replication.py,sha256=mKlCK9pRNzxnOt41wA6CtDQIHhcky438i044kA6pbEc,1127
|
|
294
|
+
paasta_tools-1.35.0.data/scripts/check_flink_services_health.py,sha256=ElYa1hr6KUcXuu0B8Nf-dt2Vfyo5FrwF5gVV4QBX7Lg,7162
|
|
295
|
+
paasta_tools-1.35.0.data/scripts/check_kubernetes_api.py,sha256=BhOqJkkKNJPfonfIPonW5dlIubd1ji-3ppjXHomNwzM,1522
|
|
296
|
+
paasta_tools-1.35.0.data/scripts/check_kubernetes_services_replication.py,sha256=LCLlumReRdy9Cw_sPpqanjPcBlbcrJDiECaYYru5Cwk,5751
|
|
297
|
+
paasta_tools-1.35.0.data/scripts/check_manual_oapi_changes.sh,sha256=1IdphwXP7xnMNS7huZ3FeEHy67-nY4n3ydHmbojQvJg,879
|
|
298
|
+
paasta_tools-1.35.0.data/scripts/check_oom_events.py,sha256=tUr14T2LYEgqwpAq4vkZ_Z0VTPOfQg7yrSSkwGQ86Hg,7801
|
|
299
|
+
paasta_tools-1.35.0.data/scripts/check_orphans.py,sha256=9PmzRUZ1HwCcmTm4J1xTznz7hZl8fKsu1wdXUDufXJs,9984
|
|
300
|
+
paasta_tools-1.35.0.data/scripts/check_spark_jobs.py,sha256=W4HUIbX_ylxl4DlqcdmoRWDbKYgPEr04OM-DLvfnXE8,7316
|
|
301
|
+
paasta_tools-1.35.0.data/scripts/cleanup_kubernetes_cr.py,sha256=m-w_wuTuVG9FlwQQkxXYgri5DTGac9Nc2pbK4k1FNDE,4659
|
|
302
|
+
paasta_tools-1.35.0.data/scripts/cleanup_kubernetes_crd.py,sha256=p9eLk-0-pU-hcVg-GAM92h1ZdQqlvmYhBzUFCiMPYR8,4478
|
|
303
|
+
paasta_tools-1.35.0.data/scripts/cleanup_kubernetes_jobs.py,sha256=7LHB4tsz1kt-zygssIfQbBY6c3LSqXYDUILvHkSfBog,12433
|
|
304
|
+
paasta_tools-1.35.0.data/scripts/create_dynamodb_table.py,sha256=9wJftWGgNtvLnpXeUqpoMXBIIep1hNySf0YiQmzpl5c,1167
|
|
305
|
+
paasta_tools-1.35.0.data/scripts/create_paasta_playground.py,sha256=jzoE5e1pxWeVXwCEkD9O0jefOhEnIlSa3QMP9PC2f0M,3239
|
|
306
|
+
paasta_tools-1.35.0.data/scripts/delete_kubernetes_deployments.py,sha256=de4C-5yqEuCeJXp6zhbc0v-c0LOElr4qabLnOTRcX4o,3124
|
|
307
|
+
paasta_tools-1.35.0.data/scripts/emit_allocated_cpu_metrics.py,sha256=Cjd3xoOJoYSP3ciSAlZ7fh6_z678KpYt43Xh-WVCY1M,1859
|
|
308
|
+
paasta_tools-1.35.0.data/scripts/generate_all_deployments,sha256=Qr5B0zogTOr8Lcn_7dpORixpGIJcXZ_pWz_ZlWnmsik,248
|
|
309
|
+
paasta_tools-1.35.0.data/scripts/generate_authenticating_services.py,sha256=r5AQyquVm8_rbAhBETUU2ZHZvolpqZZTakW3lKFiOqw,2982
|
|
310
|
+
paasta_tools-1.35.0.data/scripts/generate_deployments_for_service.py,sha256=FAFzIAtKY7GsA13s-ssCMH7T-_p9B1pBtyyYFzsCZ6k,9822
|
|
311
|
+
paasta_tools-1.35.0.data/scripts/generate_services_file.py,sha256=w3Wyyn9ZkjfrvkT0SnTbh5mrTZJnjhTC2JIqLBpb6-g,3583
|
|
312
|
+
paasta_tools-1.35.0.data/scripts/generate_services_yaml.py,sha256=XyIUsHa1BPLqeklayaFewX69-6GT_luaSLS_TMDLkQ0,991
|
|
313
|
+
paasta_tools-1.35.0.data/scripts/get_running_task_allocation.py,sha256=NGYO2td42XQOduUmvgz0CZw0ir36bY6fUe3VOR1Ln6E,10876
|
|
314
|
+
paasta_tools-1.35.0.data/scripts/habitat_fixer.py,sha256=hCC7fEnxrBOmiCJj4rPwhGlae9JsYg_gltk10l-FwaE,2625
|
|
315
|
+
paasta_tools-1.35.0.data/scripts/ide_helper.py,sha256=QUVWxIeh54IhTn3HEhBrmJKvtgw6RDv9smoJ-6pZA4c,12348
|
|
316
|
+
paasta_tools-1.35.0.data/scripts/is_pod_healthy_in_proxy.py,sha256=MiY85MJDXcN9oS8d840WG1iYDIzzO9lmk_NC0i_CrQg,4321
|
|
317
|
+
paasta_tools-1.35.0.data/scripts/is_pod_healthy_in_smartstack.py,sha256=z3uP9sgwLwg94BubFgBKare2t1L5qhcY48MWsJxjxPY,1697
|
|
318
|
+
paasta_tools-1.35.0.data/scripts/kill_bad_containers.py,sha256=oNY5x0Zg0eu34cXhFy60I7WRlqg4PKD_6xWi0eoRTCA,3832
|
|
319
|
+
paasta_tools-1.35.0.data/scripts/kubernetes_remove_evicted_pods.py,sha256=D9Ovdc9Xer_Qf3vM5CtPVcKvnMwLiC0H-WQmQGXrBKM,5274
|
|
320
|
+
paasta_tools-1.35.0.data/scripts/mass-deploy-tag.sh,sha256=cfPgDDvAOhy3ijTUocklogzoIY8hfoE6T5QI-0aqcfM,1578
|
|
321
|
+
paasta_tools-1.35.0.data/scripts/mock_patch_checker.py,sha256=Q6Je8QjmfLzdnv_6JR6ehh2kA5SUxmeZGeLI2WC3BSY,2559
|
|
322
|
+
paasta_tools-1.35.0.data/scripts/paasta_cleanup_remote_run_resources.py,sha256=4oN9UwnR7q6aEEyFUhVrT41VSeQJ2YS3upFpbZQXNUI,4558
|
|
323
|
+
paasta_tools-1.35.0.data/scripts/paasta_cleanup_stale_nodes.py,sha256=C-DmEVgtienoMgJnIeESvFqWcJOW2SOGoS1l8RXA8NE,6304
|
|
324
|
+
paasta_tools-1.35.0.data/scripts/paasta_deploy_tron_jobs,sha256=fFN2aP5FNSm5WfDV3yvLpihXaKkAF65MRXFcN2iD7S4,106
|
|
325
|
+
paasta_tools-1.35.0.data/scripts/paasta_execute_docker_command.py,sha256=6kh7h2bleQbNULc37MiRsfnk9MDHqVv30UQdg3rF3kQ,4086
|
|
326
|
+
paasta_tools-1.35.0.data/scripts/paasta_secrets_sync.py,sha256=sMdyWMt9BU5CmWHIRwzhpFKve7zxFHkygt_SNTJutWM,28766
|
|
327
|
+
paasta_tools-1.35.0.data/scripts/paasta_tabcomplete.sh,sha256=qbQKSriz_L4MogA12L_8i-tg0Lplpshbk_FUMjK6uG0,929
|
|
328
|
+
paasta_tools-1.35.0.data/scripts/paasta_update_soa_memcpu.py,sha256=5fShpZYpb7EeoC70cWdICnNHjHAaNU5mTHaAc3mloIs,20813
|
|
329
|
+
paasta_tools-1.35.0.data/scripts/render_template.py,sha256=KcKfeSP2a9f6fMDRhnjX7OJaHmFIBtCJcHhUI_B7p9Y,3975
|
|
330
|
+
paasta_tools-1.35.0.data/scripts/rightsizer_soaconfigs_update.py,sha256=0UPVtDyX6wXXurv7l5fiKuzXH8VEszKx_V7UqDm6Ck0,10493
|
|
331
|
+
paasta_tools-1.35.0.data/scripts/service_shard_remove.py,sha256=WCvCxu3GTYEa3cYnWybTOiuHN14axj0x5_-snVd-mqE,4927
|
|
332
|
+
paasta_tools-1.35.0.data/scripts/service_shard_update.py,sha256=AajuRS4s-HXhEcIIYK2dsyBSdCjZbh4x6Po48ipl7M4,13346
|
|
333
|
+
paasta_tools-1.35.0.data/scripts/setup_istio_mesh.py,sha256=LbLxeI_DnhNXkyCgG-GxutlNu9_vcIitorYr4I9x4CY,11575
|
|
334
|
+
paasta_tools-1.35.0.data/scripts/setup_kubernetes_cr.py,sha256=xsZJ_X1YpQ0NExyY1cXFH8KW2_vAgctCwdrW0bu102s,14931
|
|
335
|
+
paasta_tools-1.35.0.data/scripts/setup_kubernetes_crd.py,sha256=QCiFOcSmE0nMEheIb7IUnYMUn0heh1kHyMFBCm7XIRU,4020
|
|
336
|
+
paasta_tools-1.35.0.data/scripts/setup_kubernetes_internal_crd.py,sha256=dDyAOKFow7yeHWGa197angYwGTDWNyR7vZ6Cx5JlS6k,4629
|
|
337
|
+
paasta_tools-1.35.0.data/scripts/setup_kubernetes_job.py,sha256=H2VuRaCpBj-J2Qc3DmIMutGuDL8nlfabshEiCGNNqmY,19095
|
|
338
|
+
paasta_tools-1.35.0.data/scripts/setup_prometheus_adapter_config.py,sha256=JzvztaJ__5MOAV6pD5Vj3mamARh6TZUCzYdlqhWDOOY,43962
|
|
339
|
+
paasta_tools-1.35.0.data/scripts/shared_ip_check.py,sha256=dbMwCwDLy9hCIbVWV1rk0FKuBkZNuQtM59hGVKxV2B4,2464
|
|
340
|
+
paasta_tools-1.35.0.data/scripts/synapse_srv_namespaces_fact.py,sha256=HFX0zIXkXIjtAw8zrA7mUiy6NOKR11eBzE39R3aZv_E,1408
|
|
341
|
+
paasta_tools-1.35.0.data/scripts/timeouts_metrics_prom.py,sha256=icK1j72-e-hvbUGs3LtcaMn9KBMopD9cGv5UUVo-OSc,2607
|
|
342
|
+
paasta_tools-1.35.0.dist-info/licenses/LICENSE,sha256=Tcxn8PpeSjHDwUTemLW_thUNxcOOm612dK_no2ebEpo,10837
|
|
343
|
+
paasta_tools-1.35.0.dist-info/METADATA,sha256=mzajVnU_U_h3LkzpY5yMU9RNj3DTsgX1HphzUP0XeGQ,2258
|
|
344
|
+
paasta_tools-1.35.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
345
|
+
paasta_tools-1.35.0.dist-info/entry_points.txt,sha256=qokGSdKYA6AjtdMM_BjmCAOMghMsjOpcAdL9e4fY6D8,1179
|
|
346
|
+
paasta_tools-1.35.0.dist-info/top_level.txt,sha256=6vZZAZ7bbaDxuXZjNYixDwzkrezpNgDQHpS0ikvFOk4,24
|
|
347
|
+
paasta_tools-1.35.0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/check_autoscaler_max_instances.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta_tools-1.33.4.data → paasta_tools-1.35.0.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.33.4.data → paasta_tools-1.35.0.data}/scripts/delete_kubernetes_deployments.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/generate_authenticating_services.py
RENAMED
|
File without changes
|
{paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/generate_deployments_for_service.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/get_running_task_allocation.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/is_pod_healthy_in_smartstack.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/kubernetes_remove_evicted_pods.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/paasta_cleanup_remote_run_resources.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/paasta_execute_docker_command.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.33.4.data → paasta_tools-1.35.0.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.33.4.data → paasta_tools-1.35.0.data}/scripts/setup_kubernetes_internal_crd.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta_tools-1.33.4.data → paasta_tools-1.35.0.data}/scripts/setup_prometheus_adapter_config.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta_tools-1.33.4.data → paasta_tools-1.35.0.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
|