paasta-tools 1.22.0__tar.gz → 1.36.11__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of paasta-tools might be problematic. Click here for more details.

Files changed (360) hide show
  1. {paasta_tools-1.22.0/paasta_tools.egg-info → paasta_tools-1.36.11}/PKG-INFO +16 -10
  2. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/__init__.py +1 -1
  3. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/api_docs/swagger.json +46 -6
  4. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/tweens/auth.py +2 -1
  5. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/views/autoscaler.py +60 -23
  6. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/views/instance.py +9 -2
  7. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/views/remote_run.py +2 -0
  8. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/async_utils.py +4 -1
  9. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/bounce_lib.py +8 -5
  10. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/check_services_replication_tools.py +10 -4
  11. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/check_spark_jobs.py +1 -1
  12. paasta_tools-1.36.11/paasta_tools/cleanup_expired_autoscaling_overrides.py +155 -0
  13. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cli.py +4 -4
  14. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/autoscale.py +40 -17
  15. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/check.py +2 -0
  16. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/cook_image.py +2 -0
  17. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/get_docker_image.py +2 -0
  18. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/get_image_version.py +2 -0
  19. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/get_latest_deployment.py +2 -0
  20. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/info.py +10 -3
  21. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/itest.py +2 -0
  22. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/list_namespaces.py +2 -0
  23. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/local_run.py +122 -27
  24. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/logs.py +31 -7
  25. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/mark_for_deployment.py +14 -4
  26. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/mesh_status.py +3 -2
  27. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/push_to_registry.py +2 -0
  28. paasta_tools-1.36.11/paasta_tools/cli/cmds/remote_run.py +453 -0
  29. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/rollback.py +6 -2
  30. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/secret.py +4 -2
  31. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/security_check.py +2 -0
  32. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/spark_run.py +34 -32
  33. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/status.py +172 -31
  34. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/validate.py +325 -40
  35. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/wait_for_deployment.py +2 -0
  36. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/schemas/adhoc_schema.json +3 -0
  37. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/schemas/autoscaling_schema.json +3 -2
  38. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/schemas/eks_schema.json +24 -1
  39. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/schemas/kubernetes_schema.json +1 -0
  40. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/schemas/smartstack_schema.json +21 -0
  41. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/schemas/tron_schema.json +5 -0
  42. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/utils.py +34 -20
  43. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/bounce_log_latency_parser.py +1 -1
  44. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/check_orphans.py +1 -1
  45. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/get_running_task_allocation.py +1 -1
  46. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/ide_helper.py +27 -27
  47. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/mock_patch_checker.py +1 -1
  48. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/paasta_update_soa_memcpu.py +78 -19
  49. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/render_template.py +1 -1
  50. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/shared_ip_check.py +1 -1
  51. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/flink_tools.py +18 -0
  52. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/generate_deployments_for_service.py +2 -0
  53. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/instance/hpa_metrics_parser.py +3 -5
  54. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/instance/kubernetes.py +70 -36
  55. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/kubernetes/application/controller_wrappers.py +27 -3
  56. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/kubernetes/remote_run.py +54 -25
  57. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/kubernetes_tools.py +133 -77
  58. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/long_running_service_tools.py +15 -5
  59. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/mesos/master.py +1 -1
  60. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/metrics/metastatus_lib.py +1 -25
  61. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/metrics/metrics_lib.py +12 -3
  62. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/__init__.py +1 -1
  63. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/api/autoscaler_api.py +1 -1
  64. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/api/default_api.py +1 -1
  65. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/api/remote_run_api.py +2 -1
  66. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/api/resources_api.py +1 -1
  67. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/api/service_api.py +1 -1
  68. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/api_client.py +1 -1
  69. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/configuration.py +2 -2
  70. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/exceptions.py +1 -1
  71. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/adhoc_launch_history.py +1 -1
  72. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/autoscaler_count_msg.py +1 -1
  73. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/autoscaling_override.py +8 -7
  74. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/deploy_queue.py +1 -1
  75. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/deploy_queue_service_instance.py +1 -1
  76. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/envoy_backend.py +1 -1
  77. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/envoy_location.py +1 -1
  78. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/envoy_status.py +1 -1
  79. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/flink_cluster_overview.py +1 -1
  80. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/flink_config.py +1 -1
  81. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/flink_job.py +1 -1
  82. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/flink_job_details.py +1 -1
  83. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/flink_jobs.py +1 -1
  84. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/float_and_error.py +1 -1
  85. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/hpa_metric.py +1 -1
  86. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/inline_object.py +1 -1
  87. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/inline_response200.py +1 -1
  88. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/inline_response2001.py +1 -1
  89. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/inline_response202.py +6 -3
  90. paasta_tools-1.36.11/paasta_tools/paastaapi/model/inline_response403.py +170 -0
  91. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/instance_bounce_status.py +1 -1
  92. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/instance_mesh_status.py +1 -1
  93. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/instance_status.py +1 -1
  94. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/instance_status_adhoc.py +1 -1
  95. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/instance_status_cassandracluster.py +1 -1
  96. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/instance_status_flink.py +1 -1
  97. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/instance_status_kafkacluster.py +1 -1
  98. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/instance_status_kubernetes.py +1 -1
  99. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +1 -1
  100. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +1 -1
  101. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/instance_status_tron.py +1 -1
  102. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/instance_tasks.py +1 -1
  103. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/integer_and_error.py +1 -1
  104. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/kubernetes_container.py +1 -1
  105. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/kubernetes_container_v2.py +1 -1
  106. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/kubernetes_healthcheck.py +1 -1
  107. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/kubernetes_pod.py +1 -1
  108. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/kubernetes_pod_event.py +1 -1
  109. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/kubernetes_pod_v2.py +1 -1
  110. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/kubernetes_replica_set.py +1 -1
  111. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/kubernetes_version.py +4 -1
  112. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/remote_run_outcome.py +1 -1
  113. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/remote_run_start.py +4 -1
  114. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/remote_run_stop.py +1 -1
  115. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/remote_run_token.py +1 -1
  116. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/resource.py +1 -1
  117. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/resource_item.py +1 -1
  118. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/resource_value.py +1 -1
  119. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/smartstack_backend.py +1 -1
  120. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/smartstack_location.py +1 -1
  121. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/smartstack_status.py +1 -1
  122. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/task_tail_lines.py +1 -1
  123. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model_utils.py +1 -1
  124. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/models/__init__.py +1 -0
  125. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/rest.py +1 -1
  126. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/remote_git.py +2 -2
  127. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/run-paasta-api-in-dev-mode.py +2 -2
  128. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/run-paasta-api-playground.py +2 -2
  129. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/setup_kubernetes_cr.py +14 -7
  130. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/setup_kubernetes_job.py +54 -6
  131. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/setup_prometheus_adapter_config.py +82 -0
  132. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/setup_tron_namespace.py +2 -2
  133. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/tron_tools.py +23 -3
  134. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/utils.py +74 -11
  135. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/yaml_tools.py +1 -1
  136. {paasta_tools-1.22.0 → paasta_tools-1.36.11/paasta_tools.egg-info}/PKG-INFO +16 -10
  137. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools.egg-info/SOURCES.txt +2 -8
  138. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools.egg-info/entry_points.txt +1 -0
  139. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools.egg-info/requires.txt +6 -7
  140. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/requirements-minimal.txt +7 -9
  141. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/setup.py +2 -1
  142. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_adhoc_tools.py +1 -1
  143. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_apply_external_resources.py +1 -1
  144. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_async_utils.py +1 -1
  145. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_bounce_lib.py +1 -1
  146. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_check_flink_services_health.py +2 -1
  147. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_check_kubernetes_services_replication.py +2 -1
  148. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_check_oom_events.py +1 -1
  149. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_check_service_replication_tools.py +1 -1
  150. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_check_spark_jobs.py +1 -1
  151. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_cleanup_kubernetes_jobs.py +1 -1
  152. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_config_utils.py +1 -1
  153. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_delete_kubernetes_deployments.py +2 -1
  154. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_deployment_utils.py +1 -1
  155. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_docker_wrapper.py +1 -1
  156. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_drain_lib.py +9 -16
  157. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_eks_tools.py +1 -1
  158. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_envoy_tools.py +1 -1
  159. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_firewall.py +2 -1
  160. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_firewall_logging.py +2 -1
  161. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_firewall_update.py +1 -1
  162. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_flink_tools.py +76 -1
  163. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_flinkeks_tools.py +1 -1
  164. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_generate_deployments_for_service.py +1 -1
  165. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_generate_services_file.py +1 -1
  166. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_generate_services_yaml.py +1 -1
  167. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_hacheck.py +8 -8
  168. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_iptables.py +1 -1
  169. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_kubernetes_tools.py +630 -38
  170. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_list_kubernetes_service_instances.py +2 -1
  171. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_long_running_service_tools.py +2 -1
  172. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_mac_address.py +1 -1
  173. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_monitoring_tools.py +2 -1
  174. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_nrtsearchserviceseks_tools.py +1 -1
  175. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_oom_logger.py +9 -5
  176. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_paasta_execute_docker_command.py +2 -1
  177. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_paasta_service_config_loader.py +1 -1
  178. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_puppet_service_tools.py +1 -1
  179. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_remote_git.py +1 -1
  180. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_secret_tools.py +1 -2
  181. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_setup_istio_mesh.py +1 -1
  182. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_setup_kubernetes_cr.py +2 -1
  183. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_setup_kubernetes_job.py +109 -3
  184. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_setup_prometheus_adapter_config.py +67 -1
  185. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_slack.py +2 -1
  186. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_smartstack_tools.py +1 -1
  187. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_tron_tools.py +53 -3
  188. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_utils.py +46 -1
  189. paasta_tools-1.22.0/paasta_tools/cli/cmds/remote_run.py +0 -252
  190. paasta_tools-1.22.0/paasta_tools/clusterman.py +0 -21
  191. paasta_tools-1.22.0/paasta_tools/frameworks/adhoc_scheduler.py +0 -71
  192. paasta_tools-1.22.0/paasta_tools/frameworks/native_scheduler.py +0 -652
  193. paasta_tools-1.22.0/paasta_tools/frameworks/task_store.py +0 -245
  194. paasta_tools-1.22.0/paasta_tools/mesos_maintenance.py +0 -848
  195. paasta_tools-1.22.0/paasta_tools/paasta_native_serviceinit.py +0 -21
  196. paasta_tools-1.22.0/tests/test_mesos_tools.py +0 -945
  197. paasta_tools-1.22.0/tests/test_task_processing.py +0 -21
  198. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/LICENSE +0 -0
  199. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/MANIFEST.in +0 -0
  200. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/README.md +0 -0
  201. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/k8s_itests/__init__.py +0 -0
  202. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/k8s_itests/test_autoscaling.py +0 -0
  203. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/k8s_itests/utils.py +0 -0
  204. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/adhoc_tools.py +0 -0
  205. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/__init__.py +0 -0
  206. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/api.py +0 -0
  207. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/client.py +0 -0
  208. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/settings.py +0 -0
  209. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/tweens/__init__.py +0 -0
  210. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/tweens/profiling.py +0 -0
  211. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/tweens/request_logger.py +0 -0
  212. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/views/__init__.py +0 -0
  213. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/views/exception.py +0 -0
  214. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/views/flink.py +0 -0
  215. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/views/pause_autoscaler.py +0 -0
  216. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/views/resources.py +0 -0
  217. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/views/service.py +0 -0
  218. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/api/views/version.py +0 -0
  219. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/apply_external_resources.py +0 -0
  220. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/autoscaling/__init__.py +0 -0
  221. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/autoscaling/autoscaling_service_lib.py +0 -0
  222. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/autoscaling/forecasting.py +0 -0
  223. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/autoscaling/max_all_k8s_services.py +0 -0
  224. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/autoscaling/pause_service_autoscaler.py +0 -0
  225. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/autoscaling/utils.py +0 -0
  226. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/broadcast_log_to_services.py +0 -0
  227. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cassandracluster_tools.py +0 -0
  228. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/check_autoscaler_max_instances.py +0 -0
  229. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/check_cassandracluster_services_replication.py +0 -0
  230. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/check_flink_services_health.py +0 -0
  231. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/check_kubernetes_api.py +0 -0
  232. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/check_kubernetes_services_replication.py +0 -0
  233. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/check_oom_events.py +0 -0
  234. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cleanup_kubernetes_cr.py +0 -0
  235. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cleanup_kubernetes_crd.py +0 -0
  236. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cleanup_kubernetes_jobs.py +0 -0
  237. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cleanup_tron_namespaces.py +0 -0
  238. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/__init__.py +0 -0
  239. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/authentication.py +0 -0
  240. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/__init__.py +0 -0
  241. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/list.py +0 -0
  242. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/list_clusters.py +0 -0
  243. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/list_deploy_queue.py +0 -0
  244. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/pause_service_autoscaler.py +0 -0
  245. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/cmds/start_stop_restart.py +0 -0
  246. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/fsm/__init__.py +0 -0
  247. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/fsm/autosuggest.py +0 -0
  248. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/fsm/template/README.md +0 -0
  249. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/fsm/template/cookiecutter.json +0 -0
  250. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +0 -0
  251. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +0 -0
  252. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +0 -0
  253. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +0 -0
  254. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/fsm_cmd.py +0 -0
  255. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/paasta_tabcomplete.sh +0 -0
  256. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +0 -0
  257. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +0 -0
  258. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/schemas/deploy_schema.json +0 -0
  259. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/schemas/rollback_schema.json +0 -0
  260. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/cli/schemas/service_schema.json +0 -0
  261. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/config_utils.py +0 -0
  262. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/__init__.py +0 -0
  263. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/check_manual_oapi_changes.sh +0 -0
  264. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/create_dynamodb_table.py +0 -0
  265. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/create_paasta_playground.py +0 -0
  266. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/emit_allocated_cpu_metrics.py +0 -0
  267. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/habitat_fixer.py +0 -0
  268. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/is_pod_healthy_in_proxy.py +0 -0
  269. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/is_pod_healthy_in_smartstack.py +0 -0
  270. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/kill_bad_containers.py +0 -0
  271. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/mass-deploy-tag.sh +0 -0
  272. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/rightsizer_soaconfigs_update.py +0 -0
  273. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/service_shard_remove.py +0 -0
  274. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/service_shard_update.py +0 -0
  275. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/contrib/timeouts_metrics_prom.py +0 -0
  276. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/delete_kubernetes_deployments.py +0 -0
  277. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/deployment_utils.py +0 -0
  278. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/docker_wrapper.py +0 -0
  279. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/docker_wrapper_imports.py +0 -0
  280. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/drain_lib.py +0 -0
  281. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/dump_locally_running_services.py +0 -0
  282. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/eks_tools.py +0 -0
  283. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/envoy_tools.py +0 -0
  284. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/firewall.py +0 -0
  285. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/firewall_logging.py +0 -0
  286. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/firewall_update.py +0 -0
  287. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/flinkeks_tools.py +0 -0
  288. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/frameworks/__init__.py +0 -0
  289. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/frameworks/constraints.py +0 -0
  290. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/frameworks/native_service_config.py +0 -0
  291. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/generate_all_deployments +0 -0
  292. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/generate_authenticating_services.py +0 -0
  293. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/generate_services_file.py +0 -0
  294. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/generate_services_yaml.py +0 -0
  295. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/hacheck.py +0 -0
  296. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/instance/__init__.py +0 -0
  297. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/iptables.py +0 -0
  298. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/kafkacluster_tools.py +0 -0
  299. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/kubernetes/__init__.py +0 -0
  300. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/kubernetes/application/__init__.py +0 -0
  301. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/kubernetes/application/tools.py +0 -0
  302. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/kubernetes/bin/__init__.py +0 -0
  303. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +0 -0
  304. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/kubernetes/bin/paasta_cleanup_remote_run_resources.py +0 -0
  305. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +0 -0
  306. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/kubernetes/bin/paasta_secrets_sync.py +0 -0
  307. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/list_kubernetes_service_instances.py +0 -0
  308. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/list_tron_namespaces.py +0 -0
  309. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/mac_address.py +0 -0
  310. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/marathon_dashboard.py +0 -0
  311. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/mesos/__init__.py +0 -0
  312. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/mesos/cfg.py +0 -0
  313. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/mesos/cluster.py +0 -0
  314. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/mesos/exceptions.py +0 -0
  315. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/mesos/framework.py +0 -0
  316. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/mesos/log.py +0 -0
  317. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/mesos/mesos_file.py +0 -0
  318. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/mesos/parallel.py +0 -0
  319. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/mesos/slave.py +0 -0
  320. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/mesos/task.py +0 -0
  321. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/mesos/util.py +0 -0
  322. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/mesos/zookeeper.py +0 -0
  323. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/mesos_tools.py +0 -0
  324. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/metrics/__init__.py +0 -0
  325. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/monitoring/__init__.py +0 -0
  326. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/monitoring/check_k8s_api_performance.py +0 -0
  327. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/monitoring_tools.py +0 -0
  328. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/monkrelaycluster_tools.py +0 -0
  329. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/nrtsearchservice_tools.py +0 -0
  330. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/nrtsearchserviceeks_tools.py +0 -0
  331. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/oom_logger.py +0 -0
  332. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paasta_deploy_tron_jobs +0 -0
  333. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paasta_execute_docker_command.py +0 -0
  334. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paasta_service_config_loader.py +0 -0
  335. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/api/__init__.py +0 -0
  336. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/apis/__init__.py +0 -0
  337. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/paastaapi/model/__init__.py +0 -0
  338. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/prune_completed_pods.py +0 -0
  339. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/puppet_service_tools.py +0 -0
  340. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/py.typed +0 -0
  341. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/secret_providers/__init__.py +0 -0
  342. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/secret_providers/vault.py +0 -0
  343. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/secret_tools.py +0 -0
  344. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/setup_istio_mesh.py +0 -0
  345. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/setup_kubernetes_crd.py +0 -0
  346. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/setup_kubernetes_internal_crd.py +0 -0
  347. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/slack.py +0 -0
  348. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/smartstack_tools.py +0 -0
  349. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/spark_tools.py +0 -0
  350. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/synapse_srv_namespaces_fact.py +0 -0
  351. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/tron/__init__.py +0 -0
  352. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/tron/client.py +0 -0
  353. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/tron/tron_command_context.py +0 -0
  354. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools/tron/tron_timeutils.py +0 -0
  355. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools.egg-info/dependency_links.txt +0 -0
  356. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/paasta_tools.egg-info/top_level.txt +0 -0
  357. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/pyproject.toml +0 -0
  358. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/setup.cfg +0 -0
  359. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_generate_authenticating_services.py +0 -0
  360. {paasta_tools-1.22.0 → paasta_tools-1.36.11}/tests/test_spark_tools.py +0 -0
