paasta-tools 1.21.3__py3-none-any.whl
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.
- k8s_itests/__init__.py +0 -0
- k8s_itests/test_autoscaling.py +23 -0
- k8s_itests/utils.py +38 -0
- paasta_tools/__init__.py +20 -0
- paasta_tools/adhoc_tools.py +142 -0
- paasta_tools/api/__init__.py +13 -0
- paasta_tools/api/api.py +330 -0
- paasta_tools/api/api_docs/swagger.json +2323 -0
- paasta_tools/api/client.py +106 -0
- paasta_tools/api/settings.py +33 -0
- paasta_tools/api/tweens/__init__.py +6 -0
- paasta_tools/api/tweens/auth.py +125 -0
- paasta_tools/api/tweens/profiling.py +108 -0
- paasta_tools/api/tweens/request_logger.py +124 -0
- paasta_tools/api/views/__init__.py +13 -0
- paasta_tools/api/views/autoscaler.py +100 -0
- paasta_tools/api/views/exception.py +45 -0
- paasta_tools/api/views/flink.py +73 -0
- paasta_tools/api/views/instance.py +395 -0
- paasta_tools/api/views/pause_autoscaler.py +71 -0
- paasta_tools/api/views/remote_run.py +113 -0
- paasta_tools/api/views/resources.py +76 -0
- paasta_tools/api/views/service.py +35 -0
- paasta_tools/api/views/version.py +25 -0
- paasta_tools/apply_external_resources.py +79 -0
- paasta_tools/async_utils.py +109 -0
- paasta_tools/autoscaling/__init__.py +0 -0
- paasta_tools/autoscaling/autoscaling_service_lib.py +57 -0
- paasta_tools/autoscaling/forecasting.py +106 -0
- paasta_tools/autoscaling/max_all_k8s_services.py +41 -0
- paasta_tools/autoscaling/pause_service_autoscaler.py +77 -0
- paasta_tools/autoscaling/utils.py +52 -0
- paasta_tools/bounce_lib.py +184 -0
- paasta_tools/broadcast_log_to_services.py +62 -0
- paasta_tools/cassandracluster_tools.py +210 -0
- paasta_tools/check_autoscaler_max_instances.py +212 -0
- paasta_tools/check_cassandracluster_services_replication.py +35 -0
- paasta_tools/check_flink_services_health.py +203 -0
- paasta_tools/check_kubernetes_api.py +57 -0
- paasta_tools/check_kubernetes_services_replication.py +141 -0
- paasta_tools/check_oom_events.py +244 -0
- paasta_tools/check_services_replication_tools.py +324 -0
- paasta_tools/check_spark_jobs.py +234 -0
- paasta_tools/cleanup_kubernetes_cr.py +138 -0
- paasta_tools/cleanup_kubernetes_crd.py +145 -0
- paasta_tools/cleanup_kubernetes_jobs.py +344 -0
- paasta_tools/cleanup_tron_namespaces.py +96 -0
- paasta_tools/cli/__init__.py +13 -0
- paasta_tools/cli/authentication.py +85 -0
- paasta_tools/cli/cli.py +260 -0
- paasta_tools/cli/cmds/__init__.py +13 -0
- paasta_tools/cli/cmds/autoscale.py +143 -0
- paasta_tools/cli/cmds/check.py +334 -0
- paasta_tools/cli/cmds/cook_image.py +147 -0
- paasta_tools/cli/cmds/get_docker_image.py +76 -0
- paasta_tools/cli/cmds/get_image_version.py +172 -0
- paasta_tools/cli/cmds/get_latest_deployment.py +93 -0
- paasta_tools/cli/cmds/info.py +155 -0
- paasta_tools/cli/cmds/itest.py +117 -0
- paasta_tools/cli/cmds/list.py +66 -0
- paasta_tools/cli/cmds/list_clusters.py +42 -0
- paasta_tools/cli/cmds/list_deploy_queue.py +171 -0
- paasta_tools/cli/cmds/list_namespaces.py +84 -0
- paasta_tools/cli/cmds/local_run.py +1396 -0
- paasta_tools/cli/cmds/logs.py +1601 -0
- paasta_tools/cli/cmds/mark_for_deployment.py +1988 -0
- paasta_tools/cli/cmds/mesh_status.py +174 -0
- paasta_tools/cli/cmds/pause_service_autoscaler.py +107 -0
- paasta_tools/cli/cmds/push_to_registry.py +275 -0
- paasta_tools/cli/cmds/remote_run.py +252 -0
- paasta_tools/cli/cmds/rollback.py +347 -0
- paasta_tools/cli/cmds/secret.py +549 -0
- paasta_tools/cli/cmds/security_check.py +59 -0
- paasta_tools/cli/cmds/spark_run.py +1400 -0
- paasta_tools/cli/cmds/start_stop_restart.py +401 -0
- paasta_tools/cli/cmds/status.py +2302 -0
- paasta_tools/cli/cmds/validate.py +1012 -0
- paasta_tools/cli/cmds/wait_for_deployment.py +275 -0
- paasta_tools/cli/fsm/__init__.py +13 -0
- paasta_tools/cli/fsm/autosuggest.py +82 -0
- paasta_tools/cli/fsm/template/README.md +8 -0
- paasta_tools/cli/fsm/template/cookiecutter.json +7 -0
- paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +91 -0
- paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +20 -0
- paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +8 -0
- paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +6 -0
- paasta_tools/cli/fsm_cmd.py +121 -0
- paasta_tools/cli/paasta_tabcomplete.sh +23 -0
- paasta_tools/cli/schemas/adhoc_schema.json +199 -0
- paasta_tools/cli/schemas/autoscaling_schema.json +91 -0
- paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +37 -0
- paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +89 -0
- paasta_tools/cli/schemas/deploy_schema.json +173 -0
- paasta_tools/cli/schemas/eks_schema.json +970 -0
- paasta_tools/cli/schemas/kubernetes_schema.json +970 -0
- paasta_tools/cli/schemas/rollback_schema.json +160 -0
- paasta_tools/cli/schemas/service_schema.json +25 -0
- paasta_tools/cli/schemas/smartstack_schema.json +322 -0
- paasta_tools/cli/schemas/tron_schema.json +699 -0
- paasta_tools/cli/utils.py +1118 -0
- paasta_tools/clusterman.py +21 -0
- paasta_tools/config_utils.py +385 -0
- paasta_tools/contrib/__init__.py +0 -0
- paasta_tools/contrib/bounce_log_latency_parser.py +68 -0
- paasta_tools/contrib/check_manual_oapi_changes.sh +24 -0
- paasta_tools/contrib/check_orphans.py +306 -0
- paasta_tools/contrib/create_dynamodb_table.py +35 -0
- paasta_tools/contrib/create_paasta_playground.py +105 -0
- paasta_tools/contrib/emit_allocated_cpu_metrics.py +50 -0
- paasta_tools/contrib/get_running_task_allocation.py +346 -0
- paasta_tools/contrib/habitat_fixer.py +86 -0
- paasta_tools/contrib/ide_helper.py +316 -0
- paasta_tools/contrib/is_pod_healthy_in_proxy.py +139 -0
- paasta_tools/contrib/is_pod_healthy_in_smartstack.py +50 -0
- paasta_tools/contrib/kill_bad_containers.py +109 -0
- paasta_tools/contrib/mass-deploy-tag.sh +44 -0
- paasta_tools/contrib/mock_patch_checker.py +86 -0
- paasta_tools/contrib/paasta_update_soa_memcpu.py +520 -0
- paasta_tools/contrib/render_template.py +129 -0
- paasta_tools/contrib/rightsizer_soaconfigs_update.py +348 -0
- paasta_tools/contrib/service_shard_remove.py +157 -0
- paasta_tools/contrib/service_shard_update.py +373 -0
- paasta_tools/contrib/shared_ip_check.py +77 -0
- paasta_tools/contrib/timeouts_metrics_prom.py +64 -0
- paasta_tools/delete_kubernetes_deployments.py +89 -0
- paasta_tools/deployment_utils.py +44 -0
- paasta_tools/docker_wrapper.py +234 -0
- paasta_tools/docker_wrapper_imports.py +13 -0
- paasta_tools/drain_lib.py +351 -0
- paasta_tools/dump_locally_running_services.py +71 -0
- paasta_tools/eks_tools.py +119 -0
- paasta_tools/envoy_tools.py +373 -0
- paasta_tools/firewall.py +504 -0
- paasta_tools/firewall_logging.py +154 -0
- paasta_tools/firewall_update.py +172 -0
- paasta_tools/flink_tools.py +345 -0
- paasta_tools/flinkeks_tools.py +90 -0
- paasta_tools/frameworks/__init__.py +0 -0
- paasta_tools/frameworks/adhoc_scheduler.py +71 -0
- paasta_tools/frameworks/constraints.py +87 -0
- paasta_tools/frameworks/native_scheduler.py +652 -0
- paasta_tools/frameworks/native_service_config.py +301 -0
- paasta_tools/frameworks/task_store.py +245 -0
- paasta_tools/generate_all_deployments +9 -0
- paasta_tools/generate_authenticating_services.py +94 -0
- paasta_tools/generate_deployments_for_service.py +255 -0
- paasta_tools/generate_services_file.py +114 -0
- paasta_tools/generate_services_yaml.py +30 -0
- paasta_tools/hacheck.py +76 -0
- paasta_tools/instance/__init__.py +0 -0
- paasta_tools/instance/hpa_metrics_parser.py +122 -0
- paasta_tools/instance/kubernetes.py +1362 -0
- paasta_tools/iptables.py +240 -0
- paasta_tools/kafkacluster_tools.py +143 -0
- paasta_tools/kubernetes/__init__.py +0 -0
- paasta_tools/kubernetes/application/__init__.py +0 -0
- paasta_tools/kubernetes/application/controller_wrappers.py +476 -0
- paasta_tools/kubernetes/application/tools.py +90 -0
- paasta_tools/kubernetes/bin/__init__.py +0 -0
- paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +164 -0
- paasta_tools/kubernetes/bin/paasta_cleanup_remote_run_resources.py +135 -0
- paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +181 -0
- paasta_tools/kubernetes/bin/paasta_secrets_sync.py +758 -0
- paasta_tools/kubernetes/remote_run.py +558 -0
- paasta_tools/kubernetes_tools.py +4679 -0
- paasta_tools/list_kubernetes_service_instances.py +128 -0
- paasta_tools/list_tron_namespaces.py +60 -0
- paasta_tools/long_running_service_tools.py +678 -0
- paasta_tools/mac_address.py +44 -0
- paasta_tools/marathon_dashboard.py +0 -0
- paasta_tools/mesos/__init__.py +0 -0
- paasta_tools/mesos/cfg.py +46 -0
- paasta_tools/mesos/cluster.py +60 -0
- paasta_tools/mesos/exceptions.py +59 -0
- paasta_tools/mesos/framework.py +77 -0
- paasta_tools/mesos/log.py +48 -0
- paasta_tools/mesos/master.py +306 -0
- paasta_tools/mesos/mesos_file.py +169 -0
- paasta_tools/mesos/parallel.py +52 -0
- paasta_tools/mesos/slave.py +115 -0
- paasta_tools/mesos/task.py +94 -0
- paasta_tools/mesos/util.py +69 -0
- paasta_tools/mesos/zookeeper.py +37 -0
- paasta_tools/mesos_maintenance.py +848 -0
- paasta_tools/mesos_tools.py +1051 -0
- paasta_tools/metrics/__init__.py +0 -0
- paasta_tools/metrics/metastatus_lib.py +1110 -0
- paasta_tools/metrics/metrics_lib.py +217 -0
- paasta_tools/monitoring/__init__.py +13 -0
- paasta_tools/monitoring/check_k8s_api_performance.py +110 -0
- paasta_tools/monitoring_tools.py +652 -0
- paasta_tools/monkrelaycluster_tools.py +146 -0
- paasta_tools/nrtsearchservice_tools.py +143 -0
- paasta_tools/nrtsearchserviceeks_tools.py +68 -0
- paasta_tools/oom_logger.py +321 -0
- paasta_tools/paasta_deploy_tron_jobs +3 -0
- paasta_tools/paasta_execute_docker_command.py +123 -0
- paasta_tools/paasta_native_serviceinit.py +21 -0
- paasta_tools/paasta_service_config_loader.py +201 -0
- paasta_tools/paastaapi/__init__.py +29 -0
- paasta_tools/paastaapi/api/__init__.py +3 -0
- paasta_tools/paastaapi/api/autoscaler_api.py +302 -0
- paasta_tools/paastaapi/api/default_api.py +569 -0
- paasta_tools/paastaapi/api/remote_run_api.py +604 -0
- paasta_tools/paastaapi/api/resources_api.py +157 -0
- paasta_tools/paastaapi/api/service_api.py +1736 -0
- paasta_tools/paastaapi/api_client.py +818 -0
- paasta_tools/paastaapi/apis/__init__.py +22 -0
- paasta_tools/paastaapi/configuration.py +455 -0
- paasta_tools/paastaapi/exceptions.py +137 -0
- paasta_tools/paastaapi/model/__init__.py +5 -0
- paasta_tools/paastaapi/model/adhoc_launch_history.py +176 -0
- paasta_tools/paastaapi/model/autoscaler_count_msg.py +176 -0
- paasta_tools/paastaapi/model/deploy_queue.py +178 -0
- paasta_tools/paastaapi/model/deploy_queue_service_instance.py +194 -0
- paasta_tools/paastaapi/model/envoy_backend.py +185 -0
- paasta_tools/paastaapi/model/envoy_location.py +184 -0
- paasta_tools/paastaapi/model/envoy_status.py +181 -0
- paasta_tools/paastaapi/model/flink_cluster_overview.py +188 -0
- paasta_tools/paastaapi/model/flink_config.py +173 -0
- paasta_tools/paastaapi/model/flink_job.py +186 -0
- paasta_tools/paastaapi/model/flink_job_details.py +192 -0
- paasta_tools/paastaapi/model/flink_jobs.py +175 -0
- paasta_tools/paastaapi/model/float_and_error.py +173 -0
- paasta_tools/paastaapi/model/hpa_metric.py +176 -0
- paasta_tools/paastaapi/model/inline_object.py +170 -0
- paasta_tools/paastaapi/model/inline_response200.py +170 -0
- paasta_tools/paastaapi/model/inline_response2001.py +170 -0
- paasta_tools/paastaapi/model/instance_bounce_status.py +200 -0
- paasta_tools/paastaapi/model/instance_mesh_status.py +186 -0
- paasta_tools/paastaapi/model/instance_status.py +220 -0
- paasta_tools/paastaapi/model/instance_status_adhoc.py +187 -0
- paasta_tools/paastaapi/model/instance_status_cassandracluster.py +173 -0
- paasta_tools/paastaapi/model/instance_status_flink.py +173 -0
- paasta_tools/paastaapi/model/instance_status_kafkacluster.py +173 -0
- paasta_tools/paastaapi/model/instance_status_kubernetes.py +263 -0
- paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +187 -0
- paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +197 -0
- paasta_tools/paastaapi/model/instance_status_tron.py +204 -0
- paasta_tools/paastaapi/model/instance_tasks.py +182 -0
- paasta_tools/paastaapi/model/integer_and_error.py +173 -0
- paasta_tools/paastaapi/model/kubernetes_container.py +178 -0
- paasta_tools/paastaapi/model/kubernetes_container_v2.py +219 -0
- paasta_tools/paastaapi/model/kubernetes_healthcheck.py +176 -0
- paasta_tools/paastaapi/model/kubernetes_pod.py +201 -0
- paasta_tools/paastaapi/model/kubernetes_pod_event.py +176 -0
- paasta_tools/paastaapi/model/kubernetes_pod_v2.py +213 -0
- paasta_tools/paastaapi/model/kubernetes_replica_set.py +185 -0
- paasta_tools/paastaapi/model/kubernetes_version.py +202 -0
- paasta_tools/paastaapi/model/remote_run_outcome.py +189 -0
- paasta_tools/paastaapi/model/remote_run_start.py +185 -0
- paasta_tools/paastaapi/model/remote_run_stop.py +176 -0
- paasta_tools/paastaapi/model/remote_run_token.py +173 -0
- paasta_tools/paastaapi/model/resource.py +187 -0
- paasta_tools/paastaapi/model/resource_item.py +187 -0
- paasta_tools/paastaapi/model/resource_value.py +176 -0
- paasta_tools/paastaapi/model/smartstack_backend.py +191 -0
- paasta_tools/paastaapi/model/smartstack_location.py +181 -0
- paasta_tools/paastaapi/model/smartstack_status.py +181 -0
- paasta_tools/paastaapi/model/task_tail_lines.py +176 -0
- paasta_tools/paastaapi/model_utils.py +1879 -0
- paasta_tools/paastaapi/models/__init__.py +62 -0
- paasta_tools/paastaapi/rest.py +287 -0
- paasta_tools/prune_completed_pods.py +220 -0
- paasta_tools/puppet_service_tools.py +59 -0
- paasta_tools/py.typed +1 -0
- paasta_tools/remote_git.py +127 -0
- paasta_tools/run-paasta-api-in-dev-mode.py +57 -0
- paasta_tools/run-paasta-api-playground.py +51 -0
- paasta_tools/secret_providers/__init__.py +66 -0
- paasta_tools/secret_providers/vault.py +214 -0
- paasta_tools/secret_tools.py +277 -0
- paasta_tools/setup_istio_mesh.py +353 -0
- paasta_tools/setup_kubernetes_cr.py +412 -0
- paasta_tools/setup_kubernetes_crd.py +138 -0
- paasta_tools/setup_kubernetes_internal_crd.py +154 -0
- paasta_tools/setup_kubernetes_job.py +353 -0
- paasta_tools/setup_prometheus_adapter_config.py +1028 -0
- paasta_tools/setup_tron_namespace.py +248 -0
- paasta_tools/slack.py +75 -0
- paasta_tools/smartstack_tools.py +676 -0
- paasta_tools/spark_tools.py +283 -0
- paasta_tools/synapse_srv_namespaces_fact.py +42 -0
- paasta_tools/tron/__init__.py +0 -0
- paasta_tools/tron/client.py +158 -0
- paasta_tools/tron/tron_command_context.py +194 -0
- paasta_tools/tron/tron_timeutils.py +101 -0
- paasta_tools/tron_tools.py +1448 -0
- paasta_tools/utils.py +4307 -0
- paasta_tools/yaml_tools.py +44 -0
- paasta_tools-1.21.3.data/scripts/apply_external_resources.py +79 -0
- paasta_tools-1.21.3.data/scripts/bounce_log_latency_parser.py +68 -0
- paasta_tools-1.21.3.data/scripts/check_autoscaler_max_instances.py +212 -0
- paasta_tools-1.21.3.data/scripts/check_cassandracluster_services_replication.py +35 -0
- paasta_tools-1.21.3.data/scripts/check_flink_services_health.py +203 -0
- paasta_tools-1.21.3.data/scripts/check_kubernetes_api.py +57 -0
- paasta_tools-1.21.3.data/scripts/check_kubernetes_services_replication.py +141 -0
- paasta_tools-1.21.3.data/scripts/check_manual_oapi_changes.sh +24 -0
- paasta_tools-1.21.3.data/scripts/check_oom_events.py +244 -0
- paasta_tools-1.21.3.data/scripts/check_orphans.py +306 -0
- paasta_tools-1.21.3.data/scripts/check_spark_jobs.py +234 -0
- paasta_tools-1.21.3.data/scripts/cleanup_kubernetes_cr.py +138 -0
- paasta_tools-1.21.3.data/scripts/cleanup_kubernetes_crd.py +145 -0
- paasta_tools-1.21.3.data/scripts/cleanup_kubernetes_jobs.py +344 -0
- paasta_tools-1.21.3.data/scripts/create_dynamodb_table.py +35 -0
- paasta_tools-1.21.3.data/scripts/create_paasta_playground.py +105 -0
- paasta_tools-1.21.3.data/scripts/delete_kubernetes_deployments.py +89 -0
- paasta_tools-1.21.3.data/scripts/emit_allocated_cpu_metrics.py +50 -0
- paasta_tools-1.21.3.data/scripts/generate_all_deployments +9 -0
- paasta_tools-1.21.3.data/scripts/generate_authenticating_services.py +94 -0
- paasta_tools-1.21.3.data/scripts/generate_deployments_for_service.py +255 -0
- paasta_tools-1.21.3.data/scripts/generate_services_file.py +114 -0
- paasta_tools-1.21.3.data/scripts/generate_services_yaml.py +30 -0
- paasta_tools-1.21.3.data/scripts/get_running_task_allocation.py +346 -0
- paasta_tools-1.21.3.data/scripts/habitat_fixer.py +86 -0
- paasta_tools-1.21.3.data/scripts/ide_helper.py +316 -0
- paasta_tools-1.21.3.data/scripts/is_pod_healthy_in_proxy.py +139 -0
- paasta_tools-1.21.3.data/scripts/is_pod_healthy_in_smartstack.py +50 -0
- paasta_tools-1.21.3.data/scripts/kill_bad_containers.py +109 -0
- paasta_tools-1.21.3.data/scripts/kubernetes_remove_evicted_pods.py +164 -0
- paasta_tools-1.21.3.data/scripts/mass-deploy-tag.sh +44 -0
- paasta_tools-1.21.3.data/scripts/mock_patch_checker.py +86 -0
- paasta_tools-1.21.3.data/scripts/paasta_cleanup_remote_run_resources.py +135 -0
- paasta_tools-1.21.3.data/scripts/paasta_cleanup_stale_nodes.py +181 -0
- paasta_tools-1.21.3.data/scripts/paasta_deploy_tron_jobs +3 -0
- paasta_tools-1.21.3.data/scripts/paasta_execute_docker_command.py +123 -0
- paasta_tools-1.21.3.data/scripts/paasta_secrets_sync.py +758 -0
- paasta_tools-1.21.3.data/scripts/paasta_tabcomplete.sh +23 -0
- paasta_tools-1.21.3.data/scripts/paasta_update_soa_memcpu.py +520 -0
- paasta_tools-1.21.3.data/scripts/render_template.py +129 -0
- paasta_tools-1.21.3.data/scripts/rightsizer_soaconfigs_update.py +348 -0
- paasta_tools-1.21.3.data/scripts/service_shard_remove.py +157 -0
- paasta_tools-1.21.3.data/scripts/service_shard_update.py +373 -0
- paasta_tools-1.21.3.data/scripts/setup_istio_mesh.py +353 -0
- paasta_tools-1.21.3.data/scripts/setup_kubernetes_cr.py +412 -0
- paasta_tools-1.21.3.data/scripts/setup_kubernetes_crd.py +138 -0
- paasta_tools-1.21.3.data/scripts/setup_kubernetes_internal_crd.py +154 -0
- paasta_tools-1.21.3.data/scripts/setup_kubernetes_job.py +353 -0
- paasta_tools-1.21.3.data/scripts/setup_prometheus_adapter_config.py +1028 -0
- paasta_tools-1.21.3.data/scripts/shared_ip_check.py +77 -0
- paasta_tools-1.21.3.data/scripts/synapse_srv_namespaces_fact.py +42 -0
- paasta_tools-1.21.3.data/scripts/timeouts_metrics_prom.py +64 -0
- paasta_tools-1.21.3.dist-info/LICENSE +201 -0
- paasta_tools-1.21.3.dist-info/METADATA +74 -0
- paasta_tools-1.21.3.dist-info/RECORD +348 -0
- paasta_tools-1.21.3.dist-info/WHEEL +5 -0
- paasta_tools-1.21.3.dist-info/entry_points.txt +20 -0
- paasta_tools-1.21.3.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright 2015-2018 Yelp Inc.
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
"""
|
|
15
|
+
Usage: ./setup_tron_namespace.py service [service...] | --all
|
|
16
|
+
|
|
17
|
+
Deploy a namespace to the local Tron master from a service configuration file.
|
|
18
|
+
Reads from the soa_dir /nail/etc/services by default.
|
|
19
|
+
|
|
20
|
+
The script will load the service configuration file, generate a Tron configuration
|
|
21
|
+
file for it, and send the updated file to Tron.
|
|
22
|
+
"""
|
|
23
|
+
import argparse
|
|
24
|
+
import logging
|
|
25
|
+
import sys
|
|
26
|
+
from typing import Dict
|
|
27
|
+
from typing import List
|
|
28
|
+
|
|
29
|
+
import ruamel.yaml as yaml
|
|
30
|
+
|
|
31
|
+
from paasta_tools import spark_tools
|
|
32
|
+
from paasta_tools import tron_tools
|
|
33
|
+
from paasta_tools.kubernetes_tools import ensure_service_account
|
|
34
|
+
from paasta_tools.kubernetes_tools import KubeClient
|
|
35
|
+
from paasta_tools.tron_tools import KUBERNETES_NAMESPACE
|
|
36
|
+
from paasta_tools.tron_tools import load_tron_service_config
|
|
37
|
+
from paasta_tools.tron_tools import MASTER_NAMESPACE
|
|
38
|
+
from paasta_tools.tron_tools import TronJobConfig
|
|
39
|
+
from paasta_tools.utils import load_system_paasta_config
|
|
40
|
+
|
|
41
|
+
log = logging.getLogger(__name__)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def parse_args():
|
|
45
|
+
parser = argparse.ArgumentParser(
|
|
46
|
+
description="Update the Tron namespace configuration for a service."
|
|
47
|
+
)
|
|
48
|
+
parser.add_argument("services", nargs="*", help="Services to update.")
|
|
49
|
+
parser.add_argument(
|
|
50
|
+
"-a",
|
|
51
|
+
"--all",
|
|
52
|
+
dest="all_namespaces",
|
|
53
|
+
action="store_true",
|
|
54
|
+
help="Update all available Tron namespaces.",
|
|
55
|
+
)
|
|
56
|
+
parser.add_argument(
|
|
57
|
+
"-d",
|
|
58
|
+
"--soa-dir",
|
|
59
|
+
dest="soa_dir",
|
|
60
|
+
metavar="SOA_DIR",
|
|
61
|
+
default=tron_tools.DEFAULT_SOA_DIR,
|
|
62
|
+
help="Use a different soa config directory",
|
|
63
|
+
)
|
|
64
|
+
parser.add_argument("-v", "--verbose", action="store_true", default=False)
|
|
65
|
+
parser.add_argument("--dry-run", action="store_true", default=False)
|
|
66
|
+
parser.add_argument(
|
|
67
|
+
"--bulk-config-fetch",
|
|
68
|
+
dest="bulk_config_fetch",
|
|
69
|
+
action="store_true",
|
|
70
|
+
default=False,
|
|
71
|
+
help="Attempt to fetch all configs in bulk rather than one by one",
|
|
72
|
+
)
|
|
73
|
+
parser.add_argument(
|
|
74
|
+
"--cluster",
|
|
75
|
+
help="Cluster to read configs for. Defaults to the configuration in /etc/paasta",
|
|
76
|
+
default=None,
|
|
77
|
+
)
|
|
78
|
+
args = parser.parse_args()
|
|
79
|
+
return args
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def ensure_service_accounts(job_configs: List[TronJobConfig]) -> None:
|
|
83
|
+
# NOTE: these are lru_cache'd so it should be fine to call these for every service
|
|
84
|
+
system_paasta_config = load_system_paasta_config()
|
|
85
|
+
kube_client = KubeClient()
|
|
86
|
+
|
|
87
|
+
for job in job_configs:
|
|
88
|
+
for action in job.get_actions():
|
|
89
|
+
if action.get_iam_role():
|
|
90
|
+
ensure_service_account(
|
|
91
|
+
action.get_iam_role(),
|
|
92
|
+
namespace=KUBERNETES_NAMESPACE,
|
|
93
|
+
kube_client=kube_client,
|
|
94
|
+
)
|
|
95
|
+
# spark executors are special in that we want the SA to exist in two namespaces:
|
|
96
|
+
# the tron namespace - for the spark driver (which will be created by the ensure_service_account() above)
|
|
97
|
+
# and the spark namespace - for the spark executor (which we'll create below)
|
|
98
|
+
if (
|
|
99
|
+
action.get_executor() == "spark"
|
|
100
|
+
# this should always be truthy, but let's be safe since this comes from SystemPaastaConfig
|
|
101
|
+
and action.get_spark_executor_iam_role()
|
|
102
|
+
):
|
|
103
|
+
# this kubeclient creation is lru_cache'd so it should be fine to call this for every spark action
|
|
104
|
+
spark_kube_client = KubeClient(
|
|
105
|
+
config_file=system_paasta_config.get_spark_kubeconfig()
|
|
106
|
+
)
|
|
107
|
+
# this will look quite similar to the above, but we're ensuring that a potentially different SA exists:
|
|
108
|
+
# this one is for the actual spark executors to use. if an iam_role is set, we'll use that, otherwise
|
|
109
|
+
# there's an executor-specifc default role just like there is for the drivers :)
|
|
110
|
+
ensure_service_account(
|
|
111
|
+
action.get_spark_executor_iam_role(),
|
|
112
|
+
namespace=spark_tools.SPARK_EXECUTOR_NAMESPACE,
|
|
113
|
+
kube_client=spark_kube_client,
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def main():
|
|
118
|
+
args = parse_args()
|
|
119
|
+
log_level = logging.DEBUG if args.verbose else logging.INFO
|
|
120
|
+
logging.basicConfig(level=log_level)
|
|
121
|
+
|
|
122
|
+
if not args.cluster:
|
|
123
|
+
args.cluster = tron_tools.load_tron_config().get_cluster_name()
|
|
124
|
+
|
|
125
|
+
if args.all_namespaces:
|
|
126
|
+
if args.services:
|
|
127
|
+
log.error("Do not pass service names with --all flag")
|
|
128
|
+
sys.exit(1)
|
|
129
|
+
|
|
130
|
+
try:
|
|
131
|
+
services = tron_tools.get_tron_namespaces(
|
|
132
|
+
cluster=args.cluster, soa_dir=args.soa_dir
|
|
133
|
+
)
|
|
134
|
+
except Exception:
|
|
135
|
+
log.exception("Failed to list tron namespaces:")
|
|
136
|
+
sys.exit(1)
|
|
137
|
+
else:
|
|
138
|
+
services = args.services
|
|
139
|
+
|
|
140
|
+
if not services:
|
|
141
|
+
log.warning("No namespaces found")
|
|
142
|
+
sys.exit(0)
|
|
143
|
+
|
|
144
|
+
if not args.dry_run:
|
|
145
|
+
client = tron_tools.get_tron_client()
|
|
146
|
+
|
|
147
|
+
updated = []
|
|
148
|
+
failed = []
|
|
149
|
+
skipped = []
|
|
150
|
+
|
|
151
|
+
master_config = tron_tools.create_complete_master_config(
|
|
152
|
+
cluster=args.cluster, soa_dir=args.soa_dir
|
|
153
|
+
)
|
|
154
|
+
if args.dry_run:
|
|
155
|
+
log.info(f"Would update {MASTER_NAMESPACE} to:")
|
|
156
|
+
log.info(f"{master_config}")
|
|
157
|
+
updated.append(MASTER_NAMESPACE)
|
|
158
|
+
else:
|
|
159
|
+
try:
|
|
160
|
+
if client.update_namespace(MASTER_NAMESPACE, master_config):
|
|
161
|
+
updated.append(MASTER_NAMESPACE)
|
|
162
|
+
log.debug(f"Updated {MASTER_NAMESPACE}")
|
|
163
|
+
else:
|
|
164
|
+
skipped.append(MASTER_NAMESPACE)
|
|
165
|
+
log.debug(f"Skipped {MASTER_NAMESPACE}")
|
|
166
|
+
except Exception:
|
|
167
|
+
failed.append(MASTER_NAMESPACE)
|
|
168
|
+
log.exception(f"Error while updating {MASTER_NAMESPACE}:")
|
|
169
|
+
|
|
170
|
+
k8s_enabled_for_cluster = (
|
|
171
|
+
yaml.safe_load(master_config).get("k8s_options", {}).get("enabled", False)
|
|
172
|
+
)
|
|
173
|
+
new_configs: Dict[str, str] = {} # service -> new_config
|
|
174
|
+
for service in sorted(services):
|
|
175
|
+
try:
|
|
176
|
+
new_config = tron_tools.create_complete_config(
|
|
177
|
+
cluster=args.cluster,
|
|
178
|
+
service=service,
|
|
179
|
+
soa_dir=args.soa_dir,
|
|
180
|
+
k8s_enabled=k8s_enabled_for_cluster,
|
|
181
|
+
dry_run=args.dry_run,
|
|
182
|
+
)
|
|
183
|
+
new_configs[service] = new_config
|
|
184
|
+
if args.dry_run:
|
|
185
|
+
log.info(f"Would update {service} to:")
|
|
186
|
+
log.info(f"{new_config}")
|
|
187
|
+
updated.append(service)
|
|
188
|
+
else:
|
|
189
|
+
# PaaSTA will not necessarily have created the SAs we want to use
|
|
190
|
+
# ...so let's go ahead and create them!
|
|
191
|
+
job_configs = load_tron_service_config(
|
|
192
|
+
service=service,
|
|
193
|
+
cluster=args.cluster,
|
|
194
|
+
load_deployments=False,
|
|
195
|
+
soa_dir=args.soa_dir,
|
|
196
|
+
# XXX: we can remove for_validation now that we've refactored how service account stuff works
|
|
197
|
+
for_validation=False,
|
|
198
|
+
)
|
|
199
|
+
ensure_service_accounts(job_configs)
|
|
200
|
+
if not args.bulk_config_fetch:
|
|
201
|
+
if client.update_namespace(service, new_config):
|
|
202
|
+
updated.append(service)
|
|
203
|
+
log.debug(f"Updated {service}")
|
|
204
|
+
else:
|
|
205
|
+
skipped.append(service)
|
|
206
|
+
log.debug(f"Skipped {service}")
|
|
207
|
+
|
|
208
|
+
except Exception:
|
|
209
|
+
if args.bulk_config_fetch:
|
|
210
|
+
# service account creation should be the only action that can throw if this flag is true,
|
|
211
|
+
# so we can safely assume that's what happened here in the log message
|
|
212
|
+
log.exception(
|
|
213
|
+
f"Failed to create service account for {service} (will skip reconfiguring):"
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
# since service account creation failed, we want to skip reconfiguring this service
|
|
217
|
+
# as the new config will likely fail due to the missing service account - even though
|
|
218
|
+
# the rest of the config is valid
|
|
219
|
+
new_configs.pop(service, None)
|
|
220
|
+
else:
|
|
221
|
+
log.exception(f"Update for {service} failed:")
|
|
222
|
+
|
|
223
|
+
# NOTE: this happens for both ways of updating (bulk fetch and JIT fetch)
|
|
224
|
+
# since we need to print out what failed in either case
|
|
225
|
+
failed.append(service)
|
|
226
|
+
|
|
227
|
+
if args.dry_run and args.bulk_config_fetch:
|
|
228
|
+
updated_namespaces = client.update_namespaces(new_configs)
|
|
229
|
+
|
|
230
|
+
if updated_namespaces:
|
|
231
|
+
updated = list(updated_namespaces.keys())
|
|
232
|
+
log.debug(f"Updated {updated}")
|
|
233
|
+
|
|
234
|
+
if updated_namespaces != new_configs.keys():
|
|
235
|
+
skipped = set(new_configs.keys()) - set(updated_namespaces.keys())
|
|
236
|
+
log.debug(f"Skipped {skipped}")
|
|
237
|
+
|
|
238
|
+
skipped_report = skipped if args.verbose else len(skipped)
|
|
239
|
+
log.info(
|
|
240
|
+
f"Updated following namespaces: {updated}, "
|
|
241
|
+
f"failed: {failed}, skipped: {skipped_report}"
|
|
242
|
+
)
|
|
243
|
+
|
|
244
|
+
sys.exit(1 if failed else 0)
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
if __name__ == "__main__":
|
|
248
|
+
main()
|
paasta_tools/slack.py
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Copyright 2015-2017 Yelp Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
import logging
|
|
15
|
+
import os
|
|
16
|
+
|
|
17
|
+
from slackclient import SlackClient
|
|
18
|
+
|
|
19
|
+
from paasta_tools.utils import optionally_load_system_paasta_config
|
|
20
|
+
|
|
21
|
+
log = logging.getLogger(__name__)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class PaastaSlackClient(SlackClient):
|
|
25
|
+
def __init__(self, token):
|
|
26
|
+
super().__init__(self)
|
|
27
|
+
if token is None:
|
|
28
|
+
log.warning("No slack token available, will only log")
|
|
29
|
+
self.sc = None
|
|
30
|
+
else:
|
|
31
|
+
self.sc = SlackClient(token)
|
|
32
|
+
self.token = token
|
|
33
|
+
|
|
34
|
+
def post(self, channels, message=None, blocks=None, thread_ts=None):
|
|
35
|
+
responses = []
|
|
36
|
+
if self.token is not None:
|
|
37
|
+
for channel in channels:
|
|
38
|
+
log.info(f"Slack notification [{channel}]: {message}")
|
|
39
|
+
response = self.sc.api_call(
|
|
40
|
+
"chat.postMessage",
|
|
41
|
+
channel=channel,
|
|
42
|
+
text=message,
|
|
43
|
+
blocks=blocks,
|
|
44
|
+
thread_ts=thread_ts,
|
|
45
|
+
)
|
|
46
|
+
if response["ok"] is not True:
|
|
47
|
+
log.error("Posting to slack failed: {}".format(response["error"]))
|
|
48
|
+
responses.append(response)
|
|
49
|
+
else:
|
|
50
|
+
log.info(f"(not sent to Slack) {channels}: {message}")
|
|
51
|
+
return responses
|
|
52
|
+
|
|
53
|
+
def post_single(self, channel, message=None, blocks=None, thread_ts=None):
|
|
54
|
+
if self.token is not None:
|
|
55
|
+
log.info(f"Slack notification [{channel}]: {message}")
|
|
56
|
+
response = self.sc.api_call(
|
|
57
|
+
"chat.postMessage",
|
|
58
|
+
channel=channel,
|
|
59
|
+
text=message,
|
|
60
|
+
blocks=blocks,
|
|
61
|
+
thread_ts=thread_ts,
|
|
62
|
+
)
|
|
63
|
+
if response["ok"] is not True:
|
|
64
|
+
log.error("Posting to slack failed: {}".format(response["error"]))
|
|
65
|
+
return response
|
|
66
|
+
else:
|
|
67
|
+
log.info(f"(not sent to Slack) {channel}: {message}")
|
|
68
|
+
return {"ok"}
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def get_slack_client():
|
|
72
|
+
token = os.environ.get("SLACK_API_TOKEN", None)
|
|
73
|
+
if token is None:
|
|
74
|
+
token = optionally_load_system_paasta_config().get_slack_token()
|
|
75
|
+
return PaastaSlackClient(token=token)
|