skypilot-nightly 1.0.0.dev20250226__tar.gz → 1.0.0.dev20250228__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.
Files changed (372) hide show
  1. {skypilot_nightly-1.0.0.dev20250226/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250228}/PKG-INFO +2 -2
  2. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/README.md +1 -1
  3. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/__init__.py +2 -2
  4. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/adaptors/kubernetes.py +4 -6
  5. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/cli.py +59 -21
  6. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/client/cli.py +59 -21
  7. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/jobs/client/sdk.py +10 -4
  8. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/jobs/constants.py +1 -1
  9. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/jobs/dashboard/dashboard.py +4 -1
  10. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/jobs/scheduler.py +23 -8
  11. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/jobs/server/core.py +33 -9
  12. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/jobs/server/server.py +9 -0
  13. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/jobs/state.py +30 -10
  14. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/jobs/utils.py +57 -12
  15. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/server/constants.py +1 -1
  16. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/server/requests/payloads.py +2 -0
  17. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/jobs-controller.yaml.j2 +8 -1
  18. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228/skypilot_nightly.egg-info}/PKG-INFO +2 -2
  19. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/LICENSE +0 -0
  20. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/MANIFEST.in +0 -0
  21. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/pyproject.toml +0 -0
  22. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/setup.cfg +0 -0
  23. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/setup.py +0 -0
  24. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/adaptors/__init__.py +0 -0
  25. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/adaptors/aws.py +0 -0
  26. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/adaptors/azure.py +0 -0
  27. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/adaptors/cloudflare.py +0 -0
  28. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/adaptors/common.py +0 -0
  29. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/adaptors/cudo.py +0 -0
  30. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/adaptors/do.py +0 -0
  31. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/adaptors/docker.py +0 -0
  32. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/adaptors/gcp.py +0 -0
  33. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/adaptors/ibm.py +0 -0
  34. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/adaptors/nebius.py +0 -0
  35. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/adaptors/oci.py +0 -0
  36. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/adaptors/runpod.py +0 -0
  37. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/adaptors/vast.py +0 -0
  38. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/adaptors/vsphere.py +0 -0
  39. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/admin_policy.py +0 -0
  40. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/authentication.py +0 -0
  41. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/backends/__init__.py +0 -0
  42. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/backends/backend.py +0 -0
  43. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/backends/backend_utils.py +0 -0
  44. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/backends/cloud_vm_ray_backend.py +0 -0
  45. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/backends/docker_utils.py +0 -0
  46. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/backends/local_docker_backend.py +0 -0
  47. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  48. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/backends/wheel_utils.py +0 -0
  49. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/benchmark/__init__.py +0 -0
  50. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/benchmark/benchmark_state.py +0 -0
  51. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/benchmark/benchmark_utils.py +0 -0
  52. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/check.py +0 -0
  53. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/client/__init__.py +0 -0
  54. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/client/common.py +0 -0
  55. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/client/sdk.py +0 -0
  56. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/cloud_stores.py +0 -0
  57. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/__init__.py +0 -0
  58. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/aws.py +0 -0
  59. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/azure.py +0 -0
  60. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/cloud.py +0 -0
  61. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/cudo.py +0 -0
  62. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/do.py +0 -0
  63. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/fluidstack.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/gcp.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/ibm.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/kubernetes.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/lambda_cloud.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/nebius.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/oci.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/paperspace.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/runpod.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/scp.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/__init__.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/aws_catalog.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/azure_catalog.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/common.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/config.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/constants.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/data_fetchers/fetch_vast.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/do_catalog.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/kubernetes_catalog.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/nebius_catalog.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/oci_catalog.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/scp_catalog.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/vast_catalog.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/utils/__init__.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/utils/aws_utils.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/utils/azure_utils.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/utils/gcp_utils.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/utils/oci_utils.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/utils/scp_utils.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/vast.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/clouds/vsphere.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/core.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/dag.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/data/__init__.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/data/data_transfer.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/data/data_utils.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/data/mounting_utils.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/data/storage.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/data/storage_utils.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/exceptions.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/execution.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/global_user_state.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/jobs/__init__.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/jobs/client/__init__.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/jobs/controller.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/jobs/dashboard/static/favicon.ico +0 -0
  125. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/jobs/dashboard/templates/index.html +0 -0
  126. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/jobs/recovery_strategy.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/jobs/server/__init__.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/jobs/server/dashboard_utils.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/models.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/optimizer.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/__init__.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/aws/__init__.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/aws/config.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/aws/instance.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/aws/utils.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/azure/__init__.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/azure/azure-config-template.json +0 -0
  138. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/azure/config.py +0 -0
  139. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/azure/instance.py +0 -0
  140. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/common.py +0 -0
  141. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/constants.py +0 -0
  142. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/cudo/__init__.py +0 -0
  143. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/cudo/config.py +0 -0
  144. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/cudo/cudo_machine_type.py +0 -0
  145. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/cudo/cudo_utils.py +0 -0
  146. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/cudo/cudo_wrapper.py +0 -0
  147. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/cudo/instance.py +0 -0
  148. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/do/__init__.py +0 -0
  149. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/do/config.py +0 -0
  150. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/do/constants.py +0 -0
  151. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/do/instance.py +0 -0
  152. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/do/utils.py +0 -0
  153. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/docker_utils.py +0 -0
  154. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/fluidstack/__init__.py +0 -0
  155. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/fluidstack/config.py +0 -0
  156. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  157. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/fluidstack/instance.py +0 -0
  158. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/gcp/__init__.py +0 -0
  159. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/gcp/config.py +0 -0
  160. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/gcp/constants.py +0 -0
  161. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/gcp/instance.py +0 -0
  162. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/gcp/instance_utils.py +0 -0
  163. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/gcp/mig_utils.py +0 -0
  164. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/instance_setup.py +0 -0
  165. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/kubernetes/__init__.py +0 -0
  166. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/kubernetes/config.py +0 -0
  167. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/kubernetes/constants.py +0 -0
  168. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/kubernetes/instance.py +0 -0
  169. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
  170. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
  171. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/kubernetes/network.py +0 -0
  172. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/kubernetes/network_utils.py +0 -0
  173. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/kubernetes/utils.py +0 -0
  174. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/lambda_cloud/__init__.py +0 -0
  175. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/lambda_cloud/config.py +0 -0
  176. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/lambda_cloud/instance.py +0 -0
  177. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  178. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/logging.py +0 -0
  179. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/metadata_utils.py +0 -0
  180. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/nebius/__init__.py +0 -0
  181. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/nebius/config.py +0 -0
  182. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/nebius/instance.py +0 -0
  183. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/nebius/utils.py +0 -0
  184. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/oci/__init__.py +0 -0
  185. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/oci/config.py +0 -0
  186. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/oci/instance.py +0 -0
  187. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/oci/query_utils.py +0 -0
  188. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/paperspace/__init__.py +0 -0
  189. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/paperspace/config.py +0 -0
  190. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/paperspace/constants.py +0 -0
  191. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/paperspace/instance.py +0 -0
  192. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/paperspace/utils.py +0 -0
  193. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/provisioner.py +0 -0
  194. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/runpod/__init__.py +0 -0
  195. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/runpod/api/__init__.py +0 -0
  196. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/runpod/api/commands.py +0 -0
  197. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/runpod/api/pods.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/runpod/config.py +0 -0
  199. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/runpod/instance.py +0 -0
  200. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/runpod/utils.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vast/__init__.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vast/config.py +0 -0
  203. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vast/instance.py +0 -0
  204. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vast/utils.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vsphere/__init__.py +0 -0
  206. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vsphere/common/__init__.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vsphere/common/custom_script.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vsphere/common/id_generator.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vsphere/common/service_manager.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vsphere/common/vim_utils.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vsphere/config.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vsphere/instance.py +0 -0
  219. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/provision/vsphere/vsphere_utils.py +0 -0
  220. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/resources.py +0 -0
  221. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/serve/__init__.py +0 -0
  222. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/serve/autoscalers.py +0 -0
  223. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/serve/client/__init__.py +0 -0
  224. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/serve/client/sdk.py +0 -0
  225. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/serve/constants.py +0 -0
  226. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/serve/controller.py +0 -0
  227. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/serve/load_balancer.py +0 -0
  228. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/serve/load_balancing_policies.py +0 -0
  229. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/serve/replica_managers.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/serve/serve_state.py +0 -0
  231. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/serve/serve_utils.py +0 -0
  232. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/serve/server/__init__.py +0 -0
  233. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/serve/server/core.py +0 -0
  234. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/serve/server/server.py +0 -0
  235. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/serve/service.py +0 -0
  236. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/serve/service_spec.py +0 -0
  237. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/server/__init__.py +0 -0
  238. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/server/common.py +0 -0
  239. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/server/html/log.html +0 -0
  240. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/server/requests/__init__.py +0 -0
  241. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/server/requests/executor.py +0 -0
  242. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/server/requests/queues/__init__.py +0 -0
  243. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/server/requests/queues/mp_queue.py +0 -0
  244. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/server/requests/requests.py +0 -0
  245. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/server/requests/serializers/__init__.py +0 -0
  246. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/server/requests/serializers/decoders.py +0 -0
  247. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/server/requests/serializers/encoders.py +0 -0
  248. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/server/server.py +0 -0
  249. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/server/stream_utils.py +0 -0
  250. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/setup_files/MANIFEST.in +0 -0
  251. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/setup_files/dependencies.py +0 -0
  252. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/setup_files/setup.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/sky_logging.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/LICENSE +0 -0
  255. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/__init__.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/attempt_skylet.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/autostop_lib.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/configs.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/constants.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/events.py +0 -0
  261. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/job_lib.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/log_lib.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/log_lib.pyi +0 -0
  264. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/providers/__init__.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/providers/command_runner.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/providers/ibm/__init__.py +0 -0
  267. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/providers/ibm/node_provider.py +0 -0
  268. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/providers/ibm/utils.py +0 -0
  269. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/providers/scp/__init__.py +0 -0
  271. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/providers/scp/config.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/providers/scp/node_provider.py +0 -0
  273. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/ray_patches/__init__.py +0 -0
  274. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  275. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/ray_patches/cli.py.patch +0 -0
  276. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  277. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  278. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  279. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/ray_patches/updater.py.patch +0 -0
  280. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/ray_patches/worker.py.patch +0 -0
  281. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/skylet.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skylet/subprocess_daemon.py +0 -0
  283. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/skypilot_config.py +0 -0
  284. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/task.py +0 -0
  285. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/aws-ray.yml.j2 +0 -0
  286. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/azure-ray.yml.j2 +0 -0
  287. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/cudo-ray.yml.j2 +0 -0
  288. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/do-ray.yml.j2 +0 -0
  289. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  290. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/gcp-ray.yml.j2 +0 -0
  291. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/ibm-ray.yml.j2 +0 -0
  292. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  293. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  294. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  295. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  296. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  297. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/lambda-ray.yml.j2 +0 -0
  298. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/local-ray.yml.j2 +0 -0
  299. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/nebius-ray.yml.j2 +0 -0
  300. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/oci-ray.yml.j2 +0 -0
  301. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/paperspace-ray.yml.j2 +0 -0
  302. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/runpod-ray.yml.j2 +0 -0
  303. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/scp-ray.yml.j2 +0 -0
  304. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  305. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
  306. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/vast-ray.yml.j2 +0 -0
  307. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/vsphere-ray.yml.j2 +0 -0
  308. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/templates/websocket_proxy.py +0 -0
  309. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/usage/__init__.py +0 -0
  310. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/usage/constants.py +0 -0
  311. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/usage/usage_lib.py +0 -0
  312. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/__init__.py +0 -0
  313. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/accelerator_registry.py +0 -0
  314. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/admin_policy_utils.py +0 -0
  315. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/annotations.py +0 -0
  316. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/cli_utils/__init__.py +0 -0
  317. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/cli_utils/status_utils.py +0 -0
  318. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/cluster_utils.py +0 -0
  319. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/command_runner.py +0 -0
  320. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/command_runner.pyi +0 -0
  321. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/common.py +0 -0
  322. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/common_utils.py +0 -0
  323. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/config_utils.py +0 -0
  324. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/control_master_utils.py +0 -0
  325. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/controller_utils.py +0 -0
  326. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/dag_utils.py +0 -0
  327. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/db_utils.py +0 -0
  328. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/env_options.py +0 -0
  329. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/kubernetes/__init__.py +0 -0
  330. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/kubernetes/create_cluster.sh +0 -0
  331. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  332. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/kubernetes/deploy_remote_cluster.sh +0 -0
  333. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/kubernetes/exec_kubeconfig_converter.py +0 -0
  334. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  335. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  336. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  337. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  338. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  339. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/kubernetes/kubernetes_deploy_utils.py +0 -0
  340. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  341. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  342. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/kubernetes_enums.py +0 -0
  343. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/log_utils.py +0 -0
  344. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/message_utils.py +0 -0
  345. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/registry.py +0 -0
  346. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/resources_utils.py +0 -0
  347. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/rich_utils.py +0 -0
  348. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/schemas.py +0 -0
  349. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/status_lib.py +0 -0
  350. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/subprocess_utils.py +0 -0
  351. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/timeline.py +0 -0
  352. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/ux_utils.py +0 -0
  353. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/sky/utils/validator.py +0 -0
  354. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/skypilot_nightly.egg-info/SOURCES.txt +0 -0
  355. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  356. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  357. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/skypilot_nightly.egg-info/requires.txt +0 -0
  358. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/skypilot_nightly.egg-info/top_level.txt +0 -0
  359. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/tests/test_api.py +0 -0
  360. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/tests/test_cli.py +0 -0
  361. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/tests/test_config.py +0 -0
  362. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/tests/test_global_user_state.py +0 -0
  363. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/tests/test_jobs.py +0 -0
  364. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/tests/test_jobs_and_serve.py +0 -0
  365. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/tests/test_list_accelerators.py +0 -0
  366. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/tests/test_optimizer_dryruns.py +0 -0
  367. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/tests/test_optimizer_random_dag.py +0 -0
  368. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/tests/test_serve_autoscaler.py +0 -0
  369. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/tests/test_smoke.py +0 -0
  370. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/tests/test_storage.py +0 -0
  371. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/tests/test_wheels.py +0 -0
  372. {skypilot_nightly-1.0.0.dev20250226 → skypilot_nightly-1.0.0.dev20250228}/tests/test_yaml_parser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250226
