skypilot-nightly 1.0.0.dev20250724__py3-none-any.whl → 1.0.0.dev20250726__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.

Files changed (73) hide show
  1. sky/__init__.py +2 -2
  2. sky/backends/backend_utils.py +28 -2
  3. sky/backends/cloud_vm_ray_backend.py +1 -1
  4. sky/client/cli/command.py +55 -16
  5. sky/clouds/aws.py +1 -1
  6. sky/clouds/azure.py +1 -1
  7. sky/clouds/cloud.py +1 -1
  8. sky/clouds/cudo.py +1 -1
  9. sky/clouds/do.py +1 -1
  10. sky/clouds/fluidstack.py +1 -1
  11. sky/clouds/gcp.py +1 -1
  12. sky/clouds/hyperbolic.py +1 -1
  13. sky/clouds/ibm.py +1 -1
  14. sky/clouds/kubernetes.py +11 -9
  15. sky/clouds/lambda_cloud.py +1 -1
  16. sky/clouds/nebius.py +1 -1
  17. sky/clouds/oci.py +1 -1
  18. sky/clouds/paperspace.py +1 -1
  19. sky/clouds/runpod.py +1 -1
  20. sky/clouds/scp.py +1 -1
  21. sky/clouds/vast.py +1 -1
  22. sky/clouds/vsphere.py +1 -1
  23. sky/dashboard/out/404.html +1 -1
  24. sky/dashboard/out/_next/static/chunks/{webpack-b6447da22305b14a.js → webpack-a305898dc479711e.js} +1 -1
  25. sky/dashboard/out/clusters/[cluster]/[job].html +1 -1
  26. sky/dashboard/out/clusters/[cluster].html +1 -1
  27. sky/dashboard/out/clusters.html +1 -1
  28. sky/dashboard/out/config.html +1 -1
  29. sky/dashboard/out/index.html +1 -1
  30. sky/dashboard/out/infra/[context].html +1 -1
  31. sky/dashboard/out/infra.html +1 -1
  32. sky/dashboard/out/jobs/[job].html +1 -1
  33. sky/dashboard/out/jobs.html +1 -1
  34. sky/dashboard/out/users.html +1 -1
  35. sky/dashboard/out/volumes.html +1 -1
  36. sky/dashboard/out/workspace/new.html +1 -1
  37. sky/dashboard/out/workspaces/[name].html +1 -1
  38. sky/dashboard/out/workspaces.html +1 -1
  39. sky/global_user_state.py +12 -23
  40. sky/jobs/state.py +12 -24
  41. sky/jobs/utils.py +5 -0
  42. sky/provision/kubernetes/utils.py +9 -0
  43. sky/provision/kubernetes/volume.py +1 -1
  44. sky/resources.py +1 -1
  45. sky/server/common.py +9 -0
  46. sky/server/server.py +3 -0
  47. sky/skylet/job_lib.py +4 -0
  48. sky/skylet/log_lib.py +5 -3
  49. sky/task.py +1 -1
  50. sky/templates/aws-ray.yml.j2 +7 -1
  51. sky/templates/azure-ray.yml.j2 +1 -1
  52. sky/templates/do-ray.yml.j2 +1 -1
  53. sky/templates/kubernetes-ray.yml.j2 +6 -0
  54. sky/templates/lambda-ray.yml.j2 +1 -1
  55. sky/templates/nebius-ray.yml.j2 +1 -1
  56. sky/templates/paperspace-ray.yml.j2 +1 -1
  57. sky/templates/runpod-ray.yml.j2 +1 -1
  58. sky/utils/db/migration_utils.py +60 -19
  59. sky/utils/schemas.py +14 -1
  60. sky/utils/volume.py +78 -0
  61. sky/volumes/__init__.py +13 -0
  62. sky/volumes/client/sdk.py +19 -2
  63. sky/volumes/server/server.py +1 -1
  64. sky/volumes/utils.py +1 -1
  65. sky/volumes/volume.py +0 -73
  66. {skypilot_nightly-1.0.0.dev20250724.dist-info → skypilot_nightly-1.0.0.dev20250726.dist-info}/METADATA +13 -2
  67. {skypilot_nightly-1.0.0.dev20250724.dist-info → skypilot_nightly-1.0.0.dev20250726.dist-info}/RECORD +73 -72
  68. /sky/dashboard/out/_next/static/{BURfWrKsQk9psMPv0OXrh → lVqpIJvikPZAX3dgsm6_q}/_buildManifest.js +0 -0
  69. /sky/dashboard/out/_next/static/{BURfWrKsQk9psMPv0OXrh → lVqpIJvikPZAX3dgsm6_q}/_ssgManifest.js +0 -0
  70. {skypilot_nightly-1.0.0.dev20250724.dist-info → skypilot_nightly-1.0.0.dev20250726.dist-info}/WHEEL +0 -0
  71. {skypilot_nightly-1.0.0.dev20250724.dist-info → skypilot_nightly-1.0.0.dev20250726.dist-info}/entry_points.txt +0 -0
  72. {skypilot_nightly-1.0.0.dev20250724.dist-info → skypilot_nightly-1.0.0.dev20250726.dist-info}/licenses/LICENSE +0 -0
  73. {skypilot_nightly-1.0.0.dev20250724.dist-info → skypilot_nightly-1.0.0.dev20250726.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 = '5b5dfe080437e0b2e58b1e7742c5864a1ebe9432'
8
+ _SKYPILOT_COMMIT_SHA = 'dfa392a8416b3aa6c1e2a88c0d19d954408ca4ea'
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.dev20250724'
38
+ __version__ = '1.0.0.dev20250726'
39
39
  __root_dir__ = os.path.dirname(os.path.abspath(__file__))
40
40
 
41
41
 
@@ -35,6 +35,7 @@ from sky.adaptors import common as adaptors_common
35
35
  from sky.jobs import utils as managed_job_utils
36
36
  from sky.provision import instance_setup
37
37
  from sky.provision.kubernetes import utils as kubernetes_utils
38
+ from sky.server.requests import requests as requests_lib
38
39
  from sky.skylet import constants
39
40
  from sky.usage import usage_lib
40
41
  from sky.utils import cluster_utils
@@ -67,7 +68,7 @@ if typing.TYPE_CHECKING:
67
68
  from sky import task as task_lib
68
69
  from sky.backends import cloud_vm_ray_backend
69
70
  from sky.backends import local_docker_backend
70
- from sky.volumes import volume as volume_lib
71
+ from sky.utils import volume as volume_lib
71
72
  else:
72
73
  yaml = adaptors_common.LazyImport('yaml')
73
74
  requests = adaptors_common.LazyImport('requests')
@@ -798,6 +799,12 @@ def write_cluster_config(
798
799
  'volume_name_on_cloud': vol.volume_config.name_on_cloud,
799
800
  })
