paasta-tools 1.13.5__tar.gz → 1.14.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {paasta-tools-1.13.5/paasta_tools.egg-info → paasta-tools-1.14.0}/PKG-INFO +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/__init__.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/api.py +20 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/api_docs/swagger.json +255 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/client.py +2 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/instance.py +10 -2
- paasta-tools-1.14.0/paasta_tools/api/views/remote_run.py +107 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/local_run.py +0 -1
- paasta-tools-1.14.0/paasta_tools/cli/cmds/remote_run.py +33 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/spark_run.py +0 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/service_shard_update.py +15 -2
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/frameworks/native_service_config.py +0 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes/application/controller_wrappers.py +52 -1
- paasta-tools-1.14.0/paasta_tools/kubernetes/remote_run.py +397 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes_tools.py +68 -5
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/__init__.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/api/autoscaler_api.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/api/default_api.py +1 -1
- paasta-tools-1.14.0/paasta_tools/paastaapi/api/remote_run_api.py +588 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/api/resources_api.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/api/service_api.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/api_client.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/apis/__init__.py +1 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/configuration.py +2 -2
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/exceptions.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/adhoc_launch_history.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/deploy_queue.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/envoy_backend.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/envoy_location.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/envoy_status.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/flink_cluster_overview.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/flink_config.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/flink_job.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/flink_job_details.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/flink_jobs.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/float_and_error.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/hpa_metric.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/inline_object.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/inline_response200.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/inline_response2001.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_bounce_status.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_mesh_status.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status_adhoc.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status_flink.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_status_tron.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/instance_tasks.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/integer_and_error.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/kubernetes_container.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/kubernetes_pod.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/kubernetes_version.py +1 -1
- paasta-tools-1.14.0/paasta_tools/paastaapi/model/remote_run_outcome.py +186 -0
- paasta-tools-1.14.0/paasta_tools/paastaapi/model/remote_run_start.py +182 -0
- paasta-tools-1.14.0/paasta_tools/paastaapi/model/remote_run_stop.py +173 -0
- paasta-tools-1.14.0/paasta_tools/paastaapi/model/remote_run_token.py +173 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/resource.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/resource_item.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/resource_value.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/smartstack_backend.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/smartstack_location.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/smartstack_status.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/task_tail_lines.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model_utils.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/models/__init__.py +4 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/rest.py +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/spark_tools.py +6 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/tron_tools.py +0 -2
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/utils.py +4 -14
- {paasta-tools-1.13.5 → paasta-tools-1.14.0/paasta_tools.egg-info}/PKG-INFO +1 -1
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools.egg-info/SOURCES.txt +7 -2
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/setup.py +0 -2
- paasta-tools-1.13.5/paasta_tools/cli/cmds/remote_run.py +0 -317
- paasta-tools-1.13.5/paasta_tools/log_task_lifecycle_events.py +0 -247
- paasta-tools-1.13.5/paasta_tools/paasta_remote_run.py +0 -773
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/MANIFEST.in +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/README.md +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/k8s_itests/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/k8s_itests/test_autoscaling.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/k8s_itests/utils.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/adhoc_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/settings.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/tweens/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/tweens/auth.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/tweens/profiling.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/tweens/request_logger.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/autoscaler.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/exception.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/flink.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/pause_autoscaler.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/resources.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/service.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/api/views/version.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/apply_external_resources.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/async_utils.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/autoscaling/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/autoscaling/forecasting.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/autoscaling/utils.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/bounce_lib.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/broadcast_log_to_services.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cassandracluster_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/check_autoscaler_max_instances.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/check_flink_services_health.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/check_kubernetes_api.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/check_kubernetes_services_replication.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/check_oom_events.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/check_services_replication_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/check_spark_jobs.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cleanup_tron_namespaces.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cli.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/autoscale.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/check.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/cook_image.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/get_image_version.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/info.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/itest.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/list.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/list_clusters.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/list_namespaces.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/logs.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/mesh_status.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/rollback.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/secret.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/security_check.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/status.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/validate.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm/autosuggest.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm/template/README.md +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/fsm_cmd.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/autoscaling_schema.json +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/eks_schema.json +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/kubernetes_schema.json +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/service_schema.json +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/smartstack_schema.json +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/schemas/tron_schema.json +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/cli/utils.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/clusterman.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/config_utils.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/check_orphans.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/create_paasta_playground.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/habitat_fixer.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/ide_helper.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/kill_bad_containers.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/mock_patch_checker.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/render_template.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/service_shard_remove.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/shared_ip_check.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/delete_kubernetes_deployments.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/deployment_utils.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/docker_wrapper.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/docker_wrapper_imports.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/drain_lib.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/dump_locally_running_services.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/eks_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/envoy_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/firewall.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/firewall_logging.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/firewall_update.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/flink_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/flinkeks_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/frameworks/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/frameworks/constraints.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/frameworks/native_scheduler.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/frameworks/task_store.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/generate_all_deployments +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/generate_authenticating_services.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/generate_deployments_for_service.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/generate_services_file.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/generate_services_yaml.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/hacheck.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/instance/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/instance/kubernetes.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/iptables.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kafkacluster_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes/application/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes/application/tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes/bin/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/list_kubernetes_service_instances.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/list_tron_namespaces.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/long_running_service_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mac_address.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/marathon_dashboard.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/cfg.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/cluster.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/exceptions.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/framework.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/log.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/master.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/mesos_file.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/parallel.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/slave.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/task.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/util.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos/zookeeper.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos_maintenance.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/mesos_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/metrics/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/metrics/metastatus_lib.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/metrics/metrics_lib.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/monitoring/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/monitoring_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/monkrelaycluster_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/nrtsearchservice_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/oom_logger.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paasta_deploy_tron_jobs +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paasta_execute_docker_command.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paasta_native_serviceinit.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paasta_service_config_loader.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/api/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/paastaapi/model/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/prune_completed_pods.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/puppet_service_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/py.typed +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/remote_git.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/run-paasta-api-playground.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/secret_providers/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/secret_providers/vault.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/secret_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/setup_istio_mesh.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/setup_kubernetes_cr.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/setup_kubernetes_crd.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/setup_kubernetes_job.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/setup_prometheus_adapter_config.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/setup_tron_namespace.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/slack.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/smartstack_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/tron/__init__.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/tron/client.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/tron/tron_command_context.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/tron/tron_timeutils.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/yaml_tools.py +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools.egg-info/dependency_links.txt +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools.egg-info/entry_points.txt +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools.egg-info/requires.txt +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools.egg-info/top_level.txt +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/pyproject.toml +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/requirements-minimal.txt +0 -0
- {paasta-tools-1.13.5 → paasta-tools-1.14.0}/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,33 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright 2015-2017 Yelp Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
import argparse
|
|
16
|
+
|
|
17
|
+
from paasta_tools.utils import PaastaColors
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def add_subparser(subparsers: argparse._SubParsersAction):
|
|
21
|
+
subparsers.add_parser(
|
|
22
|
+
"remote-run",
|
|
23
|
+
help="Schedule adhoc service sandbox on PaaSTA cluster",
|
|
24
|
+
description=(
|
|
25
|
+
"`paasta remote-run` is useful for running adhoc commands in "
|
|
26
|
+
"context of a service's Docker image."
|
|
27
|
+
),
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def paasta_remote_run(args: argparse.Namespace):
|
|
32
|
+
print(PaastaColors.red("Error: functionality under construction"))
|
|
33
|
+
return 1
|
|
@@ -1219,7 +1219,6 @@ def paasta_spark_run(args: argparse.Namespace) -> int:
|
|
|
1219
1219
|
|
|
1220
1220
|
volumes = instance_config.get_volumes(
|
|
1221
1221
|
system_paasta_config.get_volumes(),
|
|
1222
|
-
system_paasta_config.get_uses_bulkdata_default(),
|
|
1223
1222
|
)
|
|
1224
1223
|
app_base_name = get_spark_app_name(args.cmd or instance_config.get_cmd())
|
|
1225
1224
|
|
|
@@ -171,6 +171,13 @@ def parse_args():
|
|
|
171
171
|
type=str,
|
|
172
172
|
dest="iam_role",
|
|
173
173
|
)
|
|
174
|
+
parser.add_argument(
|
|
175
|
+
"--environment",
|
|
176
|
+
help="Environment to deploy in, defaults to all environments if not specified",
|
|
177
|
+
required=False,
|
|
178
|
+
choices=DEPLOY_MAPPINGS.keys(),
|
|
179
|
+
dest="environment",
|
|
180
|
+
)
|
|
174
181
|
return parser.parse_args()
|
|
175
182
|
|
|
176
183
|
|
|
@@ -201,11 +208,17 @@ def main(args):
|
|
|
201
208
|
working_dir=args.local_dir or "/nail/tmp",
|
|
202
209
|
do_clone=args.local_dir is None,
|
|
203
210
|
)
|
|
211
|
+
deploy_environments = (
|
|
212
|
+
{args.environment: DEPLOY_MAPPINGS[args.environment]}
|
|
213
|
+
if args.environment
|
|
214
|
+
else DEPLOY_MAPPINGS
|
|
215
|
+
)
|
|
216
|
+
|
|
204
217
|
with updater:
|
|
205
218
|
deploy_file = updater.get_existing_configs(args.service, "deploy")
|
|
206
219
|
smartstack_file = updater.get_existing_configs(args.service, "smartstack")
|
|
207
220
|
shard_deploy_groups = {
|
|
208
|
-
f"{prefix}.{args.shard_name}" for prefix in
|
|
221
|
+
f"{prefix}.{args.shard_name}" for prefix in deploy_environments.keys()
|
|
209
222
|
}
|
|
210
223
|
pipeline_steps = {step["step"] for step in deploy_file["pipeline"]}
|
|
211
224
|
|
|
@@ -226,7 +239,7 @@ def main(args):
|
|
|
226
239
|
log.info(f"{step} added to deploy config")
|
|
227
240
|
updater.write_configs(args.service, "deploy", deploy_file)
|
|
228
241
|
|
|
229
|
-
for deploy_prefix, config_paths in
|
|
242
|
+
for deploy_prefix, config_paths in deploy_environments.items():
|
|
230
243
|
for config_path in config_paths:
|
|
231
244
|
# Determine configuration suffix (PAASTA-18216)
|
|
232
245
|
eks_config = updater.get_existing_configs(
|
{paasta-tools-1.13.5 → paasta-tools-1.14.0}/paasta_tools/frameworks/native_service_config.py
RENAMED
|
@@ -172,7 +172,6 @@ class NativeServiceConfig(LongRunningServiceConfig):
|
|
|
172
172
|
"""
|
|
173
173
|
docker_volumes = self.get_volumes(
|
|
174
174
|
system_volumes=system_paasta_config.get_volumes(),
|
|
175
|
-
uses_bulkdata_default=system_paasta_config.get_uses_bulkdata_default(),
|
|
176
175
|
)
|
|
177
176
|
task: TaskInfo = {
|
|
178
177
|
"name": "",
|
|
@@ -6,6 +6,7 @@ from typing import Union
|
|
|
6
6
|
|
|
7
7
|
from kubernetes.client import V1DeleteOptions
|
|
8
8
|
from kubernetes.client import V1Deployment
|
|
9
|
+
from kubernetes.client import V1Job
|
|
9
10
|
from kubernetes.client import V1PodDisruptionBudget
|
|
10
11
|
from kubernetes.client import V1StatefulSet
|
|
11
12
|
from kubernetes.client.rest import ApiException
|
|
@@ -13,6 +14,7 @@ from kubernetes.client.rest import ApiException
|
|
|
13
14
|
from paasta_tools.autoscaling.autoscaling_service_lib import autoscaling_is_paused
|
|
14
15
|
from paasta_tools.eks_tools import load_eks_service_config_no_cache
|
|
15
16
|
from paasta_tools.kubernetes_tools import create_deployment
|
|
17
|
+
from paasta_tools.kubernetes_tools import create_job
|
|
16
18
|
from paasta_tools.kubernetes_tools import create_pod_disruption_budget
|
|
17
19
|
from paasta_tools.kubernetes_tools import create_stateful_set
|
|
18
20
|
from paasta_tools.kubernetes_tools import ensure_service_account
|
|
@@ -411,14 +413,63 @@ class StatefulSetWrapper(Application):
|
|
|
411
413
|
)
|
|
412
414
|
|
|
413
415
|
|
|
416
|
+
class JobWrapper(Application):
|
|
417
|
+
def __init__(
|
|
418
|
+
self,
|
|
419
|
+
item: V1Job,
|
|
420
|
+
logging=logging.getLogger(__name__),
|
|
421
|
+
):
|
|
422
|
+
item.spec.replicas = None # avoid causing errors in parent class
|
|
423
|
+
super().__init__(item, logging)
|
|
424
|
+
|
|
425
|
+
def deep_delete(self, kube_client: KubeClient) -> None:
|
|
426
|
+
"""Remove resources related to the job"""
|
|
427
|
+
delete_options = V1DeleteOptions(propagation_policy="Foreground")
|
|
428
|
+
try:
|
|
429
|
+
kube_client.batches.delete_namespaced_job(
|
|
430
|
+
self.item.metadata.name,
|
|
431
|
+
self.item.metadata.namespace,
|
|
432
|
+
body=delete_options,
|
|
433
|
+
)
|
|
434
|
+
except ApiException as e:
|
|
435
|
+
if e.status == 404:
|
|
436
|
+
# Job does not exist, nothing to delete but
|
|
437
|
+
# we can consider this a success.
|
|
438
|
+
self.logging.debug(
|
|
439
|
+
"not deleting nonexistent job/{} from namespace/{}".format(
|
|
440
|
+
self.item.metadata.name,
|
|
441
|
+
self.item.metadata.namespace,
|
|
442
|
+
)
|
|
443
|
+
)
|
|
444
|
+
else:
|
|
445
|
+
raise
|
|
446
|
+
else:
|
|
447
|
+
self.logging.info(
|
|
448
|
+
"deleted job/{} from namespace/{}".format(
|
|
449
|
+
self.item.metadata.name,
|
|
450
|
+
self.item.metadata.namespace,
|
|
451
|
+
)
|
|
452
|
+
)
|
|
453
|
+
|
|
454
|
+
def create(self, kube_client: KubeClient):
|
|
455
|
+
"""Create and start Kubernetes Job"""
|
|
456
|
+
create_job(
|
|
457
|
+
kube_client=kube_client,
|
|
458
|
+
formatted_job=self.item,
|
|
459
|
+
namespace=self.soa_config.get_namespace(),
|
|
460
|
+
)
|
|
461
|
+
|
|
462
|
+
|
|
414
463
|
def get_application_wrapper(
|
|
415
|
-
formatted_application: Union[V1Deployment, V1StatefulSet]
|
|
464
|
+
formatted_application: Union[V1Deployment, V1StatefulSet, V1Job]
|
|
416
465
|
) -> Application:
|
|
417
466
|
app: Application
|
|
418
467
|
if isinstance(formatted_application, V1Deployment):
|
|
419
468
|
app = DeploymentWrapper(formatted_application)
|
|
420
469
|
elif isinstance(formatted_application, V1StatefulSet):
|
|
421
470
|
app = StatefulSetWrapper(formatted_application)
|
|
471
|
+
elif isinstance(formatted_application, V1Job):
|
|
472
|
+
app = JobWrapper(formatted_application)
|
|
422
473
|
else:
|
|
423
474
|
raise Exception("Unknown kubernetes object to update")
|
|
424
475
|
|