skypilot-nightly 1.0.0.dev20241208__tar.gz → 1.0.0.dev20241210__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 (307) hide show
  1. {skypilot_nightly-1.0.0.dev20241208/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20241210}/PKG-INFO +1 -1
  2. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/__init__.py +2 -2
  3. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/runpod.py +11 -8
  4. skypilot_nightly-1.0.0.dev20241210/sky/provision/runpod/api/__init__.py +3 -0
  5. skypilot_nightly-1.0.0.dev20241210/sky/provision/runpod/api/commands.py +119 -0
  6. skypilot_nightly-1.0.0.dev20241210/sky/provision/runpod/api/pods.py +142 -0
  7. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/runpod/instance.py +4 -1
  8. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/runpod/utils.py +32 -18
  9. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/runpod-ray.yml.j2 +2 -0
  10. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210/skypilot_nightly.egg-info}/PKG-INFO +1 -1
  11. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/skypilot_nightly.egg-info/SOURCES.txt +3 -0
  12. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_smoke.py +72 -75
  13. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/LICENSE +0 -0
  14. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/MANIFEST.in +0 -0
  15. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/README.md +0 -0
  16. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/pyproject.toml +0 -0
  17. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/setup.cfg +0 -0
  18. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/setup.py +0 -0
  19. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/__init__.py +0 -0
  20. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/aws.py +0 -0
  21. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/azure.py +0 -0
  22. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/cloudflare.py +0 -0
  23. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/common.py +0 -0
  24. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/cudo.py +0 -0
  25. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/docker.py +0 -0
  26. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/gcp.py +0 -0
  27. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/ibm.py +0 -0
  28. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/kubernetes.py +0 -0
  29. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/oci.py +0 -0
  30. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/runpod.py +0 -0
  31. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/vsphere.py +0 -0
  32. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/admin_policy.py +0 -0
  33. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/authentication.py +0 -0
  34. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/backends/__init__.py +0 -0
  35. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/backends/backend.py +0 -0
  36. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/backends/backend_utils.py +0 -0
  37. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/backends/cloud_vm_ray_backend.py +0 -0
  38. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/backends/docker_utils.py +0 -0
  39. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/backends/local_docker_backend.py +0 -0
  40. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  41. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/backends/wheel_utils.py +0 -0
  42. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/benchmark/__init__.py +0 -0
  43. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/benchmark/benchmark_state.py +0 -0
  44. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/benchmark/benchmark_utils.py +0 -0
  45. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/check.py +0 -0
  46. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/cli.py +0 -0
  47. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/cloud_stores.py +0 -0
  48. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/__init__.py +0 -0
  49. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/aws.py +0 -0
  50. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/azure.py +0 -0
  51. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/cloud.py +0 -0
  52. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/cloud_registry.py +0 -0
  53. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/cudo.py +0 -0
  54. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/fluidstack.py +0 -0
  55. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/gcp.py +0 -0
  56. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/ibm.py +0 -0
  57. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/kubernetes.py +0 -0
  58. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/lambda_cloud.py +0 -0
  59. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/oci.py +0 -0
  60. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/paperspace.py +0 -0
  61. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/scp.py +0 -0
  62. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/__init__.py +0 -0
  63. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/aws_catalog.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/azure_catalog.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/common.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/config.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/constants.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/kubernetes_catalog.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/oci_catalog.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/scp_catalog.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/utils/__init__.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/utils/aws_utils.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/utils/azure_utils.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/utils/gcp_utils.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/utils/oci_utils.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/utils/scp_utils.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/vsphere.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/core.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/dag.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/data/__init__.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/data/data_transfer.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/data/data_utils.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/data/mounting_utils.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/data/storage.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/data/storage_utils.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/exceptions.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/execution.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/global_user_state.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/__init__.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/constants.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/controller.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/core.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/dashboard/dashboard.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/dashboard/static/favicon.ico +0 -0
  111. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/dashboard/templates/index.html +0 -0
  112. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/recovery_strategy.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/state.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/utils.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/optimizer.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/__init__.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/aws/__init__.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/aws/config.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/aws/instance.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/aws/utils.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/azure/__init__.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/azure/azure-config-template.json +0 -0
  123. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/azure/config.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/azure/instance.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/common.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/constants.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/cudo/__init__.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/cudo/config.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/cudo/cudo_machine_type.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/cudo/cudo_utils.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/cudo/cudo_wrapper.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/cudo/instance.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/docker_utils.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/fluidstack/__init__.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/fluidstack/config.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/fluidstack/instance.py +0 -0
  138. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/gcp/__init__.py +0 -0
  139. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/gcp/config.py +0 -0
  140. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/gcp/constants.py +0 -0
  141. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/gcp/instance.py +0 -0
  142. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/gcp/instance_utils.py +0 -0
  143. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/gcp/mig_utils.py +0 -0
  144. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/instance_setup.py +0 -0
  145. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/kubernetes/__init__.py +0 -0
  146. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/kubernetes/config.py +0 -0
  147. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/kubernetes/instance.py +0 -0
  148. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
  149. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
  150. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/kubernetes/network.py +0 -0
  151. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/kubernetes/network_utils.py +0 -0
  152. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/kubernetes/utils.py +0 -0
  153. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/lambda_cloud/__init__.py +0 -0
  154. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/lambda_cloud/config.py +0 -0
  155. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/lambda_cloud/instance.py +0 -0
  156. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  157. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/logging.py +0 -0
  158. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/metadata_utils.py +0 -0
  159. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/oci/__init__.py +0 -0
  160. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/oci/config.py +0 -0
  161. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/oci/instance.py +0 -0
  162. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/oci/query_utils.py +0 -0
  163. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/paperspace/__init__.py +0 -0
  164. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/paperspace/config.py +0 -0
  165. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/paperspace/constants.py +0 -0
  166. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/paperspace/instance.py +0 -0
  167. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/paperspace/utils.py +0 -0
  168. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/provisioner.py +0 -0
  169. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/runpod/__init__.py +0 -0
  170. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/runpod/config.py +0 -0
  171. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/__init__.py +0 -0
  172. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/__init__.py +0 -0
  173. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  174. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  175. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/custom_script.py +0 -0
  176. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/id_generator.py +0 -0
  177. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  178. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/service_manager.py +0 -0
  179. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  180. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  181. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  182. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/vim_utils.py +0 -0
  183. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/config.py +0 -0
  184. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/instance.py +0 -0
  185. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/vsphere_utils.py +0 -0
  186. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/resources.py +0 -0
  187. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/__init__.py +0 -0
  188. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/autoscalers.py +0 -0
  189. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/constants.py +0 -0
  190. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/controller.py +0 -0
  191. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/core.py +0 -0
  192. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/load_balancer.py +0 -0
  193. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/load_balancing_policies.py +0 -0
  194. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/replica_managers.py +0 -0
  195. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/serve_state.py +0 -0
  196. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/serve_utils.py +0 -0
  197. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/service.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/service_spec.py +0 -0
  199. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/setup_files/MANIFEST.in +0 -0
  200. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/setup_files/dependencies.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/setup_files/setup.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/sky_logging.py +0 -0
  203. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/LICENSE +0 -0
  204. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/__init__.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/attempt_skylet.py +0 -0
  206. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/autostop_lib.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/configs.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/constants.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/events.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/job_lib.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/log_lib.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/log_lib.pyi +0 -0
  213. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/__init__.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/command_runner.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/ibm/__init__.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/ibm/node_provider.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/ibm/utils.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  219. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/scp/__init__.py +0 -0
  220. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/scp/config.py +0 -0
  221. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/scp/node_provider.py +0 -0
  222. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/ray_patches/__init__.py +0 -0
  223. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  224. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/ray_patches/cli.py.patch +0 -0
  225. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  226. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  227. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  228. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/ray_patches/updater.py.patch +0 -0
  229. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/ray_patches/worker.py.patch +0 -0
  230. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/skylet.py +0 -0
  231. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/subprocess_daemon.py +0 -0
  232. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skypilot_config.py +0 -0
  233. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/status_lib.py +0 -0
  234. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/task.py +0 -0
  235. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/aws-ray.yml.j2 +0 -0
  236. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/azure-ray.yml.j2 +0 -0
  237. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/cudo-ray.yml.j2 +0 -0
  238. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  239. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/gcp-ray.yml.j2 +0 -0
  240. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/ibm-ray.yml.j2 +0 -0
  241. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/jobs-controller.yaml.j2 +0 -0
  242. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  243. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  244. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  245. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  246. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  247. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/lambda-ray.yml.j2 +0 -0
  248. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/local-ray.yml.j2 +0 -0
  249. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/oci-ray.yml.j2 +0 -0
  250. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/paperspace-ray.yml.j2 +0 -0
  251. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/scp-ray.yml.j2 +0 -0
  252. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  253. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/vsphere-ray.yml.j2 +0 -0
  254. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/usage/__init__.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/usage/constants.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/usage/usage_lib.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/__init__.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/accelerator_registry.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/admin_policy_utils.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/cli_utils/__init__.py +0 -0
  261. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/cli_utils/status_utils.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/cluster_yaml_utils.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/command_runner.py +0 -0
  264. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/command_runner.pyi +0 -0
  265. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/common_utils.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/control_master_utils.py +0 -0
  267. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/controller_utils.py +0 -0
  268. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/dag_utils.py +0 -0
  269. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/db_utils.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/env_options.py +0 -0
  271. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/__init__.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/create_cluster.sh +0 -0
  273. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  274. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/deploy_remote_cluster.sh +0 -0
  275. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  277. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  279. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  280. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  281. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes_enums.py +0 -0
  283. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/log_utils.py +0 -0
  284. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/resources_utils.py +0 -0
  285. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/rich_utils.py +0 -0
  286. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/schemas.py +0 -0
  287. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/subprocess_utils.py +0 -0
  288. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/timeline.py +0 -0
  289. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/ux_utils.py +0 -0
  290. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/validator.py +0 -0
  291. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  292. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  293. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/skypilot_nightly.egg-info/requires.txt +0 -0
  294. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/skypilot_nightly.egg-info/top_level.txt +0 -0
  295. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_api.py +0 -0
  296. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_cli.py +0 -0
  297. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_config.py +0 -0
  298. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_global_user_state.py +0 -0
  299. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_jobs.py +0 -0
  300. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_jobs_and_serve.py +0 -0
  301. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_list_accelerators.py +0 -0
  302. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_optimizer_dryruns.py +0 -0
  303. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_optimizer_random_dag.py +0 -0
  304. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_serve_autoscaler.py +0 -0
  305. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_storage.py +0 -0
  306. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_wheels.py +0 -0
  307. {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_yaml_parser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20241208
3
+ Version: 1.0.0.dev20241210
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 = '84f09efc3ee86089b45e19a6c668b5d7161ef0f6'
8
+ _SKYPILOT_COMMIT_SHA = 'e0368888b6e64fd42cbafc698835b7aef0ce1a4c'
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.dev20241208'
38
+ __version__ = '1.0.0.dev20241210'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -24,8 +24,6 @@ class RunPod(clouds.Cloud):
24
24
  _REPR = 'RunPod'
25
25
  _CLOUD_UNSUPPORTED_FEATURES = {
26
26
  clouds.CloudImplementationFeatures.STOP: 'Stopping not supported.',
27
- clouds.CloudImplementationFeatures.SPOT_INSTANCE:
28
- ('Spot is not supported, as runpod API does not implement spot.'),
29
27
  clouds.CloudImplementationFeatures.MULTI_NODE:
30
28
  ('Multi-node not supported yet, as the interconnection among nodes '
31
29
  'are non-trivial on RunPod.'),
@@ -70,11 +68,8 @@ class RunPod(clouds.Cloud):
70
68
  zone: Optional[str]) -> List[clouds.Region]:
71
69
  assert zone is None, 'RunPod does not support zones.'
72
70
  del accelerators, zone # unused
73
- if use_spot:
74
- return []
75
- else:
76
- regions = service_catalog.get_region_zones_for_instance_type(
77
- instance_type, use_spot, 'runpod')
71
+ regions = service_catalog.get_region_zones_for_instance_type(
72
+ instance_type, use_spot, 'runpod')
78
73
 
79
74
  if region is not None:
80
75
  regions = [r for r in regions if r.name == region]
@@ -176,11 +171,19 @@ class RunPod(clouds.Cloud):
176
171
  else:
177
172
  image_id = r.image_id[r.region]
178
173
 
174
+ instance_type = resources.instance_type
175
+ use_spot = resources.use_spot
176
+
177
+ hourly_cost = self.instance_type_to_hourly_cost(
178
+ instance_type=instance_type, use_spot=use_spot)
179
+
179
180
  return {
180
- 'instance_type': resources.instance_type,
181
+ 'instance_type': instance_type,
181
182
  'custom_resources': custom_resources,
182
183
  'region': region.name,
183
184
  'image_id': image_id,
185
+ 'use_spot': use_spot,
186
+ 'bid_per_gpu': str(hourly_cost),
184
187
  }
185
188
 
186
189
  def _get_feasible_launchable_resources(
@@ -0,0 +1,3 @@
1
+ """RunPod low level API support for spot pod."""
2
+
3
+ from sky.provision.runpod.api.commands import create_spot_pod
@@ -0,0 +1,119 @@
1
+ """This module provides functions to generate GraphQL mutations for deploying
2
+ spot instance Pods on RunPod.
3
+
4
+ Reference:
5
+ https://github.com/runpod/runpod-python/blob/main/runpod/api/ctl_commands.py
6
+
7
+ Functions:
8
+ generate_spot_pod_deployment_mutation: Generates a GraphQL mutation string
9
+ for deploying a spot instance Pod on RunPod.
10
+
11
+ Example:
12
+ >>> mutation = generate_spot_pod_deployment_mutation(
13
+ name='test',
14
+ image_name='runpod/stack',
15
+ gpu_type_id='NVIDIA GeForce RTX 3070',
16
+ bid_per_gpu=0.3
17
+ )
18
+ """
19
+ from typing import List, Optional
20
+
21
+ from sky.adaptors import runpod
22
+ from sky.provision.runpod.api.pods import generate_spot_pod_deployment_mutation
23
+
24
+ _INTERRUPTABLE_POD_FIELD: str = 'podRentInterruptable'
25
+ _RESPONSE_DATA_FIELD: str = 'data'
26
+
27
+
28
+ def create_spot_pod(
29
+ name: str,
30
+ image_name: str,
31
+ gpu_type_id: str,
32
+ bid_per_gpu: float,
33
+ cloud_type: str = 'ALL',
34
+ volume_mount_path: str = '/runpod-volume',
35
+ gpu_count: Optional[int] = 1,
36
+ min_memory_in_gb: Optional[int] = 1,
37
+ min_vcpu_count: Optional[int] = 1,
38
+ container_disk_in_gb: Optional[int] = None,
39
+ volume_in_gb: Optional[int] = 0,
40
+ ports: Optional[str] = None,
41
+ start_ssh: Optional[bool] = True,
42
+ start_jupyter: Optional[bool] = False,
43
+ env: Optional[dict] = None,
44
+ docker_args: Optional[str] = '',
45
+ support_public_ip: Optional[bool] = True,
46
+ terminate_after: Optional[str] = None,
47
+ stop_after: Optional[str] = None,
48
+ data_center_id: Optional[str] = None,
49
+ country_code: Optional[str] = None,
50
+ network_volume_id: Optional[str] = None,
51
+ allowed_cuda_versions: Optional[List[str]] = None,
52
+ min_download: Optional[int] = None,
53
+ min_upload: Optional[int] = None,
54
+ cuda_version: Optional[str] = None,
55
+ template_id: Optional[str] = None,
56
+ volume_key: Optional[str] = None,
57
+ ) -> dict:
58
+ """This module provides functions to generate GraphQL mutations for
59
+ deploying spot instance Pods on RunPod.
60
+
61
+ Functions:
62
+ generate_spot_pod_deployment_mutation: Generates a GraphQL mutation
63
+ string for deploying a spot instance Pod on RunPod.
64
+
65
+ Example:
66
+ >>> mutation = generate_spot_pod_deployment_mutation(
67
+ name='test',
68
+ image_name='runpod/stack',
69
+ gpu_type_id='NVIDIA GeForce RTX 3070',
70
+ bid_per_gpu=0.3
71
+ )
72
+ """
73
+ runpod.runpod.get_gpu(gpu_type_id)
74
+ # refer to https://graphql-spec.runpod.io/#definition-CloudTypeEnum
75
+ if cloud_type not in ['ALL', 'COMMUNITY', 'SECURE']:
76
+ raise ValueError('cloud_type must be one of ALL, COMMUNITY or SECURE')
77
+
78
+ if network_volume_id and data_center_id is None:
79
+ user_info = runpod.runpod.get_user()
80
+ for network_volume in user_info['networkVolumes']:
81
+ if network_volume['id'] == network_volume_id:
82
+ data_center_id = network_volume['dataCenterId']
83
+ break
84
+
85
+ if container_disk_in_gb is None and template_id is None:
86
+ container_disk_in_gb = 10
87
+
88
+ mutation = generate_spot_pod_deployment_mutation(
89
+ name=name,
90
+ image_name=image_name,
91
+ gpu_type_id=gpu_type_id,
92
+ bid_per_gpu=bid_per_gpu,
93
+ cloud_type=cloud_type,
94
+ gpu_count=gpu_count,
95
+ min_memory_in_gb=min_memory_in_gb,
96
+ min_vcpu_count=min_vcpu_count,
97
+ container_disk_in_gb=container_disk_in_gb,
98
+ volume_in_gb=volume_in_gb,
99
+ volume_mount_path=volume_mount_path,
100
+ ports=ports,
101
+ start_ssh=start_ssh,
102
+ start_jupyter=start_jupyter,
103
+ env=env,
104
+ docker_args=docker_args,
105
+ support_public_ip=support_public_ip,
106
+ terminate_after=terminate_after,
107
+ stop_after=stop_after,
108
+ data_center_id=data_center_id,
109
+ country_code=country_code,
110
+ network_volume_id=network_volume_id,
111
+ allowed_cuda_versions=allowed_cuda_versions,
112
+ min_download=min_download,
113
+ min_upload=min_upload,
114
+ cuda_version=cuda_version,
115
+ template_id=template_id,
116
+ volume_key=volume_key,
117
+ )
118
+ response = runpod.runpod.api.graphql.run_graphql_query(mutation)
119
+ return response[_RESPONSE_DATA_FIELD][_INTERRUPTABLE_POD_FIELD]
@@ -0,0 +1,142 @@
1
+ """This module provides functions to generate GraphQL mutations for deploying
2
+ spot instance Pods on RunPod.
3
+
4
+ Reference:
5
+ https://github.com/runpod/runpod-python/blob/main/runpod/api/mutations/pods.py
6
+
7
+ Functions:
8
+ generate_spot_pod_deployment_mutation: Generates a GraphQL mutation string
9
+ for deploying a spot instance Pod on RunPod.
10
+ Example:
11
+ >>> mutation = generate_spot_pod_deployment_mutation(
12
+ name='test',
13
+ image_name='runpod/stack',
14
+ gpu_type_id='NVIDIA GeForce RTX 3070',
15
+ bid_per_gpu=0.3
16
+ )
17
+ """
18
+
19
+ from typing import List, Optional
20
+
21
+
22
+ # refer to https://graphql-spec.runpod.io/#definition-PodRentInterruptableInput
23
+ def generate_spot_pod_deployment_mutation(
24
+ name: str,
25
+ image_name: str,
26
+ gpu_type_id: str,
27
+ bid_per_gpu: float,
28
+ volume_mount_path: str,
29
+ cloud_type: str = 'ALL',
30
+ gpu_count: Optional[int] = None,
31
+ min_memory_in_gb: Optional[int] = None,
32
+ min_vcpu_count: Optional[int] = None,
33
+ container_disk_in_gb: Optional[int] = None,
34
+ volume_in_gb: Optional[int] = None,
35
+ ports: Optional[str] = None,
36
+ start_ssh: Optional[bool] = True,
37
+ start_jupyter: Optional[bool] = False,
38
+ env: Optional[dict] = None,
39
+ docker_args: Optional[str] = None,
40
+ support_public_ip: Optional[bool] = True,
41
+ terminate_after: Optional[str] = None,
42
+ stop_after: Optional[str] = None,
43
+ data_center_id: Optional[str] = None,
44
+ country_code: Optional[str] = None,
45
+ network_volume_id: Optional[str] = None,
46
+ allowed_cuda_versions: Optional[List[str]] = None,
47
+ min_download: Optional[int] = None,
48
+ min_upload: Optional[int] = None,
49
+ cuda_version: Optional[str] = None,
50
+ template_id: Optional[str] = None,
51
+ volume_key: Optional[str] = None,
52
+ ) -> str:
53
+ input_fields = []
54
+
55
+ # Required Fields
56
+ input_fields.append(f'name: "{name}"')
57
+ input_fields.append(f'imageName: "{image_name}"')
58
+ input_fields.append(f'gpuTypeId: "{gpu_type_id}"')
59
+ input_fields.append(f'bidPerGpu: {bid_per_gpu}')
60
+ input_fields.append(f'volumeMountPath: "{volume_mount_path}"')
61
+
62
+ # Default Fields
63
+ input_fields.append(f'cloudType: {cloud_type}')
64
+
65
+ if start_ssh:
66
+ input_fields.append('startSsh: true')
67
+ if start_jupyter:
68
+ input_fields.append('startJupyter: true')
69
+ if support_public_ip:
70
+ input_fields.append('supportPublicIp: true')
71
+ else:
72
+ input_fields.append('supportPublicIp: false')
73
+
74
+ # Optional Fields
75
+ if gpu_count is not None:
76
+ input_fields.append(f'gpuCount: {gpu_count}')
77
+ if min_memory_in_gb is not None:
78
+ input_fields.append(f'minMemoryInGb: {min_memory_in_gb}')
79
+ if min_vcpu_count is not None:
80
+ input_fields.append(f'minVcpuCount: {min_vcpu_count}')
81
+ if container_disk_in_gb is not None:
82
+ input_fields.append(f'containerDiskInGb: {container_disk_in_gb}')
83
+ if volume_in_gb is not None:
84
+ input_fields.append(f'volumeInGb: {volume_in_gb}')
85
+ if ports is not None:
86
+ ports = ports.replace(' ', '')
87
+ input_fields.append(f'ports: "{ports}"')
88
+ if docker_args is not None:
89
+ input_fields.append(f'dockerArgs: "{docker_args}"')
90
+ if terminate_after is not None:
91
+ input_fields.append(f'terminateAfter: "{terminate_after}"')
92
+ if stop_after is not None:
93
+ input_fields.append(f'stopAfter: "{stop_after}"')
94
+ if data_center_id is not None:
95
+ input_fields.append(f'dataCenterId: "{data_center_id}"')
96
+ if country_code is not None:
97
+ input_fields.append(f'countryCode: "{country_code}"')
98
+ if network_volume_id is not None:
99
+ input_fields.append(f'networkVolumeId: "{network_volume_id}"')
100
+ if allowed_cuda_versions is not None:
101
+ allowed_cuda_versions_string = ', '.join(
102
+ [f'"{version}"' for version in allowed_cuda_versions])
103
+ input_fields.append(
104
+ f'allowedCudaVersions: [{allowed_cuda_versions_string}]')
105
+ if min_download is not None:
106
+ input_fields.append(f'minDownload: {min_download}')
107
+ if min_upload is not None:
108
+ input_fields.append(f'minUpload: {min_upload}')
109
+ if cuda_version is not None:
110
+ input_fields.append(f'cudaVersion: "{cuda_version}"')
111
+ if template_id is not None:
112
+ input_fields.append(f'templateId: "{template_id}"')
113
+ if volume_key is not None:
114
+ input_fields.append(f'volumeKey: "{volume_key}"')
115
+
116
+ if env is not None:
117
+ env_string = ', '.join([
118
+ f'{{ key: "{key}", value: "{value}" }}'
119
+ for key, value in env.items()
120
+ ])
121
+ input_fields.append(f'env: [{env_string}]')
122
+
123
+ # Format input fields
124
+ input_string = ', '.join(input_fields)
125
+ return f"""
126
+ mutation {{
127
+ podRentInterruptable(
128
+ input: {{
129
+ {input_string}
130
+ }}
131
+ ) {{
132
+ id
133
+ desiredStatus
134
+ imageName
135
+ env
136
+ machineId
137
+ machine {{
138
+ podHostId
139
+ }}
140
+ }}
141
+ }}
142
+ """
@@ -89,7 +89,10 @@ def run_instances(region: str, cluster_name_on_cloud: str,
89
89
  disk_size=config.node_config['DiskSize'],
90
90
  image_name=config.node_config['ImageId'],
91
91
  ports=config.ports_to_open_on_launch,
92
- public_key=config.node_config['PublicKey'])
92
+ public_key=config.node_config['PublicKey'],
93
+ preemptible=config.node_config['Preemptible'],
94
+ bid_per_gpu=config.node_config['BidPerGPU'],
95
+ )
93
96
  except Exception as e: # pylint: disable=broad-except
94
97
  logger.warning(f'run_instances error: {e}')
95
98
  raise
@@ -6,6 +6,7 @@ from typing import Any, Dict, List, Optional
6
6
 
7
7
  from sky import sky_logging
8
8
  from sky.adaptors import runpod
9
+ import sky.provision.runpod.api.commands as runpod_commands
9
10
  from sky.skylet import constants
10
11
  from sky.utils import common_utils
11
12
 
@@ -100,7 +101,8 @@ def list_instances() -> Dict[str, Dict[str, Any]]:
100
101
 
101
102
 
102
103
  def launch(name: str, instance_type: str, region: str, disk_size: int,
103
- image_name: str, ports: Optional[List[int]], public_key: str) -> str:
104
+ image_name: str, ports: Optional[List[int]], public_key: str,
105
+ preemptible: Optional[bool], bid_per_gpu: float) -> str:
104
106
  """Launches an instance with the given parameters.
105
107
 
106
108
  Converts the instance_type to the RunPod GPU name, finds the specs for the
@@ -142,23 +144,35 @@ def launch(name: str, instance_type: str, region: str, disk_size: int,
142
144
  if ports is not None:
143
145
  custom_ports_str = ''.join([f'{p}/tcp,' for p in ports])
144
146
 
145
- new_instance = runpod.runpod.create_pod(
146
- name=name,
147
- image_name=image_name,
148
- gpu_type_id=gpu_type,
149
- cloud_type=cloud_type,
150
- container_disk_in_gb=disk_size,
151
- min_vcpu_count=4 * gpu_quantity,
152
- min_memory_in_gb=gpu_specs['memoryInGb'] * gpu_quantity,
153
- gpu_count=gpu_quantity,
154
- country_code=region,
155
- ports=(f'22/tcp,'
156
- f'{custom_ports_str}'
157
- f'{constants.SKY_REMOTE_RAY_DASHBOARD_PORT}/http,'
158
- f'{constants.SKY_REMOTE_RAY_PORT}/http'),
159
- support_public_ip=True,
160
- docker_args=
161
- f'bash -c \'echo {encoded} | base64 --decode > init.sh; bash init.sh\'')
147
+ docker_args = (f'bash -c \'echo {encoded} | base64 --decode > init.sh; '
148
+ f'bash init.sh\'')
149
+ ports = (f'22/tcp,'
150
+ f'{custom_ports_str}'
151
+ f'{constants.SKY_REMOTE_RAY_DASHBOARD_PORT}/http,'
152
+ f'{constants.SKY_REMOTE_RAY_PORT}/http')
153
+
154
+ params = {
155
+ 'name': name,
156
+ 'image_name': image_name,
157
+ 'gpu_type_id': gpu_type,
158
+ 'cloud_type': cloud_type,
159
+ 'container_disk_in_gb': disk_size,
160
+ 'min_vcpu_count': 4 * gpu_quantity,
161
+ 'min_memory_in_gb': gpu_specs['memoryInGb'] * gpu_quantity,
162
+ 'gpu_count': gpu_quantity,
163
+ 'country_code': region,
164
+ 'ports': ports,
165
+ 'support_public_ip': True,
166
+ 'docker_args': docker_args,
167
+ }
168
+
169
+ if preemptible is None or not preemptible:
170
+ new_instance = runpod.runpod.create_pod(**params)
171
+ else:
172
+ new_instance = runpod_commands.create_spot_pod(
173
+ bid_per_gpu=bid_per_gpu,
174
+ **params,
175
+ )
162
176
 
163
177
  return new_instance['id']
164
178
 
@@ -24,6 +24,8 @@ available_node_types:
24
24
  ImageId: {{image_id}}
25
25
  PublicKey: |-
26
26
  skypilot:ssh_public_key_content
27
+ Preemptible: {{use_spot}}
28
+ BidPerGPU: {{bid_per_gpu}}
27
29
 
28
30
  head_node_type: ray_head_default
29
31
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20241208
3
+ Version: 1.0.0.dev20241210
4
4
  Summary: SkyPilot: An intercloud broker for the clouds
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -164,6 +164,9 @@ sky/provision/runpod/__init__.py
164
164
  sky/provision/runpod/config.py
165
165
  sky/provision/runpod/instance.py
166
166
  sky/provision/runpod/utils.py
167
+ sky/provision/runpod/api/__init__.py
168
+ sky/provision/runpod/api/commands.py
169
+ sky/provision/runpod/api/pods.py
167
170
  sky/provision/vsphere/__init__.py
168
171
  sky/provision/vsphere/config.py
169
172
  sky/provision/vsphere/instance.py
@@ -37,7 +37,7 @@ import sys
37
37
  import tempfile
38
38
  import textwrap
39
39
  import time
40
- from typing import Dict, List, NamedTuple, Optional, Tuple
40
+ from typing import Dict, List, NamedTuple, Optional, TextIO, Tuple
41
41
  import urllib.parse
42
42
  import uuid
43
43
 
@@ -1333,34 +1333,68 @@ def test_using_file_mounts_with_env_vars(generic_cloud: str):
1333
1333
 
1334
1334
 
1335
1335
  # ---------- storage ----------
1336
+
1337
+
1338
+ def _storage_mounts_commands_generator(f: TextIO, cluster_name: str,
1339
+ storage_name: str, ls_hello_command: str,
1340
+ cloud: str, only_mount: bool):
1341
+ template_str = pathlib.Path(
1342
+ 'tests/test_yamls/test_storage_mounting.yaml.j2').read_text()
1343
+ template = jinja2.Template(template_str)
1344
+ content = template.render(
1345
+ storage_name=storage_name,
1346
+ cloud=cloud,
1347
+ only_mount=only_mount,
1348
+ )
1349
+ f.write(content)
1350
+ f.flush()
1351
+ file_path = f.name
1352
+ test_commands = [
1353
+ *STORAGE_SETUP_COMMANDS,
1354
+ f'sky launch -y -c {cluster_name} --cloud {cloud} {file_path}',
1355
+ f'sky logs {cluster_name} 1 --status', # Ensure job succeeded.
1356
+ ls_hello_command,
1357
+ f'sky stop -y {cluster_name}',
1358
+ f'sky start -y {cluster_name}',
1359
+ # Check if hello.txt from mounting bucket exists after restart in
1360
+ # the mounted directory
1361
+ f'sky exec {cluster_name} -- "set -ex; ls /mount_private_mount/hello.txt"',
1362
+ ]
1363
+ clean_command = f'sky down -y {cluster_name}; sky storage delete -y {storage_name}'
1364
+ return test_commands, clean_command
1365
+
1366
+
1336
1367
  @pytest.mark.aws
1337
1368
  def test_aws_storage_mounts_with_stop():
1338
1369
  name = _get_cluster_name()
1339
1370
  cloud = 'aws'
1340
1371
  storage_name = f'sky-test-{int(time.time())}'
1341
- template_str = pathlib.Path(
1342
- 'tests/test_yamls/test_storage_mounting.yaml.j2').read_text()
1343
- template = jinja2.Template(template_str)
1344
- content = template.render(storage_name=storage_name, cloud=cloud)
1372
+ ls_hello_command = f'aws s3 ls {storage_name}/hello.txt'
1345
1373
  with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as f:
1346
- f.write(content)
1347
- f.flush()
1348
- file_path = f.name
1349
- test_commands = [
1350
- *STORAGE_SETUP_COMMANDS,
1351
- f'sky launch -y -c {name} --cloud {cloud} {file_path}',
1352
- f'sky logs {name} 1 --status', # Ensure job succeeded.
1353
- f'aws s3 ls {storage_name}/hello.txt',
1354
- f'sky stop -y {name}',
1355
- f'sky start -y {name}',
1356
- # Check if hello.txt from mounting bucket exists after restart in
1357
- # the mounted directory
1358
- f'sky exec {name} -- "set -ex; ls /mount_private_mount/hello.txt"'
1359
- ]
1374
+ test_commands, clean_command = _storage_mounts_commands_generator(
1375
+ f, name, storage_name, ls_hello_command, cloud, False)
1360
1376
  test = Test(
1361
1377
  'aws_storage_mounts',
1362
1378
  test_commands,
1363
- f'sky down -y {name}; sky storage delete -y {storage_name}',
1379
+ clean_command,
1380
+ timeout=20 * 60, # 20 mins
1381
+ )
1382
+ run_one_test(test)
1383
+
1384
+
1385
+ @pytest.mark.aws
1386
+ def test_aws_storage_mounts_with_stop_only_mount():
1387
+ name = _get_cluster_name()
1388
+ cloud = 'aws'
1389
+ storage_name = f'sky-test-{int(time.time())}'
1390
+ ls_hello_command = f'aws s3 ls {storage_name}/hello.txt'
1391
+ with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as f:
1392
+ test_commands, clean_command = _storage_mounts_commands_generator(
1393
+ f, name, storage_name, ls_hello_command, cloud, True)
1394
+ test = Test(
1395
+ 'aws_storage_mounts_only_mount',
1396
+ test_commands,
1397
+ clean_command,
1364
1398
  timeout=20 * 60, # 20 mins
1365
1399
  )
1366
1400
  run_one_test(test)
@@ -1371,29 +1405,14 @@ def test_gcp_storage_mounts_with_stop():
1371
1405
  name = _get_cluster_name()
1372
1406
  cloud = 'gcp'
1373
1407
  storage_name = f'sky-test-{int(time.time())}'
1374
- template_str = pathlib.Path(
1375
- 'tests/test_yamls/test_storage_mounting.yaml.j2').read_text()
1376
- template = jinja2.Template(template_str)
1377
- content = template.render(storage_name=storage_name, cloud=cloud)
1408
+ ls_hello_command = f'gsutil ls gs://{storage_name}/hello.txt'
1378
1409
  with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as f:
1379
- f.write(content)
1380
- f.flush()
1381
- file_path = f.name
1382
- test_commands = [
1383
- *STORAGE_SETUP_COMMANDS,
1384
- f'sky launch -y -c {name} --cloud {cloud} {file_path}',
1385
- f'sky logs {name} 1 --status', # Ensure job succeeded.
1386
- f'gsutil ls gs://{storage_name}/hello.txt',
1387
- f'sky stop -y {name}',
1388
- f'sky start -y {name}',
1389
- # Check if hello.txt from mounting bucket exists after restart in
1390
- # the mounted directory
1391
- f'sky exec {name} -- "set -ex; ls /mount_private_mount/hello.txt"'
1392
- ]
1410
+ test_commands, clean_command = _storage_mounts_commands_generator(
1411
+ f, name, storage_name, ls_hello_command, cloud, False)
1393
1412
  test = Test(
1394
1413
  'gcp_storage_mounts',
1395
1414
  test_commands,
1396
- f'sky down -y {name}; sky storage delete -y {storage_name}',
1415
+ clean_command,
1397
1416
  timeout=20 * 60, # 20 mins
1398
1417
  )
1399
1418
  run_one_test(test)
@@ -1409,31 +1428,19 @@ def test_azure_storage_mounts_with_stop():
1409
1428
  get_default_storage_account_name(default_region))
1410
1429
  storage_account_key = data_utils.get_az_storage_account_key(
1411
1430
  storage_account_name)
1412
- template_str = pathlib.Path(
1413
- 'tests/test_yamls/test_storage_mounting.yaml.j2').read_text()
1414
- template = jinja2.Template(template_str)
1415
- content = template.render(storage_name=storage_name, cloud=cloud)
1431
+ # if the file does not exist, az storage blob list returns '[]'
1432
+ ls_hello_command = (f'output=$(az storage blob list -c {storage_name} '
1433
+ f'--account-name {storage_account_name} '
1434
+ f'--account-key {storage_account_key} '
1435
+ f'--prefix hello.txt) '
1436
+ f'[ "$output" = "[]" ] && exit 1 || exit 0')
1416
1437
  with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as f:
1417
- f.write(content)
1418
- f.flush()
1419
- file_path = f.name
1420
- test_commands = [
1421
- *STORAGE_SETUP_COMMANDS,
1422
- f'sky launch -y -c {name} --cloud {cloud} {file_path}',
1423
- f'sky logs {name} 1 --status', # Ensure job succeeded.
1424
- f'output=$(az storage blob list -c {storage_name} --account-name {storage_account_name} --account-key {storage_account_key} --prefix hello.txt)'
1425
- # if the file does not exist, az storage blob list returns '[]'
1426
- f'[ "$output" = "[]" ] && exit 1;'
1427
- f'sky stop -y {name}',
1428
- f'sky start -y {name}',
1429
- # Check if hello.txt from mounting bucket exists after restart in
1430
- # the mounted directory
1431
- f'sky exec {name} -- "set -ex; ls /mount_private_mount/hello.txt"'
1432
- ]
1438
+ test_commands, clean_command = _storage_mounts_commands_generator(
1439
+ f, name, storage_name, ls_hello_command, cloud, False)
1433
1440
  test = Test(
1434
1441
  'azure_storage_mounts',
1435
1442
  test_commands,
1436
- f'sky down -y {name}; sky storage delete -y {storage_name}',
1443
+ clean_command,
1437
1444
  timeout=20 * 60, # 20 mins
1438
1445
  )
1439
1446
  run_one_test(test)
@@ -1446,25 +1453,15 @@ def test_kubernetes_storage_mounts():
1446
1453
  # built for x86_64 only.
1447
1454
  name = _get_cluster_name()
1448
1455
  storage_name = f'sky-test-{int(time.time())}'
1449
- template_str = pathlib.Path(
1450
- 'tests/test_yamls/test_storage_mounting.yaml.j2').read_text()
1451
- template = jinja2.Template(template_str)
1452
- content = template.render(storage_name=storage_name)
1456
+ ls_hello_command = (f'aws s3 ls {storage_name}/hello.txt || '
1457
+ f'gsutil ls gs://{storage_name}/hello.txt')
1453
1458
  with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as f:
1454
- f.write(content)
1455
- f.flush()
1456
- file_path = f.name
1457
- test_commands = [
1458
- *STORAGE_SETUP_COMMANDS,
1459
- f'sky launch -y -c {name} --cloud kubernetes {file_path}',
1460
- f'sky logs {name} 1 --status', # Ensure job succeeded.
1461
- f'aws s3 ls {storage_name}/hello.txt || '
1462
- f'gsutil ls gs://{storage_name}/hello.txt',
1463
- ]
1459
+ test_commands, clean_command = _storage_mounts_commands_generator(
1460
+ f, name, storage_name, ls_hello_command, 'kubernetes', False)
1464
1461
  test = Test(
1465
1462
  'kubernetes_storage_mounts',
1466
1463
  test_commands,
1467
- f'sky down -y {name}; sky storage delete -y {storage_name}',
1464
+ clean_command,
1468
1465
  timeout=20 * 60, # 20 mins
1469
1466
  )
1470
1467
  run_one_test(test)