paasta-tools 1.12.0__tar.gz → 1.13.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {paasta-tools-1.12.0/paasta_tools.egg-info → paasta-tools-1.13.0}/PKG-INFO +1 -1
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/__init__.py +1 -1
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/api.py +19 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/client.py +8 -1
- paasta-tools-1.13.0/paasta_tools/api/tweens/__init__.py +6 -0
- paasta-tools-1.13.0/paasta_tools/api/tweens/auth.py +125 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/autoscaling_schema.json +1 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/kubernetes_tools.py +15 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/long_running_service_tools.py +2 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/setup_prometheus_adapter_config.py +78 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0/paasta_tools.egg-info}/PKG-INFO +1 -1
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools.egg-info/SOURCES.txt +1 -0
- paasta-tools-1.12.0/paasta_tools/tron/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/MANIFEST.in +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/README.md +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/k8s_itests/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/k8s_itests/test_autoscaling.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/k8s_itests/utils.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/adhoc_tools.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/api_docs/swagger.json +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/settings.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/tweens/profiling.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/tweens/request_logger.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/autoscaler.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/exception.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/flink.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/instance.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/pause_autoscaler.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/resources.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/service.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/api/views/version.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/apply_external_resources.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/async_utils.py +0 -0
- {paasta-tools-1.12.0/paasta_tools/api/tweens → paasta-tools-1.13.0/paasta_tools/autoscaling}/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/autoscaling/forecasting.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/autoscaling/utils.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/bounce_lib.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/broadcast_log_to_services.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cassandracluster_tools.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_autoscaler_max_instances.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_flink_services_health.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_kubernetes_api.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_kubernetes_services_replication.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_oom_events.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_services_replication_tools.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_spark_jobs.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cleanup_tron_namespaces.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cli.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/autoscale.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/check.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/cook_image.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/get_image_version.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/info.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/itest.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/list.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/list_clusters.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/list_namespaces.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/local_run.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/logs.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/mesh_status.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/remote_run.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/rollback.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/secret.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/security_check.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/spark_run.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/status.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/validate.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm/autosuggest.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm/template/README.md +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/fsm_cmd.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/eks_schema.json +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/kubernetes_schema.json +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/service_schema.json +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/smartstack_schema.json +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/schemas/tron_schema.json +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/utils.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/clusterman.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/config_utils.py +0 -0
- {paasta-tools-1.12.0/paasta_tools/autoscaling → paasta-tools-1.13.0/paasta_tools/contrib}/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/check_orphans.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/create_paasta_playground.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/habitat_fixer.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/ide_helper.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/kill_bad_containers.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/mock_patch_checker.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/render_template.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/service_shard_remove.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/service_shard_update.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/shared_ip_check.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/delete_kubernetes_deployments.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/deployment_utils.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/docker_wrapper.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/docker_wrapper_imports.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/drain_lib.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/dump_locally_running_services.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/eks_tools.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/envoy_tools.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/firewall.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/firewall_logging.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/firewall_update.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/flink_tools.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/flinkeks_tools.py +0 -0
- {paasta-tools-1.12.0/paasta_tools/contrib → paasta-tools-1.13.0/paasta_tools/frameworks}/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/frameworks/constraints.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/frameworks/native_scheduler.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/frameworks/native_service_config.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/frameworks/task_store.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/generate_all_deployments +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/generate_authenticating_services.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/generate_deployments_for_service.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/generate_services_file.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/generate_services_yaml.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/hacheck.py +0 -0
- {paasta-tools-1.12.0/paasta_tools/frameworks → paasta-tools-1.13.0/paasta_tools/instance}/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/instance/kubernetes.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/iptables.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/kafkacluster_tools.py +0 -0
- {paasta-tools-1.12.0/paasta_tools/instance → paasta-tools-1.13.0/paasta_tools/kubernetes}/__init__.py +0 -0
- {paasta-tools-1.12.0/paasta_tools/kubernetes → paasta-tools-1.13.0/paasta_tools/kubernetes/application}/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/kubernetes/application/controller_wrappers.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/kubernetes/application/tools.py +0 -0
- {paasta-tools-1.12.0/paasta_tools/kubernetes/application → paasta-tools-1.13.0/paasta_tools/kubernetes/bin}/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/list_kubernetes_service_instances.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/list_tron_namespaces.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/log_task_lifecycle_events.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mac_address.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/marathon_dashboard.py +0 -0
- {paasta-tools-1.12.0/paasta_tools/kubernetes/bin → paasta-tools-1.13.0/paasta_tools/mesos}/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/cfg.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/cluster.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/exceptions.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/framework.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/log.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/master.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/mesos_file.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/parallel.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/slave.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/task.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/util.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos/zookeeper.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos_maintenance.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/mesos_tools.py +0 -0
- {paasta-tools-1.12.0/paasta_tools/mesos → paasta-tools-1.13.0/paasta_tools/metrics}/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/metrics/metastatus_lib.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/metrics/metrics_lib.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/monitoring/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/monitoring_tools.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/monkrelaycluster_tools.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/nrtsearchservice_tools.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/oom_logger.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paasta_deploy_tron_jobs +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paasta_execute_docker_command.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paasta_native_serviceinit.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paasta_remote_run.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paasta_service_config_loader.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/api/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/api/autoscaler_api.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/api/default_api.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/api/resources_api.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/api/service_api.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/api_client.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/apis/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/configuration.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/exceptions.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/adhoc_launch_history.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/deploy_queue.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/envoy_backend.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/envoy_location.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/envoy_status.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/flink_cluster_overview.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/flink_config.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/flink_job.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/flink_job_details.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/flink_jobs.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/float_and_error.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/hpa_metric.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/inline_object.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/inline_response200.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/inline_response2001.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_bounce_status.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_mesh_status.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status_adhoc.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status_flink.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_status_tron.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/instance_tasks.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/integer_and_error.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/kubernetes_container.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/kubernetes_pod.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/kubernetes_version.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/resource.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/resource_item.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/resource_value.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/smartstack_backend.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/smartstack_location.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/smartstack_status.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model/task_tail_lines.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/model_utils.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/models/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/paastaapi/rest.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/prune_completed_pods.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/puppet_service_tools.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/py.typed +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/remote_git.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/run-paasta-api-playground.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/secret_providers/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/secret_providers/vault.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/secret_tools.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/setup_istio_mesh.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/setup_kubernetes_cr.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/setup_kubernetes_crd.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/setup_kubernetes_job.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/setup_tron_namespace.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/slack.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/smartstack_tools.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/spark_tools.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
- {paasta-tools-1.12.0/paasta_tools/metrics → paasta-tools-1.13.0/paasta_tools/tron}/__init__.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/tron/client.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/tron/tron_command_context.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/tron/tron_timeutils.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/tron_tools.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/utils.py +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools.egg-info/dependency_links.txt +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools.egg-info/entry_points.txt +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools.egg-info/requires.txt +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools.egg-info/top_level.txt +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/pyproject.toml +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/requirements-minimal.txt +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/setup.cfg +0 -0
- {paasta-tools-1.12.0 → paasta-tools-1.13.0}/setup.py +0 -0
|
@@ -31,6 +31,7 @@ from wsgicors import CORS
|
|
|
31
31
|
import paasta_tools.api
|
|
32
32
|
from paasta_tools import kubernetes_tools
|
|
33
33
|
from paasta_tools.api import settings
|
|
34
|
+
from paasta_tools.api.tweens import auth
|
|
34
35
|
from paasta_tools.api.tweens import profiling
|
|
35
36
|
from paasta_tools.api.tweens import request_logger
|
|
36
37
|
from paasta_tools.utils import load_system_paasta_config
|
|
@@ -79,6 +80,18 @@ def parse_paasta_api_args():
|
|
|
79
80
|
default=4,
|
|
80
81
|
help="Number of gunicorn workers to run",
|
|
81
82
|
)
|
|
83
|
+
parser.add_argument(
|
|
84
|
+
"--auth-endpoint",
|
|
85
|
+
type=str,
|
|
86
|
+
default="",
|
|
87
|
+
help="External API authorization endpoint",
|
|
88
|
+
)
|
|
89
|
+
parser.add_argument(
|
|
90
|
+
"--auth-enforce",
|
|
91
|
+
action="store_true",
|
|
92
|
+
default=False,
|
|
93
|
+
help="Enforce API authorization",
|
|
94
|
+
)
|
|
82
95
|
args = parser.parse_args()
|
|
83
96
|
return args
|
|
84
97
|
|
|
@@ -105,6 +118,7 @@ def make_app(global_config=None):
|
|
|
105
118
|
|
|
106
119
|
config.include("pyramid_swagger")
|
|
107
120
|
config.include(request_logger)
|
|
121
|
+
config.include(auth)
|
|
108
122
|
|
|
109
123
|
config.add_route(
|
|
110
124
|
"flink.service.instance.jobs", "/v1/flink/{service}/{instance}/jobs"
|
|
@@ -257,6 +271,11 @@ def main(argv=None):
|
|
|
257
271
|
if args.cluster:
|
|
258
272
|
os.environ["PAASTA_API_CLUSTER"] = args.cluster
|
|
259
273
|
|
|
274
|
+
if args.auth_endpoint:
|
|
275
|
+
os.environ["PAASTA_API_AUTH_ENDPOINT"] = args.auth_endpoint
|
|
276
|
+
if args.auth_enforce:
|
|
277
|
+
os.environ["PAASTA_API_AUTH_ENFORCE"] = "1"
|
|
278
|
+
|
|
260
279
|
gunicorn_args = [
|
|
261
280
|
"gunicorn",
|
|
262
281
|
"-w",
|
|
@@ -48,6 +48,7 @@ def get_paasta_oapi_client_by_url(
|
|
|
48
48
|
cert_file: Optional[str] = None,
|
|
49
49
|
key_file: Optional[str] = None,
|
|
50
50
|
ssl_ca_cert: Optional[str] = None,
|
|
51
|
+
auth_token: str = "",
|
|
51
52
|
) -> PaastaOApiClient:
|
|
52
53
|
server_variables = dict(scheme=parsed_url.scheme, host=parsed_url.netloc)
|
|
53
54
|
config = paastaapi.Configuration(
|
|
@@ -63,6 +64,9 @@ def get_paasta_oapi_client_by_url(
|
|
|
63
64
|
client.rest_client.pool_manager.connection_pool_kw[
|
|
64
65
|
"timeout"
|
|
65
66
|
] = load_system_paasta_config().get_api_client_timeout()
|
|
67
|
+
# SEC-19555: support auth in PaaSTA APIs
|
|
68
|
+
if auth_token:
|
|
69
|
+
client.set_default_header("Authorization", f"Bearer {auth_token}")
|
|
66
70
|
return PaastaOApiClient(
|
|
67
71
|
autoscaler=paastaapis.AutoscalerApi(client),
|
|
68
72
|
default=paastaapis.DefaultApi(client),
|
|
@@ -79,6 +83,7 @@ def get_paasta_oapi_client(
|
|
|
79
83
|
cluster: str = None,
|
|
80
84
|
system_paasta_config: SystemPaastaConfig = None,
|
|
81
85
|
http_res: bool = False,
|
|
86
|
+
auth_token: str = "",
|
|
82
87
|
) -> Optional[PaastaOApiClient]:
|
|
83
88
|
if not system_paasta_config:
|
|
84
89
|
system_paasta_config = load_system_paasta_config()
|
|
@@ -94,4 +99,6 @@ def get_paasta_oapi_client(
|
|
|
94
99
|
parsed = urlparse(api_endpoints[cluster])
|
|
95
100
|
cert_file = key_file = ssl_ca_cert = None
|
|
96
101
|
|
|
97
|
-
return get_paasta_oapi_client_by_url(
|
|
102
|
+
return get_paasta_oapi_client_by_url(
|
|
103
|
+
parsed, cert_file, key_file, ssl_ca_cert, auth_token
|
|
104
|
+
)
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright 2015-2016 Yelp Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
import json
|
|
16
|
+
import logging
|
|
17
|
+
import os
|
|
18
|
+
from typing import NamedTuple
|
|
19
|
+
from typing import Optional
|
|
20
|
+
|
|
21
|
+
import cachetools.func
|
|
22
|
+
import pyramid
|
|
23
|
+
import requests
|
|
24
|
+
from pyramid.config import Configurator
|
|
25
|
+
from pyramid.httpexceptions import HTTPForbidden
|
|
26
|
+
from pyramid.registry import Registry
|
|
27
|
+
from pyramid.request import Request
|
|
28
|
+
from pyramid.response import Response
|
|
29
|
+
|
|
30
|
+
from paasta_tools.api.tweens import Handler
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
logger = logging.getLogger(__name__)
|
|
34
|
+
AUTH_CACHE_SIZE = 50000
|
|
35
|
+
AUTH_CACHE_TTL = 30 * 60
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
class AuthorizationOutcome(NamedTuple):
|
|
39
|
+
authorized: bool
|
|
40
|
+
reason: str
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class AuthTweenFactory:
|
|
44
|
+
def __init__(self, handler: Handler, registry: Registry) -> None:
|
|
45
|
+
self.handler = handler
|
|
46
|
+
self.registry = registry
|
|
47
|
+
self.enforce = bool(os.getenv("PAASTA_API_AUTH_ENFORCE", ""))
|
|
48
|
+
self.endpoint = os.getenv("PAASTA_API_AUTH_ENDPOINT")
|
|
49
|
+
self.session = requests.Session()
|
|
50
|
+
|
|
51
|
+
def __call__(self, request: Request) -> Response:
|
|
52
|
+
"""
|
|
53
|
+
Extracts relevant metadata from request, and checks if it is authorized
|
|
54
|
+
"""
|
|
55
|
+
token = request.headers.get("Authorization", "").strip()
|
|
56
|
+
token = token.split()[-1] if token else "" # removes "Bearer" prefix
|
|
57
|
+
auth_outcome = self.is_request_authorized(
|
|
58
|
+
request.path,
|
|
59
|
+
token,
|
|
60
|
+
request.method,
|
|
61
|
+
request.swagger_data.get("service", None),
|
|
62
|
+
)
|
|
63
|
+
if self.enforce and not auth_outcome.authorized:
|
|
64
|
+
return HTTPForbidden(
|
|
65
|
+
body=json.dumps({"reason": auth_outcome.reason}),
|
|
66
|
+
headers={"X-Auth-Failure-Reason": auth_outcome.reason},
|
|
67
|
+
content_type="application/json",
|
|
68
|
+
charset="utf-8",
|
|
69
|
+
)
|
|
70
|
+
return self.handler(request)
|
|
71
|
+
|
|
72
|
+
@cachetools.func.ttl_cache(maxsize=AUTH_CACHE_SIZE, ttl=AUTH_CACHE_TTL)
|
|
73
|
+
def is_request_authorized(
|
|
74
|
+
self,
|
|
75
|
+
path: str,
|
|
76
|
+
token: str,
|
|
77
|
+
method: str,
|
|
78
|
+
service: Optional[str],
|
|
79
|
+
) -> AuthorizationOutcome:
|
|
80
|
+
"""Check if API request is authorized
|
|
81
|
+
|
|
82
|
+
:param str path: API path
|
|
83
|
+
:param str token: authentication token
|
|
84
|
+
:param str method: http method
|
|
85
|
+
:return: auth outcome
|
|
86
|
+
"""
|
|
87
|
+
try:
|
|
88
|
+
response = self.session.post(
|
|
89
|
+
url=self.endpoint,
|
|
90
|
+
json={
|
|
91
|
+
"input": {
|
|
92
|
+
"path": path,
|
|
93
|
+
"backend": "paasta",
|
|
94
|
+
"token": token,
|
|
95
|
+
"method": method,
|
|
96
|
+
"service": service,
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
timeout=2,
|
|
100
|
+
).json()
|
|
101
|
+
except Exception as e:
|
|
102
|
+
logger.exception(f"Issue communicating with auth endpoint: {e}")
|
|
103
|
+
return AuthorizationOutcome(False, "Auth backend error")
|
|
104
|
+
|
|
105
|
+
auth_result_allowed = response.get("result", {}).get("allowed")
|
|
106
|
+
if auth_result_allowed is None:
|
|
107
|
+
return AuthorizationOutcome(False, "Malformed auth response")
|
|
108
|
+
|
|
109
|
+
if not auth_result_allowed:
|
|
110
|
+
reason = response["result"].get("reason", "Denied")
|
|
111
|
+
return AuthorizationOutcome(False, reason)
|
|
112
|
+
|
|
113
|
+
reason = response["result"].get("reason", "Ok")
|
|
114
|
+
return AuthorizationOutcome(True, reason)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def includeme(config: Configurator):
|
|
118
|
+
if os.getenv("PAASTA_API_AUTH_ENDPOINT"):
|
|
119
|
+
config.add_tween(
|
|
120
|
+
"paasta_tools.api.tweens.auth.AuthTweenFactory",
|
|
121
|
+
under=(
|
|
122
|
+
pyramid.tweens.INGRESS,
|
|
123
|
+
"paasta_tools.api.tweens.request_logger.request_logger_tween_factory",
|
|
124
|
+
),
|
|
125
|
+
)
|
|
@@ -148,6 +148,7 @@ from paasta_tools.long_running_service_tools import METRICS_PROVIDER_GUNICORN
|
|
|
148
148
|
from paasta_tools.long_running_service_tools import METRICS_PROVIDER_PISCINA
|
|
149
149
|
from paasta_tools.long_running_service_tools import METRICS_PROVIDER_PROMQL
|
|
150
150
|
from paasta_tools.long_running_service_tools import METRICS_PROVIDER_UWSGI
|
|
151
|
+
from paasta_tools.long_running_service_tools import METRICS_PROVIDER_UWSGI_V2
|
|
151
152
|
from paasta_tools.long_running_service_tools import ServiceNamespaceConfig
|
|
152
153
|
from paasta_tools.secret_tools import get_secret_name_from_ref
|
|
153
154
|
from paasta_tools.secret_tools import is_secret_ref
|
|
@@ -857,6 +858,20 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
|
|
|
857
858
|
),
|
|
858
859
|
),
|
|
859
860
|
)
|
|
861
|
+
elif provider["type"] == METRICS_PROVIDER_UWSGI_V2:
|
|
862
|
+
return V2MetricSpec(
|
|
863
|
+
type="Object",
|
|
864
|
+
object=V2ObjectMetricSource(
|
|
865
|
+
metric=V2MetricIdentifier(name=prometheus_hpa_metric_name),
|
|
866
|
+
described_object=V2CrossVersionObjectReference(
|
|
867
|
+
api_version="apps/v1", kind="Deployment", name=name
|
|
868
|
+
),
|
|
869
|
+
target=V2MetricTarget(
|
|
870
|
+
type="AverageValue",
|
|
871
|
+
average_value=target,
|
|
872
|
+
),
|
|
873
|
+
),
|
|
874
|
+
)
|
|
860
875
|
|
|
861
876
|
log.error(
|
|
862
877
|
f"Unknown metrics_provider specified: {provider['type']} for\
|
|
@@ -44,6 +44,7 @@ DEFAULT_GUNICORN_AUTOSCALING_MOVING_AVERAGE_WINDOW = 1800
|
|
|
44
44
|
|
|
45
45
|
METRICS_PROVIDER_CPU = "cpu"
|
|
46
46
|
METRICS_PROVIDER_UWSGI = "uwsgi"
|
|
47
|
+
METRICS_PROVIDER_UWSGI_V2 = "uwsgi-v2"
|
|
47
48
|
METRICS_PROVIDER_GUNICORN = "gunicorn"
|
|
48
49
|
METRICS_PROVIDER_PISCINA = "piscina"
|
|
49
50
|
METRICS_PROVIDER_ACTIVE_REQUESTS = "active-requests"
|
|
@@ -52,6 +53,7 @@ METRICS_PROVIDER_PROMQL = "arbitrary_promql"
|
|
|
52
53
|
ALL_METRICS_PROVIDERS = [
|
|
53
54
|
METRICS_PROVIDER_CPU,
|
|
54
55
|
METRICS_PROVIDER_UWSGI,
|
|
56
|
+
METRICS_PROVIDER_UWSGI_V2,
|
|
55
57
|
METRICS_PROVIDER_GUNICORN,
|
|
56
58
|
METRICS_PROVIDER_PISCINA,
|
|
57
59
|
METRICS_PROVIDER_ACTIVE_REQUESTS,
|
|
@@ -59,6 +59,7 @@ from paasta_tools.long_running_service_tools import METRICS_PROVIDER_GUNICORN
|
|
|
59
59
|
from paasta_tools.long_running_service_tools import METRICS_PROVIDER_PISCINA
|
|
60
60
|
from paasta_tools.long_running_service_tools import METRICS_PROVIDER_PROMQL
|
|
61
61
|
from paasta_tools.long_running_service_tools import METRICS_PROVIDER_UWSGI
|
|
62
|
+
from paasta_tools.long_running_service_tools import METRICS_PROVIDER_UWSGI_V2
|
|
62
63
|
from paasta_tools.paasta_service_config_loader import PaastaServiceConfigLoader
|
|
63
64
|
from paasta_tools.utils import DEFAULT_SOA_DIR
|
|
64
65
|
from paasta_tools.utils import get_services_for_cluster
|
|
@@ -209,6 +210,10 @@ def create_instance_scaling_rule(
|
|
|
209
210
|
return create_instance_uwsgi_scaling_rule(
|
|
210
211
|
service, instance_config, metrics_provider_config, paasta_cluster
|
|
211
212
|
)
|
|
213
|
+
if metrics_provider_config["type"] == METRICS_PROVIDER_UWSGI_V2:
|
|
214
|
+
return create_instance_uwsgi_v2_scaling_rule(
|
|
215
|
+
service, instance_config, metrics_provider_config, paasta_cluster
|
|
216
|
+
)
|
|
212
217
|
if metrics_provider_config["type"] == METRICS_PROVIDER_PISCINA:
|
|
213
218
|
return create_instance_piscina_scaling_rule(
|
|
214
219
|
service, instance_config, metrics_provider_config, paasta_cluster
|
|
@@ -445,6 +450,79 @@ def create_instance_uwsgi_scaling_rule(
|
|
|
445
450
|
}
|
|
446
451
|
|
|
447
452
|
|
|
453
|
+
def create_instance_uwsgi_v2_scaling_rule(
|
|
454
|
+
service: str,
|
|
455
|
+
instance_config: KubernetesDeploymentConfig,
|
|
456
|
+
metrics_provider_config: MetricsProviderDict,
|
|
457
|
+
paasta_cluster: str,
|
|
458
|
+
) -> PrometheusAdapterRule:
|
|
459
|
+
"""
|
|
460
|
+
Creates a Prometheus adapter rule config for a given service instance.
|
|
461
|
+
"""
|
|
462
|
+
instance = instance_config.instance
|
|
463
|
+
moving_average_window = metrics_provider_config.get(
|
|
464
|
+
"moving_average_window_seconds", DEFAULT_UWSGI_AUTOSCALING_MOVING_AVERAGE_WINDOW
|
|
465
|
+
)
|
|
466
|
+
deployment_name = get_kubernetes_app_name(service=service, instance=instance)
|
|
467
|
+
|
|
468
|
+
# In order for autoscaling to work safely while a service migrates from one namespace to another, the HPA needs to
|
|
469
|
+
# make sure that the deployment in the new namespace is scaled up enough to handle _all_ the load.
|
|
470
|
+
# This is because once the new deployment is 100% healthy, cleanup_kubernetes_job will delete the deployment out of
|
|
471
|
+
# the old namespace all at once, suddenly putting all the load onto the deployment in the new namespace.
|
|
472
|
+
# To ensure this, we must NOT filter on namespace in worker_filter_terms (which is used when calculating total_load.
|
|
473
|
+
# This makes sure that desired_instances includes load from all namespaces.
|
|
474
|
+
worker_filter_terms = f"paasta_cluster='{paasta_cluster}',paasta_service='{service}',paasta_instance='{instance}'"
|
|
475
|
+
|
|
476
|
+
# k8s:deployment:pods_status_ready is a metric created by summing kube_pod_status_ready
|
|
477
|
+
# over paasta service/instance/cluster. it counts the number of ready pods in a paasta
|
|
478
|
+
# deployment.
|
|
479
|
+
ready_pods = f"""
|
|
480
|
+
(sum(
|
|
481
|
+
k8s:deployment:pods_status_ready{{{worker_filter_terms}}} >= 0
|
|
482
|
+
or
|
|
483
|
+
max_over_time(
|
|
484
|
+
k8s:deployment:pods_status_ready{{{worker_filter_terms}}}[{DEFAULT_EXTRAPOLATION_TIME}s]
|
|
485
|
+
)
|
|
486
|
+
) by (kube_deployment))
|
|
487
|
+
"""
|
|
488
|
+
load_per_instance = f"""
|
|
489
|
+
avg(
|
|
490
|
+
uwsgi_worker_busy{{{worker_filter_terms}}}
|
|
491
|
+
) by (kube_pod, kube_deployment)
|
|
492
|
+
"""
|
|
493
|
+
missing_instances = f"""
|
|
494
|
+
clamp_min(
|
|
495
|
+
{ready_pods} - count({load_per_instance}) by (kube_deployment),
|
|
496
|
+
0
|
|
497
|
+
)
|
|
498
|
+
"""
|
|
499
|
+
total_load = f"""
|
|
500
|
+
(
|
|
501
|
+
sum(
|
|
502
|
+
{load_per_instance}
|
|
503
|
+
) by (kube_deployment)
|
|
504
|
+
+
|
|
505
|
+
{missing_instances}
|
|
506
|
+
)
|
|
507
|
+
"""
|
|
508
|
+
total_load_smoothed = f"""
|
|
509
|
+
avg_over_time(
|
|
510
|
+
(
|
|
511
|
+
{total_load}
|
|
512
|
+
)[{moving_average_window}s:]
|
|
513
|
+
)
|
|
514
|
+
"""
|
|
515
|
+
|
|
516
|
+
metric_name = f"{deployment_name}-uwsgi-v2-prom"
|
|
517
|
+
|
|
518
|
+
return {
|
|
519
|
+
"name": {"as": metric_name},
|
|
520
|
+
"seriesQuery": f"uwsgi_worker_busy{{{worker_filter_terms}}}",
|
|
521
|
+
"resources": {"template": "kube_<<.Resource>>"},
|
|
522
|
+
"metricsQuery": _minify_promql(total_load_smoothed),
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
|
|
448
526
|
def create_instance_piscina_scaling_rule(
|
|
449
527
|
service: str,
|
|
450
528
|
instance_config: KubernetesDeploymentConfig,
|
|
@@ -99,6 +99,7 @@ paasta_tools/api/client.py
|
|
|
99
99
|
paasta_tools/api/settings.py
|
|
100
100
|
paasta_tools/api/api_docs/swagger.json
|
|
101
101
|
paasta_tools/api/tweens/__init__.py
|
|
102
|
+
paasta_tools/api/tweens/auth.py
|
|
102
103
|
paasta_tools/api/tweens/profiling.py
|
|
103
104
|
paasta_tools/api/tweens/request_logger.py
|
|
104
105
|
paasta_tools/api/views/__init__.py
|
|
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.12.0 → paasta-tools-1.13.0}/paasta_tools/autoscaling/autoscaling_service_lib.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/autoscaling/max_all_k8s_services.py
RENAMED
|
File without changes
|
{paasta-tools-1.12.0 → paasta-tools-1.13.0}/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.12.0 → paasta-tools-1.13.0}/paasta_tools/check_kubernetes_services_replication.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/check_services_replication_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta-tools-1.12.0 → paasta-tools-1.13.0}/paasta_tools/cli/cmds/pause_service_autoscaler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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
|