@@ -1,11 +1,11 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: paasta-tools
3
- Version: 1.22.0
3
+ Version: 1.36.11
4
4
  Summary: Tools for Yelps SOA infrastructure
5
5
  Author: Compute Infrastructure @ Yelp
6
6
  Author-email: compute-infra@yelp.com
7
7
  Provides: paasta_tools
8
- Requires-Python: >=3.8.0
8
+ Requires-Python: >=3.9.0
9
9
  License-File: LICENSE
10
10
  Requires-Dist: a-sync>=0.5.0
11
11
  Requires-Dist: aiohttp>=3.5.4
@@ -22,6 +22,7 @@ Requires-Dist: cookiecutter>=1.4.0
22
22
  Requires-Dist: croniter
23
23
  Requires-Dist: docker
24
24
  Requires-Dist: dulwich>=0.17.3
25
+ Requires-Dist: environment-tools
25
26
  Requires-Dist: ephemeral-port-reserve>=1.0.1
26
27
  Requires-Dist: graphviz
27
28
  Requires-Dist: grpcio
@@ -33,7 +34,7 @@ Requires-Dist: ipaddress>=1.0.22
33
34
  Requires-Dist: isodate>=0.7.2
34
35
  Requires-Dist: jsonschema[format]
35
36
  Requires-Dist: kazoo>=2.0.0
