paasta-tools 1.13.6__tar.gz → 1.14.1__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 (305) hide show
  1. {paasta-tools-1.13.6/paasta_tools.egg-info → paasta-tools-1.14.1}/PKG-INFO +1 -1
  2. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/__init__.py +1 -1
  3. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/api.py +20 -0
  4. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/api_docs/swagger.json +255 -1
  5. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/client.py +2 -0
  6. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/instance.py +10 -2
  7. paasta-tools-1.14.1/paasta_tools/api/views/remote_run.py +107 -0
  8. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/local_run.py +0 -1
  9. paasta-tools-1.14.1/paasta_tools/cli/cmds/remote_run.py +205 -0
  10. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/spark_run.py +0 -1
  11. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/utils.py +15 -0
  12. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/service_shard_update.py +15 -2
  13. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/frameworks/native_service_config.py +0 -1
  14. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes/application/controller_wrappers.py +52 -1
  15. paasta-tools-1.14.1/paasta_tools/kubernetes/bin/paasta_cleanup_remote_run_resources.py +83 -0
  16. paasta-tools-1.14.1/paasta_tools/kubernetes/remote_run.py +441 -0
  17. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes_tools.py +68 -5
  18. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/__init__.py +1 -1
  19. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api/autoscaler_api.py +1 -1
  20. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api/default_api.py +1 -1
  21. paasta-tools-1.14.1/paasta_tools/paastaapi/api/remote_run_api.py +588 -0
  22. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api/resources_api.py +1 -1
  23. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api/service_api.py +1 -1
  24. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api_client.py +1 -1
  25. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/apis/__init__.py +1 -0
  26. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/configuration.py +2 -2
  27. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/exceptions.py +1 -1
  28. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/adhoc_launch_history.py +1 -1
  29. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +1 -1
  30. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/deploy_queue.py +1 -1
  31. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +1 -1
  32. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/envoy_backend.py +1 -1
  33. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/envoy_location.py +1 -1
  34. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/envoy_status.py +1 -1
  35. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/flink_cluster_overview.py +1 -1
  36. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/flink_config.py +1 -1
  37. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/flink_job.py +1 -1
  38. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/flink_job_details.py +1 -1
  39. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/flink_jobs.py +1 -1
  40. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/float_and_error.py +1 -1
  41. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/hpa_metric.py +1 -1
  42. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/inline_object.py +1 -1
  43. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/inline_response200.py +1 -1
  44. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/inline_response2001.py +1 -1
  45. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_bounce_status.py +1 -1
  46. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_mesh_status.py +1 -1
  47. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status.py +1 -1
  48. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_adhoc.py +1 -1
  49. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +1 -1
  50. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_flink.py +1 -1
  51. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +1 -1
  52. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +1 -1
  53. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +1 -1
  54. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +1 -1
  55. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_tron.py +1 -1
  56. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_tasks.py +1 -1
  57. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/integer_and_error.py +1 -1
  58. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_container.py +1 -1
  59. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +1 -1
  60. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +1 -1
  61. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_pod.py +1 -1
  62. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +1 -1
  63. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +1 -1
  64. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +1 -1
  65. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_version.py +1 -1
  66. paasta-tools-1.14.1/paasta_tools/paastaapi/model/remote_run_outcome.py +186 -0
  67. paasta-tools-1.14.1/paasta_tools/paastaapi/model/remote_run_start.py +182 -0
  68. paasta-tools-1.14.1/paasta_tools/paastaapi/model/remote_run_stop.py +173 -0
  69. paasta-tools-1.14.1/paasta_tools/paastaapi/model/remote_run_token.py +173 -0
  70. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/resource.py +1 -1
  71. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/resource_item.py +1 -1
  72. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/resource_value.py +1 -1
  73. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/smartstack_backend.py +1 -1
  74. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/smartstack_location.py +1 -1
  75. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/smartstack_status.py +1 -1
  76. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/task_tail_lines.py +1 -1
  77. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model_utils.py +1 -1
  78. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/models/__init__.py +4 -0
  79. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/rest.py +1 -1
  80. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/tron_tools.py +0 -2
  81. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/utils.py +4 -14
  82. {paasta-tools-1.13.6 → paasta-tools-1.14.1/paasta_tools.egg-info}/PKG-INFO +1 -1
  83. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools.egg-info/SOURCES.txt +8 -2
  84. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/setup.py +1 -2
  85. paasta-tools-1.13.6/paasta_tools/cli/cmds/remote_run.py +0 -317
  86. paasta-tools-1.13.6/paasta_tools/log_task_lifecycle_events.py +0 -247
  87. paasta-tools-1.13.6/paasta_tools/paasta_remote_run.py +0 -773
  88. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/MANIFEST.in +0 -0
  89. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/README.md +0 -0
  90. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/k8s_itests/__init__.py +0 -0
  91. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/k8s_itests/test_autoscaling.py +0 -0
  92. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/k8s_itests/utils.py +0 -0
  93. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/adhoc_tools.py +0 -0
  94. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/__init__.py +0 -0
  95. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/settings.py +0 -0
  96. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/tweens/__init__.py +0 -0
  97. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/tweens/auth.py +0 -0
  98. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/tweens/profiling.py +0 -0
  99. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/tweens/request_logger.py +0 -0
  100. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/__init__.py +0 -0
  101. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/autoscaler.py +0 -0
  102. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/exception.py +0 -0
  103. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/flink.py +0 -0
  104. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/pause_autoscaler.py +0 -0
  105. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/resources.py +0 -0
  106. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/service.py +0 -0
  107. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/version.py +0 -0
  108. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/apply_external_resources.py +0 -0
  109. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/async_utils.py +0 -0
  110. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/autoscaling/__init__.py +0 -0
  111. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
  112. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/autoscaling/forecasting.py +0 -0
  113. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
  114. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
  115. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/autoscaling/utils.py +0 -0
  116. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/bounce_lib.py +0 -0
  117. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/broadcast_log_to_services.py +0 -0
  118. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cassandracluster_tools.py +0 -0
  119. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/check_autoscaler_max_instances.py +0 -0
  120. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
  121. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/check_flink_services_health.py +0 -0
  122. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/check_kubernetes_api.py +0 -0
  123. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/check_kubernetes_services_replication.py +0 -0
  124. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/check_oom_events.py +0 -0
  125. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/check_services_replication_tools.py +0 -0
  126. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/check_spark_jobs.py +0 -0
  127. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
  128. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
  129. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
  130. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cleanup_tron_namespaces.py +0 -0
  131. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/__init__.py +0 -0
  132. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cli.py +0 -0
  133. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/__init__.py +0 -0
  134. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/autoscale.py +0 -0
  135. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/check.py +0 -0
  136. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/cook_image.py +0 -0
  137. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
  138. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/get_image_version.py +0 -0
  139. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
  140. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/info.py +0 -0
  141. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/itest.py +0 -0
  142. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/list.py +0 -0
  143. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/list_clusters.py +0 -0
  144. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
  145. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/list_namespaces.py +0 -0
  146. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/logs.py +0 -0
  147. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
  148. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/mesh_status.py +0 -0
  149. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
  150. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
  151. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/rollback.py +0 -0
  152. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/secret.py +0 -0
  153. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/security_check.py +0 -0
  154. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
  155. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/status.py +0 -0
  156. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/validate.py +0 -0
  157. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
  158. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/__init__.py +0 -0
  159. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/autosuggest.py +0 -0
  160. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/README.md +0 -0
  161. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
  162. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
  163. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
  164. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
  165. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
  166. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm_cmd.py +0 -0
  167. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
  168. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
  169. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/autoscaling_schema.json +0 -0
  170. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
  171. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
  172. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
  173. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/eks_schema.json +0 -0
  174. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/kubernetes_schema.json +0 -0
  175. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
  176. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/service_schema.json +0 -0
  177. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/smartstack_schema.json +0 -0
  178. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/tron_schema.json +0 -0
  179. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/clusterman.py +0 -0
  180. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/config_utils.py +0 -0
  181. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/__init__.py +0 -0
  182. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
  183. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
  184. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/check_orphans.py +0 -0
  185. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
  186. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/create_paasta_playground.py +0 -0
  187. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
  188. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
  189. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/habitat_fixer.py +0 -0
  190. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/ide_helper.py +0 -0
  191. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
  192. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
  193. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/kill_bad_containers.py +0 -0
  194. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
  195. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/mock_patch_checker.py +0 -0
  196. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
  197. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/render_template.py +0 -0
  198. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
  199. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/service_shard_remove.py +0 -0
  200. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/shared_ip_check.py +0 -0
  201. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
  202. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/delete_kubernetes_deployments.py +0 -0
  203. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/deployment_utils.py +0 -0
  204. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/docker_wrapper.py +0 -0
  205. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/docker_wrapper_imports.py +0 -0
  206. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/drain_lib.py +0 -0
  207. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/dump_locally_running_services.py +0 -0
  208. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/eks_tools.py +0 -0
  209. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/envoy_tools.py +0 -0
  210. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/firewall.py +0 -0
  211. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/firewall_logging.py +0 -0
  212. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/firewall_update.py +0 -0
  213. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/flink_tools.py +0 -0
  214. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/flinkeks_tools.py +0 -0
  215. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/frameworks/__init__.py +0 -0
  216. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
  217. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/frameworks/constraints.py +0 -0
  218. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/frameworks/native_scheduler.py +0 -0
  219. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/frameworks/task_store.py +0 -0
  220. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/generate_all_deployments +0 -0
  221. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/generate_authenticating_services.py +0 -0
  222. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/generate_deployments_for_service.py +0 -0
  223. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/generate_services_file.py +0 -0
  224. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/generate_services_yaml.py +0 -0
  225. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/hacheck.py +0 -0
  226. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/instance/__init__.py +0 -0
  227. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
  228. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/instance/kubernetes.py +0 -0
  229. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/iptables.py +0 -0
  230. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kafkacluster_tools.py +0 -0
  231. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes/__init__.py +0 -0
  232. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes/application/__init__.py +0 -0
  233. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes/application/tools.py +0 -0
  234. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes/bin/__init__.py +0 -0
  235. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
  236. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
  237. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
  238. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/list_kubernetes_service_instances.py +0 -0
  239. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/list_tron_namespaces.py +0 -0
  240. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/long_running_service_tools.py +0 -0
  241. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mac_address.py +0 -0
  242. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/marathon_dashboard.py +0 -0
  243. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/__init__.py +0 -0
  244. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/cfg.py +0 -0
  245. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/cluster.py +0 -0
  246. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/exceptions.py +0 -0
  247. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/framework.py +0 -0
  248. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/log.py +0 -0
  249. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/master.py +0 -0
  250. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/mesos_file.py +0 -0
  251. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/parallel.py +0 -0
  252. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/slave.py +0 -0
  253. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/task.py +0 -0
  254. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/util.py +0 -0
  255. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/zookeeper.py +0 -0
  256. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos_maintenance.py +0 -0
  257. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos_tools.py +0 -0
  258. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/metrics/__init__.py +0 -0
  259. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/metrics/metastatus_lib.py +0 -0
  260. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/metrics/metrics_lib.py +0 -0
  261. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/monitoring/__init__.py +0 -0
  262. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
  263. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/monitoring_tools.py +0 -0
  264. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/monkrelaycluster_tools.py +0 -0
  265. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/nrtsearchservice_tools.py +0 -0
  266. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
  267. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/oom_logger.py +0 -0
  268. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paasta_deploy_tron_jobs +0 -0
  269. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paasta_execute_docker_command.py +0 -0
  270. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paasta_native_serviceinit.py +0 -0
  271. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paasta_service_config_loader.py +0 -0
  272. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api/__init__.py +0 -0
  273. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/__init__.py +0 -0
  274. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/prune_completed_pods.py +0 -0
  275. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/puppet_service_tools.py +0 -0
  276. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/py.typed +0 -0
  277. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/remote_git.py +0 -0
  278. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
  279. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/run-paasta-api-playground.py +0 -0
  280. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/secret_providers/__init__.py +0 -0
  281. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/secret_providers/vault.py +0 -0
  282. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/secret_tools.py +0 -0
  283. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/setup_istio_mesh.py +0 -0
  284. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/setup_kubernetes_cr.py +0 -0
  285. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/setup_kubernetes_crd.py +0 -0
  286. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
  287. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/setup_kubernetes_job.py +0 -0
  288. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/setup_prometheus_adapter_config.py +0 -0
  289. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/setup_tron_namespace.py +0 -0
  290. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/slack.py +0 -0
  291. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/smartstack_tools.py +0 -0
  292. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/spark_tools.py +0 -0
  293. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
  294. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/tron/__init__.py +0 -0
  295. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/tron/client.py +0 -0
  296. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/tron/tron_command_context.py +0 -0
  297. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/tron/tron_timeutils.py +0 -0
  298. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/yaml_tools.py +0 -0
  299. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools.egg-info/dependency_links.txt +0 -0
  300. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools.egg-info/entry_points.txt +0 -0
  301. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools.egg-info/requires.txt +0 -0
  302. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools.egg-info/top_level.txt +0 -0
  303. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/pyproject.toml +0 -0
  304. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/requirements-minimal.txt +0 -0
  305. {paasta-tools-1.13.6 → paasta-tools-1.14.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: paasta-tools
3
- Version: 1.13.6
3
+ Version: 1.14.1
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.13.6"
20
+ __version__ = "1.14.1"
@@ -189,6 +189,26 @@ def make_app(global_config=None):
189
189
  "/v1/service_autoscaler/pause",
190
190
  request_method="GET",
191
191
  )
