skypilot-nightly 1.0.0.dev20250326__tar.gz → 1.0.0.dev20250327__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 (377) hide show
  1. {skypilot_nightly-1.0.0.dev20250326/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250327}/PKG-INFO +1 -1
  2. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/__init__.py +2 -2
  3. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/adaptors/gcp.py +7 -0
  4. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/authentication.py +4 -0
  5. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/backends/cloud_vm_ray_backend.py +26 -0
  6. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/cli.py +8 -2
  7. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/client/cli.py +8 -2
  8. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/client/sdk.py +4 -2
  9. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/do.py +5 -6
  10. skypilot_nightly-1.0.0.dev20250327/sky/clouds/service_catalog/data_fetchers/fetch_ibm.py +176 -0
  11. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/core.py +4 -2
  12. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/data/storage.py +3 -3
  13. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/exceptions.py +5 -0
  14. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/jobs/server/server.py +8 -2
  15. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/aws/utils.py +11 -10
  16. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/azure/config.py +1 -1
  17. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/kubernetes/utils.py +4 -1
  18. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/provisioner.py +4 -0
  19. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/requests/payloads.py +1 -0
  20. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/kubernetes/deploy_remote_cluster.sh +34 -11
  21. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/kubernetes/kubernetes_deploy_utils.py +4 -1
  22. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327/skypilot_nightly.egg-info}/PKG-INFO +1 -1
  23. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/skypilot_nightly.egg-info/SOURCES.txt +1 -0
  24. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/tests/test_cli.py +44 -0
  25. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/LICENSE +0 -0
  26. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/MANIFEST.in +0 -0
  27. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/README.md +0 -0
  28. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/pyproject.toml +0 -0
  29. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/setup.cfg +0 -0
  30. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/setup.py +0 -0
  31. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/adaptors/__init__.py +0 -0
  32. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/adaptors/aws.py +0 -0
  33. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/adaptors/azure.py +0 -0
  34. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/adaptors/cloudflare.py +0 -0
  35. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/adaptors/common.py +0 -0
  36. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/adaptors/cudo.py +0 -0
  37. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/adaptors/do.py +0 -0
  38. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/adaptors/docker.py +0 -0
  39. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/adaptors/ibm.py +0 -0
  40. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/adaptors/kubernetes.py +0 -0
  41. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/adaptors/nebius.py +0 -0
  42. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/adaptors/oci.py +0 -0
  43. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/adaptors/runpod.py +0 -0
  44. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/adaptors/vast.py +0 -0
  45. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/adaptors/vsphere.py +0 -0
  46. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/admin_policy.py +0 -0
  47. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/backends/__init__.py +0 -0
  48. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/backends/backend.py +0 -0
  49. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/backends/backend_utils.py +0 -0
  50. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/backends/docker_utils.py +0 -0
  51. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/backends/local_docker_backend.py +0 -0
  52. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  53. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/backends/wheel_utils.py +0 -0
  54. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/benchmark/__init__.py +0 -0
  55. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/benchmark/benchmark_state.py +0 -0
  56. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/benchmark/benchmark_utils.py +0 -0
  57. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/check.py +0 -0
  58. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/client/__init__.py +0 -0
  59. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/client/common.py +0 -0
  60. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/cloud_stores.py +0 -0
  61. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/__init__.py +0 -0
  62. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/aws.py +0 -0
  63. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/azure.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/cloud.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/cudo.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/fluidstack.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/gcp.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/ibm.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/kubernetes.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/lambda_cloud.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/nebius.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/oci.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/paperspace.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/runpod.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/scp.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/__init__.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/aws_catalog.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/azure_catalog.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/common.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/config.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/constants.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/data_fetchers/fetch_vast.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/do_catalog.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/kubernetes_catalog.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/nebius_catalog.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/oci_catalog.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/scp_catalog.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/vast_catalog.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/utils/__init__.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/utils/aws_utils.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/utils/azure_utils.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/utils/gcp_utils.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/utils/oci_utils.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/utils/scp_utils.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/vast.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/clouds/vsphere.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/dag.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/data/__init__.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/data/data_transfer.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/data/data_utils.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/data/mounting_utils.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/data/storage_utils.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/execution.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/global_user_state.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/jobs/__init__.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/jobs/client/__init__.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/jobs/client/sdk.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/jobs/constants.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/jobs/controller.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/jobs/dashboard/dashboard.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/jobs/dashboard/static/favicon.ico +0 -0
  128. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/jobs/dashboard/templates/index.html +0 -0
  129. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/jobs/recovery_strategy.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/jobs/scheduler.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/jobs/server/__init__.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/jobs/server/core.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/jobs/server/dashboard_utils.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/jobs/state.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/jobs/utils.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/models.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/optimizer.py +0 -0
  138. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/__init__.py +0 -0
  139. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/aws/__init__.py +0 -0
  140. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/aws/config.py +0 -0
  141. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/aws/instance.py +0 -0
  142. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/azure/__init__.py +0 -0
  143. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/azure/azure-config-template.json +0 -0
  144. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/azure/instance.py +0 -0
  145. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/common.py +0 -0
  146. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/constants.py +0 -0
  147. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/cudo/__init__.py +0 -0
  148. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/cudo/config.py +0 -0
  149. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/cudo/cudo_machine_type.py +0 -0
  150. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/cudo/cudo_utils.py +0 -0
  151. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/cudo/cudo_wrapper.py +0 -0
  152. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/cudo/instance.py +0 -0
  153. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/do/__init__.py +0 -0
  154. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/do/config.py +0 -0
  155. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/do/constants.py +0 -0
  156. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/do/instance.py +0 -0
  157. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/do/utils.py +0 -0
  158. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/docker_utils.py +0 -0
  159. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/fluidstack/__init__.py +0 -0
  160. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/fluidstack/config.py +0 -0
  161. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  162. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/fluidstack/instance.py +0 -0
  163. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/gcp/__init__.py +0 -0
  164. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/gcp/config.py +0 -0
  165. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/gcp/constants.py +0 -0
  166. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/gcp/instance.py +0 -0
  167. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/gcp/instance_utils.py +0 -0
  168. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/gcp/mig_utils.py +0 -0
  169. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/instance_setup.py +0 -0
  170. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/kubernetes/__init__.py +0 -0
  171. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/kubernetes/config.py +0 -0
  172. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/kubernetes/constants.py +0 -0
  173. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/kubernetes/instance.py +0 -0
  174. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
  175. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
  176. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/kubernetes/network.py +0 -0
  177. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/kubernetes/network_utils.py +0 -0
  178. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/lambda_cloud/__init__.py +0 -0
  179. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/lambda_cloud/config.py +0 -0
  180. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/lambda_cloud/instance.py +0 -0
  181. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  182. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/logging.py +0 -0
  183. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/metadata_utils.py +0 -0
  184. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/nebius/__init__.py +0 -0
  185. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/nebius/config.py +0 -0
  186. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/nebius/instance.py +0 -0
  187. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/nebius/utils.py +0 -0
  188. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/oci/__init__.py +0 -0
  189. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/oci/config.py +0 -0
  190. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/oci/instance.py +0 -0
  191. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/oci/query_utils.py +0 -0
  192. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/paperspace/__init__.py +0 -0
  193. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/paperspace/config.py +0 -0
  194. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/paperspace/constants.py +0 -0
  195. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/paperspace/instance.py +0 -0
  196. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/paperspace/utils.py +0 -0
  197. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/runpod/__init__.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/runpod/api/__init__.py +0 -0
  199. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/runpod/api/commands.py +0 -0
  200. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/runpod/api/pods.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/runpod/config.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/runpod/instance.py +0 -0
  203. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/runpod/utils.py +0 -0
  204. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vast/__init__.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vast/config.py +0 -0
  206. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vast/instance.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vast/utils.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vsphere/__init__.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vsphere/common/__init__.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vsphere/common/custom_script.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vsphere/common/id_generator.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vsphere/common/service_manager.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  219. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vsphere/common/vim_utils.py +0 -0
  220. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vsphere/config.py +0 -0
  221. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vsphere/instance.py +0 -0
  222. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/provision/vsphere/vsphere_utils.py +0 -0
  223. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/resources.py +0 -0
  224. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/serve/__init__.py +0 -0
  225. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/serve/autoscalers.py +0 -0
  226. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/serve/client/__init__.py +0 -0
  227. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/serve/client/sdk.py +0 -0
  228. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/serve/constants.py +0 -0
  229. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/serve/controller.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/serve/load_balancer.py +0 -0
  231. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/serve/load_balancing_policies.py +0 -0
  232. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/serve/replica_managers.py +0 -0
  233. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/serve/serve_state.py +0 -0
  234. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/serve/serve_utils.py +0 -0
  235. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/serve/server/__init__.py +0 -0
  236. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/serve/server/core.py +0 -0
  237. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/serve/server/server.py +0 -0
  238. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/serve/service.py +0 -0
  239. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/serve/service_spec.py +0 -0
  240. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/__init__.py +0 -0
  241. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/common.py +0 -0
  242. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/constants.py +0 -0
  243. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/html/log.html +0 -0
  244. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/requests/__init__.py +0 -0
  245. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/requests/event_loop.py +0 -0
  246. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/requests/executor.py +0 -0
  247. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/requests/preconditions.py +0 -0
  248. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/requests/queues/__init__.py +0 -0
  249. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/requests/queues/mp_queue.py +0 -0
  250. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/requests/requests.py +0 -0
  251. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/requests/serializers/__init__.py +0 -0
  252. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/requests/serializers/decoders.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/requests/serializers/encoders.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/server.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/stream_utils.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/server/uvicorn.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/setup_files/MANIFEST.in +0 -0
  258. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/setup_files/dependencies.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/setup_files/setup.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/sky_logging.py +0 -0
  261. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/LICENSE +0 -0
  262. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/__init__.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/attempt_skylet.py +0 -0
  264. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/autostop_lib.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/configs.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/constants.py +0 -0
  267. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/events.py +0 -0
  268. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/job_lib.py +0 -0
  269. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/log_lib.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/log_lib.pyi +0 -0
  271. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/providers/__init__.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/providers/command_runner.py +0 -0
  273. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/providers/ibm/__init__.py +0 -0
  274. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/providers/ibm/node_provider.py +0 -0
  275. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/providers/ibm/utils.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  277. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/providers/scp/__init__.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/providers/scp/config.py +0 -0
  279. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/providers/scp/node_provider.py +0 -0
  280. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/ray_patches/__init__.py +0 -0
  281. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  282. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/ray_patches/cli.py.patch +0 -0
  283. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  284. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  285. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  286. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/ray_patches/updater.py.patch +0 -0
  287. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/ray_patches/worker.py.patch +0 -0
  288. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/skylet.py +0 -0
  289. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skylet/subprocess_daemon.py +0 -0
  290. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/skypilot_config.py +0 -0
  291. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/task.py +0 -0
  292. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/aws-ray.yml.j2 +0 -0
  293. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/azure-ray.yml.j2 +0 -0
  294. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/cudo-ray.yml.j2 +0 -0
  295. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/do-ray.yml.j2 +0 -0
  296. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  297. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/gcp-ray.yml.j2 +0 -0
  298. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/ibm-ray.yml.j2 +0 -0
  299. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/jobs-controller.yaml.j2 +0 -0
  300. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  301. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  302. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  303. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  304. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  305. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/lambda-ray.yml.j2 +0 -0
  306. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/local-ray.yml.j2 +0 -0
  307. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/nebius-ray.yml.j2 +0 -0
  308. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/oci-ray.yml.j2 +0 -0
  309. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/paperspace-ray.yml.j2 +0 -0
  310. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/runpod-ray.yml.j2 +0 -0
  311. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/scp-ray.yml.j2 +0 -0
  312. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  313. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
  314. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/vast-ray.yml.j2 +0 -0
  315. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/vsphere-ray.yml.j2 +0 -0
  316. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/templates/websocket_proxy.py +0 -0
  317. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/usage/__init__.py +0 -0
  318. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/usage/constants.py +0 -0
  319. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/usage/usage_lib.py +0 -0
  320. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/__init__.py +0 -0
  321. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/accelerator_registry.py +0 -0
  322. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/admin_policy_utils.py +0 -0
  323. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/annotations.py +0 -0
  324. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/cli_utils/__init__.py +0 -0
  325. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/cli_utils/status_utils.py +0 -0
  326. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/cluster_utils.py +0 -0
  327. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/command_runner.py +0 -0
  328. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/command_runner.pyi +0 -0
  329. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/common.py +0 -0
  330. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/common_utils.py +0 -0
  331. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/config_utils.py +0 -0
  332. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/control_master_utils.py +0 -0
  333. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/controller_utils.py +0 -0
  334. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/dag_utils.py +0 -0
  335. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/db_utils.py +0 -0
  336. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/env_options.py +0 -0
  337. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/kubernetes/__init__.py +0 -0
  338. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/kubernetes/create_cluster.sh +0 -0
  339. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  340. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/kubernetes/exec_kubeconfig_converter.py +0 -0
  341. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  342. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  343. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  344. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  345. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  346. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  347. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  348. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/kubernetes_enums.py +0 -0
  349. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/log_utils.py +0 -0
  350. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/message_utils.py +0 -0
  351. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/registry.py +0 -0
  352. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/resources_utils.py +0 -0
  353. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/rich_console_utils.py +0 -0
  354. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/rich_utils.py +0 -0
  355. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/schemas.py +0 -0
  356. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/status_lib.py +0 -0
  357. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/subprocess_utils.py +0 -0
  358. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/timeline.py +0 -0
  359. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/ux_utils.py +0 -0
  360. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/sky/utils/validator.py +0 -0
  361. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  362. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  363. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/skypilot_nightly.egg-info/requires.txt +0 -0
  364. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/skypilot_nightly.egg-info/top_level.txt +0 -0
  365. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/tests/test_api.py +0 -0
  366. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/tests/test_config.py +0 -0
  367. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/tests/test_global_user_state.py +0 -0
  368. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/tests/test_jobs.py +0 -0
  369. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/tests/test_jobs_and_serve.py +0 -0
  370. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/tests/test_list_accelerators.py +0 -0
  371. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/tests/test_optimizer_dryruns.py +0 -0
  372. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/tests/test_optimizer_random_dag.py +0 -0
  373. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/tests/test_serve_autoscaler.py +0 -0
  374. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/tests/test_smoke.py +0 -0
  375. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/tests/test_storage.py +0 -0
  376. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/tests/test_wheels.py +0 -0
  377. {skypilot_nightly-1.0.0.dev20250326 → skypilot_nightly-1.0.0.dev20250327}/tests/test_yaml_parser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250326
