skypilot-nightly 1.0.0.dev20250725__py3-none-any.whl → 1.0.0.dev20250728__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/backends/backend_utils.py +117 -56
- sky/backends/cloud_vm_ray_backend.py +1 -1
- sky/clouds/aws.py +1 -1
- sky/clouds/azure.py +1 -1
- sky/clouds/cloud.py +1 -1
- sky/clouds/cudo.py +1 -1
- sky/clouds/do.py +1 -1
- sky/clouds/fluidstack.py +1 -1
- sky/clouds/gcp.py +1 -1
- sky/clouds/hyperbolic.py +1 -1
- sky/clouds/ibm.py +1 -1
- sky/clouds/kubernetes.py +11 -9
- sky/clouds/lambda_cloud.py +1 -1
- sky/clouds/nebius.py +1 -1
- sky/clouds/oci.py +1 -1
- sky/clouds/paperspace.py +1 -1
- sky/clouds/runpod.py +1 -1
- sky/clouds/scp.py +1 -1
- sky/clouds/vast.py +1 -1
- sky/clouds/vsphere.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/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/exceptions.py +1 -0
- sky/jobs/utils.py +5 -0
- sky/provision/kubernetes/utils.py +9 -0
- sky/provision/kubernetes/volume.py +1 -1
- sky/resources.py +1 -1
- sky/skylet/job_lib.py +4 -0
- sky/skylet/log_lib.py +5 -3
- sky/task.py +1 -1
- sky/templates/kubernetes-ray.yml.j2 +6 -0
- sky/utils/schemas.py +1 -1
- sky/utils/volume.py +78 -0
- sky/volumes/__init__.py +13 -0
- sky/volumes/client/sdk.py +19 -2
- sky/volumes/server/server.py +1 -1
- sky/volumes/utils.py +1 -1
- sky/volumes/volume.py +0 -73
- {skypilot_nightly-1.0.0.dev20250725.dist-info → skypilot_nightly-1.0.0.dev20250728.dist-info}/METADATA +13 -2
- {skypilot_nightly-1.0.0.dev20250725.dist-info → skypilot_nightly-1.0.0.dev20250728.dist-info}/RECORD +60 -59
- /sky/dashboard/out/_next/static/{SiA7c33x_DqO42M373Okd → ucBqsWPN0A5D2kXj8-FqQ}/_buildManifest.js +0 -0
- /sky/dashboard/out/_next/static/{SiA7c33x_DqO42M373Okd → ucBqsWPN0A5D2kXj8-FqQ}/_ssgManifest.js +0 -0
- {skypilot_nightly-1.0.0.dev20250725.dist-info → skypilot_nightly-1.0.0.dev20250728.dist-info}/WHEEL +0 -0
- {skypilot_nightly-1.0.0.dev20250725.dist-info → skypilot_nightly-1.0.0.dev20250728.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250725.dist-info → skypilot_nightly-1.0.0.dev20250728.dist-info}/licenses/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250725.dist-info → skypilot_nightly-1.0.0.dev20250728.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 = '37ba12977758874067e082482a70526fbab9185f'
|
|
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.dev20250728'
|
|
39
39
|
__root_dir__ = os.path.dirname(os.path.abspath(__file__))
|
|
40
40
|
|
|
41
41
|
|
sky/backends/backend_utils.py
CHANGED
|
@@ -33,6 +33,7 @@ from sky import sky_logging
|
|
|
33
33
|
from sky import skypilot_config
|
|
34
34
|
from sky.adaptors import common as adaptors_common
|
|
35
35
|
from sky.jobs import utils as managed_job_utils
|
|
36
|
+
from sky.provision import common as provision_common
|
|
36
37
|
from sky.provision import instance_setup
|
|
37
38
|
from sky.provision.kubernetes import utils as kubernetes_utils
|
|
38
39
|
from sky.server.requests import requests as requests_lib
|
|
@@ -68,7 +69,7 @@ if typing.TYPE_CHECKING:
|
|
|
68
69
|
from sky import task as task_lib
|
|
69
70
|
from sky.backends import cloud_vm_ray_backend
|
|
70
71
|
from sky.backends import local_docker_backend
|
|
71
|
-
from sky.
|
|
72
|
+
from sky.utils import volume as volume_lib
|
|
72
73
|
else:
|
|
73
74
|
yaml = adaptors_common.LazyImport('yaml')
|
|
74
75
|
requests = adaptors_common.LazyImport('requests')
|
|
@@ -1812,6 +1813,45 @@ def _query_cluster_status_via_cloud_api(
|
|
|
1812
1813
|
return node_statuses
|
|
1813
1814
|
|
|
1814
1815
|
|
|
1816
|
+
def _query_cluster_info_via_cloud_api(
|
|
1817
|
+
handle: 'cloud_vm_ray_backend.CloudVmRayResourceHandle'
|
|
1818
|
+
) -> provision_common.ClusterInfo:
|
|
1819
|
+
"""Returns the cluster info.
|
|
1820
|
+
|
|
1821
|
+
Raises:
|
|
1822
|
+
exceptions.NotSupportedError: the cloud does not support the new provisioner.
|
|
1823
|
+
exceptions.FetchClusterInfoError: the cluster info cannot be
|
|
1824
|
+
fetched from the cloud provider.
|
|
1825
|
+
"""
|
|
1826
|
+
cloud = handle.launched_resources.cloud
|
|
1827
|
+
assert cloud is not None, handle
|
|
1828
|
+
if cloud.STATUS_VERSION >= clouds.StatusVersion.SKYPILOT:
|
|
1829
|
+
try:
|
|
1830
|
+
cloud_name = repr(cloud)
|
|
1831
|
+
ray_config = global_user_state.get_cluster_yaml_dict(
|
|
1832
|
+
handle.cluster_yaml)
|
|
1833
|
+
provider_config = ray_config['provider']
|
|
1834
|
+
region = provider_config.get('region') or provider_config.get(
|
|
1835
|
+
'location')
|
|
1836
|
+
cluster_info = provision_lib.get_cluster_info(
|
|
1837
|
+
cloud_name, region, handle.cluster_name_on_cloud,
|
|
1838
|
+
provider_config)
|
|
1839
|
+
logger.debug(
|
|
1840
|
+
f'Querying {cloud_name} cluster '
|
|
1841
|
+
f'{handle.cluster_name_on_cloud} '
|
|
1842
|
+
f'head instance:\n{cluster_info.get_head_instance()}\n'
|
|
1843
|
+
f'worker instances:\n{cluster_info.get_worker_instances()}')
|
|
1844
|
+
return cluster_info
|
|
1845
|
+
except Exception as e: # pylint: disable=broad-except
|
|
1846
|
+
with ux_utils.print_exception_no_traceback():
|
|
1847
|
+
raise exceptions.FetchClusterInfoError(
|
|
1848
|
+
reason=exceptions.FetchClusterInfoError.Reason.UNKNOWN
|
|
1849
|
+
) from e
|
|
1850
|
+
else:
|
|
1851
|
+
raise exceptions.NotSupportedError(
|
|
1852
|
+
f'The cloud {cloud} does not support the SkyPilot provisioner.')
|
|
1853
|
+
|
|
1854
|
+
|
|
1815
1855
|
def check_can_clone_disk_and_override_task(
|
|
1816
1856
|
cluster_name: str, target_cluster_name: Optional[str], task: 'task_lib.Task'
|
|
1817
1857
|
) -> Tuple['task_lib.Task', 'cloud_vm_ray_backend.CloudVmRayResourceHandle']:
|
|
@@ -2152,68 +2192,89 @@ def _update_cluster_status(cluster_name: str) -> Optional[Dict[str, Any]]:
|
|
|
2152
2192
|
# * The cluster is partially or completely in the INIT state, which means
|
|
2153
2193
|
# that provisioning was interrupted. This is considered abnormal.
|
|
2154
2194
|
#
|
|
2155
|
-
# An abnormal cluster will transition to INIT and
|
|
2156
|
-
#
|
|
2195
|
+
# An abnormal cluster will transition to INIT, and one of the following will happen:
|
|
2196
|
+
# (1) If the SkyPilot provisioner is used AND the head node is alive, we
|
|
2197
|
+
# will not reset the autostop setting. Because autostop is handled by
|
|
2198
|
+
# the skylet through the cloud APIs, and will continue to function
|
|
2199
|
+
# regardless of the ray cluster's health.
|
|
2200
|
+
# (2) Otherwise, we will reset the autostop setting, unless the cluster is
|
|
2201
|
+
# autostopping/autodowning.
|
|
2157
2202
|
is_abnormal = ((0 < len(node_statuses) < handle.launched_nodes) or any(
|
|
2158
2203
|
status != status_lib.ClusterStatus.STOPPED for status in node_statuses))
|
|
2159
2204
|
if is_abnormal:
|
|
2160
2205
|
logger.debug('The cluster is abnormal. Setting to INIT status. '
|
|
2161
2206
|
f'node_statuses: {node_statuses}')
|
|
2162
|
-
|
|
2163
|
-
|
|
2164
|
-
|
|
2165
|
-
|
|
2166
|
-
stream_logs=False):
|
|
2167
|
-
# Friendly hint.
|
|
2168
|
-
autostop = record['autostop']
|
|
2169
|
-
maybe_down_str = ' --down' if record['to_down'] else ''
|
|
2170
|
-
noun = 'autodown' if record['to_down'] else 'autostop'
|
|
2171
|
-
|
|
2172
|
-
# Reset the autostopping as the cluster is abnormal, and may
|
|
2173
|
-
# not correctly autostop. Resetting the autostop will let
|
|
2174
|
-
# the user know that the autostop may not happen to avoid
|
|
2175
|
-
# leakages from the assumption that the cluster will autostop.
|
|
2176
|
-
success = True
|
|
2177
|
-
reset_local_autostop = True
|
|
2207
|
+
if record['autostop'] >= 0:
|
|
2208
|
+
is_head_node_alive = False
|
|
2209
|
+
if launched_resources.cloud.PROVISIONER_VERSION >= clouds.ProvisionerVersion.SKYPILOT:
|
|
2210
|
+
# Check if the head node is alive
|
|
2178
2211
|
try:
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2212
|
+
cluster_info = _query_cluster_info_via_cloud_api(handle)
|
|
2213
|
+
is_head_node_alive = cluster_info.get_head_instance(
|
|
2214
|
+
) is not None
|
|
2215
|
+
except Exception as e: # pylint: disable=broad-except
|
|
2216
|
+
logger.debug(
|
|
2217
|
+
f'Failed to get cluster info for {cluster_name!r}: '
|
|
2218
|
+
f'{common_utils.format_exception(e)}')
|
|
2219
|
+
|
|
2220
|
+
backend = get_backend_from_handle(handle)
|
|
2221
|
+
if isinstance(backend, backends.CloudVmRayBackend):
|
|
2222
|
+
if is_head_node_alive:
|
|
2223
|
+
logger.debug(
|
|
2224
|
+
f'Skipping autostop reset for cluster {cluster_name!r} '
|
|
2225
|
+
'because the head node is alive.')
|
|
2226
|
+
elif not backend.is_definitely_autostopping(handle,
|
|
2227
|
+
stream_logs=False):
|
|
2228
|
+
# Friendly hint.
|
|
2229
|
+
autostop = record['autostop']
|
|
2230
|
+
maybe_down_str = ' --down' if record['to_down'] else ''
|
|
2231
|
+
noun = 'autodown' if record['to_down'] else 'autostop'
|
|
2232
|
+
|
|
2233
|
+
# Reset the autostopping as the cluster is abnormal, and may
|
|
2234
|
+
# not correctly autostop. Resetting the autostop will let
|
|
2235
|
+
# the user know that the autostop may not happen to avoid
|
|
2236
|
+
# leakages from the assumption that the cluster will autostop.
|
|
2237
|
+
success = True
|
|
2238
|
+
reset_local_autostop = True
|
|
2239
|
+
try:
|
|
2240
|
+
backend.set_autostop(handle, -1, stream_logs=False)
|
|
2241
|
+
except exceptions.CommandError as e:
|
|
2242
|
+
success = False
|
|
2243
|
+
if e.returncode == 255:
|
|
2244
|
+
word = 'autostopped' if noun == 'autostop' else 'autodowned'
|
|
2245
|
+
logger.debug(f'The cluster is likely {word}.')
|
|
2246
|
+
reset_local_autostop = False
|
|
2247
|
+
except (Exception, SystemExit) as e: # pylint: disable=broad-except
|
|
2248
|
+
success = False
|
|
2249
|
+
logger.debug(f'Failed to reset autostop. Due to '
|
|
2250
|
+
f'{common_utils.format_exception(e)}')
|
|
2251
|
+
if reset_local_autostop:
|
|
2252
|
+
global_user_state.set_cluster_autostop_value(
|
|
2253
|
+
handle.cluster_name, -1, to_down=False)
|
|
2254
|
+
|
|
2255
|
+
if success:
|
|
2256
|
+
operation_str = (f'Canceled {noun} on the cluster '
|
|
2257
|
+
f'{cluster_name!r}')
|
|
2258
|
+
else:
|
|
2259
|
+
operation_str = (
|
|
2260
|
+
f'Attempted to cancel {noun} on the '
|
|
2261
|
+
f'cluster {cluster_name!r} with best effort')
|
|
2262
|
+
yellow = colorama.Fore.YELLOW
|
|
2263
|
+
bright = colorama.Style.BRIGHT
|
|
2264
|
+
reset = colorama.Style.RESET_ALL
|
|
2265
|
+
ux_utils.console_newline()
|
|
2266
|
+
logger.warning(
|
|
2267
|
+
f'{yellow}{operation_str}, since it is found to be in an '
|
|
2268
|
+
f'abnormal state. To fix, try running: {reset}{bright}sky '
|
|
2269
|
+
f'start -f -i {autostop}{maybe_down_str} {cluster_name}'
|
|
2270
|
+
f'{reset}')
|
|
2197
2271
|
else:
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
ux_utils.console_newline()
|
|
2205
|
-
logger.warning(
|
|
2206
|
-
f'{yellow}{operation_str}, since it is found to be in an '
|
|
2207
|
-
f'abnormal state. To fix, try running: {reset}{bright}sky '
|
|
2208
|
-
f'start -f -i {autostop}{maybe_down_str} {cluster_name}'
|
|
2209
|
-
f'{reset}')
|
|
2210
|
-
else:
|
|
2211
|
-
ux_utils.console_newline()
|
|
2212
|
-
operation_str = 'autodowning' if record[
|
|
2213
|
-
'to_down'] else 'autostopping'
|
|
2214
|
-
logger.info(
|
|
2215
|
-
f'Cluster {cluster_name!r} is {operation_str}. Setting to '
|
|
2216
|
-
'INIT status; try refresh again in a while.')
|
|
2272
|
+
ux_utils.console_newline()
|
|
2273
|
+
operation_str = 'autodowning' if record[
|
|
2274
|
+
'to_down'] else 'autostopping'
|
|
2275
|
+
logger.info(
|
|
2276
|
+
f'Cluster {cluster_name!r} is {operation_str}. Setting to '
|
|
2277
|
+
'INIT status; try refresh again in a while.')
|
|
2217
2278
|
|
|
2218
2279
|
# If the user starts part of a STOPPED cluster, we still need a status
|
|
2219
2280
|
# to represent the abnormal status. For spot cluster, it can also
|
|
@@ -73,7 +73,7 @@ from sky.utils import status_lib
|
|
|
73
73
|
from sky.utils import subprocess_utils
|
|
74
74
|
from sky.utils import timeline
|
|
75
75
|
from sky.utils import ux_utils
|
|
76
|
-
from sky.
|
|
76
|
+
from sky.utils import volume as volume_lib
|
|
77
77
|
|
|
78
78
|
if typing.TYPE_CHECKING:
|
|
79
79
|
from sky import dag
|
sky/clouds/aws.py
CHANGED
|
@@ -32,7 +32,7 @@ if typing.TYPE_CHECKING:
|
|
|
32
32
|
# renaming to avoid shadowing variables
|
|
33
33
|
from sky import resources as resources_lib
|
|
34
34
|
from sky.utils import status_lib
|
|
35
|
-
from sky.
|
|
35
|
+
from sky.utils import volume as volume_lib
|
|
36
36
|
|
|
37
37
|
logger = sky_logging.init_logger(__name__)
|
|
38
38
|
|
sky/clouds/azure.py
CHANGED
sky/clouds/cloud.py
CHANGED
|
@@ -27,7 +27,7 @@ from sky.utils import ux_utils
|
|
|
27
27
|
if typing.TYPE_CHECKING:
|
|
28
28
|
from sky import resources as resources_lib
|
|
29
29
|
from sky.utils import status_lib
|
|
30
|
-
from sky.
|
|
30
|
+
from sky.utils import volume as volume_lib
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
class CloudImplementationFeatures(enum.Enum):
|
sky/clouds/cudo.py
CHANGED
|
@@ -12,7 +12,7 @@ from sky.utils import resources_utils
|
|
|
12
12
|
if typing.TYPE_CHECKING:
|
|
13
13
|
# Renaming to avoid shadowing variables.
|
|
14
14
|
from sky import resources as resources_lib
|
|
15
|
-
from sky.
|
|
15
|
+
from sky.utils import volume as volume_lib
|
|
16
16
|
|
|
17
17
|
_CREDENTIAL_FILES = [
|
|
18
18
|
# credential files for Cudo,
|
sky/clouds/do.py
CHANGED
sky/clouds/fluidstack.py
CHANGED
|
@@ -21,7 +21,7 @@ if typing.TYPE_CHECKING:
|
|
|
21
21
|
|
|
22
22
|
# Renaming to avoid shadowing variables.
|
|
23
23
|
from sky import resources as resources_lib
|
|
24
|
-
from sky.
|
|
24
|
+
from sky.utils import volume as volume_lib
|
|
25
25
|
else:
|
|
26
26
|
requests = adaptors_common.LazyImport('requests')
|
|
27
27
|
|
sky/clouds/gcp.py
CHANGED
|
@@ -29,7 +29,7 @@ from sky.utils import ux_utils
|
|
|
29
29
|
if typing.TYPE_CHECKING:
|
|
30
30
|
from sky import resources
|
|
31
31
|
from sky.utils import status_lib
|
|
32
|
-
from sky.
|
|
32
|
+
from sky.utils import volume as volume_lib
|
|
33
33
|
|
|
34
34
|
logger = sky_logging.init_logger(__name__)
|
|
35
35
|
|
sky/clouds/hyperbolic.py
CHANGED
|
@@ -13,7 +13,7 @@ from sky.utils.resources_utils import DiskTier
|
|
|
13
13
|
|
|
14
14
|
if typing.TYPE_CHECKING:
|
|
15
15
|
from sky import resources as resources_lib
|
|
16
|
-
from sky.
|
|
16
|
+
from sky.utils import volume as volume_lib
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
@registry.CLOUD_REGISTRY.register
|
sky/clouds/ibm.py
CHANGED
|
@@ -18,7 +18,7 @@ from sky.utils import ux_utils
|
|
|
18
18
|
if typing.TYPE_CHECKING:
|
|
19
19
|
# renaming to avoid shadowing variables
|
|
20
20
|
from sky import resources as resources_lib
|
|
21
|
-
from sky.
|
|
21
|
+
from sky.utils import volume as volume_lib
|
|
22
22
|
|
|
23
23
|
logger = sky_logging.init_logger(__name__)
|
|
24
24
|
|
sky/clouds/kubernetes.py
CHANGED
|
@@ -29,7 +29,7 @@ from sky.utils import kubernetes_enums
|
|
|
29
29
|
from sky.utils import registry
|
|
30
30
|
from sky.utils import resources_utils
|
|
31
31
|
from sky.utils import schemas
|
|
32
|
-
from sky.
|
|
32
|
+
from sky.utils import volume as volume_lib
|
|
33
33
|
|
|
34
34
|
if typing.TYPE_CHECKING:
|
|
35
35
|
# Renaming to avoid shadowing variables.
|
|
@@ -84,8 +84,8 @@ class Kubernetes(clouds.Cloud):
|
|
|
84
84
|
('Customized multiple network interfaces are not supported in '
|
|
85
85
|
'Kubernetes.'),
|
|
86
86
|
clouds.CloudImplementationFeatures.CUSTOM_NETWORK_TIER:
|
|
87
|
-
('Custom network tier is
|
|
88
|
-
|
|
87
|
+
('Custom network tier is not supported in this Kubernetes '
|
|
88
|
+
'cluster.'),
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
IMAGE_CPU = 'skypilot:custom-cpu-ubuntu-2004'
|
|
@@ -616,12 +616,9 @@ class Kubernetes(clouds.Cloud):
|
|
|
616
616
|
if clouds.CloudImplementationFeatures.CUSTOM_NETWORK_TIER \
|
|
617
617
|
not in unsupported_features:
|
|
618
618
|
# Add high-performance networking environment variables for
|
|
619
|
-
#
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
):
|
|
623
|
-
network_env_vars = network_type.get_network_env_vars()
|
|
624
|
-
k8s_env_vars.update(network_env_vars)
|
|
619
|
+
# clusters with high performance networking
|
|
620
|
+
network_env_vars = network_type.get_network_env_vars()
|
|
621
|
+
k8s_env_vars.update(network_env_vars)
|
|
625
622
|
|
|
626
623
|
# We specify object-store-memory to be 500MB to avoid taking up too
|
|
627
624
|
# much memory on the head node. 'num-cpus' should be set to limit
|
|
@@ -743,6 +740,7 @@ class Kubernetes(clouds.Cloud):
|
|
|
743
740
|
'avoid_label_keys': avoid_label_keys,
|
|
744
741
|
'k8s_enable_flex_start': enable_flex_start,
|
|
745
742
|
'k8s_max_run_duration_seconds': max_run_duration_seconds,
|
|
743
|
+
'k8s_network_type': network_type.value,
|
|
746
744
|
}
|
|
747
745
|
|
|
748
746
|
# Add kubecontext if it is set. It may be None if SkyPilot is running
|
|
@@ -1094,6 +1092,10 @@ class Kubernetes(clouds.Cloud):
|
|
|
1094
1092
|
if label_key.startswith('nebius.com/'):
|
|
1095
1093
|
return (KubernetesHighPerformanceNetworkType.NEBIUS,
|
|
1096
1094
|
'')
|
|
1095
|
+
if label_key.startswith('ib.coreweave.cloud/'):
|
|
1096
|
+
return (
|
|
1097
|
+
KubernetesHighPerformanceNetworkType.COREWEAVE,
|
|
1098
|
+
'')
|
|
1097
1099
|
|
|
1098
1100
|
# Check for GKE clusters with specific GPUDirect variants
|
|
1099
1101
|
machine_family = node.metadata.labels.get(
|
sky/clouds/lambda_cloud.py
CHANGED
|
@@ -15,7 +15,7 @@ if typing.TYPE_CHECKING:
|
|
|
15
15
|
|
|
16
16
|
# Renaming to avoid shadowing variables.
|
|
17
17
|
from sky import resources as resources_lib
|
|
18
|
-
from sky.
|
|
18
|
+
from sky.utils import volume as volume_lib
|
|
19
19
|
else:
|
|
20
20
|
requests = adaptors_common.LazyImport('requests')
|
|
21
21
|
|
sky/clouds/nebius.py
CHANGED
sky/clouds/oci.py
CHANGED
|
@@ -40,7 +40,7 @@ from sky.utils import ux_utils
|
|
|
40
40
|
if typing.TYPE_CHECKING:
|
|
41
41
|
# Renaming to avoid shadowing variables.
|
|
42
42
|
from sky import resources as resources_lib
|
|
43
|
-
from sky.
|
|
43
|
+
from sky.utils import volume as volume_lib
|
|
44
44
|
|
|
45
45
|
logger = logging.getLogger(__name__)
|
|
46
46
|
|
sky/clouds/paperspace.py
CHANGED
sky/clouds/runpod.py
CHANGED
sky/clouds/scp.py
CHANGED
|
@@ -19,7 +19,7 @@ from sky.utils import status_lib
|
|
|
19
19
|
if typing.TYPE_CHECKING:
|
|
20
20
|
# Renaming to avoid shadowing variables.
|
|
21
21
|
from sky import resources as resources_lib
|
|
22
|
-
from sky.
|
|
22
|
+
from sky.utils import volume as volume_lib
|
|
23
23
|
|
|
24
24
|
_CREDENTIAL_FILES = [
|
|
25
25
|
'scp_credential',
|
sky/clouds/vast.py
CHANGED
sky/clouds/vsphere.py
CHANGED
|
@@ -18,7 +18,7 @@ if typing.TYPE_CHECKING:
|
|
|
18
18
|
|
|
19
19
|
# Renaming to avoid shadowing variables.
|
|
20
20
|
from sky import resources as resources_lib
|
|
21
|
-
from sky.
|
|
21
|
+
from sky.utils import volume as volume_lib
|
|
22
22
|
else:
|
|
23
23
|
requests = adaptors_common.LazyImport('requests')
|
|
24
24
|
|
sky/dashboard/out/404.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c72a1f77a3c0be1b.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_error-c72a1f77a3c0be1b.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_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":"ucBqsWPN0A5D2kXj8-FqQ","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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-162f3033ffcd3d31.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-df791914b54d91d9.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-5ea3ffa10fc884f2.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-d65361e92b85e786.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-2cc31dc0fdf2a9ad.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-eab0e9c16b64fd9f.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-9fa11dafb5cad4a6.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-2abbd0352f8ee061.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-2186770cc2de1623.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-162f3033ffcd3d31.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-df791914b54d91d9.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-5ea3ffa10fc884f2.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-d65361e92b85e786.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-2cc31dc0fdf2a9ad.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-eab0e9c16b64fd9f.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-9fa11dafb5cad4a6.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-2abbd0352f8ee061.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D/%5Bjob%5D-2186770cc2de1623.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_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":"ucBqsWPN0A5D2kXj8-FqQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-162f3033ffcd3d31.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-df791914b54d91d9.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-5ea3ffa10fc884f2.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-d65361e92b85e786.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-2cc31dc0fdf2a9ad.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/1559-18717d96ef2fcbe9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-eab0e9c16b64fd9f.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-9fa11dafb5cad4a6.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-2abbd0352f8ee061.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-f64e03df359e04f7.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-8e0b2055bf5dd499.js" defer=""></script><script src="/dashboard/_next/static/chunks/1043-869d9c78bf5dd3df.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-d4a381403a8bae91.js" defer=""></script><script src="/dashboard/_next/static/chunks/938-7ee806653aef0609.js" defer=""></script><script src="/dashboard/_next/static/chunks/1871-ea0e7283886407ca.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-95afb019ab85801c.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-162f3033ffcd3d31.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-df791914b54d91d9.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-5ea3ffa10fc884f2.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-d65361e92b85e786.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-2cc31dc0fdf2a9ad.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/1559-18717d96ef2fcbe9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-eab0e9c16b64fd9f.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-9fa11dafb5cad4a6.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-2abbd0352f8ee061.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-f64e03df359e04f7.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-8e0b2055bf5dd499.js" defer=""></script><script src="/dashboard/_next/static/chunks/1043-869d9c78bf5dd3df.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-d4a381403a8bae91.js" defer=""></script><script src="/dashboard/_next/static/chunks/938-7ee806653aef0609.js" defer=""></script><script src="/dashboard/_next/static/chunks/1871-ea0e7283886407ca.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-95afb019ab85801c.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"ucBqsWPN0A5D2kXj8-FqQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/clusters.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-3d4be4961e1c94eb.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters-3d4be4961e1c94eb.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"ucBqsWPN0A5D2kXj8-FqQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/config.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-a2673b256b6d416f.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/config-a2673b256b6d416f.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"ucBqsWPN0A5D2kXj8-FqQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-89e7daf7b7df02e0.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/index-89e7daf7b7df02e0.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"ucBqsWPN0A5D2kXj8-FqQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-a90b4fe4616dc501.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra/%5Bcontext%5D-a90b4fe4616dc501.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"ucBqsWPN0A5D2kXj8-FqQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
sky/dashboard/out/infra.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-0d3d1f890c5d188a.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/infra-0d3d1f890c5d188a.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"ucBqsWPN0A5D2kXj8-FqQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-162f3033ffcd3d31.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-df791914b54d91d9.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-5ea3ffa10fc884f2.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-d65361e92b85e786.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-2cc31dc0fdf2a9ad.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-eab0e9c16b64fd9f.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-9fa11dafb5cad4a6.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-2abbd0352f8ee061.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-8e0b2055bf5dd499.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-dc0299ffefebcdbe.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/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-a305898dc479711e.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-efc06c2733009cd3.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-c0a4f1ea606d48d2.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-da491665d4289aae.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-162f3033ffcd3d31.js" defer=""></script><script src="/dashboard/_next/static/chunks/5230-df791914b54d91d9.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-5ea3ffa10fc884f2.js" defer=""></script><script src="/dashboard/_next/static/chunks/1664-d65361e92b85e786.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-2cc31dc0fdf2a9ad.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-eab0e9c16b64fd9f.js" defer=""></script><script src="/dashboard/_next/static/chunks/3698-9fa11dafb5cad4a6.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-2abbd0352f8ee061.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-8e0b2055bf5dd499.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-dc0299ffefebcdbe.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/ucBqsWPN0A5D2kXj8-FqQ/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"ucBqsWPN0A5D2kXj8-FqQ","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|