paasta-tools 1.4.5__tar.gz → 1.4.7__tar.gz

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 (296) hide show
  1. {paasta-tools-1.4.5/paasta_tools.egg-info → paasta-tools-1.4.7}/PKG-INFO +1 -1
  2. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/__init__.py +1 -1
  3. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/api_docs/swagger.json +20 -0
  4. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/logs.py +52 -1
  5. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/status.py +254 -1
  6. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/application/controller_wrappers.py +20 -0
  7. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes_tools.py +14 -14
  8. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status.py +5 -0
  9. paasta-tools-1.4.7/paasta_tools/paastaapi/model/instance_status_vitesscluster.py +173 -0
  10. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/models/__init__.py +1 -0
  11. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/setup_kubernetes_job.py +1 -0
  12. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/setup_tron_namespace.py +41 -0
  13. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/spark_tools.py +21 -0
  14. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/tron_tools.py +61 -20
  15. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/vitesscluster_tools.py +13 -4
  16. {paasta-tools-1.4.5 → paasta-tools-1.4.7/paasta_tools.egg-info}/PKG-INFO +1 -1
  17. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools.egg-info/SOURCES.txt +1 -0
  18. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools.egg-info/requires.txt +1 -0
  19. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/requirements-minimal.txt +1 -0
  20. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/MANIFEST.in +0 -0
  21. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/README.md +0 -0
  22. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/k8s_itests/__init__.py +0 -0
  23. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/k8s_itests/test_autoscaling.py +0 -0
  24. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/k8s_itests/utils.py +0 -0
  25. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/adhoc_tools.py +0 -0
  26. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/__init__.py +0 -0
  27. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/api.py +0 -0
  28. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/client.py +0 -0
  29. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/settings.py +0 -0
  30. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/tweens/__init__.py +0 -0
  31. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/tweens/profiling.py +0 -0
  32. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/tweens/request_logger.py +0 -0
  33. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/__init__.py +0 -0
  34. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/autoscaler.py +0 -0
  35. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/exception.py +0 -0
  36. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/flink.py +0 -0
  37. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/instance.py +0 -0
  38. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/pause_autoscaler.py +0 -0
  39. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/resources.py +0 -0
  40. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/service.py +0 -0
  41. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/version.py +0 -0
  42. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/apply_external_resources.py +0 -0
  43. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/async_utils.py +0 -0
  44. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/autoscaling/__init__.py +0 -0
  45. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
  46. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/autoscaling/forecasting.py +0 -0
  47. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
  48. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
  49. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/autoscaling/utils.py +0 -0
  50. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/bounce_lib.py +0 -0
  51. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/broadcast_log_to_services.py +0 -0
  52. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cassandracluster_tools.py +0 -0
  53. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/check_autoscaler_max_instances.py +0 -0
  54. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
  55. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/check_flink_services_health.py +0 -0
  56. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/check_kubernetes_api.py +0 -0
  57. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/check_kubernetes_services_replication.py +0 -0
  58. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/check_oom_events.py +0 -0
  59. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/check_services_replication_tools.py +0 -0
  60. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/check_spark_jobs.py +0 -0
  61. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
  62. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
  63. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
  64. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cleanup_tron_namespaces.py +0 -0
  65. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/__init__.py +0 -0
  66. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cli.py +0 -0
  67. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/__init__.py +0 -0
  68. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/autoscale.py +0 -0
  69. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/check.py +0 -0
  70. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/cook_image.py +0 -0
  71. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
  72. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/get_image_version.py +0 -0
  73. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
  74. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/info.py +0 -0
  75. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/itest.py +0 -0
  76. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/list.py +0 -0
  77. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/list_clusters.py +0 -0
  78. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
  79. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/local_run.py +0 -0
  80. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
  81. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/mesh_status.py +0 -0
  82. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
  83. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
  84. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/remote_run.py +0 -0
  85. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/rollback.py +0 -0
  86. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/secret.py +0 -0
  87. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/security_check.py +0 -0
  88. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/spark_run.py +0 -0
  89. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
  90. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/validate.py +0 -0
  91. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
  92. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm/__init__.py +0 -0
  93. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm/autosuggest.py +0 -0
  94. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm/template/README.md +0 -0
  95. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
  96. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
  97. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
  98. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
  99. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
  100. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm_cmd.py +0 -0
  101. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
  102. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
  103. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/autoscaling_schema.json +0 -0
  104. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
  105. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
  106. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
  107. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/eks_schema.json +0 -0
  108. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/kubernetes_schema.json +0 -0
  109. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
  110. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/service_schema.json +0 -0
  111. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/smartstack_schema.json +0 -0
  112. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/tron_schema.json +0 -0
  113. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/utils.py +0 -0
  114. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/clusterman.py +0 -0
  115. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/config_utils.py +0 -0
  116. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/__init__.py +0 -0
  117. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
  118. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
  119. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/check_orphans.py +0 -0
  120. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
  121. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/create_paasta_playground.py +0 -0
  122. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
  123. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
  124. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/habitat_fixer.py +0 -0
  125. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/ide_helper.py +0 -0
  126. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
  127. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
  128. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/kill_bad_containers.py +0 -0
  129. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
  130. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/mock_patch_checker.py +0 -0
  131. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
  132. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/render_template.py +0 -0
  133. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
  134. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/service_shard_remove.py +0 -0
  135. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/service_shard_update.py +0 -0
  136. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/shared_ip_check.py +0 -0
  137. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
  138. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/delete_kubernetes_deployments.py +0 -0
  139. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/deployment_utils.py +0 -0
  140. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/docker_wrapper.py +0 -0
  141. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/docker_wrapper_imports.py +0 -0
  142. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/drain_lib.py +0 -0
  143. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/dump_locally_running_services.py +0 -0
  144. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/eks_tools.py +0 -0
  145. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/envoy_tools.py +0 -0
  146. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/firewall.py +0 -0
  147. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/firewall_logging.py +0 -0
  148. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/firewall_update.py +0 -0
  149. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/flink_tools.py +0 -0
  150. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/flinkeks_tools.py +0 -0
  151. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/frameworks/__init__.py +0 -0
  152. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
  153. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/frameworks/constraints.py +0 -0
  154. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/frameworks/native_scheduler.py +0 -0
  155. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/frameworks/native_service_config.py +0 -0
  156. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/frameworks/task_store.py +0 -0
  157. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/generate_all_deployments +0 -0
  158. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/generate_authenticating_services.py +0 -0
  159. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/generate_deployments_for_service.py +0 -0
  160. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/generate_services_file.py +0 -0
  161. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/generate_services_yaml.py +0 -0
  162. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/hacheck.py +0 -0
  163. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/instance/__init__.py +0 -0
  164. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
  165. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/instance/kubernetes.py +0 -0
  166. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/iptables.py +0 -0
  167. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kafkacluster_tools.py +0 -0
  168. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/__init__.py +0 -0
  169. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/application/__init__.py +0 -0
  170. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/application/tools.py +0 -0
  171. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/bin/__init__.py +0 -0
  172. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
  173. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
  174. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
  175. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/list_kubernetes_service_instances.py +0 -0
  176. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/list_tron_namespaces.py +0 -0
  177. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/log_task_lifecycle_events.py +0 -0
  178. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/long_running_service_tools.py +0 -0
  179. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mac_address.py +0 -0
  180. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/marathon_dashboard.py +0 -0
  181. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/__init__.py +0 -0
  182. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/cfg.py +0 -0
  183. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/cluster.py +0 -0
  184. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/exceptions.py +0 -0
  185. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/framework.py +0 -0
  186. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/log.py +0 -0
  187. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/master.py +0 -0
  188. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/mesos_file.py +0 -0
  189. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/parallel.py +0 -0
  190. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/slave.py +0 -0
  191. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/task.py +0 -0
  192. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/util.py +0 -0
  193. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/zookeeper.py +0 -0
  194. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos_maintenance.py +0 -0
  195. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos_tools.py +0 -0
  196. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/metrics/__init__.py +0 -0
  197. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/metrics/metastatus_lib.py +0 -0
  198. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/metrics/metrics_lib.py +0 -0
  199. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/monitoring/__init__.py +0 -0
  200. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
  201. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/monitoring/kill_orphaned_docker_containers.py +0 -0
  202. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/monitoring_tools.py +0 -0
  203. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/monkrelaycluster_tools.py +0 -0
  204. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/nrtsearchservice_tools.py +0 -0
  205. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
  206. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/oom_logger.py +0 -0
  207. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paasta_deploy_tron_jobs +0 -0
  208. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paasta_execute_docker_command.py +0 -0
  209. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paasta_native_serviceinit.py +0 -0
  210. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paasta_remote_run.py +0 -0
  211. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paasta_service_config_loader.py +0 -0
  212. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/__init__.py +0 -0
  213. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/api/__init__.py +0 -0
  214. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/api/autoscaler_api.py +0 -0
  215. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/api/default_api.py +0 -0
  216. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/api/resources_api.py +0 -0
  217. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/api/service_api.py +0 -0
  218. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/api_client.py +0 -0
  219. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/apis/__init__.py +0 -0
  220. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/configuration.py +0 -0
  221. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/exceptions.py +0 -0
  222. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/__init__.py +0 -0
  223. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/adhoc_launch_history.py +0 -0
  224. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +0 -0
  225. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/deploy_queue.py +0 -0
  226. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +0 -0
  227. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/envoy_backend.py +0 -0
  228. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/envoy_location.py +0 -0
  229. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/envoy_status.py +0 -0
  230. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/flink_cluster_overview.py +0 -0
  231. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/flink_config.py +0 -0
  232. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/flink_job.py +0 -0
  233. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/flink_job_details.py +0 -0
  234. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/flink_jobs.py +0 -0
  235. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/float_and_error.py +0 -0
  236. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/hpa_metric.py +0 -0
  237. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/inline_object.py +0 -0
  238. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/inline_response200.py +0 -0
  239. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/inline_response2001.py +0 -0
  240. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_bounce_status.py +0 -0
  241. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_mesh_status.py +0 -0
  242. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status_adhoc.py +0 -0
  243. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +0 -0
  244. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status_flink.py +0 -0
  245. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +0 -0
  246. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +0 -0
  247. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +0 -0
  248. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +0 -0
  249. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status_tron.py +0 -0
  250. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_tasks.py +0 -0
  251. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/integer_and_error.py +0 -0
  252. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/kubernetes_container.py +0 -0
  253. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +0 -0
  254. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +0 -0
  255. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/kubernetes_pod.py +0 -0
  256. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +0 -0
  257. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +0 -0
  258. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +0 -0
  259. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/kubernetes_version.py +0 -0
  260. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/resource.py +0 -0
  261. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/resource_item.py +0 -0
  262. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/resource_value.py +0 -0
  263. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/smartstack_backend.py +0 -0
  264. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/smartstack_location.py +0 -0
  265. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/smartstack_status.py +0 -0
  266. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/task_tail_lines.py +0 -0
  267. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model_utils.py +0 -0
  268. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/rest.py +0 -0
  269. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/prune_completed_pods.py +0 -0
  270. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/puppet_service_tools.py +0 -0
  271. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/py.typed +0 -0
  272. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/remote_git.py +0 -0
  273. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
  274. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/run-paasta-api-playground.py +0 -0
  275. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/secret_providers/__init__.py +0 -0
  276. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/secret_providers/vault.py +0 -0
  277. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/secret_tools.py +0 -0
  278. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/setup_istio_mesh.py +0 -0
  279. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/setup_kubernetes_cr.py +0 -0
  280. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/setup_kubernetes_crd.py +0 -0
  281. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
  282. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/setup_prometheus_adapter_config.py +0 -0
  283. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/slack.py +0 -0
  284. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/smartstack_tools.py +0 -0
  285. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
  286. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/tron/__init__.py +0 -0
  287. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/tron/client.py +0 -0
  288. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/tron/tron_command_context.py +0 -0
  289. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/tron/tron_timeutils.py +0 -0
  290. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/utils.py +0 -0
  291. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools.egg-info/dependency_links.txt +0 -0
  292. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools.egg-info/entry_points.txt +0 -0
  293. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools.egg-info/top_level.txt +0 -0
  294. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/pyproject.toml +0 -0
  295. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/setup.cfg +0 -0
  296. {paasta-tools-1.4.5 → paasta-tools-1.4.7}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: paasta-tools
