skypilot-nightly 1.0.0.dev20240923__tar.gz → 1.0.0.dev20240925__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 (300) hide show
  1. {skypilot_nightly-1.0.0.dev20240923/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20240925}/PKG-INFO +1 -1
  2. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/__init__.py +11 -2
  3. skypilot_nightly-1.0.0.dev20240925/sky/admin_policy.py +101 -0
  4. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/backends/cloud_vm_ray_backend.py +15 -5
  5. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/dag.py +17 -13
  6. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/exceptions.py +5 -0
  7. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/execution.py +13 -3
  8. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/jobs/controller.py +2 -0
  9. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/jobs/core.py +4 -0
  10. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/serve/core.py +6 -0
  11. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skypilot_config.py +64 -37
  12. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/jobs-controller.yaml.j2 +3 -1
  13. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/sky-serve-controller.yaml.j2 +3 -1
  14. skypilot_nightly-1.0.0.dev20240925/sky/utils/admin_policy_utils.py +145 -0
  15. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/common_utils.py +6 -5
  16. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/controller_utils.py +42 -29
  17. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/dag_utils.py +6 -3
  18. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/schemas.py +8 -0
  19. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925/skypilot_nightly.egg-info}/PKG-INFO +1 -1
  20. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/skypilot_nightly.egg-info/SOURCES.txt +2 -0
  21. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/tests/test_config.py +21 -4
  22. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/LICENSE +0 -0
  23. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/MANIFEST.in +0 -0
  24. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/README.md +0 -0
  25. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/pyproject.toml +0 -0
  26. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/setup.cfg +0 -0
  27. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/setup.py +0 -0
  28. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/adaptors/__init__.py +0 -0
  29. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/adaptors/aws.py +0 -0
  30. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/adaptors/azure.py +0 -0
  31. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/adaptors/cloudflare.py +0 -0
  32. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/adaptors/common.py +0 -0
  33. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/adaptors/cudo.py +0 -0
  34. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/adaptors/docker.py +0 -0
  35. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/adaptors/gcp.py +0 -0
  36. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/adaptors/ibm.py +0 -0
  37. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/adaptors/kubernetes.py +0 -0
  38. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/adaptors/oci.py +0 -0
  39. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/adaptors/runpod.py +0 -0
  40. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/adaptors/vsphere.py +0 -0
  41. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/authentication.py +0 -0
  42. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/backends/__init__.py +0 -0
  43. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/backends/backend.py +0 -0
  44. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/backends/backend_utils.py +0 -0
  45. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/backends/docker_utils.py +0 -0
  46. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/backends/local_docker_backend.py +0 -0
  47. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  48. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/backends/wheel_utils.py +0 -0
  49. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/benchmark/__init__.py +0 -0
  50. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/benchmark/benchmark_state.py +0 -0
  51. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/benchmark/benchmark_utils.py +0 -0
  52. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/check.py +0 -0
  53. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/cli.py +0 -0
  54. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/cloud_stores.py +0 -0
  55. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/__init__.py +0 -0
  56. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/aws.py +0 -0
  57. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/azure.py +0 -0
  58. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/cloud.py +0 -0
  59. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/cloud_registry.py +0 -0
  60. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/cudo.py +0 -0
  61. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/fluidstack.py +0 -0
  62. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/gcp.py +0 -0
  63. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/ibm.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/kubernetes.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/lambda_cloud.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/oci.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/paperspace.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/runpod.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/scp.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/__init__.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/aws_catalog.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/azure_catalog.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/common.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/config.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/constants.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/kubernetes_catalog.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/oci_catalog.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/scp_catalog.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/utils/__init__.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/utils/aws_utils.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/utils/gcp_utils.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/utils/lambda_utils.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/utils/oci_utils.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/utils/scp_utils.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/clouds/vsphere.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/core.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/data/__init__.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/data/data_transfer.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/data/data_utils.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/data/mounting_utils.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/data/storage.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/data/storage_utils.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/global_user_state.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/jobs/__init__.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/jobs/constants.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/jobs/dashboard/dashboard.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/jobs/dashboard/static/favicon.ico +0 -0
  114. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/jobs/dashboard/templates/index.html +0 -0
  115. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/jobs/recovery_strategy.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/jobs/state.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/jobs/utils.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/optimizer.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/__init__.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/aws/__init__.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/aws/config.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/aws/instance.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/aws/utils.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/azure/__init__.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/azure/azure-config-template.json +0 -0
  126. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/azure/azure-vm-template.json +0 -0
  127. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/azure/config.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/azure/instance.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/common.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/constants.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/cudo/__init__.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/cudo/config.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/cudo/cudo_machine_type.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/cudo/cudo_utils.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/cudo/cudo_wrapper.py +0 -0
  136. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/cudo/instance.py +0 -0
  137. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/docker_utils.py +0 -0
  138. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/fluidstack/__init__.py +0 -0
  139. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/fluidstack/config.py +0 -0
  140. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  141. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/fluidstack/instance.py +0 -0
  142. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/gcp/__init__.py +0 -0
  143. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/gcp/config.py +0 -0
  144. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/gcp/constants.py +0 -0
  145. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/gcp/instance.py +0 -0
  146. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/gcp/instance_utils.py +0 -0
  147. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/gcp/mig_utils.py +0 -0
  148. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/instance_setup.py +0 -0
  149. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/kubernetes/__init__.py +0 -0
  150. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/kubernetes/config.py +0 -0
  151. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/kubernetes/instance.py +0 -0
  152. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
  153. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
  154. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/kubernetes/network.py +0 -0
  155. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/kubernetes/network_utils.py +0 -0
  156. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/kubernetes/utils.py +0 -0
  157. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/logging.py +0 -0
  158. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/metadata_utils.py +0 -0
  159. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/paperspace/__init__.py +0 -0
  160. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/paperspace/config.py +0 -0
  161. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/paperspace/constants.py +0 -0
  162. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/paperspace/instance.py +0 -0
  163. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/paperspace/utils.py +0 -0
  164. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/provisioner.py +0 -0
  165. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/runpod/__init__.py +0 -0
  166. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/runpod/config.py +0 -0
  167. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/runpod/instance.py +0 -0
  168. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/runpod/utils.py +0 -0
  169. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/vsphere/__init__.py +0 -0
  170. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/vsphere/common/__init__.py +0 -0
  171. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  172. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  173. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/vsphere/common/custom_script.py +0 -0
  174. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/vsphere/common/id_generator.py +0 -0
  175. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  176. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/vsphere/common/service_manager.py +0 -0
  177. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  178. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  179. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  180. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/vsphere/common/vim_utils.py +0 -0
  181. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/vsphere/config.py +0 -0
  182. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/vsphere/instance.py +0 -0
  183. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/provision/vsphere/vsphere_utils.py +0 -0
  184. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/resources.py +0 -0
  185. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/serve/__init__.py +0 -0
  186. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/serve/autoscalers.py +0 -0
  187. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/serve/constants.py +0 -0
  188. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/serve/controller.py +0 -0
  189. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/serve/load_balancer.py +0 -0
  190. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/serve/load_balancing_policies.py +0 -0
  191. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/serve/replica_managers.py +0 -0
  192. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/serve/serve_state.py +0 -0
  193. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/serve/serve_utils.py +0 -0
  194. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/serve/service.py +0 -0
  195. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/serve/service_spec.py +0 -0
  196. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/setup_files/MANIFEST.in +0 -0
  197. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/setup_files/setup.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/sky_logging.py +0 -0
  199. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/LICENSE +0 -0
  200. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/__init__.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/attempt_skylet.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/autostop_lib.py +0 -0
  203. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/configs.py +0 -0
  204. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/constants.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/events.py +0 -0
  206. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/job_lib.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/log_lib.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/log_lib.pyi +0 -0
  209. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/providers/__init__.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/providers/command_runner.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/providers/ibm/__init__.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/providers/ibm/node_provider.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/providers/ibm/utils.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/providers/lambda_cloud/__init__.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/providers/lambda_cloud/node_provider.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/providers/oci/__init__.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/providers/oci/node_provider.py +0 -0
  219. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/providers/oci/query_helper.py +0 -0
  220. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/providers/oci/utils.py +0 -0
  221. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/providers/scp/__init__.py +0 -0
  222. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/providers/scp/config.py +0 -0
  223. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/providers/scp/node_provider.py +0 -0
  224. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/ray_patches/__init__.py +0 -0
  225. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  226. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/ray_patches/cli.py.patch +0 -0
  227. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  228. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  229. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  230. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/ray_patches/updater.py.patch +0 -0
  231. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/ray_patches/worker.py.patch +0 -0
  232. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/skylet.py +0 -0
  233. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/skylet/subprocess_daemon.py +0 -0
  234. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/status_lib.py +0 -0
  235. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/task.py +0 -0
  236. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/aws-ray.yml.j2 +0 -0
  237. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/azure-ray.yml.j2 +0 -0
  238. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/cudo-ray.yml.j2 +0 -0
  239. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  240. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/gcp-ray.yml.j2 +0 -0
  241. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/ibm-ray.yml.j2 +0 -0
  242. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  243. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  244. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  245. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  246. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  247. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/lambda-ray.yml.j2 +0 -0
  248. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/local-ray.yml.j2 +0 -0
  249. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/oci-ray.yml.j2 +0 -0
  250. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/paperspace-ray.yml.j2 +0 -0
  251. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/runpod-ray.yml.j2 +0 -0
  252. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/scp-ray.yml.j2 +0 -0
  253. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/templates/vsphere-ray.yml.j2 +0 -0
  254. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/usage/__init__.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/usage/constants.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/usage/usage_lib.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/__init__.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/accelerator_registry.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/cli_utils/__init__.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/cli_utils/status_utils.py +0 -0
  261. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/cluster_yaml_utils.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/command_runner.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/command_runner.pyi +0 -0
  264. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/db_utils.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/env_options.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/kubernetes/__init__.py +0 -0
  267. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/kubernetes/create_cluster.sh +0 -0
  268. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  269. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  271. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  273. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  274. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  275. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/kubernetes_enums.py +0 -0
  277. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/log_utils.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/resources_utils.py +0 -0
  279. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/rich_utils.py +0 -0
  280. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/subprocess_utils.py +0 -0
  281. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/timeline.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/ux_utils.py +0 -0
  283. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/sky/utils/validator.py +0 -0
  284. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  285. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  286. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/skypilot_nightly.egg-info/requires.txt +0 -0
  287. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/skypilot_nightly.egg-info/top_level.txt +0 -0
  288. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/tests/test_api.py +0 -0
  289. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/tests/test_cli.py +0 -0
  290. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/tests/test_global_user_state.py +0 -0
  291. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/tests/test_jobs.py +0 -0
  292. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/tests/test_jobs_and_serve.py +0 -0
  293. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/tests/test_list_accelerators.py +0 -0
  294. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/tests/test_optimizer_dryruns.py +0 -0
  295. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/tests/test_optimizer_random_dag.py +0 -0
  296. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/tests/test_serve_autoscaler.py +0 -0
  297. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/tests/test_smoke.py +0 -0
  298. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/tests/test_storage.py +0 -0
  299. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/tests/test_wheels.py +0 -0
  300. {skypilot_nightly-1.0.0.dev20240923 → skypilot_nightly-1.0.0.dev20240925}/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.dev20240923