36
- Requires-Dist: kubernetes<26.0.0,>=18.20.0
37
+ Requires-Dist: kubernetes<35.0.0,>=29.0.0
37
38
  Requires-Dist: ldap3
38
39
  Requires-Dist: manhole
39
40
  Requires-Dist: mypy-extensions>=0.3.0
@@ -41,11 +42,11 @@ Requires-Dist: nats-py
41
42
  Requires-Dist: nulltype
42
43
  Requires-Dist: objgraph
43
44
  Requires-Dist: ply
44
- Requires-Dist: progressbar2>=3.10.0
45
+ Requires-Dist: progressbar2>=4.3.2
45
46
  Requires-Dist: prometheus-client
46
47
  Requires-Dist: pymesos>=0.2.0
47
- Requires-Dist: pyramid>=1.8
48
48
  Requires-Dist: pyramid-swagger>=2.3.0
49
+ Requires-Dist: pyramid>=2.0.2
49
50
  Requires-Dist: pysensu-yelp>=0.3.4
50
51
  Requires-Dist: PyStaticConfiguration
51
52
  Requires-Dist: python-crontab>=2.1.1
@@ -53,21 +54,26 @@ Requires-Dist: python-dateutil>=2.4.0
53
54
  Requires-Dist: python-iptables
54
55
  Requires-Dist: pytimeparse>=1.1.0