3
- Version: 1.4.5
3
+ Version: 1.4.7
4
4
  Summary: Tools for Yelps SOA infrastructure
5
5
  Home-page: UNKNOWN
6
6
  Author: Compute Infrastructure @ Yelp
@@ -17,4 +17,4 @@
17
17
  # setup phase, the dependencies may not exist on disk yet.
18
18
  #
19
19
  # Don't bump version manually. See `make release` docs in ./Makefile
20
- __version__ = "1.4.5"
20
+ __version__ = "1.4.7"
@@ -953,6 +953,18 @@
953
953
  }
954
954
  },
955
955
  "description": "Nullable CassandraCluster instance status"
956
+ },
957
+ "vitesscluster": {
958
+ "type": "object",
959
+ "properties": {
960
+ "status": {
961
+ "$ref": "#/definitions/InstanceStatusVitessCluster"
962
+ },
963
+ "metadata": {
964
+ "$ref": "#/definitions/InstanceMetadataVitessCluster"
965
+ }
966
+ },
967
+ "description": "Nullable VitessCluster instance status and metadata"
956
968
  }
957
969
  }
958
970
  },
@@ -1737,6 +1749,14 @@
1737
1749
  "type": "object",
1738
1750
  "description": "Cassandra instance status"
1739
1751
  },