3
+ Version: 1.0.0.dev20240925
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 = 'd602225c897f10ca67a2d5b5db21982c0dc8c1ec'
8
+ _SKYPILOT_COMMIT_SHA = 'e13c39104cc3fca974e2afa207bcca24817f4e17'
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.dev20240923'
38
+ __version__ = '1.0.0.dev20240925'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -82,6 +82,9 @@ _set_http_proxy_env_vars()
82
82
  from sky import backends
83
83
  from sky import benchmark
84
84
  from sky import clouds
85
+ from sky.admin_policy import AdminPolicy
86
+ from sky.admin_policy import MutatedUserRequest
87
+ from sky.admin_policy import UserRequest
85
88
  from sky.clouds.service_catalog import list_accelerators
86
89
  from sky.core import autostop
87
90
  from sky.core import cancel
@@ -112,6 +115,7 @@ from sky.optimizer import Optimizer
112
115
  from sky.optimizer import OptimizeTarget
113
116
  from sky.resources import Resources
114
117
  from sky.skylet.job_lib import JobStatus
118
+ from sky.skypilot_config import Config
115
119
  from sky.status_lib import ClusterStatus
116
120
  from sky.task import Task
117
121
 
@@ -185,4 +189,9 @@ __all__ = [
185
189
  # core APIs Storage Management
186
190
  'storage_ls',
187
191
  'storage_delete',
192
+ # Admin Policy
193
+ 'UserRequest',
194
+ 'MutatedUserRequest',
195
+ 'AdminPolicy',
196
+ 'Config',
188
197
  ]