3
+ Version: 1.0.0.dev20250327
4
4
  Summary: SkyPilot: An intercloud broker for the clouds
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -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 = '4f8721ab403668198ffd61297874c4c365e642b7'
8
+ _SKYPILOT_COMMIT_SHA = '3618e2b85057a16b6b8204fd69d450faf4eb9dd2'
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.dev20250326'
38
+ __version__ = '1.0.0.dev20250327'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -68,6 +68,13 @@ def credential_error_exception():
68
68
  return exceptions.DefaultCredentialsError
69
69
 
70
70
 
71
+ @common.load_lazy_modules(_LAZY_MODULES)
72
+ def auth_error_exception():
73
+ """GoogleAuthError exception."""
74
+ from google.auth import exceptions
75
+ return exceptions.GoogleAuthError
76
+
77
+
71
78
  @common.load_lazy_modules(_LAZY_MODULES)
72
79
  def gcp_auth_refresh_error_exception():
73
80
  """GCP auth refresh error exception."""
@@ -33,6 +33,7 @@ import colorama
33
33
  import filelock
34
34
 
35
35
  from sky import clouds
36
+ from sky import exceptions
36
37
  from sky import sky_logging
37
38
  from sky import skypilot_config
38
39
  from sky.adaptors import common as adaptors_common
