paasta-tools 1.26.1__tar.gz → 1.27.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.26.1/paasta_tools.egg-info → paasta_tools-1.27.0}/PKG-INFO +1 -1
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/__init__.py +1 -1
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/api_docs/swagger.json +16 -3
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/views/autoscaler.py +60 -23
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/autoscale.py +38 -17
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/kubernetes/application/controller_wrappers.py +4 -1
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/kubernetes_tools.py +7 -3
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/autoscaling_override.py +7 -6
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/inline_response202.py +5 -2
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/setup_kubernetes_job.py +10 -4
- {paasta_tools-1.26.1 → paasta_tools-1.27.0/paasta_tools.egg-info}/PKG-INFO +1 -1
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/LICENSE +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/MANIFEST.in +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/README.md +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/k8s_itests/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/k8s_itests/test_autoscaling.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/k8s_itests/utils.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/adhoc_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/api.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/client.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/settings.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/tweens/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/tweens/auth.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/tweens/profiling.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/tweens/request_logger.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/views/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/views/exception.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/views/flink.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/views/instance.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/views/pause_autoscaler.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/views/remote_run.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/views/resources.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/views/service.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/api/views/version.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/apply_external_resources.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/async_utils.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/autoscaling/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/autoscaling/forecasting.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/autoscaling/utils.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/bounce_lib.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/broadcast_log_to_services.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cassandracluster_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/check_autoscaler_max_instances.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/check_flink_services_health.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/check_kubernetes_api.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/check_kubernetes_services_replication.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/check_oom_events.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/check_services_replication_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/check_spark_jobs.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cleanup_expired_autoscaling_overrides.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cleanup_tron_namespaces.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/authentication.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cli.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/check.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/cook_image.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/get_image_version.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/info.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/itest.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/list.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/list_clusters.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/list_namespaces.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/local_run.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/logs.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/mesh_status.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/remote_run.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/rollback.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/secret.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/security_check.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/spark_run.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/status.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/validate.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/fsm/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/fsm/autosuggest.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/fsm/template/README.md +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/fsm_cmd.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/schemas/autoscaling_schema.json +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/schemas/eks_schema.json +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/schemas/kubernetes_schema.json +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/schemas/service_schema.json +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/schemas/smartstack_schema.json +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/schemas/tron_schema.json +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cli/utils.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/clusterman.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/config_utils.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/check_orphans.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/create_paasta_playground.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/habitat_fixer.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/ide_helper.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/kill_bad_containers.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/mock_patch_checker.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/render_template.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/service_shard_remove.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/service_shard_update.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/shared_ip_check.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/delete_kubernetes_deployments.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/deployment_utils.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/docker_wrapper.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/docker_wrapper_imports.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/drain_lib.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/dump_locally_running_services.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/eks_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/envoy_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/firewall.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/firewall_logging.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/firewall_update.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/flink_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/flinkeks_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/frameworks/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/frameworks/constraints.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/frameworks/native_scheduler.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/frameworks/native_service_config.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/frameworks/task_store.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/generate_all_deployments +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/generate_authenticating_services.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/generate_deployments_for_service.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/generate_services_file.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/generate_services_yaml.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/hacheck.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/instance/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/instance/kubernetes.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/iptables.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/kafkacluster_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/kubernetes/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/kubernetes/application/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/kubernetes/application/tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/kubernetes/bin/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/kubernetes/bin/paasta_cleanup_remote_run_resources.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/kubernetes/remote_run.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/list_kubernetes_service_instances.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/list_tron_namespaces.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/long_running_service_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/mac_address.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/marathon_dashboard.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/mesos/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/mesos/cfg.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/mesos/cluster.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/mesos/exceptions.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/mesos/framework.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/mesos/log.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/mesos/master.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/mesos/mesos_file.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/mesos/parallel.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/mesos/slave.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/mesos/task.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/mesos/util.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/mesos/zookeeper.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/mesos_maintenance.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/mesos_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/metrics/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/metrics/metastatus_lib.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/metrics/metrics_lib.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/monitoring/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/monitoring_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/monkrelaycluster_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/nrtsearchservice_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/oom_logger.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paasta_deploy_tron_jobs +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paasta_execute_docker_command.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paasta_native_serviceinit.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paasta_service_config_loader.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/api/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/api/autoscaler_api.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/api/default_api.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/api/remote_run_api.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/api/resources_api.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/api/service_api.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/api_client.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/apis/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/configuration.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/exceptions.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/adhoc_launch_history.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/deploy_queue.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/envoy_backend.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/envoy_location.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/envoy_status.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/flink_cluster_overview.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/flink_config.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/flink_job.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/flink_job_details.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/flink_jobs.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/float_and_error.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/hpa_metric.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/inline_object.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/inline_response200.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/inline_response2001.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/inline_response403.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/instance_bounce_status.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/instance_mesh_status.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/instance_status.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/instance_status_adhoc.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/instance_status_flink.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/instance_status_tron.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/instance_tasks.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/integer_and_error.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/kubernetes_container.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/kubernetes_pod.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/kubernetes_version.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/remote_run_outcome.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/remote_run_start.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/remote_run_stop.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/remote_run_token.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/resource.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/resource_item.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/resource_value.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/smartstack_backend.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/smartstack_location.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/smartstack_status.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/task_tail_lines.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model_utils.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/models/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/rest.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/prune_completed_pods.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/puppet_service_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/py.typed +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/remote_git.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/run-paasta-api-playground.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/secret_providers/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/secret_providers/vault.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/secret_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/setup_istio_mesh.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/setup_kubernetes_cr.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/setup_kubernetes_crd.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/setup_prometheus_adapter_config.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/setup_tron_namespace.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/slack.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/smartstack_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/spark_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/tron/__init__.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/tron/client.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/tron/tron_command_context.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/tron/tron_timeutils.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/tron_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/utils.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/yaml_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools.egg-info/SOURCES.txt +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools.egg-info/dependency_links.txt +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools.egg-info/entry_points.txt +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools.egg-info/requires.txt +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools.egg-info/top_level.txt +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/pyproject.toml +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/requirements-minimal.txt +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/setup.cfg +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/setup.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_adhoc_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_apply_external_resources.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_async_utils.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_bounce_lib.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_check_flink_services_health.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_check_kubernetes_services_replication.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_check_oom_events.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_check_service_replication_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_check_spark_jobs.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_cleanup_kubernetes_jobs.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_config_utils.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_delete_kubernetes_deployments.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_deployment_utils.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_docker_wrapper.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_drain_lib.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_eks_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_envoy_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_firewall.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_firewall_logging.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_firewall_update.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_flink_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_flinkeks_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_generate_authenticating_services.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_generate_deployments_for_service.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_generate_services_file.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_generate_services_yaml.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_hacheck.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_iptables.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_kubernetes_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_list_kubernetes_service_instances.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_long_running_service_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_mac_address.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_mesos_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_monitoring_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_nrtsearchserviceseks_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_oom_logger.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_paasta_execute_docker_command.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_paasta_service_config_loader.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_puppet_service_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_remote_git.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_secret_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_setup_istio_mesh.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_setup_kubernetes_cr.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_setup_kubernetes_job.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_setup_prometheus_adapter_config.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_slack.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_smartstack_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_spark_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_task_processing.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_tron_tools.py +0 -0
- {paasta_tools-1.26.1 → paasta_tools-1.27.0}/tests/test_utils.py +0 -0
|
@@ -322,8 +322,14 @@
|
|
|
322
322
|
},
|
|
323
323
|
"min_instances": {
|
|
324
324
|
"type": "integer",
|
|
325
|
+
"x-nullable": true,
|
|
325
326
|
"description": "Minimum number of instances to run"
|
|
326
327
|
},
|
|
328
|
+
"max_instances": {
|
|
329
|
+
"type": "integer",
|
|
330
|
+
"x-nullable": true,
|
|
331
|
+
"description": "Maximum number of instances to run"
|
|
332
|
+
},
|
|
327
333
|
"expire_after": {
|
|
328
334
|
"type": "number",
|
|
329
335
|
"format": "float",
|
|
@@ -1724,17 +1730,24 @@
|
|
|
1724
1730
|
"properties": {
|
|
1725
1731
|
"min_instances": {
|
|
1726
1732
|
"type": "integer",
|
|
1727
|
-
"
|
|
1728
|
-
"
|
|
1733
|
+
"x-nullable": true,
|
|
1734
|
+
"description": "Minimum number of instances to run"
|
|
1735
|
+
},
|
|
1736
|
+
"max_instances": {
|
|
1737
|
+
"type": "integer",
|
|
1738
|
+
"x-nullable": true,
|
|
1739
|
+
"description": "Maximum number of instances to run"
|
|
1729
1740
|
},
|
|
1730
1741
|
"expire_after": {
|
|
1731
1742
|
"type": "number",
|
|
1732
1743
|
"format": "float",
|
|
1733
|
-
"description": "Unix timestamp when this override is no longer valid"
|
|
1744
|
+
"description": "Unix timestamp when this override is no longer valid",
|
|
1745
|
+
"minimum": 1
|
|
1734
1746
|
}
|
|
1735
1747
|
},
|
|
1736
1748
|
"required": [
|
|
1737
1749
|
"min_instances",
|
|
1750
|
+
"max_instances",
|
|
1738
1751
|
"expire_after"
|
|
1739
1752
|
]
|
|
1740
1753
|
},
|
|
@@ -136,7 +136,7 @@ def set_autoscaling_override(request):
|
|
|
136
136
|
Required parameters:
|
|
137
137
|
- service: The service name
|
|
138
138
|
- instance: The instance name
|
|
139
|
-
- min_instances: The minimum number of instances to enforce
|
|
139
|
+
- min_instances AND/OR max_instances: The minimum and/or maximum number of instances to enforce
|
|
140
140
|
- expires_after: unix timestamp after which the override is no longer valid
|
|
141
141
|
"""
|
|
142
142
|
service = request.swagger_data.get("service")
|
|
@@ -156,24 +156,29 @@ def set_autoscaling_override(request):
|
|
|
156
156
|
|
|
157
157
|
json_body = request.swagger_data.get("json_body", {})
|
|
158
158
|
min_instances_override = json_body.get("min_instances")
|
|
159
|
-
|
|
159
|
+
max_instances_override = json_body.get("max_instances")
|
|
160
|
+
expire_after = json_body["expire_after"]
|
|
160
161
|
|
|
161
|
-
|
|
162
|
-
|
|
162
|
+
# ideally we'd enforce this in our api spec - but since we're using both swagger and oapi, that's not quite so simple
|
|
163
|
+
if not min_instances_override and not max_instances_override:
|
|
164
|
+
raise ApiFailure(
|
|
165
|
+
"At least one of min_instances or max_instances must be provided", 400
|
|
166
|
+
)
|
|
163
167
|
|
|
164
|
-
|
|
165
|
-
|
|
168
|
+
# we can't currently enforce this in the API spec since the generator seems to have issues generating a validator
|
|
169
|
+
# for a nullable integer field with a minimum value as we get errors like:
|
|
170
|
+
# `TypeError: '<' not supported between instances of 'NoneType' and 'int'`
|
|
171
|
+
# that said, unless someone is manually crafting requests, this should never happen
|
|
172
|
+
# since the CLI includes a check for this as well
|
|
173
|
+
if min_instances_override is not None and min_instances_override < 1:
|
|
174
|
+
raise ApiFailure("min_instances must be a positive integer", 400)
|
|
175
|
+
if max_instances_override is not None and max_instances_override < 1:
|
|
176
|
+
raise ApiFailure("max_instances must be a positive integer", 400)
|
|
166
177
|
|
|
167
|
-
|
|
168
|
-
if
|
|
178
|
+
# otherwise, we could have folks accidentally enable autoscaling (using cpu) for a non-autoscaled
|
|
179
|
+
if instance_config.is_autoscaling_enabled() is None:
|
|
169
180
|
raise ApiFailure(f"Autoscaling is not enabled for {service}.{instance}", 400)
|
|
170
181
|
|
|
171
|
-
if max_instances < min_instances_override:
|
|
172
|
-
raise ApiFailure(
|
|
173
|
-
f"min_instances ({min_instances_override}) cannot be greater than max_instances ({max_instances})",
|
|
174
|
-
400,
|
|
175
|
-
)
|
|
176
|
-
|
|
177
182
|
configmap, created = get_or_create_autoscaling_overrides_configmap()
|
|
178
183
|
if created:
|
|
179
184
|
log.info("Created new autoscaling overrides ConfigMap")
|
|
@@ -182,23 +187,54 @@ def set_autoscaling_override(request):
|
|
|
182
187
|
if not configmap.data:
|
|
183
188
|
configmap.data = {}
|
|
184
189
|
|
|
185
|
-
override_data = {
|
|
186
|
-
"min_instances": min_instances_override,
|
|
187
|
-
"created_at": datetime.now(timezone.utc).isoformat(),
|
|
188
|
-
# NOTE: we may want to also allow setting a max_instances override in the future, but if we do that
|
|
189
|
-
# we'd probably want to force folks to either set one or both and share the same expiration time
|
|
190
|
-
"expire_after": expire_after,
|
|
191
|
-
}
|
|
192
|
-
|
|
193
190
|
service_instance = f"{service}.{instance}"
|
|
194
191
|
existing_overrides = (
|
|
195
192
|
json.loads(configmap.data[service_instance])
|
|
196
193
|
if service_instance in configmap.data
|
|
197
194
|
else {}
|
|
198
195
|
)
|
|
199
|
-
|
|
196
|
+
|
|
197
|
+
# this is slightly funky as there's a hierarchy of what value to pick:
|
|
198
|
+
# 1. the override value provided in the request - as this should override any existing value
|
|
199
|
+
# 2. the existing override value in the configmap - this is used if we previously only set an override for min or
|
|
200
|
+
# max instances and now want to set a value for the other
|
|
201
|
+
# 3. the value from the instance config - this is used as a final fallback since this means no override is present
|
|
202
|
+
min_instances = (
|
|
203
|
+
min_instances_override
|
|
204
|
+
or existing_overrides.get("min_instances")
|
|
205
|
+
or instance_config.get_min_instances()
|
|
206
|
+
)
|
|
207
|
+
max_instances = (
|
|
208
|
+
max_instances_override
|
|
209
|
+
or existing_overrides.get("max_instances")
|
|
210
|
+
or instance_config.get_max_instances()
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
# NOTE: the max_instances check is unnecessary here, but type-checkers can't see that the is_autoscaling_enabled()
|
|
214
|
+
# check above ensures that max_instances is not None
|
|
215
|
+
if max_instances is None or max_instances < min_instances:
|
|
216
|
+
raise ApiFailure(
|
|
217
|
+
f"min_instances ({min_instances_override}) cannot be greater than max_instances ({max_instances})",
|
|
218
|
+
400,
|
|
219
|
+
)
|
|
220
|
+
|
|
221
|
+
override_data = {
|
|
222
|
+
"min_instances": min_instances_override,
|
|
223
|
+
"max_instances": max_instances_override,
|
|
224
|
+
"created_at": datetime.now(timezone.utc).isoformat(),
|
|
225
|
+
"expire_after": expire_after,
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
# NOTE: we need to strip out null values from the incoming overrides since otherwise we'd remove existing overrides
|
|
229
|
+
# (since if only --set-min or --set-max is provided, the other will be sent as None)
|
|
230
|
+
merged_overrides = {
|
|
231
|
+
**existing_overrides,
|
|
232
|
+
**{k: v for k, v in override_data.items() if v is not None},
|
|
233
|
+
}
|
|
200
234
|
serialized_overrides = json.dumps(merged_overrides)
|
|
201
235
|
|
|
236
|
+
# note: we can only append with patching - if we ever want to remove overrides outside of the cleanup cronjob,
|
|
237
|
+
# we would need to change this to use replace_namespaced_configmap
|
|
202
238
|
patch_namespaced_configmap(
|
|
203
239
|
name=AUTOSCALING_OVERRIDES_CONFIGMAP_NAME,
|
|
204
240
|
namespace=AUTOSCALING_OVERRIDES_CONFIGMAP_NAMESPACE,
|
|
@@ -213,6 +249,7 @@ def set_autoscaling_override(request):
|
|
|
213
249
|
"instance": instance,
|
|
214
250
|
"cluster": cluster,
|
|
215
251
|
"min_instances": min_instances_override,
|
|
252
|
+
"max_instances": max_instances_override,
|
|
216
253
|
"expire_after": expire_after,
|
|
217
254
|
"status": "SUCCESS",
|
|
218
255
|
}
|
|
@@ -75,10 +75,18 @@ def add_subparser(subparsers):
|
|
|
75
75
|
else autoscale_parser.error("Minimum instances must be >= 1"),
|
|
76
76
|
default=None,
|
|
77
77
|
)
|
|
78
|
+
override_group.add_argument(
|
|
79
|
+
"--set-max",
|
|
80
|
+
help="Set the maximum number of replicas (must be >= 1). Requires --for parameter.",
|
|
81
|
+
type=lambda x: int(x)
|
|
82
|
+
if int(x) >= 1
|
|
83
|
+
else autoscale_parser.error("Maximum instances must be >= 1"),
|
|
84
|
+
default=None,
|
|
85
|
+
)
|
|
78
86
|
override_group.add_argument(
|
|
79
87
|
"--for",
|
|
80
88
|
dest="duration",
|
|
81
|
-
help="Duration for the temporary override (e.g. '3h', '30m'). Required when using --set-min.",
|
|
89
|
+
help="Duration for the temporary override (e.g. '3h', '30m'). Required when using --set-min and/or --set-max.",
|
|
82
90
|
default=None,
|
|
83
91
|
)
|
|
84
92
|
|
|
@@ -113,22 +121,24 @@ def paasta_autoscale(args):
|
|
|
113
121
|
log.setLevel(logging.DEBUG)
|
|
114
122
|
service = figure_out_service_name(args)
|
|
115
123
|
|
|
116
|
-
if args.set_min is not None and not args.duration:
|
|
124
|
+
if (args.set_min is not None or args.set_max is not None) and not args.duration:
|
|
117
125
|
print(
|
|
118
126
|
PaastaColors.yellow(
|
|
119
|
-
"WARNING: --set-min requires --for parameter to specify duration - defaulting to 30m"
|
|
127
|
+
"WARNING: --set-min/--set-max usage requires --for parameter to specify duration - defaulting to 30m"
|
|
120
128
|
)
|
|
121
129
|
)
|
|
122
130
|
args.duration = "30m"
|
|
123
131
|
|
|
124
|
-
if args.duration is not None and args.set_min is None:
|
|
125
|
-
print(
|
|
132
|
+
if args.duration is not None and args.set_min is None and args.set_max is None:
|
|
133
|
+
print(
|
|
134
|
+
PaastaColors.red("Error: --for requires --set-min or --set-max parameter")
|
|
135
|
+
)
|
|
126
136
|
return 1
|
|
127
137
|
|
|
128
|
-
if args.set is not None and args.set_min is not None:
|
|
138
|
+
if args.set is not None and args.set_min is not None and args.set_max is not None:
|
|
129
139
|
print(
|
|
130
140
|
PaastaColors.red(
|
|
131
|
-
"Error: Cannot use both --set and --set-min at the same time"
|
|
141
|
+
"Error: Cannot use both --set and --set-min or --set-max at the same time"
|
|
132
142
|
)
|
|
133
143
|
)
|
|
134
144
|
return 1
|
|
@@ -159,9 +169,12 @@ def paasta_autoscale(args):
|
|
|
159
169
|
print("Could not connect to paasta api. Maybe you misspelled the cluster?")
|
|
160
170
|
return 1
|
|
161
171
|
|
|
172
|
+
# TODO: we should probably also make sure we set a couple other defaults - currently, it's possible for
|
|
173
|
+
# status/res/etc to be unbound in some code paths
|
|
174
|
+
err_reason = None
|
|
162
175
|
try:
|
|
163
176
|
# get current autoscaler count
|
|
164
|
-
if args.set is None and args.set_min is None:
|
|
177
|
+
if args.set is None and args.set_min is None and args.set_max is None:
|
|
165
178
|
log.debug("Getting the current autoscaler count...")
|
|
166
179
|
res, status, _ = api.autoscaler.get_autoscaler_count(
|
|
167
180
|
service=service, instance=args.instance, _return_http_data_only=False
|
|
@@ -187,7 +200,7 @@ def paasta_autoscale(args):
|
|
|
187
200
|
)
|
|
188
201
|
|
|
189
202
|
# set lower bound
|
|
190
|
-
elif args.set_min is not None:
|
|
203
|
+
elif args.set_min is not None or args.set_max is not None:
|
|
191
204
|
duration_seconds = parse_duration_to_seconds(args.duration)
|
|
192
205
|
if not duration_seconds:
|
|
193
206
|
print(
|
|
@@ -202,10 +215,11 @@ def paasta_autoscale(args):
|
|
|
202
215
|
expiration_time = time.time() + duration_seconds
|
|
203
216
|
|
|
204
217
|
log.debug(
|
|
205
|
-
f"
|
|
218
|
+
f"Sending the following overrides for duration {args.duration}: min_instances: {args.set_min}, max_instances: {args.set_max}."
|
|
206
219
|
)
|
|
207
220
|
msg = paastamodels.AutoscalingOverride(
|
|
208
221
|
min_instances=args.set_min,
|
|
222
|
+
max_instances=args.set_max,
|
|
209
223
|
expire_after=expiration_time,
|
|
210
224
|
)
|
|
211
225
|
|
|
@@ -224,28 +238,35 @@ def paasta_autoscale(args):
|
|
|
224
238
|
)
|
|
225
239
|
except api.api_error as exc:
|
|
226
240
|
status = exc.status
|
|
241
|
+
err_reason = exc.body
|
|
227
242
|
|
|
228
243
|
if not 200 <= status <= 299:
|
|
229
244
|
print(
|
|
230
245
|
PaastaColors.red(
|
|
231
|
-
f"ERROR: '{args.instance}' is not configured to autoscale OR you set
|
|
246
|
+
f"ERROR: '{args.instance}' is not configured to autoscale OR you set impossible {{min, max}}_instances, "
|
|
232
247
|
f"and `paasta autoscale` could not update it. "
|
|
233
248
|
f"If you want to be able to boost this service, please configure autoscaling for the service "
|
|
234
249
|
f"in its config file by setting min and max instances appropriately. Example: \n"
|
|
235
250
|
f"{args.instance}:\n"
|
|
236
251
|
f" min_instances: 5\n"
|
|
237
|
-
f" max_instances: 50"
|
|
252
|
+
f" max_instances: 50\n"
|
|
253
|
+
f"{err_reason}"
|
|
238
254
|
)
|
|
239
255
|
)
|
|
240
256
|
return 0
|
|
241
257
|
|
|
242
258
|
log.debug(f"Res: {res} Http: {status}")
|
|
243
|
-
if not args.set_min:
|
|
259
|
+
if not args.set_min and not args.set_max:
|
|
244
260
|
print(f"Desired instances: {res.desired_instances}")
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
261
|
+
else:
|
|
262
|
+
if args.set_min:
|
|
263
|
+
print(
|
|
264
|
+
f"Temporary override set for {args.service}.{args.instance} with minimum instances: {args.set_min}"
|
|
265
|
+
)
|
|
266
|
+
if args.set_max:
|
|
267
|
+
print(
|
|
268
|
+
f"Temporary override set for {args.service}.{args.instance} with maximum instances: {args.set_max}"
|
|
269
|
+
)
|
|
249
270
|
# folks using this might be in different timezones, so let's convert the expiration time to a few common ones
|
|
250
271
|
# to make it extra clear when the override will expire
|
|
251
272
|
epoch_time = datetime.fromtimestamp(res.expire_after)
|
|
@@ -301,7 +301,10 @@ class DeploymentWrapper(Application):
|
|
|
301
301
|
kube_client=kube_client,
|
|
302
302
|
namespace=self.item.metadata.namespace,
|
|
303
303
|
min_instances_override=(
|
|
304
|
-
self.hpa_override
|
|
304
|
+
self.hpa_override.get("min_instances") if self.hpa_override else None
|
|
305
|
+
),
|
|
306
|
+
max_instances_override=(
|
|
307
|
+
self.hpa_override.get("max_instances") if self.hpa_override else None
|
|
305
308
|
),
|
|
306
309
|
)
|
|
307
310
|
|
|
@@ -325,6 +325,7 @@ class DatastoreCredentialsConfig(TypedDict, total=False):
|
|
|
325
325
|
|
|
326
326
|
class HpaOverride(TypedDict):
|
|
327
327
|
min_instances: int
|
|
328
|
+
max_instances: int
|
|
328
329
|
expire_after: str
|
|
329
330
|
|
|
330
331
|
|
|
@@ -899,6 +900,7 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
|
|
|
899
900
|
kube_client: KubeClient,
|
|
900
901
|
namespace: str,
|
|
901
902
|
min_instances_override: Optional[int] = None,
|
|
903
|
+
max_instances_override: Optional[int] = None,
|
|
902
904
|
) -> Optional[V2HorizontalPodAutoscaler]:
|
|
903
905
|
# Returns None if an HPA should not be attached based on the config,
|
|
904
906
|
# or the config is invalid.
|
|
@@ -914,7 +916,7 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
|
|
|
914
916
|
return None
|
|
915
917
|
|
|
916
918
|
min_replicas = min_instances_override or self.get_min_instances()
|
|
917
|
-
max_replicas = self.get_max_instances()
|
|
919
|
+
max_replicas = max_instances_override or self.get_max_instances()
|
|
918
920
|
if min_replicas == 0 or max_replicas == 0:
|
|
919
921
|
log.error(
|
|
920
922
|
f"Invalid value for min or max_instances on {name}: {min_replicas}, {max_replicas}"
|
|
@@ -2015,7 +2017,7 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
|
|
|
2015
2017
|
)
|
|
2016
2018
|
return None
|
|
2017
2019
|
|
|
2018
|
-
def get_min_instances(self) ->
|
|
2020
|
+
def get_min_instances(self) -> int:
|
|
2019
2021
|
return self.config_dict.get(
|
|
2020
2022
|
"min_instances",
|
|
2021
2023
|
1,
|
|
@@ -4690,7 +4692,9 @@ def get_namespaced_configmap(
|
|
|
4690
4692
|
|
|
4691
4693
|
def patch_namespaced_configmap(
|
|
4692
4694
|
name: str,
|
|
4693
|
-
|
|
4695
|
+
# NOTE: passing a dict *seems* to work - but we should likely switch to passing a ConfigMap since that seems to be
|
|
4696
|
+
# the most supported option
|
|
4697
|
+
body: Union[V1ConfigMap, Dict[str, Any]],
|
|
4694
4698
|
*,
|
|
4695
4699
|
namespace: str,
|
|
4696
4700
|
kube_client: KubeClient,
|
{paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/autoscaling_override.py
RENAMED
|
@@ -59,9 +59,6 @@ class AutoscalingOverride(ModelNormal):
|
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
validations = {
|
|
62
|
-
('min_instances',): {
|
|
63
|
-
'inclusive_minimum': 1,
|
|
64
|
-
},
|
|
65
62
|
}
|
|
66
63
|
|
|
67
64
|
additional_properties_type = None
|
|
@@ -79,7 +76,8 @@ class AutoscalingOverride(ModelNormal):
|
|
|
79
76
|
and the value is attribute type.
|
|
80
77
|
"""
|
|
81
78
|
return {
|
|
82
|
-
'min_instances': (int,), # noqa: E501
|
|
79
|
+
'min_instances': (int, none_type,), # noqa: E501
|
|
80
|
+
'max_instances': (int, none_type,), # noqa: E501
|
|
83
81
|
'expire_after': (float,), # noqa: E501
|
|
84
82
|
}
|
|
85
83
|
|
|
@@ -90,6 +88,7 @@ class AutoscalingOverride(ModelNormal):
|
|
|
90
88
|
|
|
91
89
|
attribute_map = {
|
|
92
90
|
'min_instances': 'min_instances', # noqa: E501
|
|
91
|
+
'max_instances': 'max_instances', # noqa: E501
|
|
93
92
|
'expire_after': 'expire_after', # noqa: E501
|
|
94
93
|
}
|
|
95
94
|
|
|
@@ -105,11 +104,12 @@ class AutoscalingOverride(ModelNormal):
|
|
|
105
104
|
])
|
|
106
105
|
|
|
107
106
|
@convert_js_args_to_python_args
|
|
108
|
-
def __init__(self, min_instances, expire_after, *args, **kwargs): # noqa: E501
|
|
107
|
+
def __init__(self, min_instances, max_instances, expire_after, *args, **kwargs): # noqa: E501
|
|
109
108
|
"""AutoscalingOverride - a model defined in OpenAPI
|
|
110
109
|
|
|
111
110
|
Args:
|
|
112
|
-
min_instances (int): Minimum number of instances to run
|
|
111
|
+
min_instances (int, none_type): Minimum number of instances to run
|
|
112
|
+
max_instances (int, none_type): Maximum number of instances to run
|
|
113
113
|
expire_after (float): Unix timestamp when this override is no longer valid
|
|
114
114
|
|
|
115
115
|
Keyword Args:
|
|
@@ -169,6 +169,7 @@ class AutoscalingOverride(ModelNormal):
|
|
|
169
169
|
self._visited_composed_classes = _visited_composed_classes + (self.__class__,)
|
|
170
170
|
|
|
171
171
|
self.min_instances = min_instances
|
|
172
|
+
self.max_instances = max_instances
|
|
172
173
|
self.expire_after = expire_after
|
|
173
174
|
for var_name, var_value in kwargs.items():
|
|
174
175
|
if var_name not in self.attribute_map and \
|
{paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/paastaapi/model/inline_response202.py
RENAMED
|
@@ -78,7 +78,8 @@ class InlineResponse202(ModelNormal):
|
|
|
78
78
|
return {
|
|
79
79
|
'service': (str,), # noqa: E501
|
|
80
80
|
'instance': (str,), # noqa: E501
|
|
81
|
-
'min_instances': (int,), # noqa: E501
|
|
81
|
+
'min_instances': (int, none_type,), # noqa: E501
|
|
82
|
+
'max_instances': (int, none_type,), # noqa: E501
|
|
82
83
|
'expire_after': (float,), # noqa: E501
|
|
83
84
|
'status': (str,), # noqa: E501
|
|
84
85
|
}
|
|
@@ -92,6 +93,7 @@ class InlineResponse202(ModelNormal):
|
|
|
92
93
|
'service': 'service', # noqa: E501
|
|
93
94
|
'instance': 'instance', # noqa: E501
|
|
94
95
|
'min_instances': 'min_instances', # noqa: E501
|
|
96
|
+
'max_instances': 'max_instances', # noqa: E501
|
|
95
97
|
'expire_after': 'expire_after', # noqa: E501
|
|
96
98
|
'status': 'status', # noqa: E501
|
|
97
99
|
}
|
|
@@ -144,7 +146,8 @@ class InlineResponse202(ModelNormal):
|
|
|
144
146
|
_visited_composed_classes = (Animal,)
|
|
145
147
|
service (str): Service name. [optional] # noqa: E501
|
|
146
148
|
instance (str): Instance name. [optional] # noqa: E501
|
|
147
|
-
min_instances (int): Minimum number of instances to run. [optional] # noqa: E501
|
|
149
|
+
min_instances (int, none_type): Minimum number of instances to run. [optional] # noqa: E501
|
|
150
|
+
max_instances (int, none_type): Maximum number of instances to run. [optional] # noqa: E501
|
|
148
151
|
expire_after (float): Unix timestamp after which the override is no longer valid. [optional] # noqa: E501
|
|
149
152
|
status (str): Status of the operation. [optional] # noqa: E501
|
|
150
153
|
"""
|
|
@@ -255,27 +255,31 @@ def get_hpa_overrides(kube_client: KubeClient) -> Dict[str, Dict[str, HpaOverrid
|
|
|
255
255
|
|
|
256
256
|
This function reads the "paasta-autoscaling-overrides" ConfigMap in the "paasta" namespace
|
|
257
257
|
and extracts all valid (non-expired) overrides to return a dictionary mapping
|
|
258
|
-
service.instance pairs to override data (currently, just
|
|
258
|
+
service.instance pairs to override data (currently, just {min,max_instances} and when the
|
|
259
259
|
override should expire by).
|
|
260
260
|
|
|
261
261
|
The incoming ConfigMap is expected to have the following format:
|
|
262
262
|
{
|
|
263
263
|
$SERVICE_A.$INSTANCE_A: {
|
|
264
264
|
"min_instances": 2,
|
|
265
|
+
"m_instances": 2,
|
|
265
266
|
"expire_after": "2023-10-01T00:00:00Z"
|
|
266
267
|
},
|
|
267
268
|
$SERVICE_A.$INSTANCE_B: {
|
|
268
269
|
"min_instances": 3,
|
|
270
|
+
"max_instances": 10,
|
|
269
271
|
"expire_after": "2023-10-01T00:00:00Z"
|
|
270
272
|
},
|
|
271
273
|
...
|
|
272
274
|
},
|
|
273
275
|
$SERVICE_B.$INSTANCE_A: {
|
|
274
276
|
"min_instances": 1,
|
|
277
|
+
"max_instances": 11,
|
|
275
278
|
"expire_after": "2023-10-01T00:00:00Z"
|
|
276
279
|
},
|
|
277
280
|
$SERVICE_B.$INSTANCE_B: {
|
|
278
281
|
"min_instances": 2,
|
|
282
|
+
"max_instances": 20,
|
|
279
283
|
"expire_after": "2023-10-01T00:00:00Z"
|
|
280
284
|
},
|
|
281
285
|
...
|
|
@@ -298,19 +302,21 @@ def get_hpa_overrides(kube_client: KubeClient) -> Dict[str, Dict[str, HpaOverrid
|
|
|
298
302
|
override_metadata = json.loads(override_json)
|
|
299
303
|
expire_after = override_metadata.get("expire_after")
|
|
300
304
|
min_instances = override_metadata.get("min_instances")
|
|
305
|
+
max_instances = override_metadata.get("max_instances")
|
|
301
306
|
|
|
302
|
-
if expire_after and min_instances:
|
|
307
|
+
if expire_after and (min_instances or max_instances):
|
|
303
308
|
if current_time < expire_after:
|
|
304
309
|
if service not in overrides:
|
|
305
310
|
overrides[service] = {}
|
|
306
311
|
|
|
307
312
|
overrides[service][instance] = {
|
|
308
313
|
"min_instances": min_instances,
|
|
314
|
+
"max_instances": max_instances,
|
|
309
315
|
"expire_after": expire_after,
|
|
310
316
|
}
|
|
311
317
|
log.info(
|
|
312
318
|
f"Found valid HPA override for {service}: "
|
|
313
|
-
f"{
|
|
319
|
+
f"min_instances: {max_instances} :: max_instances {min_instances} (expires at {expire_after})"
|
|
314
320
|
)
|
|
315
321
|
else:
|
|
316
322
|
log.info(
|
|
@@ -320,7 +326,7 @@ def get_hpa_overrides(kube_client: KubeClient) -> Dict[str, Dict[str, HpaOverrid
|
|
|
320
326
|
else:
|
|
321
327
|
log.warning(
|
|
322
328
|
f"Invalid HPA override for {service}.{instance}: "
|
|
323
|
-
f"missing 'min_instances' or 'expire_after': {override_metadata}"
|
|
329
|
+
f"missing 'min_instances' or 'max_instances' or 'expire_after': {override_metadata}"
|
|
324
330
|
)
|
|
325
331
|
except Exception:
|
|
326
332
|
log.exception(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/autoscaling/autoscaling_service_lib.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/autoscaling/max_all_k8s_services.py
RENAMED
|
File without changes
|
{paasta_tools-1.26.1 → paasta_tools-1.27.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.26.1 → paasta_tools-1.27.0}/paasta_tools/check_kubernetes_services_replication.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/check_services_replication_tools.py
RENAMED
|
File without changes
|
|
File without changes
|
{paasta_tools-1.26.1 → paasta_tools-1.27.0}/paasta_tools/cleanup_expired_autoscaling_overrides.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|