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,172 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright 2015-2016 Yelp Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
import argparse
|
|
16
|
+
import datetime
|
|
17
|
+
import re
|
|
18
|
+
import sys
|
|
19
|
+
from typing import Optional
|
|
20
|
+
|
|
21
|
+
from paasta_tools.cli.utils import lazy_choices_completer
|
|
22
|
+
from paasta_tools.cli.utils import PaastaColors
|
|
23
|
+
from paasta_tools.cli.utils import validate_service_name
|
|
24
|
+
from paasta_tools.utils import DEFAULT_SOA_DIR
|
|
25
|
+
from paasta_tools.utils import DeploymentsJsonV2Dict
|
|
26
|
+
from paasta_tools.utils import format_timestamp
|
|
27
|
+
from paasta_tools.utils import get_pipeline_deploy_group_configs
|
|
28
|
+
from paasta_tools.utils import list_services
|
|
29
|
+
from paasta_tools.utils import load_v2_deployments_json
|
|
30
|
+
from paasta_tools.utils import optionally_load_system_paasta_config
|
|
31
|
+
from paasta_tools.utils import parse_timestamp
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def add_subparser(subparsers: argparse._SubParsersAction) -> None:
|
|
35
|
+
parser = subparsers.add_parser(
|
|
36
|
+
"get-image-version",
|
|
37
|
+
help="Returns the value to be used for an image version, which will be used in automated redeploys of the same service SHA. If no deploy groups are configured for automated redeploys, will return no output.",
|
|
38
|
+
)
|
|
39
|
+
parser.add_argument(
|
|
40
|
+
"-f",
|
|
41
|
+
"--force",
|
|
42
|
+
help="Force a brand new image_version, regardless if the latest build was recent",
|
|
43
|
+
action="store_true",
|
|
44
|
+
default=False,
|
|
45
|
+
)
|
|
46
|
+
parser.add_argument(
|
|
47
|
+
"--max-age",
|
|
48
|
+
help="max age in seconds (default %(default)s)",
|
|
49
|
+
type=int,
|
|
50
|
+
default=2592000, # TODO: Get from paasta system config
|
|
51
|
+
)
|
|
52
|
+
arg_service = parser.add_argument(
|
|
53
|
+
"-s",
|
|
54
|
+
"--service",
|
|
55
|
+
help="Name of the service which you want to get the image version for.",
|
|
56
|
+
required=True,
|
|
57
|
+
)
|
|
58
|
+
arg_service.completer = lazy_choices_completer(list_services) # type: ignore
|
|
59
|
+
parser.add_argument(
|
|
60
|
+
"-c",
|
|
61
|
+
"--commit",
|
|
62
|
+
help="Commit to be used with generated image version",
|
|
63
|
+
required=True,
|
|
64
|
+
)
|
|
65
|
+
parser.add_argument(
|
|
66
|
+
"-y",
|
|
67
|
+
"--soa-dir",
|
|
68
|
+
help="A directory from which soa-configs should be read",
|
|
69
|
+
default=DEFAULT_SOA_DIR,
|
|
70
|
+
)
|
|
71
|
+
parser.set_defaults(command=paasta_get_image_version)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def check_enable_automated_redeploys(service: str, soa_dir: str) -> bool:
|
|
75
|
+
deploy_steps = get_pipeline_deploy_group_configs(service, soa_dir)
|
|
76
|
+
enabled_by_default = (
|
|
77
|
+
optionally_load_system_paasta_config().get_enable_automated_redeploys_default()
|
|
78
|
+
)
|
|
79
|
+
return any(
|
|
80
|
+
[
|
|
81
|
+
step.get("enable_automated_redeploys", enabled_by_default)
|
|
82
|
+
for step in deploy_steps
|
|
83
|
+
]
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
def extract_timestamp(image_version: str) -> Optional[datetime.datetime]:
|
|
88
|
+
ts_str = re.match(r"^(?P<ts_str>[0-9]{8}T[0-9]{6})", image_version).group()
|
|
89
|
+
return parse_timestamp(ts_str)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def should_generate_new_image_version(old: str, new: str, max_age: int) -> bool:
|
|
93
|
+
# TODO: Handle additional criteria
|
|
94
|
+
# Extract dates & compare
|
|
95
|
+
try:
|
|
96
|
+
age_diff = (extract_timestamp(new) - extract_timestamp(old)).total_seconds()
|
|
97
|
+
|
|
98
|
+
if age_diff < max_age:
|
|
99
|
+
return False
|
|
100
|
+
print(
|
|
101
|
+
PaastaColors.yellow(
|
|
102
|
+
f"Old image version was {age_diff}s old, generating new one"
|
|
103
|
+
),
|
|
104
|
+
file=sys.stderr,
|
|
105
|
+
)
|
|
106
|
+
except Exception as e:
|
|
107
|
+
print(
|
|
108
|
+
PaastaColors.red(
|
|
109
|
+
f"Error: hit an exception {e} checking image version, will create new version {new}"
|
|
110
|
+
),
|
|
111
|
+
file=sys.stderr,
|
|
112
|
+
)
|
|
113
|
+
return True
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def get_latest_image_version(deployments: DeploymentsJsonV2Dict, commit: str) -> str:
|
|
117
|
+
image_version = None
|
|
118
|
+
# Image versions start with sortable timestamp
|
|
119
|
+
# We only care about deployments for this sha; otherwise we will generate a new image_version
|
|
120
|
+
sorted_image_versions = sorted(
|
|
121
|
+
[
|
|
122
|
+
deployment.get("image_version")
|
|
123
|
+
for deployment in deployments["deployments"].values()
|
|
124
|
+
if deployment.get("image_version") and deployment.get("git_sha") == commit
|
|
125
|
+
],
|
|
126
|
+
reverse=True,
|
|
127
|
+
)
|
|
128
|
+
if sorted_image_versions:
|
|
129
|
+
image_version = sorted_image_versions[0]
|
|
130
|
+
return image_version
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
def paasta_get_image_version(args: argparse.Namespace) -> int:
|
|
134
|
+
service = args.service
|
|
135
|
+
soa_dir = args.soa_dir
|
|
136
|
+
|
|
137
|
+
validate_service_name(service, soa_dir)
|
|
138
|
+
|
|
139
|
+
# Check if any deploy groups have set enable_automated_redeploys
|
|
140
|
+
if not check_enable_automated_redeploys(service, soa_dir):
|
|
141
|
+
print(
|
|
142
|
+
PaastaColors.red(
|
|
143
|
+
f"Automated redeploys not enabled for {service}, returning no image_version"
|
|
144
|
+
),
|
|
145
|
+
file=sys.stderr,
|
|
146
|
+
)
|
|
147
|
+
return 0
|
|
148
|
+
|
|
149
|
+
current_timestamp = datetime.datetime.now()
|
|
150
|
+
|
|
151
|
+
# TODO: Handle additional identifiers, flavor, etc
|
|
152
|
+
new_image_version = format_timestamp(current_timestamp)
|
|
153
|
+
|
|
154
|
+
if args.force:
|
|
155
|
+
# Force a new version immediately
|
|
156
|
+
print(new_image_version)
|
|
157
|
+
return 0
|
|
158
|
+
|
|
159
|
+
# get latest image_version of any deploy group from deployments.json
|
|
160
|
+
deployments = load_v2_deployments_json(service, soa_dir)
|
|
161
|
+
latest_image_version = get_latest_image_version(
|
|
162
|
+
deployments.config_dict, commit=args.commit
|
|
163
|
+
)
|
|
164
|
+
|
|
165
|
+
if should_generate_new_image_version(
|
|
166
|
+
old=latest_image_version, new=new_image_version, max_age=args.max_age
|
|
167
|
+
):
|
|
168
|
+
print(new_image_version)
|
|
169
|
+
else:
|
|
170
|
+
print(latest_image_version)
|
|
171
|
+
|
|
172
|
+
return 0
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright 2015-2016 Yelp Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
import sys
|
|
16
|
+
|
|
17
|
+
from paasta_tools.cli.utils import lazy_choices_completer
|
|
18
|
+
from paasta_tools.cli.utils import list_deploy_groups
|
|
19
|
+
from paasta_tools.cli.utils import PaastaColors
|
|
20
|
+
from paasta_tools.cli.utils import validate_service_name
|
|
21
|
+
from paasta_tools.deployment_utils import get_currently_deployed_version
|
|
22
|
+
from paasta_tools.utils import DEFAULT_SOA_DIR
|
|
23
|
+
from paasta_tools.utils import list_services
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def add_subparser(subparsers):
|
|
27
|
+
list_parser = subparsers.add_parser(
|
|
28
|
+
"get-latest-deployment",
|
|
29
|
+
help="Gets the Git SHA for the latest deployment of a service",
|
|
30
|
+
)
|
|
31
|
+
list_parser.add_argument(
|
|
32
|
+
"-s",
|
|
33
|
+
"--service",
|
|
34
|
+
help="Name of the service which you want to get the latest deployment for.",
|
|
35
|
+
required=True,
|
|
36
|
+
).completer = lazy_choices_completer(list_services)
|
|
37
|
+
list_parser.add_argument(
|
|
38
|
+
"-i",
|
|
39
|
+
"-l",
|
|
40
|
+
"--deploy-group",
|
|
41
|
+
help="Name of the deploy group which you want to get the latest deployment for.",
|
|
42
|
+
required=True,
|
|
43
|
+
).completer = lazy_choices_completer(list_deploy_groups)
|
|
44
|
+
list_parser.add_argument(
|
|
45
|
+
"-d",
|
|
46
|
+
"--soa-dir",
|
|
47
|
+
help="A directory from which soa-configs should be read from",
|
|
48
|
+
default=DEFAULT_SOA_DIR,
|
|
49
|
+
)
|
|
50
|
+
format_group = list_parser.add_mutually_exclusive_group()
|
|
51
|
+
format_group.add_argument(
|
|
52
|
+
"--sha-only",
|
|
53
|
+
help="Return only the latest sha for this deploy group, not the full deployed version",
|
|
54
|
+
action="store_true",
|
|
55
|
+
default=False,
|
|
56
|
+
)
|
|
57
|
+
format_group.add_argument(
|
|
58
|
+
"-j",
|
|
59
|
+
"--json",
|
|
60
|
+
help="Return result in json format instead of raw string",
|
|
61
|
+
action="store_true",
|
|
62
|
+
default=False,
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
list_parser.set_defaults(command=paasta_get_latest_deployment)
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
def paasta_get_latest_deployment(args):
|
|
69
|
+
service = args.service
|
|
70
|
+
deploy_group = args.deploy_group
|
|
71
|
+
soa_dir = args.soa_dir
|
|
72
|
+
validate_service_name(service, soa_dir)
|
|
73
|
+
|
|
74
|
+
version = get_currently_deployed_version(
|
|
75
|
+
service=service, deploy_group=deploy_group, soa_dir=soa_dir
|
|
76
|
+
)
|
|
77
|
+
if not version:
|
|
78
|
+
print(
|
|
79
|
+
PaastaColors.red(
|
|
80
|
+
f"A deployment could not be found for {deploy_group} in {service}"
|
|
81
|
+
),
|
|
82
|
+
file=sys.stderr,
|
|
83
|
+
)
|
|
84
|
+
return 1
|
|
85
|
+
else:
|
|
86
|
+
if args.sha_only:
|
|
87
|
+
print(version.sha)
|
|
88
|
+
else:
|
|
89
|
+
if args.json:
|
|
90
|
+
print(version.json())
|
|
91
|
+
else:
|
|
92
|
+
print(version)
|
|
93
|
+
return 0
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright 2015-2016 Yelp Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
from typing import Collection
|
|
16
|
+
from typing import List
|
|
17
|
+
|
|
18
|
+
from service_configuration_lib import read_service_configuration
|
|
19
|
+
|
|
20
|
+
from paasta_tools.cli.cmds.status import get_actual_deployments
|
|
21
|
+
from paasta_tools.cli.utils import figure_out_service_name
|
|
22
|
+
from paasta_tools.cli.utils import lazy_choices_completer
|
|
23
|
+
from paasta_tools.long_running_service_tools import get_all_namespaces_for_service
|
|
24
|
+
from paasta_tools.long_running_service_tools import load_service_namespace_config
|
|
25
|
+
from paasta_tools.monitoring_tools import get_runbook
|
|
26
|
+
from paasta_tools.monitoring_tools import get_team
|
|
27
|
+
from paasta_tools.utils import DEFAULT_SOA_DIR
|
|
28
|
+
from paasta_tools.utils import get_git_url
|
|
29
|
+
from paasta_tools.utils import list_services
|
|
30
|
+
from paasta_tools.utils import NoDeploymentsAvailable
|
|
31
|
+
from paasta_tools.utils import PaastaColors
|
|
32
|
+
|
|
33
|
+
NO_DESCRIPTION_MESSAGE = "No 'description' entry in service.yaml. Please add a one line sentence that describes this service"
|
|
34
|
+
NO_EXTERNAL_LINK_MESSAGE = (
|
|
35
|
+
"No 'external_link' entry in service.yaml. "
|
|
36
|
+
"Please add one that points to a reference doc for your service"
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
# modes that depend on smartstack port cannot be tested via paasta proxies, so we exclude those
|
|
40
|
+
TESTABLE_SERVICE_MODES = {"http", "https"}
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def add_subparser(subparsers):
|
|
44
|
+
list_parser = subparsers.add_parser(
|
|
45
|
+
"info",
|
|
46
|
+
help="Prints the general information about a service.",
|
|
47
|
+
description=(
|
|
48
|
+
"'paasta info' gathers information about a service from soa-configs "
|
|
49
|
+
"and prints it in a human-friendly way. It does no API calls, it "
|
|
50
|
+
"just analyzes the config files."
|
|
51
|
+
),
|
|
52
|
+
)
|
|
53
|
+
list_parser.add_argument(
|
|
54
|
+
"-s", "--service", help="The name of the service you wish to inspect"
|
|
55
|
+
).completer = lazy_choices_completer(list_services)
|
|
56
|
+
list_parser.add_argument(
|
|
57
|
+
"-d",
|
|
58
|
+
"--soa-dir",
|
|
59
|
+
dest="soa_dir",
|
|
60
|
+
metavar="SOA_DIR",
|
|
61
|
+
default=DEFAULT_SOA_DIR,
|
|
62
|
+
help="define a different soa config directory",
|
|
63
|
+
)
|
|
64
|
+
list_parser.set_defaults(command=paasta_info)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def deployments_to_clusters(deployments: Collection[str]) -> Collection[str]:
|
|
68
|
+
clusters = []
|
|
69
|
+
for deployment in deployments:
|
|
70
|
+
cluster = deployment.split(".")[0]
|
|
71
|
+
clusters.append(cluster)
|
|
72
|
+
return set(clusters)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def get_smartstack_endpoints(service, soa_dir):
|
|
76
|
+
endpoints = []
|
|
77
|
+
for name, config in get_all_namespaces_for_service(
|
|
78
|
+
service, full_name=False, soa_dir=soa_dir
|
|
79
|
+
):
|
|
80
|
+
mode = config.get("mode", "http")
|
|
81
|
+
port = config.get("proxy_port")
|
|
82
|
+
endpoints.append(f"{mode}://169.254.255.254:{port} ({name})")
|
|
83
|
+
return endpoints
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def get_deployments_strings(service: str, soa_dir: str) -> List[str]:
|
|
87
|
+
output = []
|
|
88
|
+
try:
|
|
89
|
+
deployments = get_actual_deployments(service, soa_dir)
|
|
90
|
+
except NoDeploymentsAvailable:
|
|
91
|
+
deployments = {}
|
|
92
|
+
if deployments == {}:
|
|
93
|
+
output.append(" - N/A: Not deployed to any PaaSTA Clusters")
|
|
94
|
+
else:
|
|
95
|
+
service_config = load_service_namespace_config(
|
|
96
|
+
service=service, namespace="main", soa_dir=soa_dir
|
|
97
|
+
)
|
|
98
|
+
service_mode = service_config.get_mode()
|
|
99
|
+
for cluster in deployments_to_clusters(deployments):
|
|
100
|
+
if service_mode in TESTABLE_SERVICE_MODES:
|
|
101
|
+
link = PaastaColors.cyan(
|
|
102
|
+
f"{service_mode}://{service}.proxy.{cluster}.paasta/"
|
|
103
|
+
)
|
|
104
|
+
else:
|
|
105
|
+
link = "N/A"
|
|
106
|
+
output.append(f" - {cluster} ({link})")
|
|
107
|
+
return output
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def get_dashboard_urls(service):
|
|
111
|
+
output = [
|
|
112
|
+
" - %s (service load y/sl2)" % (PaastaColors.cyan(f"http://y/{service}_load"))
|
|
113
|
+
]
|
|
114
|
+
return output
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
def get_service_info(service, soa_dir):
|
|
118
|
+
service_configuration = read_service_configuration(service, soa_dir)
|
|
119
|
+
description = service_configuration.get("description", NO_DESCRIPTION_MESSAGE)
|
|
120
|
+
external_link = service_configuration.get("external_link", NO_EXTERNAL_LINK_MESSAGE)
|
|
121
|
+
smartstack_endpoints = get_smartstack_endpoints(service, soa_dir)
|
|
122
|
+
git_url = get_git_url(service, soa_dir)
|
|
123
|
+
|
|
124
|
+
output = []
|
|
125
|
+
output.append("Service Name: %s" % service)
|
|
126
|
+
output.append("Description: %s" % description)
|
|
127
|
+
output.append("External Link: %s" % PaastaColors.cyan(external_link))
|
|
128
|
+
output.append(
|
|
129
|
+
"Monitored By: team %s"
|
|
130
|
+
% get_team(service=service, overrides={}, soa_dir=soa_dir)
|
|
131
|
+
)
|
|
132
|
+
output.append(
|
|
133
|
+
"Runbook: %s"
|
|
134
|
+
% PaastaColors.cyan(get_runbook(service=service, overrides={}, soa_dir=soa_dir))
|
|
135
|
+
)
|
|
136
|
+
output.append("Git Repo: %s" % git_url)
|
|
137
|
+
output.append(
|
|
138
|
+
"Deployed to the following clusters (with test URLs, where available):"
|
|
139
|
+
)
|
|
140
|
+
output.extend(get_deployments_strings(service, soa_dir))
|
|
141
|
+
if smartstack_endpoints:
|
|
142
|
+
output.append("Smartstack endpoint(s):")
|
|
143
|
+
for endpoint in smartstack_endpoints:
|
|
144
|
+
output.append(" - %s" % endpoint)
|
|
145
|
+
output.append("Dashboard(s):")
|
|
146
|
+
output.extend(get_dashboard_urls(service))
|
|
147
|
+
|
|
148
|
+
return "\n".join(output)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
def paasta_info(args):
|
|
152
|
+
"""Prints general information about a service"""
|
|
153
|
+
soa_dir = args.soa_dir
|
|
154
|
+
service = figure_out_service_name(args, soa_dir=soa_dir)
|
|
155
|
+
print(get_service_info(service, soa_dir))
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright 2015-2016 Yelp Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
import os
|
|
16
|
+
|
|
17
|
+
from paasta_tools.cli.utils import get_jenkins_build_output_url
|
|
18
|
+
from paasta_tools.cli.utils import lazy_choices_completer
|
|
19
|
+
from paasta_tools.cli.utils import validate_service_name
|
|
20
|
+
from paasta_tools.utils import _log
|
|
21
|
+
from paasta_tools.utils import _run
|
|
22
|
+
from paasta_tools.utils import build_docker_tag
|
|
23
|
+
from paasta_tools.utils import check_docker_image
|
|
24
|
+
from paasta_tools.utils import DEFAULT_SOA_DIR
|
|
25
|
+
from paasta_tools.utils import list_services
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def add_subparser(subparsers):
|
|
29
|
+
list_parser = subparsers.add_parser(
|
|
30
|
+
"itest",
|
|
31
|
+
help="Runs 'make itest' as part of the PaaSTA contract.",
|
|
32
|
+
description=(
|
|
33
|
+
"'paasta itest' runs 'make itest' in the root of a service directory. "
|
|
34
|
+
"It is designed to be used in conjunction with the 'Jenkins' workflow: "
|
|
35
|
+
"http://paasta.readthedocs.io/en/latest/about/contract.html#jenkins-pipeline-recommended"
|
|
36
|
+
),
|
|
37
|
+
)
|
|
38
|
+
list_parser.add_argument(
|
|
39
|
+
"-s",
|
|
40
|
+
"--service",
|
|
41
|
+
help="Test and build docker image for this service. Leading "
|
|
42
|
+
'"services-", as included in a Jenkins job name, '
|
|
43
|
+
"will be stripped.",
|
|
44
|
+
required=True,
|
|
45
|
+
)
|
|
46
|
+
list_parser.add_argument(
|
|
47
|
+
"-c",
|
|
48
|
+
"--commit",
|
|
49
|
+
help="Git sha used to construct tag for built image",
|
|
50
|
+
required=True,
|
|
51
|
+
)
|
|
52
|
+
list_parser.add_argument(
|
|
53
|
+
"--image-version",
|
|
54
|
+
type=str,
|
|
55
|
+
required=False,
|
|
56
|
+
default=None,
|
|
57
|
+
help="Extra version metadata used to construct tag for built image",
|
|
58
|
+
)
|
|
59
|
+
list_parser.add_argument(
|
|
60
|
+
"-d",
|
|
61
|
+
"--soa-dir",
|
|
62
|
+
dest="soa_dir",
|
|
63
|
+
help="A directory from which soa-configs should be read from",
|
|
64
|
+
default=DEFAULT_SOA_DIR,
|
|
65
|
+
).completer = lazy_choices_completer(list_services)
|
|
66
|
+
list_parser.add_argument(
|
|
67
|
+
"--timeout",
|
|
68
|
+
dest="timeout",
|
|
69
|
+
help="How many seconds before this command times out",
|
|
70
|
+
default=3600,
|
|
71
|
+
type=float,
|
|
72
|
+
)
|
|
73
|
+
list_parser.set_defaults(command=paasta_itest)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def paasta_itest(args):
|
|
77
|
+
"""Build and test a docker image"""
|
|
78
|
+
service = args.service
|
|
79
|
+
soa_dir = args.soa_dir
|
|
80
|
+
if service and service.startswith("services-"):
|
|
81
|
+
service = service.split("services-", 1)[1]
|
|
82
|
+
validate_service_name(service, soa_dir=soa_dir)
|
|
83
|
+
|
|
84
|
+
tag = build_docker_tag(service, args.commit, args.image_version)
|
|
85
|
+
run_env = os.environ.copy()
|
|
86
|
+
run_env["DOCKER_TAG"] = tag
|
|
87
|
+
cmd = "make itest"
|
|
88
|
+
loglines = []
|
|
89
|
+
|
|
90
|
+
_log(
|
|
91
|
+
service=service,
|
|
92
|
+
line="starting itest for %s." % args.commit,
|
|
93
|
+
component="build",
|
|
94
|
+
level="event",
|
|
95
|
+
)
|
|
96
|
+
returncode, output = _run(
|
|
97
|
+
cmd,
|
|
98
|
+
env=run_env,
|
|
99
|
+
timeout=args.timeout,
|
|
100
|
+
log=True,
|
|
101
|
+
component="build",
|
|
102
|
+
service=service,
|
|
103
|
+
loglevel="debug",
|
|
104
|
+
)
|
|
105
|
+
if returncode != 0:
|
|
106
|
+
loglines.append("ERROR: itest failed for %s." % args.commit)
|
|
107
|
+
output = get_jenkins_build_output_url()
|
|
108
|
+
if output:
|
|
109
|
+
loglines.append("See output: %s" % output)
|
|
110
|
+
else:
|
|
111
|
+
loglines.append("itest passed for %s." % args.commit)
|
|
112
|
+
if not check_docker_image(service, args.commit, args.image_version):
|
|
113
|
+
loglines.append("ERROR: itest has not created %s" % tag)
|
|
114
|
+
returncode = 1
|
|
115
|
+
for logline in loglines:
|
|
116
|
+
_log(service=service, line=logline, component="build", level="event")
|
|
117
|
+
return returncode
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright 2015-2016 Yelp Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
from service_configuration_lib import DEFAULT_SOA_DIR
|
|
16
|
+
|
|
17
|
+
from paasta_tools.cli.utils import list_paasta_services
|
|
18
|
+
from paasta_tools.cli.utils import list_service_instances
|
|
19
|
+
from paasta_tools.utils import list_services
|
|
20
|
+
from paasta_tools.utils import SPACER
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def add_subparser(subparsers):
|
|
24
|
+
list_parser = subparsers.add_parser(
|
|
25
|
+
"list",
|
|
26
|
+
help="Display a list of PaaSTA services",
|
|
27
|
+
description=(
|
|
28
|
+
"'paasta list' inspects the soa-configs directory and lists all of the "
|
|
29
|
+
"PaaSTA services that are declared."
|
|
30
|
+
),
|
|
31
|
+
)
|
|
32
|
+
list_parser.add_argument(
|
|
33
|
+
"-a",
|
|
34
|
+
"--all",
|
|
35
|
+
action="store_true",
|
|
36
|
+
help="Display all services, even if not on PaaSTA.",
|
|
37
|
+
)
|
|
38
|
+
list_parser.add_argument(
|
|
39
|
+
"-i",
|
|
40
|
+
"--print-instances",
|
|
41
|
+
action="store_true",
|
|
42
|
+
help="Display all service%sinstance values, which only PaaSTA services have."
|
|
43
|
+
% SPACER,
|
|
44
|
+
)
|
|
45
|
+
list_parser.add_argument(
|
|
46
|
+
"-y",
|
|
47
|
+
"--yelpsoa-config-root",
|
|
48
|
+
dest="soa_dir",
|
|
49
|
+
help="A directory from which yelpsoa-configs should be read from",
|
|
50
|
+
default=DEFAULT_SOA_DIR,
|
|
51
|
+
)
|
|
52
|
+
list_parser.set_defaults(command=paasta_list)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def paasta_list(args):
|
|
56
|
+
"""Print a list of Yelp services currently running
|
|
57
|
+
:param args: argparse.Namespace obj created from sys.args by cli"""
|
|
58
|
+
if args.print_instances:
|
|
59
|
+
services = list_service_instances(args.soa_dir)
|
|
60
|
+
elif args.all:
|
|
61
|
+
services = list_services(args.soa_dir)
|
|
62
|
+
else:
|
|
63
|
+
services = list_paasta_services(args.soa_dir)
|
|
64
|
+
|
|
65
|
+
for service in services:
|
|
66
|
+
print(service)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright 2015-2016 Yelp Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
from paasta_tools.utils import DEFAULT_SOA_DIR
|
|
16
|
+
from paasta_tools.utils import list_clusters
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def add_subparser(subparsers):
|
|
20
|
+
list_parser = subparsers.add_parser(
|
|
21
|
+
"list-clusters",
|
|
22
|
+
help="Display a list of all PaaSTA clusters",
|
|
23
|
+
description=(
|
|
24
|
+
"'paasta list' inspects all of the PaaSTA services declared in the soa-configs "
|
|
25
|
+
"directory, and prints the set of unique clusters that are used.\n\n"
|
|
26
|
+
"The command can only report those clusters that are actually used by some services."
|
|
27
|
+
),
|
|
28
|
+
)
|
|
29
|
+
list_parser.add_argument(
|
|
30
|
+
"-d",
|
|
31
|
+
"--soa-dir",
|
|
32
|
+
dest="soa_dir",
|
|
33
|
+
metavar="SOA_DIR",
|
|
34
|
+
default=DEFAULT_SOA_DIR,
|
|
35
|
+
help="define a different soa config directory",
|
|
36
|
+
)
|
|
37
|
+
list_parser.set_defaults(command=paasta_list_clusters)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def paasta_list_clusters(args, **kwargs):
|
|
41
|
+
for cluster in list_clusters(soa_dir=args.soa_dir):
|
|
42
|
+
print(cluster)
|