@@ -214,6 +215,9 @@ def setup_gcp_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
214
215
  sys.exit(1)
215
216
  else:
216
217
  raise
218
+ except gcp.auth_error_exception() as e:
219
+ raise exceptions.InvalidCloudCredentials(
220
+ f'{common_utils.format_exception(e)}')
217
221
  except socket.timeout:
218
222
  logger.error('Socket timed out when trying to get the GCP project. '
219
223
  'Please check your network connection.')
@@ -1089,6 +1089,21 @@ class FailoverCloudErrorHandlerV2:
1089
1089
  FailoverCloudErrorHandlerV2._default_handler(
1090
1090
  blocked_resources, launchable_resources, region, zones, error)
1091
1091
 
1092
+ @staticmethod
1093
+ def _aws_handler(blocked_resources: Set['resources_lib.Resources'],
1094
+ launchable_resources: 'resources_lib.Resources',
1095
+ region: 'clouds.Region',
1096
+ zones: Optional[List['clouds.Zone']],
1097
+ error: Exception) -> None:
1098
+ logger.info(f'AWS handler error: {error}')
1099
+ # Block AWS if the credential has expired.
1100
+ if isinstance(error, exceptions.InvalidCloudCredentials):
1101
+ _add_to_blocked_resources(
1102
+ blocked_resources, resources_lib.Resources(cloud=clouds.AWS()))
1103
+ else:
1104
+ FailoverCloudErrorHandlerV2._default_handler(
1105
+ blocked_resources, launchable_resources, region, zones, error)
1106
+
1092
1107
  @staticmethod
