skypilot-nightly 1.0.0.dev20250227__tar.gz → 1.0.0.dev20250301__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.dev20250227/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250301}/PKG-INFO +1 -3
  2. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/__init__.py +2 -2
  3. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/backends/backend_utils.py +9 -4
  4. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/cli.py +27 -8
  5. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/client/cli.py +27 -8
  6. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/client/sdk.py +15 -5
  7. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/cloud_stores.py +5 -6
  8. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/gcp.py +14 -2
  9. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/core.py +7 -3
  10. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/data/mounting_utils.py +46 -19
  11. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/exceptions.py +2 -0
  12. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/common.py +62 -57
  13. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/executor.py +7 -6
  14. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/payloads.py +1 -0
  15. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/serializers/decoders.py +7 -4
  16. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/server.py +8 -7
  17. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/setup_files/dependencies.py +1 -1
  18. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/constants.py +4 -2
  19. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/controller_utils.py +9 -5
  20. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/deploy_remote_cluster.sh +65 -23
  21. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/kubernetes_deploy_utils.py +8 -7
  22. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301/skypilot_nightly.egg-info}/PKG-INFO +1 -3
  23. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/skypilot_nightly.egg-info/requires.txt +0 -1
  24. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/LICENSE +0 -0
  25. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/MANIFEST.in +0 -0
  26. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/README.md +0 -0
  27. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/pyproject.toml +0 -0
  28. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/setup.cfg +0 -0
  29. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/setup.py +0 -0
  30. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/__init__.py +0 -0
  31. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/aws.py +0 -0
  32. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/azure.py +0 -0
  33. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/cloudflare.py +0 -0
  34. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/common.py +0 -0
  35. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/cudo.py +0 -0
  36. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/do.py +0 -0
  37. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/docker.py +0 -0
  38. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/gcp.py +0 -0
  39. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/ibm.py +0 -0
  40. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/kubernetes.py +0 -0
  41. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/nebius.py +0 -0
  42. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/oci.py +0 -0
  43. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/runpod.py +0 -0
  44. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/vast.py +0 -0
  45. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/vsphere.py +0 -0
  46. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/admin_policy.py +0 -0
  47. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/authentication.py +0 -0
  48. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/backends/__init__.py +0 -0
  49. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/backends/backend.py +0 -0
  50. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/backends/cloud_vm_ray_backend.py +0 -0
  51. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/backends/docker_utils.py +0 -0
  52. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/backends/local_docker_backend.py +0 -0
  53. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  54. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/backends/wheel_utils.py +0 -0
  55. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/benchmark/__init__.py +0 -0
  56. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/benchmark/benchmark_state.py +0 -0
  57. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/benchmark/benchmark_utils.py +0 -0
  58. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/check.py +0 -0
  59. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/client/__init__.py +0 -0
  60. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/client/common.py +0 -0
  61. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/__init__.py +0 -0
  62. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/aws.py +0 -0
  63. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/azure.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/cloud.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/cudo.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/do.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/fluidstack.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/ibm.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/kubernetes.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/lambda_cloud.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/nebius.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/oci.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/paperspace.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/runpod.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/scp.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/__init__.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/aws_catalog.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/azure_catalog.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/common.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/config.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/constants.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/fetch_vast.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/do_catalog.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/kubernetes_catalog.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/nebius_catalog.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/oci_catalog.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/scp_catalog.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/vast_catalog.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/utils/__init__.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/utils/aws_utils.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/utils/azure_utils.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/utils/gcp_utils.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/utils/oci_utils.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/utils/scp_utils.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/vast.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/vsphere.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/dag.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/data/__init__.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/data/data_transfer.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/data/data_utils.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/data/storage.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/data/storage_utils.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/execution.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/global_user_state.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/__init__.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/client/__init__.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/client/sdk.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/constants.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/controller.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/dashboard/dashboard.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/dashboard/static/favicon.ico +0 -0
  128. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/dashboard/templates/index.html +0 -0
  129. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/recovery_strategy.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/scheduler.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/server/__init__.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/server/core.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/server/dashboard_utils.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/server/server.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/state.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/utils.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/models.py +0 -0
  138. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/optimizer.py +0 -0
  139. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/__init__.py +0 -0
  140. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/aws/__init__.py +0 -0
  141. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/aws/config.py +0 -0
  142. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/aws/instance.py +0 -0
  143. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/aws/utils.py +0 -0
  144. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/azure/__init__.py +0 -0
  145. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/azure/azure-config-template.json +0 -0
  146. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/azure/config.py +0 -0
  147. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/azure/instance.py +0 -0
  148. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/common.py +0 -0
  149. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/constants.py +0 -0
  150. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/cudo/__init__.py +0 -0
  151. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/cudo/config.py +0 -0
  152. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/cudo/cudo_machine_type.py +0 -0
  153. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/cudo/cudo_utils.py +0 -0
  154. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/cudo/cudo_wrapper.py +0 -0
  155. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/cudo/instance.py +0 -0
  156. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/do/__init__.py +0 -0
  157. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/do/config.py +0 -0
  158. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/do/constants.py +0 -0
  159. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/do/instance.py +0 -0
  160. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/do/utils.py +0 -0
  161. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/docker_utils.py +0 -0
  162. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/fluidstack/__init__.py +0 -0
  163. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/fluidstack/config.py +0 -0
  164. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  165. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/fluidstack/instance.py +0 -0
  166. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/gcp/__init__.py +0 -0
  167. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/gcp/config.py +0 -0
  168. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/gcp/constants.py +0 -0
  169. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/gcp/instance.py +0 -0
  170. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/gcp/instance_utils.py +0 -0
  171. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/gcp/mig_utils.py +0 -0
  172. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/instance_setup.py +0 -0
  173. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/__init__.py +0 -0
  174. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/config.py +0 -0
  175. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/constants.py +0 -0
  176. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/instance.py +0 -0
  177. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
  178. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
  179. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/network.py +0 -0
  180. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/network_utils.py +0 -0
  181. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/utils.py +0 -0
  182. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/lambda_cloud/__init__.py +0 -0
  183. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/lambda_cloud/config.py +0 -0
  184. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/lambda_cloud/instance.py +0 -0
  185. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  186. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/logging.py +0 -0
  187. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/metadata_utils.py +0 -0
  188. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/nebius/__init__.py +0 -0
  189. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/nebius/config.py +0 -0
  190. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/nebius/instance.py +0 -0
  191. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/nebius/utils.py +0 -0
  192. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/oci/__init__.py +0 -0
  193. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/oci/config.py +0 -0
  194. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/oci/instance.py +0 -0
  195. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/oci/query_utils.py +0 -0
  196. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/paperspace/__init__.py +0 -0
  197. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/paperspace/config.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/paperspace/constants.py +0 -0
  199. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/paperspace/instance.py +0 -0
  200. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/paperspace/utils.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/provisioner.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/runpod/__init__.py +0 -0
  203. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/runpod/api/__init__.py +0 -0
  204. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/runpod/api/commands.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/runpod/api/pods.py +0 -0
  206. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/runpod/config.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/runpod/instance.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/runpod/utils.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vast/__init__.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vast/config.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vast/instance.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vast/utils.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/__init__.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/__init__.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/custom_script.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/id_generator.py +0 -0
  219. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  220. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/service_manager.py +0 -0
  221. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  222. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  223. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  224. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/vim_utils.py +0 -0
  225. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/config.py +0 -0
  226. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/instance.py +0 -0
  227. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/vsphere_utils.py +0 -0
  228. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/resources.py +0 -0
  229. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/__init__.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/autoscalers.py +0 -0
  231. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/client/__init__.py +0 -0
  232. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/client/sdk.py +0 -0
  233. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/constants.py +0 -0
  234. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/controller.py +0 -0
  235. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/load_balancer.py +0 -0
  236. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/load_balancing_policies.py +0 -0
  237. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/replica_managers.py +0 -0
  238. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/serve_state.py +0 -0
  239. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/serve_utils.py +0 -0
  240. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/server/__init__.py +0 -0
  241. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/server/core.py +0 -0
  242. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/server/server.py +0 -0
  243. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/service.py +0 -0
  244. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/service_spec.py +0 -0
  245. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/__init__.py +0 -0
  246. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/constants.py +0 -0
  247. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/html/log.html +0 -0
  248. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/__init__.py +0 -0
  249. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/queues/__init__.py +0 -0
  250. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/queues/mp_queue.py +0 -0
  251. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/requests.py +0 -0
  252. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/serializers/__init__.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/serializers/encoders.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/stream_utils.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/setup_files/MANIFEST.in +0 -0
  256. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/setup_files/setup.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/sky_logging.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/LICENSE +0 -0
  259. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/__init__.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/attempt_skylet.py +0 -0
  261. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/autostop_lib.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/configs.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/events.py +0 -0
  264. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/job_lib.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/log_lib.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/log_lib.pyi +0 -0
  267. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/__init__.py +0 -0
  268. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/command_runner.py +0 -0
  269. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/ibm/__init__.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/ibm/node_provider.py +0 -0
  271. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/ibm/utils.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  273. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/scp/__init__.py +0 -0
  274. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/scp/config.py +0 -0
  275. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/scp/node_provider.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/ray_patches/__init__.py +0 -0
  277. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  278. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/ray_patches/cli.py.patch +0 -0
  279. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  280. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  281. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  282. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/ray_patches/updater.py.patch +0 -0
  283. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/ray_patches/worker.py.patch +0 -0
  284. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/skylet.py +0 -0
  285. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/subprocess_daemon.py +0 -0
  286. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skypilot_config.py +0 -0
  287. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/task.py +0 -0
  288. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/aws-ray.yml.j2 +0 -0
  289. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/azure-ray.yml.j2 +0 -0
  290. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/cudo-ray.yml.j2 +0 -0
  291. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/do-ray.yml.j2 +0 -0
  292. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  293. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/gcp-ray.yml.j2 +0 -0
  294. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/ibm-ray.yml.j2 +0 -0
  295. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/jobs-controller.yaml.j2 +0 -0
  296. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  297. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  298. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  299. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  300. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  301. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/lambda-ray.yml.j2 +0 -0
  302. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/local-ray.yml.j2 +0 -0
  303. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/nebius-ray.yml.j2 +0 -0
  304. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/oci-ray.yml.j2 +0 -0
  305. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/paperspace-ray.yml.j2 +0 -0
  306. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/runpod-ray.yml.j2 +0 -0
  307. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/scp-ray.yml.j2 +0 -0
  308. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  309. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
  310. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/vast-ray.yml.j2 +0 -0
  311. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/vsphere-ray.yml.j2 +0 -0
  312. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/websocket_proxy.py +0 -0
  313. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/usage/__init__.py +0 -0
  314. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/usage/constants.py +0 -0
  315. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/usage/usage_lib.py +0 -0
  316. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/__init__.py +0 -0
  317. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/accelerator_registry.py +0 -0
  318. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/admin_policy_utils.py +0 -0
  319. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/annotations.py +0 -0
  320. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/cli_utils/__init__.py +0 -0
  321. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/cli_utils/status_utils.py +0 -0
  322. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/cluster_utils.py +0 -0
  323. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/command_runner.py +0 -0
  324. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/command_runner.pyi +0 -0
  325. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/common.py +0 -0
  326. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/common_utils.py +0 -0
  327. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/config_utils.py +0 -0
  328. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/control_master_utils.py +0 -0
  329. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/dag_utils.py +0 -0
  330. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/db_utils.py +0 -0
  331. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/env_options.py +0 -0
  332. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/__init__.py +0 -0
  333. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/create_cluster.sh +0 -0
  334. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  335. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/exec_kubeconfig_converter.py +0 -0
  336. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  337. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  338. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  339. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  340. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  341. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  342. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  343. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes_enums.py +0 -0
  344. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/log_utils.py +0 -0
  345. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/message_utils.py +0 -0
  346. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/registry.py +0 -0
  347. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/resources_utils.py +0 -0
  348. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/rich_utils.py +0 -0
  349. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/schemas.py +0 -0
  350. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/status_lib.py +0 -0
  351. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/subprocess_utils.py +0 -0
  352. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/timeline.py +0 -0
  353. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/ux_utils.py +0 -0
  354. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/validator.py +0 -0
  355. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/skypilot_nightly.egg-info/SOURCES.txt +0 -0
  356. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  357. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  358. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/skypilot_nightly.egg-info/top_level.txt +0 -0
  359. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_api.py +0 -0
  360. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_cli.py +0 -0
  361. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_config.py +0 -0
  362. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_global_user_state.py +0 -0
  363. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_jobs.py +0 -0
  364. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_jobs_and_serve.py +0 -0
  365. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_list_accelerators.py +0 -0
  366. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_optimizer_dryruns.py +0 -0
  367. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_optimizer_random_dag.py +0 -0
  368. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_serve_autoscaler.py +0 -0
  369. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_smoke.py +0 -0
  370. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_storage.py +0 -0
  371. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_wheels.py +0 -0
  372. {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/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.dev20250227
3
+ Version: 1.0.0.dev20250301
4
4
  Summary: SkyPilot: An intercloud broker for the clouds
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -75,7 +75,6 @@ Provides-Extra: docker
75
75
  Requires-Dist: docker; extra == "docker"
76
76
  Requires-Dist: ray[default]!=2.6.0,>=2.2.0; extra == "docker"
77
77
  Provides-Extra: lambda
78
- Requires-Dist: ray[default]!=2.6.0,>=2.2.0; extra == "lambda"
79
78
  Provides-Extra: cloudflare
80
79
  Requires-Dist: urllib3<2; extra == "cloudflare"
81
80
  Requires-Dist: awscli>=1.27.10; extra == "cloudflare"
@@ -132,7 +131,6 @@ Requires-Dist: ibm-cos-sdk; extra == "all"
132
131
  Requires-Dist: ray[default]!=2.6.0,>=2.2.0; extra == "all"
133
132
  Requires-Dist: docker; extra == "all"
134
133
  Requires-Dist: ray[default]!=2.6.0,>=2.2.0; extra == "all"
135
- Requires-Dist: ray[default]!=2.6.0,>=2.2.0; extra == "all"
136
134
  Requires-Dist: urllib3<2; extra == "all"
137
135
  Requires-Dist: awscli>=1.27.10; extra == "all"
138
136
  Requires-Dist: botocore>=1.29.10; extra == "all"
@@ -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 = '2c4849b6f73499740f495f84a29ac4af98d25073'
8
+ _SKYPILOT_COMMIT_SHA = 'cefc23846d47d7dacf960093c2001912a83c1162'
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.dev20250227'
38
+ __version__ = '1.0.0.dev20250301'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -1280,12 +1280,17 @@ def parallel_data_transfer_to_nodes(
1280
1280
  stream_logs=stream_logs,
1281
1281
  require_outputs=True,
1282
1282
  source_bashrc=source_bashrc)
1283
- err_msg = ('Failed to run command before rsync '
1283
+ err_msg = (f'{colorama.Style.RESET_ALL}{colorama.Style.DIM}'
1284
+ f'----- CMD -----\n'
1285
+ f'{cmd}\n'
1286
+ f'----- CMD END -----\n'
1287
+ f'{colorama.Style.RESET_ALL}'
1288
+ f'{colorama.Fore.RED}'
1289
+ f'Failed to run command before rsync '
1284
1290
  f'{origin_source} -> {target}. '
1285
- 'Ensure that the network is stable, then retry. '
1286
- f'{cmd}')
1291
+ f'{colorama.Style.RESET_ALL}')
1287
1292
  if log_path != os.devnull:
1288
- err_msg += f' See logs in {log_path}'
1293
+ err_msg += ux_utils.log_path_hint(log_path)
1289
1294
  subprocess_utils.handle_returncode(rc,
1290
1295
  cmd,
1291
1296
  err_msg,
@@ -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
  #
@@ -5415,11 +5419,16 @@ def local():
5415
5419
  @click.option('--cleanup',
5416
5420
  is_flag=True,
5417
5421
  help='Clean up the remote cluster instead of deploying it.')
5422
+ @click.option(
5423
+ '--context-name',
5424
+ type=str,
5425
+ required=False,
5426
+ help='Name to use for the kubeconfig context. Defaults to "default".')
5418
5427
  @local.command('up', cls=_DocumentedCodeCommand)
5419
5428
  @_add_click_options(_COMMON_OPTIONS)
5420
5429
  @usage_lib.entrypoint
5421
5430
  def local_up(gpus: bool, ips: str, ssh_user: str, ssh_key_path: str,
5422
- cleanup: bool, async_call: bool):
5431
+ cleanup: bool, context_name: Optional[str], async_call: bool):
5423
5432
  """Creates a local or remote cluster."""
5424
5433
 
5425
5434
  def _validate_args(ips, ssh_user, ssh_key_path, cleanup):
@@ -5464,7 +5473,8 @@ def local_up(gpus: bool, ips: str, ssh_user: str, ssh_key_path: str,
5464
5473
  raise click.BadParameter(
5465
5474
  f'Failed to read SSH key file {ssh_key_path}: {str(e)}')
5466
5475
 
5467
- request_id = sdk.local_up(gpus, ip_list, ssh_user, ssh_key, cleanup)
5476
+ request_id = sdk.local_up(gpus, ip_list, ssh_user, ssh_key, cleanup,
5477
+ context_name)
5468
5478
  _async_call_or_wait(request_id, async_call, request_name='local up')
5469
5479
 
5470
5480
 
@@ -5500,10 +5510,19 @@ def api():
5500
5510
  required=False,
5501
5511
  help=('The host to deploy the SkyPilot API server. To allow '
5502
5512
  'remote access, set this to 0.0.0.0'))
5513
+ @click.option('--foreground',
5514
+ is_flag=True,
5515
+ default=False,
5516
+ required=False,
5517
+ help='Run the SkyPilot API server in the foreground and output '
5518
+ 'its logs to stdout/stderr. Allowing external systems '
5519
+ 'to manage the process lifecycle and collect logs directly. '
5520
+ 'This is useful when the API server is managed by systems '
5521
+ 'like systemd and Kubernetes.')
5503
5522
  @usage_lib.entrypoint
5504
- def api_start(deploy: bool, host: Optional[str]):
5523
+ def api_start(deploy: bool, host: Optional[str], foreground: bool):
5505
5524
  """Starts the SkyPilot API server locally."""
5506
- sdk.api_start(deploy=deploy, host=host)
5525
+ sdk.api_start(deploy=deploy, host=host, foreground=foreground)
5507
5526
 
5508
5527
 
5509
5528
  @api.command('stop', 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
  #
@@ -5415,11 +5419,16 @@ def local():
5415
5419
  @click.option('--cleanup',
5416
5420
  is_flag=True,
5417
5421
  help='Clean up the remote cluster instead of deploying it.')
5422
+ @click.option(
5423
+ '--context-name',
5424
+ type=str,
5425
+ required=False,
5426
+ help='Name to use for the kubeconfig context. Defaults to "default".')
5418
5427
  @local.command('up', cls=_DocumentedCodeCommand)
5419
5428
  @_add_click_options(_COMMON_OPTIONS)
5420
5429
  @usage_lib.entrypoint
5421
5430
  def local_up(gpus: bool, ips: str, ssh_user: str, ssh_key_path: str,
5422
- cleanup: bool, async_call: bool):
5431
+ cleanup: bool, context_name: Optional[str], async_call: bool):
5423
5432
  """Creates a local or remote cluster."""
5424
5433
 
5425
5434
  def _validate_args(ips, ssh_user, ssh_key_path, cleanup):
@@ -5464,7 +5473,8 @@ def local_up(gpus: bool, ips: str, ssh_user: str, ssh_key_path: str,
5464
5473
  raise click.BadParameter(
5465
5474
  f'Failed to read SSH key file {ssh_key_path}: {str(e)}')
5466
5475
 
5467
- request_id = sdk.local_up(gpus, ip_list, ssh_user, ssh_key, cleanup)
5476
+ request_id = sdk.local_up(gpus, ip_list, ssh_user, ssh_key, cleanup,
5477
+ context_name)
5468
5478
  _async_call_or_wait(request_id, async_call, request_name='local up')
5469
5479
 
5470
5480
 
@@ -5500,10 +5510,19 @@ def api():
5500
5510
  required=False,
5501
5511
  help=('The host to deploy the SkyPilot API server. To allow '
5502
5512
  'remote access, set this to 0.0.0.0'))
5513
+ @click.option('--foreground',
5514
+ is_flag=True,
5515
+ default=False,
5516
+ required=False,
5517
+ help='Run the SkyPilot API server in the foreground and output '
5518
+ 'its logs to stdout/stderr. Allowing external systems '
5519
+ 'to manage the process lifecycle and collect logs directly. '
5520
+ 'This is useful when the API server is managed by systems '
5521
+ 'like systemd and Kubernetes.')
5503
5522
  @usage_lib.entrypoint
5504
- def api_start(deploy: bool, host: Optional[str]):
5523
+ def api_start(deploy: bool, host: Optional[str], foreground: bool):
5505
5524
  """Starts the SkyPilot API server locally."""
5506
- sdk.api_start(deploy=deploy, host=host)
5525
+ sdk.api_start(deploy=deploy, host=host, foreground=foreground)
5507
5526
 
5508
5527
 
5509
5528
  @api.command('stop', cls=_DocumentedCodeCommand)
@@ -1263,8 +1263,12 @@ def storage_delete(name: str) -> server_common.RequestId:
1263
1263
  @usage_lib.entrypoint
1264
1264
  @server_common.check_server_healthy_or_start
1265
1265
  @annotations.client_api
1266
- def local_up(gpus: bool, ips: Optional[List[str]], ssh_user: Optional[str],
1267
- ssh_key: Optional[str], cleanup: bool) -> server_common.RequestId:
1266
+ def local_up(gpus: bool,
1267
+ ips: Optional[List[str]],
1268
+ ssh_user: Optional[str],
1269
+ ssh_key: Optional[str],
1270
+ cleanup: bool,
1271
+ context_name: Optional[str] = None) -> server_common.RequestId:
1268
1272
  """Launches a Kubernetes cluster on local machines.
1269
1273
 
1270
1274
  Returns:
@@ -1282,7 +1286,8 @@ def local_up(gpus: bool, ips: Optional[List[str]], ssh_user: Optional[str],
1282
1286
  ips=ips,
1283
1287
  ssh_user=ssh_user,
1284
1288
  ssh_key=ssh_key,
1285
- cleanup=cleanup)
1289
+ cleanup=cleanup,
1290
+ context_name=context_name)
1286
1291
  response = requests.post(f'{server_common.get_server_url()}/local_up',
1287
1292
  json=json.loads(body.model_dump_json()))
1288
1293
  return server_common.get_request_id(response)
@@ -1611,6 +1616,7 @@ def api_start(
1611
1616
  *,
1612
1617
  deploy: bool = False,
1613
1618
  host: str = '127.0.0.1',
1619
+ foreground: bool = False,
1614
1620
  ) -> None:
1615
1621
  """Starts the API server.
1616
1622
 
@@ -1622,7 +1628,8 @@ def api_start(
1622
1628
  resources of the machine.
1623
1629
  host: The host to deploy the API server. It will be set to 0.0.0.0
1624
1630
  if deploy is True, to allow remote access.
1625
-
1631
+ foreground: Whether to run the API server in the foreground (run in
1632
+ the current process).
1626
1633
  Returns:
1627
1634
  None
1628
1635
  """
@@ -1641,7 +1648,10 @@ def api_start(
1641
1648
  'from the config file and/or unset the '
1642
1649
  'SKYPILOT_API_SERVER_ENDPOINT environment '
1643
1650
  'variable.')
1644
- server_common.check_server_healthy_or_start_fn(deploy, host)
1651
+ server_common.check_server_healthy_or_start_fn(deploy, host, foreground)
1652
+ if foreground:
1653
+ # Explain why current process exited
1654
+ logger.info('API server is already running:')
1645
1655
  logger.info(f'{ux_utils.INDENT_SYMBOL}SkyPilot API server: '
1646
1656
  f'{server_common.get_server_url(host)}\n'
1647
1657
  f'{ux_utils.INDENT_LAST_SYMBOL}'
@@ -54,8 +54,9 @@ class S3CloudStorage(CloudStorage):
54
54
 
55
55
  # List of commands to install AWS CLI
56
56
  _GET_AWSCLI = [
57
- 'aws --version >/dev/null 2>&1 || '
58
- f'{constants.SKY_UV_PIP_CMD} install awscli',
57
+ 'awscli_path=$(which aws) || '
58
+ f'{{ {constants.SKY_UV_PIP_CMD} install awscli && '
59
+ f'awscli_path={constants.SKY_REMOTE_PYTHON_ENV}/bin/aws; }}',
59
60
  ]
60
61
 
61
62
  def is_directory(self, url: str) -> bool:
@@ -85,8 +86,7 @@ class S3CloudStorage(CloudStorage):
85
86
  # AWS Sync by default uses 10 threads to upload files to the bucket.
86
87
  # To increase parallelism, modify max_concurrent_requests in your
87
88
  # aws config file (Default path: ~/.aws/config).
88
- download_via_awscli = (f'{constants.SKY_REMOTE_PYTHON_ENV}/bin/aws s3 '
89
- 'sync --no-follow-symlinks '
89
+ download_via_awscli = (f'$awscli_path s3 sync --no-follow-symlinks '
90
90
  f'{source} {destination}')
91
91
 
92
92
  all_commands = list(self._GET_AWSCLI)
@@ -95,8 +95,7 @@ class S3CloudStorage(CloudStorage):
95
95
 
96
96
  def make_sync_file_command(self, source: str, destination: str) -> str:
97
97
  """Downloads a file using AWS CLI."""
98
- download_via_awscli = (f'{constants.SKY_REMOTE_PYTHON_ENV}/bin/aws s3 '
99
- f'cp {source} {destination}')
98
+ download_via_awscli = (f'$awscli_path s3 cp {source} {destination}')
100
99
 
101
100
  all_commands = list(self._GET_AWSCLI)
102
101
  all_commands.append(download_via_awscli)
@@ -67,8 +67,20 @@ _GCLOUD_VERSION = '424.0.0'
67
67
  GOOGLE_SDK_INSTALLATION_COMMAND: str = f'pushd /tmp &>/dev/null && \
68
68
  {{ gcloud --help > /dev/null 2>&1 || \
69
69
  {{ mkdir -p {os.path.dirname(_GCLOUD_INSTALLATION_LOG)} && \
70
- wget --quiet https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-{_GCLOUD_VERSION}-linux-x86_64.tar.gz > {_GCLOUD_INSTALLATION_LOG} && \
71
- tar xzf google-cloud-sdk-{_GCLOUD_VERSION}-linux-x86_64.tar.gz >> {_GCLOUD_INSTALLATION_LOG} && \
70
+ ARCH=$(uname -m) && \
71
+ if [ "$ARCH" = "x86_64" ]; then \
72
+ echo "Installing Google Cloud SDK for $ARCH" > {_GCLOUD_INSTALLATION_LOG} && \
73
+ ARCH_SUFFIX="x86_64"; \
74
+ elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then \
75
+ echo "Installing Google Cloud SDK for $ARCH" > {_GCLOUD_INSTALLATION_LOG} && \
76
+ ARCH_SUFFIX="arm"; \
77
+ else \
78
+ echo "Architecture $ARCH not supported by Google Cloud SDK. Defaulting to x86_64." > {_GCLOUD_INSTALLATION_LOG} && \
79
+ ARCH_SUFFIX="x86_64"; \
80
+ fi && \
81
+ echo "Detected architecture: $ARCH, using package: $ARCH_SUFFIX" >> {_GCLOUD_INSTALLATION_LOG} && \
82
+ wget --quiet https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-{_GCLOUD_VERSION}-linux-${{ARCH_SUFFIX}}.tar.gz >> {_GCLOUD_INSTALLATION_LOG} && \
83
+ tar xzf google-cloud-sdk-{_GCLOUD_VERSION}-linux-${{ARCH_SUFFIX}}.tar.gz >> {_GCLOUD_INSTALLATION_LOG} && \
72
84
  rm -rf ~/google-cloud-sdk >> {_GCLOUD_INSTALLATION_LOG} && \
73
85
  mv google-cloud-sdk ~/ && \
74
86
  ~/google-cloud-sdk/install.sh -q >> {_GCLOUD_INSTALLATION_LOG} 2>&1 && \
@@ -1007,8 +1007,12 @@ def realtime_kubernetes_gpu_availability(
1007
1007
  # = Local Cluster =
1008
1008
  # =================
1009
1009
  @usage_lib.entrypoint
1010
- def local_up(gpus: bool, ips: Optional[List[str]], ssh_user: Optional[str],
1011
- ssh_key: Optional[str], cleanup: bool) -> None:
1010
+ def local_up(gpus: bool,
1011
+ ips: Optional[List[str]],
1012
+ ssh_user: Optional[str],
1013
+ ssh_key: Optional[str],
1014
+ cleanup: bool,
1015
+ context_name: Optional[str] = None) -> None:
1012
1016
  """Creates a local or remote cluster."""
1013
1017
 
1014
1018
  def _validate_args(ips, ssh_user, ssh_key, cleanup):
@@ -1034,7 +1038,7 @@ def local_up(gpus: bool, ips: Optional[List[str]], ssh_user: Optional[str],
1034
1038
  if ips:
1035
1039
  assert ssh_user is not None and ssh_key is not None
1036
1040
  kubernetes_deploy_utils.deploy_remote_cluster(ips, ssh_user, ssh_key,
1037
- cleanup)
1041
+ cleanup, context_name)
1038
1042
  else:
1039
1043
  # Run local deployment (kind) if no remote args are specified
1040
1044
  kubernetes_deploy_utils.deploy_local_cluster(gpus)
@@ -24,7 +24,14 @@ RCLONE_VERSION = 'v1.68.2'
24
24
 
25
25
  def get_s3_mount_install_cmd() -> str:
26
26
  """Returns a command to install S3 mount utility goofys."""
27
- install_cmd = ('sudo wget -nc https://github.com/romilbhardwaj/goofys/'
27
+ install_cmd = ('ARCH=$(uname -m) && '
28
+ 'if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then '
29
+ ' echo "goofys is not supported on $ARCH" && '
30
+ f' exit {exceptions.ARCH_NOT_SUPPORTED_EXIT_CODE}; '
31
+ 'else '
32
+ ' ARCH_SUFFIX="amd64"; '
33
+ 'fi && '
34
+ 'sudo wget -nc https://github.com/romilbhardwaj/goofys/'
28
35
  'releases/download/0.24.0-romilb-upstream/goofys '
29
36
  '-O /usr/local/bin/goofys && '
30
37
  'sudo chmod 755 /usr/local/bin/goofys')
@@ -49,9 +56,15 @@ def get_s3_mount_cmd(bucket_name: str,
49
56
 
50
57
  def get_gcs_mount_install_cmd() -> str:
51
58
  """Returns a command to install GCS mount utility gcsfuse."""
52
- install_cmd = ('wget -nc https://github.com/GoogleCloudPlatform/gcsfuse'
59
+ install_cmd = ('ARCH=$(uname -m) && '
60
+ 'if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then '
61
+ ' ARCH_SUFFIX="arm64"; '
62
+ 'else '
63
+ ' ARCH_SUFFIX="amd64"; '
64
+ 'fi && '
65
+ 'wget -nc https://github.com/GoogleCloudPlatform/gcsfuse'
53
66
  f'/releases/download/v{GCSFUSE_VERSION}/'
54
- f'gcsfuse_{GCSFUSE_VERSION}_amd64.deb '
67
+ f'gcsfuse_{GCSFUSE_VERSION}_${{ARCH_SUFFIX}}.deb '
55
68
  '-O /tmp/gcsfuse.deb && '
56
69
  'sudo dpkg --install /tmp/gcsfuse.deb')
57
70
  return install_cmd
@@ -77,16 +90,24 @@ def get_gcs_mount_cmd(bucket_name: str,
77
90
 
78
91
  def get_az_mount_install_cmd() -> str:
79
92
  """Returns a command to install AZ Container mount utility blobfuse2."""
80
- install_cmd = ('sudo apt-get update; '
81
- 'sudo apt-get install -y '
82
- '-o Dpkg::Options::="--force-confdef" '
83
- 'fuse3 libfuse3-dev && '
84
- 'wget -nc https://github.com/Azure/azure-storage-fuse'
85
- f'/releases/download/blobfuse2-{BLOBFUSE2_VERSION}'
86
- f'/blobfuse2-{BLOBFUSE2_VERSION}-Debian-11.0.x86_64.deb '
87
- '-O /tmp/blobfuse2.deb && '
88
- 'sudo dpkg --install /tmp/blobfuse2.deb && '
89
- f'mkdir -p {_BLOBFUSE_CACHE_ROOT_DIR};')
93
+ install_cmd = (
94
+ 'sudo apt-get update; '
95
+ 'sudo apt-get install -y '
96
+ '-o Dpkg::Options::="--force-confdef" '
97
+ 'fuse3 libfuse3-dev && '
98
+ 'ARCH=$(uname -m) && '
99
+ 'if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then '
100
+ ' echo "blobfuse2 is not supported on $ARCH" && '
101
+ f' exit {exceptions.ARCH_NOT_SUPPORTED_EXIT_CODE}; '
102
+ 'else '
103
+ ' ARCH_SUFFIX="x86_64"; '
104
+ 'fi && '
105
+ 'wget -nc https://github.com/Azure/azure-storage-fuse'
106
+ f'/releases/download/blobfuse2-{BLOBFUSE2_VERSION}'
107
+ f'/blobfuse2-{BLOBFUSE2_VERSION}-Debian-11.0.${{ARCH_SUFFIX}}.deb '
108
+ '-O /tmp/blobfuse2.deb && '
109
+ 'sudo dpkg --install /tmp/blobfuse2.deb && '
110
+ f'mkdir -p {_BLOBFUSE_CACHE_ROOT_DIR};')
90
111
 
91
112
  return install_cmd
92
113
 
@@ -207,14 +228,20 @@ def get_rclone_install_cmd() -> str:
207
228
  """
208
229
  # pylint: disable=line-too-long
209
230
  install_cmd = (
231
+ 'ARCH=$(uname -m) && '
232
+ 'if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then '
233
+ ' ARCH_SUFFIX="arm"; '
234
+ 'else '
235
+ ' ARCH_SUFFIX="amd64"; '
236
+ 'fi && '
210
237
  f'(which dpkg > /dev/null 2>&1 && (which rclone > /dev/null || (cd ~ > /dev/null'
211
- f' && curl -O https://downloads.rclone.org/{RCLONE_VERSION}/rclone-{RCLONE_VERSION}-linux-amd64.deb'
212
- f' && sudo dpkg -i rclone-{RCLONE_VERSION}-linux-amd64.deb'
213
- f' && rm -f rclone-{RCLONE_VERSION}-linux-amd64.deb)))'
238
+ f' && curl -O https://downloads.rclone.org/{RCLONE_VERSION}/rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.deb'
239
+ f' && sudo dpkg -i rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.deb'
240
+ f' && rm -f rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.deb)))'
214
241
  f' || (which rclone > /dev/null || (cd ~ > /dev/null'
215
- f' && curl -O https://downloads.rclone.org/{RCLONE_VERSION}/rclone-{RCLONE_VERSION}-linux-amd64.rpm'
216
- f' && sudo yum --nogpgcheck install rclone-{RCLONE_VERSION}-linux-amd64.rpm -y'
217
- f' && rm -f rclone-{RCLONE_VERSION}-linux-amd64.rpm))')
242
+ f' && curl -O https://downloads.rclone.org/{RCLONE_VERSION}/rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.rpm'
243
+ f' && sudo yum --nogpgcheck install rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.rpm -y'
244
+ f' && rm -f rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.rpm))')
218
245
  return install_cmd
219
246
 
220
247
 
@@ -22,6 +22,8 @@ MOUNT_PATH_NON_EMPTY_CODE = 42
22
22
  INSUFFICIENT_PRIVILEGES_CODE = 52
23
23
  # Return code when git command is ran in a dir that is not git repo
24
24
  GIT_FATAL_EXIT_CODE = 128
25
+ # Architecture, such as arm64, not supported by the dependency
26
+ ARCH_NOT_SUPPORTED_EXIT_CODE = 133
25
27
 
26
28
 
27
29
  def is_safe_exception(exc: Exception) -> bool:
@@ -145,57 +145,6 @@ def get_api_server_status(endpoint: Optional[str] = None) -> ApiServerInfo:
145
145
  return ApiServerInfo(status=ApiServerStatus.UNHEALTHY, api_version=None)
146
146
 
147
147
 
148
- def start_api_server_in_background(deploy: bool = False,
149
- host: str = '127.0.0.1'):
150
- if not is_api_server_local():
151
- raise RuntimeError(
152
- f'Cannot start API server: {get_server_url()} is not a local URL')
153
-
154
- # Check available memory before starting the server.
155
- avail_mem_size_gb: float = common_utils.get_mem_size_gb()
156
- if avail_mem_size_gb <= server_constants.MIN_AVAIL_MEM_GB:
157
- logger.warning(
158
- f'{colorama.Fore.YELLOW}Your SkyPilot API server machine only has '
159
- f'{avail_mem_size_gb:.1f}GB memory available. '
160
- f'At least {server_constants.MIN_AVAIL_MEM_GB}GB is recommended to '
161
- f'support higher load with better performance.'
162
- f'{colorama.Style.RESET_ALL}')
163
- log_path = os.path.expanduser(constants.API_SERVER_LOGS)
164
- os.makedirs(os.path.dirname(log_path), exist_ok=True)
165
-
166
- api_server_cmd = API_SERVER_CMD
167
- if deploy:
168
- api_server_cmd += ' --deploy'
169
- if host is not None:
170
- api_server_cmd += f' --host {host}'
171
- cmd = f'{sys.executable} {api_server_cmd} > {log_path} 2>&1 < /dev/null'
172
-
173
- # Start the API server process in the background and don't wait for it.
174
- # If this is called from a CLI invocation, we need start_new_session=True so
175
- # that SIGINT on the CLI will not also kill the API server.
176
- subprocess.Popen(cmd, shell=True, start_new_session=True)
177
-
178
- # Wait for the server to start until timeout.
179
- # Conservative upper time bound for starting the server based on profiling.
180
- timeout_sec = 12
181
- start_time = time.time()
182
- while True:
183
- api_server_info = get_api_server_status()
184
- assert api_server_info.status != ApiServerStatus.VERSION_MISMATCH, (
185
- f'API server version mismatch when starting the server. '
186
- f'Server version: {api_server_info.api_version} '
187
- f'Client version: {server_constants.API_VERSION}')
188
- if api_server_info.status == ApiServerStatus.HEALTHY:
189
- break
190
- elif time.time() - start_time >= timeout_sec:
191
- with ux_utils.print_exception_no_traceback():
192
- raise RuntimeError(
193
- 'Failed to start SkyPilot API server at '
194
- f'{get_server_url(host)}'
195
- f'\nView logs at: {constants.API_SERVER_LOGS}')
196
- time.sleep(0.5)
197
-
198
-
199
148
  def handle_request_error(response: requests.Response) -> None:
200
149
  if response.status_code != 200:
201
150
  with ux_utils.print_exception_no_traceback():
@@ -218,10 +167,10 @@ def get_request_id(response: requests.Response) -> RequestId:
218
167
  return request_id
219
168
 
220
169
 
221
- def _start_api_server(deploy: bool = False, host: str = '127.0.0.1'):
170
+ def _start_api_server(deploy: bool = False,
171
+ host: str = '127.0.0.1',
172
+ foreground: bool = False):
222
173
  """Starts a SkyPilot API server locally."""
223
- # Lock to prevent multiple processes from starting the server at the
224
- # same time, causing issues with database initialization.
225
174
  server_url = get_server_url(host)
226
175
  assert server_url in AVAILABLE_LOCAL_API_SERVER_URLS, (
227
176
  f'server url {server_url} is not a local url')
@@ -230,7 +179,60 @@ def _start_api_server(deploy: bool = False, host: str = '127.0.0.1'):
230
179
  f'SkyPilot API server at {server_url}. '
231
180
  'Starting a local server.'
232
181
  f'{colorama.Style.RESET_ALL}')
