paasta-tools 1.14.0__tar.gz → 1.14.2__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 (303) hide show
  1. {paasta-tools-1.14.0/paasta_tools.egg-info → paasta-tools-1.14.2}/PKG-INFO +1 -1
  2. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/__init__.py +1 -1
  3. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/api_docs/swagger.json +13 -1
  4. paasta-tools-1.14.2/paasta_tools/cli/cmds/remote_run.py +212 -0
  5. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/utils.py +15 -0
  6. paasta-tools-1.14.2/paasta_tools/kubernetes/bin/paasta_cleanup_remote_run_resources.py +83 -0
  7. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/kubernetes/remote_run.py +51 -7
  8. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/kubernetes_tools.py +21 -7
  9. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/__init__.py +1 -1
  10. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/api/autoscaler_api.py +1 -1
  11. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/api/default_api.py +1 -1
  12. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/api/remote_run_api.py +1 -1
  13. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/api/resources_api.py +1 -1
  14. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/api/service_api.py +1 -1
  15. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/api_client.py +1 -1
  16. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/configuration.py +2 -2
  17. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/exceptions.py +1 -1
  18. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/adhoc_launch_history.py +1 -1
  19. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +1 -1
  20. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/deploy_queue.py +1 -1
  21. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +1 -1
  22. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/envoy_backend.py +1 -1
  23. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/envoy_location.py +1 -1
  24. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/envoy_status.py +1 -1
  25. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/flink_cluster_overview.py +1 -1
  26. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/flink_config.py +1 -1
  27. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/flink_job.py +1 -1
  28. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/flink_job_details.py +1 -1
  29. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/flink_jobs.py +1 -1
  30. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/float_and_error.py +1 -1
  31. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/hpa_metric.py +1 -1
  32. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/inline_object.py +1 -1
  33. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/inline_response200.py +1 -1
  34. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/inline_response2001.py +1 -1
  35. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/instance_bounce_status.py +1 -1
  36. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/instance_mesh_status.py +1 -1
  37. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/instance_status.py +1 -1
  38. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/instance_status_adhoc.py +1 -1
  39. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +1 -1
  40. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/instance_status_flink.py +1 -1
  41. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +1 -1
  42. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +1 -1
  43. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +1 -1
  44. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +1 -1
  45. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/instance_status_tron.py +1 -1
  46. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/instance_tasks.py +1 -1
  47. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/integer_and_error.py +1 -1
  48. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/kubernetes_container.py +1 -1
  49. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +1 -1
  50. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +1 -1
  51. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/kubernetes_pod.py +1 -1
  52. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +1 -1
  53. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +1 -1
  54. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +1 -1
  55. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/kubernetes_version.py +1 -1
  56. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/remote_run_outcome.py +1 -1
  57. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/remote_run_start.py +1 -1
  58. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/remote_run_stop.py +1 -1
  59. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/remote_run_token.py +1 -1
  60. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/resource.py +1 -1
  61. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/resource_item.py +1 -1
  62. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/resource_value.py +1 -1
  63. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/smartstack_backend.py +1 -1
  64. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/smartstack_location.py +1 -1
  65. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/smartstack_status.py +1 -1
  66. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/task_tail_lines.py +1 -1
  67. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model_utils.py +1 -1
  68. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/rest.py +1 -1
  69. {paasta-tools-1.14.0 → paasta-tools-1.14.2/paasta_tools.egg-info}/PKG-INFO +1 -1
  70. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools.egg-info/SOURCES.txt +1 -0
  71. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/setup.py +1 -0
  72. paasta-tools-1.14.0/paasta_tools/cli/cmds/remote_run.py +0 -33
  73. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/MANIFEST.in +0 -0
  74. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/README.md +0 -0
  75. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/k8s_itests/__init__.py +0 -0
  76. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/k8s_itests/test_autoscaling.py +0 -0
  77. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/k8s_itests/utils.py +0 -0
  78. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/adhoc_tools.py +0 -0
  79. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/__init__.py +0 -0
  80. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/api.py +0 -0
  81. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/client.py +0 -0
  82. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/settings.py +0 -0
  83. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/tweens/__init__.py +0 -0
  84. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/tweens/auth.py +0 -0
  85. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/tweens/profiling.py +0 -0
  86. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/tweens/request_logger.py +0 -0
  87. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/views/__init__.py +0 -0
  88. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/views/autoscaler.py +0 -0
  89. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/views/exception.py +0 -0
  90. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/views/flink.py +0 -0
  91. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/views/instance.py +0 -0
  92. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/views/pause_autoscaler.py +0 -0
  93. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/views/remote_run.py +0 -0
  94. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/views/resources.py +0 -0
  95. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/views/service.py +0 -0
  96. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/api/views/version.py +0 -0
  97. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/apply_external_resources.py +0 -0
  98. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/async_utils.py +0 -0
  99. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/autoscaling/__init__.py +0 -0
  100. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
  101. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/autoscaling/forecasting.py +0 -0
  102. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
  103. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
  104. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/autoscaling/utils.py +0 -0
  105. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/bounce_lib.py +0 -0
  106. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/broadcast_log_to_services.py +0 -0
  107. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cassandracluster_tools.py +0 -0
  108. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/check_autoscaler_max_instances.py +0 -0
  109. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
  110. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/check_flink_services_health.py +0 -0
  111. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/check_kubernetes_api.py +0 -0
  112. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/check_kubernetes_services_replication.py +0 -0
  113. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/check_oom_events.py +0 -0
  114. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/check_services_replication_tools.py +0 -0
  115. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/check_spark_jobs.py +0 -0
  116. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
  117. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
  118. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
  119. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cleanup_tron_namespaces.py +0 -0
  120. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/__init__.py +0 -0
  121. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cli.py +0 -0
  122. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/__init__.py +0 -0
  123. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/autoscale.py +0 -0
  124. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/check.py +0 -0
  125. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/cook_image.py +0 -0
  126. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
  127. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/get_image_version.py +0 -0
  128. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
  129. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/info.py +0 -0
  130. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/itest.py +0 -0
  131. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/list.py +0 -0
  132. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/list_clusters.py +0 -0
  133. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
  134. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/list_namespaces.py +0 -0
  135. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/local_run.py +0 -0
  136. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/logs.py +0 -0
  137. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
  138. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/mesh_status.py +0 -0
  139. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
  140. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
  141. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/rollback.py +0 -0
  142. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/secret.py +0 -0
  143. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/security_check.py +0 -0
  144. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/spark_run.py +0 -0
  145. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
  146. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/status.py +0 -0
  147. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/validate.py +0 -0
  148. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
  149. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/fsm/__init__.py +0 -0
  150. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/fsm/autosuggest.py +0 -0
  151. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/fsm/template/README.md +0 -0
  152. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
  153. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
  154. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
  155. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
  156. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
  157. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/fsm_cmd.py +0 -0
  158. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
  159. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
  160. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/schemas/autoscaling_schema.json +0 -0
  161. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
  162. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
  163. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
  164. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/schemas/eks_schema.json +0 -0
  165. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/schemas/kubernetes_schema.json +0 -0
  166. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
  167. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/schemas/service_schema.json +0 -0
  168. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/schemas/smartstack_schema.json +0 -0
  169. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/cli/schemas/tron_schema.json +0 -0
  170. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/clusterman.py +0 -0
  171. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/config_utils.py +0 -0
  172. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/__init__.py +0 -0
  173. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
  174. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
  175. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/check_orphans.py +0 -0
  176. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
  177. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/create_paasta_playground.py +0 -0
  178. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
  179. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
  180. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/habitat_fixer.py +0 -0
  181. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/ide_helper.py +0 -0
  182. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
  183. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
  184. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/kill_bad_containers.py +0 -0
  185. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
  186. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/mock_patch_checker.py +0 -0
  187. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
  188. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/render_template.py +0 -0
  189. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
  190. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/service_shard_remove.py +0 -0
  191. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/service_shard_update.py +0 -0
  192. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/shared_ip_check.py +0 -0
  193. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
  194. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/delete_kubernetes_deployments.py +0 -0
  195. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/deployment_utils.py +0 -0
  196. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/docker_wrapper.py +0 -0
  197. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/docker_wrapper_imports.py +0 -0
  198. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/drain_lib.py +0 -0
  199. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/dump_locally_running_services.py +0 -0
  200. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/eks_tools.py +0 -0
  201. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/envoy_tools.py +0 -0
  202. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/firewall.py +0 -0
  203. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/firewall_logging.py +0 -0
  204. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/firewall_update.py +0 -0
  205. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/flink_tools.py +0 -0
  206. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/flinkeks_tools.py +0 -0
  207. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/frameworks/__init__.py +0 -0
  208. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
  209. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/frameworks/constraints.py +0 -0
  210. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/frameworks/native_scheduler.py +0 -0
  211. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/frameworks/native_service_config.py +0 -0
  212. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/frameworks/task_store.py +0 -0
  213. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/generate_all_deployments +0 -0
  214. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/generate_authenticating_services.py +0 -0
  215. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/generate_deployments_for_service.py +0 -0
  216. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/generate_services_file.py +0 -0
  217. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/generate_services_yaml.py +0 -0
  218. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/hacheck.py +0 -0
  219. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/instance/__init__.py +0 -0
  220. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
  221. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/instance/kubernetes.py +0 -0
  222. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/iptables.py +0 -0
  223. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/kafkacluster_tools.py +0 -0
  224. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/kubernetes/__init__.py +0 -0
  225. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/kubernetes/application/__init__.py +0 -0
  226. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/kubernetes/application/controller_wrappers.py +0 -0
  227. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/kubernetes/application/tools.py +0 -0
  228. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/kubernetes/bin/__init__.py +0 -0
  229. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
  230. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
  231. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
  232. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/list_kubernetes_service_instances.py +0 -0
  233. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/list_tron_namespaces.py +0 -0
  234. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/long_running_service_tools.py +0 -0
  235. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/mac_address.py +0 -0
  236. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/marathon_dashboard.py +0 -0
  237. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/mesos/__init__.py +0 -0
  238. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/mesos/cfg.py +0 -0
  239. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/mesos/cluster.py +0 -0
  240. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/mesos/exceptions.py +0 -0
  241. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/mesos/framework.py +0 -0
  242. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/mesos/log.py +0 -0
  243. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/mesos/master.py +0 -0
  244. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/mesos/mesos_file.py +0 -0
  245. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/mesos/parallel.py +0 -0
  246. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/mesos/slave.py +0 -0
  247. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/mesos/task.py +0 -0
  248. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/mesos/util.py +0 -0
  249. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/mesos/zookeeper.py +0 -0
  250. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/mesos_maintenance.py +0 -0
  251. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/mesos_tools.py +0 -0
  252. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/metrics/__init__.py +0 -0
  253. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/metrics/metastatus_lib.py +0 -0
  254. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/metrics/metrics_lib.py +0 -0
  255. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/monitoring/__init__.py +0 -0
  256. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
  257. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/monitoring_tools.py +0 -0
  258. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/monkrelaycluster_tools.py +0 -0
  259. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/nrtsearchservice_tools.py +0 -0
  260. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
  261. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/oom_logger.py +0 -0
  262. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paasta_deploy_tron_jobs +0 -0
  263. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paasta_execute_docker_command.py +0 -0
  264. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paasta_native_serviceinit.py +0 -0
  265. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paasta_service_config_loader.py +0 -0
  266. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/api/__init__.py +0 -0
  267. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/apis/__init__.py +0 -0
  268. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/model/__init__.py +0 -0
  269. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/paastaapi/models/__init__.py +0 -0
  270. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/prune_completed_pods.py +0 -0
  271. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/puppet_service_tools.py +0 -0
  272. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/py.typed +0 -0
  273. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/remote_git.py +0 -0
  274. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
  275. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/run-paasta-api-playground.py +0 -0
  276. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/secret_providers/__init__.py +0 -0
  277. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/secret_providers/vault.py +0 -0
  278. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/secret_tools.py +0 -0
  279. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/setup_istio_mesh.py +0 -0
  280. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/setup_kubernetes_cr.py +0 -0
  281. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/setup_kubernetes_crd.py +0 -0
  282. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
  283. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/setup_kubernetes_job.py +0 -0
  284. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/setup_prometheus_adapter_config.py +0 -0
  285. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/setup_tron_namespace.py +0 -0
  286. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/slack.py +0 -0
  287. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/smartstack_tools.py +0 -0
  288. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/spark_tools.py +0 -0
  289. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
  290. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/tron/__init__.py +0 -0
  291. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/tron/client.py +0 -0
  292. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/tron/tron_command_context.py +0 -0
  293. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/tron/tron_timeutils.py +0 -0
  294. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/tron_tools.py +0 -0
  295. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/utils.py +0 -0
  296. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools/yaml_tools.py +0 -0
  297. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools.egg-info/dependency_links.txt +0 -0
  298. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools.egg-info/entry_points.txt +0 -0
  299. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools.egg-info/requires.txt +0 -0
  300. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/paasta_tools.egg-info/top_level.txt +0 -0
  301. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/pyproject.toml +0 -0
  302. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/requirements-minimal.txt +0 -0
  303. {paasta-tools-1.14.0 → paasta-tools-1.14.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: paasta-tools
3
- Version: 1.14.0
3
+ Version: 1.14.2
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.14.0"
20
+ __version__ = "1.14.2"
@@ -2,7 +2,7 @@
2
2
  "swagger": "2.0",
3
3
  "info": {
4
4
  "title": "Paasta API",
5
- "version": "1.1.0"
5
+ "version": "1.1.1"
6
6
  },
7
7
  "basePath": "/v1",
8
8
  "schemes": [
@@ -856,6 +856,9 @@
856
856
  "$ref": "#/definitions/RemoteRunOutcome"
857
857
  }
858
858
  },
