paasta-tools 1.4.8__tar.gz → 1.4.10__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.4.8/paasta_tools.egg-info → paasta-tools-1.4.10}/PKG-INFO +1 -1
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/__init__.py +1 -1
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/smartstack_schema.json +32 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes/application/controller_wrappers.py +21 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes_tools.py +14 -14
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/setup_kubernetes_job.py +1 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/setup_tron_namespace.py +40 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/spark_tools.py +21 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/tron_tools.py +61 -20
- {paasta-tools-1.4.8 → paasta-tools-1.4.10/paasta_tools.egg-info}/PKG-INFO +1 -1
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/MANIFEST.in +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/README.md +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/k8s_itests/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/k8s_itests/test_autoscaling.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/k8s_itests/utils.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/adhoc_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/api.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/api_docs/swagger.json +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/client.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/settings.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/tweens/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/tweens/profiling.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/tweens/request_logger.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/autoscaler.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/exception.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/flink.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/instance.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/pause_autoscaler.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/resources.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/service.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/api/views/version.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/apply_external_resources.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/async_utils.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/autoscaling/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/autoscaling/forecasting.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/autoscaling/utils.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/bounce_lib.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/broadcast_log_to_services.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cassandracluster_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/check_autoscaler_max_instances.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/check_flink_services_health.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/check_kubernetes_api.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/check_kubernetes_services_replication.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/check_oom_events.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/check_services_replication_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/check_spark_jobs.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cleanup_tron_namespaces.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cli.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/autoscale.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/check.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/cook_image.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/get_image_version.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/info.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/itest.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/list.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/list_clusters.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/local_run.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/logs.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/mesh_status.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/remote_run.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/rollback.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/secret.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/security_check.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/spark_run.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/status.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/validate.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm/autosuggest.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm/template/README.md +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/fsm_cmd.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/autoscaling_schema.json +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/eks_schema.json +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/kubernetes_schema.json +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/service_schema.json +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/schemas/tron_schema.json +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/utils.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/clusterman.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/config_utils.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/check_orphans.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/create_paasta_playground.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/habitat_fixer.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/ide_helper.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/kill_bad_containers.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/mock_patch_checker.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/render_template.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/service_shard_remove.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/service_shard_update.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/shared_ip_check.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/delete_kubernetes_deployments.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/deployment_utils.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/docker_wrapper.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/docker_wrapper_imports.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/drain_lib.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/dump_locally_running_services.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/eks_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/envoy_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/firewall.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/firewall_logging.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/firewall_update.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/flink_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/flinkeks_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/frameworks/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/frameworks/constraints.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/frameworks/native_scheduler.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/frameworks/native_service_config.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/frameworks/task_store.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/generate_all_deployments +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/generate_authenticating_services.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/generate_deployments_for_service.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/generate_services_file.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/generate_services_yaml.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/hacheck.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/instance/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/instance/kubernetes.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/iptables.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kafkacluster_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes/application/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes/application/tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes/bin/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/list_kubernetes_service_instances.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/list_tron_namespaces.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/log_task_lifecycle_events.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/long_running_service_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mac_address.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/marathon_dashboard.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/cfg.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/cluster.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/exceptions.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/framework.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/log.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/master.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/mesos_file.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/parallel.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/slave.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/task.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/util.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos/zookeeper.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos_maintenance.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/mesos_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/metrics/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/metrics/metastatus_lib.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/metrics/metrics_lib.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/monitoring/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/monitoring/kill_orphaned_docker_containers.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/monitoring_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/monkrelaycluster_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/nrtsearchservice_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/oom_logger.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paasta_deploy_tron_jobs +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paasta_execute_docker_command.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paasta_native_serviceinit.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paasta_remote_run.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paasta_service_config_loader.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/api/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/api/autoscaler_api.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/api/default_api.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/api/resources_api.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/api/service_api.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/api_client.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/apis/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/configuration.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/exceptions.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/adhoc_launch_history.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/deploy_queue.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/envoy_backend.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/envoy_location.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/envoy_status.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/flink_cluster_overview.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/flink_config.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/flink_job.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/flink_job_details.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/flink_jobs.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/float_and_error.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/hpa_metric.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/inline_object.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/inline_response200.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/inline_response2001.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_bounce_status.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_mesh_status.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_adhoc.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_flink.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_tron.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_status_vitesscluster.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/instance_tasks.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/integer_and_error.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/kubernetes_container.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/kubernetes_pod.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/kubernetes_version.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/resource.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/resource_item.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/resource_value.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/smartstack_backend.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/smartstack_location.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/smartstack_status.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model/task_tail_lines.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/model_utils.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/models/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/paastaapi/rest.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/prune_completed_pods.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/puppet_service_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/py.typed +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/remote_git.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/run-paasta-api-playground.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/secret_providers/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/secret_providers/vault.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/secret_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/setup_istio_mesh.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/setup_kubernetes_cr.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/setup_kubernetes_crd.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/setup_prometheus_adapter_config.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/slack.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/smartstack_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/tron/__init__.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/tron/client.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/tron/tron_command_context.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/tron/tron_timeutils.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/utils.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/vitesscluster_tools.py +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools.egg-info/SOURCES.txt +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools.egg-info/dependency_links.txt +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools.egg-info/entry_points.txt +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools.egg-info/requires.txt +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools.egg-info/top_level.txt +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/pyproject.toml +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/requirements-minimal.txt +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/setup.cfg +0 -0
- {paasta-tools-1.4.8 → paasta-tools-1.4.10}/setup.py +0 -0
|
@@ -227,6 +227,38 @@
|
|
|
227
227
|
"vip_upgrade": {
|
|
228
228
|
"type": "string",
|
|
229
229
|
"description": "The service namespace that this namespace will route to (via Envoy) if a request has the X-Ctx-Vip header."
|
|
230
|
+
},
|
|
231
|
+
"monitoring": {
|
|
232
|
+
"type": "object",
|
|
233
|
+
"properties": {
|
|
234
|
+
"team": {
|
|
235
|
+
"type": "string"
|
|
236
|
+
},
|
|
237
|
+
"slack_channel": {
|
|
238
|
+
"type": "string"
|
|
239
|
+
},
|
|
240
|
+
"project": {
|
|
241
|
+
"type": "string"
|
|
242
|
+
},
|
|
243
|
+
"ticket": {
|
|
244
|
+
"type": "boolean"
|
|
245
|
+
},
|
|
246
|
+
"page": {
|
|
247
|
+
"type": "boolean"
|
|
248
|
+
},
|
|
249
|
+
"page_nonprod": {
|
|
250
|
+
"type": "boolean"
|
|
251
|
+
},
|
|
252
|
+
"error_threshold_ratio": {
|
|
253
|
+
"type": "number",
|
|
254
|
+
"minimum": 0,
|
|
255
|
+
"maximum": 1
|
|
256
|
+
},
|
|
257
|
+
"minimum_error_rps": {
|
|
258
|
+
"type": "integer",
|
|
259
|
+
"minimum": 0
|
|
260
|
+
}
|
|
261
|
+
}
|
|
230
262
|
}
|
|
231
263
|
},
|
|
232
264
|
"required": [
|
|
@@ -15,6 +15,7 @@ from paasta_tools.eks_tools import load_eks_service_config_no_cache
|
|
|
15
15
|
from paasta_tools.kubernetes_tools import create_deployment
|
|
16
16
|
from paasta_tools.kubernetes_tools import create_pod_disruption_budget
|
|
17
17
|
from paasta_tools.kubernetes_tools import create_stateful_set
|
|
18
|
+
from paasta_tools.kubernetes_tools import ensure_service_account
|
|
18
19
|
from paasta_tools.kubernetes_tools import KubeClient
|
|
19
20
|
from paasta_tools.kubernetes_tools import KubeDeployment
|
|
20
21
|
from paasta_tools.kubernetes_tools import KubernetesDeploymentConfig
|
|
@@ -120,6 +121,26 @@ class Application(ABC):
|
|
|
120
121
|
"""
|
|
121
122
|
self.ensure_pod_disruption_budget(kube_client, self.soa_config.get_namespace())
|
|
122
123
|
|
|
124
|
+
def update_dependency_api_objects(self, kube_client: KubeClient) -> None:
|
|
125
|
+
"""
|
|
126
|
+
Update related Kubernetes API objects that should be updated before the main object,
|
|
127
|
+
such as service accounts.
|
|
128
|
+
:param kube_client:
|
|
129
|
+
"""
|
|
130
|
+
self.ensure_service_account(kube_client)
|
|
131
|
+
|
|
132
|
+
def ensure_service_account(self, kube_client: KubeClient) -> None:
|
|
133
|
+
"""
|
|
134
|
+
Ensure that the service account for this application exists
|
|
135
|
+
:param kube_client:
|
|
136
|
+
"""
|
|
137
|
+
if self.soa_config.get_iam_role():
|
|
138
|
+
ensure_service_account(
|
|
139
|
+
iam_role=self.soa_config.get_iam_role(),
|
|
140
|
+
namespace=self.soa_config.get_namespace(),
|
|
141
|
+
kube_client=kube_client,
|
|
142
|
+
)
|
|
143
|
+
|
|
123
144
|
def delete_pod_disruption_budget(self, kube_client: KubeClient) -> None:
|
|
124
145
|
try:
|
|
125
146
|
kube_client.policy.delete_namespaced_pod_disruption_budget(
|
|
@@ -2220,9 +2220,9 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
|
|
|
2220
2220
|
annotations["iam.amazonaws.com/role"] = ""
|
|
2221
2221
|
iam_role = self.get_iam_role()
|
|
2222
2222
|
if iam_role:
|
|
2223
|
-
pod_spec_kwargs[
|
|
2224
|
-
|
|
2225
|
-
|
|
2223
|
+
pod_spec_kwargs["service_account_name"] = get_service_account_name(
|
|
2224
|
+
iam_role
|
|
2225
|
+
)
|
|
2226
2226
|
if fs_group is None:
|
|
2227
2227
|
# We need some reasoable default for group id of a process
|
|
2228
2228
|
# running inside the container. Seems like most of such
|
|
@@ -4050,12 +4050,9 @@ def get_all_limit_ranges(
|
|
|
4050
4050
|
_RE_NORMALIZE_IAM_ROLE = re.compile(r"[^0-9a-zA-Z]+")
|
|
4051
4051
|
|
|
4052
4052
|
|
|
4053
|
-
def
|
|
4053
|
+
def get_service_account_name(
|
|
4054
4054
|
iam_role: str,
|
|
4055
|
-
namespace: str,
|
|
4056
4055
|
k8s_role: Optional[str] = None,
|
|
4057
|
-
kubeconfig_file: Optional[str] = None,
|
|
4058
|
-
dry_run: bool = False,
|
|
4059
4056
|
) -> str:
|
|
4060
4057
|
# the service account is expected to always be prefixed with paasta- as using the actual namespace
|
|
4061
4058
|
# potentially wastes a lot of characters (e.g., paasta-nrtsearchservices) that could be used for
|
|
@@ -4081,12 +4078,17 @@ def create_or_find_service_account_name(
|
|
|
4081
4078
|
"Expected at least one of iam_role or k8s_role to be passed in!"
|
|
4082
4079
|
)
|
|
4083
4080
|
|
|
4084
|
-
|
|
4085
|
-
|
|
4086
|
-
|
|
4087
|
-
|
|
4081
|
+
return sa_name
|
|
4082
|
+
|
|
4083
|
+
|
|
4084
|
+
def ensure_service_account(
|
|
4085
|
+
iam_role: str,
|
|
4086
|
+
namespace: str,
|
|
4087
|
+
kube_client: KubeClient,
|
|
4088
|
+
k8s_role: Optional[str] = None,
|
|
4089
|
+
) -> None:
|
|
4090
|
+
sa_name = get_service_account_name(iam_role, k8s_role)
|
|
4088
4091
|
|
|
4089
|
-
kube_client = KubeClient(config_file=kubeconfig_file)
|
|
4090
4092
|
if not any(
|
|
4091
4093
|
sa.metadata and sa.metadata.name == sa_name
|
|
4092
4094
|
for sa in get_all_service_accounts(kube_client, namespace)
|
|
@@ -4135,8 +4137,6 @@ def create_or_find_service_account_name(
|
|
|
4135
4137
|
namespace=namespace, body=role_binding
|
|
4136
4138
|
)
|
|
4137
4139
|
|
|
4138
|
-
return sa_name
|
|
4139
|
-
|
|
4140
4140
|
|
|
4141
4141
|
def mode_to_int(mode: Optional[Union[str, int]]) -> Optional[int]:
|
|
4142
4142
|
if mode is not None:
|
|
@@ -26,8 +26,13 @@ import sys
|
|
|
26
26
|
|
|
27
27
|
import ruamel.yaml as yaml
|
|
28
28
|
|
|
29
|
+
from paasta_tools import spark_tools
|
|
29
30
|
from paasta_tools import tron_tools
|
|
31
|
+
from paasta_tools.kubernetes_tools import ensure_service_account
|
|
32
|
+
from paasta_tools.kubernetes_tools import KubeClient
|
|
33
|
+
from paasta_tools.tron_tools import KUBERNETES_NAMESPACE
|
|
30
34
|
from paasta_tools.tron_tools import MASTER_NAMESPACE
|
|
35
|
+
from paasta_tools.utils import load_system_paasta_config
|
|
31
36
|
|
|
32
37
|
log = logging.getLogger(__name__)
|
|
33
38
|
|
|
@@ -63,6 +68,37 @@ def parse_args():
|
|
|
63
68
|
return args
|
|
64
69
|
|
|
65
70
|
|
|
71
|
+
def ensure_service_accounts(raw_config: str) -> None:
|
|
72
|
+
# NOTE: these are lru_cache'd so it should be fine to call these for every service
|
|
73
|
+
system_paasta_config = load_system_paasta_config()
|
|
74
|
+
kube_client = KubeClient()
|
|
75
|
+
# this is kinda silly, but the tron create_config functions return strings
|
|
76
|
+
# we should refactor to pass the dicts around until the we're going to send the config to tron
|
|
77
|
+
# (where we can finally convert it to a string)
|
|
78
|
+
config = yaml.safe_load(raw_config)
|
|
79
|
+
for _, job in config.get("jobs", {}).items():
|
|
80
|
+
for _, action in job.get("actions", {}).items():
|
|
81
|
+
if action.get("service_account_name") is not None:
|
|
82
|
+
ensure_service_account(
|
|
83
|
+
action["service_account_name"],
|
|
84
|
+
namespace=KUBERNETES_NAMESPACE,
|
|
85
|
+
kube_client=kube_client,
|
|
86
|
+
)
|
|
87
|
+
# spark executors are special in that we want the SA to exist in two namespaces:
|
|
88
|
+
# the tron namespace - for the spark driver
|
|
89
|
+
# and the spark namespace - for the spark executor
|
|
90
|
+
if action.get("executor") == "spark":
|
|
91
|
+
# this kubeclient creation is lru_cache'd so it should be fine to call this for every spark action
|
|
92
|
+
spark_kube_client = KubeClient(
|
|
93
|
+
config_file=system_paasta_config.get_spark_kubeconfig()
|
|
94
|
+
)
|
|
95
|
+
ensure_service_account(
|
|
96
|
+
action["service_account_name"],
|
|
97
|
+
namespace=spark_tools.SPARK_EXECUTOR_NAMESPACE,
|
|
98
|
+
kube_client=spark_kube_client,
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
|
|
66
102
|
def main():
|
|
67
103
|
args = parse_args()
|
|
68
104
|
log_level = logging.DEBUG if args.verbose else logging.INFO
|
|
@@ -133,6 +169,10 @@ def main():
|
|
|
133
169
|
log.info(f"{new_config}")
|
|
134
170
|
updated.append(service)
|
|
135
171
|
else:
|
|
172
|
+
# PaaSTA will not necessarily have created the SAs we want to use
|
|
173
|
+
# ...so let's go ahead and create them!
|
|
174
|
+
ensure_service_accounts(new_config)
|
|
175
|
+
|
|
136
176
|
if client.update_namespace(service, new_config):
|
|
137
177
|
updated.append(service)
|
|
138
178
|
log.debug(f"Updated {service}")
|
|
@@ -6,6 +6,7 @@ from typing import Any
|
|
|
6
6
|
from typing import cast
|
|
7
7
|
from typing import Dict
|
|
8
8
|
from typing import List
|
|
9
|
+
from typing import Literal
|
|
9
10
|
from typing import Mapping
|
|
10
11
|
from typing import Set
|
|
11
12
|
|
|
@@ -23,6 +24,7 @@ SPARK_DRIVER_POOL = "stable"
|
|
|
23
24
|
SPARK_JOB_USER = "TRON"
|
|
24
25
|
SPARK_PROMETHEUS_SHARD = "ml-compute"
|
|
25
26
|
SPARK_DNS_POD_TEMPLATE = "/nail/srv/configs/spark_dns_pod_template.yaml"
|
|
27
|
+
MEM_MULTIPLIER = {"k": 1024, "m": 1024**2, "g": 1024**3, "t": 1024**4}
|
|
26
28
|
|
|
27
29
|
log = logging.getLogger(__name__)
|
|
28
30
|
|
|
@@ -247,3 +249,22 @@ def get_spark_driver_monitoring_labels(
|
|
|
247
249
|
"spark.yelp.com/driver_ui_port": ui_port_str,
|
|
248
250
|
}
|
|
249
251
|
return labels
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
def get_spark_memory_in_unit(mem: str, unit: Literal["k", "m", "g", "t"]) -> float:
|
|
255
|
+
"""
|
|
256
|
+
Converts Spark memory to the desired unit.
|
|
257
|
+
mem is the same format as JVM memory strings: just number or number followed by 'k', 'm', 'g' or 't'.
|
|
258
|
+
unit can be 'k', 'm', 'g' or 't'.
|
|
259
|
+
Returns memory as a float converted to the desired unit.
|
|
260
|
+
"""
|
|
261
|
+
try:
|
|
262
|
+
memory_bytes = float(mem)
|
|
263
|
+
except ValueError:
|
|
264
|
+
try:
|
|
265
|
+
memory_bytes = float(mem[:-1]) * MEM_MULTIPLIER[mem[-1]]
|
|
266
|
+
except (ValueError, IndexError):
|
|
267
|
+
print(f"Unable to parse memory value {mem}. Defaulting to 2 GB.")
|
|
268
|
+
memory_bytes = 2147483648 # default to 2 GB
|
|
269
|
+
memory_unit = memory_bytes / MEM_MULTIPLIER[unit]
|
|
270
|
+
return memory_unit
|
|
@@ -62,7 +62,7 @@ from paasta_tools import spark_tools
|
|
|
62
62
|
|
|
63
63
|
from paasta_tools.kubernetes_tools import (
|
|
64
64
|
allowlist_denylist_to_requirements,
|
|
65
|
-
|
|
65
|
+
get_service_account_name,
|
|
66
66
|
limit_size_with_hash,
|
|
67
67
|
raw_selectors_to_requirements,
|
|
68
68
|
to_node_label,
|
|
@@ -280,9 +280,40 @@ class TronActionConfig(InstanceConfig):
|
|
|
280
280
|
soa_dir=soa_dir,
|
|
281
281
|
)
|
|
282
282
|
self.job, self.action = decompose_instance(instance)
|
|
283
|
+
|
|
283
284
|
# Indicate whether this config object is created for validation
|
|
284
285
|
self.for_validation = for_validation
|
|
285
286
|
|
|
287
|
+
self.action_spark_config = None
|
|
288
|
+
if self.get_executor() == "spark":
|
|
289
|
+
# build the complete Spark configuration
|
|
290
|
+
# TODO: add conditional check for Spark specific commands spark-submit, pyspark etc ?
|
|
291
|
+
self.action_spark_config = self.build_spark_config()
|
|
292
|
+
|
|
293
|
+
def get_cpus(self) -> float:
|
|
294
|
+
# set Spark driver pod CPU if it is specified by Spark arguments
|
|
295
|
+
if (
|
|
296
|
+
self.action_spark_config
|
|
297
|
+
and "spark.driver.cores" in self.action_spark_config
|
|
298
|
+
):
|
|
299
|
+
return float(self.action_spark_config["spark.driver.cores"])
|
|
300
|
+
# we fall back to this default if there's no spark.driver.cores config
|
|
301
|
+
return super().get_cpus()
|
|
302
|
+
|
|
303
|
+
def get_mem(self) -> float:
|
|
304
|
+
# set Spark driver pod memory if it is specified by Spark arguments
|
|
305
|
+
if (
|
|
306
|
+
self.action_spark_config
|
|
307
|
+
and "spark.driver.memory" in self.action_spark_config
|
|
308
|
+
):
|
|
309
|
+
return int(
|
|
310
|
+
spark_tools.get_spark_memory_in_unit(
|
|
311
|
+
self.action_spark_config["spark.driver.memory"], "m"
|
|
312
|
+
)
|
|
313
|
+
)
|
|
314
|
+
# we fall back to this default if there's no spark.driver.memory config
|
|
315
|
+
return super().get_mem()
|
|
316
|
+
|
|
286
317
|
def build_spark_config(self) -> Dict[str, str]:
|
|
287
318
|
system_paasta_config = load_system_paasta_config()
|
|
288
319
|
resolved_cluster = system_paasta_config.get_eks_cluster_aliases().get(
|
|
@@ -354,15 +385,11 @@ class TronActionConfig(InstanceConfig):
|
|
|
354
385
|
"spark.kubernetes.executor.label.yelp.com/owner", self.get_team()
|
|
355
386
|
)
|
|
356
387
|
|
|
357
|
-
# We need to make sure the Service Account used by the executors has been created.
|
|
358
388
|
# We are using the Service Account created using the provided or default IAM role.
|
|
359
389
|
spark_conf[
|
|
360
390
|
"spark.kubernetes.authenticate.executor.serviceAccountName"
|
|
361
|
-
] =
|
|
391
|
+
] = get_service_account_name(
|
|
362
392
|
iam_role=self.get_spark_executor_iam_role(),
|
|
363
|
-
namespace=spark_tools.SPARK_EXECUTOR_NAMESPACE,
|
|
364
|
-
kubeconfig_file=system_paasta_config.get_spark_kubeconfig(),
|
|
365
|
-
dry_run=self.for_validation,
|
|
366
393
|
)
|
|
367
394
|
|
|
368
395
|
return spark_conf
|
|
@@ -440,7 +467,6 @@ class TronActionConfig(InstanceConfig):
|
|
|
440
467
|
system_paasta_config: Optional["SystemPaastaConfig"] = None,
|
|
441
468
|
) -> Dict[str, str]:
|
|
442
469
|
env = super().get_env(system_paasta_config=system_paasta_config)
|
|
443
|
-
|
|
444
470
|
if self.get_executor() == "spark":
|
|
445
471
|
# Required by some sdks like boto3 client. Throws NoRegionError otherwise.
|
|
446
472
|
# AWS_REGION takes precedence if set.
|
|
@@ -605,6 +631,20 @@ class TronActionConfig(InstanceConfig):
|
|
|
605
631
|
error_msgs.append(
|
|
606
632
|
f"{self.get_job_name()}.{self.get_action_name()} must have a deploy_group set"
|
|
607
633
|
)
|
|
634
|
+
# We are not allowing users to specify `cpus` and `mem` configuration if the action is a Spark job
|
|
635
|
+
# with driver running on k8s (executor: spark), because we derive these values from `spark.driver.cores`
|
|
636
|
+
# and `spark.driver.memory` in order to avoid confusion.
|
|
637
|
+
if self.get_executor() == "spark":
|
|
638
|
+
if "cpus" in self.config_dict:
|
|
639
|
+
error_msgs.append(
|
|
640
|
+
f"{self.get_job_name()}.{self.get_action_name()} is a Spark job. `cpus` config is not allowed. "
|
|
641
|
+
f"Please specify the driver cores using `spark.driver.cores`."
|
|
642
|
+
)
|
|
643
|
+
if "mem" in self.config_dict:
|
|
644
|
+
error_msgs.append(
|
|
645
|
+
f"{self.get_job_name()}.{self.get_action_name()} is a Spark job. `mem` config is not allowed. "
|
|
646
|
+
f"Please specify the driver memory using `spark.driver.memory`."
|
|
647
|
+
)
|
|
608
648
|
return error_msgs
|
|
609
649
|
|
|
610
650
|
def get_pool(self) -> str:
|
|
@@ -952,20 +992,14 @@ def format_tron_action_dict(action_config: TronActionConfig):
|
|
|
952
992
|
|
|
953
993
|
result["labels"]["yelp.com/owner"] = "compute_infra_platform_experience"
|
|
954
994
|
|
|
955
|
-
# create_or_find_service_account_name requires k8s credentials, and we don't
|
|
956
|
-
# have those available for CI to use (nor do we check these for normal PaaSTA
|
|
957
|
-
# services, so we're not doing anything "new" by skipping this)
|
|
958
995
|
if (
|
|
959
996
|
action_config.get_iam_role_provider() == "aws"
|
|
960
997
|
and action_config.get_iam_role()
|
|
961
|
-
and not action_config.for_validation
|
|
962
998
|
):
|
|
963
999
|
# this service account will be used for normal Tron batches as well as for Spark drivers
|
|
964
|
-
result["service_account_name"] =
|
|
1000
|
+
result["service_account_name"] = get_service_account_name(
|
|
965
1001
|
iam_role=action_config.get_iam_role(),
|
|
966
|
-
namespace=EXECUTOR_TYPE_TO_NAMESPACE[executor],
|
|
967
1002
|
k8s_role=None,
|
|
968
|
-
dry_run=action_config.for_validation,
|
|
969
1003
|
)
|
|
970
1004
|
|
|
971
1005
|
# service account token volumes for service authentication
|
|
@@ -975,21 +1009,26 @@ def format_tron_action_dict(action_config: TronActionConfig):
|
|
|
975
1009
|
if executor == "spark":
|
|
976
1010
|
is_mrjob = action_config.config_dict.get("mrjob", False)
|
|
977
1011
|
system_paasta_config = load_system_paasta_config()
|
|
978
|
-
# inject
|
|
979
|
-
spark_config = action_config.build_spark_config()
|
|
1012
|
+
# inject additional Spark configs in case of Spark commands
|
|
980
1013
|
result["command"] = spark_tools.build_spark_command(
|
|
981
1014
|
result["command"],
|
|
982
|
-
|
|
1015
|
+
action_config.action_spark_config,
|
|
983
1016
|
is_mrjob,
|
|
984
1017
|
action_config.config_dict.get(
|
|
985
1018
|
"max_runtime", spark_tools.DEFAULT_SPARK_RUNTIME_TIMEOUT
|
|
986
1019
|
),
|
|
987
1020
|
)
|
|
1021
|
+
# point to the KUBECONFIG needed by Spark driver
|
|
988
1022
|
result["env"]["KUBECONFIG"] = system_paasta_config.get_spark_kubeconfig()
|
|
1023
|
+
|
|
989
1024
|
# spark, unlike normal batches, needs to expose several ports for things like the spark
|
|
990
1025
|
# ui and for executor->driver communication
|
|
991
1026
|
result["ports"] = list(
|
|
992
|
-
set(
|
|
1027
|
+
set(
|
|
1028
|
+
spark_tools.get_spark_ports_from_config(
|
|
1029
|
+
action_config.action_spark_config
|
|
1030
|
+
)
|
|
1031
|
+
)
|
|
993
1032
|
)
|
|
994
1033
|
# mount KUBECONFIG file for Spark drivers to communicate with EKS cluster
|
|
995
1034
|
extra_volumes.append(
|
|
@@ -1003,10 +1042,12 @@ def format_tron_action_dict(action_config: TronActionConfig):
|
|
|
1003
1042
|
)
|
|
1004
1043
|
# Add pod annotations and labels for Spark monitoring metrics
|
|
1005
1044
|
monitoring_annotations = (
|
|
1006
|
-
spark_tools.get_spark_driver_monitoring_annotations(
|
|
1045
|
+
spark_tools.get_spark_driver_monitoring_annotations(
|
|
1046
|
+
action_config.action_spark_config
|
|
1047
|
+
)
|
|
1007
1048
|
)
|
|
1008
1049
|
monitoring_labels = spark_tools.get_spark_driver_monitoring_labels(
|
|
1009
|
-
|
|
1050
|
+
action_config.action_spark_config
|
|
1010
1051
|
)
|
|
1011
1052
|
result["annotations"].update(monitoring_annotations)
|
|
1012
1053
|
result["labels"].update(monitoring_labels)
|
|
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.4.8 → paasta-tools-1.4.10}/paasta_tools/autoscaling/autoscaling_service_lib.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta-tools-1.4.8 → paasta-tools-1.4.10}/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.4.8 → paasta-tools-1.4.10}/paasta_tools/check_kubernetes_services_replication.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta-tools-1.4.8 → paasta-tools-1.4.10}/paasta_tools/cli/cmds/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|