paasta-tools 1.13.6__tar.gz → 1.14.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {paasta-tools-1.13.6/paasta_tools.egg-info → paasta-tools-1.14.1}/PKG-INFO +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/__init__.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/api.py +20 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/api_docs/swagger.json +255 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/client.py +2 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/instance.py +10 -2
- paasta-tools-1.14.1/paasta_tools/api/views/remote_run.py +107 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/local_run.py +0 -1
- paasta-tools-1.14.1/paasta_tools/cli/cmds/remote_run.py +205 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/spark_run.py +0 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/utils.py +15 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/service_shard_update.py +15 -2
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/frameworks/native_service_config.py +0 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes/application/controller_wrappers.py +52 -1
- paasta-tools-1.14.1/paasta_tools/kubernetes/bin/paasta_cleanup_remote_run_resources.py +83 -0
- paasta-tools-1.14.1/paasta_tools/kubernetes/remote_run.py +441 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes_tools.py +68 -5
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/__init__.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api/autoscaler_api.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api/default_api.py +1 -1
- paasta-tools-1.14.1/paasta_tools/paastaapi/api/remote_run_api.py +588 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api/resources_api.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api/service_api.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api_client.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/apis/__init__.py +1 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/configuration.py +2 -2
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/exceptions.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/adhoc_launch_history.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/deploy_queue.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/envoy_backend.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/envoy_location.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/envoy_status.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/flink_cluster_overview.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/flink_config.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/flink_job.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/flink_job_details.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/flink_jobs.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/float_and_error.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/hpa_metric.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/inline_object.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/inline_response200.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/inline_response2001.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_bounce_status.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_mesh_status.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_adhoc.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_flink.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_tron.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_tasks.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/integer_and_error.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_container.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_pod.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_version.py +1 -1
- paasta-tools-1.14.1/paasta_tools/paastaapi/model/remote_run_outcome.py +186 -0
- paasta-tools-1.14.1/paasta_tools/paastaapi/model/remote_run_start.py +182 -0
- paasta-tools-1.14.1/paasta_tools/paastaapi/model/remote_run_stop.py +173 -0
- paasta-tools-1.14.1/paasta_tools/paastaapi/model/remote_run_token.py +173 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/resource.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/resource_item.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/resource_value.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/smartstack_backend.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/smartstack_location.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/smartstack_status.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/task_tail_lines.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model_utils.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/models/__init__.py +4 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/rest.py +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/tron_tools.py +0 -2
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/utils.py +4 -14
- {paasta-tools-1.13.6 → paasta-tools-1.14.1/paasta_tools.egg-info}/PKG-INFO +1 -1
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools.egg-info/SOURCES.txt +8 -2
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/setup.py +1 -2
- paasta-tools-1.13.6/paasta_tools/cli/cmds/remote_run.py +0 -317
- paasta-tools-1.13.6/paasta_tools/log_task_lifecycle_events.py +0 -247
- paasta-tools-1.13.6/paasta_tools/paasta_remote_run.py +0 -773
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/MANIFEST.in +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/README.md +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/k8s_itests/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/k8s_itests/test_autoscaling.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/k8s_itests/utils.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/adhoc_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/settings.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/tweens/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/tweens/auth.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/tweens/profiling.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/tweens/request_logger.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/autoscaler.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/exception.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/flink.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/pause_autoscaler.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/resources.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/service.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/api/views/version.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/apply_external_resources.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/async_utils.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/autoscaling/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/autoscaling/forecasting.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/autoscaling/utils.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/bounce_lib.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/broadcast_log_to_services.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cassandracluster_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/check_autoscaler_max_instances.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/check_flink_services_health.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/check_kubernetes_api.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/check_kubernetes_services_replication.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/check_oom_events.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/check_services_replication_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/check_spark_jobs.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cleanup_tron_namespaces.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cli.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/autoscale.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/check.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/cook_image.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/get_image_version.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/info.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/itest.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/list.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/list_clusters.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/list_namespaces.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/logs.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/mesh_status.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/rollback.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/secret.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/security_check.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/status.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/validate.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/autosuggest.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/README.md +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/fsm_cmd.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/autoscaling_schema.json +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/eks_schema.json +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/kubernetes_schema.json +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/service_schema.json +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/smartstack_schema.json +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/tron_schema.json +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/clusterman.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/config_utils.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/check_orphans.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/create_paasta_playground.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/habitat_fixer.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/ide_helper.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/kill_bad_containers.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/mock_patch_checker.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/render_template.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/service_shard_remove.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/shared_ip_check.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/delete_kubernetes_deployments.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/deployment_utils.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/docker_wrapper.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/docker_wrapper_imports.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/drain_lib.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/dump_locally_running_services.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/eks_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/envoy_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/firewall.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/firewall_logging.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/firewall_update.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/flink_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/flinkeks_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/frameworks/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/frameworks/constraints.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/frameworks/native_scheduler.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/frameworks/task_store.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/generate_all_deployments +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/generate_authenticating_services.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/generate_deployments_for_service.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/generate_services_file.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/generate_services_yaml.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/hacheck.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/instance/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/instance/kubernetes.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/iptables.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kafkacluster_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes/application/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes/application/tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes/bin/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/list_kubernetes_service_instances.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/list_tron_namespaces.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/long_running_service_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mac_address.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/marathon_dashboard.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/cfg.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/cluster.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/exceptions.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/framework.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/log.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/master.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/mesos_file.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/parallel.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/slave.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/task.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/util.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos/zookeeper.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos_maintenance.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/mesos_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/metrics/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/metrics/metastatus_lib.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/metrics/metrics_lib.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/monitoring/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/monitoring_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/monkrelaycluster_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/nrtsearchservice_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/oom_logger.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paasta_deploy_tron_jobs +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paasta_execute_docker_command.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paasta_native_serviceinit.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paasta_service_config_loader.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/prune_completed_pods.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/puppet_service_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/py.typed +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/remote_git.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/run-paasta-api-playground.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/secret_providers/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/secret_providers/vault.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/secret_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/setup_istio_mesh.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/setup_kubernetes_cr.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/setup_kubernetes_crd.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/setup_kubernetes_job.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/setup_prometheus_adapter_config.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/setup_tron_namespace.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/slack.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/smartstack_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/spark_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/tron/__init__.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/tron/client.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/tron/tron_command_context.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/tron/tron_timeutils.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools/yaml_tools.py +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools.egg-info/dependency_links.txt +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools.egg-info/entry_points.txt +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools.egg-info/requires.txt +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/paasta_tools.egg-info/top_level.txt +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/pyproject.toml +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/requirements-minimal.txt +0 -0
- {paasta-tools-1.13.6 → paasta-tools-1.14.1}/setup.cfg +0 -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.
|
|
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 =
|
|
109
|
+
filtered = legacy_remote_run_filter_frameworks(service, instance)
|
|
102
110
|
filtered.sort(key=lambda x: x.name)
|
|
103
111
|
for f in filtered:
|
|
104
112
|
launch_time, run_id = re.match(
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Copyright 2015-2016 Yelp Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
import traceback
|
|
15
|
+
|
|
16
|
+
from pyramid.view import view_config
|
|
17
|
+
|
|
18
|
+
from paasta_tools.api import settings
|
|
19
|
+
from paasta_tools.api.views.exception import ApiFailure
|
|
20
|
+
from paasta_tools.kubernetes.remote_run import remote_run_ready
|
|
21
|
+
from paasta_tools.kubernetes.remote_run import remote_run_start
|
|
22
|
+
from paasta_tools.kubernetes.remote_run import remote_run_stop
|
|
23
|
+
from paasta_tools.kubernetes.remote_run import remote_run_token
|
|
24
|
+
from paasta_tools.utils import load_system_paasta_config
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
DEFAULT_MAX_DURATION = 60 * 60 # 1 hour
|
|
28
|
+
DEFAULT_MAX_DURATION_LIMIT = 8 * 60 * 60 # 8 hours
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
@view_config(route_name="remote_run.start", request_method="POST", renderer="json")
|
|
32
|
+
def view_remote_run_start(request):
|
|
33
|
+
system_config = load_system_paasta_config()
|
|
34
|
+
service = request.swagger_data["service"]
|
|
35
|
+
instance = request.swagger_data["instance"]
|
|
36
|
+
user = request.swagger_data["json_body"]["user"]
|
|
37
|
+
interactive = request.swagger_data["json_body"].get("interactive", True)
|
|
38
|
+
recreate = request.swagger_data["json_body"].get("recreate", False)
|
|
39
|
+
max_duration = min(
|
|
40
|
+
request.swagger_data["json_body"].get("max_duration", DEFAULT_MAX_DURATION),
|
|
41
|
+
system_config.get_remote_run_duration_limit(DEFAULT_MAX_DURATION_LIMIT),
|
|
42
|
+
)
|
|
43
|
+
try:
|
|
44
|
+
return remote_run_start(
|
|
45
|
+
service=service,
|
|
46
|
+
instance=instance,
|
|
47
|
+
cluster=settings.cluster,
|
|
48
|
+
user=user,
|
|
49
|
+
interactive=interactive,
|
|
50
|
+
recreate=recreate,
|
|
51
|
+
max_duration=max_duration,
|
|
52
|
+
)
|
|
53
|
+
except Exception:
|
|
54
|
+
error_message = traceback.format_exc()
|
|
55
|
+
raise ApiFailure(error_message, 500)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@view_config(route_name="remote_run.poll", request_method="GET", renderer="json")
|
|
59
|
+
def view_remote_run_poll(request):
|
|
60
|
+
service = request.swagger_data["service"]
|
|
61
|
+
instance = request.swagger_data["instance"]
|
|
62
|
+
job_name = request.swagger_data["job_name"]
|
|
63
|
+
try:
|
|
64
|
+
return remote_run_ready(
|
|
65
|
+
service=service,
|
|
66
|
+
instance=instance,
|
|
67
|
+
cluster=settings.cluster,
|
|
68
|
+
job_name=job_name,
|
|
69
|
+
)
|
|
70
|
+
except Exception:
|
|
71
|
+
error_message = traceback.format_exc()
|
|
72
|
+
raise ApiFailure(error_message, 500)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
@view_config(route_name="remote_run.stop", request_method="POST", renderer="json")
|
|
76
|
+
def view_remote_run_stop(request):
|
|
77
|
+
service = request.swagger_data["service"]
|
|
78
|
+
instance = request.swagger_data["instance"]
|
|
79
|
+
user = request.swagger_data["json_body"]["user"]
|
|
80
|
+
try:
|
|
81
|
+
return remote_run_stop(
|
|
82
|
+
service=service,
|
|
83
|
+
instance=instance,
|
|
84
|
+
cluster=settings.cluster,
|
|
85
|
+
user=user,
|
|
86
|
+
)
|
|
87
|
+
except Exception:
|
|
88
|
+
error_message = traceback.format_exc()
|
|
89
|
+
raise ApiFailure(error_message, 500)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@view_config(route_name="remote_run.token", request_method="GET", renderer="json")
|
|
93
|
+
def view_remote_run_token(request):
|
|
94
|
+
service = request.swagger_data["service"]
|
|
95
|
+
instance = request.swagger_data["instance"]
|
|
96
|
+
user = request.swagger_data["user"]
|
|
97
|
+
try:
|
|
98
|
+
token = remote_run_token(
|
|
99
|
+
service=service,
|
|
100
|
+
instance=instance,
|
|
101
|
+
cluster=settings.cluster,
|
|
102
|
+
user=user,
|
|
103
|
+
)
|
|
104
|
+
return {"token": token}
|
|
105
|
+
except Exception:
|
|
106
|
+
error_message = traceback.format_exc()
|
|
107
|
+
raise ApiFailure(error_message, 500)
|
|
@@ -1227,7 +1227,6 @@ def configure_and_run_docker_container(
|
|
|
1227
1227
|
|
|
1228
1228
|
for volume in instance_config.get_volumes(
|
|
1229
1229
|
system_paasta_config.get_volumes(),
|
|
1230
|
-
system_paasta_config.get_uses_bulkdata_default(),
|
|
1231
1230
|
):
|
|
1232
1231
|
if os.path.exists(volume["hostPath"]):
|
|
1233
1232
|
volumes.append(
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright 2015-2017 Yelp Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
import argparse
|
|
16
|
+
import pty
|
|
17
|
+
import shlex
|
|
18
|
+
import time
|
|
19
|
+
|
|
20
|
+
from paasta_tools.cli.utils import get_paasta_oapi_api_clustername
|
|
21
|
+
from paasta_tools.cli.utils import get_paasta_oapi_client_with_auth
|
|
22
|
+
from paasta_tools.cli.utils import lazy_choices_completer
|
|
23
|
+
from paasta_tools.paastaapi.model.remote_run_start import RemoteRunStart
|
|
24
|
+
from paasta_tools.paastaapi.model.remote_run_stop import RemoteRunStop
|
|
25
|
+
from paasta_tools.utils import get_username
|
|
26
|
+
from paasta_tools.utils import list_clusters
|
|
27
|
+
from paasta_tools.utils import list_services
|
|
28
|
+
from paasta_tools.utils import load_system_paasta_config
|
|
29
|
+
from paasta_tools.utils import SystemPaastaConfig
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
KUBECTL_CMD_TEMPLATE = (
|
|
33
|
+
"kubectl-eks-{cluster} --token {token} exec -it -n {namespace} {pod} -- /bin/bash"
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def paasta_remote_run_start(
|
|
38
|
+
args: argparse.Namespace,
|
|
39
|
+
system_paasta_config: SystemPaastaConfig,
|
|
40
|
+
) -> int:
|
|
41
|
+
client = get_paasta_oapi_client_with_auth(
|
|
42
|
+
cluster=get_paasta_oapi_api_clustername(cluster=args.cluster, is_eks=True),
|
|
43
|
+
system_paasta_config=system_paasta_config,
|
|
44
|
+
)
|
|
45
|
+
if not client:
|
|
46
|
+
print("Cannot get a paasta-api client")
|
|
47
|
+
return 1
|
|
48
|
+
|
|
49
|
+
user = get_username()
|
|
50
|
+
start_response = client.remote_run.remote_run_start(
|
|
51
|
+
args.service,
|
|
52
|
+
args.instance,
|
|
53
|
+
RemoteRunStart(
|
|
54
|
+
user=user,
|
|
55
|
+
interactive=args.interactive,
|
|
56
|
+
recreate=args.recreate,
|
|
57
|
+
max_duration=args.max_duration,
|
|
58
|
+
),
|
|
59
|
+
)
|
|
60
|
+
if start_response.status >= 300:
|
|
61
|
+
print(f"Error from PaaSTA APIs while starting job: {start_response.message}")
|
|
62
|
+
return 1
|
|
63
|
+
|
|
64
|
+
start_time = time.time()
|
|
65
|
+
while time.time() - start_time < args.timeout:
|
|
66
|
+
poll_response = client.remote_run.remote_run_poll(
|
|
67
|
+
args.service,
|
|
68
|
+
args.instance,
|
|
69
|
+
start_response.job_name,
|
|
70
|
+
)
|
|
71
|
+
if poll_response.status == 200:
|
|
72
|
+
break
|
|
73
|
+
time.sleep(10)
|
|
74
|
+
else:
|
|
75
|
+
print("Timed out while waiting for job to start")
|
|
76
|
+
return 1
|
|
77
|
+
|
|
78
|
+
if not args.interactive:
|
|
79
|
+
print("Successfully started remote-run job")
|
|
80
|
+
return 0
|
|
81
|
+
|
|
82
|
+
token_response = client.remote_run.remote_run_token(
|
|
83
|
+
args.service, args.instance, user
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
exec_command = KUBECTL_CMD_TEMPLATE.format(
|
|
87
|
+
cluster=args.cluster,
|
|
88
|
+
namespace=poll_response.namespace,
|
|
89
|
+
pod=poll_response.pod_name,
|
|
90
|
+
token=token_response.token,
|
|
91
|
+
)
|
|
92
|
+
pty.spawn(shlex.split(exec_command))
|
|
93
|
+
return 0
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def paasta_remote_run_stop(
|
|
97
|
+
args: argparse.Namespace,
|
|
98
|
+
system_paasta_config: SystemPaastaConfig,
|
|
99
|
+
) -> int:
|
|
100
|
+
client = get_paasta_oapi_client_with_auth(
|
|
101
|
+
cluster=get_paasta_oapi_api_clustername(cluster=args.cluster, is_eks=True),
|
|
102
|
+
system_paasta_config=system_paasta_config,
|
|
103
|
+
)
|
|
104
|
+
if not client:
|
|
105
|
+
print("Cannot get a paasta-api client")
|
|
106
|
+
return 1
|
|
107
|
+
response = client.remote_run.remote_run_stop(
|
|
108
|
+
args.service, args.instance, RemoteRunStop(user=get_username())
|
|
109
|
+
)
|
|
110
|
+
print(response.message)
|
|
111
|
+
return 0 if response.status < 300 else 1
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def add_common_args_to_parser(parser: argparse.ArgumentParser):
|
|
115
|
+
service_arg = parser.add_argument(
|
|
116
|
+
"-s",
|
|
117
|
+
"--service",
|
|
118
|
+
help="The name of the service you wish to inspect. Required.",
|
|
119
|
+
required=True,
|
|
120
|
+
)
|
|
121
|
+
service_arg.completer = lazy_choices_completer(list_services) # type: ignore
|
|
122
|
+
parser.add_argument(
|
|
123
|
+
"-i",
|
|
124
|
+
"--instance",
|
|
125
|
+
help=(
|
|
126
|
+
"Simulate a docker run for a particular instance of the "
|
|
127
|
+
"service, like 'main' or 'canary'. Required."
|
|
128
|
+
),
|
|
129
|
+
required=True,
|
|
130
|
+
)
|
|
131
|
+
cluster_arg = parser.add_argument(
|
|
132
|
+
"-c",
|
|
133
|
+
"--cluster",
|
|
134
|
+
help="The name of the cluster you wish to run your task on. Required.",
|
|
135
|
+
required=True,
|
|
136
|
+
)
|
|
137
|
+
cluster_arg.completer = lazy_choices_completer(list_clusters) # type: ignore
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def add_subparser(subparsers: argparse._SubParsersAction) -> None:
|
|
141
|
+
remote_run_parser = subparsers.add_parser(
|
|
142
|
+
"remote-run",
|
|
143
|
+
help="Run services / jobs remotely",
|
|
144
|
+
description="'paasta remote-run' runs services / jobs remotely",
|
|
145
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
146
|
+
)
|
|
147
|
+
subparsers = remote_run_parser.add_subparsers(dest="remote_run_command")
|
|
148
|
+
start_parser = subparsers.add_parser(
|
|
149
|
+
"start",
|
|
150
|
+
help="Start or connect to a remote-run job",
|
|
151
|
+
description="Starts or connects to a remote-run-job",
|
|
152
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
153
|
+
)
|
|
154
|
+
start_parser.add_argument(
|
|
155
|
+
"-I",
|
|
156
|
+
"--interactive",
|
|
157
|
+
help=(
|
|
158
|
+
"Run container in interactive mode. If interactive is set the "
|
|
159
|
+
'default command will be "bash" unless otherwise set by the "--cmd" flag'
|
|
160
|
+
),
|
|
161
|
+
action="store_true",
|
|
162
|
+
default=False,
|
|
163
|
+
)
|
|
164
|
+
start_parser.add_argument(
|
|
165
|
+
"-m",
|
|
166
|
+
"--max-duration",
|
|
167
|
+
help=(
|
|
168
|
+
"Amount of time in seconds after which the job is "
|
|
169
|
+
"automatically stopped (capped by the API backend)"
|
|
170
|
+
),
|
|
171
|
+
type=int,
|
|
172
|
+
default=1800,
|
|
173
|
+
)
|
|
174
|
+
start_parser.add_argument(
|
|
175
|
+
"-r",
|
|
176
|
+
"--recreate",
|
|
177
|
+
help="Recreate remote-run job if already existing",
|
|
178
|
+
action="store_true",
|
|
179
|
+
default=False,
|
|
180
|
+
)
|
|
181
|
+
start_parser.add_argument(
|
|
182
|
+
"-t",
|
|
183
|
+
"--timeout",
|
|
184
|
+
help="Maximum time to wait for a job to start, in seconds",
|
|
185
|
+
type=int,
|
|
186
|
+
default=600,
|
|
187
|
+
)
|
|
188
|
+
stop_parser = subparsers.add_parser(
|
|
189
|
+
"stop",
|
|
190
|
+
help="Stop your remote-run job if it exists",
|
|
191
|
+
description="Stop your remote-run job if it exists",
|
|
192
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
193
|
+
)
|
|
194
|
+
add_common_args_to_parser(start_parser)
|
|
195
|
+
add_common_args_to_parser(stop_parser)
|
|
196
|
+
remote_run_parser.set_defaults(command=paasta_remote_run)
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
def paasta_remote_run(args: argparse.Namespace) -> int:
|
|
200
|
+
system_paasta_config = load_system_paasta_config()
|
|
201
|
+
if args.remote_run_command == "start":
|
|
202
|
+
return paasta_remote_run_start(args, system_paasta_config)
|
|
203
|
+
elif args.remote_run_command == "stop":
|
|
204
|
+
return paasta_remote_run_stop(args, system_paasta_config)
|
|
205
|
+
raise ValueError(f"Unsupported subcommand: {args.remote_run_command}")
|