skypilot-nightly 1.0.0.dev20251016__py3-none-any.whl → 1.0.0.dev20251017__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/authentication.py +17 -157
- sky/backends/backend_utils.py +6 -5
- sky/catalog/kubernetes_catalog.py +5 -3
- sky/client/cli/command.py +0 -1
- sky/dashboard/out/404.html +1 -1
- sky/dashboard/out/_next/static/chunks/{webpack-66f23594d38c7f16.js → webpack-3c431f6c9086e487.js} +1 -1
- sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
- sky/dashboard/out/clusters/[cluster].html +1 -1
- sky/dashboard/out/clusters.html +1 -1
- sky/dashboard/out/config.html +1 -1
- sky/dashboard/out/index.html +1 -1
- sky/dashboard/out/infra/[context].html +1 -1
- sky/dashboard/out/infra.html +1 -1
- sky/dashboard/out/jobs/[job].html +1 -1
- sky/dashboard/out/jobs/pools/[pool].html +1 -1
- sky/dashboard/out/jobs.html +1 -1
- sky/dashboard/out/users.html +1 -1
- sky/dashboard/out/volumes.html +1 -1
- sky/dashboard/out/workspace/new.html +1 -1
- sky/dashboard/out/workspaces/[name].html +1 -1
- sky/dashboard/out/workspaces.html +1 -1
- sky/provision/fluidstack/instance.py +2 -2
- sky/provision/seeweb/instance.py +3 -3
- sky/serve/service.py +2 -2
- sky/server/requests/preconditions.py +2 -2
- sky/server/requests/requests.py +32 -24
- sky/server/server.py +2 -4
- sky/server/stream_utils.py +10 -3
- sky/setup_files/dependencies.py +19 -8
- sky/utils/auth_utils.py +153 -0
- sky/utils/command_runner.py +3 -0
- sky/utils/locks.py +5 -2
- {skypilot_nightly-1.0.0.dev20251016.dist-info → skypilot_nightly-1.0.0.dev20251017.dist-info}/METADATA +281 -52
- {skypilot_nightly-1.0.0.dev20251016.dist-info → skypilot_nightly-1.0.0.dev20251017.dist-info}/RECORD +41 -40
- /sky/dashboard/out/_next/static/{pbgtEUoCUdmJyLHjgln5A → 3xvBA5BSGbiQ87tVmfbpY}/_buildManifest.js +0 -0
- /sky/dashboard/out/_next/static/{pbgtEUoCUdmJyLHjgln5A → 3xvBA5BSGbiQ87tVmfbpY}/_ssgManifest.js +0 -0
- {skypilot_nightly-1.0.0.dev20251016.dist-info → skypilot_nightly-1.0.0.dev20251017.dist-info}/WHEEL +0 -0
- {skypilot_nightly-1.0.0.dev20251016.dist-info → skypilot_nightly-1.0.0.dev20251017.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20251016.dist-info → skypilot_nightly-1.0.0.dev20251017.dist-info}/licenses/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20251016.dist-info → skypilot_nightly-1.0.0.dev20251017.dist-info}/top_level.txt +0 -0
sky/__init__.py
CHANGED
|
@@ -7,7 +7,7 @@ import urllib.request
|
|
|
7
7
|
from sky.utils import directory_utils
|
|
8
8
|
|
|
9
9
|
# Replaced with the current commit when building the wheels.
|
|
10
|
-
_SKYPILOT_COMMIT_SHA = '
|
|
10
|
+
_SKYPILOT_COMMIT_SHA = '33025aa87beeef9a94d443c5129ad2fec3116405'
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
def _get_git_commit():
|
|
@@ -37,7 +37,7 @@ def _get_git_commit():
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
__commit__ = _get_git_commit()
|
|
40
|
-
__version__ = '1.0.0.
|
|
40
|
+
__version__ = '1.0.0.dev20251017'
|
|
41
41
|
__root_dir__ = directory_utils.get_sky_dir()
|
|
42
42
|
|
|
43
43
|
|
sky/authentication.py
CHANGED
|
@@ -19,21 +19,18 @@ controller. (Lambda cloud is an exception, due to the limitation of the cloud
|
|
|
19
19
|
provider. See the comments in setup_lambda_authentication)
|
|
20
20
|
"""
|
|
21
21
|
import copy
|
|
22
|
-
import functools
|
|
23
22
|
import os
|
|
24
23
|
import re
|
|
25
24
|
import socket
|
|
26
25
|
import subprocess
|
|
27
26
|
import sys
|
|
28
|
-
from typing import Any, Dict
|
|
27
|
+
from typing import Any, Dict
|
|
29
28
|
import uuid
|
|
30
29
|
|
|
31
30
|
import colorama
|
|
32
|
-
import filelock
|
|
33
31
|
|
|
34
32
|
from sky import clouds
|
|
35
33
|
from sky import exceptions
|
|
36
|
-
from sky import global_user_state
|
|
37
34
|
from sky import sky_logging
|
|
38
35
|
from sky.adaptors import gcp
|
|
39
36
|
from sky.adaptors import ibm
|
|
@@ -45,6 +42,7 @@ from sky.provision.fluidstack import fluidstack_utils
|
|
|
45
42
|
from sky.provision.kubernetes import utils as kubernetes_utils
|
|
46
43
|
from sky.provision.lambda_cloud import lambda_utils
|
|
47
44
|
from sky.provision.primeintellect import utils as primeintellect_utils
|
|
45
|
+
from sky.utils import auth_utils
|
|
48
46
|
from sky.utils import common_utils
|
|
49
47
|
from sky.utils import subprocess_utils
|
|
50
48
|
from sky.utils import ux_utils
|
|
@@ -57,147 +55,9 @@ logger = sky_logging.init_logger(__name__)
|
|
|
57
55
|
# using Cloud Client Libraries for Python, where possible, for new code
|
|
58
56
|
# development.
|
|
59
57
|
|
|
60
|
-
MAX_TRIALS = 64
|
|
61
|
-
# TODO(zhwu): Support user specified key pair.
|
|
62
|
-
# We intentionally not have the ssh key pair to be stored in
|
|
63
|
-
# ~/.sky/api_server/clients, i.e. sky.server.common.API_SERVER_CLIENT_DIR,
|
|
64
|
-
# because ssh key pair need to persist across API server restarts, while
|
|
65
|
-
# the former dir is empheral.
|
|
66
|
-
_SSH_KEY_PATH_PREFIX = '~/.sky/clients/{user_hash}/ssh'
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
def get_ssh_key_and_lock_path(user_hash: str) -> Tuple[str, str, str]:
|
|
70
|
-
user_ssh_key_prefix = _SSH_KEY_PATH_PREFIX.format(user_hash=user_hash)
|
|
71
|
-
|
|
72
|
-
os.makedirs(os.path.expanduser(user_ssh_key_prefix),
|
|
73
|
-
exist_ok=True,
|
|
74
|
-
mode=0o700)
|
|
75
|
-
private_key_path = os.path.join(user_ssh_key_prefix, 'sky-key')
|
|
76
|
-
public_key_path = os.path.join(user_ssh_key_prefix, 'sky-key.pub')
|
|
77
|
-
lock_path = os.path.join(user_ssh_key_prefix, '.__internal-sky-key.lock')
|
|
78
|
-
return private_key_path, public_key_path, lock_path
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
def _generate_rsa_key_pair() -> Tuple[str, str]:
|
|
82
|
-
# Keep the import of the cryptography local to avoid expensive
|
|
83
|
-
# third-party imports when not needed.
|
|
84
|
-
# pylint: disable=import-outside-toplevel
|
|
85
|
-
from cryptography.hazmat.backends import default_backend
|
|
86
|
-
from cryptography.hazmat.primitives import serialization
|
|
87
|
-
from cryptography.hazmat.primitives.asymmetric import rsa
|
|
88
|
-
|
|
89
|
-
key = rsa.generate_private_key(backend=default_backend(),
|
|
90
|
-
public_exponent=65537,
|
|
91
|
-
key_size=2048)
|
|
92
|
-
|
|
93
|
-
private_key = key.private_bytes(
|
|
94
|
-
encoding=serialization.Encoding.PEM,
|
|
95
|
-
format=serialization.PrivateFormat.TraditionalOpenSSL,
|
|
96
|
-
encryption_algorithm=serialization.NoEncryption()).decode(
|
|
97
|
-
'utf-8').strip()
|
|
98
|
-
|
|
99
|
-
public_key = key.public_key().public_bytes(
|
|
100
|
-
serialization.Encoding.OpenSSH,
|
|
101
|
-
serialization.PublicFormat.OpenSSH).decode('utf-8').strip()
|
|
102
|
-
|
|
103
|
-
return public_key, private_key
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
def _save_key_pair(private_key_path: str, public_key_path: str,
|
|
107
|
-
private_key: str, public_key: str) -> None:
|
|
108
|
-
key_dir = os.path.dirname(private_key_path)
|
|
109
|
-
os.makedirs(key_dir, exist_ok=True, mode=0o700)
|
|
110
|
-
|
|
111
|
-
with open(
|
|
112
|
-
private_key_path,
|
|
113
|
-
'w',
|
|
114
|
-
encoding='utf-8',
|
|
115
|
-
opener=functools.partial(os.open, mode=0o600),
|
|
116
|
-
) as f:
|
|
117
|
-
f.write(private_key)
|
|
118
|
-
|
|
119
|
-
with open(public_key_path,
|
|
120
|
-
'w',
|
|
121
|
-
encoding='utf-8',
|
|
122
|
-
opener=functools.partial(os.open, mode=0o644)) as f:
|
|
123
|
-
f.write(public_key)
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
def get_or_generate_keys() -> Tuple[str, str]:
|
|
127
|
-
"""Returns the absolute private and public key paths."""
|
|
128
|
-
user_hash = common_utils.get_user_hash()
|
|
129
|
-
private_key_path, public_key_path, lock_path = get_ssh_key_and_lock_path(
|
|
130
|
-
user_hash)
|
|
131
|
-
private_key_path = os.path.expanduser(private_key_path)
|
|
132
|
-
public_key_path = os.path.expanduser(public_key_path)
|
|
133
|
-
lock_path = os.path.expanduser(lock_path)
|
|
134
|
-
|
|
135
|
-
lock_dir = os.path.dirname(lock_path)
|
|
136
|
-
# We should have the folder ~/.sky/generated/ssh to have 0o700 permission,
|
|
137
|
-
# as the ssh configs will be written to this folder as well in
|
|
138
|
-
# backend_utils.SSHConfigHelper
|
|
139
|
-
os.makedirs(lock_dir, exist_ok=True, mode=0o700)
|
|
140
|
-
with filelock.FileLock(lock_path, timeout=10):
|
|
141
|
-
if not os.path.exists(private_key_path):
|
|
142
|
-
ssh_public_key, ssh_private_key, exists = (
|
|
143
|
-
global_user_state.get_ssh_keys(user_hash))
|
|
144
|
-
if not exists:
|
|
145
|
-
ssh_public_key, ssh_private_key = _generate_rsa_key_pair()
|
|
146
|
-
global_user_state.set_ssh_keys(user_hash, ssh_public_key,
|
|
147
|
-
ssh_private_key)
|
|
148
|
-
_save_key_pair(private_key_path, public_key_path, ssh_private_key,
|
|
149
|
-
ssh_public_key)
|
|
150
|
-
assert os.path.exists(public_key_path), (
|
|
151
|
-
'Private key found, but associated public key '
|
|
152
|
-
f'{public_key_path} does not exist.')
|
|
153
|
-
return private_key_path, public_key_path
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
def create_ssh_key_files_from_db(private_key_path: str) -> bool:
|
|
157
|
-
"""Creates the ssh key files from the database.
|
|
158
|
-
|
|
159
|
-
Returns:
|
|
160
|
-
True if the ssh key files are created successfully, False otherwise.
|
|
161
|
-
"""
|
|
162
|
-
# Assume private key path is in the format of
|
|
163
|
-
# ~/.sky/clients/<user_hash>/ssh/sky-key
|
|
164
|
-
separated_path = os.path.normpath(private_key_path).split(os.path.sep)
|
|
165
|
-
assert separated_path[-1] == 'sky-key'
|
|
166
|
-
assert separated_path[-2] == 'ssh'
|
|
167
|
-
user_hash = separated_path[-3]
|
|
168
|
-
|
|
169
|
-
private_key_path_generated, public_key_path, lock_path = (
|
|
170
|
-
get_ssh_key_and_lock_path(user_hash))
|
|
171
|
-
assert private_key_path == os.path.expanduser(private_key_path_generated), (
|
|
172
|
-
f'Private key path {private_key_path} does not '
|
|
173
|
-
'match the generated path '
|
|
174
|
-
f'{os.path.expanduser(private_key_path_generated)}')
|
|
175
|
-
private_key_path = os.path.expanduser(private_key_path)
|
|
176
|
-
public_key_path = os.path.expanduser(public_key_path)
|
|
177
|
-
lock_path = os.path.expanduser(lock_path)
|
|
178
|
-
|
|
179
|
-
lock_dir = os.path.dirname(lock_path)
|
|
180
|
-
# We should have the folder ~/.sky/generated/ssh to have 0o700 permission,
|
|
181
|
-
# as the ssh configs will be written to this folder as well in
|
|
182
|
-
# backend_utils.SSHConfigHelper
|
|
183
|
-
os.makedirs(lock_dir, exist_ok=True, mode=0o700)
|
|
184
|
-
with filelock.FileLock(lock_path, timeout=10):
|
|
185
|
-
if not os.path.exists(private_key_path):
|
|
186
|
-
ssh_public_key, ssh_private_key, exists = (
|
|
187
|
-
global_user_state.get_ssh_keys(user_hash))
|
|
188
|
-
if not exists:
|
|
189
|
-
logger.debug(f'SSH keys not found for user {user_hash}')
|
|
190
|
-
return False
|
|
191
|
-
_save_key_pair(private_key_path, public_key_path, ssh_private_key,
|
|
192
|
-
ssh_public_key)
|
|
193
|
-
assert os.path.exists(public_key_path), (
|
|
194
|
-
'Private key found, but associated public key '
|
|
195
|
-
f'{public_key_path} does not exist.')
|
|
196
|
-
return True
|
|
197
|
-
|
|
198
58
|
|
|
199
59
|
def configure_ssh_info(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
200
|
-
_, public_key_path = get_or_generate_keys()
|
|
60
|
+
_, public_key_path = auth_utils.get_or_generate_keys()
|
|
201
61
|
with open(public_key_path, 'r', encoding='utf-8') as f:
|
|
202
62
|
public_key = f.read().strip()
|
|
203
63
|
config_str = yaml_utils.dump_yaml_str(config)
|
|
@@ -235,7 +95,7 @@ def parse_gcp_project_oslogin(project):
|
|
|
235
95
|
# Retry for the GCP as sometimes there will be connection reset by peer error.
|
|
236
96
|
@common_utils.retry
|
|
237
97
|
def setup_gcp_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
238
|
-
_, public_key_path = get_or_generate_keys()
|
|
98
|
+
_, public_key_path = auth_utils.get_or_generate_keys()
|
|
239
99
|
config = copy.deepcopy(config)
|
|
240
100
|
|
|
241
101
|
project_id = config['provider']['project_id']
|
|
@@ -360,11 +220,11 @@ def setup_gcp_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
360
220
|
|
|
361
221
|
def setup_lambda_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
362
222
|
|
|
363
|
-
get_or_generate_keys()
|
|
223
|
+
auth_utils.get_or_generate_keys()
|
|
364
224
|
|
|
365
225
|
# Ensure ssh key is registered with Lambda Cloud
|
|
366
226
|
lambda_client = lambda_utils.LambdaCloudClient()
|
|
367
|
-
_, public_key_path = get_or_generate_keys()
|
|
227
|
+
_, public_key_path = auth_utils.get_or_generate_keys()
|
|
368
228
|
with open(public_key_path, 'r', encoding='utf-8') as f:
|
|
369
229
|
public_key = f.read().strip()
|
|
370
230
|
prefix = f'sky-key-{common_utils.get_user_hash()}'
|
|
@@ -381,7 +241,7 @@ def setup_ibm_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
381
241
|
and updates config file.
|
|
382
242
|
keys default location: '~/.ssh/sky-key' and '~/.ssh/sky-key.pub'
|
|
383
243
|
"""
|
|
384
|
-
private_key_path, _ = get_or_generate_keys()
|
|
244
|
+
private_key_path, _ = auth_utils.get_or_generate_keys()
|
|
385
245
|
|
|
386
246
|
def _get_unique_key_name():
|
|
387
247
|
suffix_len = 10
|
|
@@ -390,7 +250,7 @@ def setup_ibm_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
390
250
|
client = ibm.client(region=config['provider']['region'])
|
|
391
251
|
resource_group_id = config['provider']['resource_group_id']
|
|
392
252
|
|
|
393
|
-
_, public_key_path = get_or_generate_keys()
|
|
253
|
+
_, public_key_path = auth_utils.get_or_generate_keys()
|
|
394
254
|
with open(os.path.abspath(os.path.expanduser(public_key_path)),
|
|
395
255
|
'r',
|
|
396
256
|
encoding='utf-8') as file:
|
|
@@ -432,7 +292,7 @@ def setup_ibm_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
432
292
|
def setup_kubernetes_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
433
293
|
context = kubernetes_utils.get_context_from_config(config['provider'])
|
|
434
294
|
namespace = kubernetes_utils.get_namespace_from_config(config['provider'])
|
|
435
|
-
private_key_path, _ = get_or_generate_keys()
|
|
295
|
+
private_key_path, _ = auth_utils.get_or_generate_keys()
|
|
436
296
|
# Using `kubectl port-forward` creates a direct tunnel to the pod and
|
|
437
297
|
# does not require a ssh jump pod.
|
|
438
298
|
kubernetes_utils.check_port_forward_mode_dependencies()
|
|
@@ -463,7 +323,7 @@ def setup_runpod_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
463
323
|
- Generates a new SSH key pair if one does not exist.
|
|
464
324
|
- Adds the public SSH key to the user's RunPod account.
|
|
465
325
|
"""
|
|
466
|
-
_, public_key_path = get_or_generate_keys()
|
|
326
|
+
_, public_key_path = auth_utils.get_or_generate_keys()
|
|
467
327
|
with open(public_key_path, 'r', encoding='UTF-8') as pub_key_file:
|
|
468
328
|
public_key = pub_key_file.read().strip()
|
|
469
329
|
runpod.runpod.cli.groups.ssh.functions.add_ssh_key(public_key)
|
|
@@ -476,7 +336,7 @@ def setup_vast_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
476
336
|
- Generates a new SSH key pair if one does not exist.
|
|
477
337
|
- Adds the public SSH key to the user's Vast account.
|
|
478
338
|
"""
|
|
479
|
-
_, public_key_path = get_or_generate_keys()
|
|
339
|
+
_, public_key_path = auth_utils.get_or_generate_keys()
|
|
480
340
|
with open(public_key_path, 'r', encoding='UTF-8') as pub_key_file:
|
|
481
341
|
public_key = pub_key_file.read().strip()
|
|
482
342
|
current_key_list = vast.vast().show_ssh_keys() # pylint: disable=assignment-from-no-return
|
|
@@ -490,7 +350,7 @@ def setup_vast_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
490
350
|
|
|
491
351
|
def setup_fluidstack_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
492
352
|
|
|
493
|
-
_, public_key_path = get_or_generate_keys()
|
|
353
|
+
_, public_key_path = auth_utils.get_or_generate_keys()
|
|
494
354
|
|
|
495
355
|
client = fluidstack_utils.FluidstackClient()
|
|
496
356
|
public_key = None
|
|
@@ -503,7 +363,7 @@ def setup_fluidstack_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
503
363
|
|
|
504
364
|
def setup_hyperbolic_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
505
365
|
"""Sets up SSH authentication for Hyperbolic."""
|
|
506
|
-
_, public_key_path = get_or_generate_keys()
|
|
366
|
+
_, public_key_path = auth_utils.get_or_generate_keys()
|
|
507
367
|
with open(public_key_path, 'r', encoding='utf-8') as f:
|
|
508
368
|
public_key = f.read().strip()
|
|
509
369
|
|
|
@@ -528,7 +388,7 @@ def setup_shadeform_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
|
528
388
|
If no official SDK exists, this function would need to use direct API calls.
|
|
529
389
|
"""
|
|
530
390
|
|
|
531
|
-
_, public_key_path = get_or_generate_keys()
|
|
391
|
+
_, public_key_path = auth_utils.get_or_generate_keys()
|
|
532
392
|
ssh_key_id = None
|
|
533
393
|
|
|
534
394
|
with open(public_key_path, 'r', encoding='utf-8') as f:
|
|
@@ -568,7 +428,7 @@ def setup_primeintellect_authentication(
|
|
|
568
428
|
- Adds the public SSH key to the user's Prime Intellect account.
|
|
569
429
|
"""
|
|
570
430
|
# Ensure local SSH keypair exists and fetch public key content
|
|
571
|
-
_, public_key_path = get_or_generate_keys()
|
|
431
|
+
_, public_key_path = auth_utils.get_or_generate_keys()
|
|
572
432
|
with open(public_key_path, 'r', encoding='utf-8') as f:
|
|
573
433
|
public_key = f.read().strip()
|
|
574
434
|
|
|
@@ -588,10 +448,10 @@ def setup_primeintellect_authentication(
|
|
|
588
448
|
def setup_seeweb_authentication(config: Dict[str, Any]) -> Dict[str, Any]:
|
|
589
449
|
"""Registers the public key with Seeweb and notes the remote name."""
|
|
590
450
|
# 1. local key pair
|
|
591
|
-
get_or_generate_keys()
|
|
451
|
+
auth_utils.get_or_generate_keys()
|
|
592
452
|
|
|
593
453
|
# 2. public key
|
|
594
|
-
_, public_key_path = get_or_generate_keys()
|
|
454
|
+
_, public_key_path = auth_utils.get_or_generate_keys()
|
|
595
455
|
with open(public_key_path, 'r', encoding='utf-8') as f:
|
|
596
456
|
public_key = f.read().strip()
|
|
597
457
|
|
sky/backends/backend_utils.py
CHANGED
|
@@ -48,6 +48,7 @@ from sky.server.requests import requests as requests_lib
|
|
|
48
48
|
from sky.skylet import autostop_lib
|
|
49
49
|
from sky.skylet import constants
|
|
50
50
|
from sky.usage import usage_lib
|
|
51
|
+
from sky.utils import auth_utils
|
|
51
52
|
from sky.utils import cluster_utils
|
|
52
53
|
from sky.utils import command_runner
|
|
53
54
|
from sky.utils import common
|
|
@@ -755,7 +756,7 @@ def write_cluster_config(
|
|
|
755
756
|
assert k not in credentials, f'{k} already in credentials'
|
|
756
757
|
credentials[k] = v
|
|
757
758
|
|
|
758
|
-
private_key_path, _ =
|
|
759
|
+
private_key_path, _ = auth_utils.get_or_generate_keys()
|
|
759
760
|
auth_config = {'ssh_private_key': private_key_path}
|
|
760
761
|
region_name = resources_vars.get('region')
|
|
761
762
|
|
|
@@ -3270,7 +3271,7 @@ def get_clusters(
|
|
|
3270
3271
|
expanded_private_key_path = os.path.expanduser(
|
|
3271
3272
|
ssh_private_key_path)
|
|
3272
3273
|
if not os.path.exists(expanded_private_key_path):
|
|
3273
|
-
success =
|
|
3274
|
+
success = auth_utils.create_ssh_key_files_from_db(
|
|
3274
3275
|
ssh_private_key_path)
|
|
3275
3276
|
if not success:
|
|
3276
3277
|
# If the ssh key files are not found, we do not
|
|
@@ -3280,7 +3281,7 @@ def get_clusters(
|
|
|
3280
3281
|
f'at key path {ssh_private_key_path}')
|
|
3281
3282
|
continue
|
|
3282
3283
|
else:
|
|
3283
|
-
private_key_path, _ =
|
|
3284
|
+
private_key_path, _ = auth_utils.get_or_generate_keys()
|
|
3284
3285
|
expanded_private_key_path = os.path.expanduser(private_key_path)
|
|
3285
3286
|
if expanded_private_key_path in cached_private_keys:
|
|
3286
3287
|
credential['ssh_private_key_content'] = cached_private_keys[
|
|
@@ -3358,8 +3359,8 @@ def get_clusters(
|
|
|
3358
3359
|
requests = requests_lib.get_request_tasks(
|
|
3359
3360
|
req_filter=requests_lib.RequestTaskFilter(
|
|
3360
3361
|
status=[requests_lib.RequestStatus.RUNNING],
|
|
3361
|
-
|
|
3362
|
-
|
|
3362
|
+
include_request_names=['sky.launch'],
|
|
3363
|
+
cluster_names=cluster_names))
|
|
3363
3364
|
cluster_names_with_launch_request = {
|
|
3364
3365
|
request.cluster_name for request in requests
|
|
3365
3366
|
}
|
|
@@ -180,8 +180,8 @@ def _list_accelerators(
|
|
|
180
180
|
break
|
|
181
181
|
|
|
182
182
|
# Only fetch pods if we have accelerator nodes and realtime is requested
|
|
183
|
-
pods = None
|
|
184
183
|
allocated_qty_by_node: Dict[str, int] = collections.defaultdict(int)
|
|
184
|
+
error_on_get_allocated_gpu_qty_by_node = False
|
|
185
185
|
if realtime and has_accelerator_nodes:
|
|
186
186
|
# Get the allocated GPU quantity by each node
|
|
187
187
|
try:
|
|
@@ -194,6 +194,7 @@ def _list_accelerators(
|
|
|
194
194
|
'(forbidden). Please check if your account has '
|
|
195
195
|
'necessary permissions to list pods. Realtime GPU '
|
|
196
196
|
'availability information may be incorrect.')
|
|
197
|
+
error_on_get_allocated_gpu_qty_by_node = True
|
|
197
198
|
else:
|
|
198
199
|
raise
|
|
199
200
|
# Total number of GPUs in the cluster
|
|
@@ -259,8 +260,9 @@ def _list_accelerators(
|
|
|
259
260
|
total_accelerators_capacity[
|
|
260
261
|
accelerator_name] += quantized_count
|
|
261
262
|
|
|
262
|
-
if
|
|
263
|
-
# If we can't get the
|
|
263
|
+
if error_on_get_allocated_gpu_qty_by_node:
|
|
264
|
+
# If we can't get the allocated GPU quantity by each node,
|
|
265
|
+
# we can't get the GPU usage.
|
|
264
266
|
total_accelerators_available[accelerator_name] = -1
|
|
265
267
|
continue
|
|
266
268
|
|
sky/client/cli/command.py
CHANGED
|
@@ -6182,7 +6182,6 @@ def api_cancel(request_ids: Optional[List[str]], all: bool, all_users: bool):
|
|
|
6182
6182
|
type=str)
|
|
6183
6183
|
if user_input != 'cancel all requests':
|
|
6184
6184
|
raise click.Abort()
|
|
6185
|
-
if all:
|
|
6186
6185
|
request_ids = None
|
|
6187
6186
|
cancelled_request_ids = sdk.get(
|
|
6188
6187
|
sdk.api_cancel(request_ids=request_ids, all_users=all_users))
|
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/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3c431f6c9086e487.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_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":"3xvBA5BSGbiQ87tVmfbpY","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/_next/static/chunks/{webpack-66f23594d38c7f16.js → webpack-3c431f6c9086e487.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
!function(){"use strict";var t,e,n,r,c,o,u,i,f,a={},s={};function d(t){var e=s[t];if(void 0!==e)return e.exports;var n=s[t]={exports:{}},r=!0;try{a[t](n,n.exports,d),r=!1}finally{r&&delete s[t]}return n.exports}d.m=a,t=[],d.O=function(e,n,r,c){if(n){c=c||0;for(var o=t.length;o>0&&t[o-1][2]>c;o--)t[o]=t[o-1];t[o]=[n,r,c];return}for(var u=1/0,o=0;o<t.length;o++){for(var n=t[o][0],r=t[o][1],c=t[o][2],i=!0,f=0;f<n.length;f++)u>=c&&Object.keys(d.O).every(function(t){return d.O[t](n[f])})?n.splice(f--,1):(i=!1,c<u&&(u=c));if(i){t.splice(o--,1);var a=r();void 0!==a&&(e=a)}}return e},d.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return d.d(e,{a:e}),e},n=Object.getPrototypeOf?function(t){return Object.getPrototypeOf(t)}:function(t){return t.__proto__},d.t=function(t,r){if(1&r&&(t=this(t)),8&r||"object"==typeof t&&t&&(4&r&&t.__esModule||16&r&&"function"==typeof t.then))return t;var c=Object.create(null);d.r(c);var o={};e=e||[null,n({}),n([]),n(n)];for(var u=2&r&&t;"object"==typeof u&&!~e.indexOf(u);u=n(u))Object.getOwnPropertyNames(u).forEach(function(e){o[e]=function(){return t[e]}});return o.default=function(){return t},d.d(c,o),c},d.d=function(t,e){for(var n in e)d.o(e,n)&&!d.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},d.f={},d.e=function(t){return Promise.all(Object.keys(d.f).reduce(function(e,n){return d.f[n](t,e),e},[]))},d.u=function(t){return 2350===t?"static/chunks/2350.fab69e61bac57b23.js":2369===t?"static/chunks/2369.fc20f0c2c8ed9fe7.js":3937===t?"static/chunks/3937.210053269f121201.js":9025===t?"static/chunks/9025.c12318fb6a1a9093.js":4937===t?"static/chunks/4937.a2baa2df5572a276.js":3294===t?"static/chunks/3294.1fafbf42b3bcebff.js":8640===t?"static/chunks/8640.5b9475a2d18c5416.js":
|
|
1
|
+
!function(){"use strict";var t,e,n,r,c,o,u,i,f,a={},s={};function d(t){var e=s[t];if(void 0!==e)return e.exports;var n=s[t]={exports:{}},r=!0;try{a[t](n,n.exports,d),r=!1}finally{r&&delete s[t]}return n.exports}d.m=a,t=[],d.O=function(e,n,r,c){if(n){c=c||0;for(var o=t.length;o>0&&t[o-1][2]>c;o--)t[o]=t[o-1];t[o]=[n,r,c];return}for(var u=1/0,o=0;o<t.length;o++){for(var n=t[o][0],r=t[o][1],c=t[o][2],i=!0,f=0;f<n.length;f++)u>=c&&Object.keys(d.O).every(function(t){return d.O[t](n[f])})?n.splice(f--,1):(i=!1,c<u&&(u=c));if(i){t.splice(o--,1);var a=r();void 0!==a&&(e=a)}}return e},d.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return d.d(e,{a:e}),e},n=Object.getPrototypeOf?function(t){return Object.getPrototypeOf(t)}:function(t){return t.__proto__},d.t=function(t,r){if(1&r&&(t=this(t)),8&r||"object"==typeof t&&t&&(4&r&&t.__esModule||16&r&&"function"==typeof t.then))return t;var c=Object.create(null);d.r(c);var o={};e=e||[null,n({}),n([]),n(n)];for(var u=2&r&&t;"object"==typeof u&&!~e.indexOf(u);u=n(u))Object.getOwnPropertyNames(u).forEach(function(e){o[e]=function(){return t[e]}});return o.default=function(){return t},d.d(c,o),c},d.d=function(t,e){for(var n in e)d.o(e,n)&&!d.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},d.f={},d.e=function(t){return Promise.all(Object.keys(d.f).reduce(function(e,n){return d.f[n](t,e),e},[]))},d.u=function(t){return 2350===t?"static/chunks/2350.fab69e61bac57b23.js":2369===t?"static/chunks/2369.fc20f0c2c8ed9fe7.js":3937===t?"static/chunks/3937.210053269f121201.js":9025===t?"static/chunks/9025.c12318fb6a1a9093.js":4937===t?"static/chunks/4937.a2baa2df5572a276.js":3294===t?"static/chunks/3294.1fafbf42b3bcebff.js":8640===t?"static/chunks/8640.5b9475a2d18c5416.js":9847===t?"static/chunks/9847.3aaca6bb33455140.js":4725===t?"static/chunks/4725.10f7a9a5d3ea8208.js":2755===t?"static/chunks/2755.97300e1362fe7c98.js":3785===t?"static/chunks/3785.a19328ba41517b8b.js":9360===t?"static/chunks/9360.71e83b2ddc844ec2.js":"static/chunks/"+t+"-"+({616:"3d59f75e2ccf9321",1121:"d0782b9251f0fcd3",1141:"3b40c39626f99c89",1272:"1ef0bf0237faccdb",1871:"49141c317f3a9020",3015:"7e0e8f06bb2f881c",3850:"ff4a9a69d978632b",5739:"d67458fcb1386c92",6130:"2be46d70a38f1e82",6135:"4b4d5e824b7f9d3c",6601:"06114c982db410b6",6856:"5fdc9b851a18acdb",6989:"01359c57e018caa4",6990:"f6818c84ed8f1c86",7359:"c8d04e06886000b3",7411:"b15471acd2cba716",8969:"66237729cdf9749e"})[t]+".js"},d.miniCssF=function(t){},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(t){if("object"==typeof window)return window}}(),d.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r={},c="_N_E:",d.l=function(t,e,n,o){if(r[t]){r[t].push(e);return}if(void 0!==n)for(var u,i,f=document.getElementsByTagName("script"),a=0;a<f.length;a++){var s=f[a];if(s.getAttribute("src")==t||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(t)),r[t]=[e];var b=function(e,n){u.onerror=u.onload=null,clearTimeout(l);var c=r[t];if(delete r[t],u.parentNode&&u.parentNode.removeChild(u),c&&c.forEach(function(t){return t(n)}),e)return e(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(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},d.tt=function(){return void 0===o&&(o={createScriptURL:function(t){return t}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(o=trustedTypes.createPolicy("nextjs#bundler",o))),o},d.tu=function(t){return d.tt().createScriptURL(t)},d.p="/dashboard/_next/",u={2272:0},d.f.j=function(t,e){var n=d.o(u,t)?u[t]:void 0;if(0!==n){if(n)e.push(n[2]);else if(2272!=t){var r=new Promise(function(e,r){n=u[t]=[e,r]});e.push(n[2]=r);var c=d.p+d.u(t),o=Error();d.l(c,function(e){if(d.o(u,t)&&(0!==(n=u[t])&&(u[t]=void 0),n)){var r=e&&("load"===e.type?"missing":e.type),c=e&&e.target&&e.target.src;o.message="Loading chunk "+t+" failed.\n("+r+": "+c+")",o.name="ChunkLoadError",o.type=r,o.request=c,n[1](o)}},"chunk-"+t,t)}else u[t]=0}},d.O.j=function(t){return 0===u[t]},i=function(t,e){var n,r,c=e[0],o=e[1],i=e[2],f=0;if(c.some(function(t){return 0!==u[t]})){for(n in o)d.o(o,n)&&(d.m[n]=o[n]);if(i)var a=i(d)}for(t&&t(e);f<c.length;f++)r=c[f],d.o(u,r)&&u[r]&&u[r][0](),u[r]=0;return d.O(a)},(f=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(i.bind(null,0)),f.push=i.bind(null,f.push.bind(f)),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/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3c431f6c9086e487.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-8f058b0346db2aff.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_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":"3xvBA5BSGbiQ87tVmfbpY","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3c431f6c9086e487.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/7359-c8d04e06886000b3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6212-7bd06f60ba693125.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-f6818c84ed8f1c86.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-d0782b9251f0fcd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-7e0e8f06bb2f881c.js" defer=""></script><script src="/dashboard/_next/static/chunks/6856-5fdc9b851a18acdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/1871-49141c317f3a9020.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-477555ab7c0b13d8.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","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/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3c431f6c9086e487.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-2f61f65487f6d8ff.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","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/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3c431f6c9086e487.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-dfb9bf07b13045f4.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","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/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3c431f6c9086e487.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-444f1804401f04ea.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3c431f6c9086e487.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-553b8b5cb65e100b.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/infra.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3c431f6c9086e487.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-910a22500c50596f.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3c431f6c9086e487.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/6212-7bd06f60ba693125.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-e5c9ce6a24fc0de4.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3c431f6c9086e487.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/6212-7bd06f60ba693125.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-66237729cdf9749e.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/pools/%5Bpool%5D-bc979970c247d8f3.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/pools/[pool]","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/jobs.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3c431f6c9086e487.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs-a35a9dc3c5ccd657.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/users.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-
|
|
1
|
+
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/4614e06482d7309e.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/4614e06482d7309e.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-3c431f6c9086e487.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/users-98d2ed979084162a.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/3xvBA5BSGbiQ87tVmfbpY/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/users","query":{},"buildId":"3xvBA5BSGbiQ87tVmfbpY","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|