paasta-tools 1.14.3__tar.gz → 1.15.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {paasta-tools-1.14.3/paasta_tools.egg-info → paasta-tools-1.15.1}/PKG-INFO +1 -1
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/__init__.py +1 -1
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/check_flink_services_health.py +5 -6
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/check_kubernetes_services_replication.py +8 -9
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/check_services_replication_tools.py +72 -25
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/spark_run.py +90 -1
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/schemas/eks_schema.json +13 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/schemas/kubernetes_schema.json +13 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/schemas/tron_schema.json +11 -1
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/envoy_tools.py +11 -5
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/kubernetes/bin/paasta_cleanup_remote_run_resources.py +25 -3
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/kubernetes/remote_run.py +1 -1
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/kubernetes_tools.py +25 -2
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/utils.py +6 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1/paasta_tools.egg-info}/PKG-INFO +1 -1
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools.egg-info/requires.txt +1 -1
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/requirements-minimal.txt +1 -1
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/MANIFEST.in +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/README.md +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/k8s_itests/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/k8s_itests/test_autoscaling.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/k8s_itests/utils.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/adhoc_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/api.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/api_docs/swagger.json +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/client.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/settings.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/tweens/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/tweens/auth.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/tweens/profiling.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/tweens/request_logger.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/views/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/views/autoscaler.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/views/exception.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/views/flink.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/views/instance.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/views/pause_autoscaler.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/views/remote_run.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/views/resources.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/views/service.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/api/views/version.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/apply_external_resources.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/async_utils.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/autoscaling/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/autoscaling/forecasting.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/autoscaling/utils.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/bounce_lib.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/broadcast_log_to_services.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cassandracluster_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/check_autoscaler_max_instances.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/check_kubernetes_api.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/check_oom_events.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/check_spark_jobs.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cleanup_tron_namespaces.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cli.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/autoscale.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/check.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/cook_image.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/get_image_version.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/info.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/itest.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/list.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/list_clusters.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/list_namespaces.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/local_run.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/logs.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/mesh_status.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/remote_run.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/rollback.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/secret.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/security_check.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/status.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/validate.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/fsm/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/fsm/autosuggest.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/fsm/template/README.md +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/fsm_cmd.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/schemas/autoscaling_schema.json +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/schemas/service_schema.json +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/schemas/smartstack_schema.json +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/cli/utils.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/clusterman.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/config_utils.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/check_orphans.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/create_paasta_playground.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/habitat_fixer.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/ide_helper.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/kill_bad_containers.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/mock_patch_checker.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/render_template.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/service_shard_remove.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/service_shard_update.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/shared_ip_check.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/delete_kubernetes_deployments.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/deployment_utils.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/docker_wrapper.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/docker_wrapper_imports.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/drain_lib.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/dump_locally_running_services.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/eks_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/firewall.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/firewall_logging.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/firewall_update.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/flink_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/flinkeks_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/frameworks/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/frameworks/constraints.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/frameworks/native_scheduler.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/frameworks/native_service_config.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/frameworks/task_store.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/generate_all_deployments +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/generate_authenticating_services.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/generate_deployments_for_service.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/generate_services_file.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/generate_services_yaml.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/hacheck.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/instance/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/instance/kubernetes.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/iptables.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/kafkacluster_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/kubernetes/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/kubernetes/application/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/kubernetes/application/controller_wrappers.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/kubernetes/application/tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/kubernetes/bin/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/list_kubernetes_service_instances.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/list_tron_namespaces.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/long_running_service_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/mac_address.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/marathon_dashboard.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/mesos/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/mesos/cfg.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/mesos/cluster.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/mesos/exceptions.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/mesos/framework.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/mesos/log.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/mesos/master.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/mesos/mesos_file.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/mesos/parallel.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/mesos/slave.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/mesos/task.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/mesos/util.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/mesos/zookeeper.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/mesos_maintenance.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/mesos_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/metrics/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/metrics/metastatus_lib.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/metrics/metrics_lib.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/monitoring/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/monitoring_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/monkrelaycluster_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/nrtsearchservice_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/oom_logger.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paasta_deploy_tron_jobs +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paasta_execute_docker_command.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paasta_native_serviceinit.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paasta_service_config_loader.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/api/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/api/autoscaler_api.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/api/default_api.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/api/remote_run_api.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/api/resources_api.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/api/service_api.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/api_client.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/apis/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/configuration.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/exceptions.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/adhoc_launch_history.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/deploy_queue.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/envoy_backend.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/envoy_location.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/envoy_status.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/flink_cluster_overview.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/flink_config.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/flink_job.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/flink_job_details.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/flink_jobs.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/float_and_error.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/hpa_metric.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/inline_object.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/inline_response200.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/inline_response2001.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/instance_bounce_status.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/instance_mesh_status.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/instance_status.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/instance_status_adhoc.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/instance_status_flink.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/instance_status_tron.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/instance_tasks.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/integer_and_error.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/kubernetes_container.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/kubernetes_pod.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/kubernetes_version.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/remote_run_outcome.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/remote_run_start.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/remote_run_stop.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/remote_run_token.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/resource.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/resource_item.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/resource_value.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/smartstack_backend.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/smartstack_location.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/smartstack_status.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model/task_tail_lines.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/model_utils.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/models/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/paastaapi/rest.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/prune_completed_pods.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/puppet_service_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/py.typed +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/remote_git.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/run-paasta-api-playground.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/secret_providers/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/secret_providers/vault.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/secret_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/setup_istio_mesh.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/setup_kubernetes_cr.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/setup_kubernetes_crd.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/setup_kubernetes_job.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/setup_prometheus_adapter_config.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/setup_tron_namespace.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/slack.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/smartstack_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/spark_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/tron/__init__.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/tron/client.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/tron/tron_command_context.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/tron/tron_timeutils.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/tron_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/yaml_tools.py +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools.egg-info/SOURCES.txt +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools.egg-info/dependency_links.txt +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools.egg-info/entry_points.txt +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools.egg-info/top_level.txt +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/pyproject.toml +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/setup.cfg +0 -0
- {paasta-tools-1.14.3 → paasta-tools-1.15.1}/setup.py +0 -0
|
@@ -17,6 +17,8 @@ Usage: ./check_flink_services_health.py [options]
|
|
|
17
17
|
"""
|
|
18
18
|
import datetime
|
|
19
19
|
import logging
|
|
20
|
+
from typing import Dict
|
|
21
|
+
from typing import List
|
|
20
22
|
from typing import Sequence
|
|
21
23
|
from typing import Tuple
|
|
22
24
|
|
|
@@ -27,7 +29,6 @@ from paasta_tools import flinkeks_tools
|
|
|
27
29
|
from paasta_tools.check_services_replication_tools import main
|
|
28
30
|
from paasta_tools.check_services_replication_tools import parse_args
|
|
29
31
|
from paasta_tools.flink_tools import FlinkDeploymentConfig
|
|
30
|
-
from paasta_tools.kubernetes_tools import filter_pods_by_service_instance
|
|
31
32
|
from paasta_tools.kubernetes_tools import is_pod_ready
|
|
32
33
|
from paasta_tools.kubernetes_tools import V1Pod
|
|
33
34
|
from paasta_tools.monitoring_tools import check_under_replication
|
|
@@ -132,14 +133,12 @@ def get_cr_name(si_pods: Sequence[V1Pod]) -> str:
|
|
|
132
133
|
|
|
133
134
|
def check_flink_service_health(
|
|
134
135
|
instance_config: FlinkDeploymentConfig,
|
|
135
|
-
|
|
136
|
+
pods_by_service_instance: Dict[str, Dict[str, List[V1Pod]]],
|
|
136
137
|
replication_checker: KubeSmartstackEnvoyReplicationChecker,
|
|
137
138
|
dry_run: bool = False,
|
|
138
139
|
) -> None:
|
|
139
|
-
si_pods =
|
|
140
|
-
|
|
141
|
-
service=instance_config.service,
|
|
142
|
-
instance=instance_config.instance,
|
|
140
|
+
si_pods = pods_by_service_instance.get(instance_config.service, {}).get(
|
|
141
|
+
instance_config.instance, []
|
|
143
142
|
)
|
|
144
143
|
taskmanagers_expected_cnt = instance_config.config_dict.get(
|
|
145
144
|
"taskmanager", {"instances": 10}
|
{paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/check_kubernetes_services_replication.py
RENAMED
|
@@ -31,8 +31,9 @@ CRITICAL. If replication_threshold is defined in the yelpsoa config for a servic
|
|
|
31
31
|
instance then it will be used instead.
|
|
32
32
|
"""
|
|
33
33
|
import logging
|
|
34
|
+
from typing import Dict
|
|
35
|
+
from typing import List
|
|
34
36
|
from typing import Optional
|
|
35
|
-
from typing import Sequence
|
|
36
37
|
from typing import Union
|
|
37
38
|
|
|
38
39
|
from paasta_tools import eks_tools
|
|
@@ -41,7 +42,6 @@ from paasta_tools import monitoring_tools
|
|
|
41
42
|
from paasta_tools.check_services_replication_tools import main
|
|
42
43
|
from paasta_tools.check_services_replication_tools import parse_args
|
|
43
44
|
from paasta_tools.eks_tools import EksDeploymentConfig
|
|
44
|
-
from paasta_tools.kubernetes_tools import filter_pods_by_service_instance
|
|
45
45
|
from paasta_tools.kubernetes_tools import is_pod_ready
|
|
46
46
|
from paasta_tools.kubernetes_tools import KubernetesDeploymentConfig
|
|
47
47
|
from paasta_tools.kubernetes_tools import V1Pod
|
|
@@ -56,14 +56,13 @@ DEFAULT_ALERT_AFTER = "10m"
|
|
|
56
56
|
def check_healthy_kubernetes_tasks_for_service_instance(
|
|
57
57
|
instance_config: Union[KubernetesDeploymentConfig, EksDeploymentConfig],
|
|
58
58
|
expected_count: int,
|
|
59
|
-
|
|
59
|
+
pods_by_service_instance: Dict[str, Dict[str, List[V1Pod]]],
|
|
60
60
|
dry_run: bool = False,
|
|
61
61
|
) -> None:
|
|
62
|
-
si_pods =
|
|
63
|
-
|
|
64
|
-
service=instance_config.service,
|
|
65
|
-
instance=instance_config.instance,
|
|
62
|
+
si_pods = pods_by_service_instance.get(instance_config.service, {}).get(
|
|
63
|
+
instance_config.instance, []
|
|
66
64
|
)
|
|
65
|
+
|
|
67
66
|
num_healthy_tasks = len([pod for pod in si_pods if is_pod_ready(pod)])
|
|
68
67
|
log.info(
|
|
69
68
|
f"Checking {instance_config.service}.{instance_config.instance} in kubernetes as it is not in smartstack"
|
|
@@ -78,7 +77,7 @@ def check_healthy_kubernetes_tasks_for_service_instance(
|
|
|
78
77
|
|
|
79
78
|
def check_kubernetes_pod_replication(
|
|
80
79
|
instance_config: Union[KubernetesDeploymentConfig, EksDeploymentConfig],
|
|
81
|
-
|
|
80
|
+
pods_by_service_instance: Dict[str, Dict[str, List[V1Pod]]],
|
|
82
81
|
replication_checker: KubeSmartstackEnvoyReplicationChecker,
|
|
83
82
|
dry_run: bool = False,
|
|
84
83
|
) -> Optional[bool]:
|
|
@@ -126,7 +125,7 @@ def check_kubernetes_pod_replication(
|
|
|
126
125
|
check_healthy_kubernetes_tasks_for_service_instance(
|
|
127
126
|
instance_config=instance_config,
|
|
128
127
|
expected_count=expected_count,
|
|
129
|
-
|
|
128
|
+
pods_by_service_instance=pods_by_service_instance,
|
|
130
129
|
dry_run=dry_run,
|
|
131
130
|
)
|
|
132
131
|
return None
|
{paasta-tools-1.14.3 → paasta-tools-1.15.1}/paasta_tools/check_services_replication_tools.py
RENAMED
|
@@ -14,12 +14,16 @@
|
|
|
14
14
|
import argparse
|
|
15
15
|
import logging
|
|
16
16
|
import sys
|
|
17
|
+
from multiprocessing import Pool
|
|
18
|
+
from os import cpu_count
|
|
17
19
|
from typing import Any
|
|
18
20
|
from typing import Callable
|
|
19
|
-
from typing import
|
|
21
|
+
from typing import cast
|
|
22
|
+
from typing import Dict
|
|
20
23
|
from typing import List
|
|
21
24
|
from typing import Optional
|
|
22
25
|
from typing import Sequence
|
|
26
|
+
from typing import Set
|
|
23
27
|
from typing import Tuple
|
|
24
28
|
from typing import Type
|
|
25
29
|
|
|
@@ -29,6 +33,7 @@ from mypy_extensions import NamedArg
|
|
|
29
33
|
from paasta_tools.kubernetes_tools import get_all_managed_namespaces
|
|
30
34
|
from paasta_tools.kubernetes_tools import get_all_nodes
|
|
31
35
|
from paasta_tools.kubernetes_tools import get_all_pods
|
|
36
|
+
from paasta_tools.kubernetes_tools import group_pods_by_service_instance
|
|
32
37
|
from paasta_tools.kubernetes_tools import KubeClient
|
|
33
38
|
from paasta_tools.kubernetes_tools import V1Node
|
|
34
39
|
from paasta_tools.kubernetes_tools import V1Pod
|
|
@@ -52,7 +57,7 @@ log = logging.getLogger(__name__)
|
|
|
52
57
|
CheckServiceReplication = Callable[
|
|
53
58
|
[
|
|
54
59
|
Arg(InstanceConfig_T, "instance_config"),
|
|
55
|
-
Arg(
|
|
60
|
+
Arg(Dict[str, Dict[str, List[V1Pod]]], "pods_by_service_instance"),
|
|
56
61
|
Arg(Any, "replication_checker"),
|
|
57
62
|
NamedArg(bool, "dry_run"),
|
|
58
63
|
],
|
|
@@ -102,16 +107,6 @@ def parse_args() -> argparse.Namespace:
|
|
|
102
107
|
dest="dry_run",
|
|
103
108
|
help="Print Sensu alert events and metrics instead of sending them",
|
|
104
109
|
)
|
|
105
|
-
parser.add_argument(
|
|
106
|
-
"--additional-namespaces",
|
|
107
|
-
help="full names of namespaces to check services replication for that don't match --namespace-prefix"
|
|
108
|
-
"Used only when service is kubernetes",
|
|
109
|
-
dest="additional_namespaces",
|
|
110
|
-
nargs="+",
|
|
111
|
-
# we default this to paasta since we always want to run this check on paasta namespace
|
|
112
|
-
# to avoid having two cron jobs running with two different namespace-prefix
|
|
113
|
-
default=["paasta"],
|
|
114
|
-
)
|
|
115
110
|
parser.add_argument(
|
|
116
111
|
"--eks",
|
|
117
112
|
help="This flag checks k8 services running on EKS",
|
|
@@ -131,7 +126,7 @@ def check_services_replication(
|
|
|
131
126
|
instance_type_class: Type[InstanceConfig_T],
|
|
132
127
|
check_service_replication: CheckServiceReplication,
|
|
133
128
|
replication_checker: ReplicationChecker,
|
|
134
|
-
|
|
129
|
+
pods_by_service_instance: Dict[str, Dict[str, List[V1Pod]]],
|
|
135
130
|
dry_run: bool = False,
|
|
136
131
|
) -> Tuple[int, int]:
|
|
137
132
|
service_instances_set = set(service_instances)
|
|
@@ -151,7 +146,7 @@ def check_services_replication(
|
|
|
151
146
|
if instance_config.get_docker_image():
|
|
152
147
|
is_well_replicated = check_service_replication(
|
|
153
148
|
instance_config=instance_config,
|
|
154
|
-
|
|
149
|
+
pods_by_service_instance=pods_by_service_instance,
|
|
155
150
|
replication_checker=replication_checker,
|
|
156
151
|
dry_run=dry_run,
|
|
157
152
|
)
|
|
@@ -211,14 +206,14 @@ def main(
|
|
|
211
206
|
system_paasta_config=system_paasta_config,
|
|
212
207
|
)
|
|
213
208
|
else:
|
|
214
|
-
pods, nodes = get_kubernetes_pods_and_nodes(
|
|
215
|
-
additional_namespaces=args.additional_namespaces,
|
|
216
|
-
)
|
|
209
|
+
pods, nodes = get_kubernetes_pods_and_nodes()
|
|
217
210
|
replication_checker = KubeSmartstackEnvoyReplicationChecker(
|
|
218
211
|
nodes=nodes,
|
|
219
212
|
system_paasta_config=system_paasta_config,
|
|
220
213
|
)
|
|
221
214
|
|
|
215
|
+
pods_by_service_instance = group_pods_by_service_instance(pods)
|
|
216
|
+
|
|
222
217
|
count_under_replicated, total = check_services_replication(
|
|
223
218
|
soa_dir=args.soa_dir,
|
|
224
219
|
cluster=cluster,
|
|
@@ -226,7 +221,7 @@ def main(
|
|
|
226
221
|
instance_type_class=instance_type_class,
|
|
227
222
|
check_service_replication=check_service_replication,
|
|
228
223
|
replication_checker=replication_checker,
|
|
229
|
-
|
|
224
|
+
pods_by_service_instance=pods_by_service_instance,
|
|
230
225
|
dry_run=args.dry_run,
|
|
231
226
|
)
|
|
232
227
|
pct_under_replicated = 0 if total == 0 else 100 * count_under_replicated / total
|
|
@@ -256,21 +251,73 @@ def main(
|
|
|
256
251
|
sys.exit(exit_code)
|
|
257
252
|
|
|
258
253
|
|
|
254
|
+
# XXX: is there a base class for the k8s clientlib models that we could use to type `obj`?
|
|
255
|
+
def set_local_vars_configuration_to_none(obj: Any, visited: Set[int] = None) -> None:
|
|
256
|
+
"""
|
|
257
|
+
Recursive function to ensure that k8s clientlib objects are pickleable.
|
|
258
|
+
|
|
259
|
+
Without this, k8s clientlib objects can't be used by multiprocessing functions
|
|
260
|
+
as those pickle data to shuttle between processes.
|
|
261
|
+
"""
|
|
262
|
+
if visited is None:
|
|
263
|
+
visited = set()
|
|
264
|
+
|
|
265
|
+
# Avoid infinite recursion for objects that have already been visited
|
|
266
|
+
obj_id = id(obj)
|
|
267
|
+
if obj_id in visited:
|
|
268
|
+
return
|
|
269
|
+
visited.add(obj_id)
|
|
270
|
+
|
|
271
|
+
# if the object has the attribute, set it to None to essentially delete it
|
|
272
|
+
if hasattr(obj, "local_vars_configuration"):
|
|
273
|
+
setattr(obj, "local_vars_configuration", None)
|
|
274
|
+
|
|
275
|
+
# recursively check attributes of the object
|
|
276
|
+
if hasattr(obj, "__dict__"):
|
|
277
|
+
for attr_name, attr_value in obj.__dict__.items():
|
|
278
|
+
set_local_vars_configuration_to_none(attr_value, visited)
|
|
279
|
+
|
|
280
|
+
# if the object is iterable/a collection, iterate over its elements
|
|
281
|
+
elif isinstance(obj, (list, tuple, set)):
|
|
282
|
+
for item in obj:
|
|
283
|
+
set_local_vars_configuration_to_none(item, visited)
|
|
284
|
+
elif isinstance(obj, dict):
|
|
285
|
+
for value in obj.values():
|
|
286
|
+
set_local_vars_configuration_to_none(value, visited)
|
|
287
|
+
|
|
288
|
+
|
|
289
|
+
def __fetch_pods(namespace: str) -> List[V1Pod]:
|
|
290
|
+
kube_client = KubeClient()
|
|
291
|
+
pods = get_all_pods(kube_client, namespace)
|
|
292
|
+
for pod in pods:
|
|
293
|
+
# this is pretty silly, but V1Pod cannot be pickled otherwise since the local_vars_configuration member
|
|
294
|
+
# is not picklable - and pretty much every k8s model has this member ;_;
|
|
295
|
+
set_local_vars_configuration_to_none(pod)
|
|
296
|
+
return pods
|
|
297
|
+
|
|
298
|
+
|
|
299
|
+
def __get_all_pods_parallel(from_namespaces: Set[str]) -> List[V1Pod]:
|
|
300
|
+
all_pods: List[V1Pod] = []
|
|
301
|
+
with Pool() as pool:
|
|
302
|
+
for pod_list in pool.imap_unordered(
|
|
303
|
+
__fetch_pods,
|
|
304
|
+
from_namespaces,
|
|
305
|
+
chunksize=len(from_namespaces) // cast(int, cpu_count()),
|
|
306
|
+
):
|
|
307
|
+
all_pods.extend(pod_list)
|
|
308
|
+
return all_pods
|
|
309
|
+
|
|
310
|
+
|
|
259
311
|
def get_kubernetes_pods_and_nodes(
|
|
260
312
|
namespace: Optional[str] = None,
|
|
261
|
-
additional_namespaces: Optional[Container[str]] = None,
|
|
262
313
|
) -> Tuple[List[V1Pod], List[V1Node]]:
|
|
263
314
|
kube_client = KubeClient()
|
|
264
315
|
|
|
265
|
-
all_pods: List[V1Pod] = []
|
|
266
316
|
if namespace:
|
|
267
317
|
all_pods = get_all_pods(kube_client=kube_client, namespace=namespace)
|
|
268
318
|
else:
|
|
269
|
-
all_managed_namespaces = get_all_managed_namespaces(kube_client)
|
|
270
|
-
|
|
271
|
-
all_pods.extend(
|
|
272
|
-
get_all_pods(kube_client=kube_client, namespace=managed_namespace)
|
|
273
|
-
)
|
|
319
|
+
all_managed_namespaces = set(get_all_managed_namespaces(kube_client))
|
|
320
|
+
all_pods = __get_all_pods_parallel(all_managed_namespaces)
|
|
274
321
|
|
|
275
322
|
all_nodes = get_all_nodes(kube_client)
|
|
276
323
|
|
|
@@ -12,6 +12,7 @@ from typing import Dict
|
|
|
12
12
|
from typing import List
|
|
13
13
|
from typing import Mapping
|
|
14
14
|
from typing import Optional
|
|
15
|
+
from typing import Set
|
|
15
16
|
from typing import Tuple
|
|
16
17
|
from typing import Union
|
|
17
18
|
|
|
@@ -31,6 +32,7 @@ from paasta_tools.cli.utils import get_service_auth_token
|
|
|
31
32
|
from paasta_tools.cli.utils import lazy_choices_completer
|
|
32
33
|
from paasta_tools.cli.utils import list_instances
|
|
33
34
|
from paasta_tools.clusterman import get_clusterman_metrics
|
|
35
|
+
from paasta_tools.kubernetes_tools import get_service_account_name
|
|
34
36
|
from paasta_tools.spark_tools import auto_add_timeout_for_spark_job
|
|
35
37
|
from paasta_tools.spark_tools import create_spark_config_str
|
|
36
38
|
from paasta_tools.spark_tools import DEFAULT_SPARK_RUNTIME_TIMEOUT
|
|
@@ -38,6 +40,7 @@ from paasta_tools.spark_tools import DEFAULT_SPARK_SERVICE
|
|
|
38
40
|
from paasta_tools.spark_tools import get_volumes_from_spark_k8s_configs
|
|
39
41
|
from paasta_tools.spark_tools import get_webui_url
|
|
40
42
|
from paasta_tools.spark_tools import inject_spark_conf_str
|
|
43
|
+
from paasta_tools.tron_tools import load_tron_instance_configs
|
|
41
44
|
from paasta_tools.utils import _run
|
|
42
45
|
from paasta_tools.utils import DEFAULT_SOA_DIR
|
|
43
46
|
from paasta_tools.utils import filter_templates_from_config
|
|
@@ -419,6 +422,29 @@ def add_subparser(subparsers):
|
|
|
419
422
|
default=False,
|
|
420
423
|
)
|
|
421
424
|
|
|
425
|
+
aws_group.add_argument(
|
|
426
|
+
"--force-pod-identity",
|
|
427
|
+
help=(
|
|
428
|
+
"Normally the spark executor will use the pod identity defined "
|
|
429
|
+
"for the relevant instance in yelpsoa-configs. If the instance "
|
|
430
|
+
"isn't setup there yet, you can override the IAM role arn here."
|
|
431
|
+
" However, it must already be set for a different instance of "
|
|
432
|
+
"the service. Must be used with --executor-pod-identity."
|
|
433
|
+
),
|
|
434
|
+
default=None,
|
|
435
|
+
)
|
|
436
|
+
|
|
437
|
+
aws_group.add_argument(
|
|
438
|
+
"--executor-pod-identity",
|
|
439
|
+
help=(
|
|
440
|
+
"Launch the executor pod with pod-identity derived from "
|
|
441
|
+
"the iam_role settings attached to the instance settings in "
|
|
442
|
+
"SOA configs. See also --force-pod-identity."
|
|
443
|
+
),
|
|
444
|
+
action="store_true",
|
|
445
|
+
default=False,
|
|
446
|
+
)
|
|
447
|
+
|
|
422
448
|
jupyter_group = list_parser.add_argument_group(
|
|
423
449
|
title="Jupyter kernel culling options",
|
|
424
450
|
description="Idle kernels will be culled by default. Idle "
|
|
@@ -627,6 +653,19 @@ def get_spark_env(
|
|
|
627
653
|
return spark_env
|
|
628
654
|
|
|
629
655
|
|
|
656
|
+
def get_all_iam_roles_for_service(
|
|
657
|
+
service: str,
|
|
658
|
+
cluster: str,
|
|
659
|
+
) -> Set[str]:
|
|
660
|
+
tron_instance_configs = load_tron_instance_configs(service, cluster)
|
|
661
|
+
roles = set()
|
|
662
|
+
for action in tron_instance_configs:
|
|
663
|
+
role = action.get_iam_role()
|
|
664
|
+
if role:
|
|
665
|
+
roles.add(role)
|
|
666
|
+
return roles
|
|
667
|
+
|
|
668
|
+
|
|
630
669
|
def _parse_user_spark_args(
|
|
631
670
|
spark_args: str,
|
|
632
671
|
) -> Dict[str, str]:
|
|
@@ -1205,6 +1244,47 @@ def paasta_spark_run(args: argparse.Namespace) -> int:
|
|
|
1205
1244
|
)
|
|
1206
1245
|
return 1
|
|
1207
1246
|
|
|
1247
|
+
service_account_name = None
|
|
1248
|
+
iam_role = instance_config.get_iam_role()
|
|
1249
|
+
if args.executor_pod_identity and not (iam_role or args.force_pod_identity):
|
|
1250
|
+
print(
|
|
1251
|
+
"--executor-pod-identity set but no iam_role settings found.",
|
|
1252
|
+
file=sys.stderr,
|
|
1253
|
+
)
|
|
1254
|
+
return 1
|
|
1255
|
+
if args.executor_pod_identity:
|
|
1256
|
+
if args.force_pod_identity:
|
|
1257
|
+
if args.yelpsoa_config_root != DEFAULT_SOA_DIR:
|
|
1258
|
+
print(
|
|
1259
|
+
"--force-pod-identity cannot be used with --yelpsoa-config-root",
|
|
1260
|
+
file=sys.stderr,
|
|
1261
|
+
)
|
|
1262
|
+
return 1
|
|
1263
|
+
|
|
1264
|
+
allowed_iam_roles = get_all_iam_roles_for_service(
|
|
1265
|
+
args.service, args.cluster
|
|
1266
|
+
)
|
|
1267
|
+
if args.force_pod_identity not in allowed_iam_roles:
|
|
1268
|
+
print(
|
|
1269
|
+
f"{args.force_pod_identity} is not an allowed role for this service. "
|
|
1270
|
+
f"Allowed roles are: {allowed_iam_roles}.",
|
|
1271
|
+
file=sys.stderr,
|
|
1272
|
+
)
|
|
1273
|
+
return 1
|
|
1274
|
+
|
|
1275
|
+
service_account_name = get_service_account_name(args.force_pod_identity)
|
|
1276
|
+
else:
|
|
1277
|
+
service_account_name = get_service_account_name(iam_role)
|
|
1278
|
+
if (
|
|
1279
|
+
not args.aws_credentials_yaml
|
|
1280
|
+
and not args.aws_profile
|
|
1281
|
+
and not args.assume_aws_role
|
|
1282
|
+
):
|
|
1283
|
+
args.aws_credentials_yaml = (
|
|
1284
|
+
system_paasta_config.get_default_spark_iam_user()
|
|
1285
|
+
)
|
|
1286
|
+
log.info(f"Running executor with service account {service_account_name}")
|
|
1287
|
+
|
|
1208
1288
|
aws_creds = get_aws_credentials(
|
|
1209
1289
|
service=args.service,
|
|
1210
1290
|
aws_credentials_yaml=args.aws_credentials_yaml,
|
|
@@ -1213,6 +1293,14 @@ def paasta_spark_run(args: argparse.Namespace) -> int:
|
|
|
1213
1293
|
session_duration=args.aws_role_duration,
|
|
1214
1294
|
use_web_identity=args.use_web_identity,
|
|
1215
1295
|
)
|
|
1296
|
+
|
|
1297
|
+
# If executor pods use a service account, they don't need static aws creds
|
|
1298
|
+
# but the driver still does
|
|
1299
|
+
if service_account_name:
|
|
1300
|
+
executor_aws_creds = None
|
|
1301
|
+
else:
|
|
1302
|
+
executor_aws_creds = aws_creds
|
|
1303
|
+
|
|
1216
1304
|
docker_image_digest = get_docker_image(args, instance_config)
|
|
1217
1305
|
if docker_image_digest is None:
|
|
1218
1306
|
return 1
|
|
@@ -1254,11 +1342,12 @@ def paasta_spark_run(args: argparse.Namespace) -> int:
|
|
|
1254
1342
|
paasta_service=args.service,
|
|
1255
1343
|
paasta_instance=paasta_instance,
|
|
1256
1344
|
extra_volumes=cast(List[Mapping[str, str]], volumes),
|
|
1257
|
-
aws_creds=
|
|
1345
|
+
aws_creds=executor_aws_creds,
|
|
1258
1346
|
aws_region=args.aws_region,
|
|
1259
1347
|
force_spark_resource_configs=args.force_spark_resource_configs,
|
|
1260
1348
|
use_eks=True,
|
|
1261
1349
|
k8s_server_address=k8s_server_address,
|
|
1350
|
+
service_account_name=service_account_name,
|
|
1262
1351
|
)
|
|
1263
1352
|
|
|
1264
1353
|
return configure_and_run_docker_container(
|
|
@@ -502,6 +502,19 @@
|
|
|
502
502
|
},
|
|
503
503
|
"page": {
|
|
504
504
|
"type": "boolean"
|
|
505
|
+
},
|
|
506
|
+
"alert_after": {
|
|
507
|
+
"oneOf": [
|
|
508
|
+
{
|
|
509
|
+
"type": "string",
|
|
510
|
+
"pattern": "^[1-9]+[0-9]*[YMWDhms]$",
|
|
511
|
+
"$comment": "See https://pysensu-yelp.readthedocs.io/en/latest/#pysensu_yelp.human_to_seconds"
|
|
512
|
+
},
|
|
513
|
+
{
|
|
514
|
+
"type": "integer",
|
|
515
|
+
"minimum": 0
|
|
516
|
+
}
|
|
517
|
+
]
|
|
505
518
|
}
|
|
506
519
|
},
|
|
507
520
|
"additionalProperties": true
|
|
@@ -502,6 +502,19 @@
|
|
|
502
502
|
},
|
|
503
503
|
"page": {
|
|
504
504
|
"type": "boolean"
|
|
505
|
+
},
|
|
506
|
+
"alert_after": {
|
|
507
|
+
"oneOf": [
|
|
508
|
+
{
|
|
509
|
+
"type": "string",
|
|
510
|
+
"pattern": "^[1-9]+[0-9]*[YMWDhms]$",
|
|
511
|
+
"$comment": "See https://pysensu-yelp.readthedocs.io/en/latest/#pysensu_yelp.human_to_seconds"
|
|
512
|
+
},
|
|
513
|
+
{
|
|
514
|
+
"type": "integer",
|
|
515
|
+
"minimum": 0
|
|
516
|
+
}
|
|
517
|
+
]
|
|
505
518
|
}
|
|
506
519
|
},
|
|
507
520
|
"additionalProperties": true
|
|
@@ -622,7 +622,17 @@
|
|
|
622
622
|
"type": "string"
|
|
623
623
|
},
|
|
624
624
|
"alert_after": {
|
|
625
|
-
"
|
|
625
|
+
"oneOf": [
|
|
626
|
+
{
|
|
627
|
+
"type": "string",
|
|
628
|
+
"pattern": "^[1-9]+[0-9]*[YMWDhms]$",
|
|
629
|
+
"$comment": "See https://pysensu-yelp.readthedocs.io/en/latest/#pysensu_yelp.human_to_seconds"
|
|
630
|
+
},
|
|
631
|
+
{
|
|
632
|
+
"type": "integer",
|
|
633
|
+
"minimum": 0
|
|
634
|
+
}
|
|
635
|
+
]
|
|
626
636
|
},
|
|
627
637
|
"check_that_every_day_has_a_successful_run": {
|
|
628
638
|
"type": "boolean"
|
|
@@ -204,6 +204,7 @@ def get_multiple_backends(
|
|
|
204
204
|
envoy_host: str,
|
|
205
205
|
envoy_admin_port: int,
|
|
206
206
|
envoy_admin_endpoint_format: str,
|
|
207
|
+
resolve_hostnames: bool = True,
|
|
207
208
|
) -> Dict[str, List[Tuple[EnvoyBackend, bool]]]:
|
|
208
209
|
"""Fetches JSON from Envoy admin's /clusters endpoint and returns a list of backends.
|
|
209
210
|
|
|
@@ -247,11 +248,15 @@ def get_multiple_backends(
|
|
|
247
248
|
casper_endpoint_found = True
|
|
248
249
|
continue
|
|
249
250
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
251
|
+
hostname = address
|
|
252
|
+
if resolve_hostnames:
|
|
253
|
+
try:
|
|
254
|
+
hostname = socket.gethostbyaddr(address)[0].split(".")[
|
|
255
|
+
0
|
|
256
|
+
]
|
|
257
|
+
except socket.herror:
|
|
258
|
+
# Default to the raw IP address if we can't lookup the hostname
|
|
259
|
+
pass
|
|
255
260
|
|
|
256
261
|
cluster_backends.append(
|
|
257
262
|
(
|
|
@@ -352,6 +357,7 @@ def get_replication_for_all_services(
|
|
|
352
357
|
envoy_host=envoy_host,
|
|
353
358
|
envoy_admin_port=envoy_admin_port,
|
|
354
359
|
envoy_admin_endpoint_format=envoy_admin_endpoint_format,
|
|
360
|
+
resolve_hostnames=False, # we're not really going to use the hostnames, so skip fetching them to save time
|
|
355
361
|
)
|
|
356
362
|
return collections.Counter(
|
|
357
363
|
[
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
# See the License for the specific language governing permissions and
|
|
14
14
|
# limitations under the License.
|
|
15
15
|
import argparse
|
|
16
|
+
import logging
|
|
16
17
|
from datetime import datetime
|
|
17
18
|
from datetime import timedelta
|
|
18
19
|
from datetime import timezone
|
|
@@ -30,15 +31,19 @@ from paasta_tools.kubernetes_tools import KubeClient
|
|
|
30
31
|
|
|
31
32
|
ListingFuncType = Callable[[KubeClient, str], Sequence[Any]]
|
|
32
33
|
DeletionFuncType = Callable[[str, str], Any]
|
|
34
|
+
log = logging.getLogger(__name__)
|
|
33
35
|
|
|
34
36
|
|
|
35
|
-
def clean_namespace(
|
|
37
|
+
def clean_namespace(
|
|
38
|
+
kube_client: KubeClient, namespace: str, age_limit: datetime, dry_run: bool = False
|
|
39
|
+
):
|
|
36
40
|
"""Clean ephemeral remote-run resource in a namespace
|
|
37
41
|
|
|
38
42
|
:param KubeClient kube_client: kubernetes client
|
|
39
43
|
:param str namepsace: kubernetes namespace
|
|
40
44
|
:param datetime age_limit: expiration time for resources
|
|
41
45
|
"""
|
|
46
|
+
dry_run_msg = " (dry_run)" if dry_run else ""
|
|
42
47
|
cleanup_actions: Sequence[Tuple[DeletionFuncType, ListingFuncType]] = (
|
|
43
48
|
(
|
|
44
49
|
kube_client.core.delete_namespaced_service_account,
|
|
@@ -54,7 +59,9 @@ def clean_namespace(kube_client: KubeClient, namespace: str, age_limit: datetime
|
|
|
54
59
|
or entity.metadata.creation_timestamp > age_limit
|
|
55
60
|
):
|
|
56
61
|
continue
|
|
57
|
-
|
|
62
|
+
log.info(f"Deleting {entity.metadata.name} in {namespace}{dry_run_msg}")
|
|
63
|
+
if not dry_run:
|
|
64
|
+
delete_func(entity.metadata.name, namespace)
|
|
58
65
|
|
|
59
66
|
|
|
60
67
|
def parse_args() -> argparse.Namespace:
|
|
@@ -68,15 +75,30 @@ def parse_args() -> argparse.Namespace:
|
|
|
68
75
|
default=600,
|
|
69
76
|
help="Maximum age, in seconds, resources are allowed to have",
|
|
70
77
|
)
|
|
78
|
+
parser.add_argument(
|
|
79
|
+
"-n",
|
|
80
|
+
"--dry-run",
|
|
81
|
+
action="store_true",
|
|
82
|
+
default=False,
|
|
83
|
+
help="Do not actually delete resources",
|
|
84
|
+
)
|
|
85
|
+
parser.add_argument(
|
|
86
|
+
"-v",
|
|
87
|
+
"--verbose",
|
|
88
|
+
action="store_true",
|
|
89
|
+
default=False,
|
|
90
|
+
help="More verbose logging",
|
|
91
|
+
)
|
|
71
92
|
return parser.parse_args()
|
|
72
93
|
|
|
73
94
|
|
|
74
95
|
def main():
|
|
75
96
|
args = parse_args()
|
|
97
|
+
logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO)
|
|
76
98
|
kube_client = KubeClient()
|
|
77
99
|
age_limit = datetime.now(tz=timezone.utc) - timedelta(seconds=args.max_age)
|
|
78
100
|
for namespace in get_all_managed_namespaces(kube_client):
|
|
79
|
-
clean_namespace(kube_client, namespace, age_limit)
|
|
101
|
+
clean_namespace(kube_client, namespace, age_limit, args.dry_run)
|
|
80
102
|
|
|
81
103
|
|
|
82
104
|
if __name__ == "__main__":
|
|
@@ -372,7 +372,7 @@ def create_pod_scoped_role(
|
|
|
372
372
|
labels={POD_OWNER_LABEL: user},
|
|
373
373
|
),
|
|
374
374
|
)
|
|
375
|
-
kube_client.
|
|
375
|
+
kube_client.rbac.create_namespaced_role(namespace=namespace, body=role)
|
|
376
376
|
return role_name
|
|
377
377
|
|
|
378
378
|
|
|
@@ -3439,8 +3439,11 @@ def get_pods_by_node(kube_client: KubeClient, node: V1Node) -> Sequence[V1Pod]:
|
|
|
3439
3439
|
).items
|
|
3440
3440
|
|
|
3441
3441
|
|
|
3442
|
-
def get_all_pods(kube_client: KubeClient, namespace: str) -> List[V1Pod]:
|
|
3443
|
-
|
|
3442
|
+
def get_all_pods(kube_client: KubeClient, namespace: Optional[str]) -> List[V1Pod]:
|
|
3443
|
+
if namespace:
|
|
3444
|
+
return kube_client.core.list_namespaced_pod(namespace=namespace).items
|
|
3445
|
+
else:
|
|
3446
|
+
return kube_client.core.list_pod_for_all_namespaces().items
|
|
3444
3447
|
|
|
3445
3448
|
|
|
3446
3449
|
@time_cache(ttl=300)
|
|
@@ -3461,6 +3464,26 @@ def filter_pods_by_service_instance(
|
|
|
3461
3464
|
]
|
|
3462
3465
|
|
|
3463
3466
|
|
|
3467
|
+
def group_pods_by_service_instance(
|
|
3468
|
+
pods: Sequence[V1Pod],
|
|
3469
|
+
) -> Dict[str, Dict[str, List[V1Pod]]]:
|
|
3470
|
+
pods_by_service_instance: Dict[str, Dict[str, List[V1Pod]]] = {}
|
|
3471
|
+
for pod in pods:
|
|
3472
|
+
if pod.metadata.labels is not None:
|
|
3473
|
+
service = pod.metadata.labels.get("paasta.yelp.com/service")
|
|
3474
|
+
instance = pod.metadata.labels.get("paasta.yelp.com/instance")
|
|
3475
|
+
|
|
3476
|
+
if service and instance:
|
|
3477
|
+
if service not in pods_by_service_instance:
|
|
3478
|
+
pods_by_service_instance[service] = {}
|
|
3479
|
+
if instance not in pods_by_service_instance[service]:
|
|
3480
|
+
pods_by_service_instance[service][instance] = []
|
|
3481
|
+
|
|
3482
|
+
pods_by_service_instance[service][instance].append(pod)
|
|
3483
|
+
|
|
3484
|
+
return pods_by_service_instance
|
|
3485
|
+
|
|
3486
|
+
|
|
3464
3487
|
def _is_it_ready(
|
|
3465
3488
|
it: Union[V1Pod, V1Node],
|
|
3466
3489
|
) -> bool:
|
|
@@ -2044,6 +2044,7 @@ class SystemPaastaConfigDict(TypedDict, total=False):
|
|
|
2044
2044
|
uses_bulkdata_default: bool
|
|
2045
2045
|
enable_automated_redeploys_default: bool
|
|
2046
2046
|
enable_tron_tsc: bool
|
|
2047
|
+
default_spark_iam_user: str
|
|
2047
2048
|
|
|
2048
2049
|
|
|
2049
2050
|
def load_system_paasta_config(
|
|
@@ -2142,6 +2143,11 @@ class SystemPaastaConfig:
|
|
|
2142
2143
|
def get_spark_use_eks_default(self) -> bool:
|
|
2143
2144
|
return self.config_dict.get("spark_use_eks_default", False)
|
|
2144
2145
|
|
|
2146
|
+
def get_default_spark_iam_user(self) -> str:
|
|
2147
|
+
return self.config_dict.get(
|
|
2148
|
+
"default_spark_iam_user", "/etc/boto_cfg/mrjob.yaml"
|
|
2149
|
+
)
|
|
2150
|
+
|
|
2145
2151
|
def get_sidecar_requirements_config(
|
|
2146
2152
|
self,
|
|
2147
2153
|
) -> Dict[str, KubeContainerResourceRequest]:
|