skypilot-nightly 1.0.0.dev20241207__tar.gz → 1.0.0.dev20241209__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 (304) hide show
  1. {skypilot_nightly-1.0.0.dev20241207/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20241209}/PKG-INFO +1 -1
  2. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/__init__.py +2 -2
  3. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/backends/backend_utils.py +40 -9
  4. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/backends/cloud_vm_ray_backend.py +49 -9
  5. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/azure/instance.py +1 -1
  6. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/gcp/instance.py +2 -0
  7. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/lambda_cloud/instance.py +1 -1
  8. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/paperspace/instance.py +2 -1
  9. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209/skypilot_nightly.egg-info}/PKG-INFO +1 -1
  10. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/tests/test_smoke.py +72 -75
  11. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/LICENSE +0 -0
  12. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/MANIFEST.in +0 -0
  13. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/README.md +0 -0
  14. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/pyproject.toml +0 -0
  15. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/setup.cfg +0 -0
  16. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/setup.py +0 -0
  17. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/adaptors/__init__.py +0 -0
  18. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/adaptors/aws.py +0 -0
  19. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/adaptors/azure.py +0 -0
  20. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/adaptors/cloudflare.py +0 -0
  21. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/adaptors/common.py +0 -0
  22. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/adaptors/cudo.py +0 -0
  23. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/adaptors/docker.py +0 -0
  24. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/adaptors/gcp.py +0 -0
  25. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/adaptors/ibm.py +0 -0
  26. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/adaptors/kubernetes.py +0 -0
  27. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/adaptors/oci.py +0 -0
  28. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/adaptors/runpod.py +0 -0
  29. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/adaptors/vsphere.py +0 -0
  30. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/admin_policy.py +0 -0
  31. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/authentication.py +0 -0
  32. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/backends/__init__.py +0 -0
  33. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/backends/backend.py +0 -0
  34. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/backends/docker_utils.py +0 -0
  35. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/backends/local_docker_backend.py +0 -0
  36. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  37. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/backends/wheel_utils.py +0 -0
  38. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/benchmark/__init__.py +0 -0
  39. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/benchmark/benchmark_state.py +0 -0
  40. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/benchmark/benchmark_utils.py +0 -0
  41. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/check.py +0 -0
  42. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/cli.py +0 -0
  43. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/cloud_stores.py +0 -0
  44. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/__init__.py +0 -0
  45. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/aws.py +0 -0
  46. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/azure.py +0 -0
  47. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/cloud.py +0 -0
  48. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/cloud_registry.py +0 -0
  49. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/cudo.py +0 -0
  50. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/fluidstack.py +0 -0
  51. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/gcp.py +0 -0
  52. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/ibm.py +0 -0
  53. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/kubernetes.py +0 -0
  54. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/lambda_cloud.py +0 -0
  55. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/oci.py +0 -0
  56. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/paperspace.py +0 -0
  57. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/runpod.py +0 -0
  58. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/scp.py +0 -0
  59. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/__init__.py +0 -0
  60. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/aws_catalog.py +0 -0
  61. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/azure_catalog.py +0 -0
  62. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/common.py +0 -0
  63. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/config.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/constants.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/kubernetes_catalog.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/oci_catalog.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/scp_catalog.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/utils/__init__.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/utils/aws_utils.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/utils/azure_utils.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/utils/gcp_utils.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/utils/oci_utils.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/utils/scp_utils.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/clouds/vsphere.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/core.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/dag.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/data/__init__.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/data/data_transfer.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/data/data_utils.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/data/mounting_utils.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/data/storage.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/data/storage_utils.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/exceptions.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/execution.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/global_user_state.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/jobs/__init__.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/jobs/constants.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/jobs/controller.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/jobs/core.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/jobs/dashboard/dashboard.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/jobs/dashboard/static/favicon.ico +0 -0
  108. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/jobs/dashboard/templates/index.html +0 -0
  109. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/jobs/recovery_strategy.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/jobs/state.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/jobs/utils.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/optimizer.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/__init__.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/aws/__init__.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/aws/config.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/aws/instance.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/aws/utils.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/azure/__init__.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/azure/azure-config-template.json +0 -0
  120. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/azure/config.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/common.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/constants.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/cudo/__init__.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/cudo/config.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/cudo/cudo_machine_type.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/cudo/cudo_utils.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/cudo/cudo_wrapper.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/cudo/instance.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/docker_utils.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/fluidstack/__init__.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/fluidstack/config.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/fluidstack/instance.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/gcp/__init__.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/gcp/config.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/gcp/constants.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/gcp/instance_utils.py +0 -0
  138. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/gcp/mig_utils.py +0 -0
  139. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/instance_setup.py +0 -0
  140. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/kubernetes/__init__.py +0 -0
  141. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/kubernetes/config.py +0 -0
  142. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/kubernetes/instance.py +0 -0
  143. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
  144. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
  145. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/kubernetes/network.py +0 -0
  146. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/kubernetes/network_utils.py +0 -0
  147. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/kubernetes/utils.py +0 -0
  148. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/lambda_cloud/__init__.py +0 -0
  149. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/lambda_cloud/config.py +0 -0
  150. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  151. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/logging.py +0 -0
  152. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/metadata_utils.py +0 -0
  153. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/oci/__init__.py +0 -0
  154. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/oci/config.py +0 -0
  155. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/oci/instance.py +0 -0
  156. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/oci/query_utils.py +0 -0
  157. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/paperspace/__init__.py +0 -0
  158. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/paperspace/config.py +0 -0
  159. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/paperspace/constants.py +0 -0
  160. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/paperspace/utils.py +0 -0
  161. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/provisioner.py +0 -0
  162. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/runpod/__init__.py +0 -0
  163. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/runpod/config.py +0 -0
  164. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/runpod/instance.py +0 -0
  165. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/runpod/utils.py +0 -0
  166. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/vsphere/__init__.py +0 -0
  167. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/vsphere/common/__init__.py +0 -0
  168. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  169. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  170. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/vsphere/common/custom_script.py +0 -0
  171. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/vsphere/common/id_generator.py +0 -0
  172. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  173. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/vsphere/common/service_manager.py +0 -0
  174. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  175. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  176. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  177. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/vsphere/common/vim_utils.py +0 -0
  178. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/vsphere/config.py +0 -0
  179. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/vsphere/instance.py +0 -0
  180. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/provision/vsphere/vsphere_utils.py +0 -0
  181. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/resources.py +0 -0
  182. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/serve/__init__.py +0 -0
  183. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/serve/autoscalers.py +0 -0
  184. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/serve/constants.py +0 -0
  185. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/serve/controller.py +0 -0
  186. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/serve/core.py +0 -0
  187. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/serve/load_balancer.py +0 -0
  188. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/serve/load_balancing_policies.py +0 -0
  189. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/serve/replica_managers.py +0 -0
  190. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/serve/serve_state.py +0 -0
  191. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/serve/serve_utils.py +0 -0
  192. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/serve/service.py +0 -0
  193. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/serve/service_spec.py +0 -0
  194. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/setup_files/MANIFEST.in +0 -0
  195. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/setup_files/dependencies.py +0 -0
  196. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/setup_files/setup.py +0 -0
  197. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/sky_logging.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/LICENSE +0 -0
  199. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/__init__.py +0 -0
  200. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/attempt_skylet.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/autostop_lib.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/configs.py +0 -0
  203. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/constants.py +0 -0
  204. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/events.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/job_lib.py +0 -0
  206. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/log_lib.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/log_lib.pyi +0 -0
  208. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/providers/__init__.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/providers/command_runner.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/providers/ibm/__init__.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/providers/ibm/node_provider.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/providers/ibm/utils.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/providers/scp/__init__.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/providers/scp/config.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/providers/scp/node_provider.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/ray_patches/__init__.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  219. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/ray_patches/cli.py.patch +0 -0
  220. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  221. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  222. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  223. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/ray_patches/updater.py.patch +0 -0
  224. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/ray_patches/worker.py.patch +0 -0
  225. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/skylet.py +0 -0
  226. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skylet/subprocess_daemon.py +0 -0
  227. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/skypilot_config.py +0 -0
  228. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/status_lib.py +0 -0
  229. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/task.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/aws-ray.yml.j2 +0 -0
  231. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/azure-ray.yml.j2 +0 -0
  232. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/cudo-ray.yml.j2 +0 -0
  233. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  234. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/gcp-ray.yml.j2 +0 -0
  235. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/ibm-ray.yml.j2 +0 -0
  236. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/jobs-controller.yaml.j2 +0 -0
  237. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  238. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  239. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  240. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  241. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  242. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/lambda-ray.yml.j2 +0 -0
  243. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/local-ray.yml.j2 +0 -0
  244. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/oci-ray.yml.j2 +0 -0
  245. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/paperspace-ray.yml.j2 +0 -0
  246. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/runpod-ray.yml.j2 +0 -0
  247. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/scp-ray.yml.j2 +0 -0
  248. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  249. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/templates/vsphere-ray.yml.j2 +0 -0
  250. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/usage/__init__.py +0 -0
  251. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/usage/constants.py +0 -0
  252. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/usage/usage_lib.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/__init__.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/accelerator_registry.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/admin_policy_utils.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/cli_utils/__init__.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/cli_utils/status_utils.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/cluster_yaml_utils.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/command_runner.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/command_runner.pyi +0 -0
  261. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/common_utils.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/control_master_utils.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/controller_utils.py +0 -0
  264. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/dag_utils.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/db_utils.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/env_options.py +0 -0
  267. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/kubernetes/__init__.py +0 -0
  268. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/kubernetes/create_cluster.sh +0 -0
  269. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  270. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/kubernetes/deploy_remote_cluster.sh +0 -0
  271. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  273. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  274. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  275. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  276. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  277. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/kubernetes_enums.py +0 -0
  279. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/log_utils.py +0 -0
  280. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/resources_utils.py +0 -0
  281. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/rich_utils.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/schemas.py +0 -0
  283. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/subprocess_utils.py +0 -0
  284. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/timeline.py +0 -0
  285. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/ux_utils.py +0 -0
  286. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/sky/utils/validator.py +0 -0
  287. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/skypilot_nightly.egg-info/SOURCES.txt +0 -0
  288. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  289. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  290. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/skypilot_nightly.egg-info/requires.txt +0 -0
  291. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/skypilot_nightly.egg-info/top_level.txt +0 -0
  292. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/tests/test_api.py +0 -0
  293. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/tests/test_cli.py +0 -0
  294. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/tests/test_config.py +0 -0
  295. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/tests/test_global_user_state.py +0 -0
  296. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/tests/test_jobs.py +0 -0
  297. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/tests/test_jobs_and_serve.py +0 -0
  298. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/tests/test_list_accelerators.py +0 -0
  299. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/tests/test_optimizer_dryruns.py +0 -0
  300. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/tests/test_optimizer_random_dag.py +0 -0
  301. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/tests/test_serve_autoscaler.py +0 -0
  302. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/tests/test_storage.py +0 -0
  303. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/tests/test_wheels.py +0 -0
  304. {skypilot_nightly-1.0.0.dev20241207 → skypilot_nightly-1.0.0.dev20241209}/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.dev20241207