3
+ Version: 1.0.0.dev20250228
4
4
  Summary: SkyPilot: An intercloud broker for the clouds
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -169,7 +169,7 @@ Dynamic: summary
169
169
 
170
170
  <p align="center">
171
171
  <a href="https://docs.skypilot.co/">
172
- <img alt="Documentation" src="https://readthedocs.org/projects/skypilot/badge/?version=latest">
172
+ <img alt="Documentation" src="https://img.shields.io/badge/docs-gray?logo=readthedocs&logoColor=f5f5f5">
173
173
  </a>
174
174
 
175
175
  <a href="https://github.com/skypilot-org/skypilot/releases">
@@ -7,7 +7,7 @@
7
7
 
8
8
  <p align="center">
9
9
  <a href="https://docs.skypilot.co/">
10
- <img alt="Documentation" src="https://readthedocs.org/projects/skypilot/badge/?version=latest">
10
+ <img alt="Documentation" src="https://img.shields.io/badge/docs-gray?logo=readthedocs&logoColor=f5f5f5">
11
11
  </a>
12
12
 
13
13
  <a href="https://github.com/skypilot-org/skypilot/releases">
@@ -5,7 +5,7 @@ from typing import Optional
5
5
  import urllib.request
6
6
 
7
7
  # Replaced with the current commit when building the wheels.