1093
1108
  def _default_handler(blocked_resources: Set['resources_lib.Resources'],
1094
1109
  launchable_resources: 'resources_lib.Resources',
@@ -1419,6 +1434,17 @@ class RetryingVmProvisioner(object):
1419
1434
  # does not have nodes labeled with GPU types.
1420
1435
  logger.info(f'{e}')
1421
1436
  continue
1437
+ except exceptions.InvalidCloudCredentials as e:
1438
+ # Failed due to invalid cloud credentials.
1439
+ logger.warning(f'{common_utils.format_exception(e)}')
1440
+ # We should block the entire cloud for invalid cloud credentials
1441
+ _add_to_blocked_resources(
1442
+ self._blocked_resources,
1443
+ to_provision.copy(region=None, zone=None))
1444
+ raise exceptions.ResourcesUnavailableError(
1445
+ f'Failed to provision on cloud {to_provision.cloud} due to '
1446
+ f'invalid cloud credentials: '
1447
+ f'{common_utils.format_exception(e)}')
1422
1448
  except exceptions.InvalidCloudConfigs as e:
1423
1449
  # Failed due to invalid user configs in ~/.sky/config.yaml.
1424
1450
  logger.warning(f'{common_utils.format_exception(e)}')
@@ -5455,11 +5455,17 @@ def local():
5455
5455
  type=str,
5456
5456
  required=False,
5457
5457
  help='Name to use for the kubeconfig context. Defaults to "default".')
5458
+ @click.option('--password',
5459
+ type=str,
5460
+ required=False,
5461
+ help='Password for the ssh-user to execute sudo commands. '
5462
+ 'Required only if passwordless sudo is not setup.')
5458
5463
  @local.command('up', cls=_DocumentedCodeCommand)
5459
5464
  @_add_click_options(_COMMON_OPTIONS)
5460
5465
  @usage_lib.entrypoint
5461
5466
  def local_up(gpus: bool, ips: str, ssh_user: str, ssh_key_path: str,
5462
- cleanup: bool, context_name: Optional[str], async_call: bool):
5467
+ cleanup: bool, context_name: Optional[str],
5468
+ password: Optional[str], async_call: bool):
5463
5469
  """Creates a local or remote cluster."""
5464
5470
 
5465
5471
  def _validate_args(ips, ssh_user, ssh_key_path, cleanup):
@@ -5505,7 +5511,7 @@ def local_up(gpus: bool, ips: str, ssh_user: str, ssh_key_path: str,
5505
5511
  f'Failed to read SSH key file {ssh_key_path}: {str(e)}')
5506
5512
 
5507
5513
  request_id = sdk.local_up(gpus, ip_list, ssh_user, ssh_key, cleanup,
5508
- context_name)
5514
+ context_name, password)
5509
5515
  _async_call_or_wait(request_id, async_call, request_name='local up')
