skypilot-nightly 1.0.0.dev20250823__tar.gz → 1.0.0.dev20250824__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.

Potentially problematic release.


This version of skypilot-nightly might be problematic. Click here for more details.

Files changed (566) hide show
  1. {skypilot_nightly-1.0.0.dev20250823/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250824}/PKG-INFO +5 -1
  2. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/__init__.py +2 -2
  3. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/kubernetes.py +4 -0
  4. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/404.html +1 -1
  5. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  6. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/clusters/[cluster].html +1 -1
  7. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/clusters.html +1 -1
  8. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/config.html +1 -1
  9. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/index.html +1 -1
  10. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/infra/[context].html +1 -1
  11. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/infra.html +1 -1
  12. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/jobs/[job].html +1 -1
  13. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/jobs/pools/[pool].html +1 -1
  14. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/jobs.html +1 -1
  15. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/users.html +1 -1
  16. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/volumes.html +1 -1
  17. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/workspace/new.html +1 -1
  18. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/workspaces/[name].html +1 -1
  19. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/workspaces.html +1 -1
  20. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/exceptions.py +12 -0
  21. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/kubernetes/utils.py +176 -34
  22. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/setup_files/dependencies.py +4 -2
  23. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824/skypilot_nightly.egg-info}/PKG-INFO +5 -1
  24. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/skypilot_nightly.egg-info/SOURCES.txt +2 -2
  25. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/skypilot_nightly.egg-info/requires.txt +3 -0
  26. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_config.py +3 -3
  27. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/LICENSE +0 -0
  28. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/MANIFEST.in +0 -0
  29. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/README.md +0 -0
  30. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/pyproject.toml +0 -0
  31. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/setup.cfg +0 -0
  32. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/setup.py +0 -0
  33. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/__init__.py +0 -0
  34. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/aws.py +0 -0
  35. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/azure.py +0 -0
  36. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/cloudflare.py +0 -0
  37. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/common.py +0 -0
  38. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/cudo.py +0 -0
  39. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/do.py +0 -0
  40. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/docker.py +0 -0
  41. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/gcp.py +0 -0
  42. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/hyperbolic.py +0 -0
  43. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/ibm.py +0 -0
  44. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/nebius.py +0 -0
  45. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/oci.py +0 -0
  46. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/runpod.py +0 -0
  47. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/vast.py +0 -0
  48. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/adaptors/vsphere.py +0 -0
  49. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/admin_policy.py +0 -0
  50. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/authentication.py +0 -0
  51. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/backends/__init__.py +0 -0
  52. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/backends/backend.py +0 -0
  53. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/backends/backend_utils.py +0 -0
  54. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/backends/cloud_vm_ray_backend.py +0 -0
  55. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/backends/docker_utils.py +0 -0
  56. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/backends/local_docker_backend.py +0 -0
  57. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
  58. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/backends/wheel_utils.py +0 -0
  59. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/__init__.py +0 -0
  60. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/aws_catalog.py +0 -0
  61. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/azure_catalog.py +0 -0
  62. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/common.py +0 -0
  63. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/config.py +0 -0
  64. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/cudo_catalog.py +0 -0
  65. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/data_fetchers/__init__.py +0 -0
  66. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/data_fetchers/analyze.py +0 -0
  67. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/data_fetchers/fetch_aws.py +0 -0
  68. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/data_fetchers/fetch_azure.py +0 -0
  69. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/data_fetchers/fetch_cudo.py +0 -0
  70. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/data_fetchers/fetch_fluidstack.py +0 -0
  71. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/data_fetchers/fetch_gcp.py +0 -0
  72. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/data_fetchers/fetch_hyperbolic.py +0 -0
  73. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/data_fetchers/fetch_ibm.py +0 -0
  74. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
  75. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/data_fetchers/fetch_nebius.py +0 -0
  76. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/data_fetchers/fetch_vast.py +0 -0
  77. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/data_fetchers/fetch_vsphere.py +0 -0
  78. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/do_catalog.py +0 -0
  79. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/fluidstack_catalog.py +0 -0
  80. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/gcp_catalog.py +0 -0
  81. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/hyperbolic_catalog.py +0 -0
  82. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/ibm_catalog.py +0 -0
  83. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/kubernetes_catalog.py +0 -0
  84. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/lambda_catalog.py +0 -0
  85. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/nebius_catalog.py +0 -0
  86. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/oci_catalog.py +0 -0
  87. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/paperspace_catalog.py +0 -0
  88. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/runpod_catalog.py +0 -0
  89. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/scp_catalog.py +0 -0
  90. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/ssh_catalog.py +0 -0
  91. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/vast_catalog.py +0 -0
  92. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/catalog/vsphere_catalog.py +0 -0
  93. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/check.py +0 -0
  94. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/cli.py +0 -0
  95. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/client/__init__.py +0 -0
  96. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/client/cli/__init__.py +0 -0
  97. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/client/cli/command.py +0 -0
  98. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/client/cli/deprecation_utils.py +0 -0
  99. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/client/cli/flags.py +0 -0
  100. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/client/cli/git.py +0 -0
  101. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/client/common.py +0 -0
  102. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/client/oauth.py +0 -0
  103. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/client/sdk.py +0 -0
  104. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/client/sdk_async.py +0 -0
  105. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/client/service_account_auth.py +0 -0
  106. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/cloud_stores.py +0 -0
  107. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/__init__.py +0 -0
  108. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/aws.py +0 -0
  109. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/azure.py +0 -0
  110. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/cloud.py +0 -0
  111. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/cudo.py +0 -0
  112. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/do.py +0 -0
  113. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/fluidstack.py +0 -0
  114. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/gcp.py +0 -0
  115. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/hyperbolic.py +0 -0
  116. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/ibm.py +0 -0
  117. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/kubernetes.py +0 -0
  118. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/lambda_cloud.py +0 -0
  119. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/nebius.py +0 -0
  120. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/oci.py +0 -0
  121. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/paperspace.py +0 -0
  122. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/runpod.py +0 -0
  123. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/scp.py +0 -0
  124. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/ssh.py +0 -0
  125. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/utils/__init__.py +0 -0
  126. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/utils/aws_utils.py +0 -0
  127. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/utils/azure_utils.py +0 -0
  128. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/utils/gcp_utils.py +0 -0
  129. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/utils/oci_utils.py +0 -0
  130. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/utils/scp_utils.py +0 -0
  131. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/vast.py +0 -0
  132. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/clouds/vsphere.py +0 -0
  133. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/core.py +0 -0
  134. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dag.py +0 -0
  135. {skypilot_nightly-1.0.0.dev20250823/sky/dashboard/out/_next/static/UQeqZCi6L_itwVPDcn3ba → skypilot_nightly-1.0.0.dev20250824/sky/dashboard/out/_next/static/P-Au_yHqNENhnPF3shEpK}/_buildManifest.js +0 -0
  136. {skypilot_nightly-1.0.0.dev20250823/sky/dashboard/out/_next/static/UQeqZCi6L_itwVPDcn3ba → skypilot_nightly-1.0.0.dev20250824/sky/dashboard/out/_next/static/P-Au_yHqNENhnPF3shEpK}/_ssgManifest.js +0 -0
  137. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/1121-8afcf719ea87debc.js +0 -0
  138. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/1141-943efc7aff0f0c06.js +0 -0
  139. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/1272-1ef0bf0237faccdb.js +0 -0
  140. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/2350.fab69e61bac57b23.js +0 -0
  141. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/3015-6c9c09593b1e67b6.js +0 -0
  142. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/3785.d5b86f6ebc88e6e6.js +0 -0
  143. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/3850-ff4a9a69d978632b.js +0 -0
  144. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/3937.210053269f121201.js +0 -0
  145. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/4045.b30465273dc5e468.js +0 -0
  146. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/4676-9da7fdbde90b5549.js +0 -0
  147. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/4725.10f7a9a5d3ea8208.js +0 -0
  148. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/4783.c485f48348349f47.js +0 -0
  149. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/5739-d67458fcb1386c92.js +0 -0
  150. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/6130-2be46d70a38f1e82.js +0 -0
  151. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/6135-4b4d5e824b7f9d3c.js +0 -0
  152. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/616-3d59f75e2ccf9321.js +0 -0
  153. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/6601-06114c982db410b6.js +0 -0
  154. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/6856-049014c6d43d127b.js +0 -0
  155. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/6989-01359c57e018caa4.js +0 -0
  156. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/6990-08b2a1cae076a943.js +0 -0
  157. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/7205-88191679e7988c57.js +0 -0
  158. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/7325.b4bc99ce0892dcd5.js +0 -0
  159. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/7411-b15471acd2cba716.js +0 -0
  160. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/754-d0da8ab45f9509e9.js +0 -0
  161. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/7669.1f5d9a402bf5cc42.js +0 -0
  162. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/8969-4a6f1a928fb6d370.js +0 -0
  163. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/9025.a1bef12d672bb66d.js +0 -0
  164. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/9037-89a84fd7fa31362d.js +0 -0
  165. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/9946.3b7b43c217ff70ec.js +0 -0
  166. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/9984.7eb6cc51fb460cae.js +0 -0
  167. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/fd9d1056-86323a29a8f7e46a.js +0 -0
  168. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/framework-cf60a09ccd051a10.js +0 -0
  169. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/main-app-587214043926b3cc.js +0 -0
  170. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/main-f15ccb73239a3bf1.js +0 -0
  171. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/_app-ce361c6959bc2001.js +0 -0
  172. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js +0 -0
  173. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-06afb50d25f7c61f.js +0 -0
  174. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-a0527109c2fab467.js +0 -0
  175. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/clusters-469814d711d63b1b.js +0 -0
  176. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/config-dfb9bf07b13045f4.js +0 -0
  177. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/index-444f1804401f04ea.js +0 -0
  178. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/infra/[context]-81351f95f3bec08e.js +0 -0
  179. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/infra-c320641c2bcbbea6.js +0 -0
  180. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-dd64309c3fe67ed2.js +0 -0
  181. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/jobs/pools/[pool]-07349868f7905d37.js +0 -0
  182. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/jobs-7421e63ac35f8fce.js +0 -0
  183. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/users-018bf31cda52e11b.js +0 -0
  184. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/volumes-739726d6b823f532.js +0 -0
  185. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js +0 -0
  186. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-de06e613e20bc977.js +0 -0
  187. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/pages/workspaces-be35b22e2046564c.js +0 -0
  188. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js +0 -0
  189. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/chunks/webpack-6e76f636a048e145.js +0 -0
  190. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/_next/static/css/4614e06482d7309e.css +0 -0
  191. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/favicon.ico +0 -0
  192. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/skypilot.svg +0 -0
  193. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/dashboard/out/videos/cursor-small.mp4 +0 -0
  194. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/data/__init__.py +0 -0
  195. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/data/data_transfer.py +0 -0
  196. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/data/data_utils.py +0 -0
  197. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/data/mounting_utils.py +0 -0
  198. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/data/storage.py +0 -0
  199. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/data/storage_utils.py +0 -0
  200. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/execution.py +0 -0
  201. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/global_user_state.py +0 -0
  202. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/jobs/__init__.py +0 -0
  203. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/jobs/client/__init__.py +0 -0
  204. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/jobs/client/sdk.py +0 -0
  205. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/jobs/client/sdk_async.py +0 -0
  206. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/jobs/constants.py +0 -0
  207. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/jobs/controller.py +0 -0
  208. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/jobs/recovery_strategy.py +0 -0
  209. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/jobs/scheduler.py +0 -0
  210. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/jobs/server/__init__.py +0 -0
  211. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/jobs/server/core.py +0 -0
  212. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/jobs/server/server.py +0 -0
  213. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/jobs/server/utils.py +0 -0
  214. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/jobs/state.py +0 -0
  215. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/jobs/utils.py +0 -0
  216. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/logs/__init__.py +0 -0
  217. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/logs/agent.py +0 -0
  218. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/logs/aws.py +0 -0
  219. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/logs/gcp.py +0 -0
  220. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/metrics/__init__.py +0 -0
  221. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/metrics/utils.py +0 -0
  222. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/models.py +0 -0
  223. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/optimizer.py +0 -0
  224. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/__init__.py +0 -0
  225. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/aws/__init__.py +0 -0
  226. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/aws/config.py +0 -0
  227. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/aws/instance.py +0 -0
  228. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/aws/utils.py +0 -0
  229. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/azure/__init__.py +0 -0
  230. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/azure/azure-config-template.json +0 -0
  231. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/azure/config.py +0 -0
  232. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/azure/instance.py +0 -0
  233. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/common.py +0 -0
  234. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/constants.py +0 -0
  235. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/cudo/__init__.py +0 -0
  236. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/cudo/config.py +0 -0
  237. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/cudo/cudo_machine_type.py +0 -0
  238. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/cudo/cudo_utils.py +0 -0
  239. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/cudo/cudo_wrapper.py +0 -0
  240. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/cudo/instance.py +0 -0
  241. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/do/__init__.py +0 -0
  242. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/do/config.py +0 -0
  243. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/do/constants.py +0 -0
  244. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/do/instance.py +0 -0
  245. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/do/utils.py +0 -0
  246. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/docker_utils.py +0 -0
  247. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/fluidstack/__init__.py +0 -0
  248. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/fluidstack/config.py +0 -0
  249. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
  250. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/fluidstack/instance.py +0 -0
  251. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/gcp/__init__.py +0 -0
  252. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/gcp/config.py +0 -0
  253. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/gcp/constants.py +0 -0
  254. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/gcp/instance.py +0 -0
  255. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/gcp/instance_utils.py +0 -0
  256. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/gcp/mig_utils.py +0 -0
  257. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/gcp/volume_utils.py +0 -0
  258. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/hyperbolic/__init__.py +0 -0
  259. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/hyperbolic/config.py +0 -0
  260. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/hyperbolic/instance.py +0 -0
  261. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/hyperbolic/utils.py +0 -0
  262. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/instance_setup.py +0 -0
  263. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/kubernetes/__init__.py +0 -0
  264. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/kubernetes/config.py +0 -0
  265. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/kubernetes/constants.py +0 -0
  266. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/kubernetes/instance.py +0 -0
  267. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/kubernetes/manifests/fusermount-server-daemonset.yaml +0 -0
  268. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/kubernetes/network.py +0 -0
  269. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/kubernetes/network_utils.py +0 -0
  270. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/kubernetes/volume.py +0 -0
  271. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/lambda_cloud/__init__.py +0 -0
  272. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/lambda_cloud/config.py +0 -0
  273. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/lambda_cloud/instance.py +0 -0
  274. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
  275. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/logging.py +0 -0
  276. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/metadata_utils.py +0 -0
  277. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/nebius/__init__.py +0 -0
  278. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/nebius/config.py +0 -0
  279. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/nebius/constants.py +0 -0
  280. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/nebius/instance.py +0 -0
  281. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/nebius/utils.py +0 -0
  282. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/oci/__init__.py +0 -0
  283. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/oci/config.py +0 -0
  284. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/oci/instance.py +0 -0
  285. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/oci/query_utils.py +0 -0
  286. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/paperspace/__init__.py +0 -0
  287. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/paperspace/config.py +0 -0
  288. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/paperspace/constants.py +0 -0
  289. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/paperspace/instance.py +0 -0
  290. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/paperspace/utils.py +0 -0
  291. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/provisioner.py +0 -0
  292. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/runpod/__init__.py +0 -0
  293. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/runpod/api/__init__.py +0 -0
  294. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/runpod/api/commands.py +0 -0
  295. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/runpod/api/pods.py +0 -0
  296. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/runpod/config.py +0 -0
  297. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/runpod/instance.py +0 -0
  298. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/runpod/utils.py +0 -0
  299. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/scp/__init__.py +0 -0
  300. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/scp/config.py +0 -0
  301. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/scp/instance.py +0 -0
  302. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/ssh/__init__.py +0 -0
  303. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vast/__init__.py +0 -0
  304. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vast/config.py +0 -0
  305. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vast/instance.py +0 -0
  306. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vast/utils.py +0 -0
  307. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vsphere/__init__.py +0 -0
  308. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vsphere/common/__init__.py +0 -0
  309. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vsphere/common/cls_api_client.py +0 -0
  310. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
  311. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vsphere/common/custom_script.py +0 -0
  312. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vsphere/common/id_generator.py +0 -0
  313. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vsphere/common/metadata_utils.py +0 -0
  314. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vsphere/common/service_manager.py +0 -0
  315. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
  316. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vsphere/common/ssl_helper.py +0 -0
  317. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vsphere/common/vapiconnect.py +0 -0
  318. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vsphere/common/vim_utils.py +0 -0
  319. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vsphere/config.py +0 -0
  320. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vsphere/instance.py +0 -0
  321. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/provision/vsphere/vsphere_utils.py +0 -0
  322. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/py.typed +0 -0
  323. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/resources.py +0 -0
  324. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/__init__.py +0 -0
  325. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/api/__init__.py +0 -0
  326. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/api/responses.py +0 -0
  327. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/db/README +0 -0
  328. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/db/env.py +0 -0
  329. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/db/global_user_state/001_initial_schema.py +0 -0
  330. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/db/global_user_state/002_add_workspace_to_cluster_history.py +0 -0
  331. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/db/global_user_state/003_fix_initial_revision.py +0 -0
  332. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/db/global_user_state/004_is_managed.py +0 -0
  333. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/db/global_user_state/005_cluster_event.py +0 -0
  334. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/db/global_user_state/006_provision_log.py +0 -0
  335. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/db/script.py.mako +0 -0
  336. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/db/serve_state/001_initial_schema.py +0 -0
  337. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/db/spot_jobs/001_initial_schema.py +0 -0
  338. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/db/spot_jobs/002_cluster_pool.py +0 -0
  339. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/db/spot_jobs/003_pool_hash.py +0 -0
  340. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/generated/__init__.py +0 -0
  341. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/generated/autostopv1_pb2.py +0 -0
  342. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/generated/autostopv1_pb2.pyi +0 -0
  343. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/schemas/generated/autostopv1_pb2_grpc.py +0 -0
  344. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/__init__.py +0 -0
  345. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/autoscalers.py +0 -0
  346. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/client/__init__.py +0 -0
  347. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/client/impl.py +0 -0
  348. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/client/sdk.py +0 -0
  349. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/client/sdk_async.py +0 -0
  350. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/constants.py +0 -0
  351. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/controller.py +0 -0
  352. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/load_balancer.py +0 -0
  353. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/load_balancing_policies.py +0 -0
  354. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/replica_managers.py +0 -0
  355. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/serve_state.py +0 -0
  356. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/serve_utils.py +0 -0
  357. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/server/__init__.py +0 -0
  358. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/server/core.py +0 -0
  359. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/server/impl.py +0 -0
  360. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/server/server.py +0 -0
  361. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/service.py +0 -0
  362. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/service_spec.py +0 -0
  363. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/serve/spot_placer.py +0 -0
  364. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/__init__.py +0 -0
  365. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/auth/__init__.py +0 -0
  366. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/auth/authn.py +0 -0
  367. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/auth/oauth2_proxy.py +0 -0
  368. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/common.py +0 -0
  369. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/config.py +0 -0
  370. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/constants.py +0 -0
  371. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/daemons.py +0 -0
  372. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/html/log.html +0 -0
  373. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/html/token_page.html +0 -0
  374. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/metrics.py +0 -0
  375. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/requests/__init__.py +0 -0
  376. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/requests/event_loop.py +0 -0
  377. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/requests/executor.py +0 -0
  378. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/requests/payloads.py +0 -0
  379. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/requests/preconditions.py +0 -0
  380. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/requests/process.py +0 -0
  381. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/requests/queues/__init__.py +0 -0
  382. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/requests/queues/local_queue.py +0 -0
  383. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/requests/queues/mp_queue.py +0 -0
  384. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/requests/requests.py +0 -0
  385. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/requests/serializers/__init__.py +0 -0
  386. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/requests/serializers/decoders.py +0 -0
  387. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/requests/serializers/encoders.py +0 -0
  388. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/rest.py +0 -0
  389. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/server.py +0 -0
  390. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/state.py +0 -0
  391. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/stream_utils.py +0 -0
  392. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/uvicorn.py +0 -0
  393. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/server/versions.py +0 -0
  394. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/setup_files/MANIFEST.in +0 -0
  395. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/setup_files/alembic.ini +0 -0
  396. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/setup_files/setup.py +0 -0
  397. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/sky_logging.py +0 -0
  398. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/LICENSE +0 -0
  399. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/__init__.py +0 -0
  400. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/attempt_skylet.py +0 -0
  401. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/autostop_lib.py +0 -0
  402. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/configs.py +0 -0
  403. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/constants.py +0 -0
  404. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/events.py +0 -0
  405. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/job_lib.py +0 -0
  406. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/log_lib.py +0 -0
  407. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/log_lib.pyi +0 -0
  408. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/providers/__init__.py +0 -0
  409. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/providers/command_runner.py +0 -0
  410. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/providers/ibm/__init__.py +0 -0
  411. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/providers/ibm/node_provider.py +0 -0
  412. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/providers/ibm/utils.py +0 -0
  413. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
  414. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/ray_patches/__init__.py +0 -0
  415. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/ray_patches/autoscaler.py.diff +0 -0
  416. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
  417. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/ray_patches/cli.py.diff +0 -0
  418. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/ray_patches/cli.py.patch +0 -0
  419. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/ray_patches/command_runner.py.diff +0 -0
  420. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
  421. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/ray_patches/log_monitor.py.diff +0 -0
  422. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
  423. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/ray_patches/resource_demand_scheduler.py.diff +0 -0
  424. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
  425. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/ray_patches/updater.py.diff +0 -0
  426. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/ray_patches/updater.py.patch +0 -0
  427. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/ray_patches/worker.py.diff +0 -0
  428. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/ray_patches/worker.py.patch +0 -0
  429. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/services.py +0 -0
  430. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/skylet.py +0 -0
  431. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skylet/subprocess_daemon.py +0 -0
  432. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/skypilot_config.py +0 -0
  433. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/ssh_node_pools/__init__.py +0 -0
  434. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/ssh_node_pools/core.py +0 -0
  435. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/ssh_node_pools/server.py +0 -0
  436. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/task.py +0 -0
  437. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/aws-ray.yml.j2 +0 -0
  438. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/azure-ray.yml.j2 +0 -0
  439. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/cudo-ray.yml.j2 +0 -0
  440. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/do-ray.yml.j2 +0 -0
  441. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/fluidstack-ray.yml.j2 +0 -0
  442. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/gcp-ray.yml.j2 +0 -0
  443. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/hyperbolic-ray.yml.j2 +0 -0
  444. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/ibm-ray.yml.j2 +0 -0
  445. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/jobs-controller.yaml.j2 +0 -0
  446. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
  447. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
  448. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
  449. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/kubernetes-ray.yml.j2 +0 -0
  450. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
  451. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/lambda-ray.yml.j2 +0 -0
  452. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/local-ray.yml.j2 +0 -0
  453. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/nebius-ray.yml.j2 +0 -0
  454. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/oci-ray.yml.j2 +0 -0
  455. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/paperspace-ray.yml.j2 +0 -0
  456. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/runpod-ray.yml.j2 +0 -0
  457. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/scp-ray.yml.j2 +0 -0
  458. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
  459. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
  460. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/vast-ray.yml.j2 +0 -0
  461. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/vsphere-ray.yml.j2 +0 -0
  462. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/templates/websocket_proxy.py +0 -0
  463. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/usage/__init__.py +0 -0
  464. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/usage/constants.py +0 -0
  465. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/usage/usage_lib.py +0 -0
  466. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/users/__init__.py +0 -0
  467. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/users/model.conf +0 -0
  468. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/users/permission.py +0 -0
  469. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/users/rbac.py +0 -0
  470. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/users/server.py +0 -0
  471. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/users/token_service.py +0 -0
  472. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/__init__.py +0 -0
  473. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/accelerator_registry.py +0 -0
  474. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/admin_policy_utils.py +0 -0
  475. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/annotations.py +0 -0
  476. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/atomic.py +0 -0
  477. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/aws/__init__.py +0 -0
  478. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/aws/get_default_security_group.py +0 -0
  479. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/cli_utils/__init__.py +0 -0
  480. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/cli_utils/status_utils.py +0 -0
  481. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/cluster_utils.py +0 -0
  482. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/command_runner.py +0 -0
  483. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/command_runner.pyi +0 -0
  484. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/common.py +0 -0
  485. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/common_utils.py +0 -0
  486. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/config_utils.py +0 -0
  487. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/context.py +0 -0
  488. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/context_utils.py +0 -0
  489. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/control_master_utils.py +0 -0
  490. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/controller_utils.py +0 -0
  491. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/dag_utils.py +0 -0
  492. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/db/__init__.py +0 -0
  493. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/db/db_utils.py +0 -0
  494. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/db/migration_utils.py +0 -0
  495. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/directory_utils.py +0 -0
  496. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/env_options.py +0 -0
  497. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/git.py +0 -0
  498. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/git_clone.sh +0 -0
  499. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/infra_utils.py +0 -0
  500. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/__init__.py +0 -0
  501. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/cleanup-tunnel.sh +0 -0
  502. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/config_map_utils.py +0 -0
  503. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/create_cluster.sh +0 -0
  504. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/delete_cluster.sh +0 -0
  505. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/deploy_remote_cluster.py +0 -0
  506. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/exec_kubeconfig_converter.py +0 -0
  507. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/generate_kind_config.py +0 -0
  508. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
  509. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/gpu_labeler.py +0 -0
  510. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
  511. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
  512. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/kubernetes_deploy_utils.py +0 -0
  513. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/rsync_helper.sh +0 -0
  514. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/ssh-tunnel.sh +0 -0
  515. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
  516. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes/ssh_utils.py +0 -0
  517. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/kubernetes_enums.py +0 -0
  518. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/locks.py +0 -0
  519. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/log_utils.py +0 -0
  520. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/message_utils.py +0 -0
  521. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/registry.py +0 -0
  522. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/resource_checker.py +0 -0
  523. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/resources_utils.py +0 -0
  524. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/rich_console_utils.py +0 -0
  525. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/rich_utils.py +0 -0
  526. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/schemas.py +0 -0
  527. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/serialize_utils.py +0 -0
  528. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/status_lib.py +0 -0
  529. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/subprocess_utils.py +0 -0
  530. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/tempstore.py +0 -0
  531. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/timeline.py +0 -0
  532. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/ux_utils.py +0 -0
  533. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/validator.py +0 -0
  534. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/utils/volume.py +0 -0
  535. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/volumes/__init__.py +0 -0
  536. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/volumes/client/__init__.py +0 -0
  537. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/volumes/client/sdk.py +0 -0
  538. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/volumes/server/__init__.py +0 -0
  539. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/volumes/server/core.py +0 -0
  540. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/volumes/server/server.py +0 -0
  541. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/volumes/utils.py +0 -0
  542. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/volumes/volume.py +0 -0
  543. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/workspaces/__init__.py +0 -0
  544. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/workspaces/core.py +0 -0
  545. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/workspaces/server.py +0 -0
  546. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/sky/workspaces/utils.py +0 -0
  547. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
  548. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/skypilot_nightly.egg-info/entry_points.txt +0 -0
  549. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/skypilot_nightly.egg-info/top_level.txt +0 -0
  550. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_api.py +0 -0
  551. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_api_compatibility.py +0 -0
  552. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_cli.py +0 -0
  553. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_db_utils.py +0 -0
  554. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_failover.py +0 -0
  555. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_global_user_state.py +0 -0
  556. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_jobs.py +0 -0
  557. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_jobs_and_serve.py +0 -0
  558. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_list_accelerators.py +0 -0
  559. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_no_parellel.py +0 -0
  560. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_optimizer_dryruns.py +0 -0
  561. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_optimizer_random_dag.py +0 -0
  562. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_serve_autoscaler.py +0 -0
  563. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_smoke.py +0 -0
  564. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_storage.py +0 -0
  565. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_wheels.py +0 -0
  566. {skypilot_nightly-1.0.0.dev20250823 → skypilot_nightly-1.0.0.dev20250824}/tests/test_yaml_parser.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: skypilot-nightly
