paasta-tools 1.14.0__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.14.0/paasta_tools.egg-info → paasta-tools-1.14.1}/PKG-INFO +1 -1
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/__init__.py +1 -1
- paasta-tools-1.14.1/paasta_tools/cli/cmds/remote_run.py +205 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/utils.py +15 -0
- paasta-tools-1.14.1/paasta_tools/kubernetes/bin/paasta_cleanup_remote_run_resources.py +83 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/kubernetes/remote_run.py +51 -7
- {paasta-tools-1.14.0 → paasta-tools-1.14.1/paasta_tools.egg-info}/PKG-INFO +1 -1
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools.egg-info/SOURCES.txt +1 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/setup.py +1 -0
- paasta-tools-1.14.0/paasta_tools/cli/cmds/remote_run.py +0 -33
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/MANIFEST.in +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/README.md +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/k8s_itests/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/k8s_itests/test_autoscaling.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/k8s_itests/utils.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/adhoc_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/api.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/api_docs/swagger.json +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/client.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/settings.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/tweens/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/tweens/auth.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/tweens/profiling.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/tweens/request_logger.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/views/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/views/autoscaler.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/views/exception.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/views/flink.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/views/instance.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/views/pause_autoscaler.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/views/remote_run.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/views/resources.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/views/service.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/api/views/version.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/apply_external_resources.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/async_utils.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/autoscaling/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/autoscaling/forecasting.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/autoscaling/utils.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/bounce_lib.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/broadcast_log_to_services.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cassandracluster_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/check_autoscaler_max_instances.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/check_flink_services_health.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/check_kubernetes_api.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/check_kubernetes_services_replication.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/check_oom_events.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/check_services_replication_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/check_spark_jobs.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cleanup_tron_namespaces.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cli.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/autoscale.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/check.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/cook_image.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/get_image_version.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/info.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/itest.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/list.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/list_clusters.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/list_namespaces.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/local_run.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/logs.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/mesh_status.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/rollback.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/secret.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/security_check.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/spark_run.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/status.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/validate.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/autosuggest.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/README.md +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/fsm_cmd.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/autoscaling_schema.json +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/eks_schema.json +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/kubernetes_schema.json +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/service_schema.json +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/smartstack_schema.json +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/cli/schemas/tron_schema.json +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/clusterman.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/config_utils.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/check_orphans.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/create_paasta_playground.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/habitat_fixer.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/ide_helper.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/kill_bad_containers.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/mock_patch_checker.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/render_template.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/service_shard_remove.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/service_shard_update.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/shared_ip_check.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/delete_kubernetes_deployments.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/deployment_utils.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/docker_wrapper.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/docker_wrapper_imports.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/drain_lib.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/dump_locally_running_services.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/eks_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/envoy_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/firewall.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/firewall_logging.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/firewall_update.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/flink_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/flinkeks_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/frameworks/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/frameworks/constraints.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/frameworks/native_scheduler.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/frameworks/native_service_config.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/frameworks/task_store.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/generate_all_deployments +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/generate_authenticating_services.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/generate_deployments_for_service.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/generate_services_file.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/generate_services_yaml.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/hacheck.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/instance/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/instance/kubernetes.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/iptables.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/kafkacluster_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/kubernetes/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/kubernetes/application/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/kubernetes/application/controller_wrappers.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/kubernetes/application/tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/kubernetes/bin/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/kubernetes_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/list_kubernetes_service_instances.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/list_tron_namespaces.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/long_running_service_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/mac_address.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/marathon_dashboard.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/mesos/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/mesos/cfg.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/mesos/cluster.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/mesos/exceptions.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/mesos/framework.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/mesos/log.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/mesos/master.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/mesos/mesos_file.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/mesos/parallel.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/mesos/slave.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/mesos/task.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/mesos/util.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/mesos/zookeeper.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/mesos_maintenance.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/mesos_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/metrics/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/metrics/metastatus_lib.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/metrics/metrics_lib.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/monitoring/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/monitoring_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/monkrelaycluster_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/nrtsearchservice_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/oom_logger.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paasta_deploy_tron_jobs +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paasta_execute_docker_command.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paasta_native_serviceinit.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paasta_service_config_loader.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api/autoscaler_api.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api/default_api.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api/remote_run_api.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api/resources_api.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api/service_api.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/api_client.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/apis/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/configuration.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/exceptions.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/adhoc_launch_history.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/deploy_queue.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/envoy_backend.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/envoy_location.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/envoy_status.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/flink_cluster_overview.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/flink_config.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/flink_job.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/flink_job_details.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/flink_jobs.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/float_and_error.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/hpa_metric.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/inline_object.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/inline_response200.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/inline_response2001.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_bounce_status.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_mesh_status.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_adhoc.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_flink.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_status_tron.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/instance_tasks.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/integer_and_error.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_container.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_pod.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/kubernetes_version.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/remote_run_outcome.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/remote_run_start.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/remote_run_stop.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/remote_run_token.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/resource.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/resource_item.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/resource_value.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/smartstack_backend.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/smartstack_location.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/smartstack_status.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model/task_tail_lines.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/model_utils.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/models/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/paastaapi/rest.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/prune_completed_pods.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/puppet_service_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/py.typed +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/remote_git.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/run-paasta-api-playground.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/secret_providers/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/secret_providers/vault.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/secret_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/setup_istio_mesh.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/setup_kubernetes_cr.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/setup_kubernetes_crd.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/setup_kubernetes_job.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/setup_prometheus_adapter_config.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/setup_tron_namespace.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/slack.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/smartstack_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/spark_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/tron/__init__.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/tron/client.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/tron/tron_command_context.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/tron/tron_timeutils.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/tron_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/utils.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/yaml_tools.py +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools.egg-info/dependency_links.txt +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools.egg-info/entry_points.txt +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools.egg-info/requires.txt +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools.egg-info/top_level.txt +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/pyproject.toml +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/requirements-minimal.txt +0 -0
- {paasta-tools-1.14.0 → paasta-tools-1.14.1}/setup.cfg +0 -0
|
@@ -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}")
|
|
@@ -43,6 +43,8 @@ from mypy_extensions import NamedArg
|
|
|
43
43
|
|
|
44
44
|
from paasta_tools import remote_git
|
|
45
45
|
from paasta_tools.adhoc_tools import load_adhoc_job_config
|
|
46
|
+
from paasta_tools.api.client import get_paasta_oapi_client
|
|
47
|
+
from paasta_tools.api.client import PaastaOApiClient
|
|
46
48
|
from paasta_tools.cassandracluster_tools import load_cassandracluster_instance_config
|
|
47
49
|
from paasta_tools.eks_tools import EksDeploymentConfig
|
|
48
50
|
from paasta_tools.eks_tools import load_eks_service_config
|
|
@@ -1135,3 +1137,16 @@ def get_sso_service_auth_token() -> str:
|
|
|
1135
1137
|
"""Generate an authentication token for the calling user from the Single Sign On provider"""
|
|
1136
1138
|
client_id = load_system_paasta_config().get_service_auth_sso_oidc_client_id()
|
|
1137
1139
|
return get_and_cache_jwt_default(client_id)
|
|
1140
|
+
|
|
1141
|
+
|
|
1142
|
+
def get_paasta_oapi_client_with_auth(
|
|
1143
|
+
cluster: str = None,
|
|
1144
|
+
system_paasta_config: SystemPaastaConfig = None,
|
|
1145
|
+
http_res: bool = False,
|
|
1146
|
+
) -> Optional[PaastaOApiClient]:
|
|
1147
|
+
return get_paasta_oapi_client(
|
|
1148
|
+
cluster=cluster,
|
|
1149
|
+
system_paasta_config=system_paasta_config,
|
|
1150
|
+
http_res=http_res,
|
|
1151
|
+
auth_token=get_sso_service_auth_token(),
|
|
1152
|
+
)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright 2015-2019 Yelp Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
import argparse
|
|
16
|
+
from datetime import datetime
|
|
17
|
+
from datetime import timedelta
|
|
18
|
+
from datetime import timezone
|
|
19
|
+
from typing import Any
|
|
20
|
+
from typing import Callable
|
|
21
|
+
from typing import Sequence
|
|
22
|
+
from typing import Tuple
|
|
23
|
+
|
|
24
|
+
from paasta_tools.kubernetes.remote_run import get_remote_run_role_bindings
|
|
25
|
+
from paasta_tools.kubernetes.remote_run import get_remote_run_roles
|
|
26
|
+
from paasta_tools.kubernetes.remote_run import get_remote_run_service_accounts
|
|
27
|
+
from paasta_tools.kubernetes_tools import get_all_managed_namespaces
|
|
28
|
+
from paasta_tools.kubernetes_tools import KubeClient
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
ListingFuncType = Callable[[KubeClient, str], Sequence[Any]]
|
|
32
|
+
DeletionFuncType = Callable[[str, str], Any]
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def clean_namespace(kube_client: KubeClient, namespace: str, age_limit: datetime):
|
|
36
|
+
"""Clean ephemeral remote-run resource in a namespace
|
|
37
|
+
|
|
38
|
+
:param KubeClient kube_client: kubernetes client
|
|
39
|
+
:param str namepsace: kubernetes namespace
|
|
40
|
+
:param datetime age_limit: expiration time for resources
|
|
41
|
+
"""
|
|
42
|
+
cleanup_actions: Sequence[Tuple[DeletionFuncType, ListingFuncType]] = (
|
|
43
|
+
(
|
|
44
|
+
kube_client.core.delete_namespaced_service_account,
|
|
45
|
+
get_remote_run_service_accounts,
|
|
46
|
+
),
|
|
47
|
+
(kube_client.rbac.delete_namespaced_role, get_remote_run_roles),
|
|
48
|
+
(kube_client.rbac.delete_namespaced_role_binding, get_remote_run_role_bindings),
|
|
49
|
+
)
|
|
50
|
+
for delete_func, list_func in cleanup_actions:
|
|
51
|
+
for entity in list_func(kube_client, namespace):
|
|
52
|
+
if (
|
|
53
|
+
not entity.metadata.name.startswith("remote-run-")
|
|
54
|
+
or entity.metadata.creation_timestamp > age_limit
|
|
55
|
+
):
|
|
56
|
+
continue
|
|
57
|
+
delete_func(entity.metadata.name, namespace)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
def parse_args() -> argparse.Namespace:
|
|
61
|
+
parser = argparse.ArgumentParser(
|
|
62
|
+
description="Clean ephemeral Kubernetes resources created by remote-run invocations",
|
|
63
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
|
|
64
|
+
)
|
|
65
|
+
parser.add_argument(
|
|
66
|
+
"--max-age",
|
|
67
|
+
type=int,
|
|
68
|
+
default=600,
|
|
69
|
+
help="Maximum age, in seconds, resources are allowed to have",
|
|
70
|
+
)
|
|
71
|
+
return parser.parse_args()
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def main():
|
|
75
|
+
args = parse_args()
|
|
76
|
+
kube_client = KubeClient()
|
|
77
|
+
age_limit = datetime.now(tzinfo=timezone.utc) - timedelta(seconds=args.max_age)
|
|
78
|
+
for namespace in get_all_managed_namespaces(kube_client):
|
|
79
|
+
clean_namespace(kube_client, namespace, age_limit)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
if __name__ == "__main__":
|
|
83
|
+
main()
|
|
@@ -14,7 +14,9 @@
|
|
|
14
14
|
import hashlib
|
|
15
15
|
import logging
|
|
16
16
|
from time import sleep
|
|
17
|
+
from typing import List
|
|
17
18
|
from typing import Optional
|
|
19
|
+
from typing import Sequence
|
|
18
20
|
from typing import TypedDict
|
|
19
21
|
|
|
20
22
|
from kubernetes.client import AuthenticationV1TokenRequest
|
|
@@ -236,7 +238,7 @@ def remote_run_token(
|
|
|
236
238
|
kube_client, namespace, pod_name, user
|
|
237
239
|
)
|
|
238
240
|
role = create_pod_scoped_role(kube_client, namespace, pod_name, user)
|
|
239
|
-
bind_role_to_service_account(kube_client, namespace, service_account, role)
|
|
241
|
+
bind_role_to_service_account(kube_client, namespace, service_account, role, user)
|
|
240
242
|
return create_temp_exec_token(kube_client, namespace, service_account)
|
|
241
243
|
|
|
242
244
|
|
|
@@ -293,6 +295,23 @@ def create_temp_exec_token(
|
|
|
293
295
|
return response.status.token
|
|
294
296
|
|
|
295
297
|
|
|
298
|
+
def get_remote_run_service_accounts(
|
|
299
|
+
kube_client: KubeClient, namespace: str, user: str = ""
|
|
300
|
+
) -> Sequence[V1ServiceAccount]:
|
|
301
|
+
"""List all temporary service account related to remote-run
|
|
302
|
+
|
|
303
|
+
:param KubeClient kube_client: Kubernetes client
|
|
304
|
+
:param str namespace: pod namespace
|
|
305
|
+
:param str user: optionally filter by owning user
|
|
306
|
+
:return: list of service accounts
|
|
307
|
+
"""
|
|
308
|
+
return get_all_service_accounts(
|
|
309
|
+
kube_client,
|
|
310
|
+
namespace=namespace,
|
|
311
|
+
label_selector=(f"{POD_OWNER_LABEL}={user}" if user else POD_OWNER_LABEL),
|
|
312
|
+
)
|
|
313
|
+
|
|
314
|
+
|
|
296
315
|
def create_remote_run_service_account(
|
|
297
316
|
kube_client: KubeClient,
|
|
298
317
|
namespace: str,
|
|
@@ -308,11 +327,7 @@ def create_remote_run_service_account(
|
|
|
308
327
|
"""
|
|
309
328
|
pod_name_hash = hashlib.sha1(pod_name.encode("utf-8")).hexdigest()[:12]
|
|
310
329
|
service_account_name = limit_size_with_hash(f"remote-run-{user}-{pod_name_hash}")
|
|
311
|
-
service_accounts =
|
|
312
|
-
kube_client,
|
|
313
|
-
namespace=namespace,
|
|
314
|
-
label_selector=f"{POD_OWNER_LABEL}={user}",
|
|
315
|
-
)
|
|
330
|
+
service_accounts = get_remote_run_service_accounts(kube_client, namespace, user)
|
|
316
331
|
if any(item.metadata.name == service_account_name for item in service_accounts):
|
|
317
332
|
return service_account_name
|
|
318
333
|
service_account = V1ServiceAccount(
|
|
@@ -366,6 +381,7 @@ def bind_role_to_service_account(
|
|
|
366
381
|
namespace: str,
|
|
367
382
|
service_account: str,
|
|
368
383
|
role: str,
|
|
384
|
+
user: str,
|
|
369
385
|
) -> None:
|
|
370
386
|
"""Bind service account to role
|
|
371
387
|
|
|
@@ -373,11 +389,13 @@ def bind_role_to_service_account(
|
|
|
373
389
|
:param str namespace: service account namespace
|
|
374
390
|
:param str service_account: service account name
|
|
375
391
|
:param str role: role name
|
|
392
|
+
:param str user: user requiring the role
|
|
376
393
|
"""
|
|
377
394
|
role_binding = V1RoleBinding(
|
|
378
395
|
metadata=V1ObjectMeta(
|
|
379
|
-
name=limit_size_with_hash(f"binding-{role}"),
|
|
396
|
+
name=limit_size_with_hash(f"remote-run-binding-{role}"),
|
|
380
397
|
namespace=namespace,
|
|
398
|
+
labels={POD_OWNER_LABEL: user},
|
|
381
399
|
),
|
|
382
400
|
role_ref=V1RoleRef(
|
|
383
401
|
api_group="rbac.authorization.k8s.io",
|
|
@@ -395,3 +413,29 @@ def bind_role_to_service_account(
|
|
|
395
413
|
namespace=namespace,
|
|
396
414
|
body=role_binding,
|
|
397
415
|
)
|
|
416
|
+
|
|
417
|
+
|
|
418
|
+
def get_remote_run_roles(kube_client: KubeClient, namespace: str) -> List[V1Role]:
|
|
419
|
+
"""List all temporary roles related to remote-run
|
|
420
|
+
|
|
421
|
+
:param KubeClient kube_client: Kubernetes client
|
|
422
|
+
:param str namespace: pod namespace
|
|
423
|
+
:return: list of roles
|
|
424
|
+
"""
|
|
425
|
+
return kube_client.rbac.list_namespaced_role(
|
|
426
|
+
namespace, label_selector=POD_OWNER_LABEL
|
|
427
|
+
).items
|
|
428
|
+
|
|
429
|
+
|
|
430
|
+
def get_remote_run_role_bindings(
|
|
431
|
+
kube_client: KubeClient, namespace: str
|
|
432
|
+
) -> List[V1RoleBinding]:
|
|
433
|
+
"""List all temporary role bindings related to remote-run
|
|
434
|
+
|
|
435
|
+
:param KubeClient kube_client: Kubernetes client
|
|
436
|
+
:param str namespace: pod namespace
|
|
437
|
+
:return: list of roles
|
|
438
|
+
"""
|
|
439
|
+
return kube_client.rbac.list_namespaced_role_binding(
|
|
440
|
+
namespace, label_selector=POD_OWNER_LABEL
|
|
441
|
+
).items
|
|
@@ -207,6 +207,7 @@ paasta_tools/kubernetes/application/controller_wrappers.py
|
|
|
207
207
|
paasta_tools/kubernetes/application/tools.py
|
|
208
208
|
paasta_tools/kubernetes/bin/__init__.py
|
|
209
209
|
paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py
|
|
210
|
+
paasta_tools/kubernetes/bin/paasta_cleanup_remote_run_resources.py
|
|
210
211
|
paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py
|
|
211
212
|
paasta_tools/kubernetes/bin/paasta_secrets_sync.py
|
|
212
213
|
paasta_tools/mesos/__init__.py
|
|
@@ -59,6 +59,7 @@ setup(
|
|
|
59
59
|
"paasta_tools/generate_services_yaml.py",
|
|
60
60
|
"paasta_tools/generate_authenticating_services.py",
|
|
61
61
|
"paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py",
|
|
62
|
+
"paasta_tools/kubernetes/bin/paasta_cleanup_remote_run_resources.py",
|
|
62
63
|
"paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py",
|
|
63
64
|
"paasta_tools/kubernetes/bin/paasta_secrets_sync.py",
|
|
64
65
|
"paasta_tools/paasta_deploy_tron_jobs",
|
|
@@ -1,33 +0,0 @@
|
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/autoscaling/autoscaling_service_lib.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/autoscaling/max_all_k8s_services.py
RENAMED
|
File without changes
|
{paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/autoscaling/pause_service_autoscaler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/check_kubernetes_services_replication.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta-tools-1.14.0 → paasta-tools-1.14.1}/paasta_tools/check_services_replication_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|