8
- _SKYPILOT_COMMIT_SHA = '107180a5a0ec2ffd9bc6f619fc707c49103f3942'
8
+ _SKYPILOT_COMMIT_SHA = '0f178b2af47ec2b185bc685cce6965c675613cc7'
9
9
 
10
10
 
11
11
  def _get_git_commit():
@@ -35,7 +35,7 @@ def _get_git_commit():
35
35
 
36
36
 
37
37
  __commit__ = _get_git_commit()
38
- __version__ = '1.0.0.dev20250226'
38
+ __version__ = '1.0.0.dev20250228'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -6,7 +6,7 @@ from typing import Any, Callable, Optional, Set
6
6
  from sky.adaptors import common
7
7
  from sky.sky_logging import set_logging_level
8
8
  from sky.utils import annotations
9
- from sky.utils import env_options
9
+ from sky.utils import common_utils
10
10
  from sky.utils import ux_utils
11
11
 
12
12
  _IMPORT_ERROR_MESSAGE = ('Failed to import dependencies for Kubernetes. '
@@ -69,22 +69,20 @@ def _load_config(context: Optional[str] = None):
69
69
  try:
70
70
  kubernetes.config.load_kube_config(context=context)
71
71
  except kubernetes.config.config_exception.ConfigException as e:
72
- suffix = ''
73
- if env_options.Options.SHOW_DEBUG_INFO.get():
74
- suffix += f' Error: {str(e)}'
72
+ suffix = common_utils.format_exception(e, use_bracket=True)
75
73
  # Check if exception was due to no current-context
76
74
  if 'Expected key current-context' in str(e):
77
75
  err_str = (
78
76
  f'Failed to load Kubernetes configuration for {context!r}. '
79
77
  'Kubeconfig does not contain any valid context(s).'
80
- f'{suffix}\n'
78
+ f'\n{suffix}\n'
81
79
  ' If you were running a local Kubernetes '
82
80
  'cluster, run `sky local up` to start the cluster.')
83
81
  else:
84
82
  err_str = (
85
83
  f'Failed to load Kubernetes configuration for {context!r}. '
86
84
  'Please check if your kubeconfig file exists at '
87
- f'~/.kube/config and is valid.{suffix}')
85
+ f'~/.kube/config and is valid.\n{suffix}')
88
86
  err_str += '\nTo disable Kubernetes for SkyPilot: run `sky check`.'
89
87
  with ux_utils.print_exception_no_traceback():
90
88
  raise ValueError(err_str) from None