3
- Version: 1.0.0.dev20250823
3
+ Version: 1.0.0.dev20250824
4
4
  Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
5
5
  Author: SkyPilot Team
6
6
  License: Apache 2.0
@@ -100,9 +100,11 @@ Requires-Dist: ray[default]!=2.6.0,>=2.2.0; extra == "oci"
100
100
  Provides-Extra: kubernetes
101
101
  Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "kubernetes"
102
102
  Requires-Dist: websockets; extra == "kubernetes"
103
+ Requires-Dist: python-dateutil; extra == "kubernetes"
103
104
  Provides-Extra: ssh
104
105
  Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "ssh"
105
106
  Requires-Dist: websockets; extra == "ssh"
107
+ Requires-Dist: python-dateutil; extra == "ssh"
106
108
  Provides-Extra: remote
107
109
  Requires-Dist: grpcio>=1.63.0; extra == "remote"
108
110
  Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "remote"
@@ -168,8 +170,10 @@ Requires-Dist: oci; extra == "all"
168
170
  Requires-Dist: ray[default]!=2.6.0,>=2.2.0; extra == "all"
169
171
  Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "all"
170
172
  Requires-Dist: websockets; extra == "all"
173
+ Requires-Dist: python-dateutil; extra == "all"
171
174
  Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "all"
172
175
  Requires-Dist: websockets; extra == "all"
