skypilot-nightly 1.0.0.dev20250611__py3-none-any.whl → 1.0.0.dev20250612__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/check.py +41 -2
- sky/clouds/kubernetes.py +1 -1
- sky/dashboard/out/404.html +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/workspace/new.html +1 -1
- sky/dashboard/out/workspaces/[name].html +1 -1
- sky/dashboard/out/workspaces.html +1 -1
- sky/global_user_state.py +38 -0
- sky/jobs/server/core.py +1 -68
- sky/templates/jobs-controller.yaml.j2 +0 -23
- sky/utils/controller_utils.py +10 -0
- {skypilot_nightly-1.0.0.dev20250611.dist-info → skypilot_nightly-1.0.0.dev20250612.dist-info}/METADATA +1 -1
- {skypilot_nightly-1.0.0.dev20250611.dist-info → skypilot_nightly-1.0.0.dev20250612.dist-info}/RECORD +29 -33
- sky/jobs/dashboard/dashboard.py +0 -223
- sky/jobs/dashboard/static/favicon.ico +0 -0
- sky/jobs/dashboard/templates/index.html +0 -831
- sky/jobs/server/dashboard_utils.py +0 -69
- /sky/dashboard/out/_next/static/{zJqasksBQ3HcqMpA2wTUZ → G3DXdMFu2Jzd-Dody9iq1}/_buildManifest.js +0 -0
- /sky/dashboard/out/_next/static/{zJqasksBQ3HcqMpA2wTUZ → G3DXdMFu2Jzd-Dody9iq1}/_ssgManifest.js +0 -0
- {skypilot_nightly-1.0.0.dev20250611.dist-info → skypilot_nightly-1.0.0.dev20250612.dist-info}/WHEEL +0 -0
- {skypilot_nightly-1.0.0.dev20250611.dist-info → skypilot_nightly-1.0.0.dev20250612.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250611.dist-info → skypilot_nightly-1.0.0.dev20250612.dist-info}/licenses/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250611.dist-info → skypilot_nightly-1.0.0.dev20250612.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 = '88962061c851edfe5dfcfe12a1c3cf63a703dfd8'
|
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.dev20250612'
|
39
39
|
__root_dir__ = os.path.dirname(os.path.abspath(__file__))
|
40
40
|
|
41
41
|
|
sky/check.py
CHANGED
@@ -11,6 +11,7 @@ import colorama
|
|
11
11
|
from sky import clouds as sky_clouds
|
12
12
|
from sky import exceptions
|
13
13
|
from sky import global_user_state
|
14
|
+
from sky import sky_logging
|
14
15
|
from sky import skypilot_config
|
15
16
|
from sky.adaptors import cloudflare
|
16
17
|
from sky.clouds import cloud as sky_cloud
|
@@ -23,6 +24,30 @@ from sky.utils import ux_utils
|
|
23
24
|
CHECK_MARK_EMOJI = '\U00002714' # Heavy check mark unicode
|
24
25
|
PARTY_POPPER_EMOJI = '\U0001F389' # Party popper unicode
|
25
26
|
|
27
|
+
logger = sky_logging.init_logger(__name__)
|
28
|
+
|
29
|
+
|
30
|
+
def _get_workspace_allowed_clouds(workspace: str) -> List[str]:
|
31
|
+
# Use allowed_clouds from config if it exists, otherwise check all
|
32
|
+
# clouds. Also validate names with get_cloud_tuple.
|
33
|
+
config_allowed_cloud_names = skypilot_config.get_nested(
|
34
|
+
('allowed_clouds',),
|
35
|
+
[repr(c) for c in registry.CLOUD_REGISTRY.values()] + [cloudflare.NAME])
|
36
|
+
# filter out the clouds that are disabled in the workspace config
|
37
|
+
workspace_disabled_clouds = []
|
38
|
+
for cloud in config_allowed_cloud_names:
|
39
|
+
cloud_config = skypilot_config.get_workspace_cloud(cloud.lower(),
|
40
|
+
workspace=workspace)
|
41
|
+
cloud_disabled = cloud_config.get('disabled', False)
|
42
|
+
if cloud_disabled:
|
43
|
+
workspace_disabled_clouds.append(cloud.lower())
|
44
|
+
|
45
|
+
config_allowed_cloud_names = [
|
46
|
+
c for c in config_allowed_cloud_names
|
47
|
+
if c.lower() not in workspace_disabled_clouds
|
48
|
+
]
|
49
|
+
return config_allowed_cloud_names
|
50
|
+
|
26
51
|
|
27
52
|
def check_capabilities(
|
28
53
|
quiet: bool = False,
|
@@ -132,6 +157,8 @@ def check_capabilities(
|
|
132
157
|
c for c in config_allowed_cloud_names
|
133
158
|
if c not in workspace_disabled_clouds
|
134
159
|
]
|
160
|
+
global_user_state.set_allowed_clouds(
|
161
|
+
[c for c in config_allowed_cloud_names], current_workspace_name)
|
135
162
|
|
136
163
|
# Use disallowed_cloud_names for logging the clouds that will be
|
137
164
|
# disabled because they are not included in allowed_clouds in
|
@@ -341,11 +368,22 @@ def get_cached_enabled_clouds_or_refresh(
|
|
341
368
|
raise_if_no_cloud_access is set to True.
|
342
369
|
"""
|
343
370
|
active_workspace = skypilot_config.get_active_workspace()
|
371
|
+
allowed_clouds_changed = False
|
372
|
+
cached_allowed_clouds = global_user_state.get_allowed_clouds(
|
373
|
+
active_workspace)
|
374
|
+
skypilot_config_allowed_clouds = _get_workspace_allowed_clouds(
|
375
|
+
active_workspace)
|
376
|
+
if sorted(cached_allowed_clouds) != sorted(skypilot_config_allowed_clouds):
|
377
|
+
allowed_clouds_changed = True
|
378
|
+
|
344
379
|
cached_enabled_clouds = global_user_state.get_cached_enabled_clouds(
|
345
380
|
capability, active_workspace)
|
346
|
-
if not cached_enabled_clouds:
|
381
|
+
if not cached_enabled_clouds or allowed_clouds_changed:
|
347
382
|
try:
|
348
383
|
check_capability(capability, quiet=True, workspace=active_workspace)
|
384
|
+
if allowed_clouds_changed:
|
385
|
+
global_user_state.set_allowed_clouds(
|
386
|
+
skypilot_config_allowed_clouds, active_workspace)
|
349
387
|
except SystemExit:
|
350
388
|
# If no cloud is enabled, check() will raise SystemExit.
|
351
389
|
# Here we catch it and raise the exception later only if
|
@@ -382,7 +420,8 @@ def get_cloud_credential_file_mounts(
|
|
382
420
|
cloud_file_mounts = cloud.get_credential_file_mounts()
|
383
421
|
for remote_path, local_path in cloud_file_mounts.items():
|
384
422
|
if os.path.exists(os.path.expanduser(local_path)):
|
385
|
-
file_mounts[remote_path] =
|
423
|
+
file_mounts[remote_path] = os.path.realpath(
|
424
|
+
os.path.expanduser(local_path))
|
386
425
|
# Currently, get_cached_enabled_clouds_or_refresh() does not support r2 as
|
387
426
|
# only clouds with computing instances are marked as enabled by skypilot.
|
388
427
|
# This will be removed when cloudflare/r2 is added as a 'cloud'.
|
sky/clouds/kubernetes.py
CHANGED
@@ -772,7 +772,7 @@ class Kubernetes(clouds.Cloud):
|
|
772
772
|
"""Checks if the user has access credentials to
|
773
773
|
Kubernetes."""
|
774
774
|
# Check for port forward dependencies
|
775
|
-
logger.
|
775
|
+
logger.debug(f'Checking compute credentials for {cls.canonical_name()}')
|
776
776
|
reasons = kubernetes_utils.check_port_forward_mode_dependencies(False)
|
777
777
|
if reasons is not None:
|
778
778
|
formatted = '\n'.join(
|
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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-1be831200e60c5c0.js" defer=""></script><script src="/dashboard/_next/static/
|
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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-1be831200e60c5c0.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_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":"G3DXdMFu2Jzd-Dody9iq1","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
@@ -1 +1 @@
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-d6128fa9e7cae6e6.js" defer=""></script><script src="/dashboard/_next/static/chunks/760-a89d354797ce7af5.js" defer=""></script><script src="/dashboard/_next/static/chunks/799-3625946b2ec2eb30.js" defer=""></script><script src="/dashboard/_next/static/chunks/804-4c9fc53aa74bc191.js" defer=""></script><script src="/dashboard/_next/static/chunks/664-047bc03493fda379.js" defer=""></script><script src="/dashboard/_next/static/chunks/470-4d1a5dbe58a8a2b9.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-89216c616dbaa9c5.js" defer=""></script><script src="/dashboard/_next/static/
|
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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-d6128fa9e7cae6e6.js" defer=""></script><script src="/dashboard/_next/static/chunks/760-a89d354797ce7af5.js" defer=""></script><script src="/dashboard/_next/static/chunks/799-3625946b2ec2eb30.js" defer=""></script><script src="/dashboard/_next/static/chunks/804-4c9fc53aa74bc191.js" defer=""></script><script src="/dashboard/_next/static/chunks/664-047bc03493fda379.js" defer=""></script><script src="/dashboard/_next/static/chunks/470-4d1a5dbe58a8a2b9.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-89216c616dbaa9c5.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_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":"G3DXdMFu2Jzd-Dody9iq1","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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-d6128fa9e7cae6e6.js" defer=""></script><script src="/dashboard/_next/static/chunks/760-a89d354797ce7af5.js" defer=""></script><script src="/dashboard/_next/static/chunks/799-3625946b2ec2eb30.js" defer=""></script><script src="/dashboard/_next/static/chunks/804-4c9fc53aa74bc191.js" defer=""></script><script src="/dashboard/_next/static/chunks/664-047bc03493fda379.js" defer=""></script><script src="/dashboard/_next/static/chunks/798-c0525dc3f21e488d.js" defer=""></script><script src="/dashboard/_next/static/chunks/947-6620842ef80ae879.js" defer=""></script><script src="/dashboard/_next/static/chunks/470-4d1a5dbe58a8a2b9.js" defer=""></script><script src="/dashboard/_next/static/chunks/901-b424d293275e1fd7.js" defer=""></script><script src="/dashboard/_next/static/chunks/969-20d54a9d998dc102.js" defer=""></script><script src="/dashboard/_next/static/chunks/856-0776dc6ed6000c39.js" defer=""></script><script src="/dashboard/_next/static/chunks/973-c807fc34f09c7df3.js" defer=""></script><script src="/dashboard/_next/static/chunks/938-ab185187a63f9cdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/37-d8aebf1683522a0b.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-451a14e7e755ebbc.js" defer=""></script><script src="/dashboard/_next/static/
|
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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-d6128fa9e7cae6e6.js" defer=""></script><script src="/dashboard/_next/static/chunks/760-a89d354797ce7af5.js" defer=""></script><script src="/dashboard/_next/static/chunks/799-3625946b2ec2eb30.js" defer=""></script><script src="/dashboard/_next/static/chunks/804-4c9fc53aa74bc191.js" defer=""></script><script src="/dashboard/_next/static/chunks/664-047bc03493fda379.js" defer=""></script><script src="/dashboard/_next/static/chunks/798-c0525dc3f21e488d.js" defer=""></script><script src="/dashboard/_next/static/chunks/947-6620842ef80ae879.js" defer=""></script><script src="/dashboard/_next/static/chunks/470-4d1a5dbe58a8a2b9.js" defer=""></script><script src="/dashboard/_next/static/chunks/901-b424d293275e1fd7.js" defer=""></script><script src="/dashboard/_next/static/chunks/969-20d54a9d998dc102.js" defer=""></script><script src="/dashboard/_next/static/chunks/856-0776dc6ed6000c39.js" defer=""></script><script src="/dashboard/_next/static/chunks/973-c807fc34f09c7df3.js" defer=""></script><script src="/dashboard/_next/static/chunks/938-ab185187a63f9cdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/37-d8aebf1683522a0b.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-451a14e7e755ebbc.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"G3DXdMFu2Jzd-Dody9iq1","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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-e56b17fd85d0ba58.js" defer=""></script><script src="/dashboard/_next/static/
|
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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-e56b17fd85d0ba58.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"G3DXdMFu2Jzd-Dody9iq1","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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-497a35a7ed49734a.js" defer=""></script><script src="/dashboard/_next/static/
|
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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-497a35a7ed49734a.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"G3DXdMFu2Jzd-Dody9iq1","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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-6b0d9e5031b70c58.js" defer=""></script><script src="/dashboard/_next/static/
|
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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-6b0d9e5031b70c58.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"G3DXdMFu2Jzd-Dody9iq1","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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-d2910be98e9227cb.js" defer=""></script><script src="/dashboard/_next/static/
|
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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-d2910be98e9227cb.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"G3DXdMFu2Jzd-Dody9iq1","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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-780860bcc1103945.js" defer=""></script><script src="/dashboard/_next/static/
|
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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-780860bcc1103945.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"G3DXdMFu2Jzd-Dody9iq1","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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-d6128fa9e7cae6e6.js" defer=""></script><script src="/dashboard/_next/static/chunks/760-a89d354797ce7af5.js" defer=""></script><script src="/dashboard/_next/static/chunks/799-3625946b2ec2eb30.js" defer=""></script><script src="/dashboard/_next/static/chunks/804-4c9fc53aa74bc191.js" defer=""></script><script src="/dashboard/_next/static/chunks/664-047bc03493fda379.js" defer=""></script><script src="/dashboard/_next/static/chunks/798-c0525dc3f21e488d.js" defer=""></script><script src="/dashboard/_next/static/chunks/470-4d1a5dbe58a8a2b9.js" defer=""></script><script src="/dashboard/_next/static/chunks/969-20d54a9d998dc102.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-b3dbf38b51cb29be.js" defer=""></script><script src="/dashboard/_next/static/
|
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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-d6128fa9e7cae6e6.js" defer=""></script><script src="/dashboard/_next/static/chunks/760-a89d354797ce7af5.js" defer=""></script><script src="/dashboard/_next/static/chunks/799-3625946b2ec2eb30.js" defer=""></script><script src="/dashboard/_next/static/chunks/804-4c9fc53aa74bc191.js" defer=""></script><script src="/dashboard/_next/static/chunks/664-047bc03493fda379.js" defer=""></script><script src="/dashboard/_next/static/chunks/798-c0525dc3f21e488d.js" defer=""></script><script src="/dashboard/_next/static/chunks/470-4d1a5dbe58a8a2b9.js" defer=""></script><script src="/dashboard/_next/static/chunks/969-20d54a9d998dc102.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-b3dbf38b51cb29be.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"G3DXdMFu2Jzd-Dody9iq1","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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-fe233baf3d073491.js" defer=""></script><script src="/dashboard/_next/static/
|
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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-fe233baf3d073491.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"G3DXdMFu2Jzd-Dody9iq1","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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/users-c69ffcab9d6e5269.js" defer=""></script><script src="/dashboard/_next/static/
|
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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/users-c69ffcab9d6e5269.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"G3DXdMFu2Jzd-Dody9iq1","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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspace/new-31aa8bdcb7592635.js" defer=""></script><script src="/dashboard/_next/static/
|
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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspace/new-31aa8bdcb7592635.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspace/new","query":{},"buildId":"G3DXdMFu2Jzd-Dody9iq1","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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-d6128fa9e7cae6e6.js" defer=""></script><script src="/dashboard/_next/static/chunks/760-a89d354797ce7af5.js" defer=""></script><script src="/dashboard/_next/static/chunks/799-3625946b2ec2eb30.js" defer=""></script><script src="/dashboard/_next/static/chunks/804-4c9fc53aa74bc191.js" defer=""></script><script src="/dashboard/_next/static/chunks/664-047bc03493fda379.js" defer=""></script><script src="/dashboard/_next/static/chunks/798-c0525dc3f21e488d.js" defer=""></script><script src="/dashboard/_next/static/chunks/947-6620842ef80ae879.js" defer=""></script><script src="/dashboard/_next/static/chunks/470-4d1a5dbe58a8a2b9.js" defer=""></script><script src="/dashboard/_next/static/chunks/901-b424d293275e1fd7.js" defer=""></script><script src="/dashboard/_next/static/chunks/969-20d54a9d998dc102.js" defer=""></script><script src="/dashboard/_next/static/chunks/856-0776dc6ed6000c39.js" defer=""></script><script src="/dashboard/_next/static/chunks/973-c807fc34f09c7df3.js" defer=""></script><script src="/dashboard/_next/static/chunks/938-ab185187a63f9cdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/843-6fcc4bf91ac45b39.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-c8c2191328532b7d.js" defer=""></script><script src="/dashboard/_next/static/
|
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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-d6128fa9e7cae6e6.js" defer=""></script><script src="/dashboard/_next/static/chunks/760-a89d354797ce7af5.js" defer=""></script><script src="/dashboard/_next/static/chunks/799-3625946b2ec2eb30.js" defer=""></script><script src="/dashboard/_next/static/chunks/804-4c9fc53aa74bc191.js" defer=""></script><script src="/dashboard/_next/static/chunks/664-047bc03493fda379.js" defer=""></script><script src="/dashboard/_next/static/chunks/798-c0525dc3f21e488d.js" defer=""></script><script src="/dashboard/_next/static/chunks/947-6620842ef80ae879.js" defer=""></script><script src="/dashboard/_next/static/chunks/470-4d1a5dbe58a8a2b9.js" defer=""></script><script src="/dashboard/_next/static/chunks/901-b424d293275e1fd7.js" defer=""></script><script src="/dashboard/_next/static/chunks/969-20d54a9d998dc102.js" defer=""></script><script src="/dashboard/_next/static/chunks/856-0776dc6ed6000c39.js" defer=""></script><script src="/dashboard/_next/static/chunks/973-c807fc34f09c7df3.js" defer=""></script><script src="/dashboard/_next/static/chunks/938-ab185187a63f9cdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/843-6fcc4bf91ac45b39.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces/%5Bname%5D-c8c2191328532b7d.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces/[name]","query":{},"buildId":"G3DXdMFu2Jzd-Dody9iq1","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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces-82e6601baa5dd280.js" defer=""></script><script src="/dashboard/_next/static/
|
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/5d71bfc09f184bab.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/5d71bfc09f184bab.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-208a9812ab4f61c9.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-87d061ee6ed71b28.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-e0e2335212e72357.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-7bbd9d39d6f9a98a.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/workspaces-82e6601baa5dd280.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/G3DXdMFu2Jzd-Dody9iq1/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/workspaces","query":{},"buildId":"G3DXdMFu2Jzd-Dody9iq1","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/global_user_state.py
CHANGED
@@ -45,6 +45,7 @@ if typing.TYPE_CHECKING:
|
|
45
45
|
logger = sky_logging.init_logger(__name__)
|
46
46
|
|
47
47
|
_ENABLED_CLOUDS_KEY_PREFIX = 'enabled_clouds_'
|
48
|
+
_ALLOWED_CLOUDS_KEY_PREFIX = 'allowed_clouds_'
|
48
49
|
|
49
50
|
_SQLALCHEMY_ENGINE: Optional[sqlalchemy.engine.Engine] = None
|
50
51
|
_DB_INIT_LOCK = threading.Lock()
|
@@ -1087,6 +1088,43 @@ def _get_enabled_clouds_key(cloud_capability: 'cloud.CloudCapability',
|
|
1087
1088
|
return _ENABLED_CLOUDS_KEY_PREFIX + workspace + '_' + cloud_capability.value
|
1088
1089
|
|
1089
1090
|
|
1091
|
+
@_init_db
|
1092
|
+
def get_allowed_clouds(workspace: str) -> List[str]:
|
1093
|
+
assert _SQLALCHEMY_ENGINE is not None
|
1094
|
+
with orm.Session(_SQLALCHEMY_ENGINE) as session:
|
1095
|
+
row = session.query(config_table).filter_by(
|
1096
|
+
key=_get_allowed_clouds_key(workspace)).first()
|
1097
|
+
if row:
|
1098
|
+
return json.loads(row.value)
|
1099
|
+
return []
|
1100
|
+
|
1101
|
+
|
1102
|
+
@_init_db
|
1103
|
+
def set_allowed_clouds(allowed_clouds: List[str], workspace: str) -> None:
|
1104
|
+
assert _SQLALCHEMY_ENGINE is not None
|
1105
|
+
with orm.Session(_SQLALCHEMY_ENGINE) as session:
|
1106
|
+
if (_SQLALCHEMY_ENGINE.dialect.name ==
|
1107
|
+
db_utils.SQLAlchemyDialect.SQLITE.value):
|
1108
|
+
insert_func = sqlite.insert
|
1109
|
+
elif (_SQLALCHEMY_ENGINE.dialect.name ==
|
1110
|
+
db_utils.SQLAlchemyDialect.POSTGRESQL.value):
|
1111
|
+
insert_func = postgresql.insert
|
1112
|
+
else:
|
1113
|
+
raise ValueError('Unsupported database dialect')
|
1114
|
+
insert_stmnt = insert_func(config_table).values(
|
1115
|
+
key=_get_allowed_clouds_key(workspace),
|
1116
|
+
value=json.dumps(allowed_clouds))
|
1117
|
+
do_update_stmt = insert_stmnt.on_conflict_do_update(
|
1118
|
+
index_elements=[config_table.c.key],
|
1119
|
+
set_={config_table.c.value: json.dumps(allowed_clouds)})
|
1120
|
+
session.execute(do_update_stmt)
|
1121
|
+
session.commit()
|
1122
|
+
|
1123
|
+
|
1124
|
+
def _get_allowed_clouds_key(workspace: str) -> str:
|
1125
|
+
return _ALLOWED_CLOUDS_KEY_PREFIX + workspace
|
1126
|
+
|
1127
|
+
|
1090
1128
|
@_init_db
|
1091
1129
|
def add_or_update_storage(storage_name: str,
|
1092
1130
|
storage_handle: 'Storage.StorageMetadata',
|
sky/jobs/server/core.py
CHANGED
@@ -1,9 +1,6 @@
|
|
1
1
|
"""SDK functions for managed jobs."""
|
2
2
|
import os
|
3
|
-
import signal
|
4
|
-
import subprocess
|
5
3
|
import tempfile
|
6
|
-
import time
|
7
4
|
import typing
|
8
5
|
from typing import Any, Dict, List, Optional, Tuple, Union
|
9
6
|
import uuid
|
@@ -213,8 +210,6 @@ def launch(
|
|
213
210
|
'remote_env_file_path': remote_env_file_path,
|
214
211
|
'modified_catalogs':
|
215
212
|
service_catalog_common.get_modified_catalog_file_mounts(),
|
216
|
-
'dashboard_setup_cmd': managed_job_constants.DASHBOARD_SETUP_CMD,
|
217
|
-
'dashboard_user_id': common.SERVER_ID,
|
218
213
|
'priority': priority,
|
219
214
|
**controller_utils.shared_controller_vars_to_fill(
|
220
215
|
controller,
|
@@ -368,20 +363,7 @@ def _maybe_restart_controller(
|
|
368
363
|
skylet_constants.SKYPILOT_DEFAULT_WORKSPACE):
|
369
364
|
handle = core.start(
|
370
365
|
cluster_name=jobs_controller_type.value.cluster_name)
|
371
|
-
|
372
|
-
# We should not directly use execution.launch() and have the dashboard cmd
|
373
|
-
# in the task setup because since we are using detached_setup, it will
|
374
|
-
# become a job on controller which messes up the job IDs (we assume the
|
375
|
-
# job ID in controller's job queue is consistent with managed job IDs).
|
376
|
-
with rich_utils.safe_status(
|
377
|
-
ux_utils.spinner_message('Starting dashboard...')):
|
378
|
-
runner = handle.get_command_runners()[0]
|
379
|
-
runner.run(
|
380
|
-
f'export '
|
381
|
-
f'{skylet_constants.USER_ID_ENV_VAR}={common.SERVER_ID!r}; '
|
382
|
-
f'{managed_job_constants.DASHBOARD_SETUP_CMD}',
|
383
|
-
stream_logs=True,
|
384
|
-
)
|
366
|
+
|
385
367
|
controller_status = status_lib.ClusterStatus.UP
|
386
368
|
rich_utils.force_update_status(ux_utils.spinner_message(spinner_message))
|
387
369
|
|
@@ -598,55 +580,6 @@ def tail_logs(name: Optional[str],
|
|
598
580
|
tail=tail)
|
599
581
|
|
600
582
|
|
601
|
-
def start_dashboard_forwarding(refresh: bool = False) -> Tuple[int, int]:
|
602
|
-
"""Opens a dashboard for managed jobs (needs controller to be UP)."""
|
603
|
-
# TODO(SKY-1212): ideally, the controller/dashboard server should expose the
|
604
|
-
# API perhaps via REST. Then here we would (1) not have to use SSH to try to
|
605
|
-
# see if the controller is UP first, which is slow; (2) not have to run SSH
|
606
|
-
# port forwarding first (we'd just launch a local dashboard which would make
|
607
|
-
# REST API calls to the controller dashboard server).
|
608
|
-
logger.info('Starting dashboard')
|
609
|
-
hint = ('Dashboard is not available if jobs controller is not up. Run '
|
610
|
-
'a managed job first or run: sky jobs queue --refresh')
|
611
|
-
handle = _maybe_restart_controller(
|
612
|
-
refresh=refresh,
|
613
|
-
stopped_message=hint,
|
614
|
-
spinner_message='Checking jobs controller')
|
615
|
-
|
616
|
-
# SSH forward a free local port to remote's dashboard port.
|
617
|
-
remote_port = skylet_constants.SPOT_DASHBOARD_REMOTE_PORT
|
618
|
-
free_port = common_utils.find_free_port(remote_port)
|
619
|
-
runner = handle.get_command_runners()[0]
|
620
|
-
port_forward_command = ' '.join(
|
621
|
-
runner.port_forward_command(port_forward=[(free_port, remote_port)],
|
622
|
-
connect_timeout=1))
|
623
|
-
port_forward_command = (
|
624
|
-
f'{port_forward_command} '
|
625
|
-
f'> ~/sky_logs/api_server/dashboard-{common_utils.get_user_hash()}.log '
|
626
|
-
'2>&1')
|
627
|
-
logger.info(f'Forwarding port: {colorama.Style.DIM}{port_forward_command}'
|
628
|
-
f'{colorama.Style.RESET_ALL}')
|
629
|
-
|
630
|
-
ssh_process = subprocess.Popen(port_forward_command,
|
631
|
-
shell=True,
|
632
|
-
start_new_session=True)
|
633
|
-
time.sleep(3) # Added delay for ssh_command to initialize.
|
634
|
-
logger.info(f'{colorama.Fore.GREEN}Dashboard is now available at: '
|
635
|
-
f'http://127.0.0.1:{free_port}{colorama.Style.RESET_ALL}')
|
636
|
-
|
637
|
-
return free_port, ssh_process.pid
|
638
|
-
|
639
|
-
|
640
|
-
def stop_dashboard_forwarding(pid: int) -> None:
|
641
|
-
# Exit the ssh command when the context manager is closed.
|
642
|
-
try:
|
643
|
-
os.killpg(os.getpgid(pid), signal.SIGTERM)
|
644
|
-
except ProcessLookupError:
|
645
|
-
# This happens if jobs controller is auto-stopped.
|
646
|
-
pass
|
647
|
-
logger.info('Forwarding port closed. Exiting.')
|
648
|
-
|
649
|
-
|
650
583
|
@usage_lib.entrypoint
|
651
584
|
def download_logs(
|
652
585
|
name: Optional[str],
|
@@ -29,29 +29,6 @@ setup: |
|
|
29
29
|
grep -q 'export SKYPILOT_DEV=' ~/.bashrc || echo 'export SKYPILOT_DEV=1' >> ~/.bashrc
|
30
30
|
grep -q 'alias sky-env=' ~/.bashrc || echo 'alias sky-env="{{ sky_activate_python_env }}"' >> ~/.bashrc
|
31
31
|
{% endif %}
|
32
|
-
|
33
|
-
# Create systemd service file
|
34
|
-
mkdir -p ~/.config/systemd/user/
|
35
|
-
|
36
|
-
# Create systemd user service file
|
37
|
-
cat << EOF > ~/.config/systemd/user/skypilot-dashboard.service
|
38
|
-
[Unit]
|
39
|
-
Description=SkyPilot Jobs Dashboard
|
40
|
-
After=network.target
|
41
|
-
|
42
|
-
[Service]
|
43
|
-
Environment="SKYPILOT_USER_ID={{ dashboard_user_id }}"
|
44
|
-
Restart=always
|
45
|
-
StandardOutput=append:/home/$USER/.sky/job-dashboard.log
|
46
|
-
StandardError=append:/home/$USER/.sky/job-dashboard.log
|
47
|
-
ExecStart={{ sky_python_cmd }} -m sky.jobs.dashboard.dashboard
|
48
|
-
|
49
|
-
[Install]
|
50
|
-
WantedBy=default.target
|
51
|
-
EOF
|
52
|
-
|
53
|
-
export SKYPILOT_USER_ID="{{ dashboard_user_id }}"
|
54
|
-
{{ dashboard_setup_cmd }}
|
55
32
|
|
56
33
|
run: |
|
57
34
|
{{ sky_activate_python_env }}
|
sky/utils/controller_utils.py
CHANGED
@@ -285,6 +285,16 @@ def _get_cloud_dependencies_installation_commands(
|
|
285
285
|
commands.append(
|
286
286
|
'(command -v gke-gcloud-auth-plugin &>/dev/null || '
|
287
287
|
'(gcloud components install gke-gcloud-auth-plugin --quiet &>/dev/null))') # pylint: disable=line-too-long
|
288
|
+
elif isinstance(cloud, clouds.Nebius):
|
289
|
+
step_prefix = prefix_str.replace('<step>', str(len(commands) + 1))
|
290
|
+
commands.append(
|
291
|
+
f'echo -en "\\r{step_prefix}Nebius{empty_str}" && '
|
292
|
+
'curl -sSL https://storage.eu-north1.nebius.cloud/cli/install.sh ' # pylint: disable=line-too-long
|
293
|
+
'| sudo NEBIUS_INSTALL_FOLDER=/usr/local/bin bash &> /dev/null && '
|
294
|
+
'nebius profile create --profile sky '
|
295
|
+
'--endpoint api.nebius.cloud '
|
296
|
+
'--service-account-file $HOME/.nebius/credentials.json '
|
297
|
+
'&> /dev/null || echo "Unable to create Nebius profile."')
|
288
298
|
elif isinstance(cloud, clouds.Kubernetes):
|
289
299
|
step_prefix = prefix_str.replace('<step>', str(len(commands) + 1))
|
290
300
|
commands.append(
|