233
- start_api_server_in_background(deploy=deploy, host=host)
182
+ if not is_api_server_local():
183
+ raise RuntimeError(f'Cannot start API server: {get_server_url()} '
184
+ 'is not a local URL')
185
+
186
+ # Check available memory before starting the server.
187
+ avail_mem_size_gb: float = common_utils.get_mem_size_gb()
188
+ if avail_mem_size_gb <= server_constants.MIN_AVAIL_MEM_GB:
189
+ logger.warning(
190
+ f'{colorama.Fore.YELLOW}Your SkyPilot API server machine only '
191
+ f'has {avail_mem_size_gb:.1f}GB memory available. '
192
+ f'At least {server_constants.MIN_AVAIL_MEM_GB}GB is '
193
+ 'recommended to support higher load with better performance.'
194
+ f'{colorama.Style.RESET_ALL}')
195
+
196
+ args = [sys.executable, *API_SERVER_CMD.split()]
197
+ if deploy:
198
+ args += ['--deploy']
199
+ if host is not None:
200
+ args += [f'--host={host}']
201
+
202
+ if foreground:
203
+ # Replaces the current process with the API server
204
+ os.execvp(args[0], args)
205
+
206
+ log_path = os.path.expanduser(constants.API_SERVER_LOGS)
207
+ os.makedirs(os.path.dirname(log_path), exist_ok=True)
208
+ cmd = f'{" ".join(args)} > {log_path} 2>&1 < /dev/null'
209
+
210
+ # Start the API server process in the background and don't wait for it.
211
+ # If this is called from a CLI invocation, we need
212
+ # start_new_session=True so that SIGINT on the CLI will not also kill
213
+ # the API server.
214
+ subprocess.Popen(cmd, shell=True, start_new_session=True)
215
+
216
+ # Wait for the server to start until timeout.
217
+ # Conservative upper time bound for starting the server based on
218
+ # profiling.
219
+ timeout_sec = 12
220
+ start_time = time.time()
221
+ while True:
222
+ api_server_info = get_api_server_status()
223
+ assert api_server_info.status != ApiServerStatus.VERSION_MISMATCH, (
224
+ f'API server version mismatch when starting the server. '
225
+ f'Server version: {api_server_info.api_version} '
226
+ f'Client version: {server_constants.API_VERSION}')
227
+ if api_server_info.status == ApiServerStatus.HEALTHY:
228
+ break
229
+ elif time.time() - start_time >= timeout_sec:
230
+ with ux_utils.print_exception_no_traceback():
231
+ raise RuntimeError(
232
+ 'Failed to start SkyPilot API server at '
233
+ f'{get_server_url(host)}'
234
+ f'\nView logs at: {constants.API_SERVER_LOGS}')
235
+ time.sleep(0.5)
234
236
  logger.info(ux_utils.finishing_message('SkyPilot API server started.'))
