paasta-tools 1.4.7__tar.gz → 1.4.9__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.7/paasta_tools.egg-info → paasta-tools-1.4.9}/PKG-INFO +1 -1
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/__init__.py +1 -1
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/schemas/smartstack_schema.json +32 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/kubernetes/application/controller_wrappers.py +0 -20
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/kubernetes_tools.py +14 -14
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/setup_kubernetes_job.py +0 -1
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/setup_tron_namespace.py +0 -41
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/spark_tools.py +0 -21
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/tron_tools.py +20 -61
- {paasta-tools-1.4.7 → paasta-tools-1.4.9/paasta_tools.egg-info}/PKG-INFO +1 -1
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/MANIFEST.in +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/README.md +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/k8s_itests/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/k8s_itests/test_autoscaling.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/k8s_itests/utils.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/adhoc_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/api.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/api_docs/swagger.json +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/client.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/settings.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/tweens/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/tweens/profiling.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/tweens/request_logger.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/views/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/views/autoscaler.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/views/exception.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/views/flink.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/views/instance.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/views/pause_autoscaler.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/views/resources.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/views/service.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/api/views/version.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/apply_external_resources.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/async_utils.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/autoscaling/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/autoscaling/forecasting.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/autoscaling/utils.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/bounce_lib.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/broadcast_log_to_services.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cassandracluster_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/check_autoscaler_max_instances.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/check_flink_services_health.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/check_kubernetes_api.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/check_kubernetes_services_replication.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/check_oom_events.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/check_services_replication_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/check_spark_jobs.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cleanup_tron_namespaces.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cli.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/autoscale.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/check.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/cook_image.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/get_image_version.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/info.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/itest.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/list.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/list_clusters.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/local_run.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/logs.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/mesh_status.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/remote_run.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/rollback.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/secret.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/security_check.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/spark_run.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/status.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/validate.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/fsm/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/fsm/autosuggest.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/fsm/template/README.md +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/fsm_cmd.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/schemas/autoscaling_schema.json +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/schemas/eks_schema.json +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/schemas/kubernetes_schema.json +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/schemas/service_schema.json +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/schemas/tron_schema.json +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/cli/utils.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/clusterman.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/config_utils.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/check_orphans.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/create_paasta_playground.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/habitat_fixer.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/ide_helper.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/kill_bad_containers.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/mock_patch_checker.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/render_template.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/service_shard_remove.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/service_shard_update.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/shared_ip_check.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/delete_kubernetes_deployments.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/deployment_utils.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/docker_wrapper.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/docker_wrapper_imports.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/drain_lib.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/dump_locally_running_services.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/eks_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/envoy_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/firewall.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/firewall_logging.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/firewall_update.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/flink_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/flinkeks_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/frameworks/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/frameworks/constraints.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/frameworks/native_scheduler.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/frameworks/native_service_config.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/frameworks/task_store.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/generate_all_deployments +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/generate_authenticating_services.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/generate_deployments_for_service.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/generate_services_file.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/generate_services_yaml.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/hacheck.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/instance/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/instance/kubernetes.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/iptables.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/kafkacluster_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/kubernetes/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/kubernetes/application/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/kubernetes/application/tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/kubernetes/bin/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/list_kubernetes_service_instances.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/list_tron_namespaces.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/log_task_lifecycle_events.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/long_running_service_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/mac_address.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/marathon_dashboard.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/mesos/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/mesos/cfg.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/mesos/cluster.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/mesos/exceptions.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/mesos/framework.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/mesos/log.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/mesos/master.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/mesos/mesos_file.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/mesos/parallel.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/mesos/slave.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/mesos/task.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/mesos/util.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/mesos/zookeeper.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/mesos_maintenance.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/mesos_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/metrics/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/metrics/metastatus_lib.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/metrics/metrics_lib.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/monitoring/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/monitoring/kill_orphaned_docker_containers.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/monitoring_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/monkrelaycluster_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/nrtsearchservice_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/oom_logger.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paasta_deploy_tron_jobs +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paasta_execute_docker_command.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paasta_native_serviceinit.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paasta_remote_run.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paasta_service_config_loader.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/api/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/api/autoscaler_api.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/api/default_api.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/api/resources_api.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/api/service_api.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/api_client.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/apis/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/configuration.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/exceptions.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/adhoc_launch_history.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/deploy_queue.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/envoy_backend.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/envoy_location.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/envoy_status.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/flink_cluster_overview.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/flink_config.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/flink_job.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/flink_job_details.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/flink_jobs.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/float_and_error.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/hpa_metric.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/inline_object.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/inline_response200.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/inline_response2001.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/instance_bounce_status.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/instance_mesh_status.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/instance_status.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/instance_status_adhoc.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/instance_status_flink.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/instance_status_tron.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/instance_status_vitesscluster.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/instance_tasks.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/integer_and_error.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/kubernetes_container.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/kubernetes_pod.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/kubernetes_version.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/resource.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/resource_item.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/resource_value.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/smartstack_backend.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/smartstack_location.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/smartstack_status.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model/task_tail_lines.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/model_utils.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/models/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/paastaapi/rest.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/prune_completed_pods.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/puppet_service_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/py.typed +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/remote_git.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/run-paasta-api-playground.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/secret_providers/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/secret_providers/vault.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/secret_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/setup_istio_mesh.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/setup_kubernetes_cr.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/setup_kubernetes_crd.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/setup_prometheus_adapter_config.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/slack.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/smartstack_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/tron/__init__.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/tron/client.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/tron/tron_command_context.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/tron/tron_timeutils.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/utils.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/vitesscluster_tools.py +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools.egg-info/SOURCES.txt +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools.egg-info/dependency_links.txt +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools.egg-info/entry_points.txt +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools.egg-info/requires.txt +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools.egg-info/top_level.txt +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/pyproject.toml +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/requirements-minimal.txt +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/setup.cfg +0 -0
- {paasta-tools-1.4.7 → paasta-tools-1.4.9}/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": [
|
{paasta-tools-1.4.7 → paasta-tools-1.4.9}/paasta_tools/kubernetes/application/controller_wrappers.py
RENAMED
|
@@ -15,7 +15,6 @@ 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
|
|
19
18
|
from paasta_tools.kubernetes_tools import KubeClient
|
|
20
19
|
from paasta_tools.kubernetes_tools import KubeDeployment
|
|
21
20
|
from paasta_tools.kubernetes_tools import KubernetesDeploymentConfig
|
|
@@ -121,25 +120,6 @@ class Application(ABC):
|
|
|
121
120
|
"""
|
|
122
121
|
self.ensure_pod_disruption_budget(kube_client, self.soa_config.get_namespace())
|
|
123
122
|
|
|
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
|
-
ensure_service_account(
|
|
138
|
-
iam_role=self.soa_config.get_iam_role(),
|
|
139
|
-
namespace=self.soa_config.get_namespace(),
|
|
140
|
-
kube_client=kube_client,
|
|
141
|
-
)
|
|
142
|
-
|
|
143
123
|
def delete_pod_disruption_budget(self, kube_client: KubeClient) -> None:
|
|
144
124
|
try:
|
|
145
125
|
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[
|
|
2224
|
+
"service_account_name"
|
|
2225
|
+
] = create_or_find_service_account_name(iam_role, self.get_namespace())
|
|
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,9 +4050,12 @@ 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 create_or_find_service_account_name(
|
|
4054
4054
|
iam_role: str,
|
|
4055
|
+
namespace: str,
|
|
4055
4056
|
k8s_role: Optional[str] = None,
|
|
4057
|
+
kubeconfig_file: Optional[str] = None,
|
|
4058
|
+
dry_run: bool = False,
|
|
4056
4059
|
) -> str:
|
|
4057
4060
|
# the service account is expected to always be prefixed with paasta- as using the actual namespace
|
|
4058
4061
|
# potentially wastes a lot of characters (e.g., paasta-nrtsearchservices) that could be used for
|
|
@@ -4078,17 +4081,12 @@ def get_service_account_name(
|
|
|
4078
4081
|
"Expected at least one of iam_role or k8s_role to be passed in!"
|
|
4079
4082
|
)
|
|
4080
4083
|
|
|
4081
|
-
|
|
4082
|
-
|
|
4083
|
-
|
|
4084
|
-
|
|
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)
|
|
4084
|
+
# if someone is dry-running paasta_setup_tron_namespace or some other tool that
|
|
4085
|
+
# calls this function, we probably don't want to mutate k8s state :)
|
|
4086
|
+
if dry_run:
|
|
4087
|
+
return sa_name
|
|
4091
4088
|
|
|
4089
|
+
kube_client = KubeClient(config_file=kubeconfig_file)
|
|
4092
4090
|
if not any(
|
|
4093
4091
|
sa.metadata and sa.metadata.name == sa_name
|
|
4094
4092
|
for sa in get_all_service_accounts(kube_client, namespace)
|
|
@@ -4137,6 +4135,8 @@ def ensure_service_account(
|
|
|
4137
4135
|
namespace=namespace, body=role_binding
|
|
4138
4136
|
)
|
|
4139
4137
|
|
|
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,13 +26,8 @@ import sys
|
|
|
26
26
|
|
|
27
27
|
import ruamel.yaml as yaml
|
|
28
28
|
|
|
29
|
-
from paasta_tools import spark_tools
|
|
30
29
|
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
|
|
34
30
|
from paasta_tools.tron_tools import MASTER_NAMESPACE
|
|
35
|
-
from paasta_tools.utils import load_system_paasta_config
|
|
36
31
|
|
|
37
32
|
log = logging.getLogger(__name__)
|
|
38
33
|
|
|
@@ -68,32 +63,6 @@ def parse_args():
|
|
|
68
63
|
return args
|
|
69
64
|
|
|
70
65
|
|
|
71
|
-
def ensure_service_accounts(
|
|
72
|
-
raw_config: str, kube_client: KubeClient, spark_kube_client: KubeClient
|
|
73
|
-
) -> None:
|
|
74
|
-
# this is kinda silly, but the tron create_config functions return strings
|
|
75
|
-
# we should refactor to pass the dicts around until the we're going to send the config to tron
|
|
76
|
-
# (where we can finally convert it to a string)
|
|
77
|
-
config = yaml.safe_load(raw_config)
|
|
78
|
-
for _, job in config.get("jobs", {}).items():
|
|
79
|
-
for _, action in job.get("actions", {}).items():
|
|
80
|
-
if action.get("service_account_name") is not None:
|
|
81
|
-
ensure_service_account(
|
|
82
|
-
action["service_account_name"],
|
|
83
|
-
namespace=KUBERNETES_NAMESPACE,
|
|
84
|
-
kube_client=kube_client,
|
|
85
|
-
)
|
|
86
|
-
# spark executors are special in that we want the SA to exist in two namespaces:
|
|
87
|
-
# the tron namespace - for the spark driver
|
|
88
|
-
# and the spark namespace - for the spark executor
|
|
89
|
-
if action.get("executor") == "spark":
|
|
90
|
-
ensure_service_account(
|
|
91
|
-
action["service_account_name"],
|
|
92
|
-
namespace=spark_tools.SPARK_EXECUTOR_NAMESPACE,
|
|
93
|
-
kube_client=spark_kube_client,
|
|
94
|
-
)
|
|
95
|
-
|
|
96
|
-
|
|
97
66
|
def main():
|
|
98
67
|
args = parse_args()
|
|
99
68
|
log_level = logging.DEBUG if args.verbose else logging.INFO
|
|
@@ -164,16 +133,6 @@ def main():
|
|
|
164
133
|
log.info(f"{new_config}")
|
|
165
134
|
updated.append(service)
|
|
166
135
|
else:
|
|
167
|
-
# NOTE: these are all lru_cache'd so it should be fine to call these for every service
|
|
168
|
-
system_paasta_config = load_system_paasta_config()
|
|
169
|
-
kube_client = KubeClient()
|
|
170
|
-
spark_kube_client = KubeClient(
|
|
171
|
-
config_file=system_paasta_config.get_spark_kubeconfig()
|
|
172
|
-
)
|
|
173
|
-
# PaaSTA will not necessarily have created the SAs we want to use
|
|
174
|
-
# ...so let's go ahead and create them!
|
|
175
|
-
ensure_service_accounts(new_config, kube_client, spark_kube_client)
|
|
176
|
-
|
|
177
136
|
if client.update_namespace(service, new_config):
|
|
178
137
|
updated.append(service)
|
|
179
138
|
log.debug(f"Updated {service}")
|
|
@@ -6,7 +6,6 @@ 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
|
|
10
9
|
from typing import Mapping
|
|
11
10
|
from typing import Set
|
|
12
11
|
|
|
@@ -24,7 +23,6 @@ SPARK_DRIVER_POOL = "stable"
|
|
|
24
23
|
SPARK_JOB_USER = "TRON"
|
|
25
24
|
SPARK_PROMETHEUS_SHARD = "ml-compute"
|
|
26
25
|
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}
|
|
28
26
|
|
|
29
27
|
log = logging.getLogger(__name__)
|
|
30
28
|
|
|
@@ -249,22 +247,3 @@ def get_spark_driver_monitoring_labels(
|
|
|
249
247
|
"spark.yelp.com/driver_ui_port": ui_port_str,
|
|
250
248
|
}
|
|
251
249
|
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
|
+
create_or_find_service_account_name,
|
|
66
66
|
limit_size_with_hash,
|
|
67
67
|
raw_selectors_to_requirements,
|
|
68
68
|
to_node_label,
|
|
@@ -280,40 +280,9 @@ class TronActionConfig(InstanceConfig):
|
|
|
280
280
|
soa_dir=soa_dir,
|
|
281
281
|
)
|
|
282
282
|
self.job, self.action = decompose_instance(instance)
|
|
283
|
-
|
|
284
283
|
# Indicate whether this config object is created for validation
|
|
285
284
|
self.for_validation = for_validation
|
|
286
285
|
|
|
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
|
-
|
|
317
286
|
def build_spark_config(self) -> Dict[str, str]:
|
|
318
287
|
system_paasta_config = load_system_paasta_config()
|
|
319
288
|
resolved_cluster = system_paasta_config.get_eks_cluster_aliases().get(
|
|
@@ -385,11 +354,15 @@ class TronActionConfig(InstanceConfig):
|
|
|
385
354
|
"spark.kubernetes.executor.label.yelp.com/owner", self.get_team()
|
|
386
355
|
)
|
|
387
356
|
|
|
357
|
+
# We need to make sure the Service Account used by the executors has been created.
|
|
388
358
|
# We are using the Service Account created using the provided or default IAM role.
|
|
389
359
|
spark_conf[
|
|
390
360
|
"spark.kubernetes.authenticate.executor.serviceAccountName"
|
|
391
|
-
] =
|
|
361
|
+
] = create_or_find_service_account_name(
|
|
392
362
|
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,
|
|
393
366
|
)
|
|
394
367
|
|
|
395
368
|
return spark_conf
|
|
@@ -467,6 +440,7 @@ class TronActionConfig(InstanceConfig):
|
|
|
467
440
|
system_paasta_config: Optional["SystemPaastaConfig"] = None,
|
|
468
441
|
) -> Dict[str, str]:
|
|
469
442
|
env = super().get_env(system_paasta_config=system_paasta_config)
|
|
443
|
+
|
|
470
444
|
if self.get_executor() == "spark":
|
|
471
445
|
# Required by some sdks like boto3 client. Throws NoRegionError otherwise.
|
|
472
446
|
# AWS_REGION takes precedence if set.
|
|
@@ -631,20 +605,6 @@ class TronActionConfig(InstanceConfig):
|
|
|
631
605
|
error_msgs.append(
|
|
632
606
|
f"{self.get_job_name()}.{self.get_action_name()} must have a deploy_group set"
|
|
633
607
|
)
|
|
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
|
-
)
|
|
648
608
|
return error_msgs
|
|
649
609
|
|
|
650
610
|
def get_pool(self) -> str:
|
|
@@ -992,14 +952,20 @@ def format_tron_action_dict(action_config: TronActionConfig):
|
|
|
992
952
|
|
|
993
953
|
result["labels"]["yelp.com/owner"] = "compute_infra_platform_experience"
|
|
994
954
|
|
|
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)
|
|
995
958
|
if (
|
|
996
959
|
action_config.get_iam_role_provider() == "aws"
|
|
997
960
|
and action_config.get_iam_role()
|
|
961
|
+
and not action_config.for_validation
|
|
998
962
|
):
|
|
999
963
|
# this service account will be used for normal Tron batches as well as for Spark drivers
|
|
1000
|
-
result["service_account_name"] =
|
|
964
|
+
result["service_account_name"] = create_or_find_service_account_name(
|
|
1001
965
|
iam_role=action_config.get_iam_role(),
|
|
966
|
+
namespace=EXECUTOR_TYPE_TO_NAMESPACE[executor],
|
|
1002
967
|
k8s_role=None,
|
|
968
|
+
dry_run=action_config.for_validation,
|
|
1003
969
|
)
|
|
1004
970
|
|
|
1005
971
|
# service account token volumes for service authentication
|
|
@@ -1009,26 +975,21 @@ def format_tron_action_dict(action_config: TronActionConfig):
|
|
|
1009
975
|
if executor == "spark":
|
|
1010
976
|
is_mrjob = action_config.config_dict.get("mrjob", False)
|
|
1011
977
|
system_paasta_config = load_system_paasta_config()
|
|
1012
|
-
# inject
|
|
978
|
+
# inject spark configs to the original spark-submit command
|
|
979
|
+
spark_config = action_config.build_spark_config()
|
|
1013
980
|
result["command"] = spark_tools.build_spark_command(
|
|
1014
981
|
result["command"],
|
|
1015
|
-
|
|
982
|
+
spark_config,
|
|
1016
983
|
is_mrjob,
|
|
1017
984
|
action_config.config_dict.get(
|
|
1018
985
|
"max_runtime", spark_tools.DEFAULT_SPARK_RUNTIME_TIMEOUT
|
|
1019
986
|
),
|
|
1020
987
|
)
|
|
1021
|
-
# point to the KUBECONFIG needed by Spark driver
|
|
1022
988
|
result["env"]["KUBECONFIG"] = system_paasta_config.get_spark_kubeconfig()
|
|
1023
|
-
|
|
1024
989
|
# spark, unlike normal batches, needs to expose several ports for things like the spark
|
|
1025
990
|
# ui and for executor->driver communication
|
|
1026
991
|
result["ports"] = list(
|
|
1027
|
-
set(
|
|
1028
|
-
spark_tools.get_spark_ports_from_config(
|
|
1029
|
-
action_config.action_spark_config
|
|
1030
|
-
)
|
|
1031
|
-
)
|
|
992
|
+
set(spark_tools.get_spark_ports_from_config(spark_config))
|
|
1032
993
|
)
|
|
1033
994
|
# mount KUBECONFIG file for Spark drivers to communicate with EKS cluster
|
|
1034
995
|
extra_volumes.append(
|
|
@@ -1042,12 +1003,10 @@ def format_tron_action_dict(action_config: TronActionConfig):
|
|
|
1042
1003
|
)
|
|
1043
1004
|
# Add pod annotations and labels for Spark monitoring metrics
|
|
1044
1005
|
monitoring_annotations = (
|
|
1045
|
-
spark_tools.get_spark_driver_monitoring_annotations(
|
|
1046
|
-
action_config.action_spark_config
|
|
1047
|
-
)
|
|
1006
|
+
spark_tools.get_spark_driver_monitoring_annotations(spark_config)
|
|
1048
1007
|
)
|
|
1049
1008
|
monitoring_labels = spark_tools.get_spark_driver_monitoring_labels(
|
|
1050
|
-
|
|
1009
|
+
spark_config
|
|
1051
1010
|
)
|
|
1052
1011
|
result["annotations"].update(monitoring_annotations)
|
|
1053
1012
|
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.7 → paasta-tools-1.4.9}/paasta_tools/autoscaling/autoscaling_service_lib.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta-tools-1.4.7 → paasta-tools-1.4.9}/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.7 → paasta-tools-1.4.9}/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
|
|
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
|