skypilot-nightly 1.0.0.dev20250319__tar.gz → 1.0.0.dev20250321__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 (376) hide show
  1. {skypilot_nightly-1.0.0.dev20250319/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250321}/PKG-INFO +13 -2
  2. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/__init__.py +2 -2
  3. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/cloudflare.py +19 -3
  4. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/kubernetes.py +2 -1
  5. skypilot_nightly-1.0.0.dev20250321/sky/adaptors/nebius.py +232 -0
  6. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/backends/cloud_vm_ray_backend.py +3 -1
  7. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/benchmark/benchmark_utils.py +3 -2
  8. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/check.py +89 -55
  9. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/cloud_stores.py +66 -0
  10. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/aws.py +14 -2
  11. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/azure.py +13 -1
  12. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/cloud.py +37 -2
  13. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/cudo.py +3 -2
  14. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/do.py +3 -2
  15. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/fluidstack.py +3 -2
  16. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/gcp.py +55 -34
  17. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/ibm.py +15 -1
  18. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/kubernetes.py +3 -1
  19. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/lambda_cloud.py +3 -1
  20. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/nebius.py +7 -3
  21. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/oci.py +15 -1
  22. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/paperspace.py +3 -2
  23. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/runpod.py +7 -1
  24. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/scp.py +3 -1
  25. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/kubernetes_catalog.py +3 -1
  26. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/utils/gcp_utils.py +11 -1
  27. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/vast.py +3 -2
  28. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/vsphere.py +3 -2
  29. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/core.py +6 -2
  30. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/data/data_transfer.py +75 -0
  31. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/data/data_utils.py +34 -0
  32. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/data/mounting_utils.py +18 -0
  33. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/data/storage.py +542 -16
  34. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/data/storage_utils.py +102 -84
  35. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/exceptions.py +2 -0
  36. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/global_user_state.py +15 -6
  37. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/server/core.py +1 -1
  38. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/utils.py +5 -0
  39. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/optimizer.py +8 -2
  40. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/gcp/config.py +3 -3
  41. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/gcp/constants.py +16 -2
  42. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/gcp/instance.py +4 -1
  43. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/utils.py +26 -21
  44. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/resources.py +6 -1
  45. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/replica_managers.py +10 -1
  46. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/setup_files/dependencies.py +3 -1
  47. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/task.py +16 -5
  48. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/command_runner.py +2 -0
  49. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/controller_utils.py +13 -4
  50. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/kubernetes_deploy_utils.py +4 -1
  51. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321/skypilot_nightly.egg-info}/PKG-INFO +13 -2
  52. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/skypilot_nightly.egg-info/requires.txt +5 -0
  53. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_global_user_state.py +2 -1
  54. skypilot_nightly-1.0.0.dev20250319/sky/adaptors/nebius.py +0 -110
  55. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/LICENSE +0 -0
  56. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/MANIFEST.in +0 -0
  57. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/README.md +0 -0
  58. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/pyproject.toml +0 -0
  59. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/setup.cfg +0 -0
  60. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/setup.py +0 -0
  61. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/__init__.py +0 -0
  62. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/aws.py +0 -0
  63. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/azure.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/common.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/cudo.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/do.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/docker.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/gcp.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/ibm.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/oci.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/runpod.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/vast.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/vsphere.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/admin_policy.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/authentication.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/backends/__init__.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/backends/backend.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/backends/backend_utils.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/backends/docker_utils.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/backends/local_docker_backend.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/backends/wheel_utils.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/benchmark/__init__.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/benchmark/benchmark_state.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/cli.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/client/__init__.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/client/cli.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/client/common.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/client/sdk.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/__init__.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/__init__.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/aws_catalog.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/azure_catalog.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/common.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/config.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/constants.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/fetch_vast.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/do_catalog.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/nebius_catalog.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/oci_catalog.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/scp_catalog.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/vast_catalog.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/utils/__init__.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/utils/aws_utils.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/utils/azure_utils.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/utils/oci_utils.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/utils/scp_utils.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/dag.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/data/__init__.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/execution.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/__init__.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/client/__init__.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/client/sdk.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/constants.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/controller.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/dashboard/dashboard.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/dashboard/static/favicon.ico +0 -0
  134. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/dashboard/templates/index.html +0 -0
  135. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/recovery_strategy.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/scheduler.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/server/__init__.py +0 -0
  138. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/server/dashboard_utils.py +0 -0
  139. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/server/server.py +0 -0
  140. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/state.py +0 -0
  141. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/models.py +0 -0
  142. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/__init__.py +0 -0
  143. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/aws/__init__.py +0 -0
  144. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/aws/config.py +0 -0
  145. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/aws/instance.py +0 -0
  146. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/aws/utils.py +0 -0
  147. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/azure/__init__.py +0 -0
  148. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/azure/azure-config-template.json +0 -0
  149. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/azure/config.py +0 -0
  150. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/azure/instance.py +0 -0
  151. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/common.py +0 -0
  152. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/constants.py +0 -0
  153. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/cudo/__init__.py +0 -0
  154. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/cudo/config.py +0 -0
  155. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/cudo/cudo_machine_type.py +0 -0
  156. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/cudo/cudo_utils.py +0 -0
  157. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/cudo/cudo_wrapper.py +0 -0
  158. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/cudo/instance.py +0 -0
  159. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/do/__init__.py +0 -0
  160. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/do/config.py +0 -0
  161. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/do/constants.py +0 -0
  162. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/do/instance.py +0 -0
  163. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/do/utils.py +0 -0
  164. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/docker_utils.py +0 -0
  165. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/fluidstack/__init__.py +0 -0
  166. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/fluidstack/config.py +0 -0
  167. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  168. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/fluidstack/instance.py +0 -0
  169. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/gcp/__init__.py +0 -0
  170. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/gcp/instance_utils.py +0 -0
  171. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/gcp/mig_utils.py +0 -0
  172. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/instance_setup.py +0 -0
  173. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/__init__.py +0 -0
  174. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/config.py +0 -0
  175. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/constants.py +0 -0
  176. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/instance.py +0 -0
  177. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
  178. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
  179. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/network.py +0 -0
  180. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/network_utils.py +0 -0
  181. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/lambda_cloud/__init__.py +0 -0
  182. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/lambda_cloud/config.py +0 -0
  183. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/lambda_cloud/instance.py +0 -0
  184. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  185. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/logging.py +0 -0
  186. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/metadata_utils.py +0 -0
  187. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/nebius/__init__.py +0 -0
  188. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/nebius/config.py +0 -0
  189. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/nebius/instance.py +0 -0
  190. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/nebius/utils.py +0 -0
  191. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/oci/__init__.py +0 -0
  192. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/oci/config.py +0 -0
  193. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/oci/instance.py +0 -0
  194. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/oci/query_utils.py +0 -0
  195. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/paperspace/__init__.py +0 -0
  196. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/paperspace/config.py +0 -0
  197. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/paperspace/constants.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/paperspace/instance.py +0 -0
  199. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/paperspace/utils.py +0 -0
  200. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/provisioner.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/runpod/__init__.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/runpod/api/__init__.py +0 -0
  203. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/runpod/api/commands.py +0 -0
  204. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/runpod/api/pods.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/runpod/config.py +0 -0
  206. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/runpod/instance.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/runpod/utils.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vast/__init__.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vast/config.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vast/instance.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vast/utils.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/__init__.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/__init__.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/custom_script.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/id_generator.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  219. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/service_manager.py +0 -0
  220. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  221. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  222. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  223. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/vim_utils.py +0 -0
  224. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/config.py +0 -0
  225. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/instance.py +0 -0
  226. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/vsphere_utils.py +0 -0
  227. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/__init__.py +0 -0
  228. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/autoscalers.py +0 -0
  229. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/client/__init__.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/client/sdk.py +0 -0
  231. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/constants.py +0 -0
  232. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/controller.py +0 -0
  233. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/load_balancer.py +0 -0
  234. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/load_balancing_policies.py +0 -0
  235. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/serve_state.py +0 -0
  236. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/serve_utils.py +0 -0
  237. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/server/__init__.py +0 -0
  238. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/server/core.py +0 -0
  239. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/server/server.py +0 -0
  240. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/service.py +0 -0
  241. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/service_spec.py +0 -0
  242. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/__init__.py +0 -0
  243. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/common.py +0 -0
  244. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/constants.py +0 -0
  245. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/html/log.html +0 -0
  246. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/__init__.py +0 -0
  247. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/event_loop.py +0 -0
  248. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/executor.py +0 -0
  249. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/payloads.py +0 -0
  250. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/preconditions.py +0 -0
  251. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/queues/__init__.py +0 -0
  252. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/queues/mp_queue.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/requests.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/serializers/__init__.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/serializers/decoders.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/serializers/encoders.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/server.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/stream_utils.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/uvicorn.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/setup_files/MANIFEST.in +0 -0
  261. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/setup_files/setup.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/sky_logging.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/LICENSE +0 -0
  264. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/__init__.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/attempt_skylet.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/autostop_lib.py +0 -0
  267. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/configs.py +0 -0
  268. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/constants.py +0 -0
  269. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/events.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/job_lib.py +0 -0
  271. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/log_lib.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/log_lib.pyi +0 -0
  273. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/__init__.py +0 -0
  274. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/command_runner.py +0 -0
  275. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/ibm/__init__.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/ibm/node_provider.py +0 -0
  277. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/ibm/utils.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  279. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/scp/__init__.py +0 -0
  280. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/scp/config.py +0 -0
  281. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/scp/node_provider.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/ray_patches/__init__.py +0 -0
  283. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  284. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/ray_patches/cli.py.patch +0 -0
  285. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  286. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  287. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  288. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/ray_patches/updater.py.patch +0 -0
  289. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/ray_patches/worker.py.patch +0 -0
  290. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/skylet.py +0 -0
  291. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/subprocess_daemon.py +0 -0
  292. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skypilot_config.py +0 -0
  293. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/aws-ray.yml.j2 +0 -0
  294. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/azure-ray.yml.j2 +0 -0
  295. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/cudo-ray.yml.j2 +0 -0
  296. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/do-ray.yml.j2 +0 -0
  297. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  298. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/gcp-ray.yml.j2 +0 -0
  299. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/ibm-ray.yml.j2 +0 -0
  300. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/jobs-controller.yaml.j2 +0 -0
  301. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  302. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  303. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  304. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  305. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  306. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/lambda-ray.yml.j2 +0 -0
  307. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/local-ray.yml.j2 +0 -0
  308. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/nebius-ray.yml.j2 +0 -0
  309. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/oci-ray.yml.j2 +0 -0
  310. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/paperspace-ray.yml.j2 +0 -0
  311. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/runpod-ray.yml.j2 +0 -0
  312. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/scp-ray.yml.j2 +0 -0
  313. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  314. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
  315. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/vast-ray.yml.j2 +0 -0
  316. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/vsphere-ray.yml.j2 +0 -0
  317. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/websocket_proxy.py +0 -0
  318. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/usage/__init__.py +0 -0
  319. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/usage/constants.py +0 -0
  320. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/usage/usage_lib.py +0 -0
  321. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/__init__.py +0 -0
  322. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/accelerator_registry.py +0 -0
  323. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/admin_policy_utils.py +0 -0
  324. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/annotations.py +0 -0
  325. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/cli_utils/__init__.py +0 -0
  326. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/cli_utils/status_utils.py +0 -0
  327. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/cluster_utils.py +0 -0
  328. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/command_runner.pyi +0 -0
  329. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/common.py +0 -0
  330. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/common_utils.py +0 -0
  331. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/config_utils.py +0 -0
  332. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/control_master_utils.py +0 -0
  333. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/dag_utils.py +0 -0
  334. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/db_utils.py +0 -0
  335. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/env_options.py +0 -0
  336. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/__init__.py +0 -0
  337. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/create_cluster.sh +0 -0
  338. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  339. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/deploy_remote_cluster.sh +0 -0
  340. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/exec_kubeconfig_converter.py +0 -0
  341. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  342. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  343. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  344. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  345. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  346. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  347. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  348. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes_enums.py +0 -0
  349. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/log_utils.py +0 -0
  350. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/message_utils.py +0 -0
  351. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/registry.py +0 -0
  352. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/resources_utils.py +0 -0
  353. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/rich_utils.py +0 -0
  354. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/schemas.py +0 -0
  355. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/status_lib.py +0 -0
  356. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/subprocess_utils.py +0 -0
  357. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/timeline.py +0 -0
  358. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/ux_utils.py +0 -0
  359. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/validator.py +0 -0
  360. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/skypilot_nightly.egg-info/SOURCES.txt +0 -0
  361. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  362. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  363. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/skypilot_nightly.egg-info/top_level.txt +0 -0
  364. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_api.py +0 -0
  365. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_cli.py +0 -0
  366. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_config.py +0 -0
  367. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_jobs.py +0 -0
  368. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_jobs_and_serve.py +0 -0
  369. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_list_accelerators.py +0 -0
  370. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_optimizer_dryruns.py +0 -0
  371. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_optimizer_random_dag.py +0 -0
  372. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_serve_autoscaler.py +0 -0
  373. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_smoke.py +0 -0
  374. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_storage.py +0 -0
  375. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_wheels.py +0 -0
  376. {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_yaml_parser.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250319
3
+ Version: 1.0.0.dev20250321
4
4
  Summary: SkyPilot: An intercloud broker for the clouds
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -108,6 +108,11 @@ Provides-Extra: vsphere
108
108
  Requires-Dist: pyvmomi==8.0.1.0.2; extra == "vsphere"
109
109
  Provides-Extra: nebius
110
110
  Requires-Dist: nebius>=0.2.0; extra == "nebius"
111
+ Requires-Dist: urllib3<2; extra == "nebius"
112
+ Requires-Dist: awscli>=1.27.10; extra == "nebius"
113
+ Requires-Dist: botocore>=1.29.10; extra == "nebius"
114
+ Requires-Dist: boto3>=1.26.1; extra == "nebius"
115
+ Requires-Dist: colorama<0.4.5; extra == "nebius"
111
116
  Provides-Extra: all
112
117
  Requires-Dist: urllib3<2; extra == "all"
113
118
  Requires-Dist: awscli>=1.27.10; extra == "all"
@@ -151,11 +156,17 @@ Requires-Dist: azure-common; extra == "all"
151
156
  Requires-Dist: vastai-sdk>=0.1.12; extra == "all"
152
157
  Requires-Dist: pyvmomi==8.0.1.0.2; extra == "all"
153
158
  Requires-Dist: nebius>=0.2.0; extra == "all"
159
+ Requires-Dist: urllib3<2; extra == "all"
160
+ Requires-Dist: awscli>=1.27.10; extra == "all"
161
+ Requires-Dist: botocore>=1.29.10; extra == "all"
162
+ Requires-Dist: boto3>=1.26.1; extra == "all"
163
+ Requires-Dist: colorama<0.4.5; extra == "all"
154
164
  Dynamic: author
155
165
  Dynamic: classifier
156
166
  Dynamic: description
157
167
  Dynamic: description-content-type
158
168
  Dynamic: license
169
+ Dynamic: license-file
159
170
  Dynamic: project-url
160
171
  Dynamic: provides-extra
161
172
  Dynamic: requires-dist
@@ -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 = '246e69ba16705c31b69143bfe76efcee17b6407f'
8
+ _SKYPILOT_COMMIT_SHA = 'a7f92951b96fdca825348d8291d01bd88f6f9dfe'
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.dev20250319'
38
+ __version__ = '1.0.0.dev20250321'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -6,7 +6,9 @@ import os
6
6
  import threading
7
7
  from typing import Dict, Optional, Tuple
8
8
 
9
+ from sky import exceptions
9
10
  from sky.adaptors import common
11
+ from sky.clouds import cloud
10
12
  from sky.utils import annotations
11
13
  from sky.utils import ux_utils
12
14
 
@@ -130,8 +132,8 @@ def client(service_name: str, region):
130
132
  @common.load_lazy_modules(_LAZY_MODULES)
131
133
  def botocore_exceptions():
132
134
  """AWS botocore exception."""
133
- from botocore import exceptions
134
- return exceptions
135
+ from botocore import exceptions as boto_exceptions
136
+ return boto_exceptions
135
137
 
136
138
 
137
139
  def create_endpoint():
@@ -148,7 +150,21 @@ def create_endpoint():
148
150
  return endpoint
149
151
 
150
152
 
151
- def check_credentials() -> Tuple[bool, Optional[str]]:
153
+ def check_credentials(
154
+ cloud_capability: cloud.CloudCapability) -> Tuple[bool, Optional[str]]:
155
+ if cloud_capability == cloud.CloudCapability.COMPUTE:
156
+ # for backward compatibility,
157
+ # we check storage credentials for compute.
158
+ # TODO(seungjin): properly return not supported error for compute.
159
+ return check_storage_credentials()
160
+ elif cloud_capability == cloud.CloudCapability.STORAGE:
161
+ return check_storage_credentials()
162
+ else:
163
+ raise exceptions.NotSupportedError(
164
+ f'{NAME} does not support {cloud_capability}.')
165
+
166
+
167
+ def check_storage_credentials() -> Tuple[bool, Optional[str]]:
152
168
  """Checks if the user has access credentials to Cloudflare R2.
153
169
 
154
170
  Returns:
@@ -79,10 +79,11 @@ def _load_config(context: Optional[str] = None):
79
79
  ' If you were running a local Kubernetes '
80
80
  'cluster, run `sky local up` to start the cluster.')
81
81
  else:
82
+ kubeconfig_path = os.environ.get('KUBECONFIG', '~/.kube/config')
82
83
  err_str = (
83
84
  f'Failed to load Kubernetes configuration for {context!r}. '
84
85
  'Please check if your kubeconfig file exists at '
85
- f'~/.kube/config and is valid.\n{suffix}')
86
+ f'{kubeconfig_path} and is valid.\n{suffix}')
86
87
  err_str += '\nTo disable Kubernetes for SkyPilot: run `sky check`.'
87
88
  with ux_utils.print_exception_no_traceback():
88
89
  raise ValueError(err_str) from None
@@ -0,0 +1,232 @@
1
+ """Nebius cloud adaptor."""
2
+ import os
3
+ import threading
4
+ from typing import Optional
5
+
6
+ from sky.adaptors import common
7
+ from sky.utils import annotations
8
+ from sky.utils import ux_utils
9
+
10
+ NEBIUS_TENANT_ID_FILENAME = 'NEBIUS_TENANT_ID.txt'
11
+ NEBIUS_IAM_TOKEN_FILENAME = 'NEBIUS_IAM_TOKEN.txt'
12
+ NEBIUS_PROJECT_ID_FILENAME = 'NEBIUS_PROJECT_ID.txt'
13
+ NEBIUS_CREDENTIALS_FILENAME = 'credentials.json'
14
+ NEBIUS_TENANT_ID_PATH = '~/.nebius/' + NEBIUS_TENANT_ID_FILENAME
15
+ NEBIUS_IAM_TOKEN_PATH = '~/.nebius/' + NEBIUS_IAM_TOKEN_FILENAME
16
+ NEBIUS_PROJECT_ID_PATH = '~/.nebius/' + NEBIUS_PROJECT_ID_FILENAME
17
+ NEBIUS_CREDENTIALS_PATH = '~/.nebius/' + NEBIUS_CREDENTIALS_FILENAME
18
+
19
+ DEFAULT_REGION = 'eu-north1'
20
+
21
+ NEBIUS_PROFILE_NAME = 'nebius'
22
+
23
+ MAX_RETRIES_TO_DISK_CREATE = 120
24
+ MAX_RETRIES_TO_INSTANCE_STOP = 120
25
+ MAX_RETRIES_TO_INSTANCE_START = 120
26
+ MAX_RETRIES_TO_INSTANCE_READY = 240
27
+
28
+ MAX_RETRIES_TO_DISK_DELETE = 120
29
+ MAX_RETRIES_TO_INSTANCE_WAIT = 120 # Maximum number of retries
30
+
31
+ POLL_INTERVAL = 5
32
+
33
+ _iam_token = None
34
+ _sdk = None
35
+ _tenant_id = None
36
+ _project_id = None
37
+
38
+ _IMPORT_ERROR_MESSAGE = ('Failed to import dependencies for Nebius AI Cloud.'
39
+ 'Try pip install "skypilot[nebius]"')
40
+
41
+ nebius = common.LazyImport(
42
+ 'nebius',
43
+ import_error_message=_IMPORT_ERROR_MESSAGE,
44
+ # https://github.com/grpc/grpc/issues/37642 to avoid spam in console
45
+ set_loggers=lambda: os.environ.update({'GRPC_VERBOSITY': 'NONE'}))
46
+ boto3 = common.LazyImport('boto3', import_error_message=_IMPORT_ERROR_MESSAGE)
47
+ botocore = common.LazyImport('botocore',
48
+ import_error_message=_IMPORT_ERROR_MESSAGE)
49
+
50
+ _LAZY_MODULES = (boto3, botocore, nebius)
51
+ _session_creation_lock = threading.RLock()
52
+ _INDENT_PREFIX = ' '
53
+ NAME = 'Nebius'
54
+ SKY_CHECK_NAME = 'Nebius (for Nebius Object Storae)'
55
+
56
+
57
+ def request_error():
58
+ return nebius.aio.service_error.RequestError
59
+
60
+
61
+ def compute():
62
+ # pylint: disable=import-outside-toplevel
63
+ from nebius.api.nebius.compute import v1 as compute_v1
64
+ return compute_v1
65
+
66
+
67
+ def iam():
68
+ # pylint: disable=import-outside-toplevel
69
+ from nebius.api.nebius.iam import v1 as iam_v1
70
+ return iam_v1
71
+
72
+
73
+ def nebius_common():
74
+ # pylint: disable=import-outside-toplevel
75
+ from nebius.api.nebius.common import v1 as common_v1
76
+ return common_v1
77
+
78
+
79
+ def vpc():
80
+ # pylint: disable=import-outside-toplevel
81
+ from nebius.api.nebius.vpc import v1 as vpc_v1
82
+ return vpc_v1
83
+
84
+
85
+ def get_iam_token():
86
+ global _iam_token
87
+ if _iam_token is None:
88
+ try:
89
+ with open(os.path.expanduser(NEBIUS_IAM_TOKEN_PATH),
90
+ encoding='utf-8') as file:
91
+ _iam_token = file.read().strip()
92
+ except FileNotFoundError:
93
+ return None
94
+ return _iam_token
95
+
96
+
97
+ def is_token_or_cred_file_exist():
98
+ return (os.path.exists(os.path.expanduser(NEBIUS_IAM_TOKEN_PATH)) or
99
+ os.path.exists(os.path.expanduser(NEBIUS_CREDENTIALS_PATH)))
100
+
101
+
102
+ def get_project_id():
103
+ global _project_id
104
+ if _project_id is None:
105
+ try:
106
+ with open(os.path.expanduser(NEBIUS_PROJECT_ID_PATH),
107
+ encoding='utf-8') as file:
108
+ _project_id = file.read().strip()
109
+ except FileNotFoundError:
110
+ return None
111
+ return _project_id
112
+
113
+
114
+ def get_tenant_id():
115
+ global _tenant_id
116
+ if _tenant_id is None:
117
+ try:
118
+ with open(os.path.expanduser(NEBIUS_TENANT_ID_PATH),
119
+ encoding='utf-8') as file:
120
+ _tenant_id = file.read().strip()
121
+ except FileNotFoundError:
122
+ return None
123
+ return _tenant_id
124
+
125
+
126
+ def sdk():
127
+ global _sdk
128
+ if _sdk is None:
129
+ if get_iam_token() is not None:
130
+ _sdk = nebius.sdk.SDK(credentials=get_iam_token())
131
+ return _sdk
132
+ _sdk = nebius.sdk.SDK(
133
+ credentials_file_name=os.path.expanduser(NEBIUS_CREDENTIALS_PATH))
134
+ return _sdk
135
+
136
+
137
+ def get_nebius_credentials(boto3_session):
138
+ """Gets the Nebius credentials from the boto3 session object.
139
+
140
+ Args:
141
+ boto3_session: The boto3 session object.
142
+ Returns:
143
+ botocore.credentials.ReadOnlyCredentials object with the R2 credentials.
144
+ """
145
+ nebius_credentials = boto3_session.get_credentials()
146
+ if nebius_credentials is None:
147
+ with ux_utils.print_exception_no_traceback():
148
+ raise ValueError('Nebius credentials not found. Run '
149
+ '`sky check` to verify credentials are '
150
+ 'correctly set up.')
151
+ return nebius_credentials.get_frozen_credentials()
152
+
153
+
154
+ # lru_cache() is thread-safe and it will return the same session object
155
+ # for different threads.
156
+ # Reference: https://docs.python.org/3/library/functools.html#functools.lru_cache # pylint: disable=line-too-long
157
+ @annotations.lru_cache(scope='global')
158
+ def session():
159
+ """Create an AWS session."""
160
+ # Creating the session object is not thread-safe for boto3,
161
+ # so we add a reentrant lock to synchronize the session creation.
162
+ # Reference: https://github.com/boto/boto3/issues/1592
163
+ # However, the session object itself is thread-safe, so we are
164
+ # able to use lru_cache() to cache the session object.
165
+ with _session_creation_lock:
166
+ session_ = boto3.session.Session(profile_name=NEBIUS_PROFILE_NAME)
167
+ return session_
168
+
169
+
170
+ @annotations.lru_cache(scope='global')
171
+ def resource(resource_name: str, region: str = DEFAULT_REGION, **kwargs):
172
+ """Create a Nebius resource.
173
+
174
+ Args:
175
+ resource_name: Nebius resource name (e.g., 's3').
176
+ kwargs: Other options.
177
+ """
178
+ # Need to use the resource retrieved from the per-thread session
179
+ # to avoid thread-safety issues (Directly creating the client
180
+ # with boto3.resource() is not thread-safe).
181
+ # Reference: https://stackoverflow.com/a/59635814
182
+
183
+ session_ = session()
184
+ nebius_credentials = get_nebius_credentials(session_)
185
+ endpoint = create_endpoint(region)
186
+
187
+ return session_.resource(
188
+ resource_name,
189
+ endpoint_url=endpoint,
190
+ aws_access_key_id=nebius_credentials.access_key,
191
+ aws_secret_access_key=nebius_credentials.secret_key,
192
+ region_name=region,
193
+ **kwargs)
194
+
195
+
196
+ @annotations.lru_cache(scope='global')
197
+ def client(service_name: str, region):
198
+ """Create an Nebius client of a certain service.
199
+
200
+ Args:
201
+ service_name: Nebius service name (e.g., 's3').
202
+ kwargs: Other options.
203
+ """
204
+ # Need to use the client retrieved from the per-thread session
205
+ # to avoid thread-safety issues (Directly creating the client
206
+ # with boto3.client() is not thread-safe).
207
+ # Reference: https://stackoverflow.com/a/59635814
208
+
209
+ session_ = session()
210
+ nebius_credentials = get_nebius_credentials(session_)
211
+ endpoint = create_endpoint(region)
212
+
213
+ return session_.client(service_name,
214
+ endpoint_url=endpoint,
215
+ aws_access_key_id=nebius_credentials.access_key,
216
+ aws_secret_access_key=nebius_credentials.secret_key,
217
+ region_name=region)
218
+
219
+
220
+ @common.load_lazy_modules(_LAZY_MODULES)
221
+ def botocore_exceptions():
222
+ """AWS botocore exception."""
223
+ # pylint: disable=import-outside-toplevel
224
+ from botocore import exceptions
225
+ return exceptions
226
+
227
+
228
+ def create_endpoint(region: Optional[str] = DEFAULT_REGION) -> str:
229
+ """Reads accountid necessary to interact with Nebius Object Storage"""
230
+ if region is None:
231
+ region = DEFAULT_REGION
232
+ return f'https://storage.{region}.nebius.cloud:443'
@@ -38,6 +38,7 @@ from sky import sky_logging
38
38
  from sky import task as task_lib
39
39
  from sky.backends import backend_utils
40
40
  from sky.backends import wheel_utils
41
+ from sky.clouds import cloud as sky_cloud
41
42
  from sky.clouds import service_catalog
42
43
  from sky.clouds.utils import gcp_utils
43
44
  from sky.data import data_utils
@@ -1981,7 +1982,8 @@ class RetryingVmProvisioner(object):
1981
1982
  # is running. Here we check the enabled clouds and expiring credentials
1982
1983
  # and raise a warning to the user.
1983
1984
  if task.is_controller_task():
1984
- enabled_clouds = sky_check.get_cached_enabled_clouds_or_refresh()
1985
+ enabled_clouds = sky_check.get_cached_enabled_clouds_or_refresh(
1986
+ sky_cloud.CloudCapability.COMPUTE)
1985
1987
  expirable_clouds = backend_utils.get_expirable_clouds(
1986
1988
  enabled_clouds)
1987
1989
 
@@ -172,8 +172,9 @@ def _create_benchmark_bucket() -> Tuple[str, str]:
172
172
  bucket_name = f'sky-bench-{uuid.uuid4().hex[:4]}-{getpass.getuser()}'
173
173
 
174
174
  # Select the bucket type.
175
- enabled_clouds = storage_lib.get_cached_enabled_storage_clouds_or_refresh(
176
- raise_if_no_cloud_access=True)
175
+ enabled_clouds = (
176
+ storage_lib.get_cached_enabled_storage_cloud_names_or_refresh(
177
+ raise_if_no_cloud_access=True))
177
178
  # Sky Benchmark only supports S3 (see _download_remote_dir and
178
179
  # _delete_remote_dir).
179
180
  enabled_clouds = [
@@ -2,7 +2,7 @@
2
2
  import os
3
3
  import traceback
4
4
  from types import ModuleType
5
- from typing import Dict, Iterable, List, Optional, Tuple, Union
5
+ from typing import Dict, Iterable, List, Optional, Set, Tuple, Union
6
6
 
7
7
  import click
8
8
  import colorama
@@ -12,6 +12,7 @@ from sky import exceptions
12
12
  from sky import global_user_state
13
13
  from sky import skypilot_config
14
14
  from sky.adaptors import cloudflare
15
+ from sky.clouds import cloud as sky_cloud
15
16
  from sky.utils import registry
16
17
  from sky.utils import rich_utils
17
18
  from sky.utils import ux_utils
@@ -20,44 +21,52 @@ CHECK_MARK_EMOJI = '\U00002714' # Heavy check mark unicode
20
21
  PARTY_POPPER_EMOJI = '\U0001F389' # Party popper unicode
21
22
 
22
23
 
23
- def check(
24
+ def check_capabilities(
24
25
  quiet: bool = False,
25
26
  verbose: bool = False,
26
27
  clouds: Optional[Iterable[str]] = None,
27
- ) -> List[str]:
28
+ capabilities: Optional[List[sky_cloud.CloudCapability]] = None,
29
+ ) -> Dict[str, List[sky_cloud.CloudCapability]]:
28
30
  echo = (lambda *_args, **_kwargs: None
29
31
  ) if quiet else lambda *args, **kwargs: click.echo(
30
32
  *args, **kwargs, color=True)
31
33
  echo('Checking credentials to enable clouds for SkyPilot.')
32
- enabled_clouds = []
33
- disabled_clouds = []
34
+ if capabilities is None:
35
+ capabilities = sky_cloud.ALL_CAPABILITIES
36
+ assert capabilities is not None
37
+ enabled_clouds: Dict[str, List[sky_cloud.CloudCapability]] = {}
38
+ disabled_clouds: Dict[str, List[sky_cloud.CloudCapability]] = {}
34
39
 
35
40
  def check_one_cloud(
36
41
  cloud_tuple: Tuple[str, Union[sky_clouds.Cloud,
37
42
  ModuleType]]) -> None:
38
43
  cloud_repr, cloud = cloud_tuple
39
- with rich_utils.safe_status(f'Checking {cloud_repr}...'):
40
- try:
41
- ok, reason = cloud.check_credentials()
42
- except Exception: # pylint: disable=broad-except
43
- # Catch all exceptions to prevent a single cloud from blocking
44
- # the check for other clouds.
45
- ok, reason = False, traceback.format_exc()
46
- status_msg = 'enabled' if ok else 'disabled'
47
- styles = {'fg': 'green', 'bold': False} if ok else {'dim': True}
48
- echo(' ' + click.style(f'{cloud_repr}: {status_msg}', **styles) +
49
- ' ' * 30)
50
- if ok:
51
- enabled_clouds.append(cloud_repr)
52
- if verbose and cloud is not cloudflare:
53
- activated_account = cloud.get_active_user_identity_str()
54
- if activated_account is not None:
55
- echo(f' Activated account: {activated_account}')
56
- if reason is not None:
57
- echo(f' Hint: {reason}')
58
- else:
59
- disabled_clouds.append(cloud_repr)
60
- echo(f' Reason: {reason}')
44
+ assert capabilities is not None
45
+ for capability in capabilities:
46
+ with rich_utils.safe_status(f'Checking {cloud_repr}...'):
47
+ try:
48
+ ok, reason = cloud.check_credentials(capability)
49
+ except exceptions.NotSupportedError:
50
+ continue
51
+ except Exception: # pylint: disable=broad-except
52
+ # Catch all exceptions to prevent a single cloud
53
+ # from blocking the check for other clouds.
54
+ ok, reason = False, traceback.format_exc()
55
+ status_msg = ('enabled' if ok else 'disabled')
56
+ styles = {'fg': 'green', 'bold': False} if ok else {'dim': True}
57
+ echo(' ' + click.style(f'{cloud_repr}: {status_msg}', **styles) +
58
+ ' ' * 30)
59
+ if ok:
60
+ enabled_clouds.setdefault(cloud_repr, []).append(capability)
61
+ if verbose and cloud is not cloudflare:
62
+ activated_account = cloud.get_active_user_identity_str()
63
+ if activated_account is not None:
64
+ echo(f' Activated account: {activated_account}')
65
+ if reason is not None:
66
+ echo(f' Hint: {reason}')
67
+ else:
68
+ disabled_clouds.setdefault(cloud_repr, []).append(capability)
69
+ echo(f' Reason: {reason}')
61
70
 
62
71
  def get_cloud_tuple(
63
72
  cloud_name: str) -> Tuple[str, Union[sky_clouds.Cloud, ModuleType]]:
@@ -99,33 +108,39 @@ def check(
99
108
  for cloud_tuple in sorted(clouds_to_check):
100
109
  check_one_cloud(cloud_tuple)
101
110
 
102
- # Cloudflare is not a real cloud in registry.CLOUD_REGISTRY, and should
103
- # not be inserted into the DB (otherwise `sky launch` and other code would
104
- # error out when it's trying to look it up in the registry).
105
- enabled_clouds_set = {
106
- cloud for cloud in enabled_clouds if not cloud.startswith('Cloudflare')
107
- }
108
- disabled_clouds_set = {
109
- cloud for cloud in disabled_clouds if not cloud.startswith('Cloudflare')
110
- }
111
- config_allowed_clouds_set = {
112
- cloud for cloud in config_allowed_cloud_names
113
- if not cloud.startswith('Cloudflare')
114
- }
115
- previously_enabled_clouds_set = {
116
- repr(cloud) for cloud in global_user_state.get_cached_enabled_clouds()
117
- }
118
-
119
111
  # Determine the set of enabled clouds: (previously enabled clouds + newly
120
112
  # enabled clouds - newly disabled clouds) intersected with
121
113
  # config_allowed_clouds, if specified in config.yaml.
122
114
  # This means that if a cloud is already enabled and is not included in
123
115
  # allowed_clouds in config.yaml, it will be disabled.
124
- all_enabled_clouds = (config_allowed_clouds_set & (
125
- (previously_enabled_clouds_set | enabled_clouds_set) -
126
- disabled_clouds_set))
127
- global_user_state.set_enabled_clouds(list(all_enabled_clouds))
128
-
116
+ all_enabled_clouds: Set[str] = set()
117
+ for capability in capabilities:
118
+ # Cloudflare is not a real cloud in registry.CLOUD_REGISTRY, and should
119
+ # not be inserted into the DB (otherwise `sky launch` and other code
120
+ # would error out when it's trying to look it up in the registry).
121
+ enabled_clouds_set = {
122
+ cloud for cloud, capabilities in enabled_clouds.items()
123
+ if capability in capabilities and not cloud.startswith('Cloudflare')
124
+ }
125
+ disabled_clouds_set = {
126
+ cloud for cloud, capabilities in disabled_clouds.items()
127
+ if capability in capabilities and not cloud.startswith('Cloudflare')
128
+ }
129
+ config_allowed_clouds_set = {
130
+ cloud for cloud in config_allowed_cloud_names
131
+ if not cloud.startswith('Cloudflare')
132
+ }
133
+ previously_enabled_clouds_set = {
134
+ repr(cloud)
135
+ for cloud in global_user_state.get_cached_enabled_clouds(capability)
136
+ }
137
+ enabled_clouds_for_capability = (config_allowed_clouds_set & (
138
+ (previously_enabled_clouds_set | enabled_clouds_set) -
139
+ disabled_clouds_set))
140
+ global_user_state.set_enabled_clouds(
141
+ list(enabled_clouds_for_capability), capability)
142
+ all_enabled_clouds = all_enabled_clouds.union(
143
+ enabled_clouds_for_capability)
129
144
  disallowed_clouds_hint = None
130
145
  if disallowed_cloud_names:
131
146
  disallowed_clouds_hint = (
@@ -160,8 +175,7 @@ def check(
160
175
  # Pretty print for UX.
161
176
  if not quiet:
162
177
  enabled_clouds_str = '\n ' + '\n '.join([
163
- _format_enabled_cloud(cloud)
164
- for cloud in sorted(all_enabled_clouds)
178
+ _format_enabled_cloud(cloud) for cloud in sorted(enabled_clouds)
165
179
  ])
166
180
  echo(f'\n{colorama.Fore.GREEN}{PARTY_POPPER_EMOJI} '
167
181
  f'Enabled clouds {PARTY_POPPER_EMOJI}'
@@ -169,7 +183,25 @@ def check(
169
183
  return enabled_clouds
170
184
 
171
185
 
186
+ # 'sky check' command and associated '/check' server endpoint
187
+ # only checks compute capability for backward compatibility.
188
+ # This necessitates setting default capability to CloudCapability.COMPUTE.
189
+ def check(
190
+ quiet: bool = False,
191
+ verbose: bool = False,
192
+ clouds: Optional[Iterable[str]] = None,
193
+ capability: sky_cloud.CloudCapability = sky_cloud.CloudCapability.COMPUTE,
194
+ ) -> List[str]:
195
+ clouds_with_capability = []
196
+ enabled_clouds = check_capabilities(quiet, verbose, clouds, [capability])
197
+ for cloud, capabilities in enabled_clouds.items():
198
+ if capability in capabilities:
199
+ clouds_with_capability.append(cloud)
200
+ return clouds_with_capability
201
+
202
+
172
203
  def get_cached_enabled_clouds_or_refresh(
204
+ capability: sky_cloud.CloudCapability,
173
205
  raise_if_no_cloud_access: bool = False) -> List[sky_clouds.Cloud]:
174
206
  """Returns cached enabled clouds and if no cloud is enabled, refresh.
175
207
 
@@ -183,16 +215,18 @@ def get_cached_enabled_clouds_or_refresh(
183
215
  exceptions.NoCloudAccessError: if no public cloud is enabled and
184
216
  raise_if_no_cloud_access is set to True.
185
217
  """
186
- cached_enabled_clouds = global_user_state.get_cached_enabled_clouds()
218
+ cached_enabled_clouds = global_user_state.get_cached_enabled_clouds(
219
+ capability)
187
220
  if not cached_enabled_clouds:
188
221
  try:
189
- check(quiet=True)
222
+ check(quiet=True, capability=capability)
190
223
  except SystemExit:
191
224
  # If no cloud is enabled, check() will raise SystemExit.
192
225
  # Here we catch it and raise the exception later only if
193
226
  # raise_if_no_cloud_access is set to True.
194
227
  pass
195
- cached_enabled_clouds = global_user_state.get_cached_enabled_clouds()
228
+ cached_enabled_clouds = global_user_state.get_cached_enabled_clouds(
229
+ capability)
196
230
  if raise_if_no_cloud_access and not cached_enabled_clouds:
197
231
  with ux_utils.print_exception_no_traceback():
198
232
  raise exceptions.NoCloudAccessError(
@@ -226,7 +260,7 @@ def get_cloud_credential_file_mounts(
226
260
  # Currently, get_cached_enabled_clouds_or_refresh() does not support r2 as
227
261
  # only clouds with computing instances are marked as enabled by skypilot.
228
262
  # This will be removed when cloudflare/r2 is added as a 'cloud'.
229
- r2_is_enabled, _ = cloudflare.check_credentials()
263
+ r2_is_enabled, _ = cloudflare.check_storage_credentials()
230
264
  if r2_is_enabled:
231
265
  r2_credential_mounts = cloudflare.get_credential_file_mounts()
232
266
  file_mounts.update(r2_credential_mounts)