235
237
 
236
238
 
@@ -260,7 +262,8 @@ def check_server_healthy(endpoint: Optional[str] = None,) -> None:
260
262
 
261
263
 
262
264
  def check_server_healthy_or_start_fn(deploy: bool = False,
263
- host: str = '127.0.0.1'):
265
+ host: str = '127.0.0.1',
266
+ foreground: bool = False):
264
267
  try:
265
268
  check_server_healthy()
266
269
  except exceptions.ApiServerConnectionError as exc:
@@ -268,13 +271,15 @@ def check_server_healthy_or_start_fn(deploy: bool = False,
268
271
  if not is_api_server_local():
269
272
  with ux_utils.print_exception_no_traceback():
270
273
  raise exceptions.ApiServerConnectionError(endpoint) from exc
274
+ # Lock to prevent multiple processes from starting the server at the
275
+ # same time, causing issues with database initialization.
271
276
  with filelock.FileLock(
272
277
  os.path.expanduser(constants.API_SERVER_CREATION_LOCK_PATH)):
273
278
  # Check again if server is already running. Other processes may
274
279
  # have started the server while we were waiting for the lock.
275
280
  api_server_info = get_api_server_status(endpoint)
276
281
  if api_server_info.status == ApiServerStatus.UNHEALTHY:
277
- _start_api_server(deploy, host)
282
+ _start_api_server(deploy, host, foreground)
278
283
 
279
284
 
280
285
  def check_server_healthy_or_start(func):