192
+ config.add_route(
193
+ "remote_run.start",
194
+ "/v1/remote_run/{service}/{instance}/start",
195
+ request_method="POST",
196
+ )
197
+ config.add_route(
198
+ "remote_run.stop",
199
+ "/v1/remote_run/{service}/{instance}/stop",
200
+ request_method="POST",
201
+ )
202
+ config.add_route(
203
+ "remote_run.poll",
204
+ "/v1/remote_run/{service}/{instance}/poll",
205
+ request_method="GET",
206
+ )
207
+ config.add_route(
208
+ "remote_run.token",
209
+ "/v1/remote_run/{service}/{instance}/token",
210
+ request_method="GET",
211
+ )
192
212
  config.add_route("version", "/v1/version")
193
213
  config.add_route("deploy_queue.list", "/v1/deploy_queue")
194
214
  config.scan()
@@ -2,7 +2,7 @@
2
2
  "swagger": "2.0",
3
3
  "info": {
4
4
  "title": "Paasta API",
5
- "version": "1.0.0"
5
+ "version": "1.1.0"
6
6
  },
7
7
  "basePath": "/v1",
8
8
  "schemes": [
@@ -846,6 +846,194 @@
846
846
  }
847
847
  ]
848
848
  }
849
+ },
850
+ "/remote_run/{service}/{instance}/start": {
851
+ "post": {
852
+ "responses": {
853
+ "200": {
854
+ "description": "Successfully started remote-run sandbox",
855
+ "schema": {
856
+ "$ref": "#/definitions/RemoteRunOutcome"
857
+ }
858
+ },
859
+ "404": {
860
+ "description": "Deployment key not found"
861
+ },
862
+ "500": {
863
+ "description": "Failure"
864
+ }
865
+ },
866
+ "summary": "Launch a remote-run pod",
867
+ "operationId": "remote_run_start",
868
+ "tags": [
869
+ "remote_run"
870
+ ],
871
+ "parameters": [
872
+ {
873
+ "in": "path",
874
+ "description": "Service name",
875
+ "name": "service",
876
+ "required": true,
877
+ "type": "string"
878
+ },
879
+ {
880
+ "in": "path",
881
+ "description": "Instance name",
882
+ "name": "instance",
883
+ "required": true,
884
+ "type": "string"
885
+ },
886
+ {
887
+ "in": "body",
888
+ "description": "Job bootstrap settings",
889
+ "name": "json_body",
890
+ "required": true,
891
+ "schema": {
892
+ "$ref": "#/definitions/RemoteRunStart"
893
+ }
894
+ }
895
+ ]
896
+ }
897
+ },
898
+ "/remote_run/{service}/{instance}/stop": {
899
+ "post": {
900
+ "responses": {
901
+ "200": {
902
+ "description": "Remote run pod stopped",
903
+ "schema": {
904
+ "$ref": "#/definitions/RemoteRunOutcome"
905
+ }
906
+ },
907
+ "404": {
908
+ "description": "Service instance not found"
909
+ },
910
+ "500": {
911
+ "description": "Failure"
912
+ }
913
+ },
914
+ "summary": "Stop a remote run",
915
+ "operationId": "remote_run_stop",
916
+ "tags": [
917
+ "service"
918
+ ],
919
+ "parameters": [
920
+ {
921
+ "in": "path",
922
+ "description": "Service name",
923
+ "name": "service",
924
+ "required": true,
925
+ "type": "string"
926
+ },
927
+ {
928
+ "in": "path",
929
+ "description": "Instance name",
930
+ "name": "instance",
931
+ "required": true,
932
+ "type": "string"
933
+ },
934
+ {
935
+ "in": "body",
936
+ "description": "Details about the job to be stopped",
937
+ "name": "json_body",
938
+ "required": true,
939
+ "schema": {
940
+ "$ref": "#/definitions/RemoteRunStop"
941
+ }
942
+ }
943
+ ]
944
+ }
945
+ },
946
+ "/remote_run/{service}/{instance}/poll": {
947
+ "get": {
948
+ "responses": {
949
+ "200": {
950
+ "description": "Pod status information",
951
+ "schema": {
952
+ "$ref": "#/definitions/RemoteRunOutcome"
953
+ }
954
+ },
955
+ "404": {
956
+ "description": "Service instance not found"
957
+ },
958
+ "500": {
959
+ "description": "Failure"
960
+ }
961
+ },
962
+ "summary": "Check if remote run pod is ready",
963
+ "operationId": "remote_run_poll",
964
+ "tags": [
965
+ "remote_run"
966
+ ],
967
+ "parameters": [
968
+ {
969
+ "in": "path",
970
+ "description": "Service name",
971
+ "name": "service",
972
+ "required": true,
973
+ "type": "string"
974
+ },
975
+ {
976
+ "in": "path",
977
+ "description": "Instance name",
978
+ "name": "instance",
979
+ "required": true,
980
+ "type": "string"
981
+ },
982
+ {
983
+ "in": "query",
984
+ "description": "Kubernetes job name (returned from the /start endpoint)",
985
+ "name": "job_name",
986
+ "required": true,
987
+ "type": "string"
988
+ }
989
+ ]
990
+ }
991
+ },
992
+ "/remote_run/{service}/{instance}/token": {
993
+ "get": {
994
+ "responses": {
995
+ "200": {
996
+ "description": "Token generated successfully",
997
+ "schema": {
998
+ "$ref": "#/definitions/RemoteRunToken"
999
+ }
1000
+ },
1001
+ "404": {
1002
+ "description": "Service instance not found"
1003
+ },
1004
+ "500": {
1005
+ "description": "Failure"
1006
+ }
1007
+ },
1008
+ "summary": "Get a remote run token",
1009
+ "operationId": "remote_run_token",
1010
+ "tags": [
1011
+ "remote_run"
1012
+ ],
1013
+ "parameters": [
1014
+ {
1015
+ "in": "path",
1016
+ "description": "Service name",
1017
+ "name": "service",
1018
+ "required": true,
1019
+ "type": "string"
1020
+ },
1021
+ {
1022
+ "in": "path",
1023
+ "description": "Instance name",
1024
+ "name": "instance",
1025
+ "required": true,
1026
+ "type": "string"
1027
+ },
1028
+ {
1029
+ "in": "query",
1030
+ "description": "User requesting the token",
1031
+ "name": "user",
1032
+ "required": true,
1033
+ "type": "string"
1034
+ }
1035
+ ]
1036
+ }
849
1037
  }