1752
+ "InstanceStatusVitessCluster": {
1753
+ "type": "object",
1754
+ "description": "VitessCluster instance status"
1755
+ },
1756
+ "InstanceMetadataVitessCluster": {
1757
+ "type": "object",
1758
+ "description": "VitessCluster instance metadata"
1759
+ },
1740
1760
  "InstanceTasks": {
1741
1761
  "type": "array",
1742
1762
  "description": "List of tasks associated with instance",
@@ -40,7 +40,9 @@ from typing import Tuple
40
40
  from typing import Type
41
41
  from typing import Union
42
42
 
43
+ import a_sync
43
44
  import isodate
45
+ import nats
44
46
  import pytz
45
47
  from dateutil import tz
46
48
 
@@ -1166,19 +1168,26 @@ class ScribeLogReader(LogReader):
1166
1168
 
1167
1169
  @register_log_reader("vector-logs")
1168
1170
  class VectorLogsReader(LogReader):
1171
+ SUPPORTS_TAILING = True
1169
1172
  SUPPORTS_TIME = True
1170
1173
 
1171
- def __init__(self, cluster_map: Mapping[str, Any]) -> None:
1174
+ def __init__(
1175
+ self, cluster_map: Mapping[str, Any], nats_endpoint_map: Mapping[str, Any]
1176
+ ) -> None:
1172
1177
  super().__init__()
1173
1178
 
1174
1179
  if S3LogsReader is None:
1175
1180
  raise Exception("yelp_clog package must be available to use S3LogsReader")
1176
1181
 
1177
1182
  self.cluster_map = cluster_map
1183
+ self.nats_endpoint_map = nats_endpoint_map
1178
1184
 
1179
1185
  def get_superregion_for_cluster(self, cluster: str) -> Optional[str]:
1180
1186
  return self.cluster_map.get(cluster, None)
1181
1187
 
1188
+ def get_nats_endpoint_for_cluster(self, cluster: str) -> Optional[str]:
1189
+ return self.nats_endpoint_map.get(cluster, None)
1190
+
1182
1191
  def print_logs_by_time(
1183
1192
  self,
1184
1193
  service,
@@ -1230,6 +1239,48 @@ class VectorLogsReader(LogReader):
1230
1239
  for line in aggregated_logs:
1231
1240
  print_log(line["raw_line"], levels, raw_mode, strip_headers)
1232
1241
 
1242
+ def tail_logs(
1243
+ self,
1244
+ service: str,
1245
+ levels: Sequence[str],
1246
+ components: Iterable[str],
1247
+ clusters: Sequence[str],
1248
+ instances: List[str],
1249
+ pods: Iterable[str] = None,
1250
+ raw_mode: bool = False,
1251
+ strip_headers: bool = False,
1252
+ ) -> None:
1253
+ stream_name = get_log_name_for_service(service, prefix="app_output")
1254
+ endpoint = self.get_nats_endpoint_for_cluster(clusters[0])
1255
+ if not endpoint:
1256
+ raise NotImplementedError(
1257
+ "Tailing logs is not supported in this cluster yet, sorry"
1258
+ )
1259
+
1260
+ async def tail_logs_from_nats() -> None:
1261
+ nc = await nats.connect(f"nats://{endpoint}")
1262
+ sub = await nc.subscribe(stream_name)
1263
+
1264
+ while True:
1265
+ # Wait indefinitely for a new message (no timeout)
1266
+ msg = await sub.next_msg(timeout=None)
1267
+ decoded_data = msg.data.decode("utf-8")
1268
+
1269
+ if paasta_log_line_passes_filter(
1270
+ decoded_data,
1271
+ levels,
1272
+ service,
1273
+ components,
1274
+ clusters,
1275
+ instances,
1276
+ pods,
1277
+ ):
1278
+ await a_sync.run(
1279
+ print_log, decoded_data, levels, raw_mode, strip_headers
1280
+ )
1281
+
1282
+ a_sync.block(tail_logs_from_nats)
1283
+
1233
1284
 
1234
1285
  def scribe_env_to_locations(scribe_env) -> Mapping[str, Any]:
1235
1286
  """Converts a scribe environment to a dictionary of locations. The
@@ -37,6 +37,7 @@ from typing import Optional
37
37
  from typing import Sequence
38
38
  from typing import Tuple
39
39
  from typing import Type
40
+ from typing import TypedDict
40
41
  from typing import Union
41
42
 
42
43
  import a_sync
@@ -94,12 +95,14 @@ from paasta_tools.utils import load_system_paasta_config
94
95
  from paasta_tools.utils import PaastaColors
95
96
  from paasta_tools.utils import remove_ansi_escape_sequences
96
97
  from paasta_tools.utils import SystemPaastaConfig
98
+ from paasta_tools.vitesscluster_tools import VitessDeploymentConfig
97
99
 
98
100
  FLINK_STATUS_MAX_THREAD_POOL_WORKERS = 50
99
101
  ALLOWED_INSTANCE_CONFIG: Sequence[Type[InstanceConfig]] = [
100
102
  FlinkDeploymentConfig,
101
103
  FlinkEksDeploymentConfig,
102
104
  CassandraClusterDeploymentConfig,
105
+ VitessDeploymentConfig,
103
106
  KafkaClusterDeploymentConfig,
104
107
  KubernetesDeploymentConfig,
105
108
  EksDeploymentConfig,
@@ -112,6 +115,7 @@ DEPLOYMENT_INSTANCE_CONFIG: Sequence[Type[InstanceConfig]] = [
112
115
  FlinkDeploymentConfig,
113
116
  FlinkEksDeploymentConfig,
114
117
  CassandraClusterDeploymentConfig,
118
+ VitessDeploymentConfig,
115
119
  KafkaClusterDeploymentConfig,
116
120
  KubernetesDeploymentConfig,
117
121
  EksDeploymentConfig,
@@ -130,7 +134,11 @@ InstanceStatusWriter = Callable[
130
134
  int,
131
135
  ]
132
136
 
133
- EKS_DEPLOYMENT_CONFIGS = [EksDeploymentConfig, FlinkEksDeploymentConfig]
137
+ EKS_DEPLOYMENT_CONFIGS = [
138
+ EksDeploymentConfig,
139
+ FlinkEksDeploymentConfig,
140
+ VitessDeploymentConfig,
141
+ ]
134
142
  FLINK_DEPLOYMENT_CONFIGS = [FlinkDeploymentConfig, FlinkEksDeploymentConfig]
135
143
 
136
144
 
@@ -1878,6 +1886,250 @@ def print_kafka_status(
1878
1886
  return 0
1879
1887
 
1880
1888
 
1889
+ class EtcdLockServerStatus(TypedDict, total=False):
1890
+ observedGeneration: int
1891
+ available: str
1892
+ clientServiceName: str
1893
+
1894
+
1895
+ class LockServerStatus(TypedDict, total=False):
1896
+ etcd: EtcdLockServerStatus
1897
+
1898
+
1899
+ class VitessClusterCellStatus(TypedDict, total=False):
1900
+ pendingChanges: str
1901
+ gatewayAvailable: str
1902
+
1903
+
1904
+ class VitessClusterKeyspaceStatus(TypedDict, total=False):
1905
+ pendingChanges: str
1906
+ cells: List[str]
1907
+ desiredShards: int
1908
+ shards: int
1909
+ readyShards: int
1910
+ updatedShards: int
1911
+ desiredTablets: int
1912
+ tablets: int
1913
+ readyTablets: int
1914
+ updatedTablets: int
1915
+
1916
+
1917
+ class VitessDashboardStatus(TypedDict, total=False):
1918
+ available: str
1919
+ serviceName: str
1920
+
1921
+
1922
+ class VTAdminStatus(TypedDict, total=False):
1923
+ available: str
1924
+ serviceName: str
1925
+
1926
+
1927
+ class OrphanStatus(TypedDict, total=False):
1928
+ reason: str
1929
+ message: str
1930
+
1931
+
1932
+ class VitessClusterStatus(TypedDict, total=False):
1933
+ observedGeneration: int
1934
+ globalLockserver: LockServerStatus
1935
+ gatewayServiceName: str
1936
+ vitessDashboard: VitessDashboardStatus
1937
+ cells: Dict[str, VitessClusterCellStatus]
1938
+ keyspaces: Dict[str, VitessClusterKeyspaceStatus]
1939
+ vtadmin: VTAdminStatus
1940
+ orphanedCells: Dict[str, OrphanStatus]
1941
+ orphanedKeyspaces: Dict[str, OrphanStatus]
1942
+
1943
+
1944
+ def print_vitess_status(
1945
+ cluster: str,
1946
+ service: str,
1947
+ instance: str,
1948
+ output: List[str],
1949
+ vitess_status: Mapping[str, Any],
1950
+ verbose: int = 0,
1951
+ ) -> int:
1952
+ tab = " "
1953
+ indent = 1
1954
+
1955
+ status: VitessClusterStatus = vitess_status.get("status")
1956
+ if status is None:
1957
+ output.append(
1958
+ PaastaColors.red("indent * tab + Vitess cluster is not available yet")
1959
+ )
1960
+ return 1
1961
+
1962
+ output.append(indent * tab + "Vitess Cluster:")
1963
+ indent += 1
1964
+
1965
+ output.append(
1966
+ indent * tab
1967
+ + "Observed Generation: "
1968
+ + str(status.get("observedGeneration", 0))
1969
+ )
1970
+ output.append(
1971
+ indent * tab + "Gateway Service Name: " + status.get("gatewayServiceName", "")
1972
+ )
1973
+
1974
+ output.append(indent * tab + "Cells:")
1975
+ indent += 1
1976
+ cells: Dict[str, VitessClusterCellStatus] = status.get("cells")
1977
+ if not cells:
1978
+ output.append(
1979
+ indent * tab + "Cells: " + PaastaColors.red("No cell status available")
1980
+ )
1981
+ return 0
1982
+ for cell, cell_status in cells.items():
1983
+ gateway_available: str = cell_status.get("gatewayAvailable")
1984
+ if gateway_available == "True":
1985
+ output.append(
1986
+ indent * tab
1987
+ + f"Cell: {cell} - VTGate: {PaastaColors.green('available')}"
1988
+ )
1989
+ else:
1990
+ output.append(
1991
+ indent * tab
1992
+ + f"Cell: {cell} - VTGate: {PaastaColors.red('unavailable')}"
1993
+ )
1994
+ cell_pending_changes: str = cell_status.get("pendingChanges", None)
1995
+ if cell_pending_changes:
1996
+ output.append(indent * tab + f" Pending Changes: {cell_pending_changes}")
1997
+ indent -= 1
1998
+
1999
+ output.append(indent * tab + "Vitess Dashboard:")
2000
+ indent += 1
2001
+ vitess_dashboard: VitessDashboardStatus = status.get("vitessDashboard")
2002
+ if not vitess_dashboard:
2003
+ output.append(
2004
+ indent * tab
2005
+ + "Vitess Dashboard: "
2006
+ + PaastaColors.red("No dashboard status available")
2007
+ )
2008
+ return 0
2009
+ vitess_dashboard_available: str = vitess_dashboard.get("available", "")
2010
+ vitess_dashboard_service_name: str = vitess_dashboard.get("serviceName", "")
2011
+ if vitess_dashboard_available == "True":
2012
+ output.append(
2013
+ indent * tab
2014
+ + f"Vitess Dashboard: {vitess_dashboard_service_name} - {PaastaColors.green('available')}"
2015
+ )
2016
+ else:
2017
+ output.append(
2018
+ indent * tab
2019
+ + f"Vitess Dashboard: {vitess_dashboard_service_name} - {PaastaColors.red('unavailable')}"
2020
+ )
2021
+ indent -= 1
2022
+
2023
+ output.append(indent * tab + "VTAdmin:")
2024
+ indent += 1
2025
+ vtadmin: VTAdminStatus = status.get("vtadmin")
2026
+ if not vtadmin:
2027
+ output.append(
2028
+ indent * tab + "VTAdmin: " + PaastaColors.red("No VTAdmin status available")
2029
+ )
2030
+ return 0
2031
+ vtadmin_available: str = vtadmin.get("available", "")
2032
+ vtadmin_service_name: str = vtadmin.get("serviceName", "")
2033
+ if vtadmin_available == "True":
2034
+ output.append(
2035
+ indent * tab
2036
+ + f"VTAdmin: {vtadmin_service_name} - {PaastaColors.green('available')}"
2037
+ )
2038
+ else:
2039
+ output.append(
2040
+ indent * tab
2041
+ + f"VTAdmin: {vtadmin_service_name} - {PaastaColors.red('unavailable')}"
2042
+ )
2043
+ indent -= 1
2044
+
2045
+ output.append(indent * tab + "Keyspaces:")
2046
+ indent += 1
2047
+ keyspaces: Dict[str, VitessClusterKeyspaceStatus] = status.get("keyspaces")
2048
+ if not keyspaces:
2049
+ output.append(
2050
+ indent * tab
2051
+ + "Keyspaces: "
2052
+ + PaastaColors.red("No keyspace status available")
2053
+ )
2054
+ return 0
2055
+ for keyspace, keyspace_status in keyspaces.items():
2056
+ output.append(indent * tab + f"Keyspace: {keyspace}")
2057
+ indent += 1
2058
+ keyspace_pending_changes: str = keyspace_status.get("pendingChanges", None)
2059
+ if keyspace_pending_changes:
2060
+ output.append(
2061
+ indent * tab
2062
+ + f"Keyspace: {keyspace} - Pending Changes: {keyspace_pending_changes}"
2063
+ )
2064
+ keyspace_cells: List[str] = keyspace_status.get("cells", [])
2065
+ output.append(indent * tab + f" Cells: {', '.join(keyspace_cells)}")
2066
+ desired_shards: int = keyspace_status.get("desiredShards", 0)
2067
+ shards: int = keyspace_status.get("shards", 0)
2068
+ ready_shards: int = keyspace_status.get("readyShards", 0)
2069
+ updated_shards: int = keyspace_status.get("updatedShards", 0)
2070
+ output.append(
2071
+ indent * tab
2072
+ + f" Shards: {shards} observed, {ready_shards}/{desired_shards} ready, {updated_shards}/{desired_shards} updated"
2073
+ )
2074
+ desired_tablets: int = keyspace_status.get("desiredTablets", 0)
2075
+ tablets: int = keyspace_status.get("tablets", 0)
2076
+ ready_tablets: int = keyspace_status.get("readyTablets", 0)
2077
+ updated_tablets: int = keyspace_status.get("updatedTablets", 0)
2078
+ output.append(
2079
+ indent * tab
2080
+ + f" Tablets: {tablets} observed, {ready_tablets}/{desired_tablets} ready, {updated_tablets}/{desired_tablets} updated"
2081
+ )
2082
+ indent -= 1
2083
+ indent -= 1
2084
+
2085
+ # This is not needed when not using etcd. We use zk instead
2086
+ global_lockserver: LockServerStatus = status.get("globalLockserver", {})
2087
+ if global_lockserver:
2088
+ output.append(indent * tab + "Global Lockserver:")
2089
+ indent += 1
2090
+ etcd: EtcdLockServerStatus = global_lockserver.get("etcd")
2091
+ if etcd:
2092
+ output.append(indent * tab + "Global Lockserver:")
2093
+ indent += 1
2094
+ observed_generation: int = etcd.get("observedGeneration", 0)
2095
+ available: str = etcd.get("available", "")
2096
+ client_service_name: str = etcd.get("clientServiceName", "")
2097
+ output.append(
2098
+ indent * tab
2099
+ + f"Observed Generation: {observed_generation}, Available: {available}, Client Service Name: {client_service_name}"
2100
+ )
2101
+ indent -= 1
2102
+
2103
+ # Orphaned Cells are not mandatorily seen each time
2104
+ orphaned_cells: Dict[str, OrphanStatus] = status.get("orphanedCells", {})
2105
+ if orphaned_cells:
2106
+ output.append(indent * tab + "Orphaned Cells:")
2107
+ indent += 1
2108
+ for cell, orphan_status in orphaned_cells.items():
2109
+ orphaned_cell_reason: str = orphan_status.get("reason", "")
2110
+ orphaned_cell_message: str = orphan_status.get("message", "")
2111
+ output.append(
2112
+ indent * tab
2113
+ + f"Cell: {cell} - Reason: {orphaned_cell_reason}, Message: {orphaned_cell_message}"
2114
+ )
2115
+ indent -= 1
2116
+
2117
+ # Orphaned Keyspaces are not mandatorily seen each time
2118
+ orphaned_keyspaces: Dict[str, OrphanStatus] = status.get("orphanedKeyspaces", {})
2119
+ if orphaned_keyspaces:
2120
+ output.append(indent * tab + "Orphaned Keyspaces:")
2121
+ indent += 1
2122
+ for keyspace, orphan_status in orphaned_keyspaces.items():
2123
+ orphaned_keyspace_reason: str = orphan_status.get("reason", "")
2124
+ orphaned_keyspace_message: str = orphan_status.get("message", "")
2125
+ output.append(
2126
+ indent * tab
2127
+ + f"Keyspace: {keyspace} - Reason: {orphaned_keyspace_reason}, Message: {orphaned_keyspace_message}"
2128
+ )
2129
+ indent -= 1
2130
+ return 0
2131
+
2132
+
1881
2133
  def report_status_for_cluster(
1882
2134
  service: str,
1883
2135
  cluster: str,
@@ -2273,4 +2525,5 @@ INSTANCE_TYPE_WRITERS: Mapping[str, InstanceStatusWriter] = defaultdict(
2273
2525
  flinkeks=print_flinkeks_status,
2274
2526
  kafkacluster=print_kafka_status,
2275
2527
  cassandracluster=print_cassandra_status,
2528
+ vitesscluster=print_vitess_status,
2276
2529
  )
@@ -15,6 +15,7 @@ from paasta_tools.eks_tools import load_eks_service_config_no_cache
15
15
  from paasta_tools.kubernetes_tools import create_deployment
16
16
  from paasta_tools.kubernetes_tools import create_pod_disruption_budget
17
17
  from paasta_tools.kubernetes_tools import create_stateful_set
18
+ from paasta_tools.kubernetes_tools import ensure_service_account
18
19
  from paasta_tools.kubernetes_tools import KubeClient
19
20
  from paasta_tools.kubernetes_tools import KubeDeployment
20
21
  from paasta_tools.kubernetes_tools import KubernetesDeploymentConfig
@@ -120,6 +121,25 @@ class Application(ABC):
120
121
  """
121
122
  self.ensure_pod_disruption_budget(kube_client, self.soa_config.get_namespace())
122
123
 
124
+ def update_dependency_api_objects(self, kube_client: KubeClient) -> None:
125
+ """
126
+ Update related Kubernetes API objects that should be updated before the main object,
127
+ such as service accounts.
128
+ :param kube_client:
129
+ """
130
+ self.ensure_service_account(kube_client)
131
+
132
+ def ensure_service_account(self, kube_client: KubeClient) -> None:
133
+ """
134
+ Ensure that the service account for this application exists
135
+ :param kube_client:
136
+ """
137
+ ensure_service_account(
138
+ iam_role=self.soa_config.get_iam_role(),
139
+ namespace=self.soa_config.get_namespace(),
140
+ kube_client=kube_client,
141
+ )
142
+
123
143
  def delete_pod_disruption_budget(self, kube_client: KubeClient) -> None:
124
144
  try:
125
145
  kube_client.policy.delete_namespaced_pod_disruption_budget(
@@ -2220,9 +2220,9 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
2220
2220
  annotations["iam.amazonaws.com/role"] = ""
2221
2221
  iam_role = self.get_iam_role()
2222
2222
  if iam_role:
2223
- pod_spec_kwargs[
2224
- "service_account_name"
2225
- ] = create_or_find_service_account_name(iam_role, self.get_namespace())
2223
+ pod_spec_kwargs["service_account_name"] = get_service_account_name(
2224
+ iam_role
2225
+ )
2226
2226
  if fs_group is None:
2227
2227
  # We need some reasoable default for group id of a process
2228
2228
  # running inside the container. Seems like most of such
@@ -4050,12 +4050,9 @@ def get_all_limit_ranges(
4050
4050
  _RE_NORMALIZE_IAM_ROLE = re.compile(r"[^0-9a-zA-Z]+")
4051
4051
 
4052
4052
 
4053
- def create_or_find_service_account_name(
4053
+ def get_service_account_name(
4054
4054
  iam_role: str,
4055
- namespace: str,
4056
4055
  k8s_role: Optional[str] = None,
4057
- kubeconfig_file: Optional[str] = None,
4058
- dry_run: bool = False,
4059
4056
  ) -> str:
4060
4057
  # the service account is expected to always be prefixed with paasta- as using the actual namespace
4061
4058
  # potentially wastes a lot of characters (e.g., paasta-nrtsearchservices) that could be used for
@@ -4081,12 +4078,17 @@ def create_or_find_service_account_name(
4081
4078
  "Expected at least one of iam_role or k8s_role to be passed in!"
4082
4079
  )
4083
4080
 
4084
- # if someone is dry-running paasta_setup_tron_namespace or some other tool that
4085
- # calls this function, we probably don't want to mutate k8s state :)
4086
- if dry_run:
4087
- return sa_name
4081
+ return sa_name
4082
+
4083
+
4084
+ def ensure_service_account(
4085
+ iam_role: str,
4086
+ namespace: str,
4087
+ kube_client: KubeClient,
4088
+ k8s_role: Optional[str] = None,
4089
+ ) -> None:
4090
+ sa_name = get_service_account_name(iam_role, k8s_role)
4088
4091
 
4089
- kube_client = KubeClient(config_file=kubeconfig_file)
4090
4092
  if not any(
4091
4093
  sa.metadata and sa.metadata.name == sa_name
4092
4094
  for sa in get_all_service_accounts(kube_client, namespace)
@@ -4135,8 +4137,6 @@ def create_or_find_service_account_name(
4135
4137
  namespace=namespace, body=role_binding
4136
4138
  )
4137
4139
 
4138
- return sa_name
4139
-
4140
4140
 
4141
4141
  def mode_to_int(mode: Optional[Union[str, int]]) -> Optional[int]:
4142
4142
  if mode is not None:
@@ -38,6 +38,7 @@ def lazy_import():
38
38
  from paasta_tools.paastaapi.model.instance_status_kubernetes import InstanceStatusKubernetes
39
39
  from paasta_tools.paastaapi.model.instance_status_kubernetes_v2 import InstanceStatusKubernetesV2
40
40
  from paasta_tools.paastaapi.model.instance_status_tron import InstanceStatusTron
41
+ from paasta_tools.paastaapi.model.instance_status_vitesscluster import InstanceStatusVitesscluster
41
42
  globals()['InstanceStatusAdhoc'] = InstanceStatusAdhoc
42
43
  globals()['InstanceStatusCassandracluster'] = InstanceStatusCassandracluster
43
44
  globals()['InstanceStatusFlink'] = InstanceStatusFlink
@@ -45,6 +46,7 @@ def lazy_import():
45
46
  globals()['InstanceStatusKubernetes'] = InstanceStatusKubernetes
46
47
  globals()['InstanceStatusKubernetesV2'] = InstanceStatusKubernetesV2
47
48
  globals()['InstanceStatusTron'] = InstanceStatusTron
49
+ globals()['InstanceStatusVitesscluster'] = InstanceStatusVitesscluster
48
50
 
49
51
 
50
52
  class InstanceStatus(ModelNormal):
@@ -100,6 +102,7 @@ class InstanceStatus(ModelNormal):
100
102
  'version': (str,), # noqa: E501
101
103
  'instance': (str,), # noqa: E501
102
104
  'cassandracluster': (InstanceStatusCassandracluster,), # noqa: E501
105
+ 'vitesscluster': (InstanceStatusVitesscluster,), # noqa: E501
103
106
  'kafkacluster': (InstanceStatusKafkacluster,), # noqa: E501
104
107
  'kubernetes': (InstanceStatusKubernetes,), # noqa: E501
105
108
  'kubernetes_v2': (InstanceStatusKubernetesV2,), # noqa: E501
@@ -120,6 +123,7 @@ class InstanceStatus(ModelNormal):
120
123
  'version': 'version', # noqa: E501
121
124
  'instance': 'instance', # noqa: E501
122
125
  'cassandracluster': 'cassandracluster', # noqa: E501
126
+ 'vitesscluster': 'vitesscluster', # noqa: E501
123
127
  'kafkacluster': 'kafkacluster', # noqa: E501
124
128
  'kubernetes': 'kubernetes', # noqa: E501
125
129
  'kubernetes_v2': 'kubernetes_v2', # noqa: E501
@@ -180,6 +184,7 @@ class InstanceStatus(ModelNormal):
180
184
  version (str): Deployment Version of a service. [optional] # noqa: E501
181
185
  instance (str): Instance name. [optional] # noqa: E501
182
186
  cassandracluster (InstanceStatusCassandracluster): [optional] # noqa: E501
187
+ vitesscluster (InstanceStatusVitesscluster): [optional] # noqa: E501
183
188
  kafkacluster (InstanceStatusKafkacluster): [optional] # noqa: E501
184
189
  kubernetes (InstanceStatusKubernetes): [optional] # noqa: E501
185
190
  kubernetes_v2 (InstanceStatusKubernetesV2): [optional] # noqa: E501