3
+ Version: 1.0.0.dev20241209
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 = '6e5083293f0d9a9d069d51274c57f0e59e47e5ce'
8
+ _SKYPILOT_COMMIT_SHA = 'ace064c5fdf91d34e738dae8c0cd30e1c011528d'
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.dev20241207'
38
+ __version__ = '1.0.0.dev20241209'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -116,6 +116,16 @@ _REMOTE_RUNTIME_FILES_DIR = '~/.sky/.runtime_files'
116
116
  _ENDPOINTS_RETRY_MESSAGE = ('If the cluster was recently started, '
117
117
  'please retry after a while.')
118
118
 
119
+ # If a cluster is less than LAUNCH_DOUBLE_CHECK_WINDOW seconds old, and we don't
120
+ # see any instances in the cloud, the instances might be in the proccess of
121
+ # being created. We will wait LAUNCH_DOUBLE_CHECK_DELAY seconds and then double
122
+ # check to make sure there are still no instances. LAUNCH_DOUBLE_CHECK_DELAY
123
+ # should be set longer than the delay between (sending the create instance
124
+ # request) and (the instances appearing on the cloud).
125
+ # See https://github.com/skypilot-org/skypilot/issues/4431.
126
+ _LAUNCH_DOUBLE_CHECK_WINDOW = 60
127
+ _LAUNCH_DOUBLE_CHECK_DELAY = 1
128
+
119
129
  # Include the fields that will be used for generating tags that distinguishes
