paasta-tools 1.21.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (348) hide show
  1. k8s_itests/__init__.py +0 -0
  2. k8s_itests/test_autoscaling.py +23 -0
  3. k8s_itests/utils.py +38 -0
  4. paasta_tools/__init__.py +20 -0
  5. paasta_tools/adhoc_tools.py +142 -0
  6. paasta_tools/api/__init__.py +13 -0
  7. paasta_tools/api/api.py +330 -0
  8. paasta_tools/api/api_docs/swagger.json +2323 -0
  9. paasta_tools/api/client.py +106 -0
  10. paasta_tools/api/settings.py +33 -0
  11. paasta_tools/api/tweens/__init__.py +6 -0
  12. paasta_tools/api/tweens/auth.py +125 -0
  13. paasta_tools/api/tweens/profiling.py +108 -0
  14. paasta_tools/api/tweens/request_logger.py +124 -0
  15. paasta_tools/api/views/__init__.py +13 -0
  16. paasta_tools/api/views/autoscaler.py +100 -0
  17. paasta_tools/api/views/exception.py +45 -0
  18. paasta_tools/api/views/flink.py +73 -0
  19. paasta_tools/api/views/instance.py +395 -0
  20. paasta_tools/api/views/pause_autoscaler.py +71 -0
  21. paasta_tools/api/views/remote_run.py +113 -0
  22. paasta_tools/api/views/resources.py +76 -0
  23. paasta_tools/api/views/service.py +35 -0
  24. paasta_tools/api/views/version.py +25 -0
  25. paasta_tools/apply_external_resources.py +79 -0
  26. paasta_tools/async_utils.py +109 -0
  27. paasta_tools/autoscaling/__init__.py +0 -0
  28. paasta_tools/autoscaling/autoscaling_service_lib.py +57 -0
  29. paasta_tools/autoscaling/forecasting.py +106 -0
  30. paasta_tools/autoscaling/max_all_k8s_services.py +41 -0
  31. paasta_tools/autoscaling/pause_service_autoscaler.py +77 -0
  32. paasta_tools/autoscaling/utils.py +52 -0
  33. paasta_tools/bounce_lib.py +184 -0
  34. paasta_tools/broadcast_log_to_services.py +62 -0
  35. paasta_tools/cassandracluster_tools.py +210 -0
  36. paasta_tools/check_autoscaler_max_instances.py +212 -0
  37. paasta_tools/check_cassandracluster_services_replication.py +35 -0
  38. paasta_tools/check_flink_services_health.py +203 -0
  39. paasta_tools/check_kubernetes_api.py +57 -0
  40. paasta_tools/check_kubernetes_services_replication.py +141 -0
  41. paasta_tools/check_oom_events.py +244 -0
  42. paasta_tools/check_services_replication_tools.py +324 -0
  43. paasta_tools/check_spark_jobs.py +234 -0
  44. paasta_tools/cleanup_kubernetes_cr.py +138 -0
  45. paasta_tools/cleanup_kubernetes_crd.py +145 -0
  46. paasta_tools/cleanup_kubernetes_jobs.py +344 -0
  47. paasta_tools/cleanup_tron_namespaces.py +96 -0
  48. paasta_tools/cli/__init__.py +13 -0
  49. paasta_tools/cli/authentication.py +85 -0
  50. paasta_tools/cli/cli.py +260 -0
  51. paasta_tools/cli/cmds/__init__.py +13 -0
  52. paasta_tools/cli/cmds/autoscale.py +143 -0
  53. paasta_tools/cli/cmds/check.py +334 -0
  54. paasta_tools/cli/cmds/cook_image.py +147 -0
  55. paasta_tools/cli/cmds/get_docker_image.py +76 -0
  56. paasta_tools/cli/cmds/get_image_version.py +172 -0
  57. paasta_tools/cli/cmds/get_latest_deployment.py +93 -0
  58. paasta_tools/cli/cmds/info.py +155 -0
  59. paasta_tools/cli/cmds/itest.py +117 -0
  60. paasta_tools/cli/cmds/list.py +66 -0
  61. paasta_tools/cli/cmds/list_clusters.py +42 -0
  62. paasta_tools/cli/cmds/list_deploy_queue.py +171 -0
  63. paasta_tools/cli/cmds/list_namespaces.py +84 -0
  64. paasta_tools/cli/cmds/local_run.py +1396 -0
  65. paasta_tools/cli/cmds/logs.py +1601 -0
  66. paasta_tools/cli/cmds/mark_for_deployment.py +1988 -0
  67. paasta_tools/cli/cmds/mesh_status.py +174 -0
  68. paasta_tools/cli/cmds/pause_service_autoscaler.py +107 -0
  69. paasta_tools/cli/cmds/push_to_registry.py +275 -0
  70. paasta_tools/cli/cmds/remote_run.py +252 -0
  71. paasta_tools/cli/cmds/rollback.py +347 -0
  72. paasta_tools/cli/cmds/secret.py +549 -0
  73. paasta_tools/cli/cmds/security_check.py +59 -0
  74. paasta_tools/cli/cmds/spark_run.py +1400 -0
  75. paasta_tools/cli/cmds/start_stop_restart.py +401 -0
  76. paasta_tools/cli/cmds/status.py +2302 -0
  77. paasta_tools/cli/cmds/validate.py +1012 -0
  78. paasta_tools/cli/cmds/wait_for_deployment.py +275 -0
  79. paasta_tools/cli/fsm/__init__.py +13 -0
  80. paasta_tools/cli/fsm/autosuggest.py +82 -0
  81. paasta_tools/cli/fsm/template/README.md +8 -0
  82. paasta_tools/cli/fsm/template/cookiecutter.json +7 -0
  83. paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +91 -0
  84. paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +20 -0
  85. paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +8 -0
  86. paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +6 -0
  87. paasta_tools/cli/fsm_cmd.py +121 -0
  88. paasta_tools/cli/paasta_tabcomplete.sh +23 -0
  89. paasta_tools/cli/schemas/adhoc_schema.json +199 -0
  90. paasta_tools/cli/schemas/autoscaling_schema.json +91 -0
  91. paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +37 -0
  92. paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +89 -0
  93. paasta_tools/cli/schemas/deploy_schema.json +173 -0
  94. paasta_tools/cli/schemas/eks_schema.json +970 -0
  95. paasta_tools/cli/schemas/kubernetes_schema.json +970 -0
  96. paasta_tools/cli/schemas/rollback_schema.json +160 -0
  97. paasta_tools/cli/schemas/service_schema.json +25 -0
  98. paasta_tools/cli/schemas/smartstack_schema.json +322 -0
  99. paasta_tools/cli/schemas/tron_schema.json +699 -0
  100. paasta_tools/cli/utils.py +1118 -0
  101. paasta_tools/clusterman.py +21 -0
  102. paasta_tools/config_utils.py +385 -0
  103. paasta_tools/contrib/__init__.py +0 -0
  104. paasta_tools/contrib/bounce_log_latency_parser.py +68 -0
  105. paasta_tools/contrib/check_manual_oapi_changes.sh +24 -0
  106. paasta_tools/contrib/check_orphans.py +306 -0
  107. paasta_tools/contrib/create_dynamodb_table.py +35 -0
  108. paasta_tools/contrib/create_paasta_playground.py +105 -0
  109. paasta_tools/contrib/emit_allocated_cpu_metrics.py +50 -0
  110. paasta_tools/contrib/get_running_task_allocation.py +346 -0
  111. paasta_tools/contrib/habitat_fixer.py +86 -0
  112. paasta_tools/contrib/ide_helper.py +316 -0
  113. paasta_tools/contrib/is_pod_healthy_in_proxy.py +139 -0
  114. paasta_tools/contrib/is_pod_healthy_in_smartstack.py +50 -0
  115. paasta_tools/contrib/kill_bad_containers.py +109 -0
  116. paasta_tools/contrib/mass-deploy-tag.sh +44 -0
  117. paasta_tools/contrib/mock_patch_checker.py +86 -0
  118. paasta_tools/contrib/paasta_update_soa_memcpu.py +520 -0
  119. paasta_tools/contrib/render_template.py +129 -0
  120. paasta_tools/contrib/rightsizer_soaconfigs_update.py +348 -0
  121. paasta_tools/contrib/service_shard_remove.py +157 -0
  122. paasta_tools/contrib/service_shard_update.py +373 -0
  123. paasta_tools/contrib/shared_ip_check.py +77 -0
  124. paasta_tools/contrib/timeouts_metrics_prom.py +64 -0
  125. paasta_tools/delete_kubernetes_deployments.py +89 -0
  126. paasta_tools/deployment_utils.py +44 -0
  127. paasta_tools/docker_wrapper.py +234 -0
  128. paasta_tools/docker_wrapper_imports.py +13 -0
  129. paasta_tools/drain_lib.py +351 -0
  130. paasta_tools/dump_locally_running_services.py +71 -0
  131. paasta_tools/eks_tools.py +119 -0
  132. paasta_tools/envoy_tools.py +373 -0
  133. paasta_tools/firewall.py +504 -0
  134. paasta_tools/firewall_logging.py +154 -0
  135. paasta_tools/firewall_update.py +172 -0
  136. paasta_tools/flink_tools.py +345 -0
  137. paasta_tools/flinkeks_tools.py +90 -0
  138. paasta_tools/frameworks/__init__.py +0 -0
  139. paasta_tools/frameworks/adhoc_scheduler.py +71 -0
  140. paasta_tools/frameworks/constraints.py +87 -0
  141. paasta_tools/frameworks/native_scheduler.py +652 -0
  142. paasta_tools/frameworks/native_service_config.py +301 -0
  143. paasta_tools/frameworks/task_store.py +245 -0
  144. paasta_tools/generate_all_deployments +9 -0
  145. paasta_tools/generate_authenticating_services.py +94 -0
  146. paasta_tools/generate_deployments_for_service.py +255 -0
  147. paasta_tools/generate_services_file.py +114 -0
  148. paasta_tools/generate_services_yaml.py +30 -0
  149. paasta_tools/hacheck.py +76 -0
  150. paasta_tools/instance/__init__.py +0 -0
  151. paasta_tools/instance/hpa_metrics_parser.py +122 -0
  152. paasta_tools/instance/kubernetes.py +1362 -0
  153. paasta_tools/iptables.py +240 -0
  154. paasta_tools/kafkacluster_tools.py +143 -0
  155. paasta_tools/kubernetes/__init__.py +0 -0
  156. paasta_tools/kubernetes/application/__init__.py +0 -0
  157. paasta_tools/kubernetes/application/controller_wrappers.py +476 -0
  158. paasta_tools/kubernetes/application/tools.py +90 -0
  159. paasta_tools/kubernetes/bin/__init__.py +0 -0
  160. paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +164 -0
  161. paasta_tools/kubernetes/bin/paasta_cleanup_remote_run_resources.py +135 -0
  162. paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +181 -0
  163. paasta_tools/kubernetes/bin/paasta_secrets_sync.py +758 -0
  164. paasta_tools/kubernetes/remote_run.py +558 -0
  165. paasta_tools/kubernetes_tools.py +4679 -0
  166. paasta_tools/list_kubernetes_service_instances.py +128 -0
  167. paasta_tools/list_tron_namespaces.py +60 -0
  168. paasta_tools/long_running_service_tools.py +678 -0
  169. paasta_tools/mac_address.py +44 -0
  170. paasta_tools/marathon_dashboard.py +0 -0
  171. paasta_tools/mesos/__init__.py +0 -0
  172. paasta_tools/mesos/cfg.py +46 -0
  173. paasta_tools/mesos/cluster.py +60 -0
  174. paasta_tools/mesos/exceptions.py +59 -0
  175. paasta_tools/mesos/framework.py +77 -0
  176. paasta_tools/mesos/log.py +48 -0
  177. paasta_tools/mesos/master.py +306 -0
  178. paasta_tools/mesos/mesos_file.py +169 -0
  179. paasta_tools/mesos/parallel.py +52 -0
  180. paasta_tools/mesos/slave.py +115 -0
  181. paasta_tools/mesos/task.py +94 -0
  182. paasta_tools/mesos/util.py +69 -0
  183. paasta_tools/mesos/zookeeper.py +37 -0
  184. paasta_tools/mesos_maintenance.py +848 -0
  185. paasta_tools/mesos_tools.py +1051 -0
  186. paasta_tools/metrics/__init__.py +0 -0
  187. paasta_tools/metrics/metastatus_lib.py +1110 -0
  188. paasta_tools/metrics/metrics_lib.py +217 -0
  189. paasta_tools/monitoring/__init__.py +13 -0
  190. paasta_tools/monitoring/check_k8s_api_performance.py +110 -0
  191. paasta_tools/monitoring_tools.py +652 -0
  192. paasta_tools/monkrelaycluster_tools.py +146 -0
  193. paasta_tools/nrtsearchservice_tools.py +143 -0
  194. paasta_tools/nrtsearchserviceeks_tools.py +68 -0
  195. paasta_tools/oom_logger.py +321 -0
  196. paasta_tools/paasta_deploy_tron_jobs +3 -0
  197. paasta_tools/paasta_execute_docker_command.py +123 -0
  198. paasta_tools/paasta_native_serviceinit.py +21 -0
  199. paasta_tools/paasta_service_config_loader.py +201 -0
  200. paasta_tools/paastaapi/__init__.py +29 -0
  201. paasta_tools/paastaapi/api/__init__.py +3 -0
  202. paasta_tools/paastaapi/api/autoscaler_api.py +302 -0
  203. paasta_tools/paastaapi/api/default_api.py +569 -0
  204. paasta_tools/paastaapi/api/remote_run_api.py +604 -0
  205. paasta_tools/paastaapi/api/resources_api.py +157 -0
  206. paasta_tools/paastaapi/api/service_api.py +1736 -0
  207. paasta_tools/paastaapi/api_client.py +818 -0
  208. paasta_tools/paastaapi/apis/__init__.py +22 -0
  209. paasta_tools/paastaapi/configuration.py +455 -0
  210. paasta_tools/paastaapi/exceptions.py +137 -0
  211. paasta_tools/paastaapi/model/__init__.py +5 -0
  212. paasta_tools/paastaapi/model/adhoc_launch_history.py +176 -0
  213. paasta_tools/paastaapi/model/autoscaler_count_msg.py +176 -0
  214. paasta_tools/paastaapi/model/deploy_queue.py +178 -0
  215. paasta_tools/paastaapi/model/deploy_queue_service_instance.py +194 -0
  216. paasta_tools/paastaapi/model/envoy_backend.py +185 -0
  217. paasta_tools/paastaapi/model/envoy_location.py +184 -0
  218. paasta_tools/paastaapi/model/envoy_status.py +181 -0
  219. paasta_tools/paastaapi/model/flink_cluster_overview.py +188 -0
  220. paasta_tools/paastaapi/model/flink_config.py +173 -0
  221. paasta_tools/paastaapi/model/flink_job.py +186 -0
  222. paasta_tools/paastaapi/model/flink_job_details.py +192 -0
  223. paasta_tools/paastaapi/model/flink_jobs.py +175 -0
  224. paasta_tools/paastaapi/model/float_and_error.py +173 -0
  225. paasta_tools/paastaapi/model/hpa_metric.py +176 -0
  226. paasta_tools/paastaapi/model/inline_object.py +170 -0
  227. paasta_tools/paastaapi/model/inline_response200.py +170 -0
  228. paasta_tools/paastaapi/model/inline_response2001.py +170 -0
  229. paasta_tools/paastaapi/model/instance_bounce_status.py +200 -0
  230. paasta_tools/paastaapi/model/instance_mesh_status.py +186 -0
  231. paasta_tools/paastaapi/model/instance_status.py +220 -0
  232. paasta_tools/paastaapi/model/instance_status_adhoc.py +187 -0
  233. paasta_tools/paastaapi/model/instance_status_cassandracluster.py +173 -0
  234. paasta_tools/paastaapi/model/instance_status_flink.py +173 -0
  235. paasta_tools/paastaapi/model/instance_status_kafkacluster.py +173 -0
  236. paasta_tools/paastaapi/model/instance_status_kubernetes.py +263 -0
  237. paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +187 -0
  238. paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +197 -0
  239. paasta_tools/paastaapi/model/instance_status_tron.py +204 -0
  240. paasta_tools/paastaapi/model/instance_tasks.py +182 -0
  241. paasta_tools/paastaapi/model/integer_and_error.py +173 -0
  242. paasta_tools/paastaapi/model/kubernetes_container.py +178 -0
  243. paasta_tools/paastaapi/model/kubernetes_container_v2.py +219 -0
  244. paasta_tools/paastaapi/model/kubernetes_healthcheck.py +176 -0
  245. paasta_tools/paastaapi/model/kubernetes_pod.py +201 -0
  246. paasta_tools/paastaapi/model/kubernetes_pod_event.py +176 -0
  247. paasta_tools/paastaapi/model/kubernetes_pod_v2.py +213 -0
  248. paasta_tools/paastaapi/model/kubernetes_replica_set.py +185 -0
  249. paasta_tools/paastaapi/model/kubernetes_version.py +202 -0
  250. paasta_tools/paastaapi/model/remote_run_outcome.py +189 -0
  251. paasta_tools/paastaapi/model/remote_run_start.py +185 -0
  252. paasta_tools/paastaapi/model/remote_run_stop.py +176 -0
  253. paasta_tools/paastaapi/model/remote_run_token.py +173 -0
  254. paasta_tools/paastaapi/model/resource.py +187 -0
  255. paasta_tools/paastaapi/model/resource_item.py +187 -0
  256. paasta_tools/paastaapi/model/resource_value.py +176 -0
  257. paasta_tools/paastaapi/model/smartstack_backend.py +191 -0
  258. paasta_tools/paastaapi/model/smartstack_location.py +181 -0
  259. paasta_tools/paastaapi/model/smartstack_status.py +181 -0
  260. paasta_tools/paastaapi/model/task_tail_lines.py +176 -0
  261. paasta_tools/paastaapi/model_utils.py +1879 -0
  262. paasta_tools/paastaapi/models/__init__.py +62 -0
  263. paasta_tools/paastaapi/rest.py +287 -0
  264. paasta_tools/prune_completed_pods.py +220 -0
  265. paasta_tools/puppet_service_tools.py +59 -0
  266. paasta_tools/py.typed +1 -0
  267. paasta_tools/remote_git.py +127 -0
  268. paasta_tools/run-paasta-api-in-dev-mode.py +57 -0
  269. paasta_tools/run-paasta-api-playground.py +51 -0
  270. paasta_tools/secret_providers/__init__.py +66 -0
  271. paasta_tools/secret_providers/vault.py +214 -0
  272. paasta_tools/secret_tools.py +277 -0
  273. paasta_tools/setup_istio_mesh.py +353 -0
  274. paasta_tools/setup_kubernetes_cr.py +412 -0
  275. paasta_tools/setup_kubernetes_crd.py +138 -0
  276. paasta_tools/setup_kubernetes_internal_crd.py +154 -0
  277. paasta_tools/setup_kubernetes_job.py +353 -0
  278. paasta_tools/setup_prometheus_adapter_config.py +1028 -0
  279. paasta_tools/setup_tron_namespace.py +248 -0
  280. paasta_tools/slack.py +75 -0
  281. paasta_tools/smartstack_tools.py +676 -0
  282. paasta_tools/spark_tools.py +283 -0
  283. paasta_tools/synapse_srv_namespaces_fact.py +42 -0
  284. paasta_tools/tron/__init__.py +0 -0
  285. paasta_tools/tron/client.py +158 -0
  286. paasta_tools/tron/tron_command_context.py +194 -0
  287. paasta_tools/tron/tron_timeutils.py +101 -0
  288. paasta_tools/tron_tools.py +1448 -0
  289. paasta_tools/utils.py +4307 -0
  290. paasta_tools/yaml_tools.py +44 -0
  291. paasta_tools-1.21.3.data/scripts/apply_external_resources.py +79 -0
  292. paasta_tools-1.21.3.data/scripts/bounce_log_latency_parser.py +68 -0
  293. paasta_tools-1.21.3.data/scripts/check_autoscaler_max_instances.py +212 -0
  294. paasta_tools-1.21.3.data/scripts/check_cassandracluster_services_replication.py +35 -0
  295. paasta_tools-1.21.3.data/scripts/check_flink_services_health.py +203 -0
  296. paasta_tools-1.21.3.data/scripts/check_kubernetes_api.py +57 -0
  297. paasta_tools-1.21.3.data/scripts/check_kubernetes_services_replication.py +141 -0
  298. paasta_tools-1.21.3.data/scripts/check_manual_oapi_changes.sh +24 -0
  299. paasta_tools-1.21.3.data/scripts/check_oom_events.py +244 -0
  300. paasta_tools-1.21.3.data/scripts/check_orphans.py +306 -0
  301. paasta_tools-1.21.3.data/scripts/check_spark_jobs.py +234 -0
  302. paasta_tools-1.21.3.data/scripts/cleanup_kubernetes_cr.py +138 -0
  303. paasta_tools-1.21.3.data/scripts/cleanup_kubernetes_crd.py +145 -0
  304. paasta_tools-1.21.3.data/scripts/cleanup_kubernetes_jobs.py +344 -0
  305. paasta_tools-1.21.3.data/scripts/create_dynamodb_table.py +35 -0
  306. paasta_tools-1.21.3.data/scripts/create_paasta_playground.py +105 -0
  307. paasta_tools-1.21.3.data/scripts/delete_kubernetes_deployments.py +89 -0
  308. paasta_tools-1.21.3.data/scripts/emit_allocated_cpu_metrics.py +50 -0
  309. paasta_tools-1.21.3.data/scripts/generate_all_deployments +9 -0
  310. paasta_tools-1.21.3.data/scripts/generate_authenticating_services.py +94 -0
  311. paasta_tools-1.21.3.data/scripts/generate_deployments_for_service.py +255 -0
  312. paasta_tools-1.21.3.data/scripts/generate_services_file.py +114 -0
  313. paasta_tools-1.21.3.data/scripts/generate_services_yaml.py +30 -0
  314. paasta_tools-1.21.3.data/scripts/get_running_task_allocation.py +346 -0
  315. paasta_tools-1.21.3.data/scripts/habitat_fixer.py +86 -0
  316. paasta_tools-1.21.3.data/scripts/ide_helper.py +316 -0
  317. paasta_tools-1.21.3.data/scripts/is_pod_healthy_in_proxy.py +139 -0
  318. paasta_tools-1.21.3.data/scripts/is_pod_healthy_in_smartstack.py +50 -0
  319. paasta_tools-1.21.3.data/scripts/kill_bad_containers.py +109 -0
  320. paasta_tools-1.21.3.data/scripts/kubernetes_remove_evicted_pods.py +164 -0
  321. paasta_tools-1.21.3.data/scripts/mass-deploy-tag.sh +44 -0
  322. paasta_tools-1.21.3.data/scripts/mock_patch_checker.py +86 -0
  323. paasta_tools-1.21.3.data/scripts/paasta_cleanup_remote_run_resources.py +135 -0
  324. paasta_tools-1.21.3.data/scripts/paasta_cleanup_stale_nodes.py +181 -0
  325. paasta_tools-1.21.3.data/scripts/paasta_deploy_tron_jobs +3 -0
  326. paasta_tools-1.21.3.data/scripts/paasta_execute_docker_command.py +123 -0
  327. paasta_tools-1.21.3.data/scripts/paasta_secrets_sync.py +758 -0
  328. paasta_tools-1.21.3.data/scripts/paasta_tabcomplete.sh +23 -0
  329. paasta_tools-1.21.3.data/scripts/paasta_update_soa_memcpu.py +520 -0
  330. paasta_tools-1.21.3.data/scripts/render_template.py +129 -0
  331. paasta_tools-1.21.3.data/scripts/rightsizer_soaconfigs_update.py +348 -0
  332. paasta_tools-1.21.3.data/scripts/service_shard_remove.py +157 -0
  333. paasta_tools-1.21.3.data/scripts/service_shard_update.py +373 -0
  334. paasta_tools-1.21.3.data/scripts/setup_istio_mesh.py +353 -0
  335. paasta_tools-1.21.3.data/scripts/setup_kubernetes_cr.py +412 -0
  336. paasta_tools-1.21.3.data/scripts/setup_kubernetes_crd.py +138 -0
  337. paasta_tools-1.21.3.data/scripts/setup_kubernetes_internal_crd.py +154 -0
  338. paasta_tools-1.21.3.data/scripts/setup_kubernetes_job.py +353 -0
  339. paasta_tools-1.21.3.data/scripts/setup_prometheus_adapter_config.py +1028 -0
  340. paasta_tools-1.21.3.data/scripts/shared_ip_check.py +77 -0
  341. paasta_tools-1.21.3.data/scripts/synapse_srv_namespaces_fact.py +42 -0
  342. paasta_tools-1.21.3.data/scripts/timeouts_metrics_prom.py +64 -0
  343. paasta_tools-1.21.3.dist-info/LICENSE +201 -0
  344. paasta_tools-1.21.3.dist-info/METADATA +74 -0
  345. paasta_tools-1.21.3.dist-info/RECORD +348 -0
  346. paasta_tools-1.21.3.dist-info/WHEEL +5 -0
  347. paasta_tools-1.21.3.dist-info/entry_points.txt +20 -0
  348. paasta_tools-1.21.3.dist-info/top_level.txt +2 -0
