skypilot-nightly 1.0.0.dev20250904__py3-none-any.whl → 1.0.0.dev20250905__py3-none-any.whl
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.
- sky/__init__.py +2 -2
- sky/backends/cloud_vm_ray_backend.py +11 -0
- sky/client/sdk.py +20 -16
- sky/dashboard/out/404.html +1 -1
- sky/dashboard/out/_next/static/chunks/6856-dca7962af4814e1b.js +1 -0
- sky/dashboard/out/_next/static/chunks/{8969-4a6f1a928fb6d370.js → 8969-0be3036bf86f8256.js} +1 -1
- sky/dashboard/out/_next/static/chunks/9037-fa1737818d0a0969.js +6 -0
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/{[job]-39c9bd4cdb7e5a57.js → [job]-1cbba24bd1bd35f8.js} +1 -1
- sky/dashboard/out/_next/static/chunks/{webpack-24c4fc6d30ce0193.js → webpack-4fe903277b57b523.js} +1 -1
- sky/dashboard/out/_next/static/{mriHUOVL_Ht-CeW-e7saa → mS-4qZPSkRuA1u-g2wQhg}/_buildManifest.js +1 -1
- sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
- sky/dashboard/out/clusters/[cluster].html +1 -1
- sky/dashboard/out/clusters.html +1 -1
- sky/dashboard/out/config.html +1 -1
- sky/dashboard/out/index.html +1 -1
- sky/dashboard/out/infra/[context].html +1 -1
- sky/dashboard/out/infra.html +1 -1
- sky/dashboard/out/jobs/[job].html +1 -1
- sky/dashboard/out/jobs/pools/[pool].html +1 -1
- sky/dashboard/out/jobs.html +1 -1
- sky/dashboard/out/users.html +1 -1
- sky/dashboard/out/volumes.html +1 -1
- sky/dashboard/out/workspace/new.html +1 -1
- sky/dashboard/out/workspaces/[name].html +1 -1
- sky/dashboard/out/workspaces.html +1 -1
- sky/models.py +24 -1
- sky/server/requests/requests.py +15 -14
- sky/users/permission.py +6 -0
- sky/users/server.py +8 -2
- sky/utils/db/db_utils.py +3 -0
- {skypilot_nightly-1.0.0.dev20250904.dist-info → skypilot_nightly-1.0.0.dev20250905.dist-info}/METADATA +38 -38
- {skypilot_nightly-1.0.0.dev20250904.dist-info → skypilot_nightly-1.0.0.dev20250905.dist-info}/RECORD +37 -37
- sky/dashboard/out/_next/static/chunks/6856-66e696640347e77b.js +0 -1
- sky/dashboard/out/_next/static/chunks/9037-1c0101b86582136f.js +0 -6
- /sky/dashboard/out/_next/static/{mriHUOVL_Ht-CeW-e7saa → mS-4qZPSkRuA1u-g2wQhg}/_ssgManifest.js +0 -0
- {skypilot_nightly-1.0.0.dev20250904.dist-info → skypilot_nightly-1.0.0.dev20250905.dist-info}/WHEEL +0 -0
- {skypilot_nightly-1.0.0.dev20250904.dist-info → skypilot_nightly-1.0.0.dev20250905.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250904.dist-info → skypilot_nightly-1.0.0.dev20250905.dist-info}/licenses/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250904.dist-info → skypilot_nightly-1.0.0.dev20250905.dist-info}/top_level.txt +0 -0
|
@@ -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-
|
|
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-4fe903277b57b523.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-6563820e094f68ca.js" defer=""></script><script src="/dashboard/_next/static/mS-4qZPSkRuA1u-g2wQhg/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mS-4qZPSkRuA1u-g2wQhg/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"mS-4qZPSkRuA1u-g2wQhg","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/infra.html
CHANGED
|
@@ -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-
|
|
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-4fe903277b57b523.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-aabba60d57826e0f.js" defer=""></script><script src="/dashboard/_next/static/mS-4qZPSkRuA1u-g2wQhg/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mS-4qZPSkRuA1u-g2wQhg/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"mS-4qZPSkRuA1u-g2wQhg","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-
|
|
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-4fe903277b57b523.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-0be3036bf86f8256.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/mS-4qZPSkRuA1u-g2wQhg/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mS-4qZPSkRuA1u-g2wQhg/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"mS-4qZPSkRuA1u-g2wQhg","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-
|
|
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-4fe903277b57b523.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-0be3036bf86f8256.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/pools/%5Bpool%5D-07349868f7905d37.js" defer=""></script><script src="/dashboard/_next/static/mS-4qZPSkRuA1u-g2wQhg/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mS-4qZPSkRuA1u-g2wQhg/_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":"mS-4qZPSkRuA1u-g2wQhg","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/jobs.html
CHANGED
|
@@ -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-
|
|
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-4fe903277b57b523.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-1f70d9faa564804f.js" defer=""></script><script src="/dashboard/_next/static/mS-4qZPSkRuA1u-g2wQhg/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mS-4qZPSkRuA1u-g2wQhg/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"mS-4qZPSkRuA1u-g2wQhg","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/users.html
CHANGED
|
@@ -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-
|
|
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-4fe903277b57b523.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/mS-4qZPSkRuA1u-g2wQhg/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mS-4qZPSkRuA1u-g2wQhg/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"mS-4qZPSkRuA1u-g2wQhg","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/volumes.html
CHANGED
|
@@ -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-
|
|
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-4fe903277b57b523.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/mS-4qZPSkRuA1u-g2wQhg/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mS-4qZPSkRuA1u-g2wQhg/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"mS-4qZPSkRuA1u-g2wQhg","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-
|
|
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-4fe903277b57b523.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/mS-4qZPSkRuA1u-g2wQhg/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mS-4qZPSkRuA1u-g2wQhg/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"mS-4qZPSkRuA1u-g2wQhg","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-
|
|
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-4fe903277b57b523.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/1836-37fede578e2da5f8.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-0be3036bf86f8256.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-408ed10b2f9fce17.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-86cabed5d4669ad0.js" defer=""></script><script src="/dashboard/_next/static/chunks/1141-943efc7aff0f0c06.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-af76bb06dbb3954f.js" defer=""></script><script src="/dashboard/_next/static/mS-4qZPSkRuA1u-g2wQhg/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mS-4qZPSkRuA1u-g2wQhg/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"mS-4qZPSkRuA1u-g2wQhg","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-
|
|
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-4fe903277b57b523.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-7598c33a746cdc91.js" defer=""></script><script src="/dashboard/_next/static/mS-4qZPSkRuA1u-g2wQhg/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/mS-4qZPSkRuA1u-g2wQhg/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"mS-4qZPSkRuA1u-g2wQhg","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/models.py
CHANGED
|
@@ -4,7 +4,7 @@ import collections
|
|
|
4
4
|
import dataclasses
|
|
5
5
|
import getpass
|
|
6
6
|
import os
|
|
7
|
-
from typing import Any, Dict, Optional
|
|
7
|
+
from typing import Any, ClassVar, Dict, Optional
|
|
8
8
|
|
|
9
9
|
import pydantic
|
|
10
10
|
|
|
@@ -100,6 +100,11 @@ class KubernetesNodesInfo:
|
|
|
100
100
|
|
|
101
101
|
class VolumeConfig(pydantic.BaseModel):
|
|
102
102
|
"""Configuration for creating a volume."""
|
|
103
|
+
# If any fields changed, increment the version. For backward compatibility,
|
|
104
|
+
# modify the __setstate__ method to handle the old version.
|
|
105
|
+
_VERSION: ClassVar[int] = 1
|
|
106
|
+
|
|
107
|
+
_version: int
|
|
103
108
|
name: str
|
|
104
109
|
type: str
|
|
105
110
|
cloud: str
|
|
@@ -110,3 +115,21 @@ class VolumeConfig(pydantic.BaseModel):
|
|
|
110
115
|
config: Dict[str, Any] = {}
|
|
111
116
|
labels: Optional[Dict[str, str]] = None
|
|
112
117
|
id_on_cloud: Optional[str] = None
|
|
118
|
+
|
|
119
|
+
def __getstate__(self) -> Dict[str, Any]:
|
|
120
|
+
state = super().__getstate__()
|
|
121
|
+
state['_version'] = self._VERSION
|
|
122
|
+
return state
|
|
123
|
+
|
|
124
|
+
def __setstate__(self, state: Dict[str, Any]) -> None:
|
|
125
|
+
"""Set state from pickled state, for backward compatibility."""
|
|
126
|
+
super().__setstate__(state)
|
|
127
|
+
version = state.pop('_version', None)
|
|
128
|
+
if version is None:
|
|
129
|
+
version = -1
|
|
130
|
+
|
|
131
|
+
if version < 0:
|
|
132
|
+
state['id_on_cloud'] = None
|
|
133
|
+
|
|
134
|
+
state['_version'] = self._VERSION
|
|
135
|
+
self.__dict__.update(state)
|
sky/server/requests/requests.py
CHANGED
|
@@ -17,6 +17,7 @@ import traceback
|
|
|
17
17
|
from typing import (Any, AsyncContextManager, Callable, Dict, Generator, List,
|
|
18
18
|
NamedTuple, Optional, Tuple)
|
|
19
19
|
|
|
20
|
+
import anyio
|
|
20
21
|
import colorama
|
|
21
22
|
import filelock
|
|
22
23
|
|
|
@@ -32,7 +33,6 @@ from sky.server.requests import payloads
|
|
|
32
33
|
from sky.server.requests.serializers import decoders
|
|
33
34
|
from sky.server.requests.serializers import encoders
|
|
34
35
|
from sky.utils import common_utils
|
|
35
|
-
from sky.utils import subprocess_utils
|
|
36
36
|
from sky.utils import ux_utils
|
|
37
37
|
from sky.utils.db import db_utils
|
|
38
38
|
|
|
@@ -784,17 +784,15 @@ def set_request_cancelled(request_id: str) -> None:
|
|
|
784
784
|
|
|
785
785
|
@init_db
|
|
786
786
|
@metrics_lib.time_me
|
|
787
|
-
def _delete_requests(requests: List[Request]):
|
|
787
|
+
async def _delete_requests(requests: List[Request]):
|
|
788
788
|
"""Clean up requests by their IDs."""
|
|
789
789
|
id_list_str = ','.join(repr(req.request_id) for req in requests)
|
|
790
790
|
assert _DB is not None
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
cursor.execute(
|
|
794
|
-
f'DELETE FROM {REQUEST_TABLE} WHERE request_id IN ({id_list_str})')
|
|
791
|
+
await _DB.execute_and_commit_async(
|
|
792
|
+
f'DELETE FROM {REQUEST_TABLE} WHERE request_id IN ({id_list_str})')
|
|
795
793
|
|
|
796
794
|
|
|
797
|
-
def clean_finished_requests_with_retention(retention_seconds: int):
|
|
795
|
+
async def clean_finished_requests_with_retention(retention_seconds: int):
|
|
798
796
|
"""Clean up finished requests older than the retention period.
|
|
799
797
|
|
|
800
798
|
This function removes old finished requests (SUCCEEDED, FAILED, CANCELLED)
|
|
@@ -804,17 +802,19 @@ def clean_finished_requests_with_retention(retention_seconds: int):
|
|
|
804
802
|
retention_seconds: Requests older than this many seconds will be
|
|
805
803
|
deleted.
|
|
806
804
|
"""
|
|
807
|
-
reqs =
|
|
805
|
+
reqs = await get_request_tasks_async(
|
|
808
806
|
req_filter=RequestTaskFilter(status=RequestStatus.finished_status(),
|
|
809
807
|
finished_before=time.time() -
|
|
810
808
|
retention_seconds))
|
|
811
809
|
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
810
|
+
futs = []
|
|
811
|
+
for req in reqs:
|
|
812
|
+
futs.append(
|
|
813
|
+
asyncio.create_task(
|
|
814
|
+
anyio.Path(req.log_path.absolute()).unlink(missing_ok=True)))
|
|
815
|
+
await asyncio.gather(*futs)
|
|
816
816
|
|
|
817
|
-
_delete_requests(reqs)
|
|
817
|
+
await _delete_requests(reqs)
|
|
818
818
|
|
|
819
819
|
# To avoid leakage of the log file, logs must be deleted before the
|
|
820
820
|
# request task in the database.
|
|
@@ -839,7 +839,8 @@ async def requests_gc_daemon():
|
|
|
839
839
|
logger.info('Requests GC daemon cancelled')
|
|
840
840
|
break
|
|
841
841
|
except Exception as e: # pylint: disable=broad-except
|
|
842
|
-
logger.error(f'Error running requests GC daemon: {e}'
|
|
842
|
+
logger.error(f'Error running requests GC daemon: {e}'
|
|
843
|
+
f'traceback: {traceback.format_exc()}')
|
|
843
844
|
# Run the daemon at most once every hour to avoid too frequent
|
|
844
845
|
# cleanup.
|
|
845
846
|
await asyncio.sleep(max(retention_seconds, 3600))
|
sky/users/permission.py
CHANGED
|
@@ -226,6 +226,12 @@ class PermissionService:
|
|
|
226
226
|
self._load_policy_no_lock()
|
|
227
227
|
return self.enforcer.get_roles_for_user(user_id)
|
|
228
228
|
|
|
229
|
+
def get_users_for_role(self, role: str) -> List[str]:
|
|
230
|
+
"""Get all users for a role."""
|
|
231
|
+
self._lazy_initialize()
|
|
232
|
+
self._load_policy_no_lock()
|
|
233
|
+
return self.enforcer.get_users_for_role(role)
|
|
234
|
+
|
|
229
235
|
def check_endpoint_permission(self, user_id: str, path: str,
|
|
230
236
|
method: str) -> bool:
|
|
231
237
|
"""Check permission."""
|
sky/users/server.py
CHANGED
|
@@ -42,17 +42,23 @@ def users() -> List[Dict[str, Any]]:
|
|
|
42
42
|
"""Gets all users."""
|
|
43
43
|
all_users = []
|
|
44
44
|
user_list = global_user_state.get_all_users()
|
|
45
|
+
|
|
46
|
+
users_to_role = {}
|
|
47
|
+
for role in rbac.get_supported_roles():
|
|
48
|
+
user_ids = permission.permission_service.get_users_for_role(role)
|
|
49
|
+
for user_id in user_ids:
|
|
50
|
+
users_to_role[user_id] = role
|
|
51
|
+
|
|
45
52
|
for user in user_list:
|
|
46
53
|
# Filter out service accounts - they have IDs starting with "sa-"
|
|
47
54
|
if user.is_service_account():
|
|
48
55
|
continue
|
|
49
56
|
|
|
50
|
-
user_roles = permission.permission_service.get_user_roles(user.id)
|
|
51
57
|
all_users.append({
|
|
52
58
|
'id': user.id,
|
|
53
59
|
'name': user.name,
|
|
54
60
|
'created_at': user.created_at,
|
|
55
|
-
'role':
|
|
61
|
+
'role': users_to_role.get(user.id, '')
|
|
56
62
|
})
|
|
57
63
|
return all_users
|
|
58
64
|
|
sky/utils/db/db_utils.py
CHANGED
|
@@ -334,6 +334,9 @@ class SQLiteConn(threading.local):
|
|
|
334
334
|
"""Execute the sql and commit the transaction in a sync block."""
|
|
335
335
|
conn = await self._get_async_conn()
|
|
336
336
|
|
|
337
|
+
if parameters is None:
|
|
338
|
+
parameters = []
|
|
339
|
+
|
|
337
340
|
def exec_and_commit(sql: str, parameters: Optional[Iterable[Any]]):
|
|
338
341
|
# pylint: disable=protected-access
|
|
339
342
|
conn._conn.execute(sql, parameters)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: skypilot-nightly
|
|
3
|
-
Version: 1.0.0.
|
|
3
|
+
Version: 1.0.0.dev20250905
|
|
4
4
|
Summary: SkyPilot: Run AI on Any Infra — Unified, Faster, Cheaper.
|
|
5
5
|
Author: SkyPilot Team
|
|
6
6
|
License: Apache 2.0
|
|
@@ -145,48 +145,48 @@ Requires-Dist: grpcio>=1.63.0; extra == "server"
|
|
|
145
145
|
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "server"
|
|
146
146
|
Requires-Dist: aiosqlite; extra == "server"
|
|
147
147
|
Provides-Extra: all
|
|
148
|
-
Requires-Dist: runpod>=1.6.1; extra == "all"
|
|
149
|
-
Requires-Dist: azure-common; extra == "all"
|
|
150
148
|
Requires-Dist: kubernetes!=32.0.0,>=20.0.0; extra == "all"
|
|
151
|
-
Requires-Dist:
|
|
152
|
-
Requires-Dist: pyvmomi==8.0.1.0.2; extra == "all"
|
|
153
|
-
Requires-Dist: oci; extra == "all"
|
|
154
|
-
Requires-Dist: ray[default]!=2.6.0,>=2.2.0; extra == "all"
|
|
155
|
-
Requires-Dist: ibm-platform-services>=0.48.0; extra == "all"
|
|
156
|
-
Requires-Dist: pyjwt; extra == "all"
|
|
157
|
-
Requires-Dist: azure-cli>=2.65.0; extra == "all"
|
|
158
|
-
Requires-Dist: ibm-cos-sdk; extra == "all"
|
|
159
|
-
Requires-Dist: python-dateutil; extra == "all"
|
|
160
|
-
Requires-Dist: ibm-vpc; extra == "all"
|
|
161
|
-
Requires-Dist: pyopenssl<24.3.0,>=23.2.0; extra == "all"
|
|
149
|
+
Requires-Dist: azure-storage-blob>=12.23.1; extra == "all"
|
|
162
150
|
Requires-Dist: grpcio>=1.63.0; extra == "all"
|
|
163
|
-
Requires-Dist:
|
|
151
|
+
Requires-Dist: google-api-python-client>=2.69.0; extra == "all"
|
|
164
152
|
Requires-Dist: colorama<0.4.5; extra == "all"
|
|
165
|
-
Requires-Dist: azure-
|
|
166
|
-
Requires-Dist: azure-core>=1.24.0; extra == "all"
|
|
167
|
-
Requires-Dist: azure-mgmt-compute>=33.0.0; extra == "all"
|
|
168
|
-
Requires-Dist: anyio; extra == "all"
|
|
153
|
+
Requires-Dist: azure-mgmt-network>=27.0.0; extra == "all"
|
|
169
154
|
Requires-Dist: sqlalchemy_adapter; extra == "all"
|
|
155
|
+
Requires-Dist: aiosqlite; extra == "all"
|
|
156
|
+
Requires-Dist: ibm-cos-sdk; extra == "all"
|
|
157
|
+
Requires-Dist: pyopenssl<24.3.0,>=23.2.0; extra == "all"
|
|
158
|
+
Requires-Dist: websockets; extra == "all"
|
|
159
|
+
Requires-Dist: awscli>=1.27.10; extra == "all"
|
|
160
|
+
Requires-Dist: boto3>=1.26.1; extra == "all"
|
|
170
161
|
Requires-Dist: pydo>=0.3.0; extra == "all"
|
|
171
|
-
Requires-Dist:
|
|
162
|
+
Requires-Dist: google-cloud-storage; extra == "all"
|
|
163
|
+
Requires-Dist: cudo-compute>=0.1.10; extra == "all"
|
|
164
|
+
Requires-Dist: azure-core>=1.24.0; extra == "all"
|
|
165
|
+
Requires-Dist: pyvmomi==8.0.1.0.2; extra == "all"
|
|
172
166
|
Requires-Dist: casbin; extra == "all"
|
|
173
|
-
Requires-Dist: websockets; extra == "all"
|
|
174
|
-
Requires-Dist: aiosqlite; extra == "all"
|
|
175
|
-
Requires-Dist: botocore>=1.29.10; extra == "all"
|
|
176
|
-
Requires-Dist: azure-core>=1.31.0; extra == "all"
|
|
177
|
-
Requires-Dist: ibm-cloud-sdk-core; extra == "all"
|
|
178
|
-
Requires-Dist: vastai-sdk>=0.1.12; extra == "all"
|
|
179
167
|
Requires-Dist: docker; extra == "all"
|
|
168
|
+
Requires-Dist: passlib; extra == "all"
|
|
169
|
+
Requires-Dist: ibm-vpc; extra == "all"
|
|
170
|
+
Requires-Dist: oci; extra == "all"
|
|
171
|
+
Requires-Dist: azure-cli>=2.65.0; extra == "all"
|
|
180
172
|
Requires-Dist: nebius>=0.2.47; extra == "all"
|
|
181
|
-
Requires-Dist:
|
|
182
|
-
Requires-Dist:
|
|
183
|
-
Requires-Dist:
|
|
173
|
+
Requires-Dist: azure-core>=1.31.0; extra == "all"
|
|
174
|
+
Requires-Dist: azure-mgmt-compute>=33.0.0; extra == "all"
|
|
175
|
+
Requires-Dist: azure-identity>=1.19.0; extra == "all"
|
|
176
|
+
Requires-Dist: botocore>=1.29.10; extra == "all"
|
|
177
|
+
Requires-Dist: python-dateutil; extra == "all"
|
|
178
|
+
Requires-Dist: ibm-cloud-sdk-core; extra == "all"
|
|
179
|
+
Requires-Dist: ray[default]!=2.6.0,>=2.2.0; extra == "all"
|
|
184
180
|
Requires-Dist: protobuf<7.0.0,>=5.26.1; extra == "all"
|
|
185
|
-
Requires-Dist:
|
|
181
|
+
Requires-Dist: ibm-platform-services>=0.48.0; extra == "all"
|
|
182
|
+
Requires-Dist: msgraph-sdk; extra == "all"
|
|
186
183
|
Requires-Dist: msrestazure; extra == "all"
|
|
187
|
-
Requires-Dist:
|
|
188
|
-
Requires-Dist:
|
|
189
|
-
Requires-Dist:
|
|
184
|
+
Requires-Dist: pyjwt; extra == "all"
|
|
185
|
+
Requires-Dist: aiohttp; extra == "all"
|
|
186
|
+
Requires-Dist: runpod>=1.6.1; extra == "all"
|
|
187
|
+
Requires-Dist: azure-common; extra == "all"
|
|
188
|
+
Requires-Dist: vastai-sdk>=0.1.12; extra == "all"
|
|
189
|
+
Requires-Dist: anyio; extra == "all"
|
|
190
190
|
Dynamic: author
|
|
191
191
|
Dynamic: classifier
|
|
192
192
|
Dynamic: description
|
|
@@ -284,21 +284,21 @@ SkyPilot supports your existing GPU, TPU, and CPU workloads, with no code change
|
|
|
284
284
|
Install with pip:
|
|
285
285
|
```bash
|
|
286
286
|
# Choose your clouds:
|
|
287
|
-
pip install -U "skypilot[kubernetes,aws,gcp,azure,oci,lambda,runpod,fluidstack,paperspace,cudo,ibm,scp
|
|
287
|
+
pip install -U "skypilot[kubernetes,aws,gcp,azure,oci,nebius,lambda,runpod,fluidstack,paperspace,cudo,ibm,scp]"
|
|
288
288
|
```
|
|
289
289
|
To get the latest features and fixes, use the nightly build or [install from source](https://docs.skypilot.co/en/latest/getting-started/installation.html):
|
|
290
290
|
```bash
|
|
291
291
|
# Choose your clouds:
|
|
292
|
-
pip install "skypilot-nightly[kubernetes,aws,gcp,azure,oci,lambda,runpod,fluidstack,paperspace,cudo,ibm,scp
|
|
292
|
+
pip install "skypilot-nightly[kubernetes,aws,gcp,azure,oci,nebius,lambda,runpod,fluidstack,paperspace,cudo,ibm,scp]"
|
|
293
293
|
```
|
|
294
294
|
|
|
295
295
|
<p align="center">
|
|
296
296
|
<img src="docs/source/_static/intro.gif" alt="SkyPilot">
|
|
297
297
|
</p>
|
|
298
298
|
|
|
299
|
-
Current supported infra: Kubernetes, AWS, GCP, Azure, OCI, Lambda Cloud, Fluidstack,
|
|
300
|
-
|
|
301
|
-
VMware vSphere
|
|
299
|
+
Current supported infra: Kubernetes, AWS, GCP, Azure, OCI, Nebius, Lambda Cloud, RunPod, Fluidstack,
|
|
300
|
+
Cudo, Digital Ocean, Paperspace, Cloudflare, Samsung, IBM, Vast.ai,
|
|
301
|
+
VMware vSphere.
|
|
302
302
|
<p align="center">
|
|
303
303
|
<img alt="SkyPilot" src="https://raw.githubusercontent.com/skypilot-org/skypilot/master/docs/source/images/cloud-logos-light.png" width=85%>
|
|
304
304
|
</p>
|