skypilot-nightly 1.0.0.dev20241024__tar.gz → 1.0.0.dev20241025__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 (302) hide show
  1. {skypilot_nightly-1.0.0.dev20241024/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20241025}/PKG-INFO +1 -1
  2. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/__init__.py +2 -2
  3. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/check.py +11 -4
  4. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/cli.py +1 -1
  5. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/azure.py +86 -50
  6. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/oci.py +1 -1
  7. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/azure_catalog.py +15 -0
  8. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/kubernetes_catalog.py +7 -1
  9. skypilot_nightly-1.0.0.dev20241025/sky/clouds/utils/azure_utils.py +91 -0
  10. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/exceptions.py +4 -4
  11. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/jobs/recovery_strategy.py +3 -3
  12. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/azure/azure-config-template.json +7 -1
  13. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/azure/config.py +23 -8
  14. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/azure/instance.py +91 -50
  15. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/kubernetes/instance.py +4 -2
  16. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/provisioner.py +16 -8
  17. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/resources.py +1 -0
  18. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/usage/usage_lib.py +3 -2
  19. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/common_utils.py +3 -2
  20. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/controller_utils.py +69 -18
  21. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025/skypilot_nightly.egg-info}/PKG-INFO +1 -1
  22. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/skypilot_nightly.egg-info/SOURCES.txt +1 -0
  23. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/LICENSE +0 -0
  24. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/MANIFEST.in +0 -0
  25. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/README.md +0 -0
  26. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/pyproject.toml +0 -0
  27. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/setup.cfg +0 -0
  28. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/setup.py +0 -0
  29. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/adaptors/__init__.py +0 -0
  30. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/adaptors/aws.py +0 -0
  31. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/adaptors/azure.py +0 -0
  32. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/adaptors/cloudflare.py +0 -0
  33. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/adaptors/common.py +0 -0
  34. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/adaptors/cudo.py +0 -0
  35. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/adaptors/docker.py +0 -0
  36. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/adaptors/gcp.py +0 -0
  37. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/adaptors/ibm.py +0 -0
  38. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/adaptors/kubernetes.py +0 -0
  39. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/adaptors/oci.py +0 -0
  40. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/adaptors/runpod.py +0 -0
  41. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/adaptors/vsphere.py +0 -0
  42. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/admin_policy.py +0 -0
  43. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/authentication.py +0 -0
  44. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/backends/__init__.py +0 -0
  45. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/backends/backend.py +0 -0
  46. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/backends/backend_utils.py +0 -0
  47. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/backends/cloud_vm_ray_backend.py +0 -0
  48. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/backends/docker_utils.py +0 -0
  49. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/backends/local_docker_backend.py +0 -0
  50. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  51. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/backends/wheel_utils.py +0 -0
  52. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/benchmark/__init__.py +0 -0
  53. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/benchmark/benchmark_state.py +0 -0
  54. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/benchmark/benchmark_utils.py +0 -0
  55. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/cloud_stores.py +0 -0
  56. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/__init__.py +0 -0
  57. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/aws.py +0 -0
  58. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/cloud.py +0 -0
  59. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/cloud_registry.py +0 -0
  60. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/cudo.py +0 -0
  61. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/fluidstack.py +0 -0
  62. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/gcp.py +0 -0
  63. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/ibm.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/kubernetes.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/lambda_cloud.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/paperspace.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/runpod.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/scp.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/__init__.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/aws_catalog.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/common.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/config.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/constants.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/oci_catalog.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/scp_catalog.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/utils/__init__.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/utils/aws_utils.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/utils/gcp_utils.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/utils/oci_utils.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/utils/scp_utils.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/clouds/vsphere.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/core.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/dag.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/data/__init__.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/data/data_transfer.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/data/data_utils.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/data/mounting_utils.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/data/storage.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/data/storage_utils.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/execution.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/global_user_state.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/jobs/__init__.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/jobs/constants.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/jobs/controller.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/jobs/core.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/jobs/dashboard/dashboard.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/jobs/dashboard/static/favicon.ico +0 -0
  114. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/jobs/dashboard/templates/index.html +0 -0
  115. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/jobs/state.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/jobs/utils.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/optimizer.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/__init__.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/aws/__init__.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/aws/config.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/aws/instance.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/aws/utils.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/azure/__init__.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/common.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/constants.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/cudo/__init__.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/cudo/config.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/cudo/cudo_machine_type.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/cudo/cudo_utils.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/cudo/cudo_wrapper.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/cudo/instance.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/docker_utils.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/fluidstack/__init__.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/fluidstack/config.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/fluidstack/instance.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/gcp/__init__.py +0 -0
  138. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/gcp/config.py +0 -0
  139. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/gcp/constants.py +0 -0
  140. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/gcp/instance.py +0 -0
  141. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/gcp/instance_utils.py +0 -0
  142. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/gcp/mig_utils.py +0 -0
  143. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/instance_setup.py +0 -0
  144. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/kubernetes/__init__.py +0 -0
  145. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/kubernetes/config.py +0 -0
  146. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
  147. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
  148. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/kubernetes/network.py +0 -0
  149. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/kubernetes/network_utils.py +0 -0
  150. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/kubernetes/utils.py +0 -0
  151. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/lambda_cloud/__init__.py +0 -0
  152. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/lambda_cloud/config.py +0 -0
  153. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/lambda_cloud/instance.py +0 -0
  154. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  155. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/logging.py +0 -0
  156. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/metadata_utils.py +0 -0
  157. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/paperspace/__init__.py +0 -0
  158. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/paperspace/config.py +0 -0
  159. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/paperspace/constants.py +0 -0
  160. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/paperspace/instance.py +0 -0
  161. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/paperspace/utils.py +0 -0
  162. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/runpod/__init__.py +0 -0
  163. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/runpod/config.py +0 -0
  164. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/runpod/instance.py +0 -0
  165. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/runpod/utils.py +0 -0
  166. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/vsphere/__init__.py +0 -0
  167. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/vsphere/common/__init__.py +0 -0
  168. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  169. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  170. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/vsphere/common/custom_script.py +0 -0
  171. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/vsphere/common/id_generator.py +0 -0
  172. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  173. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/vsphere/common/service_manager.py +0 -0
  174. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  175. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  176. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  177. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/vsphere/common/vim_utils.py +0 -0
  178. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/vsphere/config.py +0 -0
  179. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/vsphere/instance.py +0 -0
  180. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/provision/vsphere/vsphere_utils.py +0 -0
  181. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/serve/__init__.py +0 -0
  182. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/serve/autoscalers.py +0 -0
  183. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/serve/constants.py +0 -0
  184. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/serve/controller.py +0 -0
  185. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/serve/core.py +0 -0
  186. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/serve/load_balancer.py +0 -0
  187. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/serve/load_balancing_policies.py +0 -0
  188. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/serve/replica_managers.py +0 -0
  189. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/serve/serve_state.py +0 -0
  190. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/serve/serve_utils.py +0 -0
  191. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/serve/service.py +0 -0
  192. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/serve/service_spec.py +0 -0
  193. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/setup_files/MANIFEST.in +0 -0
  194. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/setup_files/setup.py +0 -0
  195. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/sky_logging.py +0 -0
  196. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/LICENSE +0 -0
  197. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/__init__.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/attempt_skylet.py +0 -0
  199. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/autostop_lib.py +0 -0
  200. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/configs.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/constants.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/events.py +0 -0
  203. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/job_lib.py +0 -0
  204. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/log_lib.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/log_lib.pyi +0 -0
  206. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/providers/__init__.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/providers/command_runner.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/providers/ibm/__init__.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/providers/ibm/node_provider.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/providers/ibm/utils.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/providers/oci/__init__.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/providers/oci/node_provider.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/providers/oci/query_helper.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/providers/oci/utils.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/providers/scp/__init__.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/providers/scp/config.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/providers/scp/node_provider.py +0 -0
  219. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/ray_patches/__init__.py +0 -0
  220. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  221. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/ray_patches/cli.py.patch +0 -0
  222. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  223. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  224. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  225. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/ray_patches/updater.py.patch +0 -0
  226. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/ray_patches/worker.py.patch +0 -0
  227. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/skylet.py +0 -0
  228. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skylet/subprocess_daemon.py +0 -0
  229. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/skypilot_config.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/status_lib.py +0 -0
  231. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/task.py +0 -0
  232. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/aws-ray.yml.j2 +0 -0
  233. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/azure-ray.yml.j2 +0 -0
  234. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/cudo-ray.yml.j2 +0 -0
  235. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  236. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/gcp-ray.yml.j2 +0 -0
  237. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/ibm-ray.yml.j2 +0 -0
  238. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/jobs-controller.yaml.j2 +0 -0
  239. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  240. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  241. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  242. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  243. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  244. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/lambda-ray.yml.j2 +0 -0
  245. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/local-ray.yml.j2 +0 -0
  246. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/oci-ray.yml.j2 +0 -0
  247. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/paperspace-ray.yml.j2 +0 -0
  248. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/runpod-ray.yml.j2 +0 -0
  249. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/scp-ray.yml.j2 +0 -0
  250. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  251. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/templates/vsphere-ray.yml.j2 +0 -0
  252. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/usage/__init__.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/usage/constants.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/__init__.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/accelerator_registry.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/admin_policy_utils.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/cli_utils/__init__.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/cli_utils/status_utils.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/cluster_yaml_utils.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/command_runner.py +0 -0
  261. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/command_runner.pyi +0 -0
  262. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/dag_utils.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/db_utils.py +0 -0
  264. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/env_options.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/kubernetes/__init__.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/kubernetes/create_cluster.sh +0 -0
  267. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  268. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/kubernetes/deploy_remote_cluster.sh +0 -0
  269. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  271. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  273. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  274. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  275. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/kubernetes_enums.py +0 -0
  277. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/log_utils.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/resources_utils.py +0 -0
  279. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/rich_utils.py +0 -0
  280. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/schemas.py +0 -0
  281. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/subprocess_utils.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/timeline.py +0 -0
  283. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/ux_utils.py +0 -0
  284. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/sky/utils/validator.py +0 -0
  285. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  286. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  287. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/skypilot_nightly.egg-info/requires.txt +0 -0
  288. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/skypilot_nightly.egg-info/top_level.txt +0 -0
  289. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/tests/test_api.py +0 -0
  290. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/tests/test_cli.py +0 -0
  291. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/tests/test_config.py +0 -0
  292. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/tests/test_global_user_state.py +0 -0
  293. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/tests/test_jobs.py +0 -0
  294. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/tests/test_jobs_and_serve.py +0 -0
  295. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/tests/test_list_accelerators.py +0 -0
  296. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/tests/test_optimizer_dryruns.py +0 -0
  297. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/tests/test_optimizer_random_dag.py +0 -0
  298. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/tests/test_serve_autoscaler.py +0 -0
  299. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/tests/test_smoke.py +0 -0
  300. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/tests/test_storage.py +0 -0
  301. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/tests/test_wheels.py +0 -0
  302. {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241025}/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.dev20241024
