paasta-tools 1.4.5__tar.gz → 1.4.7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {paasta-tools-1.4.5/paasta_tools.egg-info → paasta-tools-1.4.7}/PKG-INFO +1 -1
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/__init__.py +1 -1
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/api_docs/swagger.json +20 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/logs.py +52 -1
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/status.py +254 -1
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/application/controller_wrappers.py +20 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes_tools.py +14 -14
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status.py +5 -0
- paasta-tools-1.4.7/paasta_tools/paastaapi/model/instance_status_vitesscluster.py +173 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/models/__init__.py +1 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/setup_kubernetes_job.py +1 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/setup_tron_namespace.py +41 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/spark_tools.py +21 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/tron_tools.py +61 -20
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/vitesscluster_tools.py +13 -4
- {paasta-tools-1.4.5 → paasta-tools-1.4.7/paasta_tools.egg-info}/PKG-INFO +1 -1
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools.egg-info/SOURCES.txt +1 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools.egg-info/requires.txt +1 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/requirements-minimal.txt +1 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/MANIFEST.in +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/README.md +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/k8s_itests/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/k8s_itests/test_autoscaling.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/k8s_itests/utils.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/adhoc_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/api.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/client.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/settings.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/tweens/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/tweens/profiling.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/tweens/request_logger.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/autoscaler.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/exception.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/flink.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/instance.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/pause_autoscaler.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/resources.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/service.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/api/views/version.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/apply_external_resources.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/async_utils.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/autoscaling/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/autoscaling/forecasting.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/autoscaling/utils.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/bounce_lib.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/broadcast_log_to_services.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cassandracluster_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/check_autoscaler_max_instances.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/check_flink_services_health.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/check_kubernetes_api.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/check_kubernetes_services_replication.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/check_oom_events.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/check_services_replication_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/check_spark_jobs.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cleanup_tron_namespaces.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cli.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/autoscale.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/check.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/cook_image.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/get_docker_image.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/get_image_version.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/get_latest_deployment.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/info.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/itest.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/list.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/list_clusters.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/local_run.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/mark_for_deployment.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/mesh_status.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/push_to_registry.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/remote_run.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/rollback.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/secret.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/security_check.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/spark_run.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/validate.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/cmds/wait_for_deployment.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm/autosuggest.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm/template/README.md +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/fsm_cmd.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/adhoc_schema.json +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/autoscaling_schema.json +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/eks_schema.json +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/kubernetes_schema.json +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/service_schema.json +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/smartstack_schema.json +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/schemas/tron_schema.json +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/cli/utils.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/clusterman.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/config_utils.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/bounce_log_latency_parser.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/check_orphans.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/create_paasta_playground.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/get_running_task_allocation.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/habitat_fixer.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/ide_helper.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/kill_bad_containers.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/mock_patch_checker.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/paasta_update_soa_memcpu.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/render_template.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/service_shard_remove.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/service_shard_update.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/shared_ip_check.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/delete_kubernetes_deployments.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/deployment_utils.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/docker_wrapper.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/docker_wrapper_imports.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/drain_lib.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/dump_locally_running_services.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/eks_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/envoy_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/firewall.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/firewall_logging.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/firewall_update.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/flink_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/flinkeks_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/frameworks/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/frameworks/adhoc_scheduler.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/frameworks/constraints.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/frameworks/native_scheduler.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/frameworks/native_service_config.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/frameworks/task_store.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/generate_all_deployments +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/generate_authenticating_services.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/generate_deployments_for_service.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/generate_services_file.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/generate_services_yaml.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/hacheck.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/instance/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/instance/hpa_metrics_parser.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/instance/kubernetes.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/iptables.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kafkacluster_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/application/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/application/tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/bin/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/list_kubernetes_service_instances.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/list_tron_namespaces.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/log_task_lifecycle_events.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/long_running_service_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mac_address.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/marathon_dashboard.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/cfg.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/cluster.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/exceptions.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/framework.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/log.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/master.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/mesos_file.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/parallel.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/slave.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/task.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/util.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos/zookeeper.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos_maintenance.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/mesos_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/metrics/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/metrics/metastatus_lib.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/metrics/metrics_lib.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/monitoring/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/monitoring/kill_orphaned_docker_containers.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/monitoring_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/monkrelaycluster_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/nrtsearchservice_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/oom_logger.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paasta_deploy_tron_jobs +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paasta_execute_docker_command.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paasta_native_serviceinit.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paasta_remote_run.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paasta_service_config_loader.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/api/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/api/autoscaler_api.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/api/default_api.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/api/resources_api.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/api/service_api.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/api_client.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/apis/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/configuration.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/exceptions.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/adhoc_launch_history.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/deploy_queue.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/envoy_backend.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/envoy_location.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/envoy_status.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/flink_cluster_overview.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/flink_config.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/flink_job.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/flink_job_details.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/flink_jobs.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/float_and_error.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/hpa_metric.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/inline_object.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/inline_response200.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/inline_response2001.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_bounce_status.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_mesh_status.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status_adhoc.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status_flink.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_status_tron.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/instance_tasks.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/integer_and_error.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/kubernetes_container.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/kubernetes_pod.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/kubernetes_version.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/resource.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/resource_item.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/resource_value.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/smartstack_backend.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/smartstack_location.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/smartstack_status.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model/task_tail_lines.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/model_utils.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/paastaapi/rest.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/prune_completed_pods.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/puppet_service_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/py.typed +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/remote_git.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/run-paasta-api-in-dev-mode.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/run-paasta-api-playground.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/secret_providers/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/secret_providers/vault.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/secret_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/setup_istio_mesh.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/setup_kubernetes_cr.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/setup_kubernetes_crd.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/setup_prometheus_adapter_config.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/slack.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/smartstack_tools.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/tron/__init__.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/tron/client.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/tron/tron_command_context.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/tron/tron_timeutils.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/utils.py +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools.egg-info/dependency_links.txt +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools.egg-info/entry_points.txt +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools.egg-info/top_level.txt +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/pyproject.toml +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/setup.cfg +0 -0
- {paasta-tools-1.4.5 → paasta-tools-1.4.7}/setup.py +0 -0
|
@@ -953,6 +953,18 @@
|
|
|
953
953
|
}
|
|
954
954
|
},
|
|
955
955
|
"description": "Nullable CassandraCluster instance status"
|
|
956
|
+
},
|
|
957
|
+
"vitesscluster": {
|
|
958
|
+
"type": "object",
|
|
959
|
+
"properties": {
|
|
960
|
+
"status": {
|
|
961
|
+
"$ref": "#/definitions/InstanceStatusVitessCluster"
|
|
962
|
+
},
|
|
963
|
+
"metadata": {
|
|
964
|
+
"$ref": "#/definitions/InstanceMetadataVitessCluster"
|
|
965
|
+
}
|
|
966
|
+
},
|
|
967
|
+
"description": "Nullable VitessCluster instance status and metadata"
|
|
956
968
|
}
|
|
957
969
|
}
|
|
958
970
|
},
|
|
@@ -1737,6 +1749,14 @@
|
|
|
1737
1749
|
"type": "object",
|
|
1738
1750
|
"description": "Cassandra instance status"
|
|
1739
1751
|
},
|
|
1752
|
+
"InstanceStatusVitessCluster": {
|
|
1753
|
+
"type": "object",
|
|
1754
|
+
"description": "VitessCluster instance status"
|
|
1755
|
+
},
|
|
1756
|
+
"InstanceMetadataVitessCluster": {
|
|
1757
|
+
"type": "object",
|
|
1758
|
+
"description": "VitessCluster instance metadata"
|
|
1759
|
+
},
|
|
1740
1760
|
"InstanceTasks": {
|
|
1741
1761
|
"type": "array",
|
|
1742
1762
|
"description": "List of tasks associated with instance",
|
|
@@ -40,7 +40,9 @@ from typing import Tuple
|
|
|
40
40
|
from typing import Type
|
|
41
41
|
from typing import Union
|
|
42
42
|
|
|
43
|
+
import a_sync
|
|
43
44
|
import isodate
|
|
45
|
+
import nats
|
|
44
46
|
import pytz
|
|
45
47
|
from dateutil import tz
|
|
46
48
|
|
|
@@ -1166,19 +1168,26 @@ class ScribeLogReader(LogReader):
|
|
|
1166
1168
|
|
|
1167
1169
|
@register_log_reader("vector-logs")
|
|
1168
1170
|
class VectorLogsReader(LogReader):
|
|
1171
|
+
SUPPORTS_TAILING = True
|
|
1169
1172
|
SUPPORTS_TIME = True
|
|
1170
1173
|
|
|
1171
|
-
def __init__(
|
|
1174
|
+
def __init__(
|
|
1175
|
+
self, cluster_map: Mapping[str, Any], nats_endpoint_map: Mapping[str, Any]
|
|
1176
|
+
) -> None:
|
|
1172
1177
|
super().__init__()
|
|
1173
1178
|
|
|
1174
1179
|
if S3LogsReader is None:
|
|
1175
1180
|
raise Exception("yelp_clog package must be available to use S3LogsReader")
|
|
1176
1181
|
|
|
1177
1182
|
self.cluster_map = cluster_map
|
|
1183
|
+
self.nats_endpoint_map = nats_endpoint_map
|
|
1178
1184
|
|
|
1179
1185
|
def get_superregion_for_cluster(self, cluster: str) -> Optional[str]:
|
|
1180
1186
|
return self.cluster_map.get(cluster, None)
|
|
1181
1187
|
|
|
1188
|
+
def get_nats_endpoint_for_cluster(self, cluster: str) -> Optional[str]:
|
|
1189
|
+
return self.nats_endpoint_map.get(cluster, None)
|
|
1190
|
+
|
|
1182
1191
|
def print_logs_by_time(
|
|
1183
1192
|
self,
|
|
1184
1193
|
service,
|
|
@@ -1230,6 +1239,48 @@ class VectorLogsReader(LogReader):
|
|
|
1230
1239
|
for line in aggregated_logs:
|
|
1231
1240
|
print_log(line["raw_line"], levels, raw_mode, strip_headers)
|
|
1232
1241
|
|
|
1242
|
+
def tail_logs(
|
|
1243
|
+
self,
|
|
1244
|
+
service: str,
|
|
1245
|
+
levels: Sequence[str],
|
|
1246
|
+
components: Iterable[str],
|
|
1247
|
+
clusters: Sequence[str],
|
|
1248
|
+
instances: List[str],
|
|
1249
|
+
pods: Iterable[str] = None,
|
|
1250
|
+
raw_mode: bool = False,
|
|
1251
|
+
strip_headers: bool = False,
|
|
1252
|
+
) -> None:
|
|
1253
|
+
stream_name = get_log_name_for_service(service, prefix="app_output")
|
|
1254
|
+
endpoint = self.get_nats_endpoint_for_cluster(clusters[0])
|
|
1255
|
+
if not endpoint:
|
|
1256
|
+
raise NotImplementedError(
|
|
1257
|
+
"Tailing logs is not supported in this cluster yet, sorry"
|
|
1258
|
+
)
|
|
1259
|
+
|
|
1260
|
+
async def tail_logs_from_nats() -> None:
|
|
1261
|
+
nc = await nats.connect(f"nats://{endpoint}")
|
|
1262
|
+
sub = await nc.subscribe(stream_name)
|
|
1263
|
+
|
|
1264
|
+
while True:
|
|
1265
|
+
# Wait indefinitely for a new message (no timeout)
|
|
1266
|
+
msg = await sub.next_msg(timeout=None)
|
|
1267
|
+
decoded_data = msg.data.decode("utf-8")
|
|
1268
|
+
|
|
1269
|
+
if paasta_log_line_passes_filter(
|
|
1270
|
+
decoded_data,
|
|
1271
|
+
levels,
|
|
1272
|
+
service,
|
|
1273
|
+
components,
|
|
1274
|
+
clusters,
|
|
1275
|
+
instances,
|
|
1276
|
+
pods,
|
|
1277
|
+
):
|
|
1278
|
+
await a_sync.run(
|
|
1279
|
+
print_log, decoded_data, levels, raw_mode, strip_headers
|
|
1280
|
+
)
|
|
1281
|
+
|
|
1282
|
+
a_sync.block(tail_logs_from_nats)
|
|
1283
|
+
|
|
1233
1284
|
|
|
1234
1285
|
def scribe_env_to_locations(scribe_env) -> Mapping[str, Any]:
|
|
1235
1286
|
"""Converts a scribe environment to a dictionary of locations. The
|
|
@@ -37,6 +37,7 @@ from typing import Optional
|
|
|
37
37
|
from typing import Sequence
|
|
38
38
|
from typing import Tuple
|
|
39
39
|
from typing import Type
|
|
40
|
+
from typing import TypedDict
|
|
40
41
|
from typing import Union
|
|
41
42
|
|
|
42
43
|
import a_sync
|
|
@@ -94,12 +95,14 @@ from paasta_tools.utils import load_system_paasta_config
|
|
|
94
95
|
from paasta_tools.utils import PaastaColors
|
|
95
96
|
from paasta_tools.utils import remove_ansi_escape_sequences
|
|
96
97
|
from paasta_tools.utils import SystemPaastaConfig
|
|
98
|
+
from paasta_tools.vitesscluster_tools import VitessDeploymentConfig
|
|
97
99
|
|
|
98
100
|
FLINK_STATUS_MAX_THREAD_POOL_WORKERS = 50
|
|
99
101
|
ALLOWED_INSTANCE_CONFIG: Sequence[Type[InstanceConfig]] = [
|
|
100
102
|
FlinkDeploymentConfig,
|
|
101
103
|
FlinkEksDeploymentConfig,
|
|
102
104
|
CassandraClusterDeploymentConfig,
|
|
105
|
+
VitessDeploymentConfig,
|
|
103
106
|
KafkaClusterDeploymentConfig,
|
|
104
107
|
KubernetesDeploymentConfig,
|
|
105
108
|
EksDeploymentConfig,
|
|
@@ -112,6 +115,7 @@ DEPLOYMENT_INSTANCE_CONFIG: Sequence[Type[InstanceConfig]] = [
|
|
|
112
115
|
FlinkDeploymentConfig,
|
|
113
116
|
FlinkEksDeploymentConfig,
|
|
114
117
|
CassandraClusterDeploymentConfig,
|
|
118
|
+
VitessDeploymentConfig,
|
|
115
119
|
KafkaClusterDeploymentConfig,
|
|
116
120
|
KubernetesDeploymentConfig,
|
|
117
121
|
EksDeploymentConfig,
|
|
@@ -130,7 +134,11 @@ InstanceStatusWriter = Callable[
|
|
|
130
134
|
int,
|
|
131
135
|
]
|
|
132
136
|
|
|
133
|
-
EKS_DEPLOYMENT_CONFIGS = [
|
|
137
|
+
EKS_DEPLOYMENT_CONFIGS = [
|
|
138
|
+
EksDeploymentConfig,
|
|
139
|
+
FlinkEksDeploymentConfig,
|
|
140
|
+
VitessDeploymentConfig,
|
|
141
|
+
]
|
|
134
142
|
FLINK_DEPLOYMENT_CONFIGS = [FlinkDeploymentConfig, FlinkEksDeploymentConfig]
|
|
135
143
|
|
|
136
144
|
|
|
@@ -1878,6 +1886,250 @@ def print_kafka_status(
|
|
|
1878
1886
|
return 0
|
|
1879
1887
|
|
|
1880
1888
|
|
|
1889
|
+
class EtcdLockServerStatus(TypedDict, total=False):
|
|
1890
|
+
observedGeneration: int
|
|
1891
|
+
available: str
|
|
1892
|
+
clientServiceName: str
|
|
1893
|
+
|
|
1894
|
+
|
|
1895
|
+
class LockServerStatus(TypedDict, total=False):
|
|
1896
|
+
etcd: EtcdLockServerStatus
|
|
1897
|
+
|
|
1898
|
+
|
|
1899
|
+
class VitessClusterCellStatus(TypedDict, total=False):
|
|
1900
|
+
pendingChanges: str
|
|
1901
|
+
gatewayAvailable: str
|
|
1902
|
+
|
|
1903
|
+
|
|
1904
|
+
class VitessClusterKeyspaceStatus(TypedDict, total=False):
|
|
1905
|
+
pendingChanges: str
|
|
1906
|
+
cells: List[str]
|
|
1907
|
+
desiredShards: int
|
|
1908
|
+
shards: int
|
|
1909
|
+
readyShards: int
|
|
1910
|
+
updatedShards: int
|
|
1911
|
+
desiredTablets: int
|
|
1912
|
+
tablets: int
|
|
1913
|
+
readyTablets: int
|
|
1914
|
+
updatedTablets: int
|
|
1915
|
+
|
|
1916
|
+
|
|
1917
|
+
class VitessDashboardStatus(TypedDict, total=False):
|
|
1918
|
+
available: str
|
|
1919
|
+
serviceName: str
|
|
1920
|
+
|
|
1921
|
+
|
|
1922
|
+
class VTAdminStatus(TypedDict, total=False):
|
|
1923
|
+
available: str
|
|
1924
|
+
serviceName: str
|
|
1925
|
+
|
|
1926
|
+
|
|
1927
|
+
class OrphanStatus(TypedDict, total=False):
|
|
1928
|
+
reason: str
|
|
1929
|
+
message: str
|
|
1930
|
+
|
|
1931
|
+
|
|
1932
|
+
class VitessClusterStatus(TypedDict, total=False):
|
|
1933
|
+
observedGeneration: int
|
|
1934
|
+
globalLockserver: LockServerStatus
|
|
1935
|
+
gatewayServiceName: str
|
|
1936
|
+
vitessDashboard: VitessDashboardStatus
|
|
1937
|
+
cells: Dict[str, VitessClusterCellStatus]
|
|
1938
|
+
keyspaces: Dict[str, VitessClusterKeyspaceStatus]
|
|
1939
|
+
vtadmin: VTAdminStatus
|
|
1940
|
+
orphanedCells: Dict[str, OrphanStatus]
|
|
1941
|
+
orphanedKeyspaces: Dict[str, OrphanStatus]
|
|
1942
|
+
|
|
1943
|
+
|
|
1944
|
+
def print_vitess_status(
|
|
1945
|
+
cluster: str,
|
|
1946
|
+
service: str,
|
|
1947
|
+
instance: str,
|
|
1948
|
+
output: List[str],
|
|
1949
|
+
vitess_status: Mapping[str, Any],
|
|
1950
|
+
verbose: int = 0,
|
|
1951
|
+
) -> int:
|
|
1952
|
+
tab = " "
|
|
1953
|
+
indent = 1
|
|
1954
|
+
|
|
1955
|
+
status: VitessClusterStatus = vitess_status.get("status")
|
|
1956
|
+
if status is None:
|
|
1957
|
+
output.append(
|
|
1958
|
+
PaastaColors.red("indent * tab + Vitess cluster is not available yet")
|
|
1959
|
+
)
|
|
1960
|
+
return 1
|
|
1961
|
+
|
|
1962
|
+
output.append(indent * tab + "Vitess Cluster:")
|
|
1963
|
+
indent += 1
|
|
1964
|
+
|
|
1965
|
+
output.append(
|
|
1966
|
+
indent * tab
|
|
1967
|
+
+ "Observed Generation: "
|
|
1968
|
+
+ str(status.get("observedGeneration", 0))
|
|
1969
|
+
)
|
|
1970
|
+
output.append(
|
|
1971
|
+
indent * tab + "Gateway Service Name: " + status.get("gatewayServiceName", "")
|
|
1972
|
+
)
|
|
1973
|
+
|
|
1974
|
+
output.append(indent * tab + "Cells:")
|
|
1975
|
+
indent += 1
|
|
1976
|
+
cells: Dict[str, VitessClusterCellStatus] = status.get("cells")
|
|
1977
|
+
if not cells:
|
|
1978
|
+
output.append(
|
|
1979
|
+
indent * tab + "Cells: " + PaastaColors.red("No cell status available")
|
|
1980
|
+
)
|
|
1981
|
+
return 0
|
|
1982
|
+
for cell, cell_status in cells.items():
|
|
1983
|
+
gateway_available: str = cell_status.get("gatewayAvailable")
|
|
1984
|
+
if gateway_available == "True":
|
|
1985
|
+
output.append(
|
|
1986
|
+
indent * tab
|
|
1987
|
+
+ f"Cell: {cell} - VTGate: {PaastaColors.green('available')}"
|
|
1988
|
+
)
|
|
1989
|
+
else:
|
|
1990
|
+
output.append(
|
|
1991
|
+
indent * tab
|
|
1992
|
+
+ f"Cell: {cell} - VTGate: {PaastaColors.red('unavailable')}"
|
|
1993
|
+
)
|
|
1994
|
+
cell_pending_changes: str = cell_status.get("pendingChanges", None)
|
|
1995
|
+
if cell_pending_changes:
|
|
1996
|
+
output.append(indent * tab + f" Pending Changes: {cell_pending_changes}")
|
|
1997
|
+
indent -= 1
|
|
1998
|
+
|
|
1999
|
+
output.append(indent * tab + "Vitess Dashboard:")
|
|
2000
|
+
indent += 1
|
|
2001
|
+
vitess_dashboard: VitessDashboardStatus = status.get("vitessDashboard")
|
|
2002
|
+
if not vitess_dashboard:
|
|
2003
|
+
output.append(
|
|
2004
|
+
indent * tab
|
|
2005
|
+
+ "Vitess Dashboard: "
|
|
2006
|
+
+ PaastaColors.red("No dashboard status available")
|
|
2007
|
+
)
|
|
2008
|
+
return 0
|
|
2009
|
+
vitess_dashboard_available: str = vitess_dashboard.get("available", "")
|
|
2010
|
+
vitess_dashboard_service_name: str = vitess_dashboard.get("serviceName", "")
|
|
2011
|
+
if vitess_dashboard_available == "True":
|
|
2012
|
+
output.append(
|
|
2013
|
+
indent * tab
|
|
2014
|
+
+ f"Vitess Dashboard: {vitess_dashboard_service_name} - {PaastaColors.green('available')}"
|
|
2015
|
+
)
|
|
2016
|
+
else:
|
|
2017
|
+
output.append(
|
|
2018
|
+
indent * tab
|
|
2019
|
+
+ f"Vitess Dashboard: {vitess_dashboard_service_name} - {PaastaColors.red('unavailable')}"
|
|
2020
|
+
)
|
|
2021
|
+
indent -= 1
|
|
2022
|
+
|
|
2023
|
+
output.append(indent * tab + "VTAdmin:")
|
|
2024
|
+
indent += 1
|
|
2025
|
+
vtadmin: VTAdminStatus = status.get("vtadmin")
|
|
2026
|
+
if not vtadmin:
|
|
2027
|
+
output.append(
|
|
2028
|
+
indent * tab + "VTAdmin: " + PaastaColors.red("No VTAdmin status available")
|
|
2029
|
+
)
|
|
2030
|
+
return 0
|
|
2031
|
+
vtadmin_available: str = vtadmin.get("available", "")
|
|
2032
|
+
vtadmin_service_name: str = vtadmin.get("serviceName", "")
|
|
2033
|
+
if vtadmin_available == "True":
|
|
2034
|
+
output.append(
|
|
2035
|
+
indent * tab
|
|
2036
|
+
+ f"VTAdmin: {vtadmin_service_name} - {PaastaColors.green('available')}"
|
|
2037
|
+
)
|
|
2038
|
+
else:
|
|
2039
|
+
output.append(
|
|
2040
|
+
indent * tab
|
|
2041
|
+
+ f"VTAdmin: {vtadmin_service_name} - {PaastaColors.red('unavailable')}"
|
|
2042
|
+
)
|
|
2043
|
+
indent -= 1
|
|
2044
|
+
|
|
2045
|
+
output.append(indent * tab + "Keyspaces:")
|
|
2046
|
+
indent += 1
|
|
2047
|
+
keyspaces: Dict[str, VitessClusterKeyspaceStatus] = status.get("keyspaces")
|
|
2048
|
+
if not keyspaces:
|
|
2049
|
+
output.append(
|
|
2050
|
+
indent * tab
|
|
2051
|
+
+ "Keyspaces: "
|
|
2052
|
+
+ PaastaColors.red("No keyspace status available")
|
|
2053
|
+
)
|
|
2054
|
+
return 0
|
|
2055
|
+
for keyspace, keyspace_status in keyspaces.items():
|
|
2056
|
+
output.append(indent * tab + f"Keyspace: {keyspace}")
|
|
2057
|
+
indent += 1
|
|
2058
|
+
keyspace_pending_changes: str = keyspace_status.get("pendingChanges", None)
|
|
2059
|
+
if keyspace_pending_changes:
|
|
2060
|
+
output.append(
|
|
2061
|
+
indent * tab
|
|
2062
|
+
+ f"Keyspace: {keyspace} - Pending Changes: {keyspace_pending_changes}"
|
|
2063
|
+
)
|
|
2064
|
+
keyspace_cells: List[str] = keyspace_status.get("cells", [])
|
|
2065
|
+
output.append(indent * tab + f" Cells: {', '.join(keyspace_cells)}")
|
|
2066
|
+
desired_shards: int = keyspace_status.get("desiredShards", 0)
|
|
2067
|
+
shards: int = keyspace_status.get("shards", 0)
|
|
2068
|
+
ready_shards: int = keyspace_status.get("readyShards", 0)
|
|
2069
|
+
updated_shards: int = keyspace_status.get("updatedShards", 0)
|
|
2070
|
+
output.append(
|
|
2071
|
+
indent * tab
|
|
2072
|
+
+ f" Shards: {shards} observed, {ready_shards}/{desired_shards} ready, {updated_shards}/{desired_shards} updated"
|
|
2073
|
+
)
|
|
2074
|
+
desired_tablets: int = keyspace_status.get("desiredTablets", 0)
|
|
2075
|
+
tablets: int = keyspace_status.get("tablets", 0)
|
|
2076
|
+
ready_tablets: int = keyspace_status.get("readyTablets", 0)
|
|
2077
|
+
updated_tablets: int = keyspace_status.get("updatedTablets", 0)
|
|
2078
|
+
output.append(
|
|
2079
|
+
indent * tab
|
|
2080
|
+
+ f" Tablets: {tablets} observed, {ready_tablets}/{desired_tablets} ready, {updated_tablets}/{desired_tablets} updated"
|
|
2081
|
+
)
|
|
2082
|
+
indent -= 1
|
|
2083
|
+
indent -= 1
|
|
2084
|
+
|
|
2085
|
+
# This is not needed when not using etcd. We use zk instead
|
|
2086
|
+
global_lockserver: LockServerStatus = status.get("globalLockserver", {})
|
|
2087
|
+
if global_lockserver:
|
|
2088
|
+
output.append(indent * tab + "Global Lockserver:")
|
|
2089
|
+
indent += 1
|
|
2090
|
+
etcd: EtcdLockServerStatus = global_lockserver.get("etcd")
|
|
2091
|
+
if etcd:
|
|
2092
|
+
output.append(indent * tab + "Global Lockserver:")
|
|
2093
|
+
indent += 1
|
|
2094
|
+
observed_generation: int = etcd.get("observedGeneration", 0)
|
|
2095
|
+
available: str = etcd.get("available", "")
|
|
2096
|
+
client_service_name: str = etcd.get("clientServiceName", "")
|
|
2097
|
+
output.append(
|
|
2098
|
+
indent * tab
|
|
2099
|
+
+ f"Observed Generation: {observed_generation}, Available: {available}, Client Service Name: {client_service_name}"
|
|
2100
|
+
)
|
|
2101
|
+
indent -= 1
|
|
2102
|
+
|
|
2103
|
+
# Orphaned Cells are not mandatorily seen each time
|
|
2104
|
+
orphaned_cells: Dict[str, OrphanStatus] = status.get("orphanedCells", {})
|
|
2105
|
+
if orphaned_cells:
|
|
2106
|
+
output.append(indent * tab + "Orphaned Cells:")
|
|
2107
|
+
indent += 1
|
|
2108
|
+
for cell, orphan_status in orphaned_cells.items():
|
|
2109
|
+
orphaned_cell_reason: str = orphan_status.get("reason", "")
|
|
2110
|
+
orphaned_cell_message: str = orphan_status.get("message", "")
|
|
2111
|
+
output.append(
|
|
2112
|
+
indent * tab
|
|
2113
|
+
+ f"Cell: {cell} - Reason: {orphaned_cell_reason}, Message: {orphaned_cell_message}"
|
|
2114
|
+
)
|
|
2115
|
+
indent -= 1
|
|
2116
|
+
|
|
2117
|
+
# Orphaned Keyspaces are not mandatorily seen each time
|
|
2118
|
+
orphaned_keyspaces: Dict[str, OrphanStatus] = status.get("orphanedKeyspaces", {})
|
|
2119
|
+
if orphaned_keyspaces:
|
|
2120
|
+
output.append(indent * tab + "Orphaned Keyspaces:")
|
|
2121
|
+
indent += 1
|
|
2122
|
+
for keyspace, orphan_status in orphaned_keyspaces.items():
|
|
2123
|
+
orphaned_keyspace_reason: str = orphan_status.get("reason", "")
|
|
2124
|
+
orphaned_keyspace_message: str = orphan_status.get("message", "")
|
|
2125
|
+
output.append(
|
|
2126
|
+
indent * tab
|
|
2127
|
+
+ f"Keyspace: {keyspace} - Reason: {orphaned_keyspace_reason}, Message: {orphaned_keyspace_message}"
|
|
2128
|
+
)
|
|
2129
|
+
indent -= 1
|
|
2130
|
+
return 0
|
|
2131
|
+
|
|
2132
|
+
|
|
1881
2133
|
def report_status_for_cluster(
|
|
1882
2134
|
service: str,
|
|
1883
2135
|
cluster: str,
|
|
@@ -2273,4 +2525,5 @@ INSTANCE_TYPE_WRITERS: Mapping[str, InstanceStatusWriter] = defaultdict(
|
|
|
2273
2525
|
flinkeks=print_flinkeks_status,
|
|
2274
2526
|
kafkacluster=print_kafka_status,
|
|
2275
2527
|
cassandracluster=print_cassandra_status,
|
|
2528
|
+
vitesscluster=print_vitess_status,
|
|
2276
2529
|
)
|
{paasta-tools-1.4.5 → paasta-tools-1.4.7}/paasta_tools/kubernetes/application/controller_wrappers.py
RENAMED
|
@@ -15,6 +15,7 @@ from paasta_tools.eks_tools import load_eks_service_config_no_cache
|
|
|
15
15
|
from paasta_tools.kubernetes_tools import create_deployment
|
|
16
16
|
from paasta_tools.kubernetes_tools import create_pod_disruption_budget
|
|
17
17
|
from paasta_tools.kubernetes_tools import create_stateful_set
|
|
18
|
+
from paasta_tools.kubernetes_tools import ensure_service_account
|
|
18
19
|
from paasta_tools.kubernetes_tools import KubeClient
|
|
19
20
|
from paasta_tools.kubernetes_tools import KubeDeployment
|
|
20
21
|
from paasta_tools.kubernetes_tools import KubernetesDeploymentConfig
|
|
@@ -120,6 +121,25 @@ class Application(ABC):
|
|
|
120
121
|
"""
|
|
121
122
|
self.ensure_pod_disruption_budget(kube_client, self.soa_config.get_namespace())
|
|
122
123
|
|
|
124
|
+
def update_dependency_api_objects(self, kube_client: KubeClient) -> None:
|
|
125
|
+
"""
|
|
126
|
+
Update related Kubernetes API objects that should be updated before the main object,
|
|
127
|
+
such as service accounts.
|
|
128
|
+
:param kube_client:
|
|
129
|
+
"""
|
|
130
|
+
self.ensure_service_account(kube_client)
|
|
131
|
+
|
|
132
|
+
def ensure_service_account(self, kube_client: KubeClient) -> None:
|
|
133
|
+
"""
|
|
134
|
+
Ensure that the service account for this application exists
|
|
135
|
+
:param kube_client:
|
|
136
|
+
"""
|
|
137
|
+
ensure_service_account(
|
|
138
|
+
iam_role=self.soa_config.get_iam_role(),
|
|
139
|
+
namespace=self.soa_config.get_namespace(),
|
|
140
|
+
kube_client=kube_client,
|
|
141
|
+
)
|
|
142
|
+
|
|
123
143
|
def delete_pod_disruption_budget(self, kube_client: KubeClient) -> None:
|
|
124
144
|
try:
|
|
125
145
|
kube_client.policy.delete_namespaced_pod_disruption_budget(
|
|
@@ -2220,9 +2220,9 @@ class KubernetesDeploymentConfig(LongRunningServiceConfig):
|
|
|
2220
2220
|
annotations["iam.amazonaws.com/role"] = ""
|
|
2221
2221
|
iam_role = self.get_iam_role()
|
|
2222
2222
|
if iam_role:
|
|
2223
|
-
pod_spec_kwargs[
|
|
2224
|
-
|
|
2225
|
-
|
|
2223
|
+
pod_spec_kwargs["service_account_name"] = get_service_account_name(
|
|
2224
|
+
iam_role
|
|
2225
|
+
)
|
|
2226
2226
|
if fs_group is None:
|
|
2227
2227
|
# We need some reasoable default for group id of a process
|
|
2228
2228
|
# running inside the container. Seems like most of such
|
|
@@ -4050,12 +4050,9 @@ def get_all_limit_ranges(
|
|
|
4050
4050
|
_RE_NORMALIZE_IAM_ROLE = re.compile(r"[^0-9a-zA-Z]+")
|
|
4051
4051
|
|
|
4052
4052
|
|
|
4053
|
-
def
|
|
4053
|
+
def get_service_account_name(
|
|
4054
4054
|
iam_role: str,
|
|
4055
|
-
namespace: str,
|
|
4056
4055
|
k8s_role: Optional[str] = None,
|
|
4057
|
-
kubeconfig_file: Optional[str] = None,
|
|
4058
|
-
dry_run: bool = False,
|
|
4059
4056
|
) -> str:
|
|
4060
4057
|
# the service account is expected to always be prefixed with paasta- as using the actual namespace
|
|
4061
4058
|
# potentially wastes a lot of characters (e.g., paasta-nrtsearchservices) that could be used for
|
|
@@ -4081,12 +4078,17 @@ def create_or_find_service_account_name(
|
|
|
4081
4078
|
"Expected at least one of iam_role or k8s_role to be passed in!"
|
|
4082
4079
|
)
|
|
4083
4080
|
|
|
4084
|
-
|
|
4085
|
-
|
|
4086
|
-
|
|
4087
|
-
|
|
4081
|
+
return sa_name
|
|
4082
|
+
|
|
4083
|
+
|
|
4084
|
+
def ensure_service_account(
|
|
4085
|
+
iam_role: str,
|
|
4086
|
+
namespace: str,
|
|
4087
|
+
kube_client: KubeClient,
|
|
4088
|
+
k8s_role: Optional[str] = None,
|
|
4089
|
+
) -> None:
|
|
4090
|
+
sa_name = get_service_account_name(iam_role, k8s_role)
|
|
4088
4091
|
|
|
4089
|
-
kube_client = KubeClient(config_file=kubeconfig_file)
|
|
4090
4092
|
if not any(
|
|
4091
4093
|
sa.metadata and sa.metadata.name == sa_name
|
|
4092
4094
|
for sa in get_all_service_accounts(kube_client, namespace)
|
|
@@ -4135,8 +4137,6 @@ def create_or_find_service_account_name(
|
|
|
4135
4137
|
namespace=namespace, body=role_binding
|
|
4136
4138
|
)
|
|
4137
4139
|
|
|
4138
|
-
return sa_name
|
|
4139
|
-
|
|
4140
4140
|
|
|
4141
4141
|
def mode_to_int(mode: Optional[Union[str, int]]) -> Optional[int]:
|
|
4142
4142
|
if mode is not None:
|
|
@@ -38,6 +38,7 @@ def lazy_import():
|
|
|
38
38
|
from paasta_tools.paastaapi.model.instance_status_kubernetes import InstanceStatusKubernetes
|
|
39
39
|
from paasta_tools.paastaapi.model.instance_status_kubernetes_v2 import InstanceStatusKubernetesV2
|
|
40
40
|
from paasta_tools.paastaapi.model.instance_status_tron import InstanceStatusTron
|
|
41
|
+
from paasta_tools.paastaapi.model.instance_status_vitesscluster import InstanceStatusVitesscluster
|
|
41
42
|
globals()['InstanceStatusAdhoc'] = InstanceStatusAdhoc
|
|
42
43
|
globals()['InstanceStatusCassandracluster'] = InstanceStatusCassandracluster
|
|
43
44
|
globals()['InstanceStatusFlink'] = InstanceStatusFlink
|
|
@@ -45,6 +46,7 @@ def lazy_import():
|
|
|
45
46
|
globals()['InstanceStatusKubernetes'] = InstanceStatusKubernetes
|
|
46
47
|
globals()['InstanceStatusKubernetesV2'] = InstanceStatusKubernetesV2
|
|
47
48
|
globals()['InstanceStatusTron'] = InstanceStatusTron
|
|
49
|
+
globals()['InstanceStatusVitesscluster'] = InstanceStatusVitesscluster
|
|
48
50
|
|
|
49
51
|
|
|
50
52
|
class InstanceStatus(ModelNormal):
|
|
@@ -100,6 +102,7 @@ class InstanceStatus(ModelNormal):
|
|
|
100
102
|
'version': (str,), # noqa: E501
|
|
101
103
|
'instance': (str,), # noqa: E501
|
|
102
104
|
'cassandracluster': (InstanceStatusCassandracluster,), # noqa: E501
|
|
105
|
+
'vitesscluster': (InstanceStatusVitesscluster,), # noqa: E501
|
|
103
106
|
'kafkacluster': (InstanceStatusKafkacluster,), # noqa: E501
|
|
104
107
|
'kubernetes': (InstanceStatusKubernetes,), # noqa: E501
|
|
105
108
|
'kubernetes_v2': (InstanceStatusKubernetesV2,), # noqa: E501
|
|
@@ -120,6 +123,7 @@ class InstanceStatus(ModelNormal):
|
|
|
120
123
|
'version': 'version', # noqa: E501
|
|
121
124
|
'instance': 'instance', # noqa: E501
|
|
122
125
|
'cassandracluster': 'cassandracluster', # noqa: E501
|
|
126
|
+
'vitesscluster': 'vitesscluster', # noqa: E501
|
|
123
127
|
'kafkacluster': 'kafkacluster', # noqa: E501
|
|
124
128
|
'kubernetes': 'kubernetes', # noqa: E501
|
|
125
129
|
'kubernetes_v2': 'kubernetes_v2', # noqa: E501
|
|
@@ -180,6 +184,7 @@ class InstanceStatus(ModelNormal):
|
|
|
180
184
|
version (str): Deployment Version of a service. [optional] # noqa: E501
|
|
181
185
|
instance (str): Instance name. [optional] # noqa: E501
|
|
182
186
|
cassandracluster (InstanceStatusCassandracluster): [optional] # noqa: E501
|
|
187
|
+
vitesscluster (InstanceStatusVitesscluster): [optional] # noqa: E501
|
|
183
188
|
kafkacluster (InstanceStatusKafkacluster): [optional] # noqa: E501
|
|
184
189
|
kubernetes (InstanceStatusKubernetes): [optional] # noqa: E501
|
|
185
190
|
kubernetes_v2 (InstanceStatusKubernetesV2): [optional] # noqa: E501
|