5510
5516
 
5511
5517
 
@@ -5455,11 +5455,17 @@ def local():
5455
5455
  type=str,
5456
5456
  required=False,
5457
5457
  help='Name to use for the kubeconfig context. Defaults to "default".')
5458
+ @click.option('--password',
5459
+ type=str,
5460
+ required=False,
5461
+ help='Password for the ssh-user to execute sudo commands. '
5462
+ 'Required only if passwordless sudo is not setup.')
5458
5463
  @local.command('up', cls=_DocumentedCodeCommand)
5459
5464
  @_add_click_options(_COMMON_OPTIONS)
5460
5465
  @usage_lib.entrypoint
5461
5466
  def local_up(gpus: bool, ips: str, ssh_user: str, ssh_key_path: str,
5462
- cleanup: bool, context_name: Optional[str], async_call: bool):
5467
+ cleanup: bool, context_name: Optional[str],
5468
+ password: Optional[str], async_call: bool):
5463
5469
  """Creates a local or remote cluster."""
5464
5470
 
5465
5471
  def _validate_args(ips, ssh_user, ssh_key_path, cleanup):
@@ -5505,7 +5511,7 @@ def local_up(gpus: bool, ips: str, ssh_user: str, ssh_key_path: str,
5505
5511
  f'Failed to read SSH key file {ssh_key_path}: {str(e)}')
5506
5512
 
5507
5513
  request_id = sdk.local_up(gpus, ip_list, ssh_user, ssh_key, cleanup,
5508
- context_name)
5514
+ context_name, password)
5509
5515
  _async_call_or_wait(request_id, async_call, request_name='local up')
5510
5516
 
5511
5517
 
