paasta-tools 1.13.5__tar.gz → 1.14.0__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 (304) hide show
  1. {paasta-tools-1.13.5/paasta_tools.egg-info → paasta-tools-1.14.0}/PKG-INFO +1 -1
  2. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/__init__.py +1 -1
  3. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/api.py +20 -0
  4. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/api_docs/swagger.json +255 -1
  5. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/client.py +2 -0
  6. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/instance.py +10 -2
  7. paasta-tools-1.14.0/paasta_tools/api/views/remote_run.py +107 -0
  8. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/local_run.py +0 -1
  9. paasta-tools-1.14.0/paasta_tools/cli/cmds/remote_run.py +33 -0
  10. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/spark_run.py +0 -1
  11. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/service_shard_update.py +15 -2
  12. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/frameworks/native_service_config.py +0 -1
  13. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes/application/controller_wrappers.py +52 -1
  14. paasta-tools-1.14.0/paasta_tools/kubernetes/remote_run.py +397 -0
  15. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes_tools.py +68 -5
  16. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/__init__.py +1 -1
  17. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/api/autoscaler_api.py +1 -1
  18. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/api/default_api.py +1 -1
  19. paasta-tools-1.14.0/paasta_tools/paastaapi/api/remote_run_api.py +588 -0
  20. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/api/resources_api.py +1 -1
  21. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/api/service_api.py +1 -1
  22. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/api_client.py +1 -1
  23. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/apis/__init__.py +1 -0
  24. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/configuration.py +2 -2
  25. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/exceptions.py +1 -1
  26. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/adhoc_launch_history.py +1 -1
  27. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +1 -1
  28. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/deploy_queue.py +1 -1
  29. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +1 -1
  30. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/envoy_backend.py +1 -1
  31. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/envoy_location.py +1 -1
  32. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/envoy_status.py +1 -1
  33. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/flink_cluster_overview.py +1 -1
  34. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/flink_config.py +1 -1
  35. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/flink_job.py +1 -1
  36. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/flink_job_details.py +1 -1
  37. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/flink_jobs.py +1 -1
  38. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/float_and_error.py +1 -1
  39. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/hpa_metric.py +1 -1
  40. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/inline_object.py +1 -1
  41. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/inline_response200.py +1 -1
  42. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/inline_response2001.py +1 -1
  43. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_bounce_status.py +1 -1
  44. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_mesh_status.py +1 -1
  45. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status.py +1 -1
  46. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status_adhoc.py +1 -1
  47. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +1 -1
  48. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status_flink.py +1 -1
  49. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +1 -1
  50. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +1 -1
  51. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +1 -1
  52. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +1 -1
  53. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status_tron.py +1 -1
  54. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_tasks.py +1 -1
  55. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/integer_and_error.py +1 -1
  56. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/kubernetes_container.py +1 -1
  57. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +1 -1
  58. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +1 -1
  59. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/kubernetes_pod.py +1 -1
  60. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +1 -1
  61. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +1 -1
  62. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +1 -1
  63. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/kubernetes_version.py +1 -1
  64. paasta-tools-1.14.0/paasta_tools/paastaapi/model/remote_run_outcome.py +186 -0
  65. paasta-tools-1.14.0/paasta_tools/paastaapi/model/remote_run_start.py +182 -0
  66. paasta-tools-1.14.0/paasta_tools/paastaapi/model/remote_run_stop.py +173 -0
  67. paasta-tools-1.14.0/paasta_tools/paastaapi/model/remote_run_token.py +173 -0
  68. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/resource.py +1 -1
  69. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/resource_item.py +1 -1
  70. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/resource_value.py +1 -1
  71. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/smartstack_backend.py +1 -1
  72. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/smartstack_location.py +1 -1
  73. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/smartstack_status.py +1 -1
  74. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/task_tail_lines.py +1 -1
  75. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model_utils.py +1 -1
  76. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/models/__init__.py +4 -0
  77. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/rest.py +1 -1
  78. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/spark_tools.py +6 -1
  79. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/tron_tools.py +0 -2
  80. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/utils.py +4 -14
  81. {paasta-tools-1.13.5 → paasta-tools-1.14.0/paasta_tools.egg-info}/PKG-INFO +1 -1
  82. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools.egg-info/SOURCES.txt +7 -2
  83. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/setup.py +0 -2
  84. paasta-tools-1.13.5/paasta_tools/cli/cmds/remote_run.py +0 -317
  85. paasta-tools-1.13.5/paasta_tools/log_task_lifecycle_events.py +0 -247
  86. paasta-tools-1.13.5/paasta_tools/paasta_remote_run.py +0 -773
  87. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/MANIFEST.in +0 -0
  88. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/README.md +0 -0
  89. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/k8s_itests/__init__.py +0 -0
  90. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/k8s_itests/test_autoscaling.py +0 -0
  91. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/k8s_itests/utils.py +0 -0
  92. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/adhoc_tools.py +0 -0
  93. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/__init__.py +0 -0
  94. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/settings.py +0 -0
  95. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/tweens/__init__.py +0 -0
  96. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/tweens/auth.py +0 -0
  97. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/tweens/profiling.py +0 -0
  98. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/tweens/request_logger.py +0 -0
  99. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/__init__.py +0 -0
  100. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/autoscaler.py +0 -0
  101. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/exception.py +0 -0
  102. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/flink.py +0 -0
  103. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/pause_autoscaler.py +0 -0
  104. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/resources.py +0 -0
  105. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/service.py +0 -0
  106. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/version.py +0 -0
  107. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/apply_external_resources.py +0 -0
  108. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/async_utils.py +0 -0
  109. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/autoscaling/__init__.py +0 -0
  110. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
  111. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/autoscaling/forecasting.py +0 -0
  112. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
  113. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
  114. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/autoscaling/utils.py +0 -0
  115. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/bounce_lib.py +0 -0
  116. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/broadcast_log_to_services.py +0 -0
  117. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cassandracluster_tools.py +0 -0
  118. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/check_autoscaler_max_instances.py +0 -0
  119. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
  120. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/check_flink_services_health.py +0 -0
  121. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/check_kubernetes_api.py +0 -0
  122. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/check_kubernetes_services_replication.py +0 -0
  123. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/check_oom_events.py +0 -0
  124. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/check_services_replication_tools.py +0 -0
  125. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/check_spark_jobs.py +0 -0
  126. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
  127. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
  128. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
  129. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cleanup_tron_namespaces.py +0 -0
  130. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/__init__.py +0 -0
  131. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cli.py +0 -0
  132. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/__init__.py +0 -0
  133. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/autoscale.py +0 -0
  134. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/check.py +0 -0
  135. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/cook_image.py +0 -0
  136. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
  137. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/get_image_version.py +0 -0
  138. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
  139. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/info.py +0 -0
  140. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/itest.py +0 -0
  141. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/list.py +0 -0
  142. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/list_clusters.py +0 -0
  143. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
  144. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/list_namespaces.py +0 -0
  145. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/logs.py +0 -0
  146. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
  147. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/mesh_status.py +0 -0
  148. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
  149. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
  150. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/rollback.py +0 -0
  151. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/secret.py +0 -0
  152. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/security_check.py +0 -0
  153. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
  154. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/status.py +0 -0
  155. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/validate.py +0 -0
  156. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
  157. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm/__init__.py +0 -0
  158. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm/autosuggest.py +0 -0
  159. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm/template/README.md +0 -0
  160. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
  161. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
  162. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
  163. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
  164. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
  165. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm_cmd.py +0 -0
  166. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
  167. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
  168. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/autoscaling_schema.json +0 -0
  169. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
  170. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
  171. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
  172. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/eks_schema.json +0 -0
  173. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/kubernetes_schema.json +0 -0
  174. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
  175. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/service_schema.json +0 -0
  176. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/smartstack_schema.json +0 -0
  177. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/tron_schema.json +0 -0
  178. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/utils.py +0 -0
  179. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/clusterman.py +0 -0
  180. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/config_utils.py +0 -0
  181. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/__init__.py +0 -0
  182. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
  183. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
  184. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/check_orphans.py +0 -0
  185. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
  186. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/create_paasta_playground.py +0 -0
  187. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
  188. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
  189. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/habitat_fixer.py +0 -0
  190. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/ide_helper.py +0 -0
  191. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
  192. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
  193. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/kill_bad_containers.py +0 -0
  194. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
  195. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/mock_patch_checker.py +0 -0
  196. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
  197. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/render_template.py +0 -0
  198. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
  199. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/service_shard_remove.py +0 -0
  200. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/shared_ip_check.py +0 -0
  201. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
  202. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/delete_kubernetes_deployments.py +0 -0
  203. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/deployment_utils.py +0 -0
  204. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/docker_wrapper.py +0 -0
  205. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/docker_wrapper_imports.py +0 -0
  206. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/drain_lib.py +0 -0
  207. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/dump_locally_running_services.py +0 -0
  208. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/eks_tools.py +0 -0
  209. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/envoy_tools.py +0 -0
  210. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/firewall.py +0 -0
  211. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/firewall_logging.py +0 -0
  212. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/firewall_update.py +0 -0
  213. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/flink_tools.py +0 -0
  214. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/flinkeks_tools.py +0 -0
  215. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/frameworks/__init__.py +0 -0
  216. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
  217. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/frameworks/constraints.py +0 -0
  218. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/frameworks/native_scheduler.py +0 -0
  219. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/frameworks/task_store.py +0 -0
  220. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/generate_all_deployments +0 -0
  221. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/generate_authenticating_services.py +0 -0
  222. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/generate_deployments_for_service.py +0 -0
  223. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/generate_services_file.py +0 -0
  224. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/generate_services_yaml.py +0 -0
  225. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/hacheck.py +0 -0
  226. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/instance/__init__.py +0 -0
  227. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
  228. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/instance/kubernetes.py +0 -0
  229. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/iptables.py +0 -0
  230. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kafkacluster_tools.py +0 -0
  231. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes/__init__.py +0 -0
  232. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes/application/__init__.py +0 -0
  233. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes/application/tools.py +0 -0
  234. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes/bin/__init__.py +0 -0
  235. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
  236. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
  237. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
  238. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/list_kubernetes_service_instances.py +0 -0
  239. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/list_tron_namespaces.py +0 -0
  240. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/long_running_service_tools.py +0 -0
  241. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mac_address.py +0 -0
  242. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/marathon_dashboard.py +0 -0
  243. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/__init__.py +0 -0
  244. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/cfg.py +0 -0
  245. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/cluster.py +0 -0
  246. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/exceptions.py +0 -0
  247. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/framework.py +0 -0
  248. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/log.py +0 -0
  249. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/master.py +0 -0
  250. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/mesos_file.py +0 -0
  251. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/parallel.py +0 -0
  252. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/slave.py +0 -0
  253. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/task.py +0 -0
  254. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/util.py +0 -0
  255. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/zookeeper.py +0 -0
  256. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos_maintenance.py +0 -0
  257. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos_tools.py +0 -0
  258. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/metrics/__init__.py +0 -0
  259. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/metrics/metastatus_lib.py +0 -0
  260. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/metrics/metrics_lib.py +0 -0
  261. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/monitoring/__init__.py +0 -0
  262. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
  263. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/monitoring_tools.py +0 -0
  264. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/monkrelaycluster_tools.py +0 -0
  265. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/nrtsearchservice_tools.py +0 -0
  266. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
  267. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/oom_logger.py +0 -0
  268. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paasta_deploy_tron_jobs +0 -0
  269. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paasta_execute_docker_command.py +0 -0
  270. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paasta_native_serviceinit.py +0 -0
  271. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paasta_service_config_loader.py +0 -0
  272. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/api/__init__.py +0 -0
  273. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/__init__.py +0 -0
  274. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/prune_completed_pods.py +0 -0
  275. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/puppet_service_tools.py +0 -0
  276. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/py.typed +0 -0
  277. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/remote_git.py +0 -0
  278. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
  279. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/run-paasta-api-playground.py +0 -0
  280. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/secret_providers/__init__.py +0 -0
  281. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/secret_providers/vault.py +0 -0
  282. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/secret_tools.py +0 -0
  283. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/setup_istio_mesh.py +0 -0
  284. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/setup_kubernetes_cr.py +0 -0
  285. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/setup_kubernetes_crd.py +0 -0
  286. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
  287. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/setup_kubernetes_job.py +0 -0
  288. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/setup_prometheus_adapter_config.py +0 -0
  289. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/setup_tron_namespace.py +0 -0
  290. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/slack.py +0 -0
  291. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/smartstack_tools.py +0 -0
  292. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
  293. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/tron/__init__.py +0 -0
  294. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/tron/client.py +0 -0
  295. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/tron/tron_command_context.py +0 -0
  296. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/tron/tron_timeutils.py +0 -0
  297. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/yaml_tools.py +0 -0
  298. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools.egg-info/dependency_links.txt +0 -0
  299. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools.egg-info/entry_points.txt +0 -0
  300. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools.egg-info/requires.txt +0 -0
  301. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools.egg-info/top_level.txt +0 -0
  302. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/pyproject.toml +0 -0
  303. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/requirements-minimal.txt +0 -0
  304. {paasta-tools-1.13.5 → paasta-tools-1.14.0}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: paasta-tools