120
130
  # the cluster in ray, to avoid the stopped cluster being discarded due to
121
131
  # updates in the yaml template.
@@ -1926,13 +1936,12 @@ def _update_cluster_status_no_lock(
1926
1936
  logger.debug(
1927
1937
  f'Refreshing status ({cluster_name!r}) failed to get IPs.')
1928
1938
  except RuntimeError as e:
1929
- logger.debug(str(e))
1939
+ logger.debug(common_utils.format_exception(e))
1930
1940
  except Exception as e: # pylint: disable=broad-except
1931
1941
  # This can be raised by `external_ssh_ports()`, due to the
1932
1942
  # underlying call to kubernetes API.
1933
- logger.debug(
1934
- f'Refreshing status ({cluster_name!r}) failed: '
1935
- f'{common_utils.format_exception(e, use_bracket=True)}')
1943
+ logger.debug(f'Refreshing status ({cluster_name!r}) failed: ',
1944
+ exc_info=e)
1936
1945
  return False
1937
1946
 
1938
1947
  # Determining if the cluster is healthy (UP):
@@ -1959,6 +1968,24 @@ def _update_cluster_status_no_lock(
1959
1968
  return record
1960
1969
 
1961
1970
  # All cases below are transitioning the cluster to non-UP states.
1971
+
1972
+ if (not node_statuses and handle.launched_resources.cloud.STATUS_VERSION >=
1973
+ clouds.StatusVersion.SKYPILOT):
1974
+ # Note: launched_at is set during sky launch, even on an existing
1975
+ # cluster. This will catch the case where the cluster was terminated on
1976
+ # the cloud and restarted by sky launch.
1977
+ time_since_launch = time.time() - record['launched_at']
1978
+ if (record['status'] == status_lib.ClusterStatus.INIT and
1979
+ time_since_launch < _LAUNCH_DOUBLE_CHECK_WINDOW):
1980
+ # It's possible the instances for this cluster were just created,
1981
+ # and haven't appeared yet in the cloud API/console. Wait for a bit
1982
+ # and check again. This is a best-effort leak prevention check.
1983
+ # See https://github.com/skypilot-org/skypilot/issues/4431.
1984
+ time.sleep(_LAUNCH_DOUBLE_CHECK_DELAY)
1985
+ node_statuses = _query_cluster_status_via_cloud_api(handle)
1986
+ # Note: even if all the node_statuses are UP now, we will still
1987
+ # consider this cluster abnormal, and its status will be INIT.
1988
+
1962
1989
  if len(node_statuses) > handle.launched_nodes:
1963
1990
  # Unexpected: in the queried region more than 1 cluster with the same
1964
1991
  # constructed name tag returned. This will typically not happen unless
@@ -1987,13 +2014,15 @@ def _update_cluster_status_no_lock(
1987
2014
  f'{colorama.Style.RESET_ALL}')
1988
2015
  assert len(node_statuses) <= handle.launched_nodes
1989
2016
 
1990
- # If the node_statuses is empty, all the nodes are terminated. We can
1991
- # safely set the cluster status to TERMINATED. This handles the edge case
1992
- # where the cluster is terminated by the user manually through the UI.
2017
+ # If the node_statuses is empty, it should mean that all the nodes are
2018
+ # terminated and we can set the cluster status to TERMINATED. This handles
2019
+ # the edge case where the cluster is terminated by the user manually through
2020
+ # the UI.
1993
2021
  to_terminate = not node_statuses
1994
2022
 
1995
- # A cluster is considered "abnormal", if not all nodes are TERMINATED or
1996
- # not all nodes are STOPPED. We check that with the following logic:
2023
+ # A cluster is considered "abnormal", if some (but not all) nodes are
2024
+ # TERMINATED, or not all nodes are STOPPED. We check that with the following
2025
+ # logic:
1997
2026
  # * Not all nodes are terminated and there's at least one node
1998
2027
  # terminated; or
1999
2028
  # * Any of the non-TERMINATED nodes is in a non-STOPPED status.
@@ -2005,6 +2034,8 @@ def _update_cluster_status_no_lock(
2005
2034
  # cluster is probably down.
2006
2035
  # * The cluster is partially terminated or stopped should be considered
2007
2036
  # abnormal.
2037
+ # * The cluster is partially or completely in the INIT state, which means
2038
+ # that provisioning was interrupted. This is considered abnormal.
2008
2039
  #
2009
2040
  # An abnormal cluster will transition to INIT and have any autostop setting
2010
2041
  # reset (unless it's autostopping/autodowning).
@@ -98,6 +98,11 @@ _RETRY_UNTIL_UP_INIT_GAP_SECONDS = 30
98
98
  # The maximum retry count for fetching IP address.
99
99
  _FETCH_IP_MAX_ATTEMPTS = 3
100
100
 
101
+ # How many times to query the cloud provider to make sure instances are
102
+ # stopping/terminating, and how long to wait between each query.
103
+ _TEARDOWN_WAIT_MAX_ATTEMPTS = 10
104
+ _TEARDOWN_WAIT_BETWEEN_ATTEMPS_SECONDS = 1
105
+
101
106
  _TEARDOWN_FAILURE_MESSAGE = (
102
107
  f'\n{colorama.Fore.RED}Failed to terminate '
103
108
  '{cluster_name}. {extra_reason}'
@@ -2403,15 +2408,17 @@ class CloudVmRayResourceHandle(backends.backend.ResourceHandle):
2403
2408
  zip(ip_list, port_list), **ssh_credentials)
2404
2409
  return runners
2405
2410
  if self.cached_cluster_info is None:
2406
- # We have `or self.cached_external_ips is None` here, because
2411
+ # We have `and self.cached_external_ips is None` here, because
2407
2412
  # when a cluster's cloud is just upgraded to the new provsioner,
2408
2413
  # although it has the cached_external_ips, the cached_cluster_info
2409
2414
  # can be None. We need to update it here, even when force_cached is
2410
2415
  # set to True.
2411
2416
  # TODO: We can remove `self.cached_external_ips is None` after
2412
2417
  # version 0.8.0.
2413
- assert not force_cached or self.cached_external_ips is not None, (
2414
- force_cached, self.cached_external_ips)
2418
+ if force_cached and self.cached_external_ips is None:
2419
+ raise RuntimeError(
2420
+ 'Tried to use cached cluster info, but it\'s missing for '
2421
+ f'cluster "{self.cluster_name}"')
2415
2422
  self._update_cluster_info()
2416
2423
  assert self.cached_cluster_info is not None, self
2417
2424
  runners = provision_lib.get_command_runners(
@@ -2838,9 +2845,6 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
2838
2845
  if e.no_failover:
2839
2846
  error_message = str(e)
2840
2847
  else:
2841
- # Clean up the cluster's entry in `sky status`.
2842
- global_user_state.remove_cluster(cluster_name,
2843
- terminate=True)
2844
2848
  usage_lib.messages.usage.update_final_cluster_status(
2845
2849
  None)
2846
2850
  error_message = (
@@ -4027,7 +4031,6 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
4027
4031
  limit=1000).get_result()['items']
4028
4032
  vpc_id = None
4029
4033
  try:
4030
- # pylint: disable=line-too-long
4031
4034
  vpc_id = vpcs_filtered_by_tags_and_region[0]['crn'].rsplit(
4032
4035
  ':', 1)[-1]
4033
4036
  vpc_found = True
@@ -4036,7 +4039,6 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
4036
4039
  returncode = -1
4037
4040
 
4038
4041
  if vpc_found:
4039
- # pylint: disable=line-too-long E1136
4040
4042
  # Delete VPC and it's associated resources
4041
4043
  vpc_provider = IBMVPCProvider(
4042
4044
  config_provider['resource_group_id'], region,
@@ -4138,6 +4140,7 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
4138
4140
  * Removing the terminated cluster's scripts and ray yaml files.
4139
4141
  """
4140
4142
  cluster_name_on_cloud = handle.cluster_name_on_cloud
4143
+ cloud = handle.launched_resources.cloud
4141
4144
 
4142
4145
  if (terminate and handle.launched_resources.is_image_managed is True):
4143
4146
  # Delete the image when terminating a "cloned" cluster, i.e.,
@@ -4158,7 +4161,6 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
4158
4161
  'remove it manually to avoid image leakage. Details: '
4159
4162
  f'{common_utils.format_exception(e, use_bracket=True)}')
4160
4163
  if terminate:
4161
- cloud = handle.launched_resources.cloud
4162
4164
  config = common_utils.read_yaml(handle.cluster_yaml)
4163
4165
  try:
4164
4166
  cloud.check_features_are_supported(
@@ -4185,6 +4187,44 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
4185
4187
  config = common_utils.read_yaml(handle.cluster_yaml)
4186
4188
  backend_utils.SSHConfigHelper.remove_cluster(handle.cluster_name)
4187
4189
 
4190
+ # Confirm that instances have actually transitioned state before
4191
+ # updating the state database. We do this immediately before removing
4192
+ # the state from the database, so that we can guarantee that this is
4193
+ # always called before the state is removed. We considered running this
4194
+ # check as part of provisioner.teardown_cluster or
4195
+ # provision.terminate_instances, but it would open the door code paths
4196
+ # that successfully call this function but do not first call
4197
+ # teardown_cluster or terminate_instances. See
4198
+ # https://github.com/skypilot-org/skypilot/pull/4443#discussion_r1872798032
4199
+ attempts = 0
4200
+ while True:
4201
+ logger.debug(f'instance statuses attempt {attempts + 1}')
4202
+ node_status_dict = provision_lib.query_instances(
4203
+ repr(cloud),
4204
+ cluster_name_on_cloud,
4205
+ config['provider'],
4206
+ non_terminated_only=False)
4207
+
4208
+ unexpected_node_state: Optional[Tuple[str, str]] = None
4209
+ for node_id, node_status in node_status_dict.items():
4210
+ logger.debug(f'{node_id} status: {node_status}')
4211
+ # FIXME(cooperc): Some clouds (e.g. GCP) do not distinguish
4212
+ # between "stopping/stopped" and "terminating/terminated", so we
4213
+ # allow for either status instead of casing on `terminate`.
4214
+ if node_status not in [None, status_lib.ClusterStatus.STOPPED]:
4215
+ unexpected_node_state = (node_id, node_status)
4216
+
4217
+ if unexpected_node_state is None:
4218
+ break
4219
+
4220
+ attempts += 1
4221
+ if attempts < _TEARDOWN_WAIT_MAX_ATTEMPTS:
4222
+ time.sleep(_TEARDOWN_WAIT_BETWEEN_ATTEMPS_SECONDS)
4223
+ else:
4224
+ (node_id, node_status) = unexpected_node_state
4225
+ raise RuntimeError(f'Instance {node_id} in unexpected state '
4226
+ f'{node_status}.')
4227
+
4188
4228
  global_user_state.remove_cluster(handle.cluster_name,
4189
4229
  terminate=terminate)
4190
4230
 
@@ -101,8 +101,8 @@ class AzureInstanceStatus(enum.Enum):
101
101
  ) -> Dict['AzureInstanceStatus', Optional[status_lib.ClusterStatus]]:
102
102
  return {
103
103
  cls.PENDING: status_lib.ClusterStatus.INIT,
104
- cls.STOPPING: status_lib.ClusterStatus.INIT,
105
104
  cls.RUNNING: status_lib.ClusterStatus.UP,
105
+ cls.STOPPING: status_lib.ClusterStatus.STOPPED,
106
106
  cls.STOPPED: status_lib.ClusterStatus.STOPPED,
107
107
  cls.DELETING: None,
108
108
  }
@@ -52,6 +52,8 @@ def _filter_instances(
52
52
  # non_terminated_only=True?
53
53
  # Will there be callers who would want this to be False?
54
54
  # stop() and terminate() for example already implicitly assume non-terminated.
55
+ # Currently, even with non_terminated_only=False, we may not have a dict entry
56
+ # for terminated instances, if they have already been fully deleted.
55
57
  @common_utils.retry
56
58
  def query_instances(
57
59
  cluster_name_on_cloud: str,
@@ -233,7 +233,7 @@ def query_instances(
233
233
  'booting': status_lib.ClusterStatus.INIT,
234
234
  'active': status_lib.ClusterStatus.UP,
235
235
  'unhealthy': status_lib.ClusterStatus.INIT,
236
- 'terminating': status_lib.ClusterStatus.INIT,
236
+ 'terminating': None,
237
237
  }
238
238
  statuses: Dict[str, Optional[status_lib.ClusterStatus]] = {}
239
239
  for instance_id, instance in instances.items():
@@ -286,12 +286,13 @@ def query_instances(
286
286
  assert provider_config is not None, (cluster_name_on_cloud, provider_config)
287
287
  instances = _filter_instances(cluster_name_on_cloud, None)
288
288
 
289
+ # https://docs.digitalocean.com/reference/paperspace/core/commands/machines/#show
289
290
  status_map = {
290
291
  'starting': status_lib.ClusterStatus.INIT,
291
292
  'restarting': status_lib.ClusterStatus.INIT,
292
293
  'upgrading': status_lib.ClusterStatus.INIT,
293
294
  'provisioning': status_lib.ClusterStatus.INIT,
294
- 'stopping': status_lib.ClusterStatus.INIT,
295
+ 'stopping': status_lib.ClusterStatus.STOPPED,
295
296
  'serviceready': status_lib.ClusterStatus.INIT,
296
297
  'ready': status_lib.ClusterStatus.UP,
297
298
  'off': status_lib.ClusterStatus.STOPPED,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20241207
3
+ Version: 1.0.0.dev20241209
4
4
  Summary: SkyPilot: An intercloud broker for the clouds
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -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)