skypilot-nightly 1.0.0.dev20250731__py3-none-any.whl → 1.0.0.dev20250801__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.
Potentially problematic release.
This version of skypilot-nightly might be problematic. Click here for more details.
- sky/__init__.py +2 -2
- sky/client/cli/command.py +4 -0
- sky/dashboard/out/404.html +1 -1
- sky/dashboard/out/_next/static/chunks/{webpack-5adfc4d4b3db6f71.js → webpack-42cd1b19a6b01078.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.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/data/data_utils.py +21 -1
- sky/data/storage.py +12 -0
- sky/provision/runpod/utils.py +27 -12
- sky/server/daemons.py +164 -0
- sky/server/requests/requests.py +2 -124
- sky/server/server.py +2 -1
- sky/server/uvicorn.py +2 -1
- sky/sky_logging.py +30 -0
- sky/skylet/constants.py +2 -1
- sky/utils/schemas.py +23 -0
- {skypilot_nightly-1.0.0.dev20250731.dist-info → skypilot_nightly-1.0.0.dev20250801.dist-info}/METADATA +1 -1
- {skypilot_nightly-1.0.0.dev20250731.dist-info → skypilot_nightly-1.0.0.dev20250801.dist-info}/RECORD +36 -35
- /sky/dashboard/out/_next/static/{oKqDxFQ88cquF4nQGE_0w → f2fEsZwJxryJVOYRNtNKE}/_buildManifest.js +0 -0
- /sky/dashboard/out/_next/static/{oKqDxFQ88cquF4nQGE_0w → f2fEsZwJxryJVOYRNtNKE}/_ssgManifest.js +0 -0
- {skypilot_nightly-1.0.0.dev20250731.dist-info → skypilot_nightly-1.0.0.dev20250801.dist-info}/WHEEL +0 -0
- {skypilot_nightly-1.0.0.dev20250731.dist-info → skypilot_nightly-1.0.0.dev20250801.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250731.dist-info → skypilot_nightly-1.0.0.dev20250801.dist-info}/licenses/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250731.dist-info → skypilot_nightly-1.0.0.dev20250801.dist-info}/top_level.txt +0 -0
sky/__init__.py
CHANGED
|
@@ -5,7 +5,7 @@ from typing import Optional
|
|
|
5
5
|
import urllib.request
|
|
6
6
|
|
|
7
7
|
# Replaced with the current commit when building the wheels.
|
|
8
|
-
_SKYPILOT_COMMIT_SHA = '
|
|
8
|
+
_SKYPILOT_COMMIT_SHA = '45dfcb679d71b0fb8abe30470b1d8c6b6c33ef73'
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
def _get_git_commit():
|
|
@@ -35,7 +35,7 @@ def _get_git_commit():
|
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
__commit__ = _get_git_commit()
|
|
38
|
-
__version__ = '1.0.0.
|
|
38
|
+
__version__ = '1.0.0.dev20250801'
|
|
39
39
|
__root_dir__ = os.path.dirname(os.path.abspath(__file__))
|
|
40
40
|
|
|
41
41
|
|
sky/client/cli/command.py
CHANGED
|
@@ -62,6 +62,7 @@ from sky.provision.kubernetes import constants as kubernetes_constants
|
|
|
62
62
|
from sky.provision.kubernetes import utils as kubernetes_utils
|
|
63
63
|
from sky.server import common as server_common
|
|
64
64
|
from sky.server import constants as server_constants
|
|
65
|
+
from sky.server import versions
|
|
65
66
|
from sky.server.requests import requests
|
|
66
67
|
from sky.skylet import constants
|
|
67
68
|
from sky.skylet import job_lib
|
|
@@ -1827,6 +1828,9 @@ def status(verbose: bool, refresh: bool, ip: bool, endpoints: bool,
|
|
|
1827
1828
|
show_endpoints = endpoints or endpoint is not None
|
|
1828
1829
|
show_single_endpoint = endpoint is not None
|
|
1829
1830
|
show_services = show_services and not any([clusters, ip, endpoints])
|
|
1831
|
+
remote_api_version = versions.get_remote_api_version()
|
|
1832
|
+
if remote_api_version is None or remote_api_version < 12:
|
|
1833
|
+
show_pools = False
|
|
1830
1834
|
|
|
1831
1835
|
query_clusters: Optional[List[str]] = None if not clusters else clusters
|
|
1832
1836
|
refresh_mode = common.StatusRefreshMode.NONE
|
sky/dashboard/out/404.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_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":"f2fEsZwJxryJVOYRNtNKE","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/_next/static/chunks/{webpack-5adfc4d4b3db6f71.js → webpack-42cd1b19a6b01078.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(){"use strict";var e,t,n,r,c,o,u,i,a,f={},s={};function d(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={exports:{}},r=!0;try{f[e](n,n.exports,d),r=!1}finally{r&&delete s[e]}return n.exports}d.m=f,e=[],d.O=function(t,n,r,c){if(n){c=c||0;for(var o=e.length;o>0&&e[o-1][2]>c;o--)e[o]=e[o-1];e[o]=[n,r,c];return}for(var u=1/0,o=0;o<e.length;o++){for(var n=e[o][0],r=e[o][1],c=e[o][2],i=!0,a=0;a<n.length;a++)u>=c&&Object.keys(d.O).every(function(e){return d.O[e](n[a])})?n.splice(a--,1):(i=!1,c<u&&(u=c));if(i){e.splice(o--,1);var f=r();void 0!==f&&(t=f)}}return t},d.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},d.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var c=Object.create(null);d.r(c);var o={};t=t||[null,n({}),n([]),n(n)];for(var u=2&r&&e;"object"==typeof u&&!~t.indexOf(u);u=n(u))Object.getOwnPropertyNames(u).forEach(function(t){o[t]=function(){return e[t]}});return o.default=function(){return e},d.d(c,o),c},d.d=function(e,t){for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce(function(t,n){return d.f[n](e,t),t},[]))},d.u=function(e){return 2350===e?"static/chunks/2350.fab69e61bac57b23.js":2369===e?"static/chunks/2369.fc20f0c2c8ed9fe7.js":3937===e?"static/chunks/3937.210053269f121201.js":9025===e?"static/chunks/9025.7937c16bc8623516.js":4937===e?"static/chunks/4937.d6bf67771e353356.js":9984===e?"static/chunks/9984.78ee6d2c6fa4b0e8.js":2003===e?"static/chunks/2003.f90b06bb1f914295.js":
|
|
1
|
+
!function(){"use strict";var e,t,n,r,c,o,u,i,a,f={},s={};function d(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={exports:{}},r=!0;try{f[e](n,n.exports,d),r=!1}finally{r&&delete s[e]}return n.exports}d.m=f,e=[],d.O=function(t,n,r,c){if(n){c=c||0;for(var o=e.length;o>0&&e[o-1][2]>c;o--)e[o]=e[o-1];e[o]=[n,r,c];return}for(var u=1/0,o=0;o<e.length;o++){for(var n=e[o][0],r=e[o][1],c=e[o][2],i=!0,a=0;a<n.length;a++)u>=c&&Object.keys(d.O).every(function(e){return d.O[e](n[a])})?n.splice(a--,1):(i=!1,c<u&&(u=c));if(i){e.splice(o--,1);var f=r();void 0!==f&&(t=f)}}return t},d.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},d.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var c=Object.create(null);d.r(c);var o={};t=t||[null,n({}),n([]),n(n)];for(var u=2&r&&e;"object"==typeof u&&!~t.indexOf(u);u=n(u))Object.getOwnPropertyNames(u).forEach(function(t){o[t]=function(){return e[t]}});return o.default=function(){return e},d.d(c,o),c},d.d=function(e,t){for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce(function(t,n){return d.f[n](e,t),t},[]))},d.u=function(e){return 2350===e?"static/chunks/2350.fab69e61bac57b23.js":2369===e?"static/chunks/2369.fc20f0c2c8ed9fe7.js":3937===e?"static/chunks/3937.210053269f121201.js":9025===e?"static/chunks/9025.7937c16bc8623516.js":4937===e?"static/chunks/4937.d6bf67771e353356.js":9984===e?"static/chunks/9984.78ee6d2c6fa4b0e8.js":2003===e?"static/chunks/2003.f90b06bb1f914295.js":9847===e?"static/chunks/9847.4c46c5e229c78704.js":4725===e?"static/chunks/4725.42f21f250f91f65b.js":691===e?"static/chunks/691.6d99cbfba347cebf.js":2641===e?"static/chunks/2641.142718b6b78a6f9b.js":3785===e?"static/chunks/3785.95524bc443db8260.js":4869===e?"static/chunks/4869.18e6a4361a380763.js":"static/chunks/"+e+"-"+({616:"3d59f75e2ccf9321",938:"40d15b6261ec8dc1",1043:"928582d4860fef92",1141:"3f10a5a9f697c630",1272:"1ef0bf0237faccdb",1559:"6c00e20454194859",1664:"22b00e32c9ff96a4",1871:"1df8b686a51f3e3a",3698:"7874720877646365",5230:"f3bb2663e442e86c",5739:"d67458fcb1386c92",6135:"d0e285ac5f3f2485",6601:"234b1cf963c7280b",6989:"983d3ae7a874de98",6990:"08b2a1cae076a943",7411:"b15471acd2cba716",8969:"9a8cca241b30db83"})[e]+".js"},d.miniCssF=function(e){},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},c="_N_E:",d.l=function(e,t,n,o){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var u,i,a=document.getElementsByTagName("script"),f=0;f<a.length;f++){var s=a[f];if(s.getAttribute("src")==e||s.getAttribute("data-webpack")==c+n){u=s;break}}u||(i=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,d.nc&&u.setAttribute("nonce",d.nc),u.setAttribute("data-webpack",c+n),u.src=d.tu(e)),r[e]=[t];var b=function(t,n){u.onerror=u.onload=null,clearTimeout(l);var c=r[e];if(delete r[e],u.parentNode&&u.parentNode.removeChild(u),c&&c.forEach(function(e){return e(n)}),t)return t(n)},l=setTimeout(b.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=b.bind(null,u.onerror),u.onload=b.bind(null,u.onload),i&&document.head.appendChild(u)},d.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.tt=function(){return void 0===o&&(o={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(o=trustedTypes.createPolicy("nextjs#bundler",o))),o},d.tu=function(e){return d.tt().createScriptURL(e)},d.p="/dashboard/_next/",u={2272:0},d.f.j=function(e,t){var n=d.o(u,e)?u[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(2272!=e){var r=new Promise(function(t,r){n=u[e]=[t,r]});t.push(n[2]=r);var c=d.p+d.u(e),o=Error();d.l(c,function(t){if(d.o(u,e)&&(0!==(n=u[e])&&(u[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;o.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",o.name="ChunkLoadError",o.type=r,o.request=c,n[1](o)}},"chunk-"+e,e)}else u[e]=0}},d.O.j=function(e){return 0===u[e]},i=function(e,t){var n,r,c=t[0],o=t[1],i=t[2],a=0;if(c.some(function(e){return 0!==u[e]})){for(n in o)d.o(o,n)&&(d.m[n]=o[n]);if(i)var f=i(d)}for(e&&e(t);a<c.length;a++)r=c[a],d.o(u,r)&&u[r]&&u[r][0](),u[r]=0;return d.O(f)},(a=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(i.bind(null,0)),a.push=i.bind(null,a.push.bind(a)),d.nc=void 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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-f3bb2663e442e86c.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-22b00e32c9ff96a4.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-983d3ae7a874de98.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-7874720877646365.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-d0e285ac5f3f2485.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-fa63e8b1d203f298.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_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":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-f3bb2663e442e86c.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-22b00e32c9ff96a4.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/1559-6c00e20454194859.js" defer=""></script><script src="/dashboard/_next/static/chunks/6212-7bd06f60ba693125.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-983d3ae7a874de98.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-7874720877646365.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-d0e285ac5f3f2485.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-9a8cca241b30db83.js" defer=""></script><script src="/dashboard/_next/static/chunks/1043-928582d4860fef92.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-234b1cf963c7280b.js" defer=""></script><script src="/dashboard/_next/static/chunks/938-40d15b6261ec8dc1.js" defer=""></script><script src="/dashboard/_next/static/chunks/1871-1df8b686a51f3e3a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-665fa5d96dd41d67.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/clusters.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-956ad430075efee8.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/config.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-8620d099cbef8608.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/index.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-444f1804401f04ea.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-9cfd875eecb6eaf5.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-0fbdc9072f19fbe2.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-f3bb2663e442e86c.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-22b00e32c9ff96a4.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/6212-7bd06f60ba693125.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-983d3ae7a874de98.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-7874720877646365.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-d0e285ac5f3f2485.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-9a8cca241b30db83.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-b25c109d6e41bcf4.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-6393a9edc7322b54.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/users-34d6bb10c3b3ee3d.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/volumes-225c8dae0634eb7f.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/volumes","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspace/new-92f741084a89e27b.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-f3bb2663e442e86c.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-22b00e32c9ff96a4.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/1559-6c00e20454194859.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-983d3ae7a874de98.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-7874720877646365.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-d0e285ac5f3f2485.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-9a8cca241b30db83.js" defer=""></script><script src="/dashboard/_next/static/chunks/1043-928582d4860fef92.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-234b1cf963c7280b.js" defer=""></script><script src="/dashboard/_next/static/chunks/938-40d15b6261ec8dc1.js" defer=""></script><script src="/dashboard/_next/static/chunks/1141-3f10a5a9f697c630.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-4d41c9023287f59a.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.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-42cd1b19a6b01078.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-a67ae198457b9886.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces-e4cb7e97d37e93ad.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"f2fEsZwJxryJVOYRNtNKE","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/data/data_utils.py
CHANGED
|
@@ -624,6 +624,7 @@ class Rclone:
|
|
|
624
624
|
IBM = 'IBM'
|
|
625
625
|
R2 = 'R2'
|
|
626
626
|
AZURE = 'AZURE'
|
|
627
|
+
NEBIUS = 'NEBIUS'
|
|
627
628
|
|
|
628
629
|
def get_profile_name(self, bucket_name: str) -> str:
|
|
629
630
|
"""Gets the Rclone profile name for a given bucket.
|
|
@@ -640,7 +641,8 @@ class Rclone:
|
|
|
640
641
|
Rclone.RcloneStores.GCS: 'sky-gcs',
|
|
641
642
|
Rclone.RcloneStores.IBM: 'sky-ibm',
|
|
642
643
|
Rclone.RcloneStores.R2: 'sky-r2',
|
|
643
|
-
Rclone.RcloneStores.AZURE: 'sky-azure'
|
|
644
|
+
Rclone.RcloneStores.AZURE: 'sky-azure',
|
|
645
|
+
Rclone.RcloneStores.NEBIUS: 'sky-nebius'
|
|
644
646
|
}
|
|
645
647
|
return f'{profile_prefix[self]}-{bucket_name}'
|
|
646
648
|
|
|
@@ -728,6 +730,24 @@ class Rclone:
|
|
|
728
730
|
account = {storage_account_name}
|
|
729
731
|
key = {storage_account_key}
|
|
730
732
|
""")
|
|
733
|
+
elif self is Rclone.RcloneStores.NEBIUS:
|
|
734
|
+
nebius_session = nebius.session()
|
|
735
|
+
nebius_credentials = nebius.get_nebius_credentials(
|
|
736
|
+
nebius_session)
|
|
737
|
+
# Get endpoint URL from the client
|
|
738
|
+
client = nebius.client('s3')
|
|
739
|
+
endpoint_url = client.meta.endpoint_url
|
|
740
|
+
access_key_id = nebius_credentials.access_key
|
|
741
|
+
secret_access_key = nebius_credentials.secret_key
|
|
742
|
+
config = textwrap.dedent(f"""\
|
|
743
|
+
[{rclone_profile_name}]
|
|
744
|
+
type = s3
|
|
745
|
+
provider = Other
|
|
746
|
+
access_key_id = {access_key_id}
|
|
747
|
+
secret_access_key = {secret_access_key}
|
|
748
|
+
endpoint = {endpoint_url}
|
|
749
|
+
acl = private
|
|
750
|
+
""")
|
|
731
751
|
else:
|
|
732
752
|
with ux_utils.print_exception_no_traceback():
|
|
733
753
|
raise NotImplementedError(
|
sky/data/storage.py
CHANGED
|
@@ -4558,3 +4558,15 @@ class NebiusStore(S3CompatibleStore):
|
|
|
4558
4558
|
return mounting_utils.get_nebius_mount_cmd(nebius.NEBIUS_PROFILE_NAME,
|
|
4559
4559
|
bucket_name, endpoint_url,
|
|
4560
4560
|
mount_path, bucket_sub_path)
|
|
4561
|
+
|
|
4562
|
+
def mount_cached_command(self, mount_path: str) -> str:
|
|
4563
|
+
"""Nebius-specific cached mount implementation using rclone."""
|
|
4564
|
+
install_cmd = mounting_utils.get_rclone_install_cmd()
|
|
4565
|
+
rclone_profile_name = (
|
|
4566
|
+
data_utils.Rclone.RcloneStores.NEBIUS.get_profile_name(self.name))
|
|
4567
|
+
rclone_config = data_utils.Rclone.RcloneStores.NEBIUS.get_config(
|
|
4568
|
+
rclone_profile_name=rclone_profile_name)
|
|
4569
|
+
mount_cached_cmd = mounting_utils.get_mount_cached_cmd(
|
|
4570
|
+
rclone_config, rclone_profile_name, self.bucket.name, mount_path)
|
|
4571
|
+
return mounting_utils.get_mounting_command(mount_path, install_cmd,
|
|
4572
|
+
mount_cached_cmd)
|
sky/provision/runpod/utils.py
CHANGED
|
@@ -270,18 +270,17 @@ def launch(cluster_name: str, node_type: str, instance_type: str, region: str,
|
|
|
270
270
|
docker_login_config: Optional[Dict[str, str]]) -> str:
|
|
271
271
|
"""Launches an instance with the given parameters.
|
|
272
272
|
|
|
273
|
-
|
|
274
|
-
|
|
273
|
+
For CPU instances, we directly use the instance_type for launching the
|
|
274
|
+
instance.
|
|
275
|
+
|
|
276
|
+
For GPU instances, we convert the instance_type to the RunPod GPU name,
|
|
277
|
+
and finds the specs for the GPU, before launching the instance.
|
|
275
278
|
|
|
276
279
|
Returns:
|
|
277
280
|
instance_id: The instance ID.
|
|
278
281
|
"""
|
|
279
282
|
name = f'{cluster_name}-{node_type}'
|
|
280
|
-
gpu_type = GPU_NAME_MAP[instance_type.split('_')[1]]
|
|
281
|
-
gpu_quantity = int(instance_type.split('_')[0].replace('x', ''))
|
|
282
|
-
cloud_type = instance_type.split('_')[2]
|
|
283
283
|
|
|
284
|
-
gpu_specs = runpod.runpod.get_gpu(gpu_type)
|
|
285
284
|
# TODO(zhwu): keep this align with setups in
|
|
286
285
|
# `provision.kuberunetes.instance.py`
|
|
287
286
|
setup_cmd = (
|
|
@@ -329,12 +328,7 @@ def launch(cluster_name: str, node_type: str, instance_type: str, region: str,
|
|
|
329
328
|
params = {
|
|
330
329
|
'name': name,
|
|
331
330
|
'image_name': image_name_formatted,
|
|
332
|
-
'gpu_type_id': gpu_type,
|
|
333
|
-
'cloud_type': cloud_type,
|
|
334
331
|
'container_disk_in_gb': disk_size,
|
|
335
|
-
'min_vcpu_count': 4 * gpu_quantity,
|
|
336
|
-
'min_memory_in_gb': gpu_specs['memoryInGb'] * gpu_quantity,
|
|
337
|
-
'gpu_count': gpu_quantity,
|
|
338
332
|
'country_code': region,
|
|
339
333
|
'data_center_id': zone,
|
|
340
334
|
'ports': ports_str,
|
|
@@ -343,12 +337,33 @@ def launch(cluster_name: str, node_type: str, instance_type: str, region: str,
|
|
|
343
337
|
'template_id': template_id,
|
|
344
338
|
}
|
|
345
339
|
|
|
340
|
+
# GPU instance types start with f'{gpu_count}x',
|
|
341
|
+
# CPU instance types start with 'cpu'.
|
|
342
|
+
is_cpu_instance = instance_type.startswith('cpu')
|
|
343
|
+
if is_cpu_instance:
|
|
344
|
+
# RunPod CPU instances can be uniquely identified by the instance_id.
|
|
345
|
+
params.update({
|
|
346
|
+
'instance_id': instance_type,
|
|
347
|
+
})
|
|
348
|
+
else:
|
|
349
|
+
gpu_type = GPU_NAME_MAP[instance_type.split('_')[1]]
|
|
350
|
+
gpu_quantity = int(instance_type.split('_')[0].replace('x', ''))
|
|
351
|
+
cloud_type = instance_type.split('_')[2]
|
|
352
|
+
gpu_specs = runpod.runpod.get_gpu(gpu_type)
|
|
353
|
+
params.update({
|
|
354
|
+
'gpu_type_id': gpu_type,
|
|
355
|
+
'cloud_type': cloud_type,
|
|
356
|
+
'min_vcpu_count': 4 * gpu_quantity,
|
|
357
|
+
'min_memory_in_gb': gpu_specs['memoryInGb'] * gpu_quantity,
|
|
358
|
+
'gpu_count': gpu_quantity,
|
|
359
|
+
})
|
|
360
|
+
|
|
346
361
|
if preemptible is None or not preemptible:
|
|
347
362
|
new_instance = runpod.runpod.create_pod(**params)
|
|
348
363
|
else:
|
|
349
364
|
new_instance = runpod_commands.create_spot_pod(
|
|
350
365
|
bid_per_gpu=bid_per_gpu,
|
|
351
|
-
**params,
|
|
366
|
+
**params, # type: ignore[arg-type]
|
|
352
367
|
)
|
|
353
368
|
|
|
354
369
|
return new_instance['id']
|
sky/server/daemons.py
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"""Internal server daemons that run in the background."""
|
|
2
|
+
import dataclasses
|
|
3
|
+
import os
|
|
4
|
+
import time
|
|
5
|
+
from typing import Callable
|
|
6
|
+
|
|
7
|
+
from sky import sky_logging
|
|
8
|
+
from sky import skypilot_config
|
|
9
|
+
from sky.server import constants as server_constants
|
|
10
|
+
from sky.utils import common
|
|
11
|
+
from sky.utils import env_options
|
|
12
|
+
from sky.utils import ux_utils
|
|
13
|
+
|
|
14
|
+
logger = sky_logging.init_logger(__name__)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@dataclasses.dataclass
|
|
18
|
+
class InternalRequestDaemon:
|
|
19
|
+
"""Internal daemon that runs an event in the background."""
|
|
20
|
+
|
|
21
|
+
id: str
|
|
22
|
+
name: str
|
|
23
|
+
event_fn: Callable[[], None]
|
|
24
|
+
default_log_level: str = 'INFO'
|
|
25
|
+
|
|
26
|
+
def refresh_log_level(self) -> int:
|
|
27
|
+
# pylint: disable=import-outside-toplevel
|
|
28
|
+
import logging
|
|
29
|
+
|
|
30
|
+
try:
|
|
31
|
+
# Refresh config within the while loop.
|
|
32
|
+
# Since this is a long running daemon,
|
|
33
|
+
# reload_config_for_new_request()
|
|
34
|
+
# is not called in between the event runs.
|
|
35
|
+
skypilot_config.safe_reload_config()
|
|
36
|
+
# Get the configured log level for the daemon inside the event loop
|
|
37
|
+
# in case the log level changes after the API server is started.
|
|
38
|
+
level_str = skypilot_config.get_nested(
|
|
39
|
+
('daemons', self.id, 'log_level'), self.default_log_level)
|
|
40
|
+
return getattr(logging, level_str.upper())
|
|
41
|
+
except AttributeError:
|
|
42
|
+
# Bad level should be rejected by
|
|
43
|
+
# schema validation, just in case.
|
|
44
|
+
logger.warning(f'Invalid log level: {level_str}, using DEBUG')
|
|
45
|
+
return logging.DEBUG
|
|
46
|
+
except Exception as e: # pylint: disable=broad-except
|
|
47
|
+
logger.exception(f'Error refreshing log level for {self.id}: {e}')
|
|
48
|
+
return logging.DEBUG
|
|
49
|
+
|
|
50
|
+
def run_event(self):
|
|
51
|
+
"""Run the event."""
|
|
52
|
+
|
|
53
|
+
# Disable logging for periodic refresh to avoid the usage message being
|
|
54
|
+
# sent multiple times.
|
|
55
|
+
os.environ[env_options.Options.DISABLE_LOGGING.env_key] = '1'
|
|
56
|
+
|
|
57
|
+
level = self.refresh_log_level()
|
|
58
|
+
while True:
|
|
59
|
+
try:
|
|
60
|
+
with ux_utils.enable_traceback(), \
|
|
61
|
+
sky_logging.set_sky_logging_levels(level):
|
|
62
|
+
sky_logging.reload_logger()
|
|
63
|
+
level = self.refresh_log_level()
|
|
64
|
+
self.event_fn()
|
|
65
|
+
except Exception: # pylint: disable=broad-except
|
|
66
|
+
# It is OK to fail to run the event, as the event is not
|
|
67
|
+
# critical, but we should log the error.
|
|
68
|
+
logger.exception(
|
|
69
|
+
f'Error running {self.name} event. '
|
|
70
|
+
f'Restarting in '
|
|
71
|
+
f'{server_constants.DAEMON_RESTART_INTERVAL_SECONDS} '
|
|
72
|
+
'seconds...')
|
|
73
|
+
time.sleep(server_constants.DAEMON_RESTART_INTERVAL_SECONDS)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def refresh_cluster_status_event():
|
|
77
|
+
"""Periodically refresh the cluster status."""
|
|
78
|
+
# pylint: disable=import-outside-toplevel
|
|
79
|
+
from sky import core
|
|
80
|
+
|
|
81
|
+
logger.info('=== Refreshing cluster status ===')
|
|
82
|
+
# This periodically refresh will hold the lock for the cluster being
|
|
83
|
+
# refreshed, but it is OK because other operations will just wait for
|
|
84
|
+
# the lock and get the just refreshed status without refreshing again.
|
|
85
|
+
core.status(refresh=common.StatusRefreshMode.FORCE, all_users=True)
|
|
86
|
+
logger.info('Status refreshed. Sleeping '
|
|
87
|
+
f'{server_constants.CLUSTER_REFRESH_DAEMON_INTERVAL_SECONDS}'
|
|
88
|
+
' seconds for the next refresh...\n')
|
|
89
|
+
time.sleep(server_constants.CLUSTER_REFRESH_DAEMON_INTERVAL_SECONDS)
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def refresh_volume_status_event():
|
|
93
|
+
"""Periodically refresh the volume status."""
|
|
94
|
+
# pylint: disable=import-outside-toplevel
|
|
95
|
+
from sky.volumes.server import core
|
|
96
|
+
|
|
97
|
+
# Disable logging for periodic refresh to avoid the usage message being
|
|
98
|
+
# sent multiple times.
|
|
99
|
+
os.environ[env_options.Options.DISABLE_LOGGING.env_key] = '1'
|
|
100
|
+
|
|
101
|
+
logger.info('=== Refreshing volume status ===')
|
|
102
|
+
core.volume_refresh()
|
|
103
|
+
logger.info('Volume status refreshed. Sleeping '
|
|
104
|
+
f'{server_constants.VOLUME_REFRESH_DAEMON_INTERVAL_SECONDS}'
|
|
105
|
+
' seconds for the next refresh...\n')
|
|
106
|
+
time.sleep(server_constants.VOLUME_REFRESH_DAEMON_INTERVAL_SECONDS)
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
def managed_job_status_refresh_event():
|
|
110
|
+
"""Refresh the managed job status for controller consolidation mode."""
|
|
111
|
+
# pylint: disable=import-outside-toplevel
|
|
112
|
+
from sky.jobs import utils as managed_job_utils
|
|
113
|
+
if not managed_job_utils.is_consolidation_mode():
|
|
114
|
+
return
|
|
115
|
+
# We run the recovery logic before starting the event loop as those two are
|
|
116
|
+
# conflicting. Check PERSISTENT_RUN_RESTARTING_SIGNAL_FILE for details.
|
|
117
|
+
from sky.utils import controller_utils
|
|
118
|
+
if controller_utils.high_availability_specified(
|
|
119
|
+
controller_utils.Controllers.JOBS_CONTROLLER.value.cluster_name):
|
|
120
|
+
managed_job_utils.ha_recovery_for_consolidation_mode()
|
|
121
|
+
# After recovery, we start the event loop.
|
|
122
|
+
from sky.skylet import events
|
|
123
|
+
refresh_event = events.ManagedJobEvent()
|
|
124
|
+
scheduling_event = events.ManagedJobSchedulingEvent()
|
|
125
|
+
logger.info('=== Running managed job event ===')
|
|
126
|
+
refresh_event.run()
|
|
127
|
+
scheduling_event.run()
|
|
128
|
+
time.sleep(events.EVENT_CHECKING_INTERVAL_SECONDS)
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
def sky_serve_status_refresh_event():
|
|
132
|
+
"""Refresh the sky serve status for controller consolidation mode."""
|
|
133
|
+
# pylint: disable=import-outside-toplevel
|
|
134
|
+
from sky.serve import serve_utils
|
|
135
|
+
if not serve_utils.is_consolidation_mode():
|
|
136
|
+
return
|
|
137
|
+
# TODO(tian): Add HA recovery logic.
|
|
138
|
+
from sky.skylet import events
|
|
139
|
+
event = events.ServiceUpdateEvent()
|
|
140
|
+
logger.info('=== Running serve status refresh event ===')
|
|
141
|
+
event.run()
|
|
142
|
+
time.sleep(events.EVENT_CHECKING_INTERVAL_SECONDS)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
# Register the events to run in the background.
|
|
146
|
+
INTERNAL_REQUEST_DAEMONS = [
|
|
147
|
+
# This status refresh daemon can cause the autostopp'ed/autodown'ed cluster
|
|
148
|
+
# set to updated status automatically, without showing users the hint of
|
|
149
|
+
# cluster being stopped or down when `sky status -r` is called.
|
|
150
|
+
InternalRequestDaemon(id='skypilot-status-refresh-daemon',
|
|
151
|
+
name='status',
|
|
152
|
+
event_fn=refresh_cluster_status_event,
|
|
153
|
+
default_log_level='DEBUG'),
|
|
154
|
+
# Volume status refresh daemon to update the volume status periodically.
|
|
155
|
+
InternalRequestDaemon(id='skypilot-volume-status-refresh-daemon',
|
|
156
|
+
name='volume',
|
|
157
|
+
event_fn=refresh_volume_status_event),
|
|
158
|
+
InternalRequestDaemon(id='managed-job-status-refresh-daemon',
|
|
159
|
+
name='managed-job-status',
|
|
160
|
+
event_fn=managed_job_status_refresh_event),
|
|
161
|
+
InternalRequestDaemon(id='sky-serve-status-refresh-daemon',
|
|
162
|
+
name='sky-serve-status',
|
|
163
|
+
event_fn=sky_serve_status_refresh_event),
|
|
164
|
+
]
|
sky/server/requests/requests.py
CHANGED
|
@@ -24,12 +24,11 @@ from sky import sky_logging
|
|
|
24
24
|
from sky import skypilot_config
|
|
25
25
|
from sky.server import common as server_common
|
|
26
26
|
from sky.server import constants as server_constants
|
|
27
|
+
from sky.server import daemons
|
|
27
28
|
from sky.server.requests import payloads
|
|
28
29
|
from sky.server.requests.serializers import decoders
|
|
29
30
|
from sky.server.requests.serializers import encoders
|
|
30
|
-
from sky.utils import common
|
|
31
31
|
from sky.utils import common_utils
|
|
32
|
-
from sky.utils import env_options
|
|
33
32
|
from sky.utils import subprocess_utils
|
|
34
33
|
from sky.utils import ux_utils
|
|
35
34
|
from sky.utils.db import db_utils
|
|
@@ -307,127 +306,6 @@ def kill_cluster_requests(cluster_name: str, exclude_request_name: str):
|
|
|
307
306
|
kill_requests(request_ids)
|
|
308
307
|
|
|
309
308
|
|
|
310
|
-
def refresh_cluster_status_event():
|
|
311
|
-
"""Periodically refresh the cluster status."""
|
|
312
|
-
# pylint: disable=import-outside-toplevel
|
|
313
|
-
from sky import core
|
|
314
|
-
|
|
315
|
-
# Disable logging for periodic refresh to avoid the usage message being
|
|
316
|
-
# sent multiple times.
|
|
317
|
-
os.environ[env_options.Options.DISABLE_LOGGING.env_key] = '1'
|
|
318
|
-
|
|
319
|
-
while True:
|
|
320
|
-
logger.info('=== Refreshing cluster status ===')
|
|
321
|
-
# This periodically refresh will hold the lock for the cluster being
|
|
322
|
-
# refreshed, but it is OK because other operations will just wait for
|
|
323
|
-
# the lock and get the just refreshed status without refreshing again.
|
|
324
|
-
core.status(refresh=common.StatusRefreshMode.FORCE, all_users=True)
|
|
325
|
-
logger.info(
|
|
326
|
-
'Status refreshed. Sleeping '
|
|
327
|
-
f'{server_constants.CLUSTER_REFRESH_DAEMON_INTERVAL_SECONDS}'
|
|
328
|
-
' seconds for the next refresh...\n')
|
|
329
|
-
time.sleep(server_constants.CLUSTER_REFRESH_DAEMON_INTERVAL_SECONDS)
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
def refresh_volume_status_event():
|
|
333
|
-
"""Periodically refresh the volume status."""
|
|
334
|
-
# pylint: disable=import-outside-toplevel
|
|
335
|
-
from sky.volumes.server import core
|
|
336
|
-
|
|
337
|
-
# Disable logging for periodic refresh to avoid the usage message being
|
|
338
|
-
# sent multiple times.
|
|
339
|
-
os.environ[env_options.Options.DISABLE_LOGGING.env_key] = '1'
|
|
340
|
-
|
|
341
|
-
while True:
|
|
342
|
-
logger.info('=== Refreshing volume status ===')
|
|
343
|
-
core.volume_refresh()
|
|
344
|
-
logger.info('Volume status refreshed. Sleeping '
|
|
345
|
-
f'{server_constants.VOLUME_REFRESH_DAEMON_INTERVAL_SECONDS}'
|
|
346
|
-
' seconds for the next refresh...\n')
|
|
347
|
-
time.sleep(server_constants.VOLUME_REFRESH_DAEMON_INTERVAL_SECONDS)
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
def managed_job_status_refresh_event():
|
|
351
|
-
"""Refresh the managed job status for controller consolidation mode."""
|
|
352
|
-
# pylint: disable=import-outside-toplevel
|
|
353
|
-
from sky.jobs import utils as managed_job_utils
|
|
354
|
-
if not managed_job_utils.is_consolidation_mode():
|
|
355
|
-
return
|
|
356
|
-
# We run the recovery logic before starting the event loop as those two are
|
|
357
|
-
# conflicting. Check PERSISTENT_RUN_RESTARTING_SIGNAL_FILE for details.
|
|
358
|
-
from sky.utils import controller_utils
|
|
359
|
-
if controller_utils.high_availability_specified(
|
|
360
|
-
controller_utils.Controllers.JOBS_CONTROLLER.value.cluster_name):
|
|
361
|
-
managed_job_utils.ha_recovery_for_consolidation_mode()
|
|
362
|
-
# After recovery, we start the event loop.
|
|
363
|
-
from sky.skylet import events
|
|
364
|
-
refresh_event = events.ManagedJobEvent()
|
|
365
|
-
scheduling_event = events.ManagedJobSchedulingEvent()
|
|
366
|
-
while True:
|
|
367
|
-
logger.info('=== Running managed job event ===')
|
|
368
|
-
refresh_event.run()
|
|
369
|
-
scheduling_event.run()
|
|
370
|
-
time.sleep(events.EVENT_CHECKING_INTERVAL_SECONDS)
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
def sky_serve_status_refresh_event():
|
|
374
|
-
"""Refresh the managed job status for controller consolidation mode."""
|
|
375
|
-
# pylint: disable=import-outside-toplevel
|
|
376
|
-
from sky.serve import serve_utils
|
|
377
|
-
if not serve_utils.is_consolidation_mode():
|
|
378
|
-
return
|
|
379
|
-
# TODO(tian): Add HA recovery logic.
|
|
380
|
-
from sky.skylet import events
|
|
381
|
-
event = events.ServiceUpdateEvent()
|
|
382
|
-
while True:
|
|
383
|
-
time.sleep(events.EVENT_CHECKING_INTERVAL_SECONDS)
|
|
384
|
-
event.run()
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
@dataclasses.dataclass
|
|
388
|
-
class InternalRequestDaemon:
|
|
389
|
-
"""Internal daemon that runs an event in the background."""
|
|
390
|
-
|
|
391
|
-
id: str
|
|
392
|
-
name: str
|
|
393
|
-
event_fn: Callable[[], None]
|
|
394
|
-
|
|
395
|
-
def run_event(self):
|
|
396
|
-
"""Run the event."""
|
|
397
|
-
while True:
|
|
398
|
-
with ux_utils.enable_traceback():
|
|
399
|
-
try:
|
|
400
|
-
self.event_fn()
|
|
401
|
-
break
|
|
402
|
-
except Exception: # pylint: disable=broad-except
|
|
403
|
-
# It is OK to fail to run the event, as the event is not
|
|
404
|
-
# critical, but we should log the error.
|
|
405
|
-
logger.exception(
|
|
406
|
-
f'Error running {self.name} event. '
|
|
407
|
-
f'Restarting in '
|
|
408
|
-
f'{server_constants.DAEMON_RESTART_INTERVAL_SECONDS} '
|
|
409
|
-
'seconds...')
|
|
410
|
-
time.sleep(server_constants.DAEMON_RESTART_INTERVAL_SECONDS)
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
# Register the events to run in the background.
|
|
414
|
-
INTERNAL_REQUEST_DAEMONS = [
|
|
415
|
-
# This status refresh daemon can cause the autostopp'ed/autodown'ed cluster
|
|
416
|
-
# set to updated status automatically, without showing users the hint of
|
|
417
|
-
# cluster being stopped or down when `sky status -r` is called.
|
|
418
|
-
InternalRequestDaemon(id='skypilot-status-refresh-daemon',
|
|
419
|
-
name='status',
|
|
420
|
-
event_fn=refresh_cluster_status_event),
|
|
421
|
-
# Volume status refresh daemon to update the volume status periodically.
|
|
422
|
-
InternalRequestDaemon(id='skypilot-volume-status-refresh-daemon',
|
|
423
|
-
name='volume',
|
|
424
|
-
event_fn=refresh_volume_status_event),
|
|
425
|
-
InternalRequestDaemon(id='managed-job-status-refresh-daemon',
|
|
426
|
-
name='managed-job-status',
|
|
427
|
-
event_fn=managed_job_status_refresh_event),
|
|
428
|
-
]
|
|
429
|
-
|
|
430
|
-
|
|
431
309
|
def kill_requests(request_ids: Optional[List[str]] = None,
|
|
432
310
|
user_id: Optional[str] = None) -> List[str]:
|
|
433
311
|
"""Kill a SkyPilot API request and set its status to cancelled.
|
|
@@ -458,7 +336,7 @@ def kill_requests(request_ids: Optional[List[str]] = None,
|
|
|
458
336
|
# Skip internal requests. The internal requests are scheduled with
|
|
459
337
|
# request_id in range(len(INTERNAL_REQUEST_EVENTS)).
|
|
460
338
|
if request_record.request_id in set(
|
|
461
|
-
event.id for event in INTERNAL_REQUEST_DAEMONS):
|
|
339
|
+
event.id for event in daemons.INTERNAL_REQUEST_DAEMONS):
|
|
462
340
|
continue
|
|
463
341
|
if request_record.status > RequestStatus.RUNNING:
|
|
464
342
|
logger.debug(f'Request {request_id} already finished')
|
sky/server/server.py
CHANGED
|
@@ -46,6 +46,7 @@ from sky.serve.server import server as serve_rest
|
|
|
46
46
|
from sky.server import common
|
|
47
47
|
from sky.server import config as server_config
|
|
48
48
|
from sky.server import constants as server_constants
|
|
49
|
+
from sky.server import daemons
|
|
49
50
|
from sky.server import metrics
|
|
50
51
|
from sky.server import state
|
|
51
52
|
from sky.server import stream_utils
|
|
@@ -482,7 +483,7 @@ async def lifespan(app: fastapi.FastAPI): # pylint: disable=redefined-outer-nam
|
|
|
482
483
|
"""FastAPI lifespan context manager."""
|
|
483
484
|
del app # unused
|
|
484
485
|
# Startup: Run background tasks
|
|
485
|
-
for event in
|
|
486
|
+
for event in daemons.INTERNAL_REQUEST_DAEMONS:
|
|
486
487
|
try:
|
|
487
488
|
executor.schedule_request(
|
|
488
489
|
request_id=event.id,
|
sky/server/uvicorn.py
CHANGED
|
@@ -16,6 +16,7 @@ import uvicorn
|
|
|
16
16
|
from uvicorn.supervisors import multiprocess
|
|
17
17
|
|
|
18
18
|
from sky import sky_logging
|
|
19
|
+
from sky.server import daemons
|
|
19
20
|
from sky.server import state
|
|
20
21
|
from sky.server.requests import requests as requests_lib
|
|
21
22
|
from sky.skylet import constants
|
|
@@ -120,7 +121,7 @@ class Server(uvicorn.Server):
|
|
|
120
121
|
# Proactively cancel internal requests and logs requests since
|
|
121
122
|
# they can run for infinite time.
|
|
122
123
|
internal_request_ids = [
|
|
123
|
-
d.id for d in
|
|
124
|
+
d.id for d in daemons.INTERNAL_REQUEST_DAEMONS
|
|
124
125
|
]
|
|
125
126
|
if time.time() - start_time > _WAIT_REQUESTS_TIMEOUT_SECONDS:
|
|
126
127
|
logger.warning('Timeout waiting for on-going requests to '
|
sky/sky_logging.py
CHANGED
|
@@ -171,6 +171,36 @@ def set_logging_level(logger: str, level: int):
|
|
|
171
171
|
logger.setLevel(original_level)
|
|
172
172
|
|
|
173
173
|
|
|
174
|
+
@contextlib.contextmanager
|
|
175
|
+
def set_sky_logging_levels(level: int):
|
|
176
|
+
"""Set the logging level for all loggers."""
|
|
177
|
+
# Turn off logger
|
|
178
|
+
previous_levels = {}
|
|
179
|
+
for logger_name in logging.Logger.manager.loggerDict:
|
|
180
|
+
if logger_name.startswith('sky'):
|
|
181
|
+
logger = logging.getLogger(logger_name)
|
|
182
|
+
previous_levels[logger_name] = logger.level
|
|
183
|
+
logger.setLevel(level)
|
|
184
|
+
if level == logging.DEBUG:
|
|
185
|
+
previous_show_debug_info = env_options.Options.SHOW_DEBUG_INFO.get()
|
|
186
|
+
os.environ[env_options.Options.SHOW_DEBUG_INFO.env_key] = '1'
|
|
187
|
+
try:
|
|
188
|
+
yield
|
|
189
|
+
finally:
|
|
190
|
+
# Restore logger
|
|
191
|
+
for logger_name in logging.Logger.manager.loggerDict:
|
|
192
|
+
if logger_name.startswith('sky'):
|
|
193
|
+
logger = logging.getLogger(logger_name)
|
|
194
|
+
try:
|
|
195
|
+
logger.setLevel(previous_levels[logger_name])
|
|
196
|
+
except KeyError:
|
|
197
|
+
# New loggers maybe initialized after the context manager,
|
|
198
|
+
# no need to restore the level.
|
|
199
|
+
pass
|
|
200
|
+
if level == logging.DEBUG and not previous_show_debug_info:
|
|
201
|
+
os.environ.pop(env_options.Options.SHOW_DEBUG_INFO.env_key)
|
|
202
|
+
|
|
203
|
+
|
|
174
204
|
def logging_enabled(logger: logging.Logger, level: int) -> bool:
|
|
175
205
|
return logger.level <= level
|
|
176
206
|
|
sky/skylet/constants.py
CHANGED
|
@@ -382,7 +382,8 @@ OVERRIDEABLE_CONFIG_KEYS_IN_TASK: List[Tuple[str, ...]] = [
|
|
|
382
382
|
# we skip the following keys because they are meant to be client-side configs.
|
|
383
383
|
SKIPPED_CLIENT_OVERRIDE_KEYS: List[Tuple[str, ...]] = [('api_server',),
|
|
384
384
|
('allowed_clouds',),
|
|
385
|
-
('workspaces',), ('db',)
|
|
385
|
+
('workspaces',), ('db',),
|
|
386
|
+
('daemons',)]
|
|
386
387
|
|
|
387
388
|
# Constants for Azure blob storage
|
|
388
389
|
WAIT_FOR_STORAGE_ACCOUNT_CREATION = 60
|
sky/utils/schemas.py
CHANGED
|
@@ -1136,6 +1136,7 @@ _CONTEXT_CONFIG_SCHEMA_KUBERNETES = {
|
|
|
1136
1136
|
|
|
1137
1137
|
def get_config_schema():
|
|
1138
1138
|
# pylint: disable=import-outside-toplevel
|
|
1139
|
+
from sky.server import daemons
|
|
1139
1140
|
|
|
1140
1141
|
resources_schema = {
|
|
1141
1142
|
k: v
|
|
@@ -1479,6 +1480,27 @@ def get_config_schema():
|
|
|
1479
1480
|
}
|
|
1480
1481
|
}
|
|
1481
1482
|
|
|
1483
|
+
daemon_config = {
|
|
1484
|
+
'type': 'object',
|
|
1485
|
+
'required': [],
|
|
1486
|
+
'properties': {
|
|
1487
|
+
'log_level': {
|
|
1488
|
+
'type': 'string',
|
|
1489
|
+
'case_insensitive_enum': ['DEBUG', 'INFO', 'WARNING'],
|
|
1490
|
+
},
|
|
1491
|
+
}
|
|
1492
|
+
}
|
|
1493
|
+
|
|
1494
|
+
daemon_schema = {
|
|
1495
|
+
'type': 'object',
|
|
1496
|
+
'required': [],
|
|
1497
|
+
'additionalProperties': False,
|
|
1498
|
+
'properties': {}
|
|
1499
|
+
}
|
|
1500
|
+
|
|
1501
|
+
for daemon in daemons.INTERNAL_REQUEST_DAEMONS:
|
|
1502
|
+
daemon_schema['properties'][daemon.id] = daemon_config
|
|
1503
|
+
|
|
1482
1504
|
api_server = {
|
|
1483
1505
|
'type': 'object',
|
|
1484
1506
|
'required': [],
|
|
@@ -1724,6 +1746,7 @@ def get_config_schema():
|
|
|
1724
1746
|
'provision': provision_configs,
|
|
1725
1747
|
'rbac': rbac_schema,
|
|
1726
1748
|
'logs': logs_schema,
|
|
1749
|
+
'daemons': daemon_schema,
|
|
1727
1750
|
**cloud_configs,
|
|
1728
1751
|
},
|
|
1729
1752
|
}
|
{skypilot_nightly-1.0.0.dev20250731.dist-info → skypilot_nightly-1.0.0.dev20250801.dist-info}/RECORD
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
sky/__init__.py,sha256=
|
|
1
|
+
sky/__init__.py,sha256=F0tvtPN6QILWTtxIxztTsz0w2Sq2YXfeFwr80Rp0_eg,6535
|
|
2
2
|
sky/admin_policy.py,sha256=BeSowGnWfDj58ALiNf3cc2N4gMQWzjO6aXnX7vaqYhk,9782
|
|
3
3
|
sky/authentication.py,sha256=V7zGSV7bqcAKC_EGOOS0KhJ01ZFLnme0WnjLFO7zavs,25603
|
|
4
4
|
sky/check.py,sha256=R0pFsTq2v-wr3NFePlX9DmDhsbvWEoFJAXsys3pUmT4,30338
|
|
@@ -13,7 +13,7 @@ sky/models.py,sha256=Eor-cT4D71QTimogcnJ5ey1G1PXK-OXN-snEtE8Uu_g,3152
|
|
|
13
13
|
sky/optimizer.py,sha256=rcH6CVix1PJWWSwe1XWItfsmG8igwbKtRE5QVWRlpR4,63804
|
|
14
14
|
sky/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
15
15
|
sky/resources.py,sha256=y8_t61VOR5JHymkbohNDPMZEs4WUHy9ISC8_6IBey9w,106249
|
|
16
|
-
sky/sky_logging.py,sha256=
|
|
16
|
+
sky/sky_logging.py,sha256=aFcwYKKlZG28q-bEsVzvmBEZ1WqHMMp1SwRGONLopDI,8512
|
|
17
17
|
sky/skypilot_config.py,sha256=KesPrzq4m07mqPrVIphLnT2qyS4mrxh3-FKbpjOXDu8,36817
|
|
18
18
|
sky/task.py,sha256=d7387AOvuaCHadUVN6bXKGxkgMDtBaIYiw7bPv6InXk,73739
|
|
19
19
|
sky/adaptors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -82,7 +82,7 @@ sky/client/sdk.py,sha256=1KIBayflVwL0sVoCj8IP5W75cwT-YEEdpJnglYLaQ98,92749
|
|
|
82
82
|
sky/client/sdk.pyi,sha256=Dyu9wBaCZmB3O_pg7q0pHe6i1aVrNFX73eGSdLAm_W8,8082
|
|
83
83
|
sky/client/service_account_auth.py,sha256=5jXk0G6ufuW-SHCO7BEHQeTO0_2a8KfFmA63auXFRj4,1529
|
|
84
84
|
sky/client/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
85
|
-
sky/client/cli/command.py,sha256=
|
|
85
|
+
sky/client/cli/command.py,sha256=uhKBK8VVjLQxlKtvEkAvANdSIflRZxCl7HfH0m2_7zQ,238465
|
|
86
86
|
sky/client/cli/deprecation_utils.py,sha256=H_d5UyF2CekEoThduAzt5cihBO8hwKYMu0-Wqfbjv5E,3370
|
|
87
87
|
sky/client/cli/flags.py,sha256=6IdS_G2lB1C6r8kJMzLVREY_qV50VHiSfWlmppVrWuc,11623
|
|
88
88
|
sky/client/cli/git.py,sha256=dqSaJI1Ndv6RfKJa6HT6ednXr0j_pVlwSdh3XiQzB60,22018
|
|
@@ -112,17 +112,17 @@ sky/clouds/utils/azure_utils.py,sha256=NToRBnhEyuUvb-nBnsKTxjhOBRkMcrelL8LK4w6s4
|
|
|
112
112
|
sky/clouds/utils/gcp_utils.py,sha256=09MF4Vx0EW7S-GXGpyxpl2aQlHrqeu9ioV0nyionAyk,9890
|
|
113
113
|
sky/clouds/utils/oci_utils.py,sha256=TFqAqRLggg4Z0bhxrrq8nouSSomZy-ub1frHXEkud2M,7302
|
|
114
114
|
sky/clouds/utils/scp_utils.py,sha256=VGuccVO5uFGr8-yolWSoYrgr11z6cIeDBGcqkBzAyOs,18409
|
|
115
|
-
sky/dashboard/out/404.html,sha256=
|
|
116
|
-
sky/dashboard/out/clusters.html,sha256=
|
|
117
|
-
sky/dashboard/out/config.html,sha256=
|
|
115
|
+
sky/dashboard/out/404.html,sha256=nGHcdaIkr2Afmov79AkFX5JsPH53vwSTIF6EHB-U0Qk,1423
|
|
116
|
+
sky/dashboard/out/clusters.html,sha256=cStnNdU9iqDWom7gKJJZU4Ua4cDz_EDoT-_hJX6Wvdc,1418
|
|
117
|
+
sky/dashboard/out/config.html,sha256=826Eai4YvbO5Xcj-SbAnlGHZkrHTc4Y9AVSZZCRxpv4,1414
|
|
118
118
|
sky/dashboard/out/favicon.ico,sha256=XilUZZglAl_1zRsg85QsbQgmQAzGPQjcUIJ-A3AzYn8,93590
|
|
119
|
-
sky/dashboard/out/index.html,sha256=
|
|
120
|
-
sky/dashboard/out/infra.html,sha256=
|
|
121
|
-
sky/dashboard/out/jobs.html,sha256=
|
|
119
|
+
sky/dashboard/out/index.html,sha256=NI8htN6qUe4O8R8nAMS1zZcTasiUaNKi4K2aieruxF8,1407
|
|
120
|
+
sky/dashboard/out/infra.html,sha256=ypmbaPmbqRL8VpdjyMk8aZ_ypQGX0KgibWupeYHaDXI,1412
|
|
121
|
+
sky/dashboard/out/jobs.html,sha256=_KBh5YlE69pUzyqdfDC7yRkN_ds5hByX5VZuucFyeEE,1410
|
|
122
122
|
sky/dashboard/out/skypilot.svg,sha256=c0iRtlfLlaUm2p0rG9NFmo5FN0Qhf3pq5Xph-AeMPJw,5064
|
|
123
|
-
sky/dashboard/out/users.html,sha256=
|
|
124
|
-
sky/dashboard/out/volumes.html,sha256=
|
|
125
|
-
sky/dashboard/out/workspaces.html,sha256=
|
|
123
|
+
sky/dashboard/out/users.html,sha256=qwDJzOvbSIjlFpzlEdPCJBmA0O-hRn3cBkEj05aICKk,1412
|
|
124
|
+
sky/dashboard/out/volumes.html,sha256=cAkSnrwnE_13ousS9vMXybWVvkqFk_CpUuECVaXUdvU,1416
|
|
125
|
+
sky/dashboard/out/workspaces.html,sha256=7NvCPwqIdfDyN3N-T6h20JhcYbH2febNYyF5kFfs5Xw,1422
|
|
126
126
|
sky/dashboard/out/_next/static/chunks/1043-928582d4860fef92.js,sha256=BG7QXJfWCVid6a34fciR3aLMlAfaMwz__pMPGx5W4yI,18356
|
|
127
127
|
sky/dashboard/out/_next/static/chunks/1141-3f10a5a9f697c630.js,sha256=UYaip6NbdI5m6d7e2swueEq41Limnaf83CFxBG5V3qQ,17855
|
|
128
128
|
sky/dashboard/out/_next/static/chunks/1272-1ef0bf0237faccdb.js,sha256=VJ6y-Z6Eg2T93hQIRfWAbjAkQ7nQhglmIaVbEpKSILY,38451
|
|
@@ -159,7 +159,7 @@ sky/dashboard/out/_next/static/chunks/framework-cf60a09ccd051a10.js,sha256=_Qbam
|
|
|
159
159
|
sky/dashboard/out/_next/static/chunks/main-app-587214043926b3cc.js,sha256=t7glRfataAjNw691Wni-ZU4a3BsygRzPKoI8NOm-lsY,116244
|
|
160
160
|
sky/dashboard/out/_next/static/chunks/main-f15ccb73239a3bf1.js,sha256=jxOPLDVX3rkMc_jvGx2a-N2v6mvfOa8O6V0o-sLT0tI,110208
|
|
161
161
|
sky/dashboard/out/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js,sha256=6QPOwdWeAVe8x-SsiDrm-Ga6u2DkqgG5SFqglrlyIgA,91381
|
|
162
|
-
sky/dashboard/out/_next/static/chunks/webpack-
|
|
162
|
+
sky/dashboard/out/_next/static/chunks/webpack-42cd1b19a6b01078.js,sha256=3JIODwoPUZtSIv-AkN2MAIdAyXBF3B73OMXIDT00SFo,4817
|
|
163
163
|
sky/dashboard/out/_next/static/chunks/pages/_app-a67ae198457b9886.js,sha256=VuhMqjrmagBFq3GFOQEolXA0EcCcTuJJ07YnYZSzIWE,95540
|
|
164
164
|
sky/dashboard/out/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js,sha256=vjERjtMAbVk-19LyPf1Jc-H6TMcrSznSz6brzNqbqf8,253
|
|
165
165
|
sky/dashboard/out/_next/static/chunks/pages/clusters-956ad430075efee8.js,sha256=L7DO9OEherPXWbBVn5F4WRxWVsr4QkleQ72Cd2N9zS0,869
|
|
@@ -177,20 +177,20 @@ sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-b25c109d6e41bcf4.js,sha25
|
|
|
177
177
|
sky/dashboard/out/_next/static/chunks/pages/workspace/new-92f741084a89e27b.js,sha256=_R_LeVz9kCnCeOSjnJLSVmaKh2JVd1LpTVNZifss3d8,772
|
|
178
178
|
sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-4d41c9023287f59a.js,sha256=BK6zNuC-5pUqmVKDlAgKs10P46xDefN_G3y-iLJ8TLw,1504
|
|
179
179
|
sky/dashboard/out/_next/static/css/b3227360726f12eb.css,sha256=H55rkeVIrdGOUAIPmLZ6C78aEgXb7fEPa9mT9BOuLBI,55358
|
|
180
|
-
sky/dashboard/out/_next/static/
|
|
181
|
-
sky/dashboard/out/_next/static/
|
|
182
|
-
sky/dashboard/out/clusters/[cluster].html,sha256=
|
|
183
|
-
sky/dashboard/out/clusters/[cluster]/[job].html,sha256=
|
|
184
|
-
sky/dashboard/out/infra/[context].html,sha256=
|
|
185
|
-
sky/dashboard/out/jobs/[job].html,sha256=
|
|
180
|
+
sky/dashboard/out/_next/static/f2fEsZwJxryJVOYRNtNKE/_buildManifest.js,sha256=zY6CK5HuvlvHmmUpNplXXoAXlp-v9lwDL5uYSLg89qo,2283
|
|
181
|
+
sky/dashboard/out/_next/static/f2fEsZwJxryJVOYRNtNKE/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
|
|
182
|
+
sky/dashboard/out/clusters/[cluster].html,sha256=s0jXTCzpfJYGtcWDtYsLQmQwpj5SymD5Mcmatr_SXHs,2936
|
|
183
|
+
sky/dashboard/out/clusters/[cluster]/[job].html,sha256=eoSv3Z_TFgnLd7lSOn1b3UgCh9f6lmHdyzmIWMSakwo,2161
|
|
184
|
+
sky/dashboard/out/infra/[context].html,sha256=3t_gWZNUprUNPaQ7Rhss6tZukE9frSuQHyz16pND6YU,1436
|
|
185
|
+
sky/dashboard/out/jobs/[job].html,sha256=7xecnu85bcLXMzwEQExseEI9Ie4V0Okfl78DkpXzIvk,2393
|
|
186
186
|
sky/dashboard/out/videos/cursor-small.mp4,sha256=8tRdp1vjawOrXUar1cfjOc-nkaKmcwCPZx_LO0XlCvQ,203285
|
|
187
|
-
sky/dashboard/out/workspace/new.html,sha256=
|
|
188
|
-
sky/dashboard/out/workspaces/[name].html,sha256=
|
|
187
|
+
sky/dashboard/out/workspace/new.html,sha256=iR1XHJ9AZM1LCjuj6-j3iPAAtErLqoPNJ9W0jeRcGMI,1428
|
|
188
|
+
sky/dashboard/out/workspaces/[name].html,sha256=MiMZhTKPWKGF3bbfRQtSDDEzq2XTBDHqxoYzsC10ZCA,2846
|
|
189
189
|
sky/data/__init__.py,sha256=Nhaf1NURisXpZuwWANa2IuCyppIuc720FRwqSE2oEwY,184
|
|
190
190
|
sky/data/data_transfer.py,sha256=N8b0CQebDuHieXjvEVwlYmK6DbQxUGG1RQJEyTbh3dU,12040
|
|
191
|
-
sky/data/data_utils.py,sha256=
|
|
191
|
+
sky/data/data_utils.py,sha256=AjEA_JRjo9NBMlv-Lq5iV4lBED_YZ1VqBR9pG6fGVWE,35179
|
|
192
192
|
sky/data/mounting_utils.py,sha256=OduhvpNQuuqXc3VgDEpwnZI1gY6zDwZlx_sTJfvv5IY,24582
|
|
193
|
-
sky/data/storage.py,sha256=
|
|
193
|
+
sky/data/storage.py,sha256=Q3jwgbFZpkYQFyhK-edX61NsFaIY8o6ol-XvkHeaXcU,208135
|
|
194
194
|
sky/data/storage_utils.py,sha256=l6sx0r3j0F2mTcIVn1S7-4Y_vFRZcvwsVrG_CCacVR8,13856
|
|
195
195
|
sky/jobs/__init__.py,sha256=KrAmDhmfdE1G1kuHVpPs9kekzjNE_C3SWIoGQeQhjww,1587
|
|
196
196
|
sky/jobs/constants.py,sha256=N7Bw_sSCL8cVd0NmKGXvAhyclR8Y-gJAair597umVo4,3305
|
|
@@ -283,7 +283,7 @@ sky/provision/paperspace/utils.py,sha256=FhJZz0O5tCbdaJ5WE6zTdVXvW6msalMaAc3xOR3
|
|
|
283
283
|
sky/provision/runpod/__init__.py,sha256=6HYvHI27EaLrX1SS0vWVhdLu5HDBeZCdvAeDJuwM5pk,556
|
|
284
284
|
sky/provision/runpod/config.py,sha256=9ulZJVL7nHuxhTdoj8D7lNn7SdicJ5zc6FIcHIG9tcg,321
|
|
285
285
|
sky/provision/runpod/instance.py,sha256=tWE6J2G4uDGXGk3utcU-njETslu7rI57lWjgk3K7IbM,10218
|
|
286
|
-
sky/provision/runpod/utils.py,sha256=
|
|
286
|
+
sky/provision/runpod/utils.py,sha256=UcrlU4xcEfrAzg7Lu_DK0pdZ28RxAovwvZvEZElWmJ0,13792
|
|
287
287
|
sky/provision/runpod/api/__init__.py,sha256=eJwjPeQZ5B7chf4-Bl4YeI2Uo9aLX4M1rr2NmPk89_E,112
|
|
288
288
|
sky/provision/runpod/api/commands.py,sha256=oh77PS0H0wZudHV8II9ceRuaFQ8FN4NJ4S3-6_PeqPM,4238
|
|
289
289
|
sky/provision/runpod/api/pods.py,sha256=GMwxgNr9NnHPfyh2Y9b8S_vLhrLY4h7LybFBBQNAyfw,4948
|
|
@@ -339,12 +339,13 @@ sky/server/__init__.py,sha256=MPPBqFzXz6Jv5QSk6td_IcvnfXfNErDZVcizu4MLRow,27
|
|
|
339
339
|
sky/server/common.py,sha256=XRLjlT0zSivdLRukjAQyWrwCVC6Qo-GY3XUjJJRViYQ,35384
|
|
340
340
|
sky/server/config.py,sha256=XWf5Kw4am6vMO5wcyWevbQAFH-dmKb7AMEgDzD083-M,8538
|
|
341
341
|
sky/server/constants.py,sha256=phK3FjVyOQQYgokIYkyuXzQtqBRCLSu-KWPYBnkFHsc,2321
|
|
342
|
+
sky/server/daemons.py,sha256=Wd5c3WgsnCkFq3com5Fs_Tuh4Fh_P8PrNglloLMjh_8,6916
|
|
342
343
|
sky/server/metrics.py,sha256=6H6n6dq_C5HMaU97mJlRUB9bqOEA_k205PO15wE3AWk,3648
|
|
343
344
|
sky/server/rest.py,sha256=-oDsI8-NmIcb7aqy_8USB4lQbPWdQibST59GJVtFUi8,7983
|
|
344
|
-
sky/server/server.py,sha256=
|
|
345
|
+
sky/server/server.py,sha256=r8OaXP8Pj5u54GhMe58gT_wAuicKzTDU86YJFiQRYjg,73997
|
|
345
346
|
sky/server/state.py,sha256=YbVOMJ1JipQQv17gLIGyiGN7MKfnP83qlUa5MB1z0Yk,747
|
|
346
347
|
sky/server/stream_utils.py,sha256=RS4RuMxQqTGqp3uxzZVtmFWzos4d49P7hMX_VklzEVU,9189
|
|
347
|
-
sky/server/uvicorn.py,sha256=
|
|
348
|
+
sky/server/uvicorn.py,sha256=7K-_Xge8EDWGqunqzSqPzGVBo5X1F8snKzWmzE2FdrY,9292
|
|
348
349
|
sky/server/versions.py,sha256=3atZzUa7y1XeKNcrfVxKWAo_5ZyCOnbY7DKpIqed7Do,10011
|
|
349
350
|
sky/server/html/log.html,sha256=TSGZktua9Ysl_ysg3w60rjxAxhH61AJnsYDHdtqrjmI,6929
|
|
350
351
|
sky/server/html/token_page.html,sha256=eUndS5u1foL9vaWGPRTLMt7lCzD1g0wYJ2v_EeeFzlc,7046
|
|
@@ -354,7 +355,7 @@ sky/server/requests/executor.py,sha256=_BaE4QDTowLyaSyWCFVX_GqfrHknNRWuBexpDPMEd
|
|
|
354
355
|
sky/server/requests/payloads.py,sha256=f-apQJvWlbknl3QqpbCo1AklVKkqPiV6u8sx5p_iSRA,25160
|
|
355
356
|
sky/server/requests/preconditions.py,sha256=uUQjzFFHf7O5-WvBypMzqViGmd1CXksbqrrDPmY_s_Y,7178
|
|
356
357
|
sky/server/requests/process.py,sha256=UpJp5rZizNMFRCNRtudFSjbcJhFarFbtAGDWI9x_ZyE,13197
|
|
357
|
-
sky/server/requests/requests.py,sha256
|
|
358
|
+
sky/server/requests/requests.py,sha256=-A399p-xVwGCA63qUvur7gI1qtDJPwo_bRbagjr3L1o,24219
|
|
358
359
|
sky/server/requests/queues/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
359
360
|
sky/server/requests/queues/local_queue.py,sha256=X6VkBiUmgd_kfqIK1hCtMWG1b8GiZbY70TBiBR6c6GY,416
|
|
360
361
|
sky/server/requests/queues/mp_queue.py,sha256=jDqP4Jd28U3ibSFyMR1DF9I2OWZrPZqFJrG5S6RFpyw,3403
|
|
@@ -370,7 +371,7 @@ sky/skylet/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
370
371
|
sky/skylet/attempt_skylet.py,sha256=GZ6ITjjA0m-da3IxXXfoHR6n4pjp3X3TOXUqVvSrV0k,2136
|
|
371
372
|
sky/skylet/autostop_lib.py,sha256=kGUnHm-jpF4zl3UJfB-4pnoldWpnVeR96WwYGSw7em0,4630
|
|
372
373
|
sky/skylet/configs.py,sha256=nNBnpuzoU696FbC3Nv0qKVSDuTw4GAbr7eCcg0_Sldo,2135
|
|
373
|
-
sky/skylet/constants.py,sha256=
|
|
374
|
+
sky/skylet/constants.py,sha256=NszY93-WPXneYKpZFe04KG5M3RuNXF1ObMtVMASDtho,23649
|
|
374
375
|
sky/skylet/events.py,sha256=UwO_9tktq99RON3TuB4FmUZi1Fes7XvJssCcdhUebq0,13007
|
|
375
376
|
sky/skylet/job_lib.py,sha256=cUud2sVcnHcZbqzHYGpiBy7EKSIphX8SqWg5Rsh-Su4,49533
|
|
376
377
|
sky/skylet/log_lib.py,sha256=-kfeSNb7gR7Z-G7ADHh9Na4_QO-T0o2WzYYhcrrHSIE,23349
|
|
@@ -458,7 +459,7 @@ sky/utils/resource_checker.py,sha256=N18XhoVIqjY1VzmKvxQxRchRgC2WIgcEQyHDkLvg4Y8
|
|
|
458
459
|
sky/utils/resources_utils.py,sha256=zcJXHYQt6WtQHKuWEif1QP1NtSO7XQYJBaEs625yV1Y,15958
|
|
459
460
|
sky/utils/rich_console_utils.py,sha256=wPvAlshaFHuMZSjiDnaK3OSBppZLBjAn-lj7AvxNBQk,553
|
|
460
461
|
sky/utils/rich_utils.py,sha256=iR6Gf8ZewE9sut4uhkmZwtEelzm3FvckM9K41meQnWM,14650
|
|
461
|
-
sky/utils/schemas.py,sha256=
|
|
462
|
+
sky/utils/schemas.py,sha256=t9P9-Up7LrxvSeRKY-RWgXZ0ryk7NAdLienJ_HKQCjE,55900
|
|
462
463
|
sky/utils/status_lib.py,sha256=QGkd6COD1GX1h30Mk9RMUdyeUOMJs5971GkxTcFgdsU,1705
|
|
463
464
|
sky/utils/subprocess_utils.py,sha256=tOpFY_1ml7JkVGAN1o473lcKPklGR95qBCW61eu8kEo,15773
|
|
464
465
|
sky/utils/tempstore.py,sha256=3S5fJ3UjnE12ve38c3MpTXpoRWfDSGndZpqNe7P_8aU,2148
|
|
@@ -502,9 +503,9 @@ sky/workspaces/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
502
503
|
sky/workspaces/core.py,sha256=MkQoVqWN67tf4VRq284U9vgAw4lwb_cpUfwHQT4V9Ow,16598
|
|
503
504
|
sky/workspaces/server.py,sha256=Box45DS54xXGHy7I3tGKGy-JP0a8G_z6IhfvGlEXtsA,3439
|
|
504
505
|
sky/workspaces/utils.py,sha256=IIAiFoS6sdb2t0X5YoX9AietpTanZUQNTK8cePun-sY,2143
|
|
505
|
-
skypilot_nightly-1.0.0.
|
|
506
|
-
skypilot_nightly-1.0.0.
|
|
507
|
-
skypilot_nightly-1.0.0.
|
|
508
|
-
skypilot_nightly-1.0.0.
|
|
509
|
-
skypilot_nightly-1.0.0.
|
|
510
|
-
skypilot_nightly-1.0.0.
|
|
506
|
+
skypilot_nightly-1.0.0.dev20250801.dist-info/licenses/LICENSE,sha256=emRJAvE7ngL6x0RhQvlns5wJzGI3NEQ_WMjNmd9TZc4,12170
|
|
507
|
+
skypilot_nightly-1.0.0.dev20250801.dist-info/METADATA,sha256=IgisD5xNyhY8McBlID1LbiJeO_qyGrIvQFbZRBPEX3I,19691
|
|
508
|
+
skypilot_nightly-1.0.0.dev20250801.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
509
|
+
skypilot_nightly-1.0.0.dev20250801.dist-info/entry_points.txt,sha256=StA6HYpuHj-Y61L2Ze-hK2IcLWgLZcML5gJu8cs6nU4,36
|
|
510
|
+
skypilot_nightly-1.0.0.dev20250801.dist-info/top_level.txt,sha256=qA8QuiNNb6Y1OF-pCUtPEr6sLEwy2xJX06Bd_CrtrHY,4
|
|
511
|
+
skypilot_nightly-1.0.0.dev20250801.dist-info/RECORD,,
|
/sky/dashboard/out/_next/static/{oKqDxFQ88cquF4nQGE_0w → f2fEsZwJxryJVOYRNtNKE}/_buildManifest.js
RENAMED
|
File without changes
|
/sky/dashboard/out/_next/static/{oKqDxFQ88cquF4nQGE_0w → f2fEsZwJxryJVOYRNtNKE}/_ssgManifest.js
RENAMED
|
File without changes
|
{skypilot_nightly-1.0.0.dev20250731.dist-info → skypilot_nightly-1.0.0.dev20250801.dist-info}/WHEEL
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|