800
801
 
802
+ runcmd = skypilot_config.get_effective_region_config(
803
+ cloud=str(to_provision.cloud).lower(),
804
+ region=to_provision.region,
805
+ keys=('post_provision_runcmd',),
806
+ default_value=None)
807
+
801
808
  # Use a tmp file path to avoid incomplete YAML file being re-used in the
802
809
  # future.
803
810
  tmp_yaml_path = yaml_path + '.tmp'
@@ -833,7 +840,7 @@ def write_cluster_config(
833
840
  # User-supplied remote_identity
834
841
  'remote_identity': remote_identity,
835
842
  # The reservation pools that specified by the user. This is
836
- # currently only used by GCP.
843
+ # currently only used by AWS and GCP.
837
844
  'specific_reservations': specific_reservations,
838
845
 
839
846
  # Conda setup
@@ -896,6 +903,10 @@ def write_cluster_config(
896
903
 
897
904
  # Volume mounts
898
905
  'volume_mounts': volume_mount_vars,
906
+
907
+ # runcmd to append to the cloud-init cloud config passed to the
908
+ # machine's UserData. This is currently only used by AWS.
909
+ 'runcmd': runcmd,
899
910
  }),
900
911
  output_path=tmp_yaml_path)
901
912
  config_dict['cluster_name'] = cluster_name