@@ -133,7 +133,11 @@ def _get_cluster_records_and_set_ssh_config(
133
133
  # Update the SSH config for all clusters
134
134
  for record in cluster_records:
135
135
  handle = record['handle']
136
- if handle is not None and handle.cached_external_ips is not None:
136
+ # During the failover, even though a cluster does not exist, the handle
137
+ # can still exist in the record, and we check for credentials to avoid
138
+ # updating the SSH config for non-existent clusters.
139
+ if (handle is not None and handle.cached_external_ips is not None and
140
+ 'credentials' in record):
137
141
  credentials = record['credentials']
138
142
  if isinstance(handle.launched_resources.cloud, clouds.Kubernetes):
139
143
  # Replace the proxy command to proxy through the SkyPilot API
@@ -169,9 +173,9 @@ def _get_cluster_records_and_set_ssh_config(
169
173
  handle.ssh_user,
170
174
  )
171
175
  else:
172
- # If the cluster is not UP or does not have IPs, we need to remove
173
- # the cluster from the SSH config.
174
- cluster_utils.SSHConfigHelper.remove_cluster(handle.cluster_name)
176
+ # If the cluster is not UP or does not have credentials available,
177
+ # we need to remove the cluster from the SSH config.
178
+ cluster_utils.SSHConfigHelper.remove_cluster(record['name'])
175
179
 
176
180
  # Clean up SSH configs for clusters that do not exist.
177
181
  #
@@ -1379,12 +1383,14 @@ def exec(cluster: Optional[str], cluster_option: Optional[str],
1379
1383
  def _handle_jobs_queue_request(
1380
1384
  request_id: str,
1381
1385
  show_all: bool,
1386
+ show_user: bool,
1382
1387
  limit_num_jobs_to_show: bool = False,
1383
1388
  is_called_by_user: bool = False) -> Tuple[Optional[int], str]:
1384
1389
  """Get the in-progress managed jobs.
1385
1390
 
1386
1391
  Args:
1387
1392
  show_all: Show all information of each job (e.g., region, price).
1393
+ show_user: Show the user who submitted the job.
1388
1394
  limit_num_jobs_to_show: If True, limit the number of jobs to show to
1389
1395
  _NUM_MANAGED_JOBS_TO_SHOW_IN_STATUS, which is mainly used by
1390
1396
  `sky status`.
@@ -1452,6 +1458,7 @@ def _handle_jobs_queue_request(
1452
1458
  if limit_num_jobs_to_show else None)
1453
1459
  msg = managed_jobs.format_job_table(managed_jobs_,
1454
1460
  show_all=show_all,
1461
+ show_user=show_user,
1455
1462
  max_jobs=max_jobs_to_show)
1456
1463
  return num_in_progress_jobs, msg
1457
1464
 
@@ -1561,7 +1568,9 @@ def _status_kubernetes(show_all: bool):
1561
1568
  click.echo(f'\n{colorama.Fore.CYAN}{colorama.Style.BRIGHT}'
1562
1569
  f'Managed jobs'
1563
1570
  f'{colorama.Style.RESET_ALL}')
1564
- msg = managed_jobs.format_job_table(all_jobs, show_all=show_all)
1571
+ msg = managed_jobs.format_job_table(all_jobs,
1572
+ show_all=show_all,
1573
+ show_user=False)
1565
1574
  click.echo(msg)
1566
1575
  if any(['sky-serve-controller' in c.cluster_name for c in all_clusters]):
1567
1576
  # TODO: Parse serve controllers and show services separately.
@@ -1779,7 +1788,8 @@ def status(verbose: bool, refresh: bool, ip: bool, endpoints: bool,
1779
1788
  show_managed_jobs = show_managed_jobs and not any([clusters, ip, endpoints])
1780
1789
  if show_managed_jobs:
1781
1790
  managed_jobs_queue_request_id = managed_jobs.queue(refresh=False,
1782
- skip_finished=True)
1791
+ skip_finished=True,
1792
+ all_users=all_users)
1783
1793
  show_endpoints = endpoints or endpoint is not None
1784
1794
  show_single_endpoint = endpoint is not None
1785
1795
  show_services = show_services and not any([clusters, ip, endpoints])
@@ -1859,6 +1869,7 @@ def status(verbose: bool, refresh: bool, ip: bool, endpoints: bool,
1859
1869
  num_in_progress_jobs, msg = _handle_jobs_queue_request(
1860
1870
  managed_jobs_queue_request_id,
1861
1871
  show_all=False,
1872
+ show_user=False,
1862
1873
  limit_num_jobs_to_show=not all,
1863
1874
  is_called_by_user=False)
1864
1875
  except KeyboardInterrupt:
@@ -2751,7 +2762,7 @@ def start(
2751
2762
  def down(
2752
2763
  clusters: List[str],
2753
2764
  all: bool, # pylint: disable=redefined-builtin
2754
- all_users: bool, # pylint: disable=redefined-builtin
2765
+ all_users: bool,
2755
2766
  yes: bool,
2756
2767
  purge: bool,
2757
2768
  async_call: bool,
@@ -2812,7 +2823,9 @@ def _hint_or_raise_for_down_jobs_controller(controller_name: str,
2812
2823
  with rich_utils.client_status(
2813
2824
  '[bold cyan]Checking for in-progress managed jobs[/]'):
2814
2825
  try:
2815
- request_id = managed_jobs.queue(refresh=False, skip_finished=True)
2826
+ request_id = managed_jobs.queue(refresh=False,
2827
+ skip_finished=True,
2828
+ all_users=True)
2816
2829
  managed_jobs_ = sdk.stream_and_get(request_id)
2817
2830
  except exceptions.ClusterNotUpError as e:
2818
2831
  if controller.value.connection_error_hint in str(e):
@@ -2836,7 +2849,9 @@ def _hint_or_raise_for_down_jobs_controller(controller_name: str,
2836
2849
  'jobs (output of `sky jobs queue`) will be lost.')
2837
2850
  click.echo(msg)
2838
2851
  if managed_jobs_:
2839
- job_table = managed_jobs.format_job_table(managed_jobs_, show_all=False)
2852
+ job_table = managed_jobs.format_job_table(managed_jobs_,
2853
+ show_all=False,
2854
+ show_user=True)
2840
2855
  msg = controller.value.decline_down_for_dirty_controller_hint
2841
2856
  # Add prefix to each line to align with the bullet point.
2842
2857
  msg += '\n'.join(
@@ -3905,9 +3920,16 @@ def jobs_launch(
3905
3920
  is_flag=True,
3906
3921
  required=False,
3907
3922
  help='Show only pending/running jobs\' information.')
3923
+ @click.option('--all-users',
3924
+ '-u',
3925
+ default=False,
3926
+ is_flag=True,
3927
+ required=False,
3928
+ help='Show jobs from all users.')
3908
3929
  @usage_lib.entrypoint
3909
3930
  # pylint: disable=redefined-builtin
3910
- def jobs_queue(verbose: bool, refresh: bool, skip_finished: bool):
3931
+ def jobs_queue(verbose: bool, refresh: bool, skip_finished: bool,
3932
+ all_users: bool):
3911
3933
  """Show statuses of managed jobs.
3912
3934
 
3913
3935
  Each managed jobs can have one of the following statuses:
@@ -3964,9 +3986,10 @@ def jobs_queue(verbose: bool, refresh: bool, skip_finished: bool):
3964
3986
  click.secho('Fetching managed job statuses...', fg='cyan')
3965
3987
  with rich_utils.client_status('[cyan]Checking managed jobs[/]'):
3966
3988
  managed_jobs_request_id = managed_jobs.queue(
3967
- refresh=refresh, skip_finished=skip_finished)
3989
+ refresh=refresh, skip_finished=skip_finished, all_users=all_users)
3968
3990
  _, msg = _handle_jobs_queue_request(managed_jobs_request_id,
3969
3991
  show_all=verbose,
3992
+ show_user=all_users,
3970
3993
  is_called_by_user=True)
3971
3994
  if not skip_finished:
3972
3995
  in_progress_only_hint = ''
@@ -3989,16 +4012,23 @@ def jobs_queue(verbose: bool, refresh: bool, skip_finished: bool):
3989
4012
  is_flag=True,
3990
4013
  default=False,
3991
4014
  required=False,
3992
- help='Cancel all managed jobs.')
4015
+ help='Cancel all managed jobs for the current user.')
3993
4016
  @click.option('--yes',
3994
4017
  '-y',
3995
4018
  is_flag=True,
3996
4019
  default=False,
3997
4020
  required=False,
3998
4021
  help='Skip confirmation prompt.')