850
1038
  },
851
1039
  "definitions": {
@@ -1970,6 +2158,72 @@
1970
2158
  }
1971
2159
  }
1972
2160
  },
2161
+ "RemoteRunStart": {
2162
+ "type": "object",
2163
+ "properties": {
2164
+ "interactive": {
2165
+ "type": "boolean"
2166
+ },
2167
+ "recreate": {
2168
+ "type": "boolean"
2169
+ },
2170
+ "user": {
2171
+ "type": "string"
2172
+ },
2173
+ "max_duration": {
2174
+ "type": "integer"
2175
+ }
2176
+ },
2177
+ "required": [
2178
+ "user"
2179
+ ]
2180
+ },
2181
+ "RemoteRunStop": {
2182
+ "type": "object",
2183
+ "properties": {
2184
+ "user": {
2185
+ "type": "string"
2186
+ }
2187
+ },
2188
+ "required": [
2189
+ "user"
2190
+ ]
2191
+ },
2192
+ "RemoteRunOutcome": {
2193
+ "type": "object",
2194
+ "properties": {
2195
+ "status": {
2196
+ "type": "integer"
2197
+ },
2198
+ "message": {
2199
+ "type": "string"
2200
+ },
2201
+ "pod_name": {
2202
+ "type": "string"
2203
+ },
2204
+ "job_name": {
2205
+ "type": "string"
2206
+ },
2207
+ "namespace": {
2208
+ "type": "string"
2209
+ }
2210
+ },
2211
+ "required": [
2212
+ "status",
2213
+ "message"
2214
+ ]
2215
+ },
2216
+ "RemoteRunToken": {
2217
+ "type": "object",
2218
+ "properties": {
2219
+ "token": {
2220
+ "type": "string"
2221
+ }
2222
+ },
2223
+ "required": [
2224
+ "token"
2225
+ ]
2226
+ },
1973
2227
  "Resource": {
1974
2228
  "type": "array",
1975
2229
  "items": {
@@ -37,6 +37,7 @@ class PaastaOApiClient:
37
37
  default: paastaapis.DefaultApi
38
38
  resources: paastaapis.ResourcesApi
39
39
  service: paastaapis.ServiceApi
40
+ remote_run: paastaapis.RemoteRunApi
40
41
  api_error: Type[paastaapi.ApiException]
41
42
  connection_error: Type[paastaapi.ApiException]
42
43
  timeout_error: Type[paastaapi.ApiException]
@@ -72,6 +73,7 @@ def get_paasta_oapi_client_by_url(
72
73
  default=paastaapis.DefaultApi(client),
73
74
  resources=paastaapis.ResourcesApi(client),
74
75
  service=paastaapis.ServiceApi(client),
76
+ remote_run=paastaapis.RemoteRunApi(client),
75
77
  api_error=paastaapi.ApiException,
76
78
  connection_error=paastaapi.ApiException,
77
79
  timeout_error=paastaapi.ApiException,
@@ -30,12 +30,12 @@ from pyramid.response import Response
30
30
  from pyramid.view import view_config
31
31
 
32
32
  import paasta_tools.mesos.exceptions as mesos_exceptions
33
- from paasta_tools import paasta_remote_run
34
33
  from paasta_tools import tron_tools
35
34
  from paasta_tools.api import settings
36
35
  from paasta_tools.api.views.exception import ApiFailure
37
36
  from paasta_tools.cli.cmds.status import get_actual_deployments
38
37
  from paasta_tools.instance import kubernetes as pik
38
+ from paasta_tools.mesos_tools import get_all_frameworks as get_all_mesos_frameworks
39
39
  from paasta_tools.utils import compose_job_id
40
40
  from paasta_tools.utils import DeploymentVersion
41
41
  from paasta_tools.utils import NoConfigurationForServiceError
@@ -94,11 +94,19 @@ def tron_instance_status(
94
94
  return status
95
95
 
96
96
 
97
+ def legacy_remote_run_filter_frameworks(service, instance, frameworks=None):
98
+ if frameworks is None:
99
+ frameworks = get_all_mesos_frameworks(active_only=True)
100
+
101
+ prefix = f"paasta-remote {service}.{instance}"
102
+ return [f for f in frameworks if f.name.startswith(prefix)]
103
+
104
+
97
105
  def adhoc_instance_status(
98
106
  instance_status: Mapping[str, Any], service: str, instance: str, verbose: int
99
107
  ) -> List[Dict[str, Any]]:
100
108
  status = []
101
- filtered = paasta_remote_run.remote_run_filter_frameworks(service, instance)
109
+ filtered = legacy_remote_run_filter_frameworks(service, instance)
102
110
  filtered.sort(key=lambda x: x.name)
103
111
  for f in filtered:
104
112
  launch_time, run_id = re.match(
@@ -0,0 +1,107 @@
1
+ # Copyright 2015-2016 Yelp Inc.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+ import traceback
15
+
16
+ from pyramid.view import view_config
17
+
18
+ from paasta_tools.api import settings
19
+ from paasta_tools.api.views.exception import ApiFailure
20
+ from paasta_tools.kubernetes.remote_run import remote_run_ready
21
+ from paasta_tools.kubernetes.remote_run import remote_run_start
22
+ from paasta_tools.kubernetes.remote_run import remote_run_stop
23
+ from paasta_tools.kubernetes.remote_run import remote_run_token
24
+ from paasta_tools.utils import load_system_paasta_config
25
+
26
+
27
+ DEFAULT_MAX_DURATION = 60 * 60 # 1 hour
28
+ DEFAULT_MAX_DURATION_LIMIT = 8 * 60 * 60 # 8 hours
29
+
30
+
31
+ @view_config(route_name="remote_run.start", request_method="POST", renderer="json")
32
+ def view_remote_run_start(request):
33
+ system_config = load_system_paasta_config()
34
+ service = request.swagger_data["service"]
35
+ instance = request.swagger_data["instance"]
36
+ user = request.swagger_data["json_body"]["user"]
37
+ interactive = request.swagger_data["json_body"].get("interactive", True)
38
+ recreate = request.swagger_data["json_body"].get("recreate", False)
39
+ max_duration = min(
40
+ request.swagger_data["json_body"].get("max_duration", DEFAULT_MAX_DURATION),
41
+ system_config.get_remote_run_duration_limit(DEFAULT_MAX_DURATION_LIMIT),
42
+ )
43
+ try:
44
+ return remote_run_start(
45
+ service=service,
46
+ instance=instance,
47
+ cluster=settings.cluster,
48
+ user=user,
49
+ interactive=interactive,
50
+ recreate=recreate,
51
+ max_duration=max_duration,
52
+ )
53
+ except Exception:
54
+ error_message = traceback.format_exc()
55
+ raise ApiFailure(error_message, 500)
56
+
57
+
58
+ @view_config(route_name="remote_run.poll", request_method="GET", renderer="json")
59
+ def view_remote_run_poll(request):
60
+ service = request.swagger_data["service"]
61
+ instance = request.swagger_data["instance"]
62
+ job_name = request.swagger_data["job_name"]
63
+ try:
64
+ return remote_run_ready(
65
+ service=service,
66
+ instance=instance,
67
+ cluster=settings.cluster,
68
+ job_name=job_name,
69
+ )
70
+ except Exception:
71
+ error_message = traceback.format_exc()
72
+ raise ApiFailure(error_message, 500)
73
+
74
+
75
+ @view_config(route_name="remote_run.stop", request_method="POST", renderer="json")
76
+ def view_remote_run_stop(request):
77
+ service = request.swagger_data["service"]
78
+ instance = request.swagger_data["instance"]
79
+ user = request.swagger_data["json_body"]["user"]
80
+ try:
81
+ return remote_run_stop(
82
+ service=service,
83
+ instance=instance,
84
+ cluster=settings.cluster,
85
+ user=user,
86
+ )
87
+ except Exception:
88
+ error_message = traceback.format_exc()
89
+ raise ApiFailure(error_message, 500)
90
+
91
+
92
+ @view_config(route_name="remote_run.token", request_method="GET", renderer="json")
93
+ def view_remote_run_token(request):
94
+ service = request.swagger_data["service"]
95
+ instance = request.swagger_data["instance"]
96
+ user = request.swagger_data["user"]
97
+ try:
98
+ token = remote_run_token(
99
+ service=service,
100
+ instance=instance,
101
+ cluster=settings.cluster,
102
+ user=user,
103
+ )
104
+ return {"token": token}
105
+ except Exception:
106
+ error_message = traceback.format_exc()
107
+ raise ApiFailure(error_message, 500)
@@ -1227,7 +1227,6 @@ def configure_and_run_docker_container(
1227
1227
 
1228
1228
  for volume in instance_config.get_volumes(
1229
1229
  system_paasta_config.get_volumes(),
1230
- system_paasta_config.get_uses_bulkdata_default(),
1231
1230
  ):
1232
1231
  if os.path.exists(volume["hostPath"]):
1233
1232
  volumes.append(
@@ -0,0 +1,205 @@
1
+ #!/usr/bin/env python
2
+ # Copyright 2015-2017 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 pty
17
+ import shlex
18
+ import time
19
+
20
+ from paasta_tools.cli.utils import get_paasta_oapi_api_clustername
21
+ from paasta_tools.cli.utils import get_paasta_oapi_client_with_auth
22
+ from paasta_tools.cli.utils import lazy_choices_completer
23
+ from paasta_tools.paastaapi.model.remote_run_start import RemoteRunStart
24
+ from paasta_tools.paastaapi.model.remote_run_stop import RemoteRunStop
25
+ from paasta_tools.utils import get_username
26
+ from paasta_tools.utils import list_clusters
27
+ from paasta_tools.utils import list_services
28
+ from paasta_tools.utils import load_system_paasta_config
29
+ from paasta_tools.utils import SystemPaastaConfig
30
+
31
+
32
+ KUBECTL_CMD_TEMPLATE = (
33
+ "kubectl-eks-{cluster} --token {token} exec -it -n {namespace} {pod} -- /bin/bash"
34
+ )
35
+
36
+
37
+ def paasta_remote_run_start(
38
+ args: argparse.Namespace,
39
+ system_paasta_config: SystemPaastaConfig,
40
+ ) -> int:
41
+ client = get_paasta_oapi_client_with_auth(
42
+ cluster=get_paasta_oapi_api_clustername(cluster=args.cluster, is_eks=True),
43
+ system_paasta_config=system_paasta_config,
44
+ )
45
+ if not client:
46
+ print("Cannot get a paasta-api client")
47
+ return 1
48
+
49
+ user = get_username()
50
+ start_response = client.remote_run.remote_run_start(
51
+ args.service,
52
+ args.instance,
53
+ RemoteRunStart(
54
+ user=user,
55
+ interactive=args.interactive,
56
+ recreate=args.recreate,
57
+ max_duration=args.max_duration,
58
+ ),
59
+ )
60
+ if start_response.status >= 300:
61
+ print(f"Error from PaaSTA APIs while starting job: {start_response.message}")
62
+ return 1
63
+
64
+ start_time = time.time()
65
+ while time.time() - start_time < args.timeout:
66
+ poll_response = client.remote_run.remote_run_poll(
67
+ args.service,
68
+ args.instance,
69
+ start_response.job_name,
70
+ )
71
+ if poll_response.status == 200:
72
+ break
73
+ time.sleep(10)
74
+ else:
75
+ print("Timed out while waiting for job to start")
76
+ return 1
77
+
78
+ if not args.interactive:
79
+ print("Successfully started remote-run job")
80
+ return 0
81
+
82
+ token_response = client.remote_run.remote_run_token(
83
+ args.service, args.instance, user
84
+ )
85
+
86
+ exec_command = KUBECTL_CMD_TEMPLATE.format(
87
+ cluster=args.cluster,
88
+ namespace=poll_response.namespace,
89
+ pod=poll_response.pod_name,
90
+ token=token_response.token,
91
+ )
92
+ pty.spawn(shlex.split(exec_command))
93
+ return 0
94
+
95
+
96
+ def paasta_remote_run_stop(
97
+ args: argparse.Namespace,
98
+ system_paasta_config: SystemPaastaConfig,
99
+ ) -> int:
100
+ client = get_paasta_oapi_client_with_auth(
101
+ cluster=get_paasta_oapi_api_clustername(cluster=args.cluster, is_eks=True),
102
+ system_paasta_config=system_paasta_config,
103
+ )
104
+ if not client:
105
+ print("Cannot get a paasta-api client")
106
+ return 1
107
+ response = client.remote_run.remote_run_stop(
108
+ args.service, args.instance, RemoteRunStop(user=get_username())
109
+ )
110
+ print(response.message)
111
+ return 0 if response.status < 300 else 1
112
+
113
+
114
+ def add_common_args_to_parser(parser: argparse.ArgumentParser):
115
+ service_arg = parser.add_argument(
116
+ "-s",
117
+ "--service",
118
+ help="The name of the service you wish to inspect. Required.",
119
+ required=True,
120
+ )
121
+ service_arg.completer = lazy_choices_completer(list_services) # type: ignore
122
+ parser.add_argument(
123
+ "-i",
124
+ "--instance",
125
+ help=(
126
+ "Simulate a docker run for a particular instance of the "
127
+ "service, like 'main' or 'canary'. Required."
128
+ ),
129
+ required=True,
130
+ )
131
+ cluster_arg = parser.add_argument(
132
+ "-c",
133
+ "--cluster",
134
+ help="The name of the cluster you wish to run your task on. Required.",
135
+ required=True,
136
+ )
137
+ cluster_arg.completer = lazy_choices_completer(list_clusters) # type: ignore
138
+
139
+
140
+ def add_subparser(subparsers: argparse._SubParsersAction) -> None:
141
+ remote_run_parser = subparsers.add_parser(
142
+ "remote-run",
143
+ help="Run services / jobs remotely",
144
+ description="'paasta remote-run' runs services / jobs remotely",
145
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
146
+ )
147
+ subparsers = remote_run_parser.add_subparsers(dest="remote_run_command")
148
+ start_parser = subparsers.add_parser(
149
+ "start",
150
+ help="Start or connect to a remote-run job",
151
+ description="Starts or connects to a remote-run-job",
152
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
153
+ )
154
+ start_parser.add_argument(
155
+ "-I",
156
+ "--interactive",
157
+ help=(
158
+ "Run container in interactive mode. If interactive is set the "
159
+ 'default command will be "bash" unless otherwise set by the "--cmd" flag'
160
+ ),
161
+ action="store_true",
162
+ default=False,
163
+ )
164
+ start_parser.add_argument(
165
+ "-m",
166
+ "--max-duration",
167
+ help=(
168
+ "Amount of time in seconds after which the job is "
169
+ "automatically stopped (capped by the API backend)"
170
+ ),
171
+ type=int,
172
+ default=1800,
173
+ )
174
+ start_parser.add_argument(
175
+ "-r",
176
+ "--recreate",
177
+ help="Recreate remote-run job if already existing",
178
+ action="store_true",
179
+ default=False,
180
+ )
181
+ start_parser.add_argument(
182
+ "-t",
183
+ "--timeout",
184
+ help="Maximum time to wait for a job to start, in seconds",
185
+ type=int,
186
+ default=600,
187
+ )
188
+ stop_parser = subparsers.add_parser(
189
+ "stop",
190
+ help="Stop your remote-run job if it exists",
191
+ description="Stop your remote-run job if it exists",
192
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
193
+ )
194
+ add_common_args_to_parser(start_parser)
195
+ add_common_args_to_parser(stop_parser)
196
+ remote_run_parser.set_defaults(command=paasta_remote_run)
197
+
198
+
199
+ def paasta_remote_run(args: argparse.Namespace) -> int:
200
+ system_paasta_config = load_system_paasta_config()
201
+ if args.remote_run_command == "start":
202
+ return paasta_remote_run_start(args, system_paasta_config)
203
+ elif args.remote_run_command == "stop":
204
+ return paasta_remote_run_stop(args, system_paasta_config)
205
+ raise ValueError(f"Unsupported subcommand: {args.remote_run_command}")