55
56
  Requires-Dist: pytz>=2014.10
56
- Requires-Dist: requests<2.32.0,>=2.18.4
57
+ Requires-Dist: requests>=2.18.4
57
58
  Requires-Dist: requests-cache>=0.4.10
58
59
  Requires-Dist: retry
59
60
  Requires-Dist: ruamel.yaml
60
61
  Requires-Dist: sensu-plugin
61
- Requires-Dist: service-configuration-lib>=3.3.2
62
+ Requires-Dist: service-configuration-lib>=3.3.8
62
63
  Requires-Dist: signalfx
63
64
  Requires-Dist: slackclient>=1.2.1
64
65
  Requires-Dist: sticht>=1.1.0
65
66
  Requires-Dist: syslogmp
66
- Requires-Dist: task-processing
67
- Requires-Dist: thriftpy2
68
67
  Requires-Dist: transitions
69
68
  Requires-Dist: typing-extensions
70
69
  Requires-Dist: tzlocal
71
70
  Requires-Dist: urllib3
72
71
  Requires-Dist: utaw>=0.2.0
73
72
  Requires-Dist: wsgicors
73
+ Dynamic: author
74
+ Dynamic: author-email
75
+ Dynamic: license-file
76
+ Dynamic: provides
77
+ Dynamic: requires-dist
78
+ Dynamic: requires-python
79
+ Dynamic: summary
@@ -17,4 +17,4 @@
17
17
  # setup phase, the dependencies may not exist on disk yet.
18
18
  #
19
19
  # Don't bump version manually. See `make release` docs in ./Makefile
20
- __version__ = "1.22.0"
20
+ __version__ = "1.36.11"
@@ -2,7 +2,7 @@
2
2
  "swagger": "2.0",
3
3
  "info": {
4
4
  "title": "Paasta API",
5
- "version": "1.2.0"
5
+ "version": "1.3.0"
6
6
  },
7
7
  "basePath": "/v1",