3
- Version: 1.13.5
3
+ Version: 1.14.0
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.5"
20
+ __version__ = "1.14.0"
@@ -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,33 @@
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
+
17
+ from paasta_tools.utils import PaastaColors
18
+
19
+
20
+ def add_subparser(subparsers: argparse._SubParsersAction):
21
+ subparsers.add_parser(
22
+ "remote-run",
23
+ help="Schedule adhoc service sandbox on PaaSTA cluster",
24
+ description=(
25
+ "`paasta remote-run` is useful for running adhoc commands in "
26
+ "context of a service's Docker image."
27
+ ),
28
+ )
29
+
30
+
31
+ def paasta_remote_run(args: argparse.Namespace):
32
+ print(PaastaColors.red("Error: functionality under construction"))
33
+ return 1
@@ -1219,7 +1219,6 @@ def paasta_spark_run(args: argparse.Namespace) -> int:
1219
1219
 
1220
1220
  volumes = instance_config.get_volumes(
1221
1221
  system_paasta_config.get_volumes(),
1222
- system_paasta_config.get_uses_bulkdata_default(),
1223
1222
  )
1224
1223
  app_base_name = get_spark_app_name(args.cmd or instance_config.get_cmd())
1225
1224
 
@@ -171,6 +171,13 @@ def parse_args():
171
171
  type=str,
