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.
Files changed (348) hide show
  1. k8s_itests/__init__.py +0 -0
  2. k8s_itests/test_autoscaling.py +23 -0
  3. k8s_itests/utils.py +38 -0
  4. paasta_tools/__init__.py +20 -0
  5. paasta_tools/adhoc_tools.py +142 -0
  6. paasta_tools/api/__init__.py +13 -0
  7. paasta_tools/api/api.py +330 -0
  8. paasta_tools/api/api_docs/swagger.json +2323 -0
  9. paasta_tools/api/client.py +106 -0
  10. paasta_tools/api/settings.py +33 -0
  11. paasta_tools/api/tweens/__init__.py +6 -0
  12. paasta_tools/api/tweens/auth.py +125 -0
  13. paasta_tools/api/tweens/profiling.py +108 -0
  14. paasta_tools/api/tweens/request_logger.py +124 -0
  15. paasta_tools/api/views/__init__.py +13 -0
  16. paasta_tools/api/views/autoscaler.py +100 -0
  17. paasta_tools/api/views/exception.py +45 -0
  18. paasta_tools/api/views/flink.py +73 -0
  19. paasta_tools/api/views/instance.py +395 -0
  20. paasta_tools/api/views/pause_autoscaler.py +71 -0
  21. paasta_tools/api/views/remote_run.py +113 -0
  22. paasta_tools/api/views/resources.py +76 -0
  23. paasta_tools/api/views/service.py +35 -0
  24. paasta_tools/api/views/version.py +25 -0
  25. paasta_tools/apply_external_resources.py +79 -0
  26. paasta_tools/async_utils.py +109 -0
  27. paasta_tools/autoscaling/__init__.py +0 -0
  28. paasta_tools/autoscaling/autoscaling_service_lib.py +57 -0
  29. paasta_tools/autoscaling/forecasting.py +106 -0
  30. paasta_tools/autoscaling/max_all_k8s_services.py +41 -0
  31. paasta_tools/autoscaling/pause_service_autoscaler.py +77 -0
  32. paasta_tools/autoscaling/utils.py +52 -0
  33. paasta_tools/bounce_lib.py +184 -0
  34. paasta_tools/broadcast_log_to_services.py +62 -0
  35. paasta_tools/cassandracluster_tools.py +210 -0
  36. paasta_tools/check_autoscaler_max_instances.py +212 -0
  37. paasta_tools/check_cassandracluster_services_replication.py +35 -0
  38. paasta_tools/check_flink_services_health.py +203 -0
  39. paasta_tools/check_kubernetes_api.py +57 -0
  40. paasta_tools/check_kubernetes_services_replication.py +141 -0
  41. paasta_tools/check_oom_events.py +244 -0
  42. paasta_tools/check_services_replication_tools.py +324 -0
  43. paasta_tools/check_spark_jobs.py +234 -0
  44. paasta_tools/cleanup_kubernetes_cr.py +138 -0
  45. paasta_tools/cleanup_kubernetes_crd.py +145 -0
  46. paasta_tools/cleanup_kubernetes_jobs.py +344 -0
  47. paasta_tools/cleanup_tron_namespaces.py +96 -0
  48. paasta_tools/cli/__init__.py +13 -0
  49. paasta_tools/cli/authentication.py +85 -0
  50. paasta_tools/cli/cli.py +260 -0
  51. paasta_tools/cli/cmds/__init__.py +13 -0
  52. paasta_tools/cli/cmds/autoscale.py +143 -0
  53. paasta_tools/cli/cmds/check.py +334 -0
  54. paasta_tools/cli/cmds/cook_image.py +147 -0
  55. paasta_tools/cli/cmds/get_docker_image.py +76 -0
  56. paasta_tools/cli/cmds/get_image_version.py +172 -0
  57. paasta_tools/cli/cmds/get_latest_deployment.py +93 -0
  58. paasta_tools/cli/cmds/info.py +155 -0
  59. paasta_tools/cli/cmds/itest.py +117 -0
  60. paasta_tools/cli/cmds/list.py +66 -0
  61. paasta_tools/cli/cmds/list_clusters.py +42 -0
  62. paasta_tools/cli/cmds/list_deploy_queue.py +171 -0
  63. paasta_tools/cli/cmds/list_namespaces.py +84 -0
  64. paasta_tools/cli/cmds/local_run.py +1396 -0
  65. paasta_tools/cli/cmds/logs.py +1601 -0
  66. paasta_tools/cli/cmds/mark_for_deployment.py +1988 -0
  67. paasta_tools/cli/cmds/mesh_status.py +174 -0
  68. paasta_tools/cli/cmds/pause_service_autoscaler.py +107 -0
  69. paasta_tools/cli/cmds/push_to_registry.py +275 -0
  70. paasta_tools/cli/cmds/remote_run.py +252 -0
  71. paasta_tools/cli/cmds/rollback.py +347 -0
  72. paasta_tools/cli/cmds/secret.py +549 -0
  73. paasta_tools/cli/cmds/security_check.py +59 -0
  74. paasta_tools/cli/cmds/spark_run.py +1400 -0
  75. paasta_tools/cli/cmds/start_stop_restart.py +401 -0
  76. paasta_tools/cli/cmds/status.py +2302 -0
  77. paasta_tools/cli/cmds/validate.py +1012 -0
  78. paasta_tools/cli/cmds/wait_for_deployment.py +275 -0
  79. paasta_tools/cli/fsm/__init__.py +13 -0
  80. paasta_tools/cli/fsm/autosuggest.py +82 -0
  81. paasta_tools/cli/fsm/template/README.md +8 -0
  82. paasta_tools/cli/fsm/template/cookiecutter.json +7 -0
  83. paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +91 -0
  84. paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +20 -0
  85. paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +8 -0
  86. paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +6 -0
  87. paasta_tools/cli/fsm_cmd.py +121 -0
  88. paasta_tools/cli/paasta_tabcomplete.sh +23 -0
  89. paasta_tools/cli/schemas/adhoc_schema.json +199 -0
  90. paasta_tools/cli/schemas/autoscaling_schema.json +91 -0
  91. paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +37 -0
  92. paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +89 -0
  93. paasta_tools/cli/schemas/deploy_schema.json +173 -0
  94. paasta_tools/cli/schemas/eks_schema.json +970 -0
  95. paasta_tools/cli/schemas/kubernetes_schema.json +970 -0
  96. paasta_tools/cli/schemas/rollback_schema.json +160 -0
  97. paasta_tools/cli/schemas/service_schema.json +25 -0
  98. paasta_tools/cli/schemas/smartstack_schema.json +322 -0
  99. paasta_tools/cli/schemas/tron_schema.json +699 -0
  100. paasta_tools/cli/utils.py +1118 -0
  101. paasta_tools/clusterman.py +21 -0
  102. paasta_tools/config_utils.py +385 -0
  103. paasta_tools/contrib/__init__.py +0 -0
  104. paasta_tools/contrib/bounce_log_latency_parser.py +68 -0
  105. paasta_tools/contrib/check_manual_oapi_changes.sh +24 -0
  106. paasta_tools/contrib/check_orphans.py +306 -0
  107. paasta_tools/contrib/create_dynamodb_table.py +35 -0
  108. paasta_tools/contrib/create_paasta_playground.py +105 -0
  109. paasta_tools/contrib/emit_allocated_cpu_metrics.py +50 -0
  110. paasta_tools/contrib/get_running_task_allocation.py +346 -0
  111. paasta_tools/contrib/habitat_fixer.py +86 -0
  112. paasta_tools/contrib/ide_helper.py +316 -0
  113. paasta_tools/contrib/is_pod_healthy_in_proxy.py +139 -0
  114. paasta_tools/contrib/is_pod_healthy_in_smartstack.py +50 -0
  115. paasta_tools/contrib/kill_bad_containers.py +109 -0
  116. paasta_tools/contrib/mass-deploy-tag.sh +44 -0
  117. paasta_tools/contrib/mock_patch_checker.py +86 -0
  118. paasta_tools/contrib/paasta_update_soa_memcpu.py +520 -0
  119. paasta_tools/contrib/render_template.py +129 -0
  120. paasta_tools/contrib/rightsizer_soaconfigs_update.py +348 -0
  121. paasta_tools/contrib/service_shard_remove.py +157 -0
  122. paasta_tools/contrib/service_shard_update.py +373 -0
  123. paasta_tools/contrib/shared_ip_check.py +77 -0
  124. paasta_tools/contrib/timeouts_metrics_prom.py +64 -0
  125. paasta_tools/delete_kubernetes_deployments.py +89 -0
  126. paasta_tools/deployment_utils.py +44 -0
  127. paasta_tools/docker_wrapper.py +234 -0
  128. paasta_tools/docker_wrapper_imports.py +13 -0
  129. paasta_tools/drain_lib.py +351 -0
  130. paasta_tools/dump_locally_running_services.py +71 -0
  131. paasta_tools/eks_tools.py +119 -0
  132. paasta_tools/envoy_tools.py +373 -0
  133. paasta_tools/firewall.py +504 -0
  134. paasta_tools/firewall_logging.py +154 -0
  135. paasta_tools/firewall_update.py +172 -0
  136. paasta_tools/flink_tools.py +345 -0
  137. paasta_tools/flinkeks_tools.py +90 -0
  138. paasta_tools/frameworks/__init__.py +0 -0
  139. paasta_tools/frameworks/adhoc_scheduler.py +71 -0
  140. paasta_tools/frameworks/constraints.py +87 -0
  141. paasta_tools/frameworks/native_scheduler.py +652 -0
  142. paasta_tools/frameworks/native_service_config.py +301 -0
  143. paasta_tools/frameworks/task_store.py +245 -0
  144. paasta_tools/generate_all_deployments +9 -0
  145. paasta_tools/generate_authenticating_services.py +94 -0
  146. paasta_tools/generate_deployments_for_service.py +255 -0
  147. paasta_tools/generate_services_file.py +114 -0
  148. paasta_tools/generate_services_yaml.py +30 -0
  149. paasta_tools/hacheck.py +76 -0
  150. paasta_tools/instance/__init__.py +0 -0
  151. paasta_tools/instance/hpa_metrics_parser.py +122 -0
  152. paasta_tools/instance/kubernetes.py +1362 -0
  153. paasta_tools/iptables.py +240 -0
  154. paasta_tools/kafkacluster_tools.py +143 -0
  155. paasta_tools/kubernetes/__init__.py +0 -0
  156. paasta_tools/kubernetes/application/__init__.py +0 -0
  157. paasta_tools/kubernetes/application/controller_wrappers.py +476 -0
  158. paasta_tools/kubernetes/application/tools.py +90 -0
  159. paasta_tools/kubernetes/bin/__init__.py +0 -0
  160. paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +164 -0
  161. paasta_tools/kubernetes/bin/paasta_cleanup_remote_run_resources.py +135 -0
  162. paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +181 -0
  163. paasta_tools/kubernetes/bin/paasta_secrets_sync.py +758 -0
  164. paasta_tools/kubernetes/remote_run.py +558 -0
  165. paasta_tools/kubernetes_tools.py +4679 -0
  166. paasta_tools/list_kubernetes_service_instances.py +128 -0
  167. paasta_tools/list_tron_namespaces.py +60 -0
  168. paasta_tools/long_running_service_tools.py +678 -0
  169. paasta_tools/mac_address.py +44 -0
  170. paasta_tools/marathon_dashboard.py +0 -0
  171. paasta_tools/mesos/__init__.py +0 -0
  172. paasta_tools/mesos/cfg.py +46 -0
  173. paasta_tools/mesos/cluster.py +60 -0
  174. paasta_tools/mesos/exceptions.py +59 -0
  175. paasta_tools/mesos/framework.py +77 -0
  176. paasta_tools/mesos/log.py +48 -0
  177. paasta_tools/mesos/master.py +306 -0
  178. paasta_tools/mesos/mesos_file.py +169 -0
  179. paasta_tools/mesos/parallel.py +52 -0
  180. paasta_tools/mesos/slave.py +115 -0
  181. paasta_tools/mesos/task.py +94 -0
  182. paasta_tools/mesos/util.py +69 -0
  183. paasta_tools/mesos/zookeeper.py +37 -0
  184. paasta_tools/mesos_maintenance.py +848 -0
  185. paasta_tools/mesos_tools.py +1051 -0
  186. paasta_tools/metrics/__init__.py +0 -0
  187. paasta_tools/metrics/metastatus_lib.py +1110 -0
  188. paasta_tools/metrics/metrics_lib.py +217 -0
  189. paasta_tools/monitoring/__init__.py +13 -0
  190. paasta_tools/monitoring/check_k8s_api_performance.py +110 -0
  191. paasta_tools/monitoring_tools.py +652 -0
  192. paasta_tools/monkrelaycluster_tools.py +146 -0
  193. paasta_tools/nrtsearchservice_tools.py +143 -0
  194. paasta_tools/nrtsearchserviceeks_tools.py +68 -0
  195. paasta_tools/oom_logger.py +321 -0
  196. paasta_tools/paasta_deploy_tron_jobs +3 -0
  197. paasta_tools/paasta_execute_docker_command.py +123 -0
  198. paasta_tools/paasta_native_serviceinit.py +21 -0
  199. paasta_tools/paasta_service_config_loader.py +201 -0
  200. paasta_tools/paastaapi/__init__.py +29 -0
  201. paasta_tools/paastaapi/api/__init__.py +3 -0
  202. paasta_tools/paastaapi/api/autoscaler_api.py +302 -0
  203. paasta_tools/paastaapi/api/default_api.py +569 -0
  204. paasta_tools/paastaapi/api/remote_run_api.py +604 -0
  205. paasta_tools/paastaapi/api/resources_api.py +157 -0
  206. paasta_tools/paastaapi/api/service_api.py +1736 -0
  207. paasta_tools/paastaapi/api_client.py +818 -0
  208. paasta_tools/paastaapi/apis/__init__.py +22 -0
  209. paasta_tools/paastaapi/configuration.py +455 -0
  210. paasta_tools/paastaapi/exceptions.py +137 -0
  211. paasta_tools/paastaapi/model/__init__.py +5 -0
  212. paasta_tools/paastaapi/model/adhoc_launch_history.py +176 -0
  213. paasta_tools/paastaapi/model/autoscaler_count_msg.py +176 -0
  214. paasta_tools/paastaapi/model/deploy_queue.py +178 -0
  215. paasta_tools/paastaapi/model/deploy_queue_service_instance.py +194 -0
  216. paasta_tools/paastaapi/model/envoy_backend.py +185 -0
  217. paasta_tools/paastaapi/model/envoy_location.py +184 -0
  218. paasta_tools/paastaapi/model/envoy_status.py +181 -0
  219. paasta_tools/paastaapi/model/flink_cluster_overview.py +188 -0
  220. paasta_tools/paastaapi/model/flink_config.py +173 -0
  221. paasta_tools/paastaapi/model/flink_job.py +186 -0
  222. paasta_tools/paastaapi/model/flink_job_details.py +192 -0
  223. paasta_tools/paastaapi/model/flink_jobs.py +175 -0
  224. paasta_tools/paastaapi/model/float_and_error.py +173 -0
  225. paasta_tools/paastaapi/model/hpa_metric.py +176 -0
  226. paasta_tools/paastaapi/model/inline_object.py +170 -0
  227. paasta_tools/paastaapi/model/inline_response200.py +170 -0
  228. paasta_tools/paastaapi/model/inline_response2001.py +170 -0
  229. paasta_tools/paastaapi/model/instance_bounce_status.py +200 -0
  230. paasta_tools/paastaapi/model/instance_mesh_status.py +186 -0
  231. paasta_tools/paastaapi/model/instance_status.py +220 -0
  232. paasta_tools/paastaapi/model/instance_status_adhoc.py +187 -0
  233. paasta_tools/paastaapi/model/instance_status_cassandracluster.py +173 -0
  234. paasta_tools/paastaapi/model/instance_status_flink.py +173 -0
  235. paasta_tools/paastaapi/model/instance_status_kafkacluster.py +173 -0
  236. paasta_tools/paastaapi/model/instance_status_kubernetes.py +263 -0
  237. paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +187 -0
  238. paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +197 -0
  239. paasta_tools/paastaapi/model/instance_status_tron.py +204 -0
  240. paasta_tools/paastaapi/model/instance_tasks.py +182 -0
  241. paasta_tools/paastaapi/model/integer_and_error.py +173 -0
  242. paasta_tools/paastaapi/model/kubernetes_container.py +178 -0
  243. paasta_tools/paastaapi/model/kubernetes_container_v2.py +219 -0
  244. paasta_tools/paastaapi/model/kubernetes_healthcheck.py +176 -0
  245. paasta_tools/paastaapi/model/kubernetes_pod.py +201 -0
  246. paasta_tools/paastaapi/model/kubernetes_pod_event.py +176 -0
  247. paasta_tools/paastaapi/model/kubernetes_pod_v2.py +213 -0
  248. paasta_tools/paastaapi/model/kubernetes_replica_set.py +185 -0
  249. paasta_tools/paastaapi/model/kubernetes_version.py +202 -0
  250. paasta_tools/paastaapi/model/remote_run_outcome.py +189 -0
  251. paasta_tools/paastaapi/model/remote_run_start.py +185 -0
  252. paasta_tools/paastaapi/model/remote_run_stop.py +176 -0
  253. paasta_tools/paastaapi/model/remote_run_token.py +173 -0
  254. paasta_tools/paastaapi/model/resource.py +187 -0
  255. paasta_tools/paastaapi/model/resource_item.py +187 -0
  256. paasta_tools/paastaapi/model/resource_value.py +176 -0
  257. paasta_tools/paastaapi/model/smartstack_backend.py +191 -0
  258. paasta_tools/paastaapi/model/smartstack_location.py +181 -0
  259. paasta_tools/paastaapi/model/smartstack_status.py +181 -0
  260. paasta_tools/paastaapi/model/task_tail_lines.py +176 -0
  261. paasta_tools/paastaapi/model_utils.py +1879 -0
  262. paasta_tools/paastaapi/models/__init__.py +62 -0
  263. paasta_tools/paastaapi/rest.py +287 -0
  264. paasta_tools/prune_completed_pods.py +220 -0
  265. paasta_tools/puppet_service_tools.py +59 -0
  266. paasta_tools/py.typed +1 -0
  267. paasta_tools/remote_git.py +127 -0
  268. paasta_tools/run-paasta-api-in-dev-mode.py +57 -0
  269. paasta_tools/run-paasta-api-playground.py +51 -0
  270. paasta_tools/secret_providers/__init__.py +66 -0
  271. paasta_tools/secret_providers/vault.py +214 -0
  272. paasta_tools/secret_tools.py +277 -0
  273. paasta_tools/setup_istio_mesh.py +353 -0
  274. paasta_tools/setup_kubernetes_cr.py +412 -0
  275. paasta_tools/setup_kubernetes_crd.py +138 -0
  276. paasta_tools/setup_kubernetes_internal_crd.py +154 -0
  277. paasta_tools/setup_kubernetes_job.py +353 -0
  278. paasta_tools/setup_prometheus_adapter_config.py +1028 -0
  279. paasta_tools/setup_tron_namespace.py +248 -0
  280. paasta_tools/slack.py +75 -0
  281. paasta_tools/smartstack_tools.py +676 -0
  282. paasta_tools/spark_tools.py +283 -0
  283. paasta_tools/synapse_srv_namespaces_fact.py +42 -0
  284. paasta_tools/tron/__init__.py +0 -0
  285. paasta_tools/tron/client.py +158 -0
  286. paasta_tools/tron/tron_command_context.py +194 -0
  287. paasta_tools/tron/tron_timeutils.py +101 -0
  288. paasta_tools/tron_tools.py +1448 -0
  289. paasta_tools/utils.py +4307 -0
  290. paasta_tools/yaml_tools.py +44 -0
  291. paasta_tools-1.21.3.data/scripts/apply_external_resources.py +79 -0
  292. paasta_tools-1.21.3.data/scripts/bounce_log_latency_parser.py +68 -0
  293. paasta_tools-1.21.3.data/scripts/check_autoscaler_max_instances.py +212 -0
  294. paasta_tools-1.21.3.data/scripts/check_cassandracluster_services_replication.py +35 -0
  295. paasta_tools-1.21.3.data/scripts/check_flink_services_health.py +203 -0
  296. paasta_tools-1.21.3.data/scripts/check_kubernetes_api.py +57 -0
  297. paasta_tools-1.21.3.data/scripts/check_kubernetes_services_replication.py +141 -0
  298. paasta_tools-1.21.3.data/scripts/check_manual_oapi_changes.sh +24 -0
  299. paasta_tools-1.21.3.data/scripts/check_oom_events.py +244 -0
  300. paasta_tools-1.21.3.data/scripts/check_orphans.py +306 -0
  301. paasta_tools-1.21.3.data/scripts/check_spark_jobs.py +234 -0
  302. paasta_tools-1.21.3.data/scripts/cleanup_kubernetes_cr.py +138 -0
  303. paasta_tools-1.21.3.data/scripts/cleanup_kubernetes_crd.py +145 -0
  304. paasta_tools-1.21.3.data/scripts/cleanup_kubernetes_jobs.py +344 -0
  305. paasta_tools-1.21.3.data/scripts/create_dynamodb_table.py +35 -0
  306. paasta_tools-1.21.3.data/scripts/create_paasta_playground.py +105 -0
  307. paasta_tools-1.21.3.data/scripts/delete_kubernetes_deployments.py +89 -0
  308. paasta_tools-1.21.3.data/scripts/emit_allocated_cpu_metrics.py +50 -0
  309. paasta_tools-1.21.3.data/scripts/generate_all_deployments +9 -0
  310. paasta_tools-1.21.3.data/scripts/generate_authenticating_services.py +94 -0
  311. paasta_tools-1.21.3.data/scripts/generate_deployments_for_service.py +255 -0
  312. paasta_tools-1.21.3.data/scripts/generate_services_file.py +114 -0
  313. paasta_tools-1.21.3.data/scripts/generate_services_yaml.py +30 -0
  314. paasta_tools-1.21.3.data/scripts/get_running_task_allocation.py +346 -0
  315. paasta_tools-1.21.3.data/scripts/habitat_fixer.py +86 -0
  316. paasta_tools-1.21.3.data/scripts/ide_helper.py +316 -0
  317. paasta_tools-1.21.3.data/scripts/is_pod_healthy_in_proxy.py +139 -0
  318. paasta_tools-1.21.3.data/scripts/is_pod_healthy_in_smartstack.py +50 -0
  319. paasta_tools-1.21.3.data/scripts/kill_bad_containers.py +109 -0
  320. paasta_tools-1.21.3.data/scripts/kubernetes_remove_evicted_pods.py +164 -0
  321. paasta_tools-1.21.3.data/scripts/mass-deploy-tag.sh +44 -0
  322. paasta_tools-1.21.3.data/scripts/mock_patch_checker.py +86 -0
  323. paasta_tools-1.21.3.data/scripts/paasta_cleanup_remote_run_resources.py +135 -0
  324. paasta_tools-1.21.3.data/scripts/paasta_cleanup_stale_nodes.py +181 -0
  325. paasta_tools-1.21.3.data/scripts/paasta_deploy_tron_jobs +3 -0
  326. paasta_tools-1.21.3.data/scripts/paasta_execute_docker_command.py +123 -0
  327. paasta_tools-1.21.3.data/scripts/paasta_secrets_sync.py +758 -0
  328. paasta_tools-1.21.3.data/scripts/paasta_tabcomplete.sh +23 -0
  329. paasta_tools-1.21.3.data/scripts/paasta_update_soa_memcpu.py +520 -0
  330. paasta_tools-1.21.3.data/scripts/render_template.py +129 -0
  331. paasta_tools-1.21.3.data/scripts/rightsizer_soaconfigs_update.py +348 -0
  332. paasta_tools-1.21.3.data/scripts/service_shard_remove.py +157 -0
  333. paasta_tools-1.21.3.data/scripts/service_shard_update.py +373 -0
  334. paasta_tools-1.21.3.data/scripts/setup_istio_mesh.py +353 -0
  335. paasta_tools-1.21.3.data/scripts/setup_kubernetes_cr.py +412 -0
  336. paasta_tools-1.21.3.data/scripts/setup_kubernetes_crd.py +138 -0
  337. paasta_tools-1.21.3.data/scripts/setup_kubernetes_internal_crd.py +154 -0
  338. paasta_tools-1.21.3.data/scripts/setup_kubernetes_job.py +353 -0
  339. paasta_tools-1.21.3.data/scripts/setup_prometheus_adapter_config.py +1028 -0
  340. paasta_tools-1.21.3.data/scripts/shared_ip_check.py +77 -0
  341. paasta_tools-1.21.3.data/scripts/synapse_srv_namespaces_fact.py +42 -0
  342. paasta_tools-1.21.3.data/scripts/timeouts_metrics_prom.py +64 -0
  343. paasta_tools-1.21.3.dist-info/LICENSE +201 -0
  344. paasta_tools-1.21.3.dist-info/METADATA +74 -0
  345. paasta_tools-1.21.3.dist-info/RECORD +348 -0
  346. paasta_tools-1.21.3.dist-info/WHEEL +5 -0
  347. paasta_tools-1.21.3.dist-info/entry_points.txt +20 -0
  348. paasta_tools-1.21.3.dist-info/top_level.txt +2 -0