4022
+ @click.option('--all-users',
4023
+ '-u',
4024
+ is_flag=True,
4025
+ default=False,
4026
+ required=False,
4027
+ help='Cancel all managed jobs from all users.')
3999
4028
  @usage_lib.entrypoint
4000
4029
  # pylint: disable=redefined-builtin
4001
- def jobs_cancel(name: Optional[str], job_ids: Tuple[int], all: bool, yes: bool):
4030
+ def jobs_cancel(name: Optional[str], job_ids: Tuple[int], all: bool, yes: bool,
4031
+ all_users: bool):
4002
4032
  """Cancel managed jobs.
4003
4033
 
4004
4034
  You can provide either a job name or a list of job IDs to be cancelled.
@@ -4015,25 +4045,33 @@ def jobs_cancel(name: Optional[str], job_ids: Tuple[int], all: bool, yes: bool):
4015
4045
  $ sky jobs cancel 1 2 3
4016
4046
  """
4017
4047
  job_id_str = ','.join(map(str, job_ids))
4018
- if sum([bool(job_ids), name is not None, all]) != 1:
4019
- argument_str = f'--job-ids {job_id_str}' if job_ids else ''
4020
- argument_str += f' --name {name}' if name is not None else ''
4021
- argument_str += ' --all' if all else ''
4048
+ if sum([bool(job_ids), name is not None, all or all_users]) != 1:
4049
+ arguments = []
4050
+ arguments += [f'--job-ids {job_id_str}'] if job_ids else []
4051
+ arguments += [f'--name {name}'] if name is not None else []
4052
+ arguments += ['--all'] if all else []
4053
+ arguments += ['--all-users'] if all_users else []
4022
4054
  raise click.UsageError(
4023
- 'Can only specify one of JOB_IDS or --name or --all. '
4024
- f'Provided {argument_str!r}.')
4055
+ 'Can only specify one of JOB_IDS, --name, or --all/--all-users. '
4056
+ f'Provided {" ".join(arguments)!r}.')
4025
4057
 
4026
4058
  if not yes:
4027
4059
  job_identity_str = (f'managed jobs with IDs {job_id_str}'
4028
4060
  if job_ids else repr(name))
4029
- if all:
4061
+ if all_users:
4062
+ job_identity_str = 'all managed jobs FOR ALL USERS'
4063
+ elif all:
4030
4064
  job_identity_str = 'all managed jobs'
4031
4065
  click.confirm(f'Cancelling {job_identity_str}. Proceed?',
4032
4066
  default=True,
4033
4067
  abort=True,
4034
4068
  show_default=True)
4035
4069
 
4036
- sdk.stream_and_get(managed_jobs.cancel(job_ids=job_ids, name=name, all=all))
4070
+ sdk.stream_and_get(
4071
+ managed_jobs.cancel(job_ids=job_ids,
4072
+ name=name,
4073
+ all=all,
4074
+ all_users=all_users))
4037
4075
 
4038
4076
 
4039
4077
  @jobs.command('logs', cls=_DocumentedCodeCommand)