@@ -0,0 +1,348 @@
1
+ import argparse
2
+ import logging
3
+ from collections import defaultdict
4
+ from typing import Any
5
+ from typing import cast
6
+ from typing import Dict
7
+ from typing import List
8
+ from typing import Literal
9
+ from typing import Optional
10
+ from typing import Set
11
+ from typing import TypedDict
12
+ from typing import Union
13
+
14
+ from paasta_tools.config_utils import AutoConfigUpdater
15
+ from paasta_tools.contrib.paasta_update_soa_memcpu import get_report_from_splunk
16
+ from paasta_tools.kubernetes_tools import SidecarResourceRequirements
17
+ from paasta_tools.utils import AUTO_SOACONFIG_SUBDIR
18
+ from paasta_tools.utils import DEFAULT_SOA_CONFIGS_GIT_URL
19
+ from paasta_tools.utils import format_git_url
20
+ from paasta_tools.utils import load_system_paasta_config
21
+
22
+
23
+ log = logging.getLogger(__name__)
24
+
25
+ NULL = "null"
26
+ SUPPORTED_CSV_KEYS = (
27
+ "cpus",
28
+ "mem",
29
+ "disk",
30
+ "hacheck_cpus",
31
+ "cpu_burst_add",
32
+ "min_instances",
33
+ "max_instances",
34
+ )
35
+ HEADER_COMMENT = """
36
+ # This file contains recommended config values for your service generated by
37
+ # automated processes.
38
+ #
39
+ # Your service will use these values if they are not defined in
40
+ # {regular_filename}.
41
+ #
42
+ # If you would like to override a config value defined here, add the config
43
+ # value to {regular_filename} instead of editing this file.
44
+ # ==============================================================================
45
+ {{}}
46
+ """
47
+ # ^ Needs an empty dict at the end for ruamel to return a non-None value when loading
48
+ # ^ Braces are doubled for escaping in call to .format
49
+
50
+
51
+ def parse_args():
52
+ parser = argparse.ArgumentParser(description="")
53
+ parser.add_argument(
54
+ "-s",
55
+ "--splunk-creds",
56
+ help="Service credentials for Splunk API, user:pass",
57
+ dest="splunk_creds",
58
+ required=True,
59
+ )
60
+ parser.add_argument(
61
+ "-f",
62
+ "--criteria-filter",
63
+ help="Filter Splunk search results criteria field. Default: *",
64
+ dest="criteria_filter",
65
+ required=False,
66
+ default="*",
67
+ )
68
+ parser.add_argument(
69
+ "-c",
70
+ "--csv-report",
71
+ help="Splunk csv file from which to pull data.",
72
+ required=True,
73
+ dest="csv_report",
74
+ )
75
+ parser.add_argument(
76
+ "--csv-key",
77
+ help="Key(s) to apply to config from the csv. If not specified, applies all supported keys.",
78
+ choices=SUPPORTED_CSV_KEYS,
79
+ required=False,
80
+ nargs="*",
81
+ default=None,
82
+ dest="csv_keys",
83
+ )
84
+ parser.add_argument(
85
+ "--app",
86
+ help="Splunk app of the CSV file",
87
+ default="yelp_computeinfra",
88
+ required=False,
89
+ dest="splunk_app",
90
+ )
91
+ parser.add_argument(
92
+ "--git-remote",
93
+ help="Master git repo for soaconfigs",
94
+ default=None,
95
+ dest="git_remote",
96
+ )
97
+ parser.add_argument(
98
+ "--branch",
99
+ help="Branch name to push to. Defaults to master",
100
+ default="master",
101
+ required=False,
102
+ dest="branch",
103
+ )
104
+ parser.add_argument(
105
+ "--push-to-remote",
106
+ help="Actually push to remote. Otherwise files will only be modified and validated.",
107
+ action="store_true",
108
+ dest="push_to_remote",
109
+ )
110
+ parser.add_argument(
111
+ "--local-dir",
112
+ help="Act on configs in the local directory rather than cloning the git_remote",
113
+ required=False,
114
+ default=None,
115
+ dest="local_dir",
116
+ )
117
+ parser.add_argument(
118
+ "--source-id",
119
+ help="String to attribute the changes in the commit message. Defaults to csv report name",
120
+ required=False,
121
+ default=None,
122
+ dest="source_id",
123
+ )
124
+ parser.add_argument(
125
+ "-v",
126
+ "--verbose",
127
+ help="Logging verbosity",
128
+ action="store_true",
129
+ dest="verbose",
130
+ )
131
+ parser.add_argument(
132
+ "--exclude-clusters",
133
+ required=False,
134
+ default=None,
135
+ nargs="+",
136
+ )
137
+ return parser.parse_args()
138
+
139
+
140
+ def get_default_git_remote():
141
+ system_paasta_config = load_system_paasta_config()
142
+ repo_config = system_paasta_config.get_git_repo_config("yelpsoa-configs")
143
+ default_git_remote = format_git_url(
144
+ system_paasta_config.get_git_config()["git_user"],
145
+ repo_config.get("git_server", DEFAULT_SOA_CONFIGS_GIT_URL),
146
+ repo_config["repo_name"],
147
+ )
148
+ return default_git_remote
149
+
150
+
151
+ SupportedInstanceType = Literal["kubernetes", "eks", "cassandracluster"]
152
+
153
+
154
+ class CassandraRightsizerResult(TypedDict):
155
+ current_cpus: str
156
+ suggested_cpus: str
157
+
158
+ current_disk: str
159
+ suggested_disk: str
160
+
161
+ current_mem: str
162
+ suggested_mem: str
163
+
164
+ current_replicas: str
165
+ suggested_replicas: str
166
+
167
+
168
+ class CassandraRecommendation(TypedDict, total=False):
169
+ disk: str
170
+ mem: str
171
+ cpus: float
172
+ replicas: int
173
+ cpu_burst_percent: float
174
+
175
+
176
+ class KubernetesRightsizerResult(TypedDict):
177
+ current_cpus: str
178
+ suggested_cpus: str
179
+
180
+ current_disk: str
181
+ suggested_disk: str
182
+
183
+ current_mem: str
184
+ suggested_mem: str
185
+
186
+ suggested_hacheck_cpus: float
187
+
188
+ suggested_cpu_burst_add: float
189
+
190
+ suggested_min_instances: int
191
+
192
+ suggested_max_instances: int
193
+
194
+
195
+ class KubernetesRecommendation(TypedDict, total=False):
196
+ disk: float
197
+ mem: float
198
+ cpus: float
199
+ cpu_burst_add: float
200
+ max_instances: int
201
+ min_instances: int
202
+ sidecar_resource_requirements: Dict[str, SidecarResourceRequirements]
203
+
204
+
205
+ def get_kubernetes_recommendation_from_result(
206
+ result: KubernetesRightsizerResult, keys_to_apply: List[str]
207
+ ) -> KubernetesRecommendation:
208
+ rec: KubernetesRecommendation = {}
209
+ for key in keys_to_apply:
210
+ val: Optional[str] = cast(Optional[str], result.get(key))
211
+ if not val or val == NULL:
212
+ continue
213
+ if key == "cpus":
214
+ rec["cpus"] = float(val)
215
+ elif key == "cpu_burst_add":
216
+ rec["cpu_burst_add"] = min(1, float(val))
217
+ elif key == "mem":
218
+ rec["mem"] = max(128, round(float(val)))
219
+ elif key == "disk":
220
+ rec["disk"] = max(128, round(float(val)))
221
+ elif key == "min_instances":
222
+ rec["min_instances"] = int(val)
223
+ elif key == "max_instances":
224
+ rec["max_instances"] = int(val)
225
+ elif key == "hacheck_cpus":
226
+ hacheck_cpus_value = max(0.1, min(float(val), 1))
227
+ rec["sidecar_resource_requirements"] = {
228
+ "hacheck": {
229
+ "requests": {
230
+ "cpu": hacheck_cpus_value,
231
+ },
232
+ "limits": {
233
+ "cpu": hacheck_cpus_value,
234
+ },
235
+ },
236
+ }
237
+ return rec
238
+
239
+
240
+ def get_cassandra_recommendation_from_result(
241
+ result: CassandraRightsizerResult, keys_to_apply: List[str]
242
+ ) -> CassandraRecommendation:
243
+ rec: CassandraRecommendation = {}
244
+ for key in keys_to_apply:
245
+ val: Optional[str] = cast(Optional[str], result.get(key))
246
+ if not val or val == NULL:
247
+ continue
248
+ if key == "cpus":
249
+ rec["cpus"] = float(val)
250
+ elif key == "cpu_burst_percent":
251
+ rec["cpu_burst_percent"] = float(val)
252
+ elif key == "mem":
253
+ rec["mem"] = val
254
+ elif key == "disk":
255
+ rec["disk"] = val
256
+ elif key == "replicas":
257
+ rec["replicas"] = int(val)
258
+ return rec
259
+
260
+
261
+ def get_recommendations_by_service_file(
262
+ results,
263
+ keys_to_apply,
264
+ exclude_clusters: Set[str],
265
+ ):
266
+ results_by_service_file: Dict[tuple, Dict[str, Any]] = defaultdict(dict)
267
+ for result in results.values():
268
+ # we occasionally want to disable autotune for a cluster (or set of clusters)
269
+ # to do so, we can simply skip getting recommendations for any (service, cluster)
270
+ # pairing that includes the cluster(s) to disable
271
+ if result["cluster"] in exclude_clusters:
272
+ print(
273
+ f"{result['service']}.{result['instance']} in {result['cluster']} skipped due to disabled cluster."
274
+ )
275
+ continue
276
+
277
+ key = (
278
+ result["service"],
279
+ result["cluster"],
280
+ ) # e.g. (foo, kubernetes-norcal-stagef)
281
+ instance_type = result["cluster"].split("-", 1)[0]
282
+ rec: Union[KubernetesRecommendation, CassandraRecommendation] = {}
283
+ if instance_type == "cassandracluster":
284
+ rec = get_cassandra_recommendation_from_result(result, keys_to_apply)
285
+ elif instance_type == "kubernetes":
286
+ rec = get_kubernetes_recommendation_from_result(result, keys_to_apply)
287
+ if not rec:
288
+ continue
289
+ results_by_service_file[key][result["instance"]] = rec
290
+ return results_by_service_file
291
+
292
+
293
+ def get_extra_message(splunk_search_string):
294
+ return f"""Updated {AUTO_SOACONFIG_SUBDIR}. This review is based on results from the following Splunk search:\n
295
+ {splunk_search_string}
296
+ """
297
+
298
+
299
+ def main(args):
300
+ report = get_report_from_splunk(
301
+ args.splunk_creds, args.splunk_app, args.csv_report, args.criteria_filter
302
+ )
303
+ extra_message = get_extra_message(report["search"])
304
+ config_source = args.source_id or args.csv_report
305
+
306
+ keys_to_apply = args.csv_keys or SUPPORTED_CSV_KEYS
307
+ results = get_recommendations_by_service_file(
308
+ report["results"],
309
+ keys_to_apply,
310
+ exclude_clusters={
311
+ f"kubernetes-{cluster}" for cluster in (args.exclude_clusters or [])
312
+ },
313
+ )
314
+ updater = AutoConfigUpdater(
315
+ config_source=config_source,
316
+ git_remote=args.git_remote or get_default_git_remote(),
317
+ branch=args.branch,
318
+ working_dir=args.local_dir or "/nail/tmp",
319
+ do_clone=args.local_dir is None,
320
+ validation_schema_path=AUTO_SOACONFIG_SUBDIR,
321
+ )
322
+ with updater:
323
+ for (
324
+ service,
325
+ instance_type_cluster,
326
+ ), instance_recommendations in updater.merge_recommendations(results).items():
327
+ log.info(
328
+ f"Writing configs for {service} to {AUTO_SOACONFIG_SUBDIR}/{instance_type_cluster}.yaml..."
329
+ )
330
+ updater.write_configs(
331
+ service,
332
+ instance_type_cluster,
333
+ instance_recommendations,
334
+ AUTO_SOACONFIG_SUBDIR,
335
+ HEADER_COMMENT,
336
+ )
337
+
338
+ if args.push_to_remote:
339
+ updater.commit_to_remote(extra_message=extra_message)
340
+ else:
341
+ updater.validate()
342
+
343
+
344
+ if __name__ == "__main__":
345
+ args = parse_args()
346
+ if args.verbose:
347
+ logging.basicConfig(level=logging.DEBUG)
348
+ main(args)
@@ -0,0 +1,157 @@
1
+ import argparse
2
+ import logging
3
+
4
+ from paasta_tools.config_utils import AutoConfigUpdater
5
+ from paasta_tools.utils import DEFAULT_SOA_CONFIGS_GIT_URL
6
+ from paasta_tools.utils import format_git_url
7
+ from paasta_tools.utils import load_system_paasta_config
8
+
9
+ log = logging.getLogger(__name__)
10
+
11
+
12
+ def get_default_git_remote() -> str:
13
+ system_paasta_config = load_system_paasta_config()
14
+ repo_config = system_paasta_config.get_git_repo_config("yelpsoa-configs")
15
+ default_git_remote = format_git_url(
16
+ system_paasta_config.get_git_config()["git_user"],
17
+ repo_config.get("git_server", DEFAULT_SOA_CONFIGS_GIT_URL),
18
+ repo_config["repo_name"],
19
+ )
20
+ return default_git_remote
21
+
22
+
23
+ def parse_args():
24
+ parser = argparse.ArgumentParser(description="")
25
+ parser.add_argument(
26
+ "--git-remote",
27
+ help="Master git repo for soaconfigs",
28
+ default=get_default_git_remote(),
29
+ dest="git_remote",
30
+ )
31
+ parser.add_argument(
32
+ "--branch",
33
+ help="Branch name to push to",
34
+ required=True,
35
+ dest="branch",
36
+ )
37
+ parser.add_argument(
38
+ "--local-dir",
39
+ help="Act on configs in the local directory rather than cloning the git_remote",
40
+ required=False,
41
+ default=None,
42
+ dest="local_dir",
43
+ )
44
+ parser.add_argument(
45
+ "-v",
46
+ "--verbose",
47
+ help="Logging verbosity",
48
+ action="store_true",
49
+ dest="verbose",
50
+ )
51
+ parser.add_argument(
52
+ "--source-id",
53
+ help="String to attribute the changes in the commit message.",
54
+ required=False,
55
+ default=None,
56
+ dest="source_id",
57
+ )
58
+ parser.add_argument(
59
+ "--service",
60
+ help="Service to modify",
61
+ required=True,
62
+ dest="service",
63
+ )
64
+ parser.add_argument(
65
+ "--shard-name",
66
+ help="Shard name to remove",
67
+ required=True,
68
+ dest="shard_name",
69
+ )
70
+ parser.add_argument(
71
+ "--superregion",
72
+ nargs="+",
73
+ help="Superregion to remove shard from",
74
+ required=True,
75
+ )
76
+ return parser.parse_args()
77
+
78
+
79
+ SUPPERREGION_DEPLOY_MAPPINGS = {
80
+ "norcal-devc": "dev",
81
+ "norcal-stagef": "stage",
82
+ "norcal-stageg": "stage",
83
+ "nova-prod": "prod",
84
+ "pnw-prod": "prod",
85
+ }
86
+
87
+
88
+ def main(args):
89
+ updater = AutoConfigUpdater(
90
+ config_source=args.source_id,
91
+ git_remote=args.git_remote,
92
+ branch=args.branch,
93
+ working_dir=args.local_dir or "/nail/tmp",
94
+ do_clone=args.local_dir is None,
95
+ )
96
+ with updater:
97
+ deploy_file = updater.get_existing_configs(args.service, "deploy")
98
+ smartstack_file = updater.get_existing_configs(args.service, "smartstack")
99
+ delete_all = set(args.superregion) == set(SUPPERREGION_DEPLOY_MAPPINGS.keys())
100
+
101
+ for superregion in args.superregion:
102
+ # Determine / load configuration (PAASTA-18216)
103
+ eks_config = updater.get_existing_configs(
104
+ args.service, f"eks-{superregion}"
105
+ )
106
+ kube_config = updater.get_existing_configs(
107
+ args.service, f"kubernetes-{superregion}"
108
+ )
109
+
110
+ if eks_config:
111
+ config_file = eks_config
112
+ config_file_suffix = "eks"
113
+ elif kube_config:
114
+ config_file = kube_config
115
+ config_file_suffix = "kubernetes"
116
+ else:
117
+ log.error(f"No EKS or Kubernetes config found for {args.service}")
118
+ continue
119
+
120
+ # Remove shard from deploy pipeline config
121
+ targeted_step = (
122
+ f"{SUPPERREGION_DEPLOY_MAPPINGS[superregion]}.{args.shard_name}"
123
+ )
124
+ deploy_file["pipeline"] = [
125
+ i for i in deploy_file["pipeline"] if i["step"] != targeted_step
126
+ ]
127
+ log.info(f"{targeted_step} removed from deploy config")
128
+ updater.write_configs(args.service, "deploy", deploy_file)
129
+
130
+ # Remove shard from corresponding config
131
+ del config_file[args.shard_name]
132
+ updater.write_configs(
133
+ args.service, f"{config_file_suffix}-{superregion}", config_file
134
+ )
135
+ log.info(
136
+ f"{args.shard_name} removed from {config_file_suffix}-{superregion}"
137
+ )
138
+
139
+ # If we are removing the shard from all regions, remove it from smartstack too.
140
+ if delete_all:
141
+ del smartstack_file[args.shard_name]
142
+ updater.write_configs(args.service, "smartstack", smartstack_file)
143
+ log.info(f"{args.shard_name} removed from smartstack")
144
+ else:
145
+ log.info(f"not removing {args.shard_name} from smartstack")
146
+
147
+ updater.commit_to_remote()
148
+
149
+
150
+ if __name__ == "__main__":
151
+ args = parse_args()
152
+ if args.verbose:
153
+ logging.basicConfig(level=logging.DEBUG)
154
+ else:
155
+ logging.basicConfig(level=logging.WARNING)
156
+
157
+ main(args)