@@ -1295,7 +1295,8 @@ def local_up(gpus: bool,
1295
1295
  ssh_user: Optional[str],
1296
1296
  ssh_key: Optional[str],
1297
1297
  cleanup: bool,
1298
- context_name: Optional[str] = None) -> server_common.RequestId:
1298
+ context_name: Optional[str] = None,
1299
+ password: Optional[str] = None) -> server_common.RequestId:
1299
1300
  """Launches a Kubernetes cluster on local machines.
1300
1301
 
1301
1302
  Returns:
@@ -1314,7 +1315,8 @@ def local_up(gpus: bool,
1314
1315
  ssh_user=ssh_user,
1315
1316
  ssh_key=ssh_key,
1316
1317
  cleanup=cleanup,
1317
- context_name=context_name)
1318
+ context_name=context_name,
1319
+ password=password)
1318
1320
  response = requests.post(f'{server_common.get_server_url()}/local_up',
1319
1321
  json=json.loads(body.model_dump_json()))
1320
1322
  return server_common.get_request_id(response)
@@ -1,6 +1,7 @@
1
1
  """ Digital Ocean Cloud. """
2
2
 
3
3
  import json
4
+ import os
4
5
  import typing
5
6
  from typing import Dict, Iterator, List, Optional, Tuple, Union
6
7
 
@@ -279,13 +280,11 @@ class DO(clouds.Cloud):
279
280
  return True, None
280
281
 
281
282
  def get_credential_file_mounts(self) -> Dict[str, str]:
282
- try:
283
- do_utils.client()
284
- return {
285
- f'~/.config/doctl/{_CREDENTIAL_FILE}': do_utils.CREDENTIALS_PATH
286
- }
287
- except do_utils.DigitalOceanError:
283
+ if not os.path.exists(os.path.expanduser(do_utils.CREDENTIALS_PATH)):
288
284
  return {}
285
+ return {
286
+ f'~/.config/doctl/{_CREDENTIAL_FILE}': do_utils.CREDENTIALS_PATH
287
+ }
289
288
 
290
289
  @classmethod
291
290
  def get_current_user_identity(cls) -> Optional[List[str]]:
@@ -0,0 +1,176 @@
1
+ """A script that generates the Lambda Cloud catalog.
2
+
3
+ Usage:
4
+ python fetch_ibm.py [-h] [--api-key API_KEY]
5
+ [--api-key-path API_KEY_PATH]
6
+
7
+ If neither --api-key nor --api-key-path are provided, this script will parse
8
+ `~/.ibm/credentials.yaml` to look for IBM API key (`iam_api_key`).
9
+ """
10
+ import argparse
11
+ import csv
12
+ from datetime import datetime
13
+ import json
14
+ import os
15
+ from typing import Dict, List, Optional, Tuple
16
+
17
+ import requests
18
+ import yaml
19
+
20
+ TOKEN_ENDPOINT = 'https://iam.cloud.ibm.com/identity/token'
21
+ REGIONS_ENDPOINT = f'https://us-south.iaas.cloud.ibm.com/v1/regions?version={datetime.today().strftime("%Y-%m-%d")}&generation=2' # pylint: disable=line-too-long
22
+ ENDPOINT = 'https://cloud.lambdalabs.com/api/v1/instance-types'
23
+ DEFAULT_IBM_CREDENTIALS_PATH = os.path.expanduser('~/.ibm/credentials.yaml')
24
+
25
+
26
+ def _fetch_token(api_key: Optional[str] = None,
27
+ api_key_path: Optional[str] = None,
28
+ ibm_token: Optional[str] = None) -> str:
29
+ if ibm_token is None:
30
+ if api_key is None:
31
+ if api_key_path is None:
32
+ api_key_path = DEFAULT_IBM_CREDENTIALS_PATH
33
+ with open(api_key_path, mode='r', encoding='utf-8') as f:
34
+ ibm_cred_yaml = yaml.safe_load(f)
35
+ api_key = ibm_cred_yaml['iam_api_key']
36
+
37
+ headers = {
38
+ 'Accept': 'application/json',
39
+ }
40
+ data = {
41
+ 'grant_type': 'urn:ibm:params:oauth:grant-type:apikey',
42
+ 'apikey': api_key,
43
+ }
44
+ response = requests.post(url=TOKEN_ENDPOINT, data=data, headers=headers)
45
+ return response.json()['access_token']
46
+ else:
47
+ return ibm_token
48
+
49
+
50
+ def _fetch_regions(ibm_token: str) -> List[str]:
51
+ headers = {
52
+ 'Authorization': f'Bearer {ibm_token}',
53
+ 'Accept': 'application/json',
54
+ }
55
+ response = requests.get(url=REGIONS_ENDPOINT, headers=headers)
56
+ regions_json = response.json()
57
+
58
+ regions = [r['name'] for r in regions_json['regions']]
59
+
60
+ print(f'regions: {regions}')
61
+ return regions
62
+
63
+
64
+ def _fetch_instance_profiles(regions: List[str],
65
+ ibm_token: str) -> Dict[str, Tuple[List, List]]:
66
+ """Fetch instance profiles by region (map):
67
+ {
68
+ "region_name": (
69
+ [list of available zones in the region],
70
+ [list of available instance profiles in the region]
71
+ )
72
+ }
73
+ """
74
+ d = datetime.today().strftime('%Y-%m-%d')
75
+
76
+ result = {}
77
+ headers = {
78
+ 'Authorization': f'Bearer {ibm_token}',
79
+ 'Accept': 'application/json',
80
+ }
81
+ for r in regions:
82
+ az_endpoint = f'https://{r}.iaas.cloud.ibm.com/v1/regions/{r}/zones?version={d}&generation=2' # pylint: disable=line-too-long
83
+ az_response = requests.get(url=az_endpoint, headers=headers)
84
+ az_response_json = az_response.json()
85
+ zones = [a['name'] for a in az_response_json['zones']]
86
+ print(f'Fetching instance profiles for region {r}, zones {zones}')
87
+
88
+ instances_endpoint = f'https://{r}.iaas.cloud.ibm.com/v1/instance/profiles?version={d}&generation=2' # pylint: disable=line-too-long
89
+ instance_response = requests.get(url=instances_endpoint,
90
+ headers=headers)
91
+ instance_response_json = instance_response.json()
92
+ instance_profiles = instance_response_json['profiles']
93
+ result[r] = (zones, instance_profiles)
94
+
95
+ return result
96
+
97
+
98
+ def create_catalog(region_profile: Dict[str, Tuple[List, List]],
99
+ output_path: str) -> None:
100
+ print(f'Create catalog file {output_path} based on the fetched profiles')
101
+ with open(output_path, mode='w', encoding='utf-8') as f:
102
+ writer = csv.writer(f, delimiter=',', quotechar='"')
103
+ writer.writerow([
104
+ 'InstanceType', 'AcceleratorName', 'AcceleratorCount', 'vCPUs',
105
+ 'MemoryGiB', 'GpuInfo', 'Price', 'SpotPrice', 'Region',
106
+ 'AvailabilityZone'
107
+ ])
108
+
109
+ for region, (zones, profiles) in region_profile.items():
110
+ print(f' adding region {region} instances')
111
+ for profile in profiles:
112
+ vm = profile['name']
113
+ gpu: Optional[str] = None
114
+ gpu_cnt: Optional[int] = None
115
+ gpu_manufacturer: Optional[str] = None
116
+ gpu_memory: Optional[int] = None
117
+ if 'gpu_model' in profile:
118
+ gpu = profile['gpu_model']['values'][0]
119
+ if 'gpu_count' in profile:
120
+ gpu_cnt = int(profile['gpu_count']['value'])
121
+ if 'vcpu_count' in profile:
122
+ vcpus = int(profile['vcpu_count']['value'])
123
+ if 'memory' in profile:
124
+ mem = int(profile['memory']['value'])
125
+ if 'gpu_memory' in profile:
126
+ gpu_memory = int(profile['gpu_memory']['value'])
127
+ if 'gpu_manufacturer' in profile:
128
+ gpu_manufacturer = profile['gpu_manufacturer']['values'][0]
129
+ # TODO: How to fetch prices?
130
+ # The pricing API doesn't return prices for instance.profile. # pylint: disable=line-too-long
131
+ # https://cloud.ibm.com/docs/account?topic=account-getting-pricing-api # pylint: disable=line-too-long
132
+ # https://globalcatalog.cloud.ibm.com/api/v1?q=kind:instance.profile # pylint: disable=line-too-long
133
+ # https://globalcatalog.cloud.ibm.com/api/v1/gx2-16x128x1v100/plan # pylint: disable=line-too-long
134
+ price = 0.0
135
+ gpuinfo: Optional[str] = None
136
+ gpu_memory_mb: Optional[int] = None
137
+ gpu_memory_total_mb: Optional[int] = None
138
+ if gpu_memory is not None:
139
+ gpu_memory_mb = gpu_memory * 1024
140
+ if gpu_cnt is not None:
141
+ gpu_memory_total_mb = gpu_memory_mb * gpu_cnt
142
+ # gpuinfo: Optional[str] = None
143
+ if gpu is not None:
144
+ gpuinfo_dict = {
145
+ 'Gpus': [{
146
+ 'Name': gpu,
147
+ 'Manufacturer': gpu_manufacturer,
148
+ 'Count': gpu_cnt,
149
+ 'MemoryInfo': {
150
+ 'SizeInMiB': gpu_memory_mb
151
+ },
152
+ }],
153
+ 'TotalGpuMemoryInMiB': gpu_memory_total_mb
154
+ }
155
+ gpuinfo = json.dumps(gpuinfo_dict).replace('"', "'") # pylint: disable=inconsistent-quotes,invalid-string-quote
156
+
157
+ for zone in zones:
158
+ writer.writerow([
159
+ vm, gpu, gpu_cnt, vcpus, mem, gpuinfo, price, '',
160
+ region, zone
161
+ ])
162
+
163
+
164
+ if __name__ == '__main__':
165
+ parser = argparse.ArgumentParser()
166
+ parser.add_argument('--api-key', help='IBM API key.')
167
+ parser.add_argument('--api-key-path',
168
+ help='path of file containing IBM Credentials.')
169
+ args = parser.parse_args()
170
+ os.makedirs('ibm', exist_ok=True)
171
+ call_token = _fetch_token()
172
+ call_regions = _fetch_regions(call_token)
173
+ region_profiles_map = _fetch_instance_profiles(regions=call_regions,
174
+ ibm_token=call_token)
175
+ create_catalog(region_profiles_map, 'ibm/vms.csv')
176
+ print('IBM Cloud catalog saved to ibm/vms.csv')
@@ -1063,7 +1063,8 @@ def local_up(gpus: bool,
1063
1063
  ssh_user: Optional[str],
1064
1064
  ssh_key: Optional[str],
1065
1065
  cleanup: bool,
1066
- context_name: Optional[str] = None) -> None:
1066
+ context_name: Optional[str] = None,
1067
+ password: Optional[str] = None) -> None:
1067
1068
  """Creates a local or remote cluster."""
1068
1069
 
1069
1070
  def _validate_args(ips, ssh_user, ssh_key, cleanup):
@@ -1089,7 +1090,8 @@ def local_up(gpus: bool,
1089
1090
  if ips:
1090
1091
  assert ssh_user is not None and ssh_key is not None
1091
1092
  kubernetes_deploy_utils.deploy_remote_cluster(ips, ssh_user, ssh_key,
1092
- cleanup, context_name)
1093
+ cleanup, context_name,
1094
+ password)
1093
1095
  else:
1094
1096
  # Run local deployment (kind) if no remote args are specified
1095
1097
  kubernetes_deploy_utils.deploy_local_cluster(gpus)
@@ -203,7 +203,7 @@ class StoreType(enum.Enum):
203
203
  return 'oci://'
204
204
  # Nebius storages use 's3://' as a prefix for various aws cli commands
205
205
  elif self == StoreType.NEBIUS:
206
- return 's3://'
206
+ return 'nebius://'
207
207
  else:
208
208
  with ux_utils.print_exception_no_traceback():
209
209
  raise ValueError(f'Unknown store type: {self}')
@@ -4888,8 +4888,8 @@ class NebiusStore(AbstractStore):
4888
4888
  raise exceptions.StorageBucketGetError(
4889
4889
  'Attempted to use a non-existent bucket as a source: '
4890
4890
  f'{self.source}. Consider using `aws s3 ls '
4891
- f'{self.source} --endpoint={endpoint_url}`'
4892
- f'--profile={nebius.NEBIUS_PROFILE_NAME} to debug.')
4891
+ f's3://{self.name} --endpoint={endpoint_url}'
4892
+ f'--profile={nebius.NEBIUS_PROFILE_NAME}` to debug.')
4893
4893
 
4894
4894
  # If bucket cannot be found in both private and public settings,
4895
4895
  # the bucket is to be created by Sky. However, creation is skipped if
@@ -180,6 +180,11 @@ class InvalidCloudConfigs(Exception):
180
180
  pass
181
181
 
182
182
 
183
+ class InvalidCloudCredentials(Exception):
184
+ """Raised when the cloud credentials are invalid."""
185
+ pass
186
+
187
+
183
188
  class ProvisionPrechecksError(Exception):
184
189
  """Raised when a managed job fails prechecks before provision.