3
+ Version: 1.0.0.dev20241025
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 = 'cbf5c0022ad920edb4f41cfad65a2cf4909d5930'
8
+ _SKYPILOT_COMMIT_SHA = '057bc4b44755ac1e9dadc680e022c369e8ddff52'
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.dev20241024'
38
+ __version__ = '1.0.0.dev20241025'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -1,4 +1,5 @@
1
1
  """Credential checks: check cloud credentials and enable clouds."""
2
+ import os
2
3
  import traceback
3
4
  from types import ModuleType
4
5
  from typing import Dict, Iterable, List, Optional, Tuple, Union
@@ -194,19 +195,25 @@ def get_cached_enabled_clouds_or_refresh(
194
195
  def get_cloud_credential_file_mounts(
195
196
  excluded_clouds: Optional[Iterable[sky_clouds.Cloud]]
196
197
  ) -> Dict[str, str]:
197
- """Returns the files necessary to access all enabled clouds.
198
+ """Returns the files necessary to access all clouds.
198
199
 
199
200
  Returns a dictionary that will be added to a task's file mounts
200
201
  and a list of patterns that will be excluded (used as rsync_exclude).
201
202
  """
202
- enabled_clouds = get_cached_enabled_clouds_or_refresh()
203
+ # Uploading credentials for all clouds instead of only sky check
204
+ # enabled clouds because users may have partial credentials for some
205
+ # clouds to access their specific resources (e.g. cloud storage) but
206
+ # not have the complete credentials to pass sky check.
207
+ clouds = sky_clouds.CLOUD_REGISTRY.values()
203
208
  file_mounts = {}
204
- for cloud in enabled_clouds:
209
+ for cloud in clouds:
205
210
  if (excluded_clouds is not None and
206
211
  sky_clouds.cloud_in_iterable(cloud, excluded_clouds)):
207
212
  continue
208
213
  cloud_file_mounts = cloud.get_credential_file_mounts()
209
- file_mounts.update(cloud_file_mounts)
214
+ for remote_path, local_path in cloud_file_mounts.items():
215
+ if os.path.exists(os.path.expanduser(local_path)):
216
+ file_mounts[remote_path] = local_path
210
217
  # Currently, get_cached_enabled_clouds_or_refresh() does not support r2 as
211
218
  # only clouds with computing instances are marked as enabled by skypilot.
212
219
  # This will be removed when cloudflare/r2 is added as a 'cloud'.
@@ -3085,7 +3085,7 @@ def show_gpus(
3085
3085
  qty_header = 'QTY_FILTER'
3086
3086
  free_header = 'FILTERED_FREE_GPUS'
3087
3087
  else:
3088
- qty_header = 'QTY_PER_NODE'
3088
+ qty_header = 'REQUESTABLE_QTY_PER_NODE'
3089
3089
  free_header = 'TOTAL_FREE_GPUS'
3090
3090
  realtime_gpu_table = log_utils.create_table(
3091
3091
  ['GPU', qty_header, 'TOTAL_GPUS', free_header])
@@ -15,6 +15,7 @@ from sky import exceptions
15
15
  from sky import sky_logging
16
16
  from sky.adaptors import azure
17
17
  from sky.clouds import service_catalog
18
+ from sky.clouds.utils import azure_utils
18
19
  from sky.utils import common_utils
19
20
  from sky.utils import resources_utils
20
21
  from sky.utils import ux_utils
@@ -36,6 +37,15 @@ _MAX_IDENTITY_FETCH_RETRY = 10
36
37
 
37
38
  _DEFAULT_AZURE_UBUNTU_HPC_IMAGE_GB = 30
38
39
  _DEFAULT_AZURE_UBUNTU_2004_IMAGE_GB = 150
40
+ _DEFAULT_SKYPILOT_IMAGE_GB = 30
41
+
42
+ _DEFAULT_CPU_IMAGE_ID = 'skypilot:gpu-ubuntu-2204'
43
+ _DEFAULT_GPU_IMAGE_ID = 'skypilot:gpu-ubuntu-2204'
44
+ _DEFAULT_V1_IMAGE_ID = 'skypilot:v1-ubuntu-2004'
45
+ _DEFAULT_GPU_K80_IMAGE_ID = 'skypilot:k80-ubuntu-2004'
46
+ _FALLBACK_IMAGE_ID = 'skypilot:gpu-ubuntu-2204'
47
+
48
+ _COMMUNITY_IMAGE_PREFIX = '/CommunityGalleries'
39
49
 
40
50
 
41
51
  def _run_output(cmd):
@@ -132,29 +142,56 @@ class Azure(clouds.Cloud):
132
142
  cost += 0.0
133
143
  return cost
134
144
 
145
+ @classmethod
146
+ def get_default_instance_type(
147
+ cls,
148
+ cpus: Optional[str] = None,
149
+ memory: Optional[str] = None,
150
+ disk_tier: Optional[resources_utils.DiskTier] = None
151
+ ) -> Optional[str]:
152
+ return service_catalog.get_default_instance_type(cpus=cpus,
153
+ memory=memory,
154
+ disk_tier=disk_tier,
155
+ clouds='azure')
156
+
135
157
  @classmethod
136
158
  def get_image_size(cls, image_id: str, region: Optional[str]) -> float:
137
- if region is None:
138
- # The region used here is only for where to send the query,
139
- # not the image location. Azure's image is globally available.
140
- region = 'eastus'
141
- is_skypilot_image_tag = False
159
+ # Process skypilot images.
142
160
  if image_id.startswith('skypilot:'):
143
- is_skypilot_image_tag = True
144
161
  image_id = service_catalog.get_image_id_from_tag(image_id,
145
162
  clouds='azure')
146
- image_id_splitted = image_id.split(':')
147
- if len(image_id_splitted) != 4:
148
- with ux_utils.print_exception_no_traceback():
149
- raise ValueError(f'Invalid image id: {image_id}. Expected '
150
- 'format: <publisher>:<offer>:<sku>:<version>')
151
- publisher, offer, sku, version = image_id_splitted
152
- if is_skypilot_image_tag:
153
- if offer == 'ubuntu-hpc':
154
- return _DEFAULT_AZURE_UBUNTU_HPC_IMAGE_GB
163
+ if image_id.startswith(_COMMUNITY_IMAGE_PREFIX):
164
+ # Avoid querying the image size from Azure as
165
+ # all skypilot custom images have the same size.
166
+ return _DEFAULT_SKYPILOT_IMAGE_GB
155
167
  else:
156
- return _DEFAULT_AZURE_UBUNTU_2004_IMAGE_GB
168
+ publisher, offer, sku, version = image_id.split(':')
169
+ if offer == 'ubuntu-hpc':
170
+ return _DEFAULT_AZURE_UBUNTU_HPC_IMAGE_GB
171
+ else:
172
+ return _DEFAULT_AZURE_UBUNTU_2004_IMAGE_GB
173
+
174
+ # Process user-specified images.
175
+ azure_utils.validate_image_id(image_id)
157
176
  compute_client = azure.get_client('compute', cls.get_project_id())
177
+
178
+ # Community gallery image.
179
+ if image_id.startswith(_COMMUNITY_IMAGE_PREFIX):
180
+ if region is None:
181
+ return 0.0
182
+ _, _, gallery_name, _, image_name = image_id.split('/')
183
+ try:
184
+ return azure_utils.get_community_image_size(
185
+ compute_client, gallery_name, image_name, region)
186
+ except exceptions.ResourcesUnavailableError:
187
+ return 0.0
188
+
189
+ # Marketplace image
190
+ if region is None:
191
+ # The region used here is only for where to send the query,
192
+ # not the image location. Marketplace image is globally available.
193
+ region = 'eastus'
194
+ publisher, offer, sku, version = image_id.split(':')
158
195
  try:
159
196
  image = compute_client.virtual_machine_images.get(
160
197
  region, publisher, offer, sku, version)
@@ -176,40 +213,23 @@ class Azure(clouds.Cloud):
176
213
  size_in_gb = size_in_bytes / (1024**3)
177
214
  return size_in_gb
178
215
 
179
- @classmethod
180
- def get_default_instance_type(
181
- cls,
182
- cpus: Optional[str] = None,
183
- memory: Optional[str] = None,
184
- disk_tier: Optional[resources_utils.DiskTier] = None
185
- ) -> Optional[str]:
186
- return service_catalog.get_default_instance_type(cpus=cpus,
187
- memory=memory,
188
- disk_tier=disk_tier,
189
- clouds='azure')
190
-
191
216
  def _get_default_image_tag(self, gen_version, instance_type) -> str:
192
217
  # ubuntu-2004 v21.08.30, K80 requires image with old NVIDIA driver version
193
218
  acc = self.get_accelerators_from_instance_type(instance_type)
194
219
  if acc is not None:
195
220
  acc_name = list(acc.keys())[0]
196
221
  if acc_name == 'K80':
197
- return 'skypilot:k80-ubuntu-2004'
198
-
199
- # ubuntu-2004 v21.11.04, the previous image we used in the past for
200
- # V1 HyperV instance before we change default image to ubuntu-hpc.
222
+ return _DEFAULT_GPU_K80_IMAGE_ID
223
+ # About Gen V1 vs V2:
201
224
  # In Azure, all instances with K80 (Standard_NC series), some
202
225
  # instances with M60 (Standard_NV series) and some cpu instances
203
- # (Basic_A, Standard_D, ...) are V1 instance. For these instances,
204
- # we use the previous image.
226
+ # (Basic_A, Standard_D, ...) are V1 instance.
227
+ # All A100 instances are V2.
205
228
  if gen_version == 'V1':
206
- return 'skypilot:v1-ubuntu-2004'
207
-
208
- # nvidia-driver: 535.54.03, cuda: 12.2
209
- # see: https://github.com/Azure/azhpc-images/releases/tag/ubuntu-hpc-20230803
210
- # All A100 instances is of gen2, so it will always use
211
- # the latest ubuntu-hpc:2204 image.
212
- return 'skypilot:gpu-ubuntu-2204'
229
+ return _DEFAULT_V1_IMAGE_ID
230
+ if acc is None:
231
+ return _DEFAULT_CPU_IMAGE_ID
232
+ return _DEFAULT_GPU_IMAGE_ID
213
233
 
214
234
  @classmethod
215
235
  def regions_with_offering(cls, instance_type: str,
@@ -302,17 +322,34 @@ class Azure(clouds.Cloud):
302
322
  else:
303
323
  assert region_name in resources.image_id, resources.image_id
304
324
  image_id = resources.image_id[region_name]
325
+
326
+ # Checked basic image syntax in resources.py
305
327
  if image_id.startswith('skypilot:'):
306
328
  image_id = service_catalog.get_image_id_from_tag(image_id,
307
329
  clouds='azure')
308
- # Already checked in resources.py
309
- publisher, offer, sku, version = image_id.split(':')
310
- image_config = {
311
- 'image_publisher': publisher,
312
- 'image_offer': offer,
313
- 'image_sku': sku,
314
- 'image_version': version,
315
- }
330
+ # Fallback if image does not exist in the specified region.
331
+ # Putting fallback here instead of at image validation
332
+ # when creating the resource because community images are
333
+ # regional so we need the correct region when we check whether
334
+ # the image exists.
335
+ if image_id.startswith(
336
+ _COMMUNITY_IMAGE_PREFIX
337
+ ) and region_name not in azure_catalog.COMMUNITY_IMAGE_AVAILABLE_REGIONS:
338
+ logger.info(f'Azure image {image_id} does not exist in region '
339
+ f'{region_name} so use the fallback image instead.')
340
+ image_id = service_catalog.get_image_id_from_tag(
341
+ _FALLBACK_IMAGE_ID, clouds='azure')
342
+
343
+ if image_id.startswith(_COMMUNITY_IMAGE_PREFIX):
344
+ image_config = {'community_gallery_image_id': image_id}
345
+ else:
346
+ publisher, offer, sku, version = image_id.split(':')
347
+ image_config = {
348
+ 'image_publisher': publisher,
349
+ 'image_offer': offer,
350
+ 'image_sku': sku,
351
+ 'image_version': version,
352
+ }
316
353
 
317
354
  # Setup the A10 nvidia driver.
318
355
  need_nvidia_driver_extension = (acc_dict is not None and
@@ -380,7 +417,6 @@ class Azure(clouds.Cloud):
380
417
  # Setting disk performance tier for high disk tier.
381
418
  if disk_tier == resources_utils.DiskTier.HIGH:
382
419
  resources_vars['disk_performance_tier'] = 'P50'
383
-
384
420
  return resources_vars
385
421
 
386
422
  def _get_feasible_launchable_resources(
@@ -468,7 +468,7 @@ class OCI(clouds.Cloud):
468
468
  api_key_file = oci_cfg[
469
469
  'key_file'] if 'key_file' in oci_cfg else 'BadConf'
470
470
  sky_cfg_file = oci_utils.oci_config.get_sky_user_config_file()
471
- except ImportError:
471
+ except (ImportError, oci_adaptor.oci.exceptions.ConfigFileNotFound):
472
472
  return {}
473
473
 
474
474
  # OCI config and API key file are mandatory
@@ -12,6 +12,21 @@ from sky.clouds.service_catalog import common
12
12
  from sky.utils import resources_utils
13
13
  from sky.utils import ux_utils
14
14
 
15
+ # This list should match the list of regions in
16
+ # skypilot image generation Packer script's replication_regions
17
+ # sky/clouds/service_catalog/images/skypilot-azure-cpu-ubuntu.pkr.hcl
18
+ COMMUNITY_IMAGE_AVAILABLE_REGIONS = {
19
+ 'centralus',
20
+ 'eastus',
21
+ 'eastus2',
22
+ 'northcentralus',
23
+ 'southcentralus',
24
+ 'westcentralus',
25
+ 'westus',
26
+ 'westus2',
27
+ 'westus3',
28
+ }
29
+
15
30
  # The frequency of pulling the latest catalog from the cloud provider.
16
31
  # Though the catalog update is manual in our skypilot-catalog repo, we
17
32
  # still want to pull the latest catalog periodically to make sure the
@@ -120,8 +120,14 @@ def list_accelerators_realtime(
120
120
 
121
121
  # Generate the GPU quantities for the accelerators
122
122
  if accelerator_name and accelerator_count > 0:
123
- for count in range(1, accelerator_count + 1):
123
+ count = 1
124
+ while count <= accelerator_count:
124
125
  accelerators_qtys.add((accelerator_name, count))
126
+ count *= 2
127
+ # Add the accelerator count if it's not already in the set
128
+ # (e.g., if there's 12 GPUs, we should have qtys 1, 2, 4, 8, 12)
129
+ if accelerator_count not in accelerators_qtys:
130
+ accelerators_qtys.add((accelerator_name, accelerator_count))
125
131
 
126
132
  for pod in pods:
127
133
  # Get all the pods running on the node
@@ -0,0 +1,91 @@
1
+ """Utilies for Azure"""
2
+
3
+ import typing
4
+
5
+ from sky import exceptions
6
+ from sky.adaptors import azure
7
+ from sky.utils import ux_utils
8
+
9
+ if typing.TYPE_CHECKING:
10
+ from azure.mgmt import compute as azure_compute
11
+ from azure.mgmt.compute import models as azure_compute_models
12
+
13
+
14
+ def validate_image_id(image_id: str):
15
+ """Check if the image ID has a valid format.
16
+
17
+ Raises:
18
+ ValueError: If the image ID is invalid.
19
+ """
20
+ image_id_colon_splitted = image_id.split(':')
21
+ image_id_slash_splitted = image_id.split('/')
22
+ if len(image_id_slash_splitted) != 5 and len(image_id_colon_splitted) != 4:
23
+ with ux_utils.print_exception_no_traceback():
24
+ raise ValueError(
25
+ f'Invalid image id for Azure: {image_id}. Expected format: \n'
26
+ '* Marketplace image ID: <publisher>:<offer>:<sku>:<version>\n'
27
+ '* Community image ID: '
28
+ '/CommunityGalleries/<gallery-name>/Images/<image-name>')
29
+ if len(image_id_slash_splitted) == 5:
30
+ _, gallery_type, _, image_type, _ = image_id.split('/')
31
+ if gallery_type != 'CommunityGalleries' or image_type != 'Images':
32
+ with ux_utils.print_exception_no_traceback():
33
+ raise ValueError(
34
+ f'Invalid community image id for Azure: {image_id}.\n'
35
+ 'Expected format: '
36
+ '/CommunityGalleries/<gallery-name>/Images/<image-name>')
37
+
38
+
39
+ def get_community_image(
40
+ compute_client: 'azure_compute.ComputeManagementClient', image_id: str,
41
+ region: str) -> 'azure_compute_models.CommunityGalleryImage':
42
+ """Get community image from cloud.
43
+
44
+ Args:
45
+ image_id: /CommunityGalleries/<gallery-name>/Images/<image-name>
46
+ Raises:
47
+ ResourcesUnavailableError
48
+ """
49
+ try:
50
+ _, _, gallery_name, _, image_name = image_id.split('/')
51
+ return compute_client.community_gallery_images.get(
52
+ location=region,
53
+ public_gallery_name=gallery_name,
54
+ gallery_image_name=image_name)
55
+ except azure.exceptions().AzureError as e:
56
+ raise exceptions.ResourcesUnavailableError(
57
+ f'Community image {image_id} does not exist in region {region}.'
58
+ ) from e
59
+
60
+
61
+ def get_community_image_size(
62
+ compute_client: 'azure_compute.ComputeManagementClient',
63
+ gallery_name: str, image_name: str, region: str) -> float:
64
+ """Get the size of the community image from cloud.
65
+
66
+ Args:
67
+ image_id: /CommunityGalleries/<gallery-name>/Images/<image-name>
68
+ Raises:
69
+ ResourcesUnavailableError
70
+ """
71
+ try:
72
+ image_versions = compute_client.community_gallery_image_versions.list(
73
+ location=region,
74
+ public_gallery_name=gallery_name,
75
+ gallery_image_name=image_name,
76
+ )
77
+ image_versions = list(image_versions)
78
+ if not image_versions:
79
+ raise exceptions.ResourcesUnavailableError(
80
+ f'No versions available for Azure community image {image_name}')
81
+ latest_version = image_versions[-1].name
82
+
83
+ image_details = compute_client.community_gallery_image_versions.get(
84
+ location=region,
85
+ public_gallery_name=gallery_name,
86
+ gallery_image_name=image_name,
87
+ gallery_image_version_name=latest_version)
88
+ return image_details.storage_profile.os_disk_image.disk_size_gb
89
+ except azure.exceptions().AzureError as e:
90
+ raise exceptions.ResourcesUnavailableError(
91
+ f'Failed to get community image size: {e}.') from e
@@ -1,7 +1,7 @@
1
1
  """Exceptions."""
2
2
  import enum
3
3
  import typing
4
- from typing import List, Optional
4
+ from typing import List, Optional, Sequence
5
5
 
6
6
  if typing.TYPE_CHECKING:
7
7
  from sky import status_lib
@@ -61,12 +61,12 @@ class ProvisionPrechecksError(Exception):
61
61
  the error will be raised.
62
62
 
63
63
  Args:
64
- reasons: (List[Exception]) The reasons why the prechecks failed.
64
+ reasons: (Sequence[Exception]) The reasons why the prechecks failed.
65
65
  """
66
66
 
67
- def __init__(self, reasons: List[Exception]) -> None:
67
+ def __init__(self, reasons: Sequence[Exception]) -> None:
68
68
  super().__init__()
69
- self.reasons = list(reasons)
69
+ self.reasons = reasons
70
70
 
71
71
 
72
72
  class ManagedJobReachedMaxRetriesError(Exception):
@@ -24,6 +24,7 @@ from sky.utils import common_utils
24
24
  from sky.utils import ux_utils
25
25
 
26
26
  if typing.TYPE_CHECKING:
27
+ from sky import resources
27
28
  from sky import task as task_lib
28
29
 
29
30
  logger = sky_logging.init_logger(__name__)
@@ -327,8 +328,7 @@ class StrategyExecutor:
327
328
  'Failure happened before provisioning. Failover '
328
329
  f'reasons: {reasons_str}')