8
8
  "schemes": [
@@ -322,8 +322,14 @@
322
322
  },
323
323
  "min_instances": {
324
324
  "type": "integer",
325
+ "x-nullable": true,
325
326
  "description": "Minimum number of instances to run"
326
327
  },
328
+ "max_instances": {
329
+ "type": "integer",
330
+ "x-nullable": true,
331
+ "description": "Maximum number of instances to run"
332
+ },
327
333
  "expire_after": {
328
334
  "type": "number",
329
335
  "format": "float",
@@ -930,7 +936,15 @@
930
936
  }
931
937
  },
932
938
  "403": {
933
- "description": "Unauthorized to remote-run this service"
939
+ "description": "Unauthorized to remote-run this service",
940
+ "schema": {
941
+ "type": "object",
942
+ "properties": {
943
+ "reason": {
944
+ "type": "string"
945
+ }
946
+ }
947
+ }
934
948
  },
935
949
  "404": {
936
950
  "description": "Deployment key not found"
@@ -981,7 +995,15 @@
981
995
  }
982
996
  },
983
997
  "403": {
984
- "description": "Unauthorized to remote-run this service"
998
+ "description": "Unauthorized to remote-run this service",
999
+ "schema": {
1000
+ "type": "object",
1001
+ "properties": {
1002
+ "reason": {
1003
+ "type": "string"
1004
+ }
1005
+ }
1006
+ }
985
1007
  },
986
1008
  "404": {
987
1009
  "description": "Service instance not found"
@@ -1037,6 +1059,9 @@
1037
1059
  "404": {
1038
1060
  "description": "Service instance not found"
1039
1061
  },
1062
+ "409": {
1063
+ "description": "A pod was found but is currently being terminated"
1064
+ },
1040
1065
  "500": {
1041
1066
  "description": "Failure"
1042
1067
  }
@@ -1705,17 +1730,24 @@
1705
1730
  "properties": {
1706
1731
  "min_instances": {
1707
1732
  "type": "integer",
1708
- "description": "Minimum number of instances to run",
1709
- "minimum": 1
1733
+ "x-nullable": true,
1734
+ "description": "Minimum number of instances to run"
1735
+ },
1736
+ "max_instances": {
1737
+ "type": "integer",
1738
+ "x-nullable": true,
1739
+ "description": "Maximum number of instances to run"
1710
1740
  },
1711
1741
  "expire_after": {
1712
1742
  "type": "number",
1713
1743
  "format": "float",
1714
- "description": "Unix timestamp when this override is no longer valid"
1744
+ "description": "Unix timestamp when this override is no longer valid",
1745
+ "minimum": 1
1715
1746
  }
1716
1747
  },
1717
1748
  "required": [
1718
1749
  "min_instances",
1750
+ "max_instances",
1719
1751
  "expire_after"
1720
1752
  ]
1721
1753
  },