859
+ "403": {
860
+ "description": "Unauthorized to remote-run this service"
861
+ },
859
862
  "404": {
860
863
  "description": "Deployment key not found"
861
864
  },
@@ -904,6 +907,9 @@
904
907
  "$ref": "#/definitions/RemoteRunOutcome"
905
908
  }
906
909
  },
910
+ "403": {
911
+ "description": "Unauthorized to remote-run this service"
912
+ },
907
913
  "404": {
908
914
  "description": "Service instance not found"
909
915
  },
@@ -952,6 +958,9 @@
952
958
  "$ref": "#/definitions/RemoteRunOutcome"
953
959
  }
954
960
  },
961
+ "403": {
962
+ "description": "Unauthorized to remote-run this service"
963
+ },
955
964
  "404": {
956
965
  "description": "Service instance not found"
957
966
  },
@@ -998,6 +1007,9 @@
998
1007
  "$ref": "#/definitions/RemoteRunToken"
999
1008
  }
1000
1009
  },
1010
+ "403": {
1011
+ "description": "Unauthorized to remote-run this service"
1012
+ },
1001
1013
  "404": {
1002
1014
  "description": "Service instance not found"
1003
1015
  },
@@ -0,0 +1,212 @@
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
+ print(
65
+ f"Triggered remote-run job for {args.service}. Waiting for pod to come online..."
66
+ )
67
+ start_time = time.time()
68
+ while time.time() - start_time < args.timeout:
69
+ poll_response = client.remote_run.remote_run_poll(
70
+ args.service,
71
+ args.instance,
72
+ start_response.job_name,
73
+ )
74
+ if poll_response.status == 200:
75
+ print("")
76
+ break
77
+ print(f"\rStatus: {poll_response.message}", end="")
78
+ time.sleep(10)
79
+ else:
80
+ print("Timed out while waiting for job to start")
81
+ return 1
82
+
83
+ if not args.interactive:
84
+ print("Successfully started remote-run job")
85
+ return 0
86
+
87
+ print("Pod ready, establishing interactive session...")
88
+
89
+ token_response = client.remote_run.remote_run_token(
90
+ args.service, args.instance, user
91
+ )
92
+
93
+ exec_command = KUBECTL_CMD_TEMPLATE.format(
94
+ cluster=args.cluster,
95
+ namespace=poll_response.namespace,
96
+ pod=poll_response.pod_name,
97
+ token=token_response.token,
98
+ )
99
+ pty.spawn(shlex.split(exec_command))
100
+ return 0
101
+
102
+
103
+ def paasta_remote_run_stop(
104
+ args: argparse.Namespace,
105
+ system_paasta_config: SystemPaastaConfig,
106
+ ) -> int:
107
+ client = get_paasta_oapi_client_with_auth(
108
+ cluster=get_paasta_oapi_api_clustername(cluster=args.cluster, is_eks=True),
109
+ system_paasta_config=system_paasta_config,
110
+ )
111
+ if not client:
112
+ print("Cannot get a paasta-api client")
113
+ return 1
114
+ response = client.remote_run.remote_run_stop(
115
+ args.service, args.instance, RemoteRunStop(user=get_username())
116
+ )
117
+ print(response.message)
118
+ return 0 if response.status < 300 else 1
119
+
120
+
121
+ def add_common_args_to_parser(parser: argparse.ArgumentParser):
122
+ service_arg = parser.add_argument(
123
+ "-s",
124
+ "--service",
125
+ help="The name of the service you wish to inspect. Required.",
126
+ required=True,
127
+ )
128
+ service_arg.completer = lazy_choices_completer(list_services) # type: ignore
129
+ parser.add_argument(
130
+ "-i",
131
+ "--instance",
132
+ help=(
133
+ "Simulate a docker run for a particular instance of the "
134
+ "service, like 'main' or 'canary'. Required."
135
+ ),
136
+ required=True,
137
+ )
138
+ cluster_arg = parser.add_argument(
139
+ "-c",
140
+ "--cluster",
141
+ help="The name of the cluster you wish to run your task on. Required.",
142
+ required=True,
143
+ )
144
+ cluster_arg.completer = lazy_choices_completer(list_clusters) # type: ignore
145
+
146
+
147
+ def add_subparser(subparsers: argparse._SubParsersAction) -> None:
148
+ remote_run_parser = subparsers.add_parser(
149
+ "remote-run",
150
+ help="Run services / jobs remotely",
151
+ description="'paasta remote-run' runs services / jobs remotely",
152
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
153
+ )
154
+ subparsers = remote_run_parser.add_subparsers(dest="remote_run_command")
155
+ start_parser = subparsers.add_parser(
156
+ "start",
157
+ help="Start or connect to a remote-run job",
158
+ description="Starts or connects to a remote-run-job",
159
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
160
+ )
161
+ start_parser.add_argument(
162
+ "-I",
163
+ "--interactive",
164
+ help=(
165
+ "Run container in interactive mode. If interactive is set the "
166
+ 'default command will be "bash" unless otherwise set by the "--cmd" flag'
167
+ ),
168
+ action="store_true",
169
+ default=False,
170
+ )
171
+ start_parser.add_argument(
172
+ "-m",
173
+ "--max-duration",
174
+ help=(
175
+ "Amount of time in seconds after which the job is "
176
+ "automatically stopped (capped by the API backend)"
177
+ ),
178
+ type=int,
179
+ default=1800,
180
+ )
181
+ start_parser.add_argument(
182
+ "-r",
183
+ "--recreate",
184
+ help="Recreate remote-run job if already existing",
185
+ action="store_true",
186
+ default=False,
187
+ )
188
+ start_parser.add_argument(
189
+ "-t",
190
+ "--timeout",
191
+ help="Maximum time to wait for a job to start, in seconds",
192
+ type=int,
193
+ default=600,
194
+ )
195
+ stop_parser = subparsers.add_parser(
196
+ "stop",
197
+ help="Stop your remote-run job if it exists",
198
+ description="Stop your remote-run job if it exists",
199
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
200
+ )
201
+ add_common_args_to_parser(start_parser)
202
+ add_common_args_to_parser(stop_parser)
203
+ remote_run_parser.set_defaults(command=paasta_remote_run)
204
+
205
+
206
+ def paasta_remote_run(args: argparse.Namespace) -> int:
207
+ system_paasta_config = load_system_paasta_config()
208
+ if args.remote_run_command == "start":
209
+ return paasta_remote_run_start(args, system_paasta_config)
210
+ elif args.remote_run_command == "stop":
211
+ return paasta_remote_run_stop(args, system_paasta_config)
212
+ raise ValueError(f"Unsupported subcommand: {args.remote_run_command}")
@@ -43,6 +43,8 @@ from mypy_extensions import NamedArg
43
43
 