176
+ Requires-Dist: python-dateutil; extra == "all"
173
177
  Requires-Dist: grpcio>=1.63.0; extra == "all"
174
178
  Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "all"
175
179
  Requires-Dist: runpod>=1.6.1; extra == "all"
@@ -7,7 +7,7 @@ import urllib.request
7
7
  from sky.utils import directory_utils
8
8
 
9
9
  # Replaced with the current commit when building the wheels.
10
- _SKYPILOT_COMMIT_SHA = 'e939c0d06e7bd2f973087a8c3005d357e1e29835'
10
+ _SKYPILOT_COMMIT_SHA = '308c36b908760389f20ba934a19afd9920315a03'
11
11
 
12
12
 
13
13
  def _get_git_commit():
@@ -37,7 +37,7 @@ def _get_git_commit():
37
37
 
38
38
 
39
39
  __commit__ = _get_git_commit()
40
- __version__ = '1.0.0.dev20250823'
40
+ __version__ = '1.0.0.dev20250824'
41
41
  __root_dir__ = directory_utils.get_sky_dir()
42
42
 
43
43
 
@@ -14,8 +14,12 @@ _IMPORT_ERROR_MESSAGE = ('Failed to import dependencies for Kubernetes. '
14
14
  'Try running: pip install "skypilot[kubernetes]"')