@@ -0,0 +1,101 @@
1
+ """Interface for admin-defined policy for user requests."""
2
+ import abc
3
+ import dataclasses
4
+ import typing
5
+ from typing import Optional
6
+
7
+ if typing.TYPE_CHECKING:
8
+ import sky
9
+
10
+
11
+ @dataclasses.dataclass
12
+ class RequestOptions:
13
+ """Request options for admin policy.
14
+
15
+ Args:
16
+ cluster_name: Name of the cluster to create/reuse. It is None if not
17
+ specified by the user.
18
+ idle_minutes_to_autostop: Autostop setting requested by a user. The
19
+ cluster will be set to autostop after this many minutes of idleness.
20
+ down: If true, use autodown rather than autostop.
21
+ dryrun: Is the request a dryrun?
22
+ """
23
+ cluster_name: Optional[str]
24
+ idle_minutes_to_autostop: Optional[int]
25
+ down: bool
26
+ dryrun: bool
27
+
28
+
29
+ @dataclasses.dataclass
30
+ class UserRequest:
31
+ """A user request.
32
+
33
+ A "user request" is defined as a `sky launch / exec` command or its API
34
+ equivalent.
35
+
36
+ `sky jobs launch / serve up` involves multiple launch requests, including
37
+ the launch of controller and clusters for a job (which can have multiple
38
+ tasks if it is a pipeline) or service replicas. Each launch is a separate
39
+ request.
40
+
41
+ This class wraps the underlying task, the global skypilot config used to run
42
+ a task, and the request options.
43
+
44
+ Args:
45
+ task: User specified task.
46
+ skypilot_config: Global skypilot config to be used in this request.
47
+ request_options: Request options. It is None for jobs and services.
48
+ """
49
+ task: 'sky.Task'
50
+ skypilot_config: 'sky.Config'
51
+ request_options: Optional['RequestOptions'] = None
52
+
53
+
54
+ @dataclasses.dataclass
55
+ class MutatedUserRequest:
56
+ task: 'sky.Task'
57
+ skypilot_config: 'sky.Config'
58
+
59
+
60
+ # pylint: disable=line-too-long
61
+ class AdminPolicy:
62
+ """Abstract interface of an admin-defined policy for all user requests.
63
+
64
+ Admins can implement a subclass of AdminPolicy with the following signature:
65
+
66
+ import sky
67
+
68
+ class SkyPilotPolicyV1(sky.AdminPolicy):
69
+ def validate_and_mutate(user_request: UserRequest) -> MutatedUserRequest:
70
+ ...
71
+ return MutatedUserRequest(task=..., skypilot_config=...)
72
+
73
+ The policy can mutate both task and skypilot_config. Admins then distribute
74
+ a simple module that contains this implementation, installable in a way
75
+ that it can be imported by users from the same Python environment where
76
+ SkyPilot is running.
77
+
78
+ Users can register a subclass of AdminPolicy in the SkyPilot config file
79
+ under the key 'admin_policy', e.g.
80
+
81
+ admin_policy: my_package.SkyPilotPolicyV1
82
+ """
83
+
84
+ @classmethod
85
+ @abc.abstractmethod
86
+ def validate_and_mutate(cls,
87
+ user_request: UserRequest) -> MutatedUserRequest:
88
+ """Validates and mutates the user request and returns mutated request.
89
+
90
+ Args:
91
+ user_request: The user request to validate and mutate.
92
+ UserRequest contains (sky.Task, sky.Config)
93
+
94
+ Returns:
95
+ MutatedUserRequest: The mutated user request.
96
+
97
+ Raises:
98
+ Exception to throw if the user request failed the validation.
99
+ """
100
+ raise NotImplementedError(
101
+ 'Your policy must implement validate_and_mutate')
@@ -4147,11 +4147,21 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
4147
4147
  idle_minutes_to_autostop >= 0):