44
44
  from paasta_tools import remote_git
45
45
  from paasta_tools.adhoc_tools import load_adhoc_job_config
46
+ from paasta_tools.api.client import get_paasta_oapi_client
47
+ from paasta_tools.api.client import PaastaOApiClient
46
48
  from paasta_tools.cassandracluster_tools import load_cassandracluster_instance_config
47
49
  from paasta_tools.eks_tools import EksDeploymentConfig
48
50
  from paasta_tools.eks_tools import load_eks_service_config
@@ -1135,3 +1137,16 @@ def get_sso_service_auth_token() -> str:
1135
1137
  """Generate an authentication token for the calling user from the Single Sign On provider"""
1136
1138
  client_id = load_system_paasta_config().get_service_auth_sso_oidc_client_id()
1137
1139
  return get_and_cache_jwt_default(client_id)
1140
+
1141
+
1142
+ def get_paasta_oapi_client_with_auth(
1143
+ cluster: str = None,
1144
+ system_paasta_config: SystemPaastaConfig = None,
1145
+ http_res: bool = False,
1146
+ ) -> Optional[PaastaOApiClient]:
1147
+ return get_paasta_oapi_client(
1148
+ cluster=cluster,
1149
+ system_paasta_config=system_paasta_config,
1150
+ http_res=http_res,
1151
+ auth_token=get_sso_service_auth_token(),
1152
+ )
@@ -0,0 +1,83 @@
1
+ #!/usr/bin/env python
2
+ # Copyright 2015-2019 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
+ from datetime import datetime
17
+ from datetime import timedelta
18
+ from datetime import timezone
19
+ from typing import Any
20
+ from typing import Callable
21
+ from typing import Sequence
22
+ from typing import Tuple
23
+
24
+ from paasta_tools.kubernetes.remote_run import get_remote_run_role_bindings
25
+ from paasta_tools.kubernetes.remote_run import get_remote_run_roles
26
+ from paasta_tools.kubernetes.remote_run import get_remote_run_service_accounts
27
+ from paasta_tools.kubernetes_tools import get_all_managed_namespaces
28
+ from paasta_tools.kubernetes_tools import KubeClient
29
+
30
+
31
+ ListingFuncType = Callable[[KubeClient, str], Sequence[Any]]
32
+ DeletionFuncType = Callable[[str, str], Any]
33
+
34
+
35
+ def clean_namespace(kube_client: KubeClient, namespace: str, age_limit: datetime):
36
+ """Clean ephemeral remote-run resource in a namespace
37
+
38
+ :param KubeClient kube_client: kubernetes client
39
+ :param str namepsace: kubernetes namespace
40
+ :param datetime age_limit: expiration time for resources
41
+ """
42
+ cleanup_actions: Sequence[Tuple[DeletionFuncType, ListingFuncType]] = (
43
+ (
44
+ kube_client.core.delete_namespaced_service_account,
45
+ get_remote_run_service_accounts,
46
+ ),
47
+ (kube_client.rbac.delete_namespaced_role, get_remote_run_roles),
48
+ (kube_client.rbac.delete_namespaced_role_binding, get_remote_run_role_bindings),
49
+ )
50
+ for delete_func, list_func in cleanup_actions:
51
+ for entity in list_func(kube_client, namespace):
52
+ if (
53
+ not entity.metadata.name.startswith("remote-run-")
54
+ or entity.metadata.creation_timestamp > age_limit
55
+ ):
56
+ continue
57
+ delete_func(entity.metadata.name, namespace)
58
+
59
+
60
+ def parse_args() -> argparse.Namespace:
61
+ parser = argparse.ArgumentParser(
62
+ description="Clean ephemeral Kubernetes resources created by remote-run invocations",
63
+ formatter_class=argparse.ArgumentDefaultsHelpFormatter,
64
+ )
65
+ parser.add_argument(
66
+ "--max-age",
67
+ type=int,
68
+ default=600,
69
+ help="Maximum age, in seconds, resources are allowed to have",
70
+ )
71
+ return parser.parse_args()
72
+
73
+
74
+ def main():
75
+ args = parse_args()
76
+ kube_client = KubeClient()
77
+ age_limit = datetime.now(tz=timezone.utc) - timedelta(seconds=args.max_age)
78
+ for namespace in get_all_managed_namespaces(kube_client):
79
+ clean_namespace(kube_client, namespace, age_limit)
80
+
81
+
82
+ if __name__ == "__main__":
83
+ main()
@@ -14,7 +14,9 @@
14
14
  import hashlib