15
15
  kubernetes = common.LazyImport('kubernetes',
16
16
  import_error_message=_IMPORT_ERROR_MESSAGE)
17
+ models = common.LazyImport('kubernetes.client.models',
18
+ import_error_message=_IMPORT_ERROR_MESSAGE)
17
19
  urllib3 = common.LazyImport('urllib3',
18
20
  import_error_message=_IMPORT_ERROR_MESSAGE)
21
+ dateutil_parser = common.LazyImport('dateutil.parser',
22
+ import_error_message=_IMPORT_ERROR_MESSAGE)
19
23
 
20
24
  # Timeout to use for API calls
21
25
  API_TIMEOUT = 5
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":404}},"page":"/_error","query":{},"buildId":"P-Au_yHqNENhnPF3shEpK","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-06afb50d25f7c61f.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]/[job]","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-06afb50d25f7c61f.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]/[job]","query":{},"buildId":"P-Au_yHqNENhnPF3shEpK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/4676-9da7fdbde90b5549.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-8afcf719ea87debc.js" defer=""></script><script src="/dashboard/_next/static/chunks/6856-049014c6d43d127b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-6c9c09593b1e67b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/9037-89a84fd7fa31362d.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-a0527109c2fab467.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/4676-9da7fdbde90b5549.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-8afcf719ea87debc.js" defer=""></script><script src="/dashboard/_next/static/chunks/6856-049014c6d43d127b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-6c9c09593b1e67b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/9037-89a84fd7fa31362d.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-a0527109c2fab467.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"P-Au_yHqNENhnPF3shEpK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-469814d711d63b1b.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-469814d711d63b1b.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"P-Au_yHqNENhnPF3shEpK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-dfb9bf07b13045f4.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-dfb9bf07b13045f4.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"P-Au_yHqNENhnPF3shEpK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-444f1804401f04ea.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-444f1804401f04ea.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"P-Au_yHqNENhnPF3shEpK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-81351f95f3bec08e.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-81351f95f3bec08e.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"P-Au_yHqNENhnPF3shEpK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-c320641c2bcbbea6.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-c320641c2bcbbea6.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"P-Au_yHqNENhnPF3shEpK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-dd64309c3fe67ed2.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-dd64309c3fe67ed2.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"P-Au_yHqNENhnPF3shEpK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/pools/%5Bpool%5D-07349868f7905d37.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/pools/[pool]","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/pools/%5Bpool%5D-07349868f7905d37.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/pools/[pool]","query":{},"buildId":"P-Au_yHqNENhnPF3shEpK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-7421e63ac35f8fce.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-7421e63ac35f8fce.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"P-Au_yHqNENhnPF3shEpK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/users-018bf31cda52e11b.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/users-018bf31cda52e11b.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"P-Au_yHqNENhnPF3shEpK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/volumes-739726d6b823f532.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/volumes-739726d6b823f532.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"P-Au_yHqNENhnPF3shEpK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"P-Au_yHqNENhnPF3shEpK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/7205-88191679e7988c57.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-8afcf719ea87debc.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-6c9c09593b1e67b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/1141-943efc7aff0f0c06.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-de06e613e20bc977.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/7205-88191679e7988c57.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-8afcf719ea87debc.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-6c9c09593b1e67b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/1141-943efc7aff0f0c06.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-de06e613e20bc977.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"P-Au_yHqNENhnPF3shEpK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces-be35b22e2046564c.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/UQeqZCi6L_itwVPDcn3ba/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"UQeqZCi6L_itwVPDcn3ba","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces-be35b22e2046564c.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/P-Au_yHqNENhnPF3shEpK/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"P-Au_yHqNENhnPF3shEpK","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
@@ -180,6 +180,18 @@ class KubeAPIUnreachableError(ResourcesUnavailableError):
180
180
  pass
