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,353 @@
1
+ #!python
2
+ # Copyright 2015-2018 Yelp Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ """
16
+ Usage: ./setup_kubernetes_job.py <service.instance> [options]
17
+
18
+ Command line options:
19
+
20
+ - -d <SOA_DIR>, --soa-dir <SOA_DIR>: Specify a SOA config dir to read from
21
+ - -v, --verbose: Verbose output
22
+ """
23
+ import argparse
24
+ import logging
25
+ import sys
26
+ import traceback
27
+ from typing import List
28
+ from typing import Optional
29
+ from typing import Sequence
30
+ from typing import Tuple
31
+ from typing import Union
32
+
33
+ from paasta_tools.eks_tools import EksDeploymentConfig
34
+ from paasta_tools.eks_tools import load_eks_service_config_no_cache
35
+ from paasta_tools.kubernetes.application.controller_wrappers import Application
36
+ from paasta_tools.kubernetes.application.controller_wrappers import (
37
+ get_application_wrapper,
38
+ )
39
+ from paasta_tools.kubernetes_tools import ensure_namespace
40
+ from paasta_tools.kubernetes_tools import InvalidKubernetesConfig
41
+ from paasta_tools.kubernetes_tools import KubeClient
42
+ from paasta_tools.kubernetes_tools import KubernetesDeploymentConfig
43
+ from paasta_tools.kubernetes_tools import list_all_paasta_deployments
44
+ from paasta_tools.kubernetes_tools import load_kubernetes_service_config_no_cache
45
+ from paasta_tools.metrics import metrics_lib
46
+ from paasta_tools.utils import decompose_job_id
47
+ from paasta_tools.utils import DEFAULT_SOA_DIR
48
+ from paasta_tools.utils import InvalidJobNameError
49
+ from paasta_tools.utils import load_system_paasta_config
50
+ from paasta_tools.utils import NoConfigurationForServiceError
51
+ from paasta_tools.utils import NoDeploymentsAvailable
52
+ from paasta_tools.utils import SPACER
53
+
54
+ log = logging.getLogger(__name__)
55
+
56
+
57
+ def parse_args() -> argparse.Namespace:
58
+ parser = argparse.ArgumentParser(description="Creates Kubernetes jobs.")
59
+ parser.add_argument(
60
+ "service_instance_list",
61
+ nargs="+",
62
+ help="The list of Kubernetes service instances to create or update",
63
+ metavar="SERVICE%sINSTANCE" % SPACER,
64
+ )
65
+ parser.add_argument(
66
+ "-d",
67
+ "--soa-dir",
68
+ dest="soa_dir",
69
+ metavar="SOA_DIR",
70
+ default=DEFAULT_SOA_DIR,
71
+ help="define a different soa config directory",
72
+ )
73
+ parser.add_argument(
74
+ "-c",
75
+ "--cluster",
76
+ dest="cluster",
77
+ help="paasta cluster",
78
+ )
79
+ parser.add_argument(
80
+ "-v",
81
+ "--verbose",
82
+ action="store_true",
83
+ dest="verbose",
84
+ default=False,
85
+ )
86
+ parser.add_argument(
87
+ "-l",
88
+ "--rate-limit",
89
+ dest="rate_limit",
90
+ default=0,
91
+ metavar="LIMIT",
92
+ type=int,
93
+ help="Update or create up to this number of service instances. Default is 0 (no limit).",
94
+ )
95
+ parser.add_argument(
96
+ "--eks",
97
+ help="This flag deploys only k8 services that should run on EKS",
98
+ dest="eks",
99
+ action="store_true",
100
+ default=False,
101
+ )
102
+ args = parser.parse_args()
103
+ return args
104
+
105
+
106
+ def main() -> None:
107
+ args = parse_args()
108
+ soa_dir = args.soa_dir
109
+ if args.verbose:
110
+ logging.basicConfig(level=logging.DEBUG)
111
+ else:
112
+ # filter out unwanted zookeeper messages in the log
113
+ logging.getLogger("kazoo").setLevel(logging.WARN)
114
+ logging.basicConfig(level=logging.INFO)
115
+
116
+ # emit deploy events for updated jobs
117
+ deploy_metrics = metrics_lib.get_metrics_interface("paasta")
118
+
119
+ # emit timing metrics for s_k_j
120
+ cluster = args.cluster or load_system_paasta_config().get_cluster()
121
+ timer = metrics_lib.system_timer(
122
+ dimensions=dict(
123
+ cluster=cluster,
124
+ eks=args.eks,
125
+ ),
126
+ )
127
+ timer.start()
128
+
129
+ kube_client = KubeClient()
130
+ service_instances_valid = True
131
+
132
+ # validate the service_instance names
133
+ service_instances_with_valid_names = get_service_instances_with_valid_names(
134
+ service_instances=args.service_instance_list
135
+ )
136
+
137
+ # returns a list of pairs of (No error?, KubernetesDeploymentConfig | EksDeploymentConfig) for every service_instance
138
+ service_instance_configs_list = get_kubernetes_deployment_config(
139
+ service_instances_with_valid_names=service_instances_with_valid_names,
140
+ cluster=cluster,
141
+ soa_dir=soa_dir,
142
+ eks=args.eks,
143
+ )
144
+
145
+ if ((False, None) in service_instance_configs_list) or (
146
+ len(service_instances_with_valid_names) != len(args.service_instance_list)
147
+ ):
148
+ service_instances_valid = False
149
+
150
+ if service_instance_configs_list:
151
+ for _, service_instance_config in service_instance_configs_list:
152
+ if service_instance_config:
153
+ ensure_namespace(
154
+ kube_client, namespace=service_instance_config.get_namespace()
155
+ )
156
+
157
+ setup_kube_succeeded = setup_kube_deployments(
158
+ kube_client=kube_client,
159
+ cluster=args.cluster or load_system_paasta_config().get_cluster(),
160
+ service_instance_configs_list=service_instance_configs_list,
161
+ rate_limit=args.rate_limit,
162
+ soa_dir=soa_dir,
163
+ metrics_interface=deploy_metrics,
164
+ eks=args.eks,
165
+ )
166
+ else:
167
+ setup_kube_succeeded = False
168
+ exit_code = 0 if setup_kube_succeeded and service_instances_valid else 1
169
+
170
+ timer.stop(tmp_dimensions={"result": exit_code})
171
+ logging.info(
172
+ f"Stopping timer for {cluster} (eks={args.eks}) with result {exit_code}: {timer()}ms elapsed"
173
+ )
174
+ sys.exit(exit_code)
175
+
176
+
177
+ def get_service_instances_with_valid_names(
178
+ service_instances: Sequence[str],
179
+ ) -> List[Tuple[str, str, str, str]]:
180
+ service_instances_with_valid_names = [
181
+ decompose_job_id(service_instance)
182
+ for service_instance in service_instances
183
+ if validate_job_name(service_instance)
184
+ ]
185
+ return service_instances_with_valid_names
186
+
187
+
188
+ def validate_job_name(service_instance: str) -> bool:
189
+ try:
190
+ service, instance, _, __ = decompose_job_id(service_instance)
191
+ except InvalidJobNameError:
192
+ log.error(
193
+ "Invalid service instance specified. Format is service%sinstance." % SPACER
194
+ )
195
+ return False
196
+ return True
197
+
198
+
199
+ def get_kubernetes_deployment_config(
200
+ service_instances_with_valid_names: list,
201
+ cluster: str,
202
+ soa_dir: str = DEFAULT_SOA_DIR,
203
+ eks: bool = False,
204
+ ) -> List[Tuple[bool, Union[KubernetesDeploymentConfig, EksDeploymentConfig]]]:
205
+ service_instance_configs_list = []
206
+ for service_instance in service_instances_with_valid_names:
207
+ try:
208
+ service_instance_config: Union[
209
+ KubernetesDeploymentConfig, EksDeploymentConfig
210
+ ]
211
+ if eks:
212
+ service_instance_config = load_eks_service_config_no_cache(
213
+ service=service_instance[0],
214
+ instance=service_instance[1],
215
+ cluster=cluster,
216
+ soa_dir=soa_dir,
217
+ )
218
+ else:
219
+ service_instance_config = load_kubernetes_service_config_no_cache(
220
+ service=service_instance[0],
221
+ instance=service_instance[1],
222
+ cluster=cluster,
223
+ soa_dir=soa_dir,
224
+ )
225
+ service_instance_configs_list.append((True, service_instance_config))
226
+ except NoDeploymentsAvailable:
227
+ log.debug(
228
+ "No deployments found for %s.%s in cluster %s. Skipping."
229
+ % (service_instance[0], service_instance[1], cluster)
230
+ )
231
+ service_instance_configs_list.append((True, None))
232
+ except NoConfigurationForServiceError:
233
+ error_msg = (
234
+ f"Could not read kubernetes configuration file for %s.%s in cluster %s"
235
+ % (service_instance[0], service_instance[1], cluster)
236
+ )
237
+ log.error(error_msg)
238
+ service_instance_configs_list.append((False, None))
239
+ return service_instance_configs_list
240
+
241
+
242
+ def setup_kube_deployments(
243
+ kube_client: KubeClient,
244
+ cluster: str,
245
+ service_instance_configs_list: List[
246
+ Tuple[bool, Union[KubernetesDeploymentConfig, EksDeploymentConfig]]
247
+ ],
248
+ rate_limit: int = 0,
249
+ soa_dir: str = DEFAULT_SOA_DIR,
250
+ metrics_interface: metrics_lib.BaseMetrics = metrics_lib.NoMetrics("paasta"),
251
+ eks: bool = False,
252
+ ) -> bool:
253
+
254
+ if not service_instance_configs_list:
255
+ return True
256
+
257
+ existing_kube_deployments = set(list_all_paasta_deployments(kube_client))
258
+ existing_apps = {
259
+ (deployment.service, deployment.instance, deployment.namespace)
260
+ for deployment in existing_kube_deployments
261
+ }
262
+
263
+ applications = [
264
+ create_application_object(
265
+ cluster=cluster,
266
+ soa_dir=soa_dir,
267
+ service_instance_config=service_instance,
268
+ eks=eks,
269
+ )
270
+ if service_instance
271
+ else (_, None)
272
+ for _, service_instance in service_instance_configs_list
273
+ ]
274
+ api_updates = 0
275
+ for _, app in applications:
276
+ if app:
277
+ app_dimensions = {
278
+ "paasta_service": app.kube_deployment.service,
279
+ "paasta_instance": app.kube_deployment.instance,
280
+ "paasta_cluster": cluster,
281
+ "paasta_namespace": app.kube_deployment.namespace,
282
+ }
283
+ try:
284
+ app.update_dependency_api_objects(kube_client)
285
+ if (
286
+ app.kube_deployment.service,
287
+ app.kube_deployment.instance,
288
+ app.kube_deployment.namespace,
289
+ ) not in existing_apps:
290
+ if app.soa_config.get_bounce_method() == "downthenup":
291
+ if any(
292
+ (
293
+ existing_app[:2]
294
+ == (
295
+ app.kube_deployment.service,
296
+ app.kube_deployment.instance,
297
+ )
298
+ )
299
+ for existing_app in existing_apps
300
+ ):
301
+ # For downthenup, we don't want to create until cleanup_kubernetes_job has cleaned up the instance in the other namespace.
302
+ continue
303
+ log.info(f"Creating {app} because it does not exist yet.")
304
+ app.create(kube_client)
305
+ app_dimensions["deploy_event"] = "create"
306
+ metrics_interface.emit_event(
307
+ name="deploy",
308
+ dimensions=app_dimensions,
309
+ )
310
+ api_updates += 1
311
+ elif app.kube_deployment not in existing_kube_deployments:
312
+ log.info(f"Updating {app} because configs have changed.")
313
+ app.update(kube_client)
314
+ app_dimensions["deploy_event"] = "update"
315
+ metrics_interface.emit_event(
316
+ name="deploy",
317
+ dimensions=app_dimensions,
318
+ )
319
+ api_updates += 1
320
+ else:
321
+ log.info(f"{app} is up-to-date!")
322
+
323
+ log.info(f"Ensuring related API objects for {app} are in sync")
324
+ app.update_related_api_objects(kube_client)
325
+ except Exception:
326
+ log.exception(f"Error while processing: {app}")
327
+ if rate_limit > 0 and api_updates >= rate_limit:
328
+ log.info(
329
+ f"Not doing any further updates as we reached the limit ({api_updates})"
330
+ )
331
+ break
332
+ return (False, None) not in applications
333
+
334
+
335
+ def create_application_object(
336
+ cluster: str,
337
+ soa_dir: str,
338
+ service_instance_config: Union[KubernetesDeploymentConfig, EksDeploymentConfig],
339
+ eks: bool = False,
340
+ ) -> Tuple[bool, Optional[Application]]:
341
+ try:
342
+ formatted_application = service_instance_config.format_kubernetes_app()
343
+ except InvalidKubernetesConfig:
344
+ log.error(traceback.format_exc())
345
+ return False, None
346
+
347
+ app = get_application_wrapper(formatted_application)
348
+ app.load_local_config(soa_dir, cluster, eks)
349
+ return True, app
350
+
351
+
352
+ if __name__ == "__main__":
353
+ main()