172
172
  dest="iam_role",
173
173
  )
174
+ parser.add_argument(
175
+ "--environment",
176
+ help="Environment to deploy in, defaults to all environments if not specified",
177
+ required=False,
178
+ choices=DEPLOY_MAPPINGS.keys(),
179
+ dest="environment",
180
+ )
174
181
  return parser.parse_args()
175
182
 
176
183
 
@@ -201,11 +208,17 @@ def main(args):
201
208
  working_dir=args.local_dir or "/nail/tmp",
202
209
  do_clone=args.local_dir is None,
203
210
  )
211
+ deploy_environments = (
212
+ {args.environment: DEPLOY_MAPPINGS[args.environment]}
213
+ if args.environment
214
+ else DEPLOY_MAPPINGS
215
+ )
216
+
204
217
  with updater:
205
218
  deploy_file = updater.get_existing_configs(args.service, "deploy")
206
219
  smartstack_file = updater.get_existing_configs(args.service, "smartstack")
207
220
  shard_deploy_groups = {
208
- f"{prefix}.{args.shard_name}" for prefix in DEPLOY_MAPPINGS.keys()
221
+ f"{prefix}.{args.shard_name}" for prefix in deploy_environments.keys()
209
222
  }
210
223
  pipeline_steps = {step["step"] for step in deploy_file["pipeline"]}