4148
4148
  # We should hit this code path only for the controllers on
4149
4149
  # Kubernetes and RunPod clusters.
4150
- assert (controller_utils.Controllers.from_name(
4151
- handle.cluster_name) is not None), handle.cluster_name
4152
- logger.info('Auto-stop is not supported for Kubernetes '
4153
- 'and RunPod clusters. Skipping.')
4154
- return
4150
+ controller = controller_utils.Controllers.from_name(
4151
+ handle.cluster_name)
4152
+ assert (controller is not None), handle.cluster_name
4153
+ if (controller
4154
+ == controller_utils.Controllers.SKY_SERVE_CONTROLLER and
4155
+ isinstance(handle.launched_resources.cloud,
4156
+ clouds.Kubernetes)):
4157
+ # For SkyServe controllers on Kubernetes: override autostop
4158
+ # behavior to force autodown (instead of no-op)
4159
+ # to avoid dangling controllers.
4160
+ down = True
4161
+ else:
4162
+ logger.info('Auto-stop is not supported for Kubernetes '
4163
+ 'and RunPod clusters. Skipping.')
4164
+ return
4155
4165
 
4156
4166
  # Check if we're stopping spot
4157
4167
  assert (handle.launched_resources is not None and
@@ -1,8 +1,12 @@
1
1
  """DAGs: user applications to be run."""
2
2
  import pprint
3
3
  import threading
4
+ import typing
4
5
  from typing import List, Optional
5
6
 
7
+ if typing.TYPE_CHECKING:
8
+ from sky import task
9
+
6
10
 
7
11
  class Dag:
8
12
  """Dag: a user application, represented as a DAG of Tasks.
@@ -13,37 +17,37 @@ class Dag:
13
17
  >>> task = sky.Task(...)
14
18
  """
15
19
 
16
- def __init__(self):
17
- self.tasks = []
20
+ def __init__(self) -> None:
21
+ self.tasks: List['task.Task'] = []
18
22
  import networkx as nx # pylint: disable=import-outside-toplevel
19
23
 
20
24
  self.graph = nx.DiGraph()
21
- self.name = None
25
+ self.name: Optional[str] = None
22
26
 
23
- def add(self, task):
27
+ def add(self, task: 'task.Task') -> None:
24
28
  self.graph.add_node(task)
25
29
  self.tasks.append(task)
26
30
 
27
- def remove(self, task):
31
+ def remove(self, task: 'task.Task') -> None:
28
32
  self.tasks.remove(task)
29
33
  self.graph.remove_node(task)
30
34
 
31
- def add_edge(self, op1, op2):
35
+ def add_edge(self, op1: 'task.Task', op2: 'task.Task') -> None:
32
36
  assert op1 in self.graph.nodes
33
37
  assert op2 in self.graph.nodes
34
38
  self.graph.add_edge(op1, op2)
35
39
 
36
- def __len__(self):
40
+ def __len__(self) -> int:
37
41
  return len(self.tasks)
38
42
 
39
- def __enter__(self):
43
+ def __enter__(self) -> 'Dag':
40
44
  push_dag(self)
41
45
  return self
42
46
 
43
- def __exit__(self, exc_type, exc_value, traceback):
47
+ def __exit__(self, exc_type, exc_value, traceback) -> None:
44
48
  pop_dag()
45
49
 
46
- def __repr__(self):
50
+ def __repr__(self) -> str:
47
51
  pformat = pprint.pformat(self.tasks)
48
52
  return f'DAG:\n{pformat}'
49
53
 
@@ -70,15 +74,15 @@ class Dag:
70
74
 
71
75
  class _DagContext(threading.local):
72
76
  """A thread-local stack of Dags."""
73
- _current_dag = None
77
+ _current_dag: Optional[Dag] = None
74
78
  _previous_dags: List[Dag] = []
75
79
 
76
- def push_dag(self, dag):
80
+ def push_dag(self, dag: Dag):
77
81
  if self._current_dag is not None:
78
82
  self._previous_dags.append(self._current_dag)
79
83
  self._current_dag = dag
80
84
 
81
- def pop_dag(self):
85
+ def pop_dag(self) -> Optional[Dag]:
82
86
  old_dag = self._current_dag
83
87
  if self._previous_dags:
84
88
  self._current_dag = self._previous_dags.pop()
@@ -286,3 +286,8 @@ class ServeUserTerminatedError(Exception):
286
286
 
287
287
  class PortDoesNotExistError(Exception):
288
288
  """Raised when the port does not exist."""
289
+
290
+
291
+ class UserRequestRejectedByPolicy(Exception):
292
+ """Raised when a user request is rejected by an admin policy."""
293
+ pass
@@ -9,6 +9,7 @@ from typing import List, Optional, Tuple, Union
9
9
  import colorama
10
10
 
11
11
  import sky
12
+ from sky import admin_policy
12
13
  from sky import backends
13
14
  from sky import clouds
14
15
  from sky import global_user_state
@@ -16,6 +17,7 @@ from sky import optimizer
16
17
  from sky import sky_logging
17
18
  from sky.backends import backend_utils
18
19
  from sky.usage import usage_lib
20
+ from sky.utils import admin_policy_utils
19
21
  from sky.utils import controller_utils
20
22
  from sky.utils import dag_utils
21
23
  from sky.utils import env_options
@@ -158,7 +160,16 @@ def _execute(
158
160
  handle: Optional[backends.ResourceHandle]; the handle to the cluster. None
159
161
  if dryrun.
160
162
  """
163
+
161
164
  dag = dag_utils.convert_entrypoint_to_dag(entrypoint)
165
+ dag, _ = admin_policy_utils.apply(
166
+ dag,
167
+ request_options=admin_policy.RequestOptions(
168
+ cluster_name=cluster_name,
169
+ idle_minutes_to_autostop=idle_minutes_to_autostop,
170
+ down=down,
171
+ dryrun=dryrun,
172
+ ))
162
173
  assert len(dag) == 1, f'We support 1 task for now. {dag}'
163
174
  task = dag.tasks[0]
164
175
 
@@ -170,9 +181,8 @@ def _execute(
170
181
 
171
182
  cluster_exists = False
172
183
  if cluster_name is not None:
173
- existing_handle = global_user_state.get_handle_from_cluster_name(
174
- cluster_name)
175
- cluster_exists = existing_handle is not None
184
+ cluster_record = global_user_state.get_cluster_from_name(cluster_name)
185
+ cluster_exists = cluster_record is not None
176
186
  # TODO(woosuk): If the cluster exists, print a warning that
177
187
  # `cpus` and `memory` are not used as a job scheduling constraint,
178
188
  # unlike `gpus`.
@@ -64,6 +64,7 @@ class JobsController:
64
64
  if len(self._dag.tasks) <= 1:
65
65
  task_name = self._dag_name
66
66
  else:
67
+ assert task.name is not None, task
67
68
  task_name = task.name
68
69
  # This is guaranteed by the spot_launch API, where we fill in
69
70
  # the task.name with
@@ -447,6 +448,7 @@ def _cleanup(job_id: int, dag_yaml: str):
447
448
  # controller, we should keep it in sync with JobsController.__init__()
448
449
  dag, _ = _get_dag_and_name(dag_yaml)
449
450
  for task in dag.tasks:
451
+ assert task.name is not None, task
450
452
  cluster_name = managed_job_utils.generate_managed_job_cluster_name(
451
453
  task.name, job_id)
452
454
  recovery_strategy.terminate_cluster(cluster_name)
@@ -18,6 +18,7 @@ from sky.jobs import constants as managed_job_constants
18
18
  from sky.jobs import utils as managed_job_utils
19
19
  from sky.skylet import constants as skylet_constants
20
20
  from sky.usage import usage_lib
21
+ from sky.utils import admin_policy_utils
21
22
  from sky.utils import common_utils
22
23
  from sky.utils import controller_utils
23
24
  from sky.utils import dag_utils
@@ -54,6 +55,8 @@ def launch(
54
55
  dag_uuid = str(uuid.uuid4().hex[:4])
55
56
 
56
57
  dag = dag_utils.convert_entrypoint_to_dag(entrypoint)
58
+ dag, mutated_user_config = admin_policy_utils.apply(
59
+ dag, use_mutated_config_in_current_request=False)
57
60
  if not dag.is_chain():
58
61
  with ux_utils.print_exception_no_traceback():
59
62
  raise ValueError('Only single-task or chain DAG is '
@@ -103,6 +106,7 @@ def launch(
103
106
  **controller_utils.shared_controller_vars_to_fill(
104
107
  controller_utils.Controllers.JOBS_CONTROLLER,
105
108
  remote_user_config_path=remote_user_config_path,
109
+ local_user_config=mutated_user_config,
106
110
  ),
107
111
  }
108
112
 
@@ -17,6 +17,7 @@ from sky.serve import serve_state
17
17
  from sky.serve import serve_utils
18
18
  from sky.skylet import constants
19
19
  from sky.usage import usage_lib
20
+ from sky.utils import admin_policy_utils
20
21
  from sky.utils import common_utils
21
22
  from sky.utils import controller_utils
22
23
  from sky.utils import resources_utils
@@ -124,6 +125,10 @@ def up(
124
125
 
125
126
  _validate_service_task(task)
126
127
 
128
+ dag, mutated_user_config = admin_policy_utils.apply(
129
+ task, use_mutated_config_in_current_request=False)
130
+ task = dag.tasks[0]
131
+
127
132
  controller_utils.maybe_translate_local_file_mounts_and_sync_up(task,
128
133
  path='serve')
129
134
 
@@ -158,6 +163,7 @@ def up(
158
163
  **controller_utils.shared_controller_vars_to_fill(
159
164
  controller=controller_utils.Controllers.SKY_SERVE_CONTROLLER,
160
165
  remote_user_config_path=remote_config_yaml_path,
166
+ local_user_config=mutated_user_config,
161
167
  ),
162
168
  }
163
169
  common_utils.fill_template(serve_constants.CONTROLLER_TEMPLATE,
@@ -61,6 +61,8 @@ from sky.utils import common_utils
61
61
  from sky.utils import schemas
62
62
  from sky.utils import ux_utils
63
63
 
64
+ logger = sky_logging.init_logger(__name__)
65
+
64
66
  # The config path is discovered in this order:
65
67
  #
66
68
  # (1) (Used internally) If env var {ENV_VAR_SKYPILOT_CONFIG} exists, use its
@@ -78,11 +80,57 @@ ENV_VAR_SKYPILOT_CONFIG = 'SKYPILOT_CONFIG'
78
80
  # Path to the local config file.
79
81
  CONFIG_PATH = '~/.sky/config.yaml'
80
82
 
81
- logger = sky_logging.init_logger(__name__)
83
+
84
+ class Config(Dict[str, Any]):
85
+ """SkyPilot config that supports setting/getting values with nested keys."""
86
+
87
+ def get_nested(self,
88
+ keys: Tuple[str, ...],
89
+ default_value: Any,
90
+ override_configs: Optional[Dict[str, Any]] = None) -> Any:
91
+ """Gets a nested key.
92
+
93
+ If any key is not found, or any intermediate key does not point to a
94
+ dict value, returns 'default_value'.
95
+
96
+ Args:
97
+ keys: A tuple of strings representing the nested keys.
98
+ default_value: The default value to return if the key is not found.
99
+ override_configs: A dict of override configs with the same schema as
100
+ the config file, but only containing the keys to override.
101
+
102
+ Returns:
103
+ The value of the nested key, or 'default_value' if not found.
104
+ """
105
+ config = copy.deepcopy(self)
106
+ if override_configs is not None:
107
+ config = _recursive_update(config, override_configs)
108
+ return _get_nested(config, keys, default_value)
109
+
110
+ def set_nested(self, keys: Tuple[str, ...], value: Any) -> None:
111
+ """In-place sets a nested key to value.
112
+
113
+ Like get_nested(), if any key is not found, this will not raise an
114
+ error.
115
+ """
116
+ override = {}
117
+ for i, key in enumerate(reversed(keys)):
118
+ if i == 0:
119
+ override = {key: value}
120
+ else:
121
+ override = {key: override}
122
+ _recursive_update(self, override)
123
+
124
+ @classmethod
125
+ def from_dict(cls, config: Optional[Dict[str, Any]]) -> 'Config':
126
+ if config is None:
127
+ return cls()
128
+ return cls(**config)
129
+
82
130
 
83
131
  # The loaded config.
84
- _dict: Optional[Dict[str, Any]] = None
85
- _loaded_config_path = None
132
+ _dict = Config()
133
+ _loaded_config_path: Optional[str] = None
86
134
 
87
135
 
88
136
  def _get_nested(configs: Optional[Dict[str, Any]], keys: Iterable[str],
@@ -131,17 +179,11 @@ def get_nested(keys: Tuple[str, ...],
131
179
  ), (f'Override configs must not be provided when keys {keys} is not within '
132
180
  'constants.OVERRIDEABLE_CONFIG_KEYS: '
133
181
  f'{constants.OVERRIDEABLE_CONFIG_KEYS}')
134
- config: Dict[str, Any] = {}
135
- if _dict is not None:
136
- config = copy.deepcopy(_dict)
137
- if override_configs is None:
138
- override_configs = {}
139
- config = _recursive_update(config, override_configs)
140
- return _get_nested(config, keys, default_value)
182
+ return _dict.get_nested(keys, default_value, override_configs)
141
183
 
142
184
 
143
- def _recursive_update(base_config: Dict[str, Any],
144
- override_config: Dict[str, Any]) -> Dict[str, Any]:
185
+ def _recursive_update(base_config: Config,
186
+ override_config: Dict[str, Any]) -> Config:
145
187
  """Recursively updates base configuration with override configuration"""
146
188
  for key, value in override_config.items():
147
189
  if (isinstance(value, dict) and key in base_config and
@@ -157,22 +199,14 @@ def set_nested(keys: Tuple[str, ...], value: Any) -> Dict[str, Any]:
157
199
 
158
200
  Like get_nested(), if any key is not found, this will not raise an error.
159
201
  """
160
- _check_loaded_or_die()
161
- assert _dict is not None
162
- override = {}
163
- for i, key in enumerate(reversed(keys)):
164
- if i == 0:
165
- override = {key: value}
166
- else:
167
- override = {key: override}
168
- return _recursive_update(copy.deepcopy(_dict), override)
202
+ copied_dict = copy.deepcopy(_dict)
203
+ copied_dict.set_nested(keys, value)
204
+ return dict(**copied_dict)
169
205
 
170
206
 
171
- def to_dict() -> Dict[str, Any]:
207
+ def to_dict() -> Config:
172
208
  """Returns a deep-copied version of the current config."""
173
- if _dict is not None:
174
- return copy.deepcopy(_dict)
175
- return {}
209
+ return copy.deepcopy(_dict)
176
210
 
177
211
 
178
212
  def _try_load_config() -> None:
@@ -192,13 +226,14 @@ def _try_load_config() -> None:
192
226
  config_path = os.path.expanduser(config_path)
193
227
  if os.path.exists(config_path):
194
228
  logger.debug(f'Using config path: {config_path}')
195
- _loaded_config_path = config_path
196
229
  try:
197
- _dict = common_utils.read_yaml(config_path)
230
+ config = common_utils.read_yaml(config_path)
231
+ _dict = Config.from_dict(config)
232
+ _loaded_config_path = config_path
198
233
  logger.debug(f'Config loaded:\n{pprint.pformat(_dict)}')
199
234
  except yaml.YAMLError as e:
200
235
  logger.error(f'Error in loading config file ({config_path}):', e)
201
- if _dict is not None:
236
+ if _dict:
202
237
  common_utils.validate_schema(
203
238
  _dict,
204
239
  schemas.get_config_schema(),
@@ -219,14 +254,6 @@ def loaded_config_path() -> Optional[str]:
219
254
  _try_load_config()
220
255
 
221
256
 
222
- def _check_loaded_or_die():
223
- """Checks loaded() is true; otherwise raises RuntimeError."""
224
- if _dict is None:
225
- raise RuntimeError(
226
- f'No user configs loaded. Check {CONFIG_PATH} exists and '
227
- 'can be loaded.')
228
-
229
-
230
257
  def loaded() -> bool:
231
258
  """Returns if the user configurations are loaded."""
232
- return _dict is not None
259
+ return bool(_dict)
@@ -4,7 +4,9 @@ name: {{dag_name}}
4
4
 
5
5
  file_mounts:
6
6
  {{remote_user_yaml_path}}: {{user_yaml_path}}
7
- {{remote_user_config_path}}: skypilot:local_skypilot_config_path
7
+ {%- if local_user_config_path is not none %}
8
+ {{remote_user_config_path}}: {{local_user_config_path}}
9
+ {%- endif %}
8
10
  {%- for remote_catalog_path, local_catalog_path in modified_catalogs.items() %}
9
11
  {{remote_catalog_path}}: {{local_catalog_path}}
10
12
  {%- endfor %}
@@ -23,7 +23,9 @@ setup: |
23
23
 
24
24
  file_mounts:
25
25
  {{remote_task_yaml_path}}: {{local_task_yaml_path}}
26
- {{remote_user_config_path}}: skypilot:local_skypilot_config_path
26
+ {%- if local_user_config_path is not none %}
27
+ {{remote_user_config_path}}: {{local_user_config_path}}
28
+ {%- endif %}
27
29
  {%- for remote_catalog_path, local_catalog_path in modified_catalogs.items() %}
28
30
  {{remote_catalog_path}}: {{local_catalog_path}}
29
31
  {%- endfor %}