@@ -133,7 +133,11 @@ def _get_cluster_records_and_set_ssh_config(
133
133
  # Update the SSH config for all clusters
134
134
  for record in cluster_records:
135
135
  handle = record['handle']
136
- if handle is not None and handle.cached_external_ips is not None:
136
+ # During the failover, even though a cluster does not exist, the handle
137
+ # can still exist in the record, and we check for credentials to avoid
138
+ # updating the SSH config for non-existent clusters.
139
+ if (handle is not None and handle.cached_external_ips is not None and
140
+ 'credentials' in record):
137
141
  credentials = record['credentials']
138
142
  if isinstance(handle.launched_resources.cloud, clouds.Kubernetes):
139
143
  # Replace the proxy command to proxy through the SkyPilot API
@@ -169,9 +173,9 @@ def _get_cluster_records_and_set_ssh_config(
169
173
  handle.ssh_user,
170
174
  )
171
175
  else:
172
- # If the cluster is not UP or does not have IPs, we need to remove
173
- # the cluster from the SSH config.
174
- cluster_utils.SSHConfigHelper.remove_cluster(handle.cluster_name)
176
+ # If the cluster is not UP or does not have credentials available,
177
+ # we need to remove the cluster from the SSH config.
178
+ cluster_utils.SSHConfigHelper.remove_cluster(record['name'])
175
179
 
176
180
  # Clean up SSH configs for clusters that do not exist.
177
181
  #
@@ -1379,12 +1383,14 @@ def exec(cluster: Optional[str], cluster_option: Optional[str],
1379
1383
  def _handle_jobs_queue_request(
1380
1384
  request_id: str,
1381
1385
  show_all: bool,
1386
+ show_user: bool,
1382
1387
  limit_num_jobs_to_show: bool = False,
1383
1388
  is_called_by_user: bool = False) -> Tuple[Optional[int], str]:
1384
1389
  """Get the in-progress managed jobs.
1385
1390
 
1386
1391
  Args:
1387
1392
  show_all: Show all information of each job (e.g., region, price).
1393
+ show_user: Show the user who submitted the job.
1388
1394
  limit_num_jobs_to_show: If True, limit the number of jobs to show to
1389
1395
  _NUM_MANAGED_JOBS_TO_SHOW_IN_STATUS, which is mainly used by
1390
1396
  `sky status`.
@@ -1452,6 +1458,7 @@ def _handle_jobs_queue_request(
1452
1458
  if limit_num_jobs_to_show else None)
1453
1459
  msg = managed_jobs.format_job_table(managed_jobs_,
1454
1460
  show_all=show_all,
1461
+ show_user=show_user,
1455
1462
  max_jobs=max_jobs_to_show)
1456
1463
  return num_in_progress_jobs, msg
1457
1464
 
@@ -1561,7 +1568,9 @@ def _status_kubernetes(show_all: bool):
1561
1568
  click.echo(f'\n{colorama.Fore.CYAN}{colorama.Style.BRIGHT}'
1562
1569
  f'Managed jobs'
1563
1570
  f'{colorama.Style.RESET_ALL}')
1564
- msg = managed_jobs.format_job_table(all_jobs, show_all=show_all)
1571
+ msg = managed_jobs.format_job_table(all_jobs,
1572
+ show_all=show_all,
1573
+ show_user=False)
1565
1574
  click.echo(msg)
1566
1575
  if any(['sky-serve-controller' in c.cluster_name for c in all_clusters]):
1567
1576
  # TODO: Parse serve controllers and show services separately.
@@ -1779,7 +1788,8 @@ def status(verbose: bool, refresh: bool, ip: bool, endpoints: bool,
1779
1788
  show_managed_jobs = show_managed_jobs and not any([clusters, ip, endpoints])
1780
1789
  if show_managed_jobs:
1781
1790
  managed_jobs_queue_request_id = managed_jobs.queue(refresh=False,
1782
- skip_finished=True)
1791
+ skip_finished=True,
1792
+ all_users=all_users)
1783
1793
  show_endpoints = endpoints or endpoint is not None
1784
1794
  show_single_endpoint = endpoint is not None
1785
1795
  show_services = show_services and not any([clusters, ip, endpoints])
@@ -1859,6 +1869,7 @@ def status(verbose: bool, refresh: bool, ip: bool, endpoints: bool,
1859
1869
  num_in_progress_jobs, msg = _handle_jobs_queue_request(
1860
1870
  managed_jobs_queue_request_id,
1861
1871
  show_all=False,
1872
+ show_user=False,
1862
1873
  limit_num_jobs_to_show=not all,
1863
1874
  is_called_by_user=False)
1864
1875
  except KeyboardInterrupt:
@@ -2751,7 +2762,7 @@ def start(
2751
2762
  def down(
2752
2763
  clusters: List[str],
2753
2764
  all: bool, # pylint: disable=redefined-builtin
2754
- all_users: bool, # pylint: disable=redefined-builtin
2765
+ all_users: bool,
2755
2766
  yes: bool,
2756
2767
  purge: bool,
2757
2768
  async_call: bool,
@@ -2812,7 +2823,9 @@ def _hint_or_raise_for_down_jobs_controller(controller_name: str,
2812
2823
  with rich_utils.client_status(
2813
2824
  '[bold cyan]Checking for in-progress managed jobs[/]'):
2814
2825
  try:
2815
- request_id = managed_jobs.queue(refresh=False, skip_finished=True)
2826
+ request_id = managed_jobs.queue(refresh=False,
2827
+ skip_finished=True,
2828
+ all_users=True)
2816
2829
  managed_jobs_ = sdk.stream_and_get(request_id)
2817
2830
  except exceptions.ClusterNotUpError as e:
2818
2831
  if controller.value.connection_error_hint in str(e):
@@ -2836,7 +2849,9 @@ def _hint_or_raise_for_down_jobs_controller(controller_name: str,
2836
2849
  'jobs (output of `sky jobs queue`) will be lost.')
2837
2850
  click.echo(msg)
2838
2851
  if managed_jobs_:
2839
- job_table = managed_jobs.format_job_table(managed_jobs_, show_all=False)
2852
+ job_table = managed_jobs.format_job_table(managed_jobs_,
2853
+ show_all=False,
2854
+ show_user=True)
2840
2855
  msg = controller.value.decline_down_for_dirty_controller_hint
2841
2856
  # Add prefix to each line to align with the bullet point.
2842
2857
  msg += '\n'.join(
@@ -3905,9 +3920,16 @@ def jobs_launch(
3905
3920
  is_flag=True,
3906
3921
  required=False,
3907
3922
  help='Show only pending/running jobs\' information.')
3923
+ @click.option('--all-users',
3924
+ '-u',
3925
+ default=False,
3926
+ is_flag=True,
3927
+ required=False,
3928
+ help='Show jobs from all users.')
3908
3929
  @usage_lib.entrypoint
3909
3930
  # pylint: disable=redefined-builtin
3910
- def jobs_queue(verbose: bool, refresh: bool, skip_finished: bool):
3931
+ def jobs_queue(verbose: bool, refresh: bool, skip_finished: bool,
3932
+ all_users: bool):
3911
3933
  """Show statuses of managed jobs.
3912
3934
 
3913
3935
  Each managed jobs can have one of the following statuses:
@@ -3964,9 +3986,10 @@ def jobs_queue(verbose: bool, refresh: bool, skip_finished: bool):
3964
3986
  click.secho('Fetching managed job statuses...', fg='cyan')
3965
3987
  with rich_utils.client_status('[cyan]Checking managed jobs[/]'):
3966
3988
  managed_jobs_request_id = managed_jobs.queue(
3967
- refresh=refresh, skip_finished=skip_finished)
3989
+ refresh=refresh, skip_finished=skip_finished, all_users=all_users)
3968
3990
  _, msg = _handle_jobs_queue_request(managed_jobs_request_id,
3969
3991
  show_all=verbose,
3992
+ show_user=all_users,
3970
3993
  is_called_by_user=True)
3971
3994
  if not skip_finished:
3972
3995
  in_progress_only_hint = ''
@@ -3989,16 +4012,23 @@ def jobs_queue(verbose: bool, refresh: bool, skip_finished: bool):
3989
4012
  is_flag=True,
3990
4013
  default=False,
3991
4014
  required=False,
3992
- help='Cancel all managed jobs.')
4015
+ help='Cancel all managed jobs for the current user.')
3993
4016
  @click.option('--yes',
3994
4017
  '-y',
3995
4018
  is_flag=True,
3996
4019
  default=False,
3997
4020
  required=False,
3998
4021
  help='Skip confirmation prompt.')