181
181
 
182
182
 
183
+ class KubernetesValidationError(Exception):
184
+ """Raised when the Kubernetes validation fails.
185
+
186
+ It stores a list of strings that represent the path to the field which
187
+ caused the validation error.
188
+ """
189
+
190
+ def __init__(self, path: List[str], message: str):
191
+ super().__init__(message)
192
+ self.path = path
193
+
194
+
183
195
  class InvalidCloudConfigs(Exception):
184
196
  """Raised when invalid configurations are provided for a given cloud."""
185
197
  pass
@@ -1,5 +1,6 @@
1
1
  """Kubernetes utilities for SkyPilot."""
2
2
  import dataclasses
3
+ import datetime
3
4
  import enum
4
5
  import functools
5
6
  import hashlib
@@ -1656,50 +1657,191 @@ def check_credentials(context: Optional[str],
1656
1657
  return True, None
1657
1658
 
1658
1659
 
1660
+ class PodValidator:
1661
+ """Validates Kubernetes pod configs against the OpenAPI spec.
1662
+
1663
+ Adapted from kubernetes.client.ApiClient:
1664
+ https://github.com/kubernetes-client/python/blob/0c56ef1c8c4b50087bc7b803f6af896fb973309e/kubernetes/client/api_client.py#L33
1665
+
1666
+ We needed to adapt it because the original implementation ignores
1667
+ unknown fields, whereas we want to raise an error so that users
1668
+ are aware of the issue.
1669
+ """
1670
+ PRIMITIVE_TYPES = (int, float, bool, str)
1671
+ NATIVE_TYPES_MAPPING = {
1672
+ 'int': int,
1673
+ 'float': float,
1674
+ 'str': str,
1675
+ 'bool': bool,
1676
+ 'date': datetime.date,
1677
+ 'datetime': datetime.datetime,
1678
+ 'object': object,
1679
+ }
1680
+
1681
+ @classmethod
1682
+ def validate(cls, data):
1683
+ return cls.__validate(data, kubernetes.models.V1Pod)
1684
+
1685
+ @classmethod
1686
+ def __validate(cls, data, klass):
1687
+ """Deserializes dict, list, str into an object.
1688
+
1689
+ :param data: dict, list or str.
1690
+ :param klass: class literal, or string of class name.
1691
+
1692
+ :return: object.
1693
+ """
1694
+ if data is None:
1695
+ return None
1696
+
1697
+ if isinstance(klass, str):
1698
+ if klass.startswith('list['):
1699
+ sub_kls = re.match(r'list\[(.*)\]', klass).group(1)
1700
+ return [cls.__validate(sub_data, sub_kls) for sub_data in data]
1701
+
1702
+ if klass.startswith('dict('):
1703
+ sub_kls = re.match(r'dict\(([^,]*), (.*)\)', klass).group(2)
1704
+ return {k: cls.__validate(v, sub_kls) for k, v in data.items()}
1705
+
1706
+ # convert str to class
1707
+ if klass in cls.NATIVE_TYPES_MAPPING:
1708
+ klass = cls.NATIVE_TYPES_MAPPING[klass]
1709
+ else:
1710
+ klass = getattr(kubernetes.models, klass)
1711
+
1712
+ if klass in cls.PRIMITIVE_TYPES:
1713
+ return cls.__validate_primitive(data, klass)
1714
+ elif klass == object:
1715
+ return cls.__validate_object(data)
1716
+ elif klass == datetime.date:
1717
+ return cls.__validate_date(data)
1718
+ elif klass == datetime.datetime:
1719
+ return cls.__validate_datetime(data)
1720
+ else:
1721
+ return cls.__validate_model(data, klass)
1722
+
1723
+ @classmethod
1724
+ def __validate_primitive(cls, data, klass):
1725
+ """Deserializes string to primitive type.
1726
+
1727
+ :param data: str.
1728
+ :param klass: class literal.
1729
+
1730
+ :return: int, long, float, str, bool.
1731
+ """
1732
+ try:
1733
+ return klass(data)
1734
+ except UnicodeEncodeError:
1735
+ return str(data)
1736
+ except TypeError:
1737
+ return data
1738
+
1739
+ @classmethod
1740
+ def __validate_object(cls, value):
1741
+ """Return an original value.
1742
+
1743
+ :return: object.
1744
+ """
1745
+ return value
1746
+
1747
+ @classmethod
1748
+ def __validate_date(cls, string):
1749
+ """Deserializes string to date.
1750
+
1751
+ :param string: str.
1752
+ :return: date.
1753
+ """
1754
+ try:
1755
+ return kubernetes.dateutil_parser.parse(string).date()
1756
+ except ValueError as exc:
1757
+ raise ValueError(
1758
+ f'Failed to parse `{string}` as date object') from exc
1759
+
1760
+ @classmethod
1761
+ def __validate_datetime(cls, string):
1762
+ """Deserializes string to datetime.
1763
+
1764
+ The string should be in iso8601 datetime format.
1765
+
1766
+ :param string: str.
1767
+ :return: datetime.
1768
+ """
1769
+ try:
1770
+ return kubernetes.dateutil_parser.parse(string)
1771
+ except ValueError as exc:
1772
+ raise ValueError(
1773
+ f'Failed to parse `{string}` as datetime object') from exc
1774
+
1775
+ @classmethod
1776
+ def __validate_model(cls, data, klass):
1777
+ """Deserializes list or dict to model.
1778
+
1779
+ :param data: dict, list.
1780
+ :param klass: class literal.
1781
+ :return: model object.
1782
+ """
1783
+
1784
+ if not klass.openapi_types and not hasattr(klass,
1785
+ 'get_real_child_model'):
1786
+ return data
1787
+
1788
+ kwargs = {}
1789
+ try:
1790
+ if (data is not None and klass.openapi_types is not None and
1791
+ isinstance(data, (list, dict))):
1792
+ # attribute_map is a dict that maps field names in snake_case
1793
+ # to camelCase.
1794
+ reverse_attribute_map = {
1795
+ v: k for k, v in klass.attribute_map.items()
1796
+ }
1797
+ for k, v in data.items():
1798
+ field_name = reverse_attribute_map.get(k, None)
1799
+ if field_name is None:
1800
+ raise ValueError(
1801
+ f'Unknown field `{k}`. Please ensure '
1802
+ 'pod_config follows the Kubernetes '
1803
+ 'Pod schema: '
1804
+ 'https://github.com/kubernetes/kubernetes/blob/master/api/openapi-spec/v3/api__v1_openapi.json'
1805
+ )
1806
+ kwargs[field_name] = cls.__validate(
1807
+ v, klass.openapi_types[field_name])
1808
+ except exceptions.KubernetesValidationError as e:
1809
+ raise exceptions.KubernetesValidationError([k] + e.path,
1810
+ str(e)) from e
1811
+ except Exception as e:
1812
+ raise exceptions.KubernetesValidationError([k], str(e)) from e
1813
+
1814
+ instance = klass(**kwargs)
1815
+
1816
+ if hasattr(instance, 'get_real_child_model'):
1817
+ klass_name = instance.get_real_child_model(data)
1818
+ if klass_name:
1819
+ instance = cls.__validate(data, klass_name)
1820
+ return instance
1821
+
1659
1822
  def check_pod_config(pod_config: dict) \
1660
1823
  -> Tuple[bool, Optional[str]]:
1661
- """Check if the pod_config is a valid pod config
1824
+ """Check if the pod_config is a valid pod config.
1825
+
1826
+ Uses the deserialize API from the kubernetes client library.
1827
+
1828
+ This is a client-side validation, meant to catch common errors like
1829
+ unknown/misspelled fields, and missing required fields.
1662
1830
 
1663
- Using deserialize api to check the pod_config is valid or not.
1831
+ The full validation however is done later on by the Kubernetes API server
1832
+ when the pod creation request is sent.
1664
1833
 
1665
1834
  Returns:
1666
1835
  bool: True if pod_config is valid.
1667
1836
  str: Error message about why the pod_config is invalid, None otherwise.
1668
1837
  """
1669
- errors = []
1670
- # This api_client won't be used to send any requests, so there is no need to
1671
- # load kubeconfig
1672
- api_client = kubernetes.kubernetes.client.ApiClient()
1673
-
1674
- # Used for kubernetes api_client deserialize function, the function will use
1675
- # data attr, the detail ref:
1676
- # https://github.com/kubernetes-client/python/blob/master/kubernetes/client/api_client.py#L244
1677
- class InnerResponse():
1678
-
1679
- def __init__(self, data: dict):
1680
- self.data = json.dumps(data)
1681
-
1682
1838
  try:
1683
- # Validate metadata if present
1684
- if 'metadata' in pod_config:
1685
- try:
1686
- value = InnerResponse(pod_config['metadata'])
1687
- api_client.deserialize(
1688
- value, kubernetes.kubernetes.client.V1ObjectMeta)
1689
- except ValueError as e:
1690
- errors.append(f'Invalid metadata: {str(e)}')
1691
- # Validate spec if present
1692
- if 'spec' in pod_config:
1693
- try:
1694
- value = InnerResponse(pod_config['spec'])
1695
- api_client.deserialize(value,
1696
- kubernetes.kubernetes.client.V1PodSpec)
1697
- except ValueError as e:
1698
- errors.append(f'Invalid spec: {str(e)}')
1699
- return len(errors) == 0, '.'.join(errors)
1839
+ PodValidator.validate(pod_config)
1840
+ except exceptions.KubernetesValidationError as e:
1841
+ return False, f'Validation error in {".".join(e.path)}: {str(e)}'
1700
1842
  except Exception as e: # pylint: disable=broad-except
1701
- errors.append(f'Validation error: {str(e)}')
1702
- return False, '.'.join(errors)
1843
+ return False, f'Unexpected error: {str(e)}'
1844
+ return True, None
1703
1845
 
1704
1846
 
1705
1847
  def is_kubeconfig_exec_auth(
@@ -165,8 +165,10 @@ extras_require: Dict[str, List[str]] = {
165
165
  'scp': local_ray,
166
166
  'oci': ['oci'] + local_ray,
167
167
  # Kubernetes 32.0.0 has an authentication bug: https://github.com/kubernetes-client/python/issues/2333 # pylint: disable=line-too-long
168
- 'kubernetes': ['kubernetes>=20.0.0,!=32.0.0', 'websockets'],
169
- 'ssh': ['kubernetes>=20.0.0,!=32.0.0', 'websockets'],
168
+ 'kubernetes': [
169
+ 'kubernetes>=20.0.0,!=32.0.0', 'websockets', 'python-dateutil'
170
+ ],
171
+ 'ssh': ['kubernetes>=20.0.0,!=32.0.0', 'websockets', 'python-dateutil'],
170
172
  'remote': remote,
171
173
  # For the container registry auth api. Reference:
172
174
  # https://github.com/runpod/runpod-python/releases/tag/1.6.1