185
190
 
@@ -71,8 +71,14 @@ async def logs(
71
71
  request_name='jobs.logs',
72
72
  request_body=jobs_logs_body,
73
73
  func=core.tail_logs,
74
- schedule_type=api_requests.ScheduleType.SHORT
75
- if jobs_logs_body.refresh else api_requests.ScheduleType.LONG,
74
+ # TODO(aylei): We have tail logs scheduled as SHORT request, because it
75
+ # should be responsive. However, it can be long running if the user's
76
+ # job keeps running, and we should avoid it taking the SHORT worker
77
+ # indefinitely.
78
+ # When refresh is True we schedule it as LONG because a controller
79
+ # restart might be needed.
80
+ schedule_type=api_requests.ScheduleType.LONG
81
+ if jobs_logs_body.refresh else api_requests.ScheduleType.SHORT,
76
82
  request_cluster_name=common.JOB_CONTROLLER_NAME,
77
83
  )
78
84
  request_task = api_requests.get_request(request.state.request_id)
@@ -1,6 +1,7 @@
1
1
  """Utils for AWS provisioner."""
2
2
  import colorama
3
3
 
4
+ from sky import exceptions
4
5
  from sky import sky_logging
5
6
 
6
7
  logger = sky_logging.init_logger(__name__)