4022
+ @click.option('--all-users',
4023
+ '-u',
4024
+ is_flag=True,
4025
+ default=False,
4026
+ required=False,
4027
+ help='Cancel all managed jobs from all users.')
3999
4028
  @usage_lib.entrypoint
4000
4029
  # pylint: disable=redefined-builtin
4001
- def jobs_cancel(name: Optional[str], job_ids: Tuple[int], all: bool, yes: bool):
4030
+ def jobs_cancel(name: Optional[str], job_ids: Tuple[int], all: bool, yes: bool,
4031
+ all_users: bool):
4002
4032
  """Cancel managed jobs.
4003
4033
 
4004
4034
  You can provide either a job name or a list of job IDs to be cancelled.
@@ -4015,25 +4045,33 @@ def jobs_cancel(name: Optional[str], job_ids: Tuple[int], all: bool, yes: bool):
4015
4045
  $ sky jobs cancel 1 2 3
4016
4046
  """
4017
4047
  job_id_str = ','.join(map(str, job_ids))
4018
- if sum([bool(job_ids), name is not None, all]) != 1:
4019
- argument_str = f'--job-ids {job_id_str}' if job_ids else ''
4020
- argument_str += f' --name {name}' if name is not None else ''
4021
- argument_str += ' --all' if all else ''
4048
+ if sum([bool(job_ids), name is not None, all or all_users]) != 1:
4049
+ arguments = []
4050
+ arguments += [f'--job-ids {job_id_str}'] if job_ids else []
4051
+ arguments += [f'--name {name}'] if name is not None else []
4052
+ arguments += ['--all'] if all else []
4053
+ arguments += ['--all-users'] if all_users else []
4022
4054
  raise click.UsageError(
4023
- 'Can only specify one of JOB_IDS or --name or --all. '
4024
- f'Provided {argument_str!r}.')
4055
+ 'Can only specify one of JOB_IDS, --name, or --all/--all-users. '
4056
+ f'Provided {" ".join(arguments)!r}.')
4025
4057
 
4026
4058
  if not yes:
4027
4059
  job_identity_str = (f'managed jobs with IDs {job_id_str}'
4028
4060
  if job_ids else repr(name))
4029
- if all:
4061
+ if all_users:
4062
+ job_identity_str = 'all managed jobs FOR ALL USERS'
4063
+ elif all:
4030
4064
  job_identity_str = 'all managed jobs'
4031
4065
  click.confirm(f'Cancelling {job_identity_str}. Proceed?',
4032
4066
  default=True,
4033
4067
  abort=True,
4034
4068
  show_default=True)
4035
4069
 
4036
- sdk.stream_and_get(managed_jobs.cancel(job_ids=job_ids, name=name, all=all))
4070
+ sdk.stream_and_get(
4071
+ managed_jobs.cancel(job_ids=job_ids,
4072
+ name=name,
4073
+ all=all,
4074
+ all_users=all_users))
4037
4075
 
4038
4076
 
4039
4077
  @jobs.command('logs', cls=_DocumentedCodeCommand)
@@ -85,7 +85,8 @@ def launch(
85
85
  @usage_lib.entrypoint
86
86
  @server_common.check_server_healthy_or_start
87
87
  def queue(refresh: bool,
88
- skip_finished: bool = False) -> server_common.RequestId:
88
+ skip_finished: bool = False,
89
+ all_users: bool = False) -> server_common.RequestId:
89
90
  """Gets statuses of managed jobs.
90
91
 
91
92
  Please refer to sky.cli.job_queue for documentation.
@@ -93,6 +94,7 @@ def queue(refresh: bool,
93
94
  Args:
94
95
  refresh: Whether to restart the jobs controller if it is stopped.
95
96
  skip_finished: Whether to skip finished jobs.
97
+ all_users: Whether to show all users' jobs.
96
98
 
97
99
  Returns:
98
100
  The request ID of the queue request.
@@ -126,6 +128,7 @@ def queue(refresh: bool,
126
128
  body = payloads.JobsQueueBody(
127
129
  refresh=refresh,
128
130
  skip_finished=skip_finished,
131
+ all_users=all_users,
129
132
  )
130
133
  response = requests.post(
131
134
  f'{server_common.get_server_url()}/jobs/queue',
@@ -138,9 +141,10 @@ def queue(refresh: bool,
138
141
  @usage_lib.entrypoint
139
142
  @server_common.check_server_healthy_or_start
140
143
  def cancel(
141
- name: Optional[str] = None,
142
- job_ids: Optional[List[int]] = None,
143
- all: bool = False, # pylint: disable=redefined-builtin
144
+ name: Optional[str] = None,
145
+ job_ids: Optional[List[int]] = None,
146
+ all: bool = False, # pylint: disable=redefined-builtin
147
+ all_users: bool = False,
144
148
  ) -> server_common.RequestId:
145
149
  """Cancels managed jobs.
146
150
 