@@ -1756,6 +1788,11 @@
1756
1788
  "KubernetesVersion": {
1757
1789
  "type": "object",
1758
1790
  "properties": {
1791
+ "container_port": {
1792
+ "description": "Port the container is expecting to receive traffic on",
1793
+ "type": "integer",
1794
+ "format": "int32"
1795
+ },
1759
1796
  "type": {
1760
1797
  "description": "Type of version (ReplicaSet or ControllerRevision)",
1761
1798
  "type": "string"
@@ -2292,6 +2329,9 @@
2292
2329
  },
2293
2330
  "toolbox": {
2294
2331
  "type": "boolean"
2332
+ },
2333
+ "command": {
2334
+ "type": "string"
2295
2335
  }
2296
2336
  },
2297
2337
  "required": [
@@ -77,7 +77,8 @@ class AuthTweenFactory:
77
77
  method: str,
78
78
  service: Optional[str],
79
79
  ) -> AuthorizationOutcome:
80
- """Check if API request is authorized
80
+ """
81
+ Check if API request is authorized
81
82
 
82
83
  :param str path: API path
83
84
  :param str token: authentication token
@@ -136,7 +136,7 @@ def set_autoscaling_override(request):
136
136
  Required parameters:
137
137
  - service: The service name
138
138
  - instance: The instance name
139
- - min_instances: The minimum number of instances to enforce
139
+ - min_instances AND/OR max_instances: The minimum and/or maximum number of instances to enforce
140
140
  - expires_after: unix timestamp after which the override is no longer valid
141
141
  """
142
142
  service = request.swagger_data.get("service")
@@ -156,24 +156,29 @@ def set_autoscaling_override(request):
156
156
 
157
157
  json_body = request.swagger_data.get("json_body", {})
158
158
  min_instances_override = json_body.get("min_instances")
159
- expire_after = json_body.get("expire_after")
159
+ max_instances_override = json_body.get("max_instances")
160
+ expire_after = json_body["expire_after"]
160
161
 
161
- if not isinstance(min_instances_override, int) or min_instances_override < 1:
162
- raise ApiFailure("min_instances must be a positive integer", 400)
162
+ # ideally we'd enforce this in our api spec - but since we're using both swagger and oapi, that's not quite so simple
163
+ if not min_instances_override and not max_instances_override:
164
+ raise ApiFailure(
165
+ "At least one of min_instances or max_instances must be provided", 400
166
+ )
163
167
 
164
- if not expire_after:
165
- raise ApiFailure("expire_after is required", 400)
168
+ # we can't currently enforce this in the API spec since the generator seems to have issues generating a validator
169
+ # for a nullable integer field with a minimum value as we get errors like:
170
+ # `TypeError: '<' not supported between instances of 'NoneType' and 'int'`
171
+ # that said, unless someone is manually crafting requests, this should never happen
172
+ # since the CLI includes a check for this as well
173
+ if min_instances_override is not None and min_instances_override < 1:
174
+ raise ApiFailure("min_instances must be a positive integer", 400)
175
+ if max_instances_override is not None and max_instances_override < 1:
176
+ raise ApiFailure("max_instances must be a positive integer", 400)
166
177
 
167
- max_instances = instance_config.get_max_instances()
168
- if max_instances is None:
178
+ # otherwise, we could have folks accidentally enable autoscaling (using cpu) for a non-autoscaled
179
+ if instance_config.is_autoscaling_enabled() is None:
169
180
  raise ApiFailure(f"Autoscaling is not enabled for {service}.{instance}", 400)
170
181
 
171
- if max_instances < min_instances_override:
172
- raise ApiFailure(
173
- f"min_instances ({min_instances_override}) cannot be greater than max_instances ({max_instances})",
174
- 400,
175
- )
176
-
177
182
  configmap, created = get_or_create_autoscaling_overrides_configmap()
178
183
  if created:
179
184
  log.info("Created new autoscaling overrides ConfigMap")
@@ -182,23 +187,54 @@ def set_autoscaling_override(request):
182
187
  if not configmap.data:
183
188
  configmap.data = {}
184
189
 
185
- override_data = {
186
- "min_instances": min_instances_override,
187
- "created_at": datetime.now(timezone.utc).isoformat(),
188
- # NOTE: we may want to also allow setting a max_instances override in the future, but if we do that
189
- # we'd probably want to force folks to either set one or both and share the same expiration time
190
- "expire_after": expire_after,
191
- }
192
-
193
190
  service_instance = f"{service}.{instance}"
194
191
  existing_overrides = (
195
192
  json.loads(configmap.data[service_instance])
196
193
  if service_instance in configmap.data
197
194
  else {}
198
195
  )
199
- merged_overrides = {**existing_overrides, **override_data}
196
+
197
+ # this is slightly funky as there's a hierarchy of what value to pick:
198
+ # 1. the override value provided in the request - as this should override any existing value
199
+ # 2. the existing override value in the configmap - this is used if we previously only set an override for min or
200
+ # max instances and now want to set a value for the other
201
+ # 3. the value from the instance config - this is used as a final fallback since this means no override is present
202
+ min_instances = (
203
+ min_instances_override
204
+ or existing_overrides.get("min_instances")
205
+ or instance_config.get_min_instances()
206
+ )
207
+ max_instances = (
208
+ max_instances_override
209
+ or existing_overrides.get("max_instances")
210
+ or instance_config.get_max_instances()
211
+ )
212
+
213
+ # NOTE: the max_instances check is unnecessary here, but type-checkers can't see that the is_autoscaling_enabled()
214
+ # check above ensures that max_instances is not None
215
+ if max_instances is None or max_instances < min_instances:
216
+ raise ApiFailure(
217
+ f"min_instances ({min_instances_override}) cannot be greater than max_instances ({max_instances})",
218
+ 400,
219
+ )
220
+
221
+ override_data = {
222
+ "min_instances": min_instances_override,
223
+ "max_instances": max_instances_override,
224
+ "created_at": datetime.now(timezone.utc).isoformat(),
225
+ "expire_after": expire_after,
226
+ }
227
+
228
+ # NOTE: we need to strip out null values from the incoming overrides since otherwise we'd remove existing overrides
229
+ # (since if only --set-min or --set-max is provided, the other will be sent as None)
230
+ merged_overrides = {
231
+ **existing_overrides,
232
+ **{k: v for k, v in override_data.items() if v is not None},
233
+ }
200
234
  serialized_overrides = json.dumps(merged_overrides)
201
235
 
236
+ # note: we can only append with patching - if we ever want to remove overrides outside of the cleanup cronjob,
237
+ # we would need to change this to use replace_namespaced_configmap
202
238
  patch_namespaced_configmap(
203
239
  name=AUTOSCALING_OVERRIDES_CONFIGMAP_NAME,
204
240
  namespace=AUTOSCALING_OVERRIDES_CONFIGMAP_NAMESPACE,
@@ -213,6 +249,7 @@ def set_autoscaling_override(request):
213
249
  "instance": instance,
214
250
  "cluster": cluster,
215
251
  "min_instances": min_instances_override,
252
+ "max_instances": max_instances_override,
216
253
  "expire_after": expire_after,
217
254
  "status": "SUCCESS",
218
255
  }
@@ -26,6 +26,7 @@ from typing import Mapping
26
26
  from typing import Optional
27
27
 
28
28
  import a_sync
29
+ from pyramid.request import Request
29
30
  from pyramid.response import Response
30
31
  from pyramid.view import view_config
31
32
 
@@ -139,7 +140,10 @@ def no_configuration_for_service_message(cluster, service, instance):
139
140
  @view_config(
140
141
  route_name="service.instance.status", request_method="GET", renderer="json"
141
142
  )
142
- def instance_status(request):
143
+ def instance_status(
144
+ request: Request,
145
+ ) -> dict[str, Any]: # godspeed to anyone typing the retval here
146
+ # NOTE: swagger_data is populated by pyramid_swagger
143
147
  service = request.swagger_data.get("service")
144
148
  instance = request.swagger_data.get("instance")
145
149
  verbose = request.swagger_data.get("verbose") or 0
@@ -353,7 +357,10 @@ def get_deployment_version(
353
357
  request_method="GET",
354
358
  renderer="json",
355
359
  )
356
- def instance_mesh_status(request):
360
+ def instance_mesh_status(
361
+ request: Request,
362
+ ) -> dict[str, Any]: # godspeed to anyone typing the retval here
363
+ # NOTE: swagger_data is populated by pyramid_swagger
357
364
  service = request.swagger_data.get("service")
358
365
  instance = request.swagger_data.get("instance")
359
366
  include_envoy = request.swagger_data.get("include_envoy")
@@ -35,6 +35,7 @@ def view_remote_run_start(request):
35
35
  interactive = request.swagger_data["json_body"].get("interactive", True)
36
36
  recreate = request.swagger_data["json_body"].get("recreate", False)
37
37
  is_toolbox = request.swagger_data["json_body"].get("toolbox", False)
38
+ command = request.swagger_data["json_body"].get("command", None)
38
39
  max_duration = min(
39
40
  request.swagger_data["json_body"].get("max_duration", DEFAULT_MAX_DURATION),
40
41
  get_max_job_duration_limit(),
@@ -49,6 +50,7 @@ def view_remote_run_start(request):
49
50
  recreate=recreate,
50
51
  max_duration=max_duration,
51
52
  is_toolbox=is_toolbox,
53
+ command=command,
52
54
  )
53
55
  except Exception:
54
56
  error_message = traceback.format_exc()
@@ -3,9 +3,11 @@ import functools
3
3
  import time
4
4
  import weakref
5
5
  from collections import defaultdict
6
+ from typing import Any
6
7
  from typing import AsyncIterable
7
8
  from typing import Awaitable
8
9
  from typing import Callable
10
+ from typing import Coroutine
9
11
  from typing import Dict
10
12
  from typing import List
11
13
  from typing import Optional
@@ -97,7 +99,8 @@ async def aiter_to_list(
97
99
  def async_timeout(
98
100
  seconds: int = 10,
99
101
  ) -> Callable[
100
- [Callable[..., Awaitable[T]]], Callable[..., Awaitable[T]] # wrapped # inner
102
+ [Callable[..., Coroutine[Any, Any, T]]],
103
+ Callable[..., Coroutine[Any, Any, T]], # wrapped # inner
101
104
  ]:
102
105
  def outer(wrapped):
103
106
  @functools.wraps(wrapped)
@@ -42,11 +42,14 @@ BounceMethodResult = TypedDict(
42
42
 
43
43
  BounceMethod = Callable[
44
44
  [
45
- Arg(BounceMethodConfigDict, "new_config"),
46
- Arg(bool, "new_app_running"),
47
- Arg(Collection, "happy_new_tasks"),
48
- Arg(Sequence, "old_non_draining_tasks"),
49
- DefaultArg(float, "margin_factor"),
45
+ Arg(
46
+ BounceMethodConfigDict,
47
+ "new_config", # noqa: F821 # flake8 false-positive, these are not var references
48
+ ),
49
+ Arg(bool, "new_app_running"), # noqa: F821 # flake8 false-positive
50
+ Arg(Collection, "happy_new_tasks"), # noqa: F821 # flake8 false-positive
51
+ Arg(Sequence, "old_non_draining_tasks"), # noqa: F821 # flake8 false-positive
52
+ DefaultArg(float, "margin_factor"), # noqa: F821 # flake8 false-positive
50
53
  ],
51
54
  BounceMethodResult,
52
55
  ]
@@ -56,10 +56,16 @@ log = logging.getLogger(__name__)
56
56
 
57
57
  CheckServiceReplication = Callable[
58
58
  [
59
- Arg(InstanceConfig_T, "instance_config"),
60
- Arg(Dict[str, Dict[str, List[V1Pod]]], "pods_by_service_instance"),
61
- Arg(Any, "replication_checker"),
62
- NamedArg(bool, "dry_run"),
59
+ Arg(
60
+ InstanceConfig_T,
61
+ "instance_config", # noqa: F821 # flake8 false-positive, these are not var references
62
+ ),
63
+ Arg(
64
+ Dict[str, Dict[str, List[V1Pod]]],
65
+ "pods_by_service_instance", # noqa: F821 # flake8 false-positive
66
+ ),
67
+ Arg(Any, "replication_checker"), # noqa: F821 # flake8 false-positive
68
+ NamedArg(bool, "dry_run"), # noqa: F821 # flake8 false-positive
63
69
  ],
64
70
  Optional[bool],
65
71
  ]
@@ -124,7 +124,7 @@ def format_framework(info):
124
124
  def format_message_for_service(service, frameworks):
125
125
  output = f"Found the following long-running Spark frameworks associated with service {service}.\n"
126
126
  output += (
127
- f"Please check why they are still running and terminate if appropriate.\n\n"
127
+ "Please check why they are still running and terminate if appropriate.\n\n"
128
128
  )
129
129
  output += "\n".join(format_framework(f) for f in frameworks)
130
130
  return output
@@ -0,0 +1,155 @@
1
+ import argparse
2
+ import json
3
+ import logging
4
+ import sys
5
+ import time
6
+ from datetime import datetime
7
+ from datetime import timezone
8
+
9
+ from kubernetes.client.rest import ApiException
10
+
11
+ from paasta_tools.kubernetes_tools import AUTOSCALING_OVERRIDES_CONFIGMAP_NAME
12
+ from paasta_tools.kubernetes_tools import AUTOSCALING_OVERRIDES_CONFIGMAP_NAMESPACE
13
+ from paasta_tools.kubernetes_tools import get_namespaced_configmap
14
+ from paasta_tools.kubernetes_tools import KubeClient
15
+ from paasta_tools.kubernetes_tools import replace_namespaced_configmap
16
+
17
+ log = logging.getLogger(__name__)
18
+
19
+
20
+ def parse_args():
21
+ parser = argparse.ArgumentParser(
22
+ description=f"Clean up expired entries from the {AUTOSCALING_OVERRIDES_CONFIGMAP_NAME} configmap"
23
+ )
24
+ parser.add_argument(
25
+ "--dry-run",
26
+ dest="dry_run",
27
+ action="store_true",
28
+ help="Print entries to be removed instead of removing them",
29
+ )
30
+ parser.add_argument(
31
+ "-v", "--verbose", dest="verbose", action="store_true", default=False
32
+ )
33
+ args = parser.parse_args()
34
+ return args
35
+
36
+
37
+ def setup_logging(verbose):
38
+ level = logging.DEBUG if verbose else logging.INFO
39
+ logging.basicConfig(level=level)
40
+ # silence kubernetes client metadata logs since debug ones are pretty noisy
41
+ logging.getLogger("kubernetes.client.rest").setLevel(logging.ERROR)
42
+
43
+
44
+ def main():
45
+ args = parse_args()
46
+ setup_logging(args.verbose)
47
+
48
+ kube_client = KubeClient()
49
+
50
+ try:
51
+ configmap = get_namespaced_configmap(
52
+ name=AUTOSCALING_OVERRIDES_CONFIGMAP_NAME,
53
+ namespace=AUTOSCALING_OVERRIDES_CONFIGMAP_NAMESPACE,
54
+ kube_client=kube_client,
55
+ )
56
+ except ApiException as e:
57
+ if e.status == 404:
58
+ log.debug(
59
+ f"ConfigMap {AUTOSCALING_OVERRIDES_CONFIGMAP_NAME} not found, nothing to clean up"
60
+ )
61
+ sys.exit(0)
62
+ else:
63
+ log.error(f"Error retrieving ConfigMap: {e}")
64
+ sys.exit(1)
65
+
66
+ if configmap is None:
67
+ log.debug(
68
+ f"ConfigMap {AUTOSCALING_OVERRIDES_CONFIGMAP_NAME} not found, nothing to clean up"
69
+ )
70
+ sys.exit(0)
71
+
72
+ if not configmap.data:
73
+ log.debug("ConfigMap has no data, nothing to clean up")
74
+ sys.exit(0)
75
+
76
+ current_timestamp = (
77
+ time.time()
78
+ ) # we'll fix the comparison time to the start of the script execution
79
+ expired_entries = [] # used just for logging
80
+ unexpired_data = {} # used to replace the existing configmap data
81
+
82
+ log.debug(f"Current timestamp: {current_timestamp}")
83
+ for service_instance, override_json in configmap.data.items():
84
+ log.debug(f"Processing entry for {service_instance}")
85
+
86
+ try:
87
+ override_data = json.loads(override_json)
88
+ except json.JSONDecodeError:
89
+ log.exception(
90
+ f"Failed to parse JSON for {service_instance}, removing entry"
91
+ )
92
+ expired_entries.append(service_instance)
93
+ continue
94
+
95
+ if "expire_after" not in override_data:
96
+ log.warning(
97
+ f"Entry for {service_instance} missing expire_after field, removing entry"
98
+ )
99
+ expired_entries.append(service_instance)
100
+ continue
101
+
102
+ try:
103
+ expire_after = float(override_data["expire_after"])
104
+ except (ValueError, TypeError):
105
+ log.exception(
106
+ f"Failed to parse expire_after for {service_instance}, removing entry"
107
+ )
108
+ expired_entries.append(service_instance)
109
+ continue
110
+
111
+ if current_timestamp > expire_after:
112
+ expire_datetime = datetime.fromtimestamp(expire_after, tz=timezone.utc)
113
+ log.debug(
114
+ f"Entry for {service_instance} expired at {expire_after} ({expire_datetime})"
115
+ )
116
+ expired_entries.append(service_instance)
117
+ else:
118
+ expire_datetime = datetime.fromtimestamp(expire_after, tz=timezone.utc)
119
+ log.debug(
120
+ f"Entry for {service_instance} expires at {expire_after} ({expire_datetime}), keeping"
121
+ )
122
+ unexpired_data[service_instance] = override_json
123
+
124
+ if not expired_entries:
125
+ log.info("No expired entries found")
126
+ sys.exit(0)
127
+
128
+ if args.dry_run:
129
+ log.info(
130
+ "Would have removed the following expired entries:\n "
131
+ + "\n ".join(expired_entries)
132
+ )
133
+ sys.exit(0)
134
+
135
+ try:
136
+ configmap.data = (
137
+ unexpired_data # naughtily re-use the existing configmap object
138
+ )
139
+ replace_namespaced_configmap( # NOTE: this is not a patch since you cannot currently remove entries in a patch
140
+ name=AUTOSCALING_OVERRIDES_CONFIGMAP_NAME,
141
+ namespace=AUTOSCALING_OVERRIDES_CONFIGMAP_NAMESPACE,
142
+ body=configmap,
143
+ kube_client=kube_client,
144
+ )
145
+ log.info(
146
+ f"Successfully removed {len(expired_entries)} expired entries:\n "
147
+ + "\n ".join(expired_entries)
148
+ )
149
+ except ApiException as e:
150
+ log.error(f"Failed to update ConfigMap: {e}")
151
+ sys.exit(1)
152
+
153
+
154
+ if __name__ == "__main__":
155
+ main()
@@ -68,7 +68,7 @@ class PrintsHelpOnErrorArgumentParser(argparse.ArgumentParser):
68
68
  def list_external_commands():
69
69
  p = subprocess.check_output(["/bin/bash", "-p", "-c", "compgen -A command paasta-"])
70
70
  lines = p.decode("utf-8").strip().split("\n")
71
- return {l.replace("paasta-", "", 1) for l in lines}
71
+ return {line.replace("paasta-", "", 1) for line in lines}
72
72
 
73
73
 
74
74
  def calling_external_command():
@@ -132,10 +132,10 @@ PAASTA_SUBCOMMANDS = {
132
132
  }
133
133
 
134
134
 
135
- def get_argparser(commands=None):
135
+ def get_argparser(commands: list[str] | None = None) -> argparse.ArgumentParser:
136
136
  """Create and return argument parser for a set of subcommands.
137
137
 
138
- :param commands: Union[None, List[str]] If `commands` argument is `None`,
138
+ :param commands: list[str] | None: If `commands` argument is `None`,
139
139
  add full parsers for all subcommands, if `commands` is empty list -
140
140
  add thin parsers for all subcommands, otherwise - add full parsers for
141
141
  subcommands in the argument.
@@ -170,7 +170,7 @@ def get_argparser(commands=None):
170
170
 
171
171
  # Adding a separate help subparser allows us to respond to "help" without --help
172
172
  help_parser = subparsers.add_parser(
173
- "help", help=f"run `paasta <subcommand> -h` for help"
173
+ "help", help="run `paasta <subcommand> -h` for help"
174
174
  )
175
175
  help_parser.set_defaults(command=None)
176
176