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,172 @@
1
+ #!/usr/bin/env python
2
+ # Copyright 2015-2016 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
+ import argparse
16
+ import datetime
17
+ import re
18
+ import sys
19
+ from typing import Optional
20
+
21
+ from paasta_tools.cli.utils import lazy_choices_completer
22
+ from paasta_tools.cli.utils import PaastaColors
23
+ from paasta_tools.cli.utils import validate_service_name
24
+ from paasta_tools.utils import DEFAULT_SOA_DIR
25
+ from paasta_tools.utils import DeploymentsJsonV2Dict
26
+ from paasta_tools.utils import format_timestamp
27
+ from paasta_tools.utils import get_pipeline_deploy_group_configs
28
+ from paasta_tools.utils import list_services
29
+ from paasta_tools.utils import load_v2_deployments_json
30
+ from paasta_tools.utils import optionally_load_system_paasta_config
31
+ from paasta_tools.utils import parse_timestamp
32
+
33
+
34
+ def add_subparser(subparsers: argparse._SubParsersAction) -> None:
35
+ parser = subparsers.add_parser(
36
+ "get-image-version",
37
+ help="Returns the value to be used for an image version, which will be used in automated redeploys of the same service SHA. If no deploy groups are configured for automated redeploys, will return no output.",
38
+ )
39
+ parser.add_argument(
40
+ "-f",
41
+ "--force",
42
+ help="Force a brand new image_version, regardless if the latest build was recent",
43
+ action="store_true",
44
+ default=False,
45
+ )
46
+ parser.add_argument(
47
+ "--max-age",
48
+ help="max age in seconds (default %(default)s)",
49
+ type=int,
50
+ default=2592000, # TODO: Get from paasta system config
51
+ )
52
+ arg_service = parser.add_argument(
53
+ "-s",
54
+ "--service",
55
+ help="Name of the service which you want to get the image version for.",
56
+ required=True,
57
+ )
58
+ arg_service.completer = lazy_choices_completer(list_services) # type: ignore
59
+ parser.add_argument(
60
+ "-c",
61
+ "--commit",
62
+ help="Commit to be used with generated image version",
63
+ required=True,
64
+ )
65
+ parser.add_argument(
66
+ "-y",
67
+ "--soa-dir",
68
+ help="A directory from which soa-configs should be read",
69
+ default=DEFAULT_SOA_DIR,
70
+ )
71
+ parser.set_defaults(command=paasta_get_image_version)
72
+
73
+
74
+ def check_enable_automated_redeploys(service: str, soa_dir: str) -> bool:
75
+ deploy_steps = get_pipeline_deploy_group_configs(service, soa_dir)
76
+ enabled_by_default = (
77
+ optionally_load_system_paasta_config().get_enable_automated_redeploys_default()
78
+ )
79
+ return any(
80
+ [
81
+ step.get("enable_automated_redeploys", enabled_by_default)
82
+ for step in deploy_steps
83
+ ]
84
+ )
85
+
86
+
87
+ def extract_timestamp(image_version: str) -> Optional[datetime.datetime]:
88
+ ts_str = re.match(r"^(?P<ts_str>[0-9]{8}T[0-9]{6})", image_version).group()
89
+ return parse_timestamp(ts_str)
90
+
91
+
92
+ def should_generate_new_image_version(old: str, new: str, max_age: int) -> bool:
93
+ # TODO: Handle additional criteria
94
+ # Extract dates & compare
95
+ try:
96
+ age_diff = (extract_timestamp(new) - extract_timestamp(old)).total_seconds()
97
+
98
+ if age_diff < max_age:
99
+ return False
100
+ print(
101
+ PaastaColors.yellow(
102
+ f"Old image version was {age_diff}s old, generating new one"
103
+ ),
104
+ file=sys.stderr,
105
+ )
106
+ except Exception as e:
107
+ print(
108
+ PaastaColors.red(
109
+ f"Error: hit an exception {e} checking image version, will create new version {new}"
110
+ ),
111
+ file=sys.stderr,
112
+ )
113
+ return True
114
+
115
+
116
+ def get_latest_image_version(deployments: DeploymentsJsonV2Dict, commit: str) -> str:
117
+ image_version = None
118
+ # Image versions start with sortable timestamp
119
+ # We only care about deployments for this sha; otherwise we will generate a new image_version
120
+ sorted_image_versions = sorted(
121
+ [
122
+ deployment.get("image_version")
123
+ for deployment in deployments["deployments"].values()
124
+ if deployment.get("image_version") and deployment.get("git_sha") == commit
125
+ ],
126
+ reverse=True,
127
+ )
128
+ if sorted_image_versions:
129
+ image_version = sorted_image_versions[0]
130
+ return image_version
131
+
132
+
133
+ def paasta_get_image_version(args: argparse.Namespace) -> int:
134
+ service = args.service
135
+ soa_dir = args.soa_dir
136
+
137
+ validate_service_name(service, soa_dir)
138
+
139
+ # Check if any deploy groups have set enable_automated_redeploys
140
+ if not check_enable_automated_redeploys(service, soa_dir):
141
+ print(
142
+ PaastaColors.red(
143
+ f"Automated redeploys not enabled for {service}, returning no image_version"
144
+ ),
145
+ file=sys.stderr,
146
+ )
147
+ return 0
148
+
149
+ current_timestamp = datetime.datetime.now()
150
+
151
+ # TODO: Handle additional identifiers, flavor, etc
152
+ new_image_version = format_timestamp(current_timestamp)
153
+
154
+ if args.force:
155
+ # Force a new version immediately
156
+ print(new_image_version)
157
+ return 0
158
+
159
+ # get latest image_version of any deploy group from deployments.json
160
+ deployments = load_v2_deployments_json(service, soa_dir)
161
+ latest_image_version = get_latest_image_version(
162
+ deployments.config_dict, commit=args.commit
163
+ )
164
+
165
+ if should_generate_new_image_version(
166
+ old=latest_image_version, new=new_image_version, max_age=args.max_age
167
+ ):
168
+ print(new_image_version)
169
+ else:
170
+ print(latest_image_version)
171
+
172
+ return 0
@@ -0,0 +1,93 @@
1
+ #!/usr/bin/env python
2
+ # Copyright 2015-2016 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
+ import sys
16
+
17
+ from paasta_tools.cli.utils import lazy_choices_completer
18
+ from paasta_tools.cli.utils import list_deploy_groups
19
+ from paasta_tools.cli.utils import PaastaColors
20
+ from paasta_tools.cli.utils import validate_service_name
21
+ from paasta_tools.deployment_utils import get_currently_deployed_version
22
+ from paasta_tools.utils import DEFAULT_SOA_DIR
23
+ from paasta_tools.utils import list_services
24
+
25
+
26
+ def add_subparser(subparsers):
27
+ list_parser = subparsers.add_parser(
28
+ "get-latest-deployment",
29
+ help="Gets the Git SHA for the latest deployment of a service",
30
+ )
31
+ list_parser.add_argument(
32
+ "-s",
33
+ "--service",
34
+ help="Name of the service which you want to get the latest deployment for.",
35
+ required=True,
36
+ ).completer = lazy_choices_completer(list_services)
37
+ list_parser.add_argument(
38
+ "-i",
39
+ "-l",
40
+ "--deploy-group",
41
+ help="Name of the deploy group which you want to get the latest deployment for.",
42
+ required=True,
43
+ ).completer = lazy_choices_completer(list_deploy_groups)
44
+ list_parser.add_argument(
45
+ "-d",
46
+ "--soa-dir",
47
+ help="A directory from which soa-configs should be read from",
48
+ default=DEFAULT_SOA_DIR,
49
+ )
50
+ format_group = list_parser.add_mutually_exclusive_group()
51
+ format_group.add_argument(
52
+ "--sha-only",
53
+ help="Return only the latest sha for this deploy group, not the full deployed version",
54
+ action="store_true",
55
+ default=False,
56
+ )
57
+ format_group.add_argument(
58
+ "-j",
59
+ "--json",
60
+ help="Return result in json format instead of raw string",
61
+ action="store_true",
62
+ default=False,
63
+ )
64
+
65
+ list_parser.set_defaults(command=paasta_get_latest_deployment)
66
+
67
+
68
+ def paasta_get_latest_deployment(args):
69
+ service = args.service
70
+ deploy_group = args.deploy_group
71
+ soa_dir = args.soa_dir
72
+ validate_service_name(service, soa_dir)
73
+
74
+ version = get_currently_deployed_version(
75
+ service=service, deploy_group=deploy_group, soa_dir=soa_dir
76
+ )
77
+ if not version:
78
+ print(
79
+ PaastaColors.red(
80
+ f"A deployment could not be found for {deploy_group} in {service}"
81
+ ),
82
+ file=sys.stderr,
83
+ )
84
+ return 1
85
+ else:
86
+ if args.sha_only:
87
+ print(version.sha)
88
+ else:
89
+ if args.json:
90
+ print(version.json())
91
+ else:
92
+ print(version)
93
+ return 0
@@ -0,0 +1,155 @@
1
+ #!/usr/bin/env python
2
+ # Copyright 2015-2016 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
+ from typing import Collection
16
+ from typing import List
17
+
18
+ from service_configuration_lib import read_service_configuration
19
+
20
+ from paasta_tools.cli.cmds.status import get_actual_deployments
21
+ from paasta_tools.cli.utils import figure_out_service_name
22
+ from paasta_tools.cli.utils import lazy_choices_completer
23
+ from paasta_tools.long_running_service_tools import get_all_namespaces_for_service
24
+ from paasta_tools.long_running_service_tools import load_service_namespace_config
25
+ from paasta_tools.monitoring_tools import get_runbook
26
+ from paasta_tools.monitoring_tools import get_team
27
+ from paasta_tools.utils import DEFAULT_SOA_DIR
28
+ from paasta_tools.utils import get_git_url
29
+ from paasta_tools.utils import list_services
30
+ from paasta_tools.utils import NoDeploymentsAvailable
31
+ from paasta_tools.utils import PaastaColors
32
+
33
+ NO_DESCRIPTION_MESSAGE = "No 'description' entry in service.yaml. Please add a one line sentence that describes this service"
34
+ NO_EXTERNAL_LINK_MESSAGE = (
35
+ "No 'external_link' entry in service.yaml. "
36
+ "Please add one that points to a reference doc for your service"
37
+ )
38
+
39
+ # modes that depend on smartstack port cannot be tested via paasta proxies, so we exclude those
40
+ TESTABLE_SERVICE_MODES = {"http", "https"}
41
+
42
+
43
+ def add_subparser(subparsers):
44
+ list_parser = subparsers.add_parser(
45
+ "info",
46
+ help="Prints the general information about a service.",
47
+ description=(
48
+ "'paasta info' gathers information about a service from soa-configs "
49
+ "and prints it in a human-friendly way. It does no API calls, it "
50
+ "just analyzes the config files."
51
+ ),
52
+ )
53
+ list_parser.add_argument(
54
+ "-s", "--service", help="The name of the service you wish to inspect"
55
+ ).completer = lazy_choices_completer(list_services)
56
+ list_parser.add_argument(
57
+ "-d",
58
+ "--soa-dir",
59
+ dest="soa_dir",
60
+ metavar="SOA_DIR",
61
+ default=DEFAULT_SOA_DIR,
62
+ help="define a different soa config directory",
63
+ )
64
+ list_parser.set_defaults(command=paasta_info)
65
+
66
+
67
+ def deployments_to_clusters(deployments: Collection[str]) -> Collection[str]:
68
+ clusters = []
69
+ for deployment in deployments:
70
+ cluster = deployment.split(".")[0]
71
+ clusters.append(cluster)
72
+ return set(clusters)
73
+
74
+
75
+ def get_smartstack_endpoints(service, soa_dir):
76
+ endpoints = []
77
+ for name, config in get_all_namespaces_for_service(
78
+ service, full_name=False, soa_dir=soa_dir
79
+ ):
80
+ mode = config.get("mode", "http")
81
+ port = config.get("proxy_port")
82
+ endpoints.append(f"{mode}://169.254.255.254:{port} ({name})")
83
+ return endpoints
84
+
85
+
86
+ def get_deployments_strings(service: str, soa_dir: str) -> List[str]:
87
+ output = []
88
+ try:
89
+ deployments = get_actual_deployments(service, soa_dir)
90
+ except NoDeploymentsAvailable:
91
+ deployments = {}
92
+ if deployments == {}:
93
+ output.append(" - N/A: Not deployed to any PaaSTA Clusters")
94
+ else:
95
+ service_config = load_service_namespace_config(
96
+ service=service, namespace="main", soa_dir=soa_dir
97
+ )
98
+ service_mode = service_config.get_mode()
99
+ for cluster in deployments_to_clusters(deployments):
100
+ if service_mode in TESTABLE_SERVICE_MODES:
101
+ link = PaastaColors.cyan(
102
+ f"{service_mode}://{service}.proxy.{cluster}.paasta/"
103
+ )
104
+ else:
105
+ link = "N/A"
106
+ output.append(f" - {cluster} ({link})")
107
+ return output
108
+
109
+
110
+ def get_dashboard_urls(service):
111
+ output = [
112
+ " - %s (service load y/sl2)" % (PaastaColors.cyan(f"http://y/{service}_load"))
113
+ ]
114
+ return output
115
+
116
+
117
+ def get_service_info(service, soa_dir):
118
+ service_configuration = read_service_configuration(service, soa_dir)
119
+ description = service_configuration.get("description", NO_DESCRIPTION_MESSAGE)
120
+ external_link = service_configuration.get("external_link", NO_EXTERNAL_LINK_MESSAGE)
121
+ smartstack_endpoints = get_smartstack_endpoints(service, soa_dir)
122
+ git_url = get_git_url(service, soa_dir)
123
+
124
+ output = []
125
+ output.append("Service Name: %s" % service)
126
+ output.append("Description: %s" % description)
127
+ output.append("External Link: %s" % PaastaColors.cyan(external_link))
128
+ output.append(
129
+ "Monitored By: team %s"
130
+ % get_team(service=service, overrides={}, soa_dir=soa_dir)
131
+ )
132
+ output.append(
133
+ "Runbook: %s"
134
+ % PaastaColors.cyan(get_runbook(service=service, overrides={}, soa_dir=soa_dir))
135
+ )
136
+ output.append("Git Repo: %s" % git_url)
137
+ output.append(
138
+ "Deployed to the following clusters (with test URLs, where available):"
139
+ )
140
+ output.extend(get_deployments_strings(service, soa_dir))
141
+ if smartstack_endpoints:
142
+ output.append("Smartstack endpoint(s):")
143
+ for endpoint in smartstack_endpoints:
144
+ output.append(" - %s" % endpoint)
145
+ output.append("Dashboard(s):")
146
+ output.extend(get_dashboard_urls(service))
147
+
148
+ return "\n".join(output)
149
+
150
+
151
+ def paasta_info(args):
152
+ """Prints general information about a service"""
153
+ soa_dir = args.soa_dir
154
+ service = figure_out_service_name(args, soa_dir=soa_dir)
155
+ print(get_service_info(service, soa_dir))
@@ -0,0 +1,117 @@
1
+ #!/usr/bin/env python
2
+ # Copyright 2015-2016 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
+ import os
16
+
17
+ from paasta_tools.cli.utils import get_jenkins_build_output_url
18
+ from paasta_tools.cli.utils import lazy_choices_completer
19
+ from paasta_tools.cli.utils import validate_service_name
20
+ from paasta_tools.utils import _log
21
+ from paasta_tools.utils import _run
22
+ from paasta_tools.utils import build_docker_tag
23
+ from paasta_tools.utils import check_docker_image
24
+ from paasta_tools.utils import DEFAULT_SOA_DIR
25
+ from paasta_tools.utils import list_services
26
+
27
+
28
+ def add_subparser(subparsers):
29
+ list_parser = subparsers.add_parser(
30
+ "itest",
31
+ help="Runs 'make itest' as part of the PaaSTA contract.",
32
+ description=(
33
+ "'paasta itest' runs 'make itest' in the root of a service directory. "
34
+ "It is designed to be used in conjunction with the 'Jenkins' workflow: "
35
+ "http://paasta.readthedocs.io/en/latest/about/contract.html#jenkins-pipeline-recommended"
36
+ ),
37
+ )
38
+ list_parser.add_argument(
39
+ "-s",
40
+ "--service",
41
+ help="Test and build docker image for this service. Leading "
42
+ '"services-", as included in a Jenkins job name, '
43
+ "will be stripped.",
44
+ required=True,
45
+ )
46
+ list_parser.add_argument(
47
+ "-c",
48
+ "--commit",
49
+ help="Git sha used to construct tag for built image",
50
+ required=True,
51
+ )
52
+ list_parser.add_argument(
53
+ "--image-version",
54
+ type=str,
55
+ required=False,
56
+ default=None,
57
+ help="Extra version metadata used to construct tag for built image",
58
+ )
59
+ list_parser.add_argument(
60
+ "-d",
61
+ "--soa-dir",
62
+ dest="soa_dir",
63
+ help="A directory from which soa-configs should be read from",
64
+ default=DEFAULT_SOA_DIR,
65
+ ).completer = lazy_choices_completer(list_services)
66
+ list_parser.add_argument(
67
+ "--timeout",
68
+ dest="timeout",
69
+ help="How many seconds before this command times out",
70
+ default=3600,
71
+ type=float,
72
+ )
73
+ list_parser.set_defaults(command=paasta_itest)
74
+
75
+
76
+ def paasta_itest(args):
77
+ """Build and test a docker image"""
78
+ service = args.service
79
+ soa_dir = args.soa_dir
80
+ if service and service.startswith("services-"):
81
+ service = service.split("services-", 1)[1]
82
+ validate_service_name(service, soa_dir=soa_dir)
83
+
84
+ tag = build_docker_tag(service, args.commit, args.image_version)
85
+ run_env = os.environ.copy()
86
+ run_env["DOCKER_TAG"] = tag
87
+ cmd = "make itest"
88
+ loglines = []
89
+
90
+ _log(
91
+ service=service,
92
+ line="starting itest for %s." % args.commit,
93
+ component="build",
94
+ level="event",
95
+ )
96
+ returncode, output = _run(
97
+ cmd,
98
+ env=run_env,
99
+ timeout=args.timeout,
100
+ log=True,
101
+ component="build",
102
+ service=service,
103
+ loglevel="debug",
104
+ )
105
+ if returncode != 0:
106
+ loglines.append("ERROR: itest failed for %s." % args.commit)
107
+ output = get_jenkins_build_output_url()
108
+ if output:
109
+ loglines.append("See output: %s" % output)
110
+ else:
111
+ loglines.append("itest passed for %s." % args.commit)
112
+ if not check_docker_image(service, args.commit, args.image_version):
113
+ loglines.append("ERROR: itest has not created %s" % tag)
114
+ returncode = 1
115
+ for logline in loglines:
116
+ _log(service=service, line=logline, component="build", level="event")
117
+ return returncode
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env python
2
+ # Copyright 2015-2016 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
+ from service_configuration_lib import DEFAULT_SOA_DIR
16
+
17
+ from paasta_tools.cli.utils import list_paasta_services
18
+ from paasta_tools.cli.utils import list_service_instances
19
+ from paasta_tools.utils import list_services
20
+ from paasta_tools.utils import SPACER
21
+
22
+
23
+ def add_subparser(subparsers):
24
+ list_parser = subparsers.add_parser(
25
+ "list",
26
+ help="Display a list of PaaSTA services",
27
+ description=(
28
+ "'paasta list' inspects the soa-configs directory and lists all of the "
29
+ "PaaSTA services that are declared."
30
+ ),
31
+ )
32
+ list_parser.add_argument(
33
+ "-a",
34
+ "--all",
35
+ action="store_true",
36
+ help="Display all services, even if not on PaaSTA.",
37
+ )
38
+ list_parser.add_argument(
39
+ "-i",
40
+ "--print-instances",
41
+ action="store_true",
42
+ help="Display all service%sinstance values, which only PaaSTA services have."
43
+ % SPACER,
44
+ )
45
+ list_parser.add_argument(
46
+ "-y",
47
+ "--yelpsoa-config-root",
48
+ dest="soa_dir",
49
+ help="A directory from which yelpsoa-configs should be read from",
50
+ default=DEFAULT_SOA_DIR,
51
+ )
52
+ list_parser.set_defaults(command=paasta_list)
53
+
54
+
55
+ def paasta_list(args):
56
+ """Print a list of Yelp services currently running
57
+ :param args: argparse.Namespace obj created from sys.args by cli"""
58
+ if args.print_instances:
59
+ services = list_service_instances(args.soa_dir)
60
+ elif args.all:
61
+ services = list_services(args.soa_dir)
62
+ else:
63
+ services = list_paasta_services(args.soa_dir)
64
+
65
+ for service in services:
66
+ print(service)
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env python
2
+ # Copyright 2015-2016 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
+ from paasta_tools.utils import DEFAULT_SOA_DIR
16
+ from paasta_tools.utils import list_clusters
17
+
18
+
19
+ def add_subparser(subparsers):
20
+ list_parser = subparsers.add_parser(
21
+ "list-clusters",
22
+ help="Display a list of all PaaSTA clusters",
23
+ description=(
24
+ "'paasta list' inspects all of the PaaSTA services declared in the soa-configs "
25
+ "directory, and prints the set of unique clusters that are used.\n\n"
26
+ "The command can only report those clusters that are actually used by some services."
27
+ ),
28
+ )
29
+ list_parser.add_argument(
30
+ "-d",
31
+ "--soa-dir",
32
+ dest="soa_dir",
33
+ metavar="SOA_DIR",
34
+ default=DEFAULT_SOA_DIR,
35
+ help="define a different soa config directory",
36
+ )
37
+ list_parser.set_defaults(command=paasta_list_clusters)
38
+
39
+
40
+ def paasta_list_clusters(args, **kwargs):
41
+ for cluster in list_clusters(soa_dir=args.soa_dir):
42
+ print(cluster)