skypilot-nightly 1.0.0.dev20250829__py3-none-any.whl → 1.0.0.dev20250901__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/adaptors/nebius.py +24 -2
- sky/backends/backend_utils.py +39 -36
- sky/backends/cloud_vm_ray_backend.py +37 -0
- sky/client/cli/command.py +17 -6
- sky/client/common.py +5 -4
- sky/client/sdk.py +5 -0
- sky/client/sdk_async.py +8 -2
- sky/core.py +8 -3
- 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/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/global_user_state.py +67 -0
- sky/provision/docker_utils.py +1 -1
- sky/provision/kubernetes/utils.py +39 -26
- sky/server/common.py +8 -6
- sky/server/metrics.py +82 -6
- sky/server/requests/executor.py +5 -1
- sky/server/requests/payloads.py +1 -0
- sky/server/requests/requests.py +19 -11
- sky/server/server.py +46 -14
- sky/server/uvicorn.py +7 -0
- sky/setup_files/dependencies.py +23 -8
- sky/setup_files/setup.py +2 -0
- sky/skylet/constants.py +3 -0
- sky/utils/db/db_utils.py +56 -4
- sky/utils/perf_utils.py +22 -0
- sky/utils/schemas.py +6 -0
- {skypilot_nightly-1.0.0.dev20250829.dist-info → skypilot_nightly-1.0.0.dev20250901.dist-info}/METADATA +35 -50
- {skypilot_nightly-1.0.0.dev20250829.dist-info → skypilot_nightly-1.0.0.dev20250901.dist-info}/RECORD +49 -48
- /sky/dashboard/out/_next/static/{hYJYFIxp_ZFONR4wTIJqZ → EqPZ0ygxa__3XPBVJ9dpy}/_buildManifest.js +0 -0
- /sky/dashboard/out/_next/static/{hYJYFIxp_ZFONR4wTIJqZ → EqPZ0ygxa__3XPBVJ9dpy}/_ssgManifest.js +0 -0
- {skypilot_nightly-1.0.0.dev20250829.dist-info → skypilot_nightly-1.0.0.dev20250901.dist-info}/WHEEL +0 -0
- {skypilot_nightly-1.0.0.dev20250829.dist-info → skypilot_nightly-1.0.0.dev20250901.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250829.dist-info → skypilot_nightly-1.0.0.dev20250901.dist-info}/licenses/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250829.dist-info → skypilot_nightly-1.0.0.dev20250901.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 = 'cf5b530d1a29931fb96476da3cecb7c1d03e5f6e'
|
|
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.dev20250901'
|
|
41
41
|
__root_dir__ = directory_utils.get_sky_dir()
|
|
42
42
|
|
|
43
43
|
|
sky/adaptors/nebius.py
CHANGED
|
@@ -62,6 +62,10 @@ def iam_token_path() -> str:
|
|
|
62
62
|
return '~/.nebius/NEBIUS_IAM_TOKEN.txt'
|
|
63
63
|
|
|
64
64
|
|
|
65
|
+
def domain_path() -> str:
|
|
66
|
+
return '~/.nebius/NEBIUS_DOMAIN.txt'
|
|
67
|
+
|
|
68
|
+
|
|
65
69
|
def credentials_path() -> str:
|
|
66
70
|
workspace_path = skypilot_config.get_workspace_cloud('nebius').get(
|
|
67
71
|
'credentials_file_path', None)
|
|
@@ -82,6 +86,22 @@ def _get_default_credentials_path() -> str:
|
|
|
82
86
|
return '~/.nebius/credentials.json'
|
|
83
87
|
|
|
84
88
|
|
|
89
|
+
def api_domain() -> Optional[str]:
|
|
90
|
+
domain_in_ws_config = skypilot_config.get_workspace_cloud('nebius').get(
|
|
91
|
+
'domain', None)
|
|
92
|
+
if domain_in_ws_config is not None:
|
|
93
|
+
return domain_in_ws_config
|
|
94
|
+
domain_in_config = skypilot_config.get_effective_region_config(
|
|
95
|
+
cloud='nebius', region=None, keys=('domain',), default_value=None)
|
|
96
|
+
if domain_in_config is not None:
|
|
97
|
+
return domain_in_config
|
|
98
|
+
try:
|
|
99
|
+
with open(os.path.expanduser(domain_path()), encoding='utf-8') as file:
|
|
100
|
+
return file.read().strip()
|
|
101
|
+
except FileNotFoundError:
|
|
102
|
+
return None
|
|
103
|
+
|
|
104
|
+
|
|
85
105
|
DEFAULT_REGION = 'eu-north1'
|
|
86
106
|
|
|
87
107
|
NEBIUS_PROFILE_NAME = 'nebius'
|
|
@@ -215,10 +235,12 @@ def _sdk(token: Optional[str], cred_path: Optional[str]):
|
|
|
215
235
|
# Exactly one of token or cred_path must be provided
|
|
216
236
|
assert (token is None) != (cred_path is None), (token, cred_path)
|
|
217
237
|
if token is not None:
|
|
218
|
-
return nebius.sdk.SDK(credentials=token)
|
|
238
|
+
return nebius.sdk.SDK(credentials=token, domain=api_domain())
|
|
219
239
|
if cred_path is not None:
|
|
220
240
|
return nebius.sdk.SDK(
|
|
221
|
-
credentials_file_name=os.path.expanduser(cred_path)
|
|
241
|
+
credentials_file_name=os.path.expanduser(cred_path),
|
|
242
|
+
domain=api_domain(),
|
|
243
|
+
)
|
|
222
244
|
raise ValueError('Either token or credentials file path must be provided')
|
|
223
245
|
|
|
224
246
|
|
sky/backends/backend_utils.py
CHANGED
|
@@ -928,19 +928,19 @@ def write_cluster_config(
|
|
|
928
928
|
# Add kubernetes config fields from ~/.sky/config
|
|
929
929
|
if isinstance(cloud, clouds.Kubernetes):
|
|
930
930
|
cluster_config_overrides = to_provision.cluster_config_overrides
|
|
931
|
-
|
|
932
|
-
|
|
931
|
+
with open(tmp_yaml_path, 'r', encoding='utf-8') as f:
|
|
932
|
+
tmp_yaml_str = f.read()
|
|
933
|
+
cluster_yaml_obj = yaml_utils.safe_load(tmp_yaml_str)
|
|
934
|
+
combined_yaml_obj = kubernetes_utils.combine_pod_config_fields_and_metadata(
|
|
935
|
+
cluster_yaml_obj,
|
|
933
936
|
cluster_config_overrides=cluster_config_overrides,
|
|
934
937
|
cloud=cloud,
|
|
935
938
|
context=region.name)
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
cluster_config_overrides=cluster_config_overrides,
|
|
939
|
-
context=region.name)
|
|
940
|
-
yaml_obj = yaml_utils.read_yaml(tmp_yaml_path)
|
|
941
|
-
pod_config: Dict[str, Any] = yaml_obj['available_node_types'][
|
|
942
|
-
'ray_head_default']['node_config']
|
|
939
|
+
# Write the updated YAML back to the file
|
|
940
|
+
yaml_utils.dump_yaml(tmp_yaml_path, combined_yaml_obj)
|
|
943
941
|
|
|
942
|
+
pod_config: Dict[str, Any] = combined_yaml_obj['available_node_types'][
|
|
943
|
+
'ray_head_default']['node_config']
|
|
944
944
|
# Check pod spec only. For high availability controllers, we deploy pvc & deployment for the controller. Read kubernetes-ray.yml.j2 for more details.
|
|
945
945
|
pod_config.pop('deployment_spec', None)
|
|
946
946
|
pod_config.pop('pvc_spec', None)
|
|
@@ -2929,6 +2929,7 @@ def get_clusters(
|
|
|
2929
2929
|
refresh: common.StatusRefreshMode,
|
|
2930
2930
|
cluster_names: Optional[Union[str, List[str]]] = None,
|
|
2931
2931
|
all_users: bool = True,
|
|
2932
|
+
include_credentials: bool = False,
|
|
2932
2933
|
# Internal only:
|
|
2933
2934
|
# pylint: disable=invalid-name
|
|
2934
2935
|
_include_is_managed: bool = False,
|
|
@@ -2941,17 +2942,14 @@ def get_clusters(
|
|
|
2941
2942
|
of the clusters.
|
|
2942
2943
|
|
|
2943
2944
|
Args:
|
|
2944
|
-
include_controller: Whether to include controllers, e.g. jobs controller
|
|
2945
|
-
or sky serve controller.
|
|
2946
2945
|
refresh: Whether to refresh the status of the clusters. (Refreshing will
|
|
2947
2946
|
set the status to STOPPED if the cluster cannot be pinged.)
|
|
2948
|
-
cloud_filter: Sets which clouds to filer through from the global user
|
|
2949
|
-
state. Supports three values, 'all' for all clouds, 'public' for
|
|
2950
|
-
public clouds only, and 'local' for only local clouds.
|
|
2951
2947
|
cluster_names: If provided, only return records for the given cluster
|
|
2952
2948
|
names.
|
|
2953
2949
|
all_users: If True, return clusters from all users. If False, only
|
|
2954
2950
|
return clusters from the current user.
|
|
2951
|
+
include_credentials: If True, include cluster ssh credentials in the
|
|
2952
|
+
return value.
|
|
2955
2953
|
_include_is_managed: Whether to force include clusters created by the
|
|
2956
2954
|
controller.
|
|
2957
2955
|
|
|
@@ -2995,29 +2993,34 @@ def get_clusters(
|
|
|
2995
2993
|
logger.info(f'Cluster(s) not found: {bright}{clusters_str}{reset}.')
|
|
2996
2994
|
records = new_records
|
|
2997
2995
|
|
|
2998
|
-
def
|
|
2999
|
-
records: List[Optional[Dict[str, Any]]]) ->
|
|
3000
|
-
"""
|
|
3001
|
-
|
|
3002
|
-
|
|
3003
|
-
|
|
3004
|
-
|
|
3005
|
-
records_with_handle = []
|
|
2996
|
+
def _get_records_with_handle(
|
|
2997
|
+
records: List[Optional[Dict[str, Any]]]) -> List[Dict[str, Any]]:
|
|
2998
|
+
"""Filter for records that have a handle"""
|
|
2999
|
+
return [
|
|
3000
|
+
record for record in records
|
|
3001
|
+
if record is not None and record['handle'] is not None
|
|
3002
|
+
]
|
|
3006
3003
|
|
|
3007
|
-
|
|
3008
|
-
|
|
3009
|
-
|
|
3010
|
-
|
|
3004
|
+
def _update_records_with_resources_str(
|
|
3005
|
+
records: List[Optional[Dict[str, Any]]]) -> None:
|
|
3006
|
+
"""Add resource str to record"""
|
|
3007
|
+
for record in _get_records_with_handle(records):
|
|
3011
3008
|
handle = record['handle']
|
|
3012
|
-
if handle is None:
|
|
3013
|
-
continue
|
|
3014
3009
|
record[
|
|
3015
3010
|
'resources_str'] = resources_utils.get_readable_resources_repr(
|
|
3016
3011
|
handle, simplify=True)
|
|
3017
3012
|
record[
|
|
3018
3013
|
'resources_str_full'] = resources_utils.get_readable_resources_repr(
|
|
3019
3014
|
handle, simplify=False)
|
|
3020
|
-
|
|
3015
|
+
|
|
3016
|
+
def _update_records_with_credentials(
|
|
3017
|
+
records: List[Optional[Dict[str, Any]]]) -> None:
|
|
3018
|
+
"""Add the credentials to the record.
|
|
3019
|
+
|
|
3020
|
+
This is useful for the client side to setup the ssh config of the
|
|
3021
|
+
cluster.
|
|
3022
|
+
"""
|
|
3023
|
+
records_with_handle = _get_records_with_handle(records)
|
|
3021
3024
|
if len(records_with_handle) == 0:
|
|
3022
3025
|
return
|
|
3023
3026
|
|
|
@@ -3050,12 +3053,8 @@ def get_clusters(
|
|
|
3050
3053
|
def _update_records_with_resources(
|
|
3051
3054
|
records: List[Optional[Dict[str, Any]]]) -> None:
|
|
3052
3055
|
"""Add the resources to the record."""
|
|
3053
|
-
for record in records:
|
|
3054
|
-
if record is None:
|
|
3055
|
-
continue
|
|
3056
|
+
for record in _get_records_with_handle(records):
|
|
3056
3057
|
handle = record['handle']
|
|
3057
|
-
if handle is None:
|
|
3058
|
-
continue
|
|
3059
3058
|
record['nodes'] = handle.launched_nodes
|
|
3060
3059
|
if handle.launched_resources is None:
|
|
3061
3060
|
continue
|
|
@@ -3072,7 +3071,9 @@ def get_clusters(
|
|
|
3072
3071
|
if handle.launched_resources.accelerators else None)
|
|
3073
3072
|
|
|
3074
3073
|
# Add auth_config to the records
|
|
3075
|
-
|
|
3074
|
+
_update_records_with_resources_str(records)
|
|
3075
|
+
if include_credentials:
|
|
3076
|
+
_update_records_with_credentials(records)
|
|
3076
3077
|
if refresh == common.StatusRefreshMode.NONE:
|
|
3077
3078
|
# Add resources to the records
|
|
3078
3079
|
_update_records_with_resources(records)
|
|
@@ -3112,7 +3113,9 @@ def get_clusters(
|
|
|
3112
3113
|
cluster_name,
|
|
3113
3114
|
force_refresh_statuses=force_refresh_statuses,
|
|
3114
3115
|
acquire_per_cluster_status_lock=True)
|
|
3115
|
-
|
|
3116
|
+
_update_records_with_resources_str([record])
|
|
3117
|
+
if include_credentials:
|
|
3118
|
+
_update_records_with_credentials([record])
|
|
3116
3119
|
except (exceptions.ClusterStatusFetchingError,
|
|
3117
3120
|
exceptions.CloudUserIdentityError,
|
|
3118
3121
|
exceptions.ClusterOwnerIdentityMismatchError) as e:
|
|
@@ -5157,6 +5157,7 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
|
5157
5157
|
# Take a random resource in order to get resource info that applies
|
|
5158
5158
|
# to all resources.
|
|
5159
5159
|
one_task_resource = list(task.resources)[0]
|
|
5160
|
+
|
|
5160
5161
|
# Assume resources share the same ports.
|
|
5161
5162
|
for resource in task.resources:
|
|
5162
5163
|
assert resource.ports == one_task_resource.ports
|
|
@@ -5197,6 +5198,42 @@ class CloudVmRayBackend(backends.Backend['CloudVmRayResourceHandle']):
|
|
|
5197
5198
|
if one_task_resource.docker_login_config is not None:
|
|
5198
5199
|
to_provision = to_provision.copy(
|
|
5199
5200
|
_docker_login_config=one_task_resource.docker_login_config)
|
|
5201
|
+
|
|
5202
|
+
# cluster_config_overrides should be the same for all resources.
|
|
5203
|
+
for resource in task.resources:
|
|
5204
|
+
assert (resource.cluster_config_overrides ==
|
|
5205
|
+
one_task_resource.cluster_config_overrides)
|
|
5206
|
+
if isinstance(to_provision.cloud, clouds.Kubernetes):
|
|
5207
|
+
# Warn users if the Kubernetes pod config is different
|
|
5208
|
+
# from the existing cluster.
|
|
5209
|
+
cluster_yaml_str = global_user_state.get_cluster_yaml_str(
|
|
5210
|
+
cluster_name)
|
|
5211
|
+
actual_cluster_yaml_obj = yaml_utils.safe_load(cluster_yaml_str)
|
|
5212
|
+
desired_cluster_yaml_obj = (
|
|
5213
|
+
kubernetes_utils.combine_pod_config_fields_and_metadata(
|
|
5214
|
+
actual_cluster_yaml_obj,
|
|
5215
|
+
cluster_config_overrides=one_task_resource.
|
|
5216
|
+
cluster_config_overrides,
|
|
5217
|
+
cloud=to_provision.cloud,
|
|
5218
|
+
context=to_provision.region))
|
|
5219
|
+
|
|
5220
|
+
def _get_pod_config(yaml_obj: Dict[str, Any]) -> Dict[str, Any]:
|
|
5221
|
+
return (yaml_obj.get('available_node_types',
|
|
5222
|
+
{}).get('ray_head_default',
|
|
5223
|
+
{}).get('node_config', {}))
|
|
5224
|
+
|
|
5225
|
+
if _get_pod_config(desired_cluster_yaml_obj) != _get_pod_config(
|
|
5226
|
+
actual_cluster_yaml_obj):
|
|
5227
|
+
# pylint: disable=line-too-long
|
|
5228
|
+
logger.warning(
|
|
5229
|
+
f'{colorama.Fore.YELLOW}WARNING: Kubernetes pod config mismatch detected. Task requires different '
|
|
5230
|
+
f'pod config than the existing cluster. The existing '
|
|
5231
|
+
f'cluster will be used with its current pod config.'
|
|
5232
|
+
f'To apply use your task\'s new pod config:\n'
|
|
5233
|
+
f' • Use a new cluster'
|
|
5234
|
+
f' • Or restart this cluster: sky down {cluster_name}; sky launch -c {cluster_name} ...'
|
|
5235
|
+
f'{colorama.Style.RESET_ALL}')
|
|
5236
|
+
|
|
5200
5237
|
return RetryingVmProvisioner.ToProvisionConfig(
|
|
5201
5238
|
cluster_name,
|
|
5202
5239
|
to_provision,
|
sky/client/cli/command.py
CHANGED
|
@@ -143,7 +143,10 @@ def _get_cluster_records_and_set_ssh_config(
|
|
|
143
143
|
# TODO(zhwu): this additional RTT makes CLIs slow. We should optimize this.
|
|
144
144
|
if clusters is not None:
|
|
145
145
|
all_users = True
|
|
146
|
-
request_id = sdk.status(clusters,
|
|
146
|
+
request_id = sdk.status(clusters,
|
|
147
|
+
refresh=refresh,
|
|
148
|
+
all_users=all_users,
|
|
149
|
+
_include_credentials=True)
|
|
147
150
|
cluster_records = sdk.stream_and_get(request_id)
|
|
148
151
|
# Update the SSH config for all clusters
|
|
149
152
|
for record in cluster_records:
|
|
@@ -1655,7 +1658,9 @@ def _show_endpoint(query_clusters: Optional[List[str]],
|
|
|
1655
1658
|
return
|
|
1656
1659
|
|
|
1657
1660
|
|
|
1658
|
-
def _show_enabled_infra(
|
|
1661
|
+
def _show_enabled_infra(
|
|
1662
|
+
active_workspace: str, show_workspace: bool,
|
|
1663
|
+
enabled_clouds_request_id: server_common.RequestId[List[str]]):
|
|
1659
1664
|
"""Show the enabled infrastructure."""
|
|
1660
1665
|
workspace_str = ''
|
|
1661
1666
|
if show_workspace:
|
|
@@ -1663,8 +1668,7 @@ def _show_enabled_infra(active_workspace: str, show_workspace: bool):
|
|
|
1663
1668
|
title = (f'{colorama.Fore.CYAN}{colorama.Style.BRIGHT}Enabled Infra'
|
|
1664
1669
|
f'{workspace_str}:'
|
|
1665
1670
|
f'{colorama.Style.RESET_ALL} ')
|
|
1666
|
-
all_infras = sdk.get(
|
|
1667
|
-
sdk.enabled_clouds(workspace=active_workspace, expand=True))
|
|
1671
|
+
all_infras = sdk.get(enabled_clouds_request_id)
|
|
1668
1672
|
click.echo(f'{title}{", ".join(all_infras)}\n')
|
|
1669
1673
|
|
|
1670
1674
|
|
|
@@ -1878,6 +1882,11 @@ def status(verbose: bool, refresh: bool, ip: bool, endpoints: bool,
|
|
|
1878
1882
|
f'{colorama.Style.RESET_ALL}')
|
|
1879
1883
|
return None
|
|
1880
1884
|
|
|
1885
|
+
active_workspace = skypilot_config.get_active_workspace()
|
|
1886
|
+
|
|
1887
|
+
def submit_enabled_clouds():
|
|
1888
|
+
return sdk.enabled_clouds(workspace=active_workspace, expand=True)
|
|
1889
|
+
|
|
1881
1890
|
managed_jobs_queue_request_id = None
|
|
1882
1891
|
service_status_request_id = None
|
|
1883
1892
|
workspace_request_id = None
|
|
@@ -1893,6 +1902,7 @@ def status(verbose: bool, refresh: bool, ip: bool, endpoints: bool,
|
|
|
1893
1902
|
pools_request_future = executor.submit(submit_pools)
|
|
1894
1903
|
if not (ip or show_endpoints):
|
|
1895
1904
|
workspace_request_future = executor.submit(submit_workspace)
|
|
1905
|
+
enabled_clouds_request_future = executor.submit(submit_enabled_clouds)
|
|
1896
1906
|
|
|
1897
1907
|
# Get the request IDs
|
|
1898
1908
|
if show_managed_jobs:
|
|
@@ -1903,6 +1913,7 @@ def status(verbose: bool, refresh: bool, ip: bool, endpoints: bool,
|
|
|
1903
1913
|
pool_status_request_id = pools_request_future.result()
|
|
1904
1914
|
if not (ip or show_endpoints):
|
|
1905
1915
|
workspace_request_id = workspace_request_future.result()
|
|
1916
|
+
enabled_clouds_request_id = enabled_clouds_request_future.result()
|
|
1906
1917
|
|
|
1907
1918
|
managed_jobs_queue_request_id = (server_common.RequestId()
|
|
1908
1919
|
if not managed_jobs_queue_request_id else
|
|
@@ -1937,9 +1948,9 @@ def status(verbose: bool, refresh: bool, ip: bool, endpoints: bool,
|
|
|
1937
1948
|
all_workspaces = sdk.get(workspace_request_id)
|
|
1938
1949
|
else:
|
|
1939
1950
|
all_workspaces = {constants.SKYPILOT_DEFAULT_WORKSPACE: {}}
|
|
1940
|
-
active_workspace = skypilot_config.get_active_workspace()
|
|
1941
1951
|
show_workspace = len(all_workspaces) > 1
|
|
1942
|
-
_show_enabled_infra(active_workspace, show_workspace
|
|
1952
|
+
_show_enabled_infra(active_workspace, show_workspace,
|
|
1953
|
+
enabled_clouds_request_id)
|
|
1943
1954
|
click.echo(f'{colorama.Fore.CYAN}{colorama.Style.BRIGHT}Clusters'
|
|
1944
1955
|
f'{colorama.Style.RESET_ALL}')
|
|
1945
1956
|
|
sky/client/common.py
CHANGED
|
@@ -82,10 +82,11 @@ def download_logs_from_api_server(
|
|
|
82
82
|
local_machine_prefix) for remote_path in paths_on_api_server
|
|
83
83
|
}
|
|
84
84
|
body = payloads.DownloadBody(folder_paths=list(paths_on_api_server),)
|
|
85
|
-
response =
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
85
|
+
response = server_common.make_authenticated_request(
|
|
86
|
+
'POST',
|
|
87
|
+
'/download',
|
|
88
|
+
json=json.loads(body.model_dump_json()),
|
|
89
|
+
stream=True)
|
|
89
90
|
if response.status_code == 200:
|
|
90
91
|
remote_home_path = response.headers.get('X-Home-Path')
|
|
91
92
|
assert remote_home_path is not None, response.headers
|
sky/client/sdk.py
CHANGED
|
@@ -1426,6 +1426,8 @@ def status(
|
|
|
1426
1426
|
cluster_names: Optional[List[str]] = None,
|
|
1427
1427
|
refresh: common.StatusRefreshMode = common.StatusRefreshMode.NONE,
|
|
1428
1428
|
all_users: bool = False,
|
|
1429
|
+
*,
|
|
1430
|
+
_include_credentials: bool = False,
|
|
1429
1431
|
) -> server_common.RequestId[List[responses.StatusResponse]]:
|
|
1430
1432
|
"""Gets cluster statuses.
|
|
1431
1433
|
|
|
@@ -1474,6 +1476,8 @@ def status(
|
|
|
1474
1476
|
provider(s).
|
|
1475
1477
|
all_users: whether to include all users' clusters. By default, only
|
|
1476
1478
|
the current user's clusters are included.
|
|
1479
|
+
_include_credentials: (internal) whether to include cluster ssh
|
|
1480
|
+
credentials in the response (default: False).
|
|
1477
1481
|
|
|
1478
1482
|
Returns:
|
|
1479
1483
|
The request ID of the status request.
|
|
@@ -1508,6 +1512,7 @@ def status(
|
|
|
1508
1512
|
cluster_names=cluster_names,
|
|
1509
1513
|
refresh=refresh,
|
|
1510
1514
|
all_users=all_users,
|
|
1515
|
+
include_credentials=_include_credentials,
|
|
1511
1516
|
)
|
|
1512
1517
|
response = server_common.make_authenticated_request(
|
|
1513
1518
|
'POST', '/status', json=json.loads(body.model_dump_json()))
|
sky/client/sdk_async.py
CHANGED
|
@@ -576,10 +576,16 @@ async def status(
|
|
|
576
576
|
refresh: common.StatusRefreshMode = common.StatusRefreshMode.NONE,
|
|
577
577
|
all_users: bool = False,
|
|
578
578
|
stream_logs: Optional[StreamConfig] = DEFAULT_STREAM_CONFIG,
|
|
579
|
+
*,
|
|
580
|
+
_include_credentials: bool = False,
|
|
579
581
|
) -> List[Dict[str, Any]]:
|
|
580
582
|
"""Async version of status() that gets cluster statuses."""
|
|
581
|
-
request_id = await context_utils.to_thread(
|
|
582
|
-
|
|
583
|
+
request_id = await context_utils.to_thread(
|
|
584
|
+
sdk.status,
|
|
585
|
+
cluster_names,
|
|
586
|
+
refresh,
|
|
587
|
+
all_users,
|
|
588
|
+
_include_credentials=_include_credentials)
|
|
583
589
|
if stream_logs is not None:
|
|
584
590
|
return await _stream_and_get(request_id, stream_logs)
|
|
585
591
|
else:
|
sky/core.py
CHANGED
|
@@ -96,6 +96,7 @@ def status(
|
|
|
96
96
|
cluster_names: Optional[Union[str, List[str]]] = None,
|
|
97
97
|
refresh: common.StatusRefreshMode = common.StatusRefreshMode.NONE,
|
|
98
98
|
all_users: bool = False,
|
|
99
|
+
include_credentials: bool = False,
|
|
99
100
|
) -> List[responses.StatusResponse]:
|
|
100
101
|
# NOTE(dev): Keep the docstring consistent between the Python API and CLI.
|
|
101
102
|
"""Gets cluster statuses.
|
|
@@ -163,15 +164,19 @@ def status(
|
|
|
163
164
|
provided, all clusters will be queried.
|
|
164
165
|
refresh: whether to query the latest cluster statuses from the cloud
|
|
165
166
|
provider(s).
|
|
167
|
+
include_credentials: whether to fetch ssh credentials for cluster
|
|
168
|
+
(credentials field in responses.StatusResponse)
|
|
166
169
|
|
|
167
170
|
Returns:
|
|
168
171
|
A list of dicts, with each dict containing the information of a
|
|
169
172
|
cluster. If a cluster is found to be terminated or not found, it will
|
|
170
173
|
be omitted from the returned list.
|
|
171
174
|
"""
|
|
172
|
-
clusters = backend_utils.get_clusters(
|
|
173
|
-
|
|
174
|
-
|
|
175
|
+
clusters = backend_utils.get_clusters(
|
|
176
|
+
refresh=refresh,
|
|
177
|
+
cluster_names=cluster_names,
|
|
178
|
+
all_users=all_users,
|
|
179
|
+
include_credentials=include_credentials)
|
|
175
180
|
return [
|
|
176
181
|
responses.StatusResponse.model_validate(cluster) for cluster in clusters
|
|
177
182
|
]
|
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-6e76f636a048e145.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/
|
|
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-6e76f636a048e145.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/EqPZ0ygxa__3XPBVJ9dpy/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_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":"EqPZ0ygxa__3XPBVJ9dpy","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/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-6e76f636a048e145.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-06afb50d25f7c61f.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/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-6e76f636a048e145.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-06afb50d25f7c61f.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_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":"EqPZ0ygxa__3XPBVJ9dpy","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-6e76f636a048e145.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/4676-9da7fdbde90b5549.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-8afcf719ea87debc.js" defer=""></script><script src="/dashboard/_next/static/chunks/6856-049014c6d43d127b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-6c9c09593b1e67b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/9037-89a84fd7fa31362d.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-a0527109c2fab467.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/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-6e76f636a048e145.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/4676-9da7fdbde90b5549.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6990-08b2a1cae076a943.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/1121-8afcf719ea87debc.js" defer=""></script><script src="/dashboard/_next/static/chunks/6856-049014c6d43d127b.js" defer=""></script><script src="/dashboard/_next/static/chunks/6601-06114c982db410b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/3015-6c9c09593b1e67b6.js" defer=""></script><script src="/dashboard/_next/static/chunks/9037-89a84fd7fa31362d.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/clusters/%5Bcluster%5D-a0527109c2fab467.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"EqPZ0ygxa__3XPBVJ9dpy","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-6e76f636a048e145.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-469814d711d63b1b.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/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-6e76f636a048e145.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-469814d711d63b1b.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"EqPZ0ygxa__3XPBVJ9dpy","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-6e76f636a048e145.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/
|
|
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-6e76f636a048e145.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/EqPZ0ygxa__3XPBVJ9dpy/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"EqPZ0ygxa__3XPBVJ9dpy","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-6e76f636a048e145.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/
|
|
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-6e76f636a048e145.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/EqPZ0ygxa__3XPBVJ9dpy/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"EqPZ0ygxa__3XPBVJ9dpy","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-6e76f636a048e145.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-81351f95f3bec08e.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/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-6e76f636a048e145.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-81351f95f3bec08e.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"EqPZ0ygxa__3XPBVJ9dpy","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-6e76f636a048e145.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-c320641c2bcbbea6.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/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-6e76f636a048e145.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-c320641c2bcbbea6.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"EqPZ0ygxa__3XPBVJ9dpy","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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-dd64309c3fe67ed2.js" defer=""></script><script src="/dashboard/_next/static/
|
|
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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/7411-b15471acd2cba716.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/6135-4b4d5e824b7f9d3c.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/%5Bjob%5D-dd64309c3fe67ed2.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs/[job]","query":{},"buildId":"EqPZ0ygxa__3XPBVJ9dpy","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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/pools/%5Bpool%5D-07349868f7905d37.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/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-6e76f636a048e145.js" defer=""></script><script src="/dashboard/_next/static/chunks/framework-cf60a09ccd051a10.js" defer=""></script><script src="/dashboard/_next/static/chunks/main-f15ccb73239a3bf1.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/_app-ce361c6959bc2001.js" defer=""></script><script src="/dashboard/_next/static/chunks/616-3d59f75e2ccf9321.js" defer=""></script><script src="/dashboard/_next/static/chunks/6130-2be46d70a38f1e82.js" defer=""></script><script src="/dashboard/_next/static/chunks/5739-d67458fcb1386c92.js" defer=""></script><script src="/dashboard/_next/static/chunks/1272-1ef0bf0237faccdb.js" defer=""></script><script src="/dashboard/_next/static/chunks/754-d0da8ab45f9509e9.js" defer=""></script><script src="/dashboard/_next/static/chunks/6989-01359c57e018caa4.js" defer=""></script><script src="/dashboard/_next/static/chunks/3850-ff4a9a69d978632b.js" defer=""></script><script src="/dashboard/_next/static/chunks/8969-4a6f1a928fb6d370.js" defer=""></script><script src="/dashboard/_next/static/chunks/pages/jobs/pools/%5Bpool%5D-07349868f7905d37.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_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":"EqPZ0ygxa__3XPBVJ9dpy","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-6e76f636a048e145.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-7421e63ac35f8fce.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/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-6e76f636a048e145.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-7421e63ac35f8fce.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/EqPZ0ygxa__3XPBVJ9dpy/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/jobs","query":{},"buildId":"EqPZ0ygxa__3XPBVJ9dpy","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
|