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,240 @@
1
+ """iptables helper functions.
2
+
3
+ Unlike the `firewall` module, these functions know nothing about PaaSTA and
4
+ could effectively be a third-party library. They just make working with
5
+ iptables a little bit easier.
6
+ """
7
+ import collections
8
+ import contextlib
9
+ import logging
10
+
11
+ import iptc
12
+
13
+ log = logging.getLogger(__name__)
14
+
15
+
16
+ RULE_TARGET_SORT_ORDER = {
17
+ # all else defaults to '0'
18
+ "LOG": 1,
19
+ "REJECT": 2.0,
20
+ }
21
+
22
+
23
+ _RuleBase = collections.namedtuple(
24
+ "_RuleBase", ("protocol", "src", "dst", "target", "matches", "target_parameters")
25
+ )
26
+
27
+
28
+ class Rule(_RuleBase):
29
+ """Rule representation.
30
+
31
+ Working with iptc's rule classes directly doesn't work well, since rules
32
+ represent actual existing iptables rules, and changes are applied
33
+ immediately. They're also difficult to compare.
34
+ """
35
+
36
+ def __new__(cls, *args, **kwargs):
37
+ result = _RuleBase.__new__(cls, *args, **kwargs)
38
+ result.validate()
39
+ return result
40
+
41
+ def _replace(self, **kwargs):
42
+ result = super()._replace(**kwargs)
43
+ result.validate()
44
+ return result
45
+
46
+ def validate(self):
47
+ if self.target == "REJECT":
48
+ assert any(
49
+ name == "reject-with" for name, _ in self.target_parameters
50
+ ), "REJECT rules must specify reject-with"
51
+ assert tuple(sorted(self.matches)) == self.matches, "matches should be sorted"
52
+ for match_name, params in self.matches:
53
+ for param_name, param_value in params:
54
+ assert (
55
+ "_" not in param_name
56
+ ), f"use dashes instead of underscores in {param_name}"
57
+ assert isinstance(
58
+ param_value, tuple
59
+ ), f"value of {param_name} should be tuple"
60
+ assert (
61
+ tuple(sorted(self.target_parameters)) == self.target_parameters
62
+ ), "target_parameters should be sorted"
63
+ for param_name, param_value in self.target_parameters:
64
+ assert (
65
+ "_" not in param_name
66
+ ), f"use dashes instead of underscores in {param_name}"
67
+ assert isinstance(
68
+ param_value, tuple
69
+ ), f"value of {param_name} should be tuple"
70
+
71
+ @classmethod
72
+ def from_iptc(cls, rule):
73
+ fields = {
74
+ "protocol": rule.protocol,
75
+ "src": rule.src,
76
+ "dst": rule.dst,
77
+ "target": rule.target.name,
78
+ "matches": (),
79
+ "target_parameters": (),
80
+ }
81
+
82
+ for param_name, param_value in sorted(rule.target.get_all_parameters().items()):
83
+ fields["target_parameters"] += ((param_name, tuple(param_value)),)
84
+
85
+ matches = []
86
+ for match in rule.matches:
87
+ matches.append(
88
+ (
89
+ match.name,
90
+ tuple(
91
+ (param, tuple(value))
92
+ for param, value in sorted(match.get_all_parameters().items())
93
+ ),
94
+ )
95
+ )
96
+ # ensure that matches are sorted for consistency with matching
97
+ fields["matches"] = tuple(sorted(matches))
98
+
99
+ return cls(**fields)
100
+
101
+ def to_iptc(self):
102
+ rule = iptc.Rule()
103
+ rule.protocol = self.protocol
104
+ rule.src = self.src
105
+ rule.dst = self.dst
106
+ target = rule.create_target(self.target)
107
+ for param_name, param_value in self.target_parameters:
108
+ target.set_parameter(param_name, param_value)
109
+ for name, params in self.matches:
110
+ match = rule.create_match(name)
111
+ for param_name, param_value in params:
112
+ match.set_parameter(param_name, param_value)
113
+ return rule
114
+
115
+
116
+ @contextlib.contextmanager
117
+ def iptables_txn(table):
118
+ """Temporarily disable autocommit and commit at the end.
119
+
120
+ If an exception occurs, changes are rolled back.
121
+
122
+ By default, changes to iptables rules are applied immediately. In some
123
+ cases, we want to avoid that.
124
+
125
+ https://github.com/ldx/python-iptables#autocommit
126
+ """
127
+ assert table.autocommit is True, table.autocommit
128
+ try:
129
+ table.autocommit = False
130
+ yield
131
+ table.commit()
132
+ finally:
133
+ table.refresh()
134
+ table.autocommit = True
135
+
136
+
137
+ class ChainDoesNotExist(Exception):
138
+ pass
139
+
140
+
141
+ def all_chains():
142
+ return {chain.name for chain in iptc.Table(iptc.Table.FILTER).chains}
143
+
144
+
145
+ def ensure_chain(chain, rules):
146
+ """Idempotently ensure a chain exists and has an exact set of rules.
147
+
148
+ This function creates or updates an existing chain to match the rules
149
+ passed in.
150
+
151
+ This function will not reorder existing rules, but any new rules are always
152
+ inserted at the front of the chain.
153
+ """
154
+ try:
155
+ current_rules = set(list_chain(chain))
156
+ except ChainDoesNotExist:
157
+ create_chain(chain)
158
+ current_rules = set()
159
+
160
+ for rule in rules:
161
+ if rule not in current_rules:
162
+ insert_rule(chain, rule)
163
+
164
+ extra_rules = current_rules - set(rules)
165
+ if extra_rules:
166
+ delete_rules(chain, extra_rules)
167
+
168
+
169
+ def _rule_sort_key(rule_tuple):
170
+ old_index, rule = rule_tuple
171
+ target_name = rule.target
172
+ return (RULE_TARGET_SORT_ORDER.get(target_name, 0), old_index)
173
+
174
+
175
+ def reorder_chain(chain_name):
176
+ """Ensure that any REJECT rules are last, and any LOG rules are second-to-last"""
177
+
178
+ table = iptc.Table(iptc.Table.FILTER)
179
+ with iptables_txn(table):
180
+ rules = list_chain(chain_name)
181
+ chain = iptc.Chain(table, chain_name)
182
+
183
+ # sort the rules by rule_key, which uses (RULE_TARGET_SORT_ORDER, idx)
184
+ sorted_rules_with_indices = sorted(enumerate(rules), key=_rule_sort_key)
185
+
186
+ for new_index, (old_index, rule) in enumerate(sorted_rules_with_indices):
187
+ if new_index == old_index:
188
+ continue
189
+ log.debug(f"reordering chain {chain_name} rule {rule} to #{new_index}")
190
+ chain.replace_rule(rule.to_iptc(), new_index)
191
+
192
+
193
+ def ensure_rule(chain, rule):
194
+ rules = list_chain(chain)
195
+ if rule not in rules:
196
+ insert_rule(chain, rule)
197
+
198
+
199
+ def insert_rule(chain_name, rule):
200
+ log.debug(f"adding rule to {chain_name}: {rule}")
201
+ chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), chain_name)
202
+ chain.insert_rule(rule.to_iptc())
203
+
204
+
205
+ def delete_rules(chain_name, rules):
206
+ log.debug(f"deleting rules from {chain_name}: {rules}")
207
+ table = iptc.Table(iptc.Table.FILTER)
208
+ with iptables_txn(table):
209
+ chain = iptc.Chain(table, chain_name)
210
+ for potential_rule in chain.rules:
211
+ if Rule.from_iptc(potential_rule) in rules:
212
+ chain.delete_rule(potential_rule)
213
+
214
+
215
+ def create_chain(chain_name):
216
+ log.debug(f"creating chain: {chain_name}")
217
+ iptc.Table(iptc.Table.FILTER).create_chain(chain_name)
218
+
219
+
220
+ def delete_chain(chain_name):
221
+ log.debug(f"deleting chain: {chain_name}")
222
+ chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), chain_name)
223
+ chain.flush()
224
+ chain.delete()
225
+
226
+
227
+ def list_chain(chain_name):
228
+ """List rules in a chain.
229
+
230
+ Returns a list of iptables rules, or raises ChainDoesNotExist.
231
+ """
232
+ table = iptc.Table(iptc.Table.FILTER)
233
+ chain = iptc.Chain(table, chain_name)
234
+ # TODO: is there any way to do this without listing all chains? (probably slow)
235
+ # If the chain doesn't exist, chain.rules will be an empty list, so we need
236
+ # to make sure the chain actually _does_ exist.
237
+ if chain in table.chains:
238
+ return tuple(Rule.from_iptc(rule) for rule in chain.rules)
239
+ else:
240
+ raise ChainDoesNotExist(chain_name)
@@ -0,0 +1,143 @@
1
+ # Copyright 2015-2019 Yelp Inc.
2
+ # Licensed under the Apache License, Version 2.0 (the "License");
3
+ # you may not use this file except in compliance with the License.
4
+ # You may obtain a copy of the License at
5
+ #
6
+ # http://www.apache.org/licenses/LICENSE-2.0
7
+ #
8
+ # Unless required by applicable law or agreed to in writing, software
9
+ # distributed under the License is distributed on an "AS IS" BASIS,
10
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11
+ # See the License for the specific language governing permissions and
12
+ # limitations under the License.
13
+ from typing import List
14
+ from typing import Mapping
15
+ from typing import Optional
16
+
17
+ import service_configuration_lib
18
+
19
+ from paasta_tools.kubernetes_tools import sanitised_cr_name
20
+ from paasta_tools.long_running_service_tools import LongRunningServiceConfig
21
+ from paasta_tools.long_running_service_tools import LongRunningServiceConfigDict
22
+ from paasta_tools.utils import BranchDictV2
23
+ from paasta_tools.utils import deep_merge_dictionaries
24
+ from paasta_tools.utils import DEFAULT_SOA_DIR
25
+ from paasta_tools.utils import load_service_instance_config
26
+ from paasta_tools.utils import load_v2_deployments_json
27
+
28
+
29
+ class KafkaClusterDeploymentConfigDict(LongRunningServiceConfigDict, total=False):
30
+ replicas: int
31
+
32
+
33
+ class KafkaClusterDeploymentConfig(LongRunningServiceConfig):
34
+ config_dict: KafkaClusterDeploymentConfigDict
35
+
36
+ config_filename_prefix = "kafkacluster"
37
+
38
+ def __init__(
39
+ self,
40
+ service: str,
41
+ cluster: str,
42
+ instance: str,
43
+ config_dict: KafkaClusterDeploymentConfigDict,
44
+ branch_dict: Optional[BranchDictV2],
45
+ soa_dir: str = DEFAULT_SOA_DIR,
46
+ ) -> None:
47
+
48
+ super().__init__(
49
+ cluster=cluster,
50
+ instance=instance,
51
+ service=service,
52
+ soa_dir=soa_dir,
53
+ config_dict=config_dict,
54
+ branch_dict=branch_dict,
55
+ )
56
+
57
+ def get_instances(self, with_limit: bool = True) -> int:
58
+ return self.config_dict.get("replicas", 1)
59
+
60
+ def validate(
61
+ self,
62
+ params: List[str] = [
63
+ "cpus",
64
+ "security",
65
+ "dependencies_reference",
66
+ "deploy_group",
67
+ ],
68
+ ) -> List[str]:
69
+ # Use InstanceConfig to validate shared config keys like cpus and mem
70
+ # TODO: add mem back to this list once we fix PAASTA-15582 and
71
+ # move to using the same units as flink/marathon etc.
72
+ error_msgs = super().validate(params=params)
73
+
74
+ if error_msgs:
75
+ name = self.get_instance()
76
+ return [f"{name}: {msg}" for msg in error_msgs]
77
+ else:
78
+ return []
79
+
80
+
81
+ def load_kafkacluster_instance_config(
82
+ service: str,
83
+ instance: str,
84
+ cluster: str,
85
+ load_deployments: bool = True,
86
+ soa_dir: str = DEFAULT_SOA_DIR,
87
+ ) -> KafkaClusterDeploymentConfig:
88
+ """Read a service instance's configuration for KafkaCluster.
89
+
90
+ If a branch isn't specified for a config, the 'branch' key defaults to
91
+ paasta-${cluster}.${instance}.
92
+
93
+ :param service: The service name
94
+ :param instance: The instance of the service to retrieve
95
+ :param cluster: The cluster to read the configuration for
96
+ :param load_deployments: A boolean indicating if the corresponding deployments.json for this service
97
+ should also be loaded
98
+ :param soa_dir: The SOA configuration directory to read from
99
+ :returns: A dictionary of whatever was in the config for the service instance"""
100
+ general_config = service_configuration_lib.read_service_configuration(
101
+ service, soa_dir=soa_dir
102
+ )
103
+ instance_config = load_service_instance_config(
104
+ service, instance, "kafkacluster", cluster, soa_dir=soa_dir
105
+ )
106
+ general_config = deep_merge_dictionaries(
107
+ overrides=instance_config, defaults=general_config
108
+ )
109
+
110
+ branch_dict: Optional[BranchDictV2] = None
111
+ if load_deployments:
112
+ deployments_json = load_v2_deployments_json(service, soa_dir=soa_dir)
113
+ temp_instance_config = KafkaClusterDeploymentConfig(
114
+ service=service,
115
+ cluster=cluster,
116
+ instance=instance,
117
+ config_dict=general_config,
118
+ branch_dict=None,
119
+ soa_dir=soa_dir,
120
+ )
121
+ branch = temp_instance_config.get_branch()
122
+ deploy_group = temp_instance_config.get_deploy_group()
123
+ branch_dict = deployments_json.get_branch_dict(service, branch, deploy_group)
124
+
125
+ return KafkaClusterDeploymentConfig(
126
+ service=service,
127
+ cluster=cluster,
128
+ instance=instance,
129
+ config_dict=general_config,
130
+ branch_dict=branch_dict,
131
+ soa_dir=soa_dir,
132
+ )
133
+
134
+
135
+ # TODO: read this from CRD in service configs
136
+ def cr_id(service: str, instance: str) -> Mapping[str, str]:
137
+ return dict(
138
+ group="yelp.com",
139
+ version="v1alpha1",
140
+ namespace="paasta-kafkaclusters",
141
+ plural="kafkaclusters",
142
+ name=sanitised_cr_name(service, instance),
143
+ )
File without changes
File without changes