@@ -2831,6 +2842,21 @@ def get_clusters(
2831
2842
  force_refresh_statuses = None
2832
2843
 
2833
2844
  def _refresh_cluster(cluster_name):
2845
+ # TODO(syang): we should try not to leak
2846
+ # request info in backend_utils.py.
2847
+ # Refactor this to use some other info to
2848
+ # determine if a launch is in progress.
2849
+ request = requests_lib.get_request_tasks(
2850
+ status=[requests_lib.RequestStatus.RUNNING],
2851
+ cluster_names=[cluster_name],
2852
+ include_request_names=['sky.launch'])
2853
+ if len(request) > 0:
2854
+ # There is an active launch request on the cluster,
2855
+ # so we don't want to update the cluster status until
2856
+ # the request is completed.
2857
+ logger.debug(f'skipping refresh for cluster {cluster_name} '
2858
+ 'as there is an active launch request')
2859
+ return global_user_state.get_cluster_from_name(cluster_name)
2834
2860
  try:
2835
2861
  record = refresh_cluster_record(
2836
2862
  cluster_name,
@@ -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.volumes import volume as volume_lib
76
+ from sky.utils import volume as volume_lib
77
77
 
78
78
  if typing.TYPE_CHECKING:
79
79
  from sky import dag
sky/client/cli/command.py CHANGED
@@ -24,6 +24,7 @@ listed in "sky --help". Take care to put logically connected commands close to
24
24
  each other.
25
25
  """
26
26
  import collections
27
+ import concurrent.futures
27
28
  import fnmatch
28
29
  import os
29
30
  import pathlib
@@ -358,6 +359,9 @@ def _install_shell_completion(ctx: click.Context, param: click.Parameter,
358
359
  bashrc_diff = ('\n# For SkyPilot shell completion'
359
360
  '\n. ~/.sky/.sky-complete.bash')
360
361
 
362
+ cmd: Optional[str] = None
363
+ reload_cmd: Optional[str] = None
364
+
361
365
  if value == 'bash':
362
366
  install_cmd = f'_SKY_COMPLETE=bash_source sky > \
363
367
  ~/.sky/.sky-complete.bash && \
@@ -389,6 +393,7 @@ def _install_shell_completion(ctx: click.Context, param: click.Parameter,
389
393
  click.secho(f'Unsupported shell: {value}', fg='red')
390
394
  ctx.exit()
391
395
 
396
+ assert cmd is not None # This should never be None due to ctx.exit() above
392
397
  try:
393
398
  subprocess.run(cmd,
394
399
  shell=True,
@@ -420,6 +425,9 @@ def _uninstall_shell_completion(ctx: click.Context, param: click.Parameter,
420
425
  else:
421
426
  value = os.path.basename(os.environ['SHELL'])
422
427
 
428
+ cmd: Optional[str] = None
429
+ reload_cmd: Optional[str] = None
430
+
423
431
  if value == 'bash':
424
432
  cmd = 'sed -i"" -e "/# For SkyPilot shell completion/d" ~/.bashrc && \
425
433
  sed -i"" -e "/sky-complete.bash/d" ~/.bashrc && \
@@ -444,6 +452,7 @@ def _uninstall_shell_completion(ctx: click.Context, param: click.Parameter,
444
452
  click.secho(f'Unsupported shell: {value}', fg='red')
445
453
  ctx.exit()
446
454
 
455
+ assert cmd is not None # This should never be None due to ctx.exit() above
447
456
  try:
448
457
  subprocess.run(cmd, shell=True, check=True)
449
458
  click.secho(f'Shell completion uninstalled for {value}', fg='green')
@@ -1745,19 +1754,16 @@ def status(verbose: bool, refresh: bool, ip: bool, endpoints: bool,
1745
1754
  # Do not show job queue if user specifies clusters, and if user
1746
1755
  # specifies --ip or --endpoint(s).
1747
1756
  show_managed_jobs = show_managed_jobs and not any([clusters, ip, endpoints])
1748
- if show_managed_jobs:
1749
- managed_jobs_queue_request_id = managed_jobs.queue(refresh=False,
1750
- skip_finished=True,
1751
- all_users=all_users)
1752
1757
  show_endpoints = endpoints or endpoint is not None
1753
1758
  show_single_endpoint = endpoint is not None
1754
1759
  show_services = show_services and not any([clusters, ip, endpoints])
1755
- if show_services:
1756
- # Run the sky serve service query in parallel to speed up the
1757
- # status query.
1758
- service_status_request_id = serve_lib.status(service_names=None)
1759
1760
 
1760
- workspace_request_id = None
1761
+ query_clusters: Optional[List[str]] = None if not clusters else clusters
1762
+ refresh_mode = common.StatusRefreshMode.NONE
1763
+ if refresh:
1764
+ refresh_mode = common.StatusRefreshMode.FORCE
1765
+
1766
+ # Phase 1: Validate arguments for IP/endpoint queries
1761
1767
  if ip or show_endpoints:
1762
1768
  if refresh:
1763
1769
  raise click.UsageError(
@@ -1791,9 +1797,19 @@ def status(verbose: bool, refresh: bool, ip: bool, endpoints: bool,
1791
1797
  flag='ip' if ip else
1792
1798
  ('endpoint port'
1793
1799
  if show_single_endpoint else 'endpoints')))
1794
- else:
1800
+
1801
+ # Phase 2: Parallel submission of all API requests
1802
+ def submit_managed_jobs():
1803
+ return managed_jobs.queue(refresh=False,
1804
+ skip_finished=True,
1805
+ all_users=all_users)
1806
+
1807
+ def submit_services() -> Optional[str]:
1808
+ return serve_lib.status(service_names=None)
1809
+
1810
+ def submit_workspace() -> Optional[str]:
1795
1811
  try:
1796
- workspace_request_id = sdk.workspaces()
1812
+ return sdk.workspaces()
1797
1813
  except RuntimeError:
1798
1814
  # Backward compatibility for API server before #5660.
1799
1815
  # TODO(zhwu): remove this after 0.10.0.
@@ -1802,12 +1818,35 @@ def status(verbose: bool, refresh: bool, ip: bool, endpoints: bool,
1802
1818
  'workspaces. Update with: sky api stop; '
1803
1819
  'sky api start'
1804
1820
  f'{colorama.Style.RESET_ALL}')
1805
- workspace_request_id = None
1821
+ return None
1806
1822
 
1807
- query_clusters: Optional[List[str]] = None if not clusters else clusters
1808
- refresh_mode = common.StatusRefreshMode.NONE
1809
- if refresh:
1810
- refresh_mode = common.StatusRefreshMode.FORCE
1823
+ managed_jobs_queue_request_id = None
1824
+ service_status_request_id = None
1825
+ workspace_request_id = None
1826
+
1827
+ # Submit all requests in parallel
1828
+ with concurrent.futures.ThreadPoolExecutor(max_workers=1) as executor:
1829
+ if show_managed_jobs:
1830
+ managed_jobs_request_future = executor.submit(submit_managed_jobs)
1831
+ if show_services:
1832
+ services_request_future = executor.submit(submit_services)
1833
+ if not (ip or show_endpoints):
1834
+ workspace_request_future = executor.submit(submit_workspace)
1835
+
1836
+ # Get the request IDs
1837
+ if show_managed_jobs:
1838
+ managed_jobs_queue_request_id = managed_jobs_request_future.result()
1839
+ if show_services:
1840
+ service_status_request_id = services_request_future.result()
1841
+ if not (ip or show_endpoints):
1842
+ workspace_request_id = workspace_request_future.result()
1843
+
1844
+ managed_jobs_queue_request_id = '' if not managed_jobs_queue_request_id \
1845
+ else managed_jobs_queue_request_id
1846
+ service_status_request_id = '' if not service_status_request_id \
1847
+ else service_status_request_id
1848
+
1849
+ # Phase 3: Get cluster records and handle special cases
1811
1850
  cluster_records = _get_cluster_records_and_set_ssh_config(
1812
1851
  query_clusters, refresh_mode, all_users)
1813
1852
 
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.volumes import volume as volume_lib
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
@@ -24,7 +24,7 @@ from sky.utils import ux_utils
24
24
 
25
25
  if typing.TYPE_CHECKING:
26
26
  from sky import resources
27
- from sky.volumes import volume as volume_lib
27
+ from sky.utils import volume as volume_lib
28
28
 
29
29
  logger = sky_logging.init_logger(__name__)
30
30
 
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.volumes import volume as volume_lib
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.volumes import volume as volume_lib
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
@@ -14,7 +14,7 @@ from sky.utils import resources_utils
14
14
 
15
15
  if typing.TYPE_CHECKING:
16
16
  from sky import resources as resources_lib
17
- from sky.volumes import volume as volume_lib
17
+ from sky.utils import volume as volume_lib
18
18
 
19
19
  _CREDENTIAL_FILE = 'config.yaml'
20
20
 
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.volumes import volume as volume_lib
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.volumes import volume as volume_lib
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.volumes import volume as volume_lib
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.volumes import volume as volume_lib
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.volumes import volume as volume_lib
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 currently not supported in '
88
- f'{_REPR}.'),
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
- # Nebius (GCP environment variables are handled directly in
620
- # the template)
621
- if (network_type == KubernetesHighPerformanceNetworkType.NEBIUS
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(
@@ -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.volumes import volume as volume_lib
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
@@ -16,7 +16,7 @@ from sky.utils import resources_utils
16
16
 
17
17
  if typing.TYPE_CHECKING:
18
18
  from sky import resources as resources_lib
19
- from sky.volumes import volume as volume_lib
19
+ from sky.utils import volume as volume_lib
20
20
 
21
21
  _INDENT_PREFIX = ' '
22
22
 
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.volumes import volume as volume_lib
43
+ from sky.utils import volume as volume_lib
44
44
 
45
45
  logger = logging.getLogger(__name__)
46
46
 
sky/clouds/paperspace.py CHANGED
@@ -14,7 +14,7 @@ if typing.TYPE_CHECKING:
14
14
  import requests
15
15
 
16
16
  from sky import resources as resources_lib
17
- from sky.volumes import volume as volume_lib
17
+ from sky.utils import volume as volume_lib
18
18
  else:
19
19
  requests = adaptors_common.LazyImport('requests')
20
20
 
sky/clouds/runpod.py CHANGED
@@ -10,7 +10,7 @@ from sky.utils import resources_utils
10
10
 
11
11
  if typing.TYPE_CHECKING:
12
12
  from sky import resources as resources_lib
13
- from sky.volumes import volume as volume_lib
13
+ from sky.utils import volume as volume_lib
14
14
 
15
15
  _CREDENTIAL_FILES = [
16
16
  'config.toml',
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.volumes import volume as volume_lib
22
+ from sky.utils import volume as volume_lib
23
23
 
24
24
  _CREDENTIAL_FILES = [
25
25
  'scp_credential',
sky/clouds/vast.py CHANGED
@@ -10,7 +10,7 @@ from sky.utils import resources_utils
10
10
 
11
11
  if typing.TYPE_CHECKING:
12
12
  from sky import resources as resources_lib
13
- from sky.volumes import volume as volume_lib
13
+ from sky.utils import volume as volume_lib
14
14
 
15
15
 
16
16
  @registry.CLOUD_REGISTRY.register
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.volumes import volume as volume_lib
21
+ from sky.utils import volume as volume_lib
22
22
  else:
23
23
  requests = adaptors_common.LazyImport('requests')
24
24
 
@@ -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-b6447da22305b14a.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/BURfWrKsQk9psMPv0OXrh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/BURfWrKsQk9psMPv0OXrh/_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":"BURfWrKsQk9psMPv0OXrh","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
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/lVqpIJvikPZAX3dgsm6_q/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/lVqpIJvikPZAX3dgsm6_q/_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":"lVqpIJvikPZAX3dgsm6_q","assetPrefix":"/dashboard","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
@@ -1 +1 @@
1
- !function(){"use strict";var e,t,n,r,c,o,f,u,i,a={},s={};function d(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={exports:{}},r=!0;try{a[e](n,n.exports,d),r=!1}finally{r&&delete s[e]}return n.exports}d.m=a,e=[],d.O=function(t,n,r,c){if(n){c=c||0;for(var o=e.length;o>0&&e[o-1][2]>c;o--)e[o]=e[o-1];e[o]=[n,r,c];return}for(var f=1/0,o=0;o<e.length;o++){for(var n=e[o][0],r=e[o][1],c=e[o][2],u=!0,i=0;i<n.length;i++)f>=c&&Object.keys(d.O).every(function(e){return d.O[e](n[i])})?n.splice(i--,1):(u=!1,c<f&&(f=c));if(u){e.splice(o--,1);var a=r();void 0!==a&&(t=a)}}return t},d.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},d.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var c=Object.create(null);d.r(c);var o={};t=t||[null,n({}),n([]),n(n)];for(var f=2&r&&e;"object"==typeof f&&!~t.indexOf(f);f=n(f))Object.getOwnPropertyNames(f).forEach(function(t){o[t]=function(){return e[t]}});return o.default=function(){return e},d.d(c,o),c},d.d=function(e,t){for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce(function(t,n){return d.f[n](e,t),t},[]))},d.u=function(e){return 2350===e?"static/chunks/2350.23778a2b19aabd33.js":2369===e?"static/chunks/2369.2d6e4757f8dfc2b7.js":3937===e?"static/chunks/3937.d7f1c55d1916c7f2.js":9025===e?"static/chunks/9025.4a9099bdf3ed4875.js":4937===e?"static/chunks/4937.d75809403fc264ac.js":9984===e?"static/chunks/9984.0460de9d3adf5582.js":2003===e?"static/chunks/2003.b82e6db40ec4c463.js":9847===e?"static/chunks/9847.387abf8a14d722db.js":4725===e?"static/chunks/4725.66125dcd9832aa5d.js":691===e?"static/chunks/691.488b4aef97c28727.js":2641===e?"static/chunks/2641.74c19c4d45a2c034.js":3785===e?"static/chunks/3785.59705416215ff08b.js":4869===e?"static/chunks/4869.da729a7db3a31f43.js":"static/chunks/"+e+"-"+({616:"162f3033ffcd3d31",938:"7ee806653aef0609",1043:"869d9c78bf5dd3df",1141:"e49a159c30a6c4a7",1272:"1ef0bf0237faccdb",1559:"18717d96ef2fcbe9",1664:"d65361e92b85e786",1871:"ea0e7283886407ca",3698:"9fa11dafb5cad4a6",5230:"df791914b54d91d9",5739:"5ea3ffa10fc884f2",6135:"2abbd0352f8ee061",6601:"d4a381403a8bae91",6989:"eab0e9c16b64fd9f",6990:"f64e03df359e04f7",7411:"2cc31dc0fdf2a9ad",8969:"8e0b2055bf5dd499"})[e]+".js"},d.miniCssF=function(e){},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},c="_N_E:",d.l=function(e,t,n,o){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var f,u,i=document.getElementsByTagName("script"),a=0;a<i.length;a++){var s=i[a];if(s.getAttribute("src")==e||s.getAttribute("data-webpack")==c+n){f=s;break}}f||(u=!0,(f=document.createElement("script")).charset="utf-8",f.timeout=120,d.nc&&f.setAttribute("nonce",d.nc),f.setAttribute("data-webpack",c+n),f.src=d.tu(e)),r[e]=[t];var l=function(t,n){f.onerror=f.onload=null,clearTimeout(b);var c=r[e];if(delete r[e],f.parentNode&&f.parentNode.removeChild(f),c&&c.forEach(function(e){return e(n)}),t)return t(n)},b=setTimeout(l.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=l.bind(null,f.onerror),f.onload=l.bind(null,f.onload),u&&document.head.appendChild(f)},d.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.tt=function(){return void 0===o&&(o={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(o=trustedTypes.createPolicy("nextjs#bundler",o))),o},d.tu=function(e){return d.tt().createScriptURL(e)},d.p="/dashboard/_next/",f={2272:0},d.f.j=function(e,t){var n=d.o(f,e)?f[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(2272!=e){var r=new Promise(function(t,r){n=f[e]=[t,r]});t.push(n[2]=r);var c=d.p+d.u(e),o=Error();d.l(c,function(t){if(d.o(f,e)&&(0!==(n=f[e])&&(f[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;o.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",o.name="ChunkLoadError",o.type=r,o.request=c,n[1](o)}},"chunk-"+e,e)}else f[e]=0}},d.O.j=function(e){return 0===f[e]},u=function(e,t){var n,r,c=t[0],o=t[1],u=t[2],i=0;if(c.some(function(e){return 0!==f[e]})){for(n in o)d.o(o,n)&&(d.m[n]=o[n]);if(u)var a=u(d)}for(e&&e(t);i<c.length;i++)r=c[i],d.o(f,r)&&f[r]&&f[r][0](),f[r]=0;return d.O(a)},(i=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(u.bind(null,0)),i.push=u.bind(null,i.push.bind(i)),d.nc=void 0}();
1
+ !function(){"use strict";var e,t,n,r,c,o,f,u,i,a={},s={};function d(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={exports:{}},r=!0;try{a[e](n,n.exports,d),r=!1}finally{r&&delete s[e]}return n.exports}d.m=a,e=[],d.O=function(t,n,r,c){if(n){c=c||0;for(var o=e.length;o>0&&e[o-1][2]>c;o--)e[o]=e[o-1];e[o]=[n,r,c];return}for(var f=1/0,o=0;o<e.length;o++){for(var n=e[o][0],r=e[o][1],c=e[o][2],u=!0,i=0;i<n.length;i++)f>=c&&Object.keys(d.O).every(function(e){return d.O[e](n[i])})?n.splice(i--,1):(u=!1,c<f&&(f=c));if(u){e.splice(o--,1);var a=r();void 0!==a&&(t=a)}}return t},d.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},d.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var c=Object.create(null);d.r(c);var o={};t=t||[null,n({}),n([]),n(n)];for(var f=2&r&&e;"object"==typeof f&&!~t.indexOf(f);f=n(f))Object.getOwnPropertyNames(f).forEach(function(t){o[t]=function(){return e[t]}});return o.default=function(){return e},d.d(c,o),c},d.d=function(e,t){for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce(function(t,n){return d.f[n](e,t),t},[]))},d.u=function(e){return 2350===e?"static/chunks/2350.23778a2b19aabd33.js":2369===e?"static/chunks/2369.2d6e4757f8dfc2b7.js":3937===e?"static/chunks/3937.d7f1c55d1916c7f2.js":9025===e?"static/chunks/9025.4a9099bdf3ed4875.js":4937===e?"static/chunks/4937.d75809403fc264ac.js":9984===e?"static/chunks/9984.0460de9d3adf5582.js":2003===e?"static/chunks/2003.b82e6db40ec4c463.js":691===e?"static/chunks/691.488b4aef97c28727.js":2641===e?"static/chunks/2641.74c19c4d45a2c034.js":9847===e?"static/chunks/9847.387abf8a14d722db.js":4725===e?"static/chunks/4725.66125dcd9832aa5d.js":3785===e?"static/chunks/3785.59705416215ff08b.js":4869===e?"static/chunks/4869.da729a7db3a31f43.js":"static/chunks/"+e+"-"+({616:"162f3033ffcd3d31",938:"7ee806653aef0609",1043:"869d9c78bf5dd3df",1141:"e49a159c30a6c4a7",1272:"1ef0bf0237faccdb",1559:"18717d96ef2fcbe9",1664:"d65361e92b85e786",1871:"ea0e7283886407ca",3698:"9fa11dafb5cad4a6",5230:"df791914b54d91d9",5739:"5ea3ffa10fc884f2",6135:"2abbd0352f8ee061",6601:"d4a381403a8bae91",6989:"eab0e9c16b64fd9f",6990:"f64e03df359e04f7",7411:"2cc31dc0fdf2a9ad",8969:"8e0b2055bf5dd499"})[e]+".js"},d.miniCssF=function(e){},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},c="_N_E:",d.l=function(e,t,n,o){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var f,u,i=document.getElementsByTagName("script"),a=0;a<i.length;a++){var s=i[a];if(s.getAttribute("src")==e||s.getAttribute("data-webpack")==c+n){f=s;break}}f||(u=!0,(f=document.createElement("script")).charset="utf-8",f.timeout=120,d.nc&&f.setAttribute("nonce",d.nc),f.setAttribute("data-webpack",c+n),f.src=d.tu(e)),r[e]=[t];var l=function(t,n){f.onerror=f.onload=null,clearTimeout(b);var c=r[e];if(delete r[e],f.parentNode&&f.parentNode.removeChild(f),c&&c.forEach(function(e){return e(n)}),t)return t(n)},b=setTimeout(l.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=l.bind(null,f.onerror),f.onload=l.bind(null,f.onload),u&&document.head.appendChild(f)},d.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.tt=function(){return void 0===o&&(o={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(o=trustedTypes.createPolicy("nextjs#bundler",o))),o},d.tu=function(e){return d.tt().createScriptURL(e)},d.p="/dashboard/_next/",f={2272:0},d.f.j=function(e,t){var n=d.o(f,e)?f[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(2272!=e){var r=new Promise(function(t,r){n=f[e]=[t,r]});t.push(n[2]=r);var c=d.p+d.u(e),o=Error();d.l(c,function(t){if(d.o(f,e)&&(0!==(n=f[e])&&(f[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),c=t&&t.target&&t.target.src;o.message="Loading chunk "+e+" failed.\n("+r+": "+c+")",o.name="ChunkLoadError",o.type=r,o.request=c,n[1](o)}},"chunk-"+e,e)}else f[e]=0}},d.O.j=function(e){return 0===f[e]},u=function(e,t){var n,r,c=t[0],o=t[1],u=t[2],i=0;if(c.some(function(e){return 0!==f[e]})){for(n in o)d.o(o,n)&&(d.m[n]=o[n]);if(u)var a=u(d)}for(e&&e(t);i<c.length;i++)r=c[i],d.o(f,r)&&f[r]&&f[r][0](),f[r]=0;return d.O(a)},(i=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(u.bind(null,0)),i.push=u.bind(null,i.push.bind(i)),d.nc=void 0}();
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width"/><meta name="next-head-count" content="2"/><link rel="preload" href="/dashboard/_next/static/css/b3227360726f12eb.css" as="style"/><link rel="stylesheet" href="/dashboard/_next/static/css/b3227360726f12eb.css" data-n-g=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/dashboard/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/dashboard/_next/static/chunks/webpack-b6447da22305b14a.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/BURfWrKsQk9psMPv0OXrh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/BURfWrKsQk9psMPv0OXrh/_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":"BURfWrKsQk9psMPv0OXrh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
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/lVqpIJvikPZAX3dgsm6_q/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/lVqpIJvikPZAX3dgsm6_q/_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":"lVqpIJvikPZAX3dgsm6_q","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-b6447da22305b14a.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/BURfWrKsQk9psMPv0OXrh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/BURfWrKsQk9psMPv0OXrh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"BURfWrKsQk9psMPv0OXrh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
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/lVqpIJvikPZAX3dgsm6_q/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/lVqpIJvikPZAX3dgsm6_q/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters/[cluster]","query":{},"buildId":"lVqpIJvikPZAX3dgsm6_q","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-b6447da22305b14a.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/BURfWrKsQk9psMPv0OXrh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/BURfWrKsQk9psMPv0OXrh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"BURfWrKsQk9psMPv0OXrh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
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/lVqpIJvikPZAX3dgsm6_q/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/lVqpIJvikPZAX3dgsm6_q/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/clusters","query":{},"buildId":"lVqpIJvikPZAX3dgsm6_q","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-b6447da22305b14a.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/BURfWrKsQk9psMPv0OXrh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/BURfWrKsQk9psMPv0OXrh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"BURfWrKsQk9psMPv0OXrh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
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/lVqpIJvikPZAX3dgsm6_q/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/lVqpIJvikPZAX3dgsm6_q/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/config","query":{},"buildId":"lVqpIJvikPZAX3dgsm6_q","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-b6447da22305b14a.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/BURfWrKsQk9psMPv0OXrh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/BURfWrKsQk9psMPv0OXrh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"BURfWrKsQk9psMPv0OXrh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
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/lVqpIJvikPZAX3dgsm6_q/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/lVqpIJvikPZAX3dgsm6_q/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/","query":{},"buildId":"lVqpIJvikPZAX3dgsm6_q","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-b6447da22305b14a.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/BURfWrKsQk9psMPv0OXrh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/BURfWrKsQk9psMPv0OXrh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"BURfWrKsQk9psMPv0OXrh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
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/lVqpIJvikPZAX3dgsm6_q/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/lVqpIJvikPZAX3dgsm6_q/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra/[context]","query":{},"buildId":"lVqpIJvikPZAX3dgsm6_q","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-b6447da22305b14a.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/BURfWrKsQk9psMPv0OXrh/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/BURfWrKsQk9psMPv0OXrh/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"BURfWrKsQk9psMPv0OXrh","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>
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/lVqpIJvikPZAX3dgsm6_q/_buildManifest.js" defer=""></script><script src="/dashboard/_next/static/lVqpIJvikPZAX3dgsm6_q/_ssgManifest.js" defer=""></script></head><body><div id="__next"></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/infra","query":{},"buildId":"lVqpIJvikPZAX3dgsm6_q","assetPrefix":"/dashboard","nextExport":true,"autoExport":true,"isFallback":false,"scriptLoader":[]}</script></body></html>