329
330
  if raise_on_failure:
330
- raise exceptions.ProvisionPrechecksError(
331
- reasons=reasons)
331
+ raise exceptions.ProvisionPrechecksError(reasons)
332
332
  return None
333
333
  logger.info('Failed to launch a cluster with error: '
334
334
  f'{common_utils.format_exception(e)})')
@@ -382,7 +382,7 @@ class FailoverStrategyExecutor(StrategyExecutor, name='FAILOVER',
382
382
  # first retry in the same cloud/region. (Inside recover() we may not
383
383
  # rely on cluster handle, as it can be None if the cluster is
384
384
  # preempted.)
385
- self._launched_resources: Optional['sky.resources.Resources'] = None
385
+ self._launched_resources: Optional['resources.Resources'] = None
386
386
 
387
387
  def _launch(self,
388
388
  max_retry: Optional[int] = 3,
@@ -13,6 +13,12 @@
13
13
  "metadata": {
14
14
  "description": "Subnet parameters."
15
15
  }
16
+ },
17
+ "nsgName": {
18
+ "type": "string",
19
+ "metadata": {
20
+ "description": "Name of the Network Security Group associated with the SkyPilot cluster."
21
+ }
16
22
  }
17
23
  },
18
24
  "variables": {
@@ -20,7 +26,7 @@
20
26
  "location": "[resourceGroup().location]",
21
27
  "msiName": "[concat('sky-', parameters('clusterId'), '-msi')]",
22
28
  "roleAssignmentName": "[concat('sky-', parameters('clusterId'), '-ra')]",
23
- "nsgName": "[concat('sky-', parameters('clusterId'), '-nsg')]",
29
+ "nsgName": "[parameters('nsgName')]",
24
30
  "nsg": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgName'))]",
25
31
  "vnetName": "[concat('sky-', parameters('clusterId'), '-vnet')]",
26
32
  "subnetName": "[concat('sky-', parameters('clusterId'), '-subnet')]"
@@ -8,7 +8,7 @@ import json
8
8
  from pathlib import Path
9
9
  import random
10
10
  import time
11
- from typing import Any, Callable
11
+ from typing import Any, Callable, Tuple
12
12
 
13
13
  from sky import exceptions
14
14
  from sky import sky_logging
@@ -22,6 +22,7 @@ UNIQUE_ID_LEN = 4
22
22
  _DEPLOYMENT_NAME = 'skypilot-config'
23
23
  _LEGACY_DEPLOYMENT_NAME = 'ray-config'
24
24
  _RESOURCE_GROUP_WAIT_FOR_DELETION_TIMEOUT = 480 # 8 minutes
25
+ _CLUSTER_ID = '{cluster_name_on_cloud}-{unique_id}'
25
26
 
26
27
 
27
28
  def get_azure_sdk_function(client: Any, function_name: str) -> Callable:
@@ -41,6 +42,19 @@ def get_azure_sdk_function(client: Any, function_name: str) -> Callable:
41
42
  return func
42
43
 
43
44
 
45
+ def get_cluster_id_and_nsg_name(resource_group: str,
46
+ cluster_name_on_cloud: str) -> Tuple[str, str]:
47
+ hasher = hashlib.md5(resource_group.encode('utf-8'))
48
+ unique_id = hasher.hexdigest()[:UNIQUE_ID_LEN]
49
+ # We use the cluster name + resource group hash as the
50
+ # unique ID for the cluster, as we need to make sure that
51
+ # the deployments have unique names during failover.
52
+ cluster_id = _CLUSTER_ID.format(cluster_name_on_cloud=cluster_name_on_cloud,
53
+ unique_id=unique_id)
54
+ nsg_name = f'sky-{cluster_id}-nsg'
55
+ return cluster_id, nsg_name
56
+
57
+
44
58
  @common.log_function_start_end
45
59
  def bootstrap_instances(
46
60
  region: str, cluster_name_on_cloud: str,
@@ -117,12 +131,13 @@ def bootstrap_instances(
117
131
 
118
132
  logger.info(f'Using cluster name: {cluster_name_on_cloud}')
119
133
 
120
- hasher = hashlib.md5(provider_config['resource_group'].encode('utf-8'))
121
- unique_id = hasher.hexdigest()[:UNIQUE_ID_LEN]
134
+ cluster_id, nsg_name = get_cluster_id_and_nsg_name(
135
+ resource_group=provider_config['resource_group'],
136
+ cluster_name_on_cloud=cluster_name_on_cloud)
122
137
  subnet_mask = provider_config.get('subnet_mask')
123
138
  if subnet_mask is None:
124
139
  # choose a random subnet, skipping most common value of 0
125
- random.seed(unique_id)
140
+ random.seed(cluster_id)
126
141
  subnet_mask = f'10.{random.randint(1, 254)}.0.0/16'
127
142
  logger.info(f'Using subnet mask: {subnet_mask}')
128
143
 
@@ -135,10 +150,10 @@ def bootstrap_instances(
135
150
  'value': subnet_mask
136
151
  },
137
152
  'clusterId': {
138
- # We use the cluster name + resource group hash as the
139
- # unique ID for the cluster, as we need to make sure that
140
- # the deployments have unique names during failover.
141
- 'value': f'{cluster_name_on_cloud}-{unique_id}'
153
+ 'value': cluster_id
154
+ },
155
+ 'nsgName': {
156
+ 'value': nsg_name
142
157
  },
143
158
  },
144
159
  }