@@ -150,6 +154,7 @@ def cancel(
150
154
  name: Name of the managed job to cancel.
151
155
  job_ids: IDs of the managed jobs to cancel.
152
156
  all: Whether to cancel all managed jobs.
157
+ all_users: Whether to cancel all managed jobs from all users.
153
158
 
154
159
  Returns:
155
160
  The request ID of the cancel request.
@@ -162,6 +167,7 @@ def cancel(
162
167
  name=name,
163
168
  job_ids=job_ids,
164
169
  all=all,
170
+ all_users=all_users,
165
171
  )
166
172
  response = requests.post(
167
173
  f'{server_common.get_server_url()}/jobs/cancel',
@@ -40,7 +40,7 @@ JOBS_CLUSTER_NAME_PREFIX_LENGTH = 25
40
40
  # The version of the lib files that jobs/utils use. Whenever there is an API
41
41
  # change for the jobs/utils, we need to bump this version and update
42
42
  # job.utils.ManagedJobCodeGen to handle the version update.
43
- MANAGED_JOBS_VERSION = 1
43
+ MANAGED_JOBS_VERSION = 2
44
44
 
45
45
  # The command for setting up the jobs dashboard on the controller. It firstly
46
46
  # checks if the systemd services are available, and if not (e.g., Kubernetes
@@ -16,6 +16,7 @@ import flask
16
16
  import yaml
17
17
 
18
18
  from sky import jobs as managed_jobs
19
+ from sky.client import sdk
19
20
  from sky.jobs import constants as managed_job_constants
20
21
  from sky.utils import common_utils
21
22
  from sky.utils import controller_utils
@@ -134,7 +135,8 @@ def _extract_launch_history(log_content: str) -> str:
134
135
  def home():
135
136
  if not _is_running_on_jobs_controller():
136
137
  # Experimental: run on laptop (refresh is very slow).
137
- all_managed_jobs = managed_jobs.queue(refresh=True, skip_finished=False)
138
+ request_id = managed_jobs.queue(refresh=True, skip_finished=False)
139
+ all_managed_jobs = sdk.get(request_id)
138
140
  else:
139
141
  job_table = managed_jobs.dump_managed_job_queue()
140
142
  all_managed_jobs = managed_jobs.load_managed_job_queue(job_table)
@@ -142,6 +144,7 @@ def home():
142
144
  timestamp = datetime.datetime.now(datetime.timezone.utc)
143
145
  rows = managed_jobs.format_job_table(all_managed_jobs,
144
146
  show_all=True,
147
+ show_user=False,
145
148
  return_rows=True)
146
149
 
147
150
  status_counts = collections.defaultdict(int)
@@ -49,6 +49,7 @@ from sky import sky_logging
49
49
  from sky.jobs import constants as managed_job_constants
50
50
  from sky.jobs import state
51
51
  from sky.skylet import constants
52
+ from sky.utils import common_utils
52
53
  from sky.utils import subprocess_utils
53
54
 
54
55
  logger = sky_logging.init_logger('sky.jobs.controller')
@@ -151,12 +152,20 @@ def maybe_schedule_next_jobs() -> None:
151
152
  job_id = maybe_next_job['job_id']
152
153
  dag_yaml_path = maybe_next_job['dag_yaml_path']
153
154
 
155
+ activate_python_env_cmd = (
156
+ f'{constants.ACTIVATE_SKY_REMOTE_PYTHON_ENV};')
157
+ env_file = maybe_next_job['env_file_path']
158
+ source_environment_cmd = (f'source {env_file};'
159
+ if env_file else '')
160
+ run_controller_cmd = ('python -u -m sky.jobs.controller '
161
+ f'{dag_yaml_path} --job-id {job_id};')
162
+
154
163
  # If the command line here is changed, please also update
155
164
  # utils._controller_process_alive. `--job-id X` should be at
156
165
  # the end.
157
- run_cmd = (f'{constants.ACTIVATE_SKY_REMOTE_PYTHON_ENV};'
158
- 'python -u -m sky.jobs.controller '
159
- f'{dag_yaml_path} --job-id {job_id}')
166
+ run_cmd = (f'{activate_python_env_cmd}'
167
+ f'{source_environment_cmd}'
168
+ f'{run_controller_cmd}')
160
169
 
161
170
  logs_dir = os.path.expanduser(
162
171
  managed_job_constants.JOBS_CONTROLLER_LOGS_DIR)
@@ -175,16 +184,19 @@ def maybe_schedule_next_jobs() -> None:
175
184
  pass
176
185
 
177
186
 
178
- def submit_job(job_id: int, dag_yaml_path: str) -> None:
187
+ def submit_job(job_id: int, dag_yaml_path: str, env_file_path: str) -> None:
179
188
  """Submit an existing job to the scheduler.
180
189
 
181
190
  This should be called after a job is created in the `spot` table as
182
191
  PENDING. It will tell the scheduler to try and start the job controller, if
183
192
  there are resources available. It may block to acquire the lock, so it
184
193
  should not be on the critical path for `sky jobs launch -d`.
194
+
195
+ The user hash should be set (e.g. via SKYPILOT_USER_ID) before calling this.
185
196
  """
186
197
  with filelock.FileLock(_get_lock_path()):
187
- state.scheduler_set_waiting(job_id, dag_yaml_path)
198
+ state.scheduler_set_waiting(job_id, dag_yaml_path, env_file_path,
199
+ common_utils.get_user_hash())
188
200
  maybe_schedule_next_jobs()
189
201
 
190
202
 
@@ -281,12 +293,15 @@ def _can_lauch_in_alive_job() -> bool:
281
293
 
282
294
  if __name__ == '__main__':
283
295
  parser = ArgumentParser()
296
+ parser.add_argument('dag_yaml',
297
+ type=str,
298
+ help='The path to the user job yaml file.')
284
299
  parser.add_argument('--job-id',
285
300
  required=True,
286
301
  type=int,
287
302
  help='Job id for the controller job.')
288
- parser.add_argument('dag_yaml',
303
+ parser.add_argument('--env-file',
289
304
  type=str,
290
- help='The path to the user job yaml file.')
305
+ help='The path to the controller env file.')
291
306
  args = parser.parse_args()
292
- submit_job(args.job_id, args.dag_yaml)
307
+ submit_job(args.job_id, args.dag_yaml, args.env_file)