@@ -24,18 +25,17 @@ def handle_boto_error(exc: Exception, msg: str) -> None:
24
25
  generic_message = (f'{msg}\nError code: {colorama.Style.BRIGHT}{error_code}'
25
26
  f'{colorama.Style.RESET_ALL}')
26
27
 
27
- # apparently
28
- # ExpiredTokenException
29
- # ExpiredToken
30
- # RequestExpired
31
- # are all the same pretty much
32
- credentials_expiration_codes = [
28
+ # For invalid credentials, like expired tokens or
29
+ # invalid tokens, raise InvalidCloudCredentials exception
30
+ invalid_credentials_codes = [
33
31
  'ExpiredTokenException',
34
32
  'ExpiredToken',
35
33
  'RequestExpired',
34
+ 'InvalidClientTokenId',
35
+ 'InvalidClientToken',
36
36
  ]
37
37
 
38
- if error_code in credentials_expiration_codes:
38
+ if error_code in invalid_credentials_codes:
39
39
  # 'An error occurred (ExpiredToken) when calling the
40
40
  # GetInstanceProfile operation: The security token
41
41
  # included in the request is expired'
@@ -73,9 +73,10 @@ def handle_boto_error(exc: Exception, msg: str) -> None:
73
73
  f'{colorama.Style.RESET_ALL}\n'
74
74
  f'You can find a script that automates this at:'
75
75
  f'{aws_session_script_url}')
76
- # Do not re-raise the exception here because it looks awful
77
- # and we already print all the info in verbose
78
- raise SystemExit(1)
76
+ # Raise the InvalidCloudCredentials exception so that
77
+ # the provisioner can failover to other clouds
78
+ raise exceptions.InvalidCloudCredentials(
79
+ f'InvalidCloudCredentials: {generic_message}') from exc
79
80
 
80
81
  # todo: any other errors that we should catch separately?
81
82
 
@@ -120,7 +120,7 @@ def bootstrap_instances(
120
120
  except azure.exceptions().ClientAuthenticationError as e:
121
121
  message = (
122
122
  'Failed to authenticate with Azure. Please check your '
123
- 'Azure credentials. Error: '
123
+ 'Azure credentials. ClientAuthenticationError: '
124
124
  f'{common_utils.format_exception(e)}').replace('\n', ' ')
125
125
  logger.error(message)
126
126
  raise exceptions.NoClusterLaunchedError(message) from e
@@ -159,7 +159,10 @@ def _retry_on_error(max_retries=DEFAULT_MAX_RETRIES,
159
159
  # or 403 (Forbidden)
160
160
  if (isinstance(e, kubernetes.api_exception()) and
161
161
  e.status in (401, 403)):
162
- raise
162
+ # Raise KubeAPIUnreachableError exception so that the
163
+ # optimizer/provisioner can failover to other clouds.
164
+ raise exceptions.KubeAPIUnreachableError(
165
+ f'Kubernetes API error: {str(e)}') from e
163
166
  if attempt < max_retries - 1:
164
167
  sleep_time = backoff.current_backoff()
165
168
  logger.debug(f'Kubernetes API call {func.__name__} '
@@ -145,6 +145,10 @@ def bulk_provision(
145
145
  except exceptions.NoClusterLaunchedError:
146
146
  # Skip the teardown if the cluster was never launched.
147
147
  raise
148
+ except exceptions.InvalidCloudCredentials:
149
+ # Skip the teardown if the cloud config is expired and
150
+ # the provisioner should failover to other clouds.
151
+ raise
148
152
  except Exception: # pylint: disable=broad-except
149
153
  zone_str = 'all zones'
150
154
  if zones:
@@ -464,6 +464,7 @@ class LocalUpBody(RequestBody):
464
464
  ssh_key: Optional[str] = None
465
465
  cleanup: bool = False
466
466
  context_name: Optional[str] = None
467
+ password: Optional[str] = None
467
468
 
468
469
 
469
470
  class ServeTerminateReplicaBody(RequestBody):