15
15
  import logging
16
16
  from time import sleep
17
+ from typing import List
17
18
  from typing import Optional
19
+ from typing import Sequence
18
20
  from typing import TypedDict
19
21
 
20
22
  from kubernetes.client import AuthenticationV1TokenRequest
@@ -236,7 +238,7 @@ def remote_run_token(
236
238
  kube_client, namespace, pod_name, user
237
239
  )
238
240
  role = create_pod_scoped_role(kube_client, namespace, pod_name, user)
239
- bind_role_to_service_account(kube_client, namespace, service_account, role)
241
+ bind_role_to_service_account(kube_client, namespace, service_account, role, user)
240
242
  return create_temp_exec_token(kube_client, namespace, service_account)
241
243
 
242
244
 
@@ -293,6 +295,23 @@ def create_temp_exec_token(
293
295
  return response.status.token
294
296
 
295
297
 
298
+ def get_remote_run_service_accounts(
299
+ kube_client: KubeClient, namespace: str, user: str = ""
300
+ ) -> Sequence[V1ServiceAccount]:
301
+ """List all temporary service account related to remote-run
302
+
303
+ :param KubeClient kube_client: Kubernetes client
304
+ :param str namespace: pod namespace
305
+ :param str user: optionally filter by owning user
306
+ :return: list of service accounts
307
+ """
308
+ return get_all_service_accounts(
309
+ kube_client,
310
+ namespace=namespace,
311
+ label_selector=(f"{POD_OWNER_LABEL}={user}" if user else POD_OWNER_LABEL),
312
+ )
313
+
314
+
296
315
  def create_remote_run_service_account(
297
316
  kube_client: KubeClient,
298
317
  namespace: str,
@@ -308,11 +327,7 @@ def create_remote_run_service_account(
308
327
  """
309
328
  pod_name_hash = hashlib.sha1(pod_name.encode("utf-8")).hexdigest()[:12]
310
329
  service_account_name = limit_size_with_hash(f"remote-run-{user}-{pod_name_hash}")
311
- service_accounts = get_all_service_accounts(
312
- kube_client,
313
- namespace=namespace,
314
- label_selector=f"{POD_OWNER_LABEL}={user}",
315
- )
330
+ service_accounts = get_remote_run_service_accounts(kube_client, namespace, user)
316
331
  if any(item.metadata.name == service_account_name for item in service_accounts):
317
332
  return service_account_name
318
333
  service_account = V1ServiceAccount(
@@ -366,6 +381,7 @@ def bind_role_to_service_account(
366
381
  namespace: str,
367
382
  service_account: str,
368
383
  role: str,
384
+ user: str,
369
385
  ) -> None:
370
386
  """Bind service account to role
371
387
 
@@ -373,11 +389,13 @@ def bind_role_to_service_account(
373
389
  :param str namespace: service account namespace
374
390
  :param str service_account: service account name
375
391
  :param str role: role name
392
+ :param str user: user requiring the role
376
393
  """
377
394
  role_binding = V1RoleBinding(
378
395
  metadata=V1ObjectMeta(
379
- name=limit_size_with_hash(f"binding-{role}"),
396
+ name=limit_size_with_hash(f"remote-run-binding-{role}"),
380
397
  namespace=namespace,
398
+ labels={POD_OWNER_LABEL: user},
381
399
  ),
382
400
  role_ref=V1RoleRef(
383
401
  api_group="rbac.authorization.k8s.io",
@@ -395,3 +413,29 @@ def bind_role_to_service_account(
395
413
  namespace=namespace,
396
414
  body=role_binding,
397
415
  )
416
+
417
+
418
+ def get_remote_run_roles(kube_client: KubeClient, namespace: str) -> List[V1Role]:
419
+ """List all temporary roles related to remote-run
420
+
421
+ :param KubeClient kube_client: Kubernetes client
422
+ :param str namespace: pod namespace
423
+ :return: list of roles
424
+ """
425
+ return kube_client.rbac.list_namespaced_role(
426
+ namespace, label_selector=POD_OWNER_LABEL
427
+ ).items
428
+
429
+
430
+ def get_remote_run_role_bindings(
431
+ kube_client: KubeClient, namespace: str
432
+ ) -> List[V1RoleBinding]:
433
+ """List all temporary role bindings related to remote-run
434
+
435
+ :param KubeClient kube_client: Kubernetes client
436
+ :param str namespace: pod namespace
437
+ :return: list of roles
438
+ """
439
+ return kube_client.rbac.list_namespaced_role_binding(
440
+ namespace, label_selector=POD_OWNER_LABEL
441
+ ).items
@@ -1436,6 +1436,7 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
1436
1436
  aws_ebs_volumes: Sequence[AwsEbsVolume],
1437
1437
  secret_volumes: Sequence[SecretVolume],
1438
1438
  service_namespace_config: ServiceNamespaceConfig,
1439
+ include_sidecars: bool = True,
1439
1440
  ) -> Sequence[V1Container]:
1440
1441
  ports = [self.get_container_port()]
1441
1442
  # MONK-1130
@@ -1471,11 +1472,13 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
1471
1472
  projected_sa_volumes=self.get_projected_sa_volumes(),
1472
1473
  ),
1473
1474
  )
1474
- containers = [service_container] + self.get_sidecar_containers( # type: ignore
1475
- system_paasta_config=system_paasta_config,
1476
- service_namespace_config=service_namespace_config,
1477
- hacheck_sidecar_volumes=hacheck_sidecar_volumes,
1478
- )
1475
+ containers = [service_container]
1476
+ if include_sidecars:
1477
+ containers += self.get_sidecar_containers( # type: ignore
1478
+ system_paasta_config=system_paasta_config,
1479
+ service_namespace_config=service_namespace_config,
1480
+ hacheck_sidecar_volumes=hacheck_sidecar_volumes,
1481
+ )
1479
1482
  return containers
1480
1483
 
1481
1484
  def get_readiness_probe(
@@ -2052,11 +2055,15 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
2052
2055
  self,
2053
2056
  job_label: str,
2054
2057
  deadline_seconds: int = 3600,
2058
+ keep_routable_ip: bool = False,
2059
+ include_sidecars: bool = False,
2055
2060
  ) -> V1Job:
2056
2061
  """Create the config for launching the deployment as a Job
2057
2062
 
2058
2063
  :param str job_label: value to set for the "job type" label
2059
2064
  :param int deadline_seconds: maximum allowed duration for the job
2065
+ :param bool keep_routable_ip: maintain routable IP annotation in pod template
2066
+ :param bool include_sidecars: do not discard sidecar containers when building pod spec
2060
2067
  :return: job object
2061
2068
  """
2062
2069
  try:
@@ -2073,6 +2080,8 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
2073
2080
  git_sha=git_sha,
2074
2081
  system_paasta_config=system_paasta_config,
2075
2082
  restart_on_failure=False,
2083
+ include_sidecars=include_sidecars,
2084
+ force_no_routable_ip=not keep_routable_ip,
2076
2085
  ),
2077
2086
  ),
2078
2087
  )
@@ -2205,6 +2214,8 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
2205
2214
  git_sha: str,
2206
2215
  system_paasta_config: SystemPaastaConfig,
2207
2216
  restart_on_failure: bool = True,
2217
+ include_sidecars: bool = True,
2218
+ force_no_routable_ip: bool = False,
2208
2219
  ) -> V1PodTemplateSpec:
2209
2220
  service_namespace_config = load_service_namespace_config(
2210
2221
  service=self.service, namespace=self.get_nerve_namespace()
@@ -2214,8 +2225,10 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
2214
2225
  )
2215
2226
 
2216
2227
  hacheck_sidecar_volumes = system_paasta_config.get_hacheck_sidecar_volumes()
2217
- has_routable_ip = self.has_routable_ip(
2218
- service_namespace_config, system_paasta_config
2228
+ has_routable_ip = (
2229
+ "false"
2230
+ if force_no_routable_ip
2231
+ else self.has_routable_ip(service_namespace_config, system_paasta_config)
2219
2232
  )
2220
2233
  annotations: KubePodAnnotations = {
2221
2234
  "smartstack_registrations": json.dumps(self.get_registrations()),
@@ -2239,6 +2252,7 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
2239
2252
  secret_volumes=self.get_secret_volumes(),
2240
2253
  system_paasta_config=system_paasta_config,
2241
2254
  service_namespace_config=service_namespace_config,
2255
+ include_sidecars=include_sidecars,
2242
2256
  ),
2243
2257
  share_process_namespace=True,
2244
2258
  node_selector=self.get_node_selector(),
@@ -7,7 +7,7 @@
7
7
 
8
8
  No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
9
9
 
10
- The version of the OpenAPI document: 1.1.0
10
+ The version of the OpenAPI document: 1.1.1
11
11
  Generated by: https://openapi-generator.tech
12
12
  """
13
13
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
7
7
 
8
- The version of the OpenAPI document: 1.1.0
8
+ The version of the OpenAPI document: 1.1.1
9
9
  Generated by: https://openapi-generator.tech
10
10
  """
11
11
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
7
7
 
8
- The version of the OpenAPI document: 1.1.0
8
+ The version of the OpenAPI document: 1.1.1
9
9
  Generated by: https://openapi-generator.tech
10
10
  """
11
11
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
7
7
 
8
- The version of the OpenAPI document: 1.1.0
8
+ The version of the OpenAPI document: 1.1.1
9
9
  Generated by: https://openapi-generator.tech
10
10
  """
11
11
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
7
7
 
8
- The version of the OpenAPI document: 1.1.0
8
+ The version of the OpenAPI document: 1.1.1
9
9
  Generated by: https://openapi-generator.tech
10
10
  """
11
11
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
7
7
 
8
- The version of the OpenAPI document: 1.1.0
8
+ The version of the OpenAPI document: 1.1.1
9
9
  Generated by: https://openapi-generator.tech
10
10
  """
11
11
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
6
6
 
7
- The version of the OpenAPI document: 1.1.0
7
+ The version of the OpenAPI document: 1.1.1
8
8
  Generated by: https://openapi-generator.tech
9
9
  """
10
10
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
7
7
 
8
- The version of the OpenAPI document: 1.1.0
8
+ The version of the OpenAPI document: 1.1.1
9
9
  Generated by: https://openapi-generator.tech
10
10
  """
11
11
 
@@ -370,7 +370,7 @@ class Configuration(object):
370
370
  return "Python SDK Debug Report:\n"\
371
371
  "OS: {env}\n"\
372
372
  "Python Version: {pyversion}\n"\
373
- "Version of the API: 1.1.0\n"\
373
+ "Version of the API: 1.1.1\n"\
374
374
  "SDK Package Version: 1.0.0".\
375
375
  format(env=sys.platform, pyversion=sys.version)
376
376
 
@@ -5,7 +5,7 @@
5
5
 
6
6
  No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
7
7
 
8
- The version of the OpenAPI document: 1.1.0
8
+ The version of the OpenAPI document: 1.1.1
9
9
  Generated by: https://openapi-generator.tech
10
10
  """
11
11