@@ -0,0 +1,123 @@
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
+ """
16
+ Usage: ./paasta_execute_docker_command.py [options]
17
+
18
+ This script will attempt to find a running container that contains an environment variable matching
19
+ the specified Mesos task ID and then execute the given command with the specified timeout. The script will
20
+ print the output of the command and exit with the same return code as the command.
21
+
22
+ Command line options:
23
+
24
+ - -i <MESOS_TASK_ID>, --mesos-id <MESOS_TASK_ID>: Specify a Mesos task ID to search for
25
+ - -c <command>, --cmd <command>: Shell command to execute in container
26
+ - -t <timeout>, --timeout <timeout>: Timeout for command
27
+ """
28
+ import argparse
29
+ import signal
30
+ import sys
31
+ from contextlib import contextmanager
32
+
33
+ from paasta_tools.mesos_tools import get_container_id_for_mesos_id
34
+ from paasta_tools.utils import get_docker_client
35
+ from paasta_tools.utils import is_using_unprivileged_containers
36
+
37
+
38
+ def parse_args():
39
+ parser = argparse.ArgumentParser(
40
+ description="Executes given command in Docker container for given Mesos task ID"
41
+ )
42
+ parser.add_argument("-i", "--mesos-id", required=True, help="Mesos task ID")
43
+ parser.add_argument(
44
+ "-c", "--cmd", required=True, help="command to execute in container"
45
+ )
46
+ parser.add_argument(
47
+ "-t", "--timeout", default=45, type=int, help="timeout for command"
48
+ )
49
+ args = parser.parse_args()
50
+ return args
51
+
52
+
53
+ class TimeoutException(Exception):
54
+ pass
55
+
56
+
57
+ @contextmanager
58
+ def time_limit(seconds): # From http://stackoverflow.com/a/601168/1576438
59
+ def signal_handler(signum, frame):
60
+ raise TimeoutException("Timed out!")
61
+
62
+ signal.signal(signal.SIGALRM, signal_handler)
63
+ signal.alarm(seconds)
64
+ try:
65
+ yield
66
+ finally:
67
+ signal.alarm(0)
68
+
69
+
70
+ def execute_in_container(docker_client, container_id, cmd, timeout):
71
+ container_info = docker_client.inspect_container(container_id)
72
+ if (
73
+ container_info["ExecIDs"]
74
+ and len(container_info["ExecIDs"]) > 0
75
+ and not is_using_unprivileged_containers()
76
+ ):
77
+ for possible_exec_id in container_info["ExecIDs"]:
78
+ exec_info = docker_client.exec_inspect(possible_exec_id)["ProcessConfig"]
79
+ if exec_info["entrypoint"] == "/bin/sh" and exec_info["arguments"] == [
80
+ "-c",
81
+ cmd,
82
+ ]:
83
+ exec_id = possible_exec_id
84
+ break
85
+ else:
86
+ exec_id = docker_client.exec_create(container_id, ["/bin/sh", "-c", cmd])["Id"]
87
+ output = docker_client.exec_start(exec_id, stream=False)
88
+ return_code = docker_client.exec_inspect(exec_id)["ExitCode"]
89
+ return (output, return_code)
90
+
91
+
92
+ def main():
93
+ args = parse_args()
94
+
95
+ if not args.mesos_id:
96
+ print(
97
+ "The Mesos task id you supplied seems to be an empty string! Please provide a valid task id."
98
+ )
99
+ sys.exit(2)
100
+
101
+ docker_client = get_docker_client()
102
+
103
+ container_id = get_container_id_for_mesos_id(docker_client, args.mesos_id)
104
+
105
+ if container_id:
106
+ try:
107
+ with time_limit(args.timeout):
108
+ output, return_code = execute_in_container(
109
+ docker_client, container_id, args.cmd, args.timeout
110
+ )
111
+ print(output)
112
+ except TimeoutException:
113
+ print("Command timed out!")
114
+ return_code = 1
115
+ finally:
116
+ sys.exit(return_code)
117
+ else:
118
+ print("Could not find container with MESOS_TASK_ID '%s'." % args.mesos_id)
119
+ sys.exit(1)
120
+
121
+
122
+ if __name__ == "__main__":
123
+ main()
@@ -0,0 +1,21 @@
1
+ from paasta_tools.frameworks.native_scheduler import MESOS_TASK_SPACER
2
+ from paasta_tools.mesos_tools import status_mesos_tasks_verbose
3
+ from paasta_tools.utils import calculate_tail_lines
4
+ from paasta_tools.utils import compose_job_id
5
+
6
+
7
+ def perform_command(command, service, instance, cluster, verbose, soa_dir):
8
+ tail_lines = calculate_tail_lines(verbose_level=verbose)
9
+
10
+ # We have to add a spacer at the end to make sure we only return
11
+ # things for service.main and not service.main_foo
12
+ task_id_prefix = "{}{}".format(compose_job_id(service, instance), MESOS_TASK_SPACER)
13
+
14
+ if command == "status":
15
+ print(
16
+ status_mesos_tasks_verbose(
17
+ job_id=task_id_prefix,
18
+ get_short_task_id=lambda x: x,
19
+ tail_lines=tail_lines,
20
+ )
21
+ )
@@ -0,0 +1,201 @@
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
+ from typing import Dict
16
+ from typing import Iterable
17
+ from typing import List
18
+ from typing import Tuple
19
+ from typing import Type
20
+
21
+ from service_configuration_lib import read_service_configuration
22
+
23
+ from paasta_tools import utils
24
+ from paasta_tools.utils import deep_merge_dictionaries
25
+ from paasta_tools.utils import DEFAULT_SOA_DIR
26
+ from paasta_tools.utils import InstanceConfig_T
27
+ from paasta_tools.utils import list_clusters
28
+ from paasta_tools.utils import load_service_instance_configs
29
+ from paasta_tools.utils import load_v2_deployments_json
30
+ from paasta_tools.utils import NoDeploymentsAvailable
31
+
32
+
33
+ log = logging.getLogger(__name__)
34
+ log.addHandler(logging.NullHandler())
35
+
36
+
37
+ class PaastaServiceConfigLoader:
38
+ """PaastaServiceConfigLoader provides useful methods for reading soa-configs and
39
+ iterating instance names or InstanceConfigs objects.
40
+
41
+ :Example:
42
+
43
+ >>> from paasta_tools.paasta_service_config_loader import PaastaServiceConfigLoader
44
+ >>> from paasta_tools.utils import DEFAULT_SOA_DIR
45
+ >>>
46
+ >>> sc = PaastaServiceConfigLoader(service='fake_service', soa_dir=DEFAULT_SOA_DIR)
47
+ >>>
48
+ >>> for instance in sc.instances(cluster='fake_cluster', instance_type_class=KubernetesDeploymentConfig):
49
+ ... print(instance)
50
+ ...
51
+ main
52
+ canary
53
+ >>>
54
+ >>> for instance_config in sc.instance_configs(cluster='fake_cluster', instance_type_class=KubernetesDeploymentConfig):
55
+ ... print(instance_config.get_instance())
56
+ ...
57
+ main
58
+ canary
59
+ >>>
60
+ """
61
+
62
+ _framework_configs: Dict[Tuple[str, type], Dict[str, utils.InstanceConfigDict]]
63
+ _clusters: List[str]
64
+ _deployments_json: utils.DeploymentsJsonV2
65
+
66
+ def __init__(
67
+ self,
68
+ service: str,
69
+ soa_dir: str = DEFAULT_SOA_DIR,
70
+ load_deployments: bool = True,
71
+ ) -> None:
72
+ self._service = service
73
+ self._soa_dir = soa_dir
74
+ self._load_deployments = load_deployments
75
+ self._clusters = None
76
+ self._general_config = None
77
+ self._deployments_json = None
78
+ self._framework_configs = {}
79
+
80
+ @property
81
+ def clusters(self) -> Iterable[str]:
82
+ """Returns an iterator that yields cluster names for the service.
83
+
84
+ :returns: iterator that yields cluster names.
85
+ """
86
+ if self._clusters is None:
87
+ self._clusters = list_clusters(service=self._service, soa_dir=self._soa_dir)
88
+ for cluster in self._clusters:
89
+ yield cluster
90
+
91
+ def instances(
92
+ self, cluster: str, instance_type_class: Type[InstanceConfig_T]
93
+ ) -> Iterable[str]:
94
+ """Returns an iterator that yields instance names as strings.
95
+
96
+ :param cluster: The cluster name
97
+ :param instance_type_class: a subclass of InstanceConfig
98
+ :returns: an iterator that yields instance names
99
+ """
100
+ if (cluster, instance_type_class) not in self._framework_configs:
101
+ self._refresh_framework_config(cluster, instance_type_class)
102
+ for instance in self._framework_configs.get((cluster, instance_type_class), []):
103
+ yield instance
104
+
105
+ def instance_configs(
106
+ self, cluster: str, instance_type_class: Type[InstanceConfig_T]
107
+ ) -> Iterable[InstanceConfig_T]:
108
+ """Returns an iterator that yields InstanceConfig objects.
109
+
110
+ :param cluster: The cluster name
111
+ :param instance_type_class: a subclass of InstanceConfig
112
+ :returns: an iterator that yields instances of KubernetesDeploymentConfig, etc.
113
+ :raises NotImplementedError: when it doesn't know how to create a config for instance_type_class
114
+ """
115
+ if (cluster, instance_type_class) not in self._framework_configs:
116
+ self._refresh_framework_config(cluster, instance_type_class)
117
+ for instance, config in self._framework_configs.get(
118
+ (cluster, instance_type_class), {}
119
+ ).items():
120
+ try:
121
+ yield self._create_service_config(
122
+ cluster, instance, config, instance_type_class
123
+ )
124
+ except NoDeploymentsAvailable:
125
+ pass
126
+
127
+ def _framework_config_filename(
128
+ self, cluster: str, instance_type_class: Type[InstanceConfig_T]
129
+ ):
130
+ return f"{instance_type_class.config_filename_prefix}-{cluster}"
131
+
132
+ def _refresh_framework_config(
133
+ self, cluster: str, instance_type_class: Type[InstanceConfig_T]
134
+ ):
135
+ instances = load_service_instance_configs(
136
+ service=self._service,
137
+ instance_type=instance_type_class.config_filename_prefix,
138
+ cluster=cluster,
139
+ soa_dir=self._soa_dir,
140
+ )
141
+ self._framework_configs[(cluster, instance_type_class)] = instances
142
+
143
+ def _get_branch_dict(
144
+ self, cluster: str, instance: str, config: utils.InstanceConfig
145
+ ) -> utils.BranchDictV2:
146
+ if self._deployments_json is None:
147
+ self._deployments_json = load_v2_deployments_json(
148
+ self._service, soa_dir=self._soa_dir
149
+ )
150
+
151
+ branch = config.get_branch()
152
+ deploy_group = config.get_deploy_group()
153
+ return self._deployments_json.get_branch_dict(
154
+ self._service, branch, deploy_group
155
+ )
156
+
157
+ def _get_merged_config(
158
+ self, config: utils.InstanceConfigDict
159
+ ) -> utils.InstanceConfigDict:
160
+ if self._general_config is None:
161
+ self._general_config = read_service_configuration(
162
+ service_name=self._service, soa_dir=self._soa_dir
163
+ )
164
+ return deep_merge_dictionaries(overrides=config, defaults=self._general_config)
165
+
166
+ def _create_service_config(
167
+ self,
168
+ cluster: str,
169
+ instance: str,
170
+ config: utils.InstanceConfigDict,
171
+ config_class: Type[InstanceConfig_T],
172
+ ) -> InstanceConfig_T:
173
+ """Create a service instance's configuration for kubernetes.
174
+
175
+ :param cluster: The cluster to read the configuration for
176
+ :param instance: The instance of the service to retrieve
177
+ :param config: the framework instance config.
178
+ :returns: An instance of config_class
179
+ """
180
+
181
+ merged_config = self._get_merged_config(config)
182
+
183
+ temp_instance_config = config_class(
184
+ service=self._service,
185
+ cluster=cluster,
186
+ instance=instance,
187
+ config_dict=merged_config,
188
+ branch_dict=None,
189
+ soa_dir=self._soa_dir,
190
+ )
191
+
192
+ branch_dict = self._get_branch_dict(cluster, instance, temp_instance_config)
193
+
194
+ return config_class(
195
+ service=self._service,
196
+ cluster=cluster,
197
+ instance=instance,
198
+ config_dict=merged_config,
199
+ branch_dict=branch_dict,
200
+ soa_dir=self._soa_dir,
201
+ )
@@ -0,0 +1,29 @@
1
+ # coding: utf-8
2
+
3
+ # flake8: noqa
4
+
5
+ """
6
+ Paasta API
7
+
8
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
9
+
10
+ The version of the OpenAPI document: 1.2.0
11
+ Generated by: https://openapi-generator.tech
12
+ """
13
+
14
+
15
+ __version__ = "1.0.0"
16
+
17
+ # import ApiClient
18
+ from paasta_tools.paastaapi.api_client import ApiClient
19
+
20
+ # import Configuration
21
+ from paasta_tools.paastaapi.configuration import Configuration
22
+
23
+ # import exceptions
24
+ from paasta_tools.paastaapi.exceptions import OpenApiException
25
+ from paasta_tools.paastaapi.exceptions import ApiAttributeError
26
+ from paasta_tools.paastaapi.exceptions import ApiTypeError
27
+ from paasta_tools.paastaapi.exceptions import ApiValueError
28
+ from paasta_tools.paastaapi.exceptions import ApiKeyError
29
+ from paasta_tools.paastaapi.exceptions import ApiException
@@ -0,0 +1,3 @@
1
+ # do not import all apis into this module because that uses a lot of memory and stack frames
2
+ # if you need the ability to import all apis from one package, import them with
3
+ # from paasta_tools.paastaapi.apis import AutoscalerApi
@@ -0,0 +1,302 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Paasta API
5
+
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
7
+
8
+ The version of the OpenAPI document: 1.2.0
9
+ Generated by: https://openapi-generator.tech
10
+ """
11
+
12
+
13
+ import re # noqa: F401
14
+ import sys # noqa: F401
15
+
16
+ from paasta_tools.paastaapi.api_client import ApiClient, Endpoint
17
+ from paasta_tools.paastaapi.model_utils import ( # noqa: F401
18
+ check_allowed_values,
19
+ check_validations,
20
+ date,
21
+ datetime,
22
+ file_type,
23
+ none_type,
24
+ validate_and_convert_types
25
+ )
26
+ from paasta_tools.paastaapi.model.autoscaler_count_msg import AutoscalerCountMsg
27
+
28
+
29
+ class AutoscalerApi(object):
30
+ """NOTE: This class is auto generated by OpenAPI Generator
31
+ Ref: https://openapi-generator.tech
32
+
33
+ Do not edit the class manually.
34
+ """
35
+
36
+ def __init__(self, api_client=None):
37
+ if api_client is None:
38
+ api_client = ApiClient()
39
+ self.api_client = api_client
40
+
41
+ def __get_autoscaler_count(
42
+ self,
43
+ service,
44
+ instance,
45
+ **kwargs
46
+ ):
47
+ """Get status of service_name.instance_name # noqa: E501
48
+
49
+ This method makes a synchronous HTTP request by default. To make an
50
+ asynchronous HTTP request, please pass async_req=True
51
+
52
+ >>> thread = api.get_autoscaler_count(service, instance, async_req=True)
53
+ >>> result = thread.get()
54
+
55
+ Args:
56
+ service (str): Service name
57
+ instance (str): Instance name
58
+
59
+ Keyword Args:
60
+ _return_http_data_only (bool): response data without head status
61
+ code and headers. Default is True.
62
+ _preload_content (bool): if False, the urllib3.HTTPResponse object
63
+ will be returned without reading/decoding response data.
64
+ Default is True.
65
+ _request_timeout (float/tuple): timeout setting for this request. If one
66
+ number provided, it will be total request timeout. It can also
67
+ be a pair (tuple) of (connection, read) timeouts.
68
+ Default is None.
69
+ _check_input_type (bool): specifies if type checking
70
+ should be done one the data sent to the server.
71
+ Default is True.
72
+ _check_return_type (bool): specifies if type checking
73
+ should be done one the data received from the server.
74
+ Default is True.
75
+ _host_index (int/None): specifies the index of the server
76
+ that we want to use.
77
+ Default is read from the configuration.
78
+ async_req (bool): execute request asynchronously
79
+
80
+ Returns:
81
+ AutoscalerCountMsg
82
+ If the method is called asynchronously, returns the request
83
+ thread.
84
+ """
85
+ kwargs['async_req'] = kwargs.get(
86
+ 'async_req', False
87
+ )
88
+ kwargs['_return_http_data_only'] = kwargs.get(
89
+ '_return_http_data_only', True
90
+ )
91
+ kwargs['_preload_content'] = kwargs.get(
92
+ '_preload_content', True
93
+ )
94
+ kwargs['_request_timeout'] = kwargs.get(
95
+ '_request_timeout', None
96
+ )
97
+ kwargs['_check_input_type'] = kwargs.get(
98
+ '_check_input_type', True
99
+ )
100
+ kwargs['_check_return_type'] = kwargs.get(
101
+ '_check_return_type', True
102
+ )
103
+ kwargs['_host_index'] = kwargs.get('_host_index')
104
+ kwargs['service'] = \
105
+ service
106
+ kwargs['instance'] = \
107
+ instance
108
+ return self.call_with_http_info(**kwargs)
109
+
110
+ self.get_autoscaler_count = Endpoint(
111
+ settings={
112
+ 'response_type': (AutoscalerCountMsg,),
113
+ 'auth': [],
114
+ 'endpoint_path': '/services/{service}/{instance}/autoscaler',
115
+ 'operation_id': 'get_autoscaler_count',
116
+ 'http_method': 'GET',
117
+ 'servers': None,
118
+ },
119
+ params_map={
120
+ 'all': [
121
+ 'service',
122
+ 'instance',
123
+ ],
124
+ 'required': [
125
+ 'service',
126
+ 'instance',
127
+ ],
128
+ 'nullable': [
129
+ ],
130
+ 'enum': [
131
+ ],
132
+ 'validation': [
133
+ ]
134
+ },
135
+ root_map={
136
+ 'validations': {
137
+ },
138
+ 'allowed_values': {
139
+ },
140
+ 'openapi_types': {
141
+ 'service':
142
+ (str,),
143
+ 'instance':
144
+ (str,),
145
+ },
146
+ 'attribute_map': {
147
+ 'service': 'service',
148
+ 'instance': 'instance',
149
+ },
150
+ 'location_map': {
151
+ 'service': 'path',
152
+ 'instance': 'path',
153
+ },
154
+ 'collection_format_map': {
155
+ }
156
+ },
157
+ headers_map={
158
+ 'accept': [
159
+ 'application/json'
160
+ ],
161
+ 'content_type': [],
162
+ },
163
+ api_client=api_client,
164
+ callable=__get_autoscaler_count
165
+ )
166
+
167
+ def __update_autoscaler_count(
168
+ self,
169
+ service,
170
+ instance,
171
+ autoscaler_count_msg,
172
+ **kwargs
173
+ ):
174
+ """Get status of service_name.instance_name # noqa: E501
175
+
176
+ This method makes a synchronous HTTP request by default. To make an
177
+ asynchronous HTTP request, please pass async_req=True
178
+
179
+ >>> thread = api.update_autoscaler_count(service, instance, autoscaler_count_msg, async_req=True)
180
+ >>> result = thread.get()
181
+
182
+ Args:
183
+ service (str): Service name
184
+ instance (str): Instance name
185
+ autoscaler_count_msg (AutoscalerCountMsg):
186
+
187
+ Keyword Args:
188
+ _return_http_data_only (bool): response data without head status
189
+ code and headers. Default is True.
190
+ _preload_content (bool): if False, the urllib3.HTTPResponse object
191
+ will be returned without reading/decoding response data.
192
+ Default is True.
193
+ _request_timeout (float/tuple): timeout setting for this request. If one
194
+ number provided, it will be total request timeout. It can also
195
+ be a pair (tuple) of (connection, read) timeouts.
196
+ Default is None.
197
+ _check_input_type (bool): specifies if type checking
198
+ should be done one the data sent to the server.
199
+ Default is True.
200
+ _check_return_type (bool): specifies if type checking
201
+ should be done one the data received from the server.
202
+ Default is True.
203
+ _host_index (int/None): specifies the index of the server
204
+ that we want to use.
205
+ Default is read from the configuration.
206
+ async_req (bool): execute request asynchronously
207
+
208
+ Returns:
209
+ AutoscalerCountMsg
210
+ If the method is called asynchronously, returns the request
211
+ thread.
212
+ """
213
+ kwargs['async_req'] = kwargs.get(
214
+ 'async_req', False
215
+ )
216
+ kwargs['_return_http_data_only'] = kwargs.get(
217
+ '_return_http_data_only', True
218
+ )
219
+ kwargs['_preload_content'] = kwargs.get(
220
+ '_preload_content', True
221
+ )
222
+ kwargs['_request_timeout'] = kwargs.get(
223
+ '_request_timeout', None
224
+ )
225
+ kwargs['_check_input_type'] = kwargs.get(
226
+ '_check_input_type', True
227
+ )
228
+ kwargs['_check_return_type'] = kwargs.get(
229
+ '_check_return_type', True
230
+ )
231
+ kwargs['_host_index'] = kwargs.get('_host_index')
232
+ kwargs['service'] = \
233
+ service
234
+ kwargs['instance'] = \
235
+ instance
236
+ kwargs['autoscaler_count_msg'] = \
237
+ autoscaler_count_msg
238
+ return self.call_with_http_info(**kwargs)
239
+
240
+ self.update_autoscaler_count = Endpoint(
241
+ settings={
242
+ 'response_type': (AutoscalerCountMsg,),
243
+ 'auth': [],
244
+ 'endpoint_path': '/services/{service}/{instance}/autoscaler',
245
+ 'operation_id': 'update_autoscaler_count',
246
+ 'http_method': 'POST',
247
+ 'servers': None,
248
+ },
249
+ params_map={
250
+ 'all': [
251
+ 'service',
252
+ 'instance',
253
+ 'autoscaler_count_msg',
254
+ ],
255
+ 'required': [
256
+ 'service',
257
+ 'instance',
258
+ 'autoscaler_count_msg',
259
+ ],
260
+ 'nullable': [
261
+ ],
262
+ 'enum': [
263
+ ],
264
+ 'validation': [
265
+ ]
266
+ },
267
+ root_map={
268
+ 'validations': {
269
+ },
270
+ 'allowed_values': {
271
+ },
272
+ 'openapi_types': {
273
+ 'service':
274
+ (str,),
275
+ 'instance':
276
+ (str,),
277
+ 'autoscaler_count_msg':
278
+ (AutoscalerCountMsg,),
279
+ },
280
+ 'attribute_map': {
281
+ 'service': 'service',
282
+ 'instance': 'instance',
283
+ },
284
+ 'location_map': {
285
+ 'service': 'path',
286
+ 'instance': 'path',
287
+ 'autoscaler_count_msg': 'body',
288
+ },
289
+ 'collection_format_map': {
290
+ }
291
+ },
292
+ headers_map={
293
+ 'accept': [
294
+ 'application/json'
295
+ ],
296
+ 'content_type': [
297
+ 'application/json'
298
+ ]
299
+ },
300
+ api_client=api_client,
301
+ callable=__update_autoscaler_count
302
+ )