211
224
 
@@ -226,7 +239,7 @@ def main(args):
226
239
  log.info(f"{step} added to deploy config")
227
240
  updater.write_configs(args.service, "deploy", deploy_file)
228
241
 
229
- for deploy_prefix, config_paths in DEPLOY_MAPPINGS.items():
242
+ for deploy_prefix, config_paths in deploy_environments.items():
230
243
  for config_path in config_paths:
231
244
  # Determine configuration suffix (PAASTA-18216)
232
245
  eks_config = updater.get_existing_configs(
@@ -172,7 +172,6 @@ class NativeServiceConfig(LongRunningServiceConfig):
172
172
  """
173
173
  docker_volumes = self.get_volumes(
174
174
  system_volumes=system_paasta_config.get_volumes(),
175
- uses_bulkdata_default=system_paasta_config.get_uses_bulkdata_default(),
176
175
  )
177
176
  task: TaskInfo = {
178
177
  "name": "",
@@ -6,6 +6,7 @@ from typing import Union
6
6
 
7
7
  from kubernetes.client import V1DeleteOptions
8
8
  from kubernetes.client import V1Deployment
9
+ from kubernetes.client import V1Job
9
10
  from kubernetes.client import V1PodDisruptionBudget
10
11
  from kubernetes.client import V1StatefulSet
11
12
  from kubernetes.client.rest import ApiException
@@ -13,6 +14,7 @@ from kubernetes.client.rest import ApiException
13
14
  from paasta_tools.autoscaling.autoscaling_service_lib import autoscaling_is_paused
14
15
  from paasta_tools.eks_tools import load_eks_service_config_no_cache
15
16
  from paasta_tools.kubernetes_tools import create_deployment
17
+ from paasta_tools.kubernetes_tools import create_job
16
18
  from paasta_tools.kubernetes_tools import create_pod_disruption_budget
17
19
  from paasta_tools.kubernetes_tools import create_stateful_set
18
20
  from paasta_tools.kubernetes_tools import ensure_service_account
@@ -411,14 +413,63 @@ class StatefulSetWrapper(Application):
411
413
  )
412
414
 
413
415
 
416
+ class JobWrapper(Application):
417
+ def __init__(
418
+ self,
419
+ item: V1Job,
420
+ logging=logging.getLogger(__name__),
421
+ ):
422
+ item.spec.replicas = None # avoid causing errors in parent class
423
+ super().__init__(item, logging)
424
+
425
+ def deep_delete(self, kube_client: KubeClient) -> None:
426
+ """Remove resources related to the job"""
427
+ delete_options = V1DeleteOptions(propagation_policy="Foreground")
428
+ try:
429
+ kube_client.batches.delete_namespaced_job(
430
+ self.item.metadata.name,
431
+ self.item.metadata.namespace,
432
+ body=delete_options,
433
+ )
434
+ except ApiException as e:
435
+ if e.status == 404:
436
+ # Job does not exist, nothing to delete but
437
+ # we can consider this a success.
438
+ self.logging.debug(
439
+ "not deleting nonexistent job/{} from namespace/{}".format(
440
+ self.item.metadata.name,
441
+ self.item.metadata.namespace,
442
+ )
443
+ )
444
+ else:
445
+ raise
446
+ else:
447
+ self.logging.info(
448
+ "deleted job/{} from namespace/{}".format(
449
+ self.item.metadata.name,
450
+ self.item.metadata.namespace,
451
+ )
452
+ )
453
+
454
+ def create(self, kube_client: KubeClient):
455
+ """Create and start Kubernetes Job"""
456
+ create_job(
457
+ kube_client=kube_client,
458
+ formatted_job=self.item,
459
+ namespace=self.soa_config.get_namespace(),
460
+ )
461
+
462
+
414
463
  def get_application_wrapper(
415
- formatted_application: Union[V1Deployment, V1StatefulSet]
464
+ formatted_application: Union[V1Deployment, V1StatefulSet, V1Job]
416
465
  ) -> Application:
417
466
  app: Application
418
467
  if isinstance(formatted_application, V1Deployment):
419
468
  app = DeploymentWrapper(formatted_application)
420
469
  elif isinstance(formatted_application, V1StatefulSet):
421
470
  app = StatefulSetWrapper(formatted_application)
471
+ elif isinstance(formatted_application, V1Job):
472
+ app = JobWrapper(formatted_application)
422
473
  else:
423
474
  raise Exception("Unknown kubernetes object to update")
424
475