skypilot-nightly 1.0.0.dev20250509__py3-none-any.whl → 1.0.0.dev20251107__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 +22 -6
- sky/adaptors/aws.py +25 -7
- sky/adaptors/common.py +24 -1
- sky/adaptors/coreweave.py +278 -0
- sky/adaptors/do.py +8 -2
- sky/adaptors/hyperbolic.py +8 -0
- sky/adaptors/kubernetes.py +149 -18
- sky/adaptors/nebius.py +170 -17
- sky/adaptors/primeintellect.py +1 -0
- sky/adaptors/runpod.py +68 -0
- sky/adaptors/seeweb.py +167 -0
- sky/adaptors/shadeform.py +89 -0
- sky/admin_policy.py +187 -4
- sky/authentication.py +179 -225
- sky/backends/__init__.py +4 -2
- sky/backends/backend.py +22 -9
- sky/backends/backend_utils.py +1299 -380
- sky/backends/cloud_vm_ray_backend.py +1715 -518
- sky/backends/docker_utils.py +1 -1
- sky/backends/local_docker_backend.py +11 -6
- sky/backends/wheel_utils.py +37 -9
- sky/{clouds/service_catalog → catalog}/__init__.py +21 -19
- sky/{clouds/service_catalog → catalog}/aws_catalog.py +27 -8
- sky/{clouds/service_catalog → catalog}/azure_catalog.py +10 -7
- sky/{clouds/service_catalog → catalog}/common.py +89 -48
- sky/{clouds/service_catalog → catalog}/cudo_catalog.py +8 -5
- sky/{clouds/service_catalog → catalog}/data_fetchers/analyze.py +1 -1
- sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_aws.py +30 -40
- sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_cudo.py +38 -38
- sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_gcp.py +42 -15
- sky/catalog/data_fetchers/fetch_hyperbolic.py +136 -0
- sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_lambda_cloud.py +1 -0
- sky/catalog/data_fetchers/fetch_nebius.py +335 -0
- sky/catalog/data_fetchers/fetch_runpod.py +698 -0
- sky/catalog/data_fetchers/fetch_seeweb.py +329 -0
- sky/catalog/data_fetchers/fetch_shadeform.py +142 -0
- sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_vast.py +1 -1
- sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_vsphere.py +1 -1
- sky/{clouds/service_catalog → catalog}/do_catalog.py +5 -2
- sky/{clouds/service_catalog → catalog}/fluidstack_catalog.py +6 -3
- sky/{clouds/service_catalog → catalog}/gcp_catalog.py +41 -15
- sky/catalog/hyperbolic_catalog.py +136 -0
- sky/{clouds/service_catalog → catalog}/ibm_catalog.py +9 -6
- sky/{clouds/service_catalog → catalog}/kubernetes_catalog.py +36 -24
- sky/{clouds/service_catalog → catalog}/lambda_catalog.py +9 -6
- sky/{clouds/service_catalog → catalog}/nebius_catalog.py +9 -7
- sky/{clouds/service_catalog → catalog}/oci_catalog.py +9 -6
- sky/{clouds/service_catalog → catalog}/paperspace_catalog.py +5 -2
- sky/catalog/primeintellect_catalog.py +95 -0
- sky/{clouds/service_catalog → catalog}/runpod_catalog.py +11 -4
- sky/{clouds/service_catalog → catalog}/scp_catalog.py +9 -6
- sky/catalog/seeweb_catalog.py +184 -0
- sky/catalog/shadeform_catalog.py +165 -0
- sky/catalog/ssh_catalog.py +167 -0
- sky/{clouds/service_catalog → catalog}/vast_catalog.py +6 -3
- sky/{clouds/service_catalog → catalog}/vsphere_catalog.py +5 -2
- sky/check.py +491 -203
- sky/cli.py +5 -6005
- sky/client/{cli.py → cli/command.py} +2477 -1885
- sky/client/cli/deprecation_utils.py +99 -0
- sky/client/cli/flags.py +359 -0
- sky/client/cli/table_utils.py +320 -0
- sky/client/common.py +70 -32
- sky/client/oauth.py +82 -0
- sky/client/sdk.py +1203 -297
- sky/client/sdk_async.py +833 -0
- sky/client/service_account_auth.py +47 -0
- sky/cloud_stores.py +73 -0
- sky/clouds/__init__.py +13 -0
- sky/clouds/aws.py +358 -93
- sky/clouds/azure.py +105 -83
- sky/clouds/cloud.py +127 -36
- sky/clouds/cudo.py +68 -50
- sky/clouds/do.py +66 -48
- sky/clouds/fluidstack.py +63 -44
- sky/clouds/gcp.py +339 -110
- sky/clouds/hyperbolic.py +293 -0
- sky/clouds/ibm.py +70 -49
- sky/clouds/kubernetes.py +563 -162
- sky/clouds/lambda_cloud.py +74 -54
- sky/clouds/nebius.py +206 -80
- sky/clouds/oci.py +88 -66
- sky/clouds/paperspace.py +61 -44
- sky/clouds/primeintellect.py +317 -0
- sky/clouds/runpod.py +164 -74
- sky/clouds/scp.py +89 -83
- sky/clouds/seeweb.py +466 -0
- sky/clouds/shadeform.py +400 -0
- sky/clouds/ssh.py +263 -0
- sky/clouds/utils/aws_utils.py +10 -4
- sky/clouds/utils/gcp_utils.py +87 -11
- sky/clouds/utils/oci_utils.py +38 -14
- sky/clouds/utils/scp_utils.py +177 -124
- sky/clouds/vast.py +99 -77
- sky/clouds/vsphere.py +51 -40
- sky/core.py +349 -139
- sky/dag.py +15 -0
- sky/dashboard/out/404.html +1 -1
- sky/dashboard/out/_next/static/chunks/1141-e6aa9ab418717c59.js +11 -0
- sky/dashboard/out/_next/static/chunks/1272-1ef0bf0237faccdb.js +1 -0
- sky/dashboard/out/_next/static/chunks/1871-74503c8e80fd253b.js +6 -0
- sky/dashboard/out/_next/static/chunks/2260-7703229c33c5ebd5.js +1 -0
- sky/dashboard/out/_next/static/chunks/2350.fab69e61bac57b23.js +1 -0
- sky/dashboard/out/_next/static/chunks/2369.fc20f0c2c8ed9fe7.js +15 -0
- sky/dashboard/out/_next/static/chunks/2755.fff53c4a3fcae910.js +26 -0
- sky/dashboard/out/_next/static/chunks/3294.72362fa129305b19.js +1 -0
- sky/dashboard/out/_next/static/chunks/3785.ad6adaa2a0fa9768.js +1 -0
- sky/dashboard/out/_next/static/chunks/3850-ff4a9a69d978632b.js +1 -0
- sky/dashboard/out/_next/static/chunks/3937.210053269f121201.js +1 -0
- sky/dashboard/out/_next/static/chunks/4725.a830b5c9e7867c92.js +1 -0
- sky/dashboard/out/_next/static/chunks/4937.a2baa2df5572a276.js +15 -0
- sky/dashboard/out/_next/static/chunks/5739-d67458fcb1386c92.js +8 -0
- sky/dashboard/out/_next/static/chunks/6130-2be46d70a38f1e82.js +1 -0
- sky/dashboard/out/_next/static/chunks/616-3d59f75e2ccf9321.js +39 -0
- sky/dashboard/out/_next/static/chunks/6212-7bd06f60ba693125.js +13 -0
- sky/dashboard/out/_next/static/chunks/6601-06114c982db410b6.js +1 -0
- sky/dashboard/out/_next/static/chunks/6856-ef8ba11f96d8c4a3.js +1 -0
- sky/dashboard/out/_next/static/chunks/6989-01359c57e018caa4.js +1 -0
- sky/dashboard/out/_next/static/chunks/6990-32b6e2d3822301fa.js +1 -0
- sky/dashboard/out/_next/static/chunks/7359-c8d04e06886000b3.js +30 -0
- sky/dashboard/out/_next/static/chunks/7411-b15471acd2cba716.js +41 -0
- sky/dashboard/out/_next/static/chunks/7615-3301e838e5f25772.js +1 -0
- sky/dashboard/out/_next/static/chunks/8640.5b9475a2d18c5416.js +16 -0
- sky/dashboard/out/_next/static/chunks/8969-1e4613c651bf4051.js +1 -0
- sky/dashboard/out/_next/static/chunks/9025.fa408f3242e9028d.js +6 -0
- sky/dashboard/out/_next/static/chunks/9353-cff34f7e773b2e2b.js +1 -0
- sky/dashboard/out/_next/static/chunks/9360.7310982cf5a0dc79.js +31 -0
- sky/dashboard/out/_next/static/chunks/9847.3aaca6bb33455140.js +30 -0
- sky/dashboard/out/_next/static/chunks/fd9d1056-86323a29a8f7e46a.js +1 -0
- sky/dashboard/out/_next/static/chunks/framework-cf60a09ccd051a10.js +33 -0
- sky/dashboard/out/_next/static/chunks/main-app-587214043926b3cc.js +1 -0
- sky/dashboard/out/_next/static/chunks/main-f15ccb73239a3bf1.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/_app-bde01e4a2beec258.js +34 -0
- sky/dashboard/out/_next/static/chunks/pages/_error-c66a4e8afc46f17b.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-c736ead69c2d86ec.js +16 -0
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-a37d2063af475a1c.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/clusters-d44859594e6f8064.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/config-dfb9bf07b13045f4.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/index-444f1804401f04ea.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/infra/[context]-c0b5935149902e6f.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/infra-aed0ea19df7cf961.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-5796e8d6aea291a0.js +16 -0
- sky/dashboard/out/_next/static/chunks/pages/jobs/pools/[pool]-6edeb7d06032adfc.js +21 -0
- sky/dashboard/out/_next/static/chunks/pages/jobs-479dde13399cf270.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/users-5ab3b907622cf0fe.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/volumes-b84b948ff357c43e.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/workspace/new-3f88a1c7e86a3f86.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/workspaces/[name]-c5a3eeee1c218af1.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/workspaces-22b23febb3e89ce1.js +1 -0
- sky/dashboard/out/_next/static/chunks/webpack-2679be77fc08a2f8.js +1 -0
- sky/dashboard/out/_next/static/css/0748ce22df867032.css +3 -0
- sky/dashboard/out/_next/static/zB0ed6ge_W1MDszVHhijS/_buildManifest.js +1 -0
- 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 -0
- sky/dashboard/out/index.html +1 -1
- sky/dashboard/out/infra/[context].html +1 -0
- sky/dashboard/out/infra.html +1 -0
- sky/dashboard/out/jobs/[job].html +1 -1
- sky/dashboard/out/jobs/pools/[pool].html +1 -0
- sky/dashboard/out/jobs.html +1 -1
- sky/dashboard/out/users.html +1 -0
- sky/dashboard/out/volumes.html +1 -0
- sky/dashboard/out/workspace/new.html +1 -0
- sky/dashboard/out/workspaces/[name].html +1 -0
- sky/dashboard/out/workspaces.html +1 -0
- sky/data/data_utils.py +137 -1
- sky/data/mounting_utils.py +269 -84
- sky/data/storage.py +1451 -1807
- sky/data/storage_utils.py +43 -57
- sky/exceptions.py +132 -2
- sky/execution.py +206 -63
- sky/global_user_state.py +2374 -586
- sky/jobs/__init__.py +5 -0
- sky/jobs/client/sdk.py +242 -65
- sky/jobs/client/sdk_async.py +143 -0
- sky/jobs/constants.py +9 -8
- sky/jobs/controller.py +839 -277
- sky/jobs/file_content_utils.py +80 -0
- sky/jobs/log_gc.py +201 -0
- sky/jobs/recovery_strategy.py +398 -152
- sky/jobs/scheduler.py +315 -189
- sky/jobs/server/core.py +829 -255
- sky/jobs/server/server.py +156 -115
- sky/jobs/server/utils.py +136 -0
- sky/jobs/state.py +2092 -701
- sky/jobs/utils.py +1242 -160
- sky/logs/__init__.py +21 -0
- sky/logs/agent.py +108 -0
- sky/logs/aws.py +243 -0
- sky/logs/gcp.py +91 -0
- sky/metrics/__init__.py +0 -0
- sky/metrics/utils.py +443 -0
- sky/models.py +78 -1
- sky/optimizer.py +164 -70
- sky/provision/__init__.py +90 -4
- sky/provision/aws/config.py +147 -26
- sky/provision/aws/instance.py +135 -50
- sky/provision/azure/instance.py +10 -5
- sky/provision/common.py +13 -1
- sky/provision/cudo/cudo_machine_type.py +1 -1
- sky/provision/cudo/cudo_utils.py +14 -8
- sky/provision/cudo/cudo_wrapper.py +72 -71
- sky/provision/cudo/instance.py +10 -6
- sky/provision/do/instance.py +10 -6
- sky/provision/do/utils.py +4 -3
- sky/provision/docker_utils.py +114 -23
- sky/provision/fluidstack/instance.py +13 -8
- sky/provision/gcp/__init__.py +1 -0
- sky/provision/gcp/config.py +301 -19
- sky/provision/gcp/constants.py +218 -0
- sky/provision/gcp/instance.py +36 -8
- sky/provision/gcp/instance_utils.py +18 -4
- sky/provision/gcp/volume_utils.py +247 -0
- sky/provision/hyperbolic/__init__.py +12 -0
- sky/provision/hyperbolic/config.py +10 -0
- sky/provision/hyperbolic/instance.py +437 -0
- sky/provision/hyperbolic/utils.py +373 -0
- sky/provision/instance_setup.py +93 -14
- sky/provision/kubernetes/__init__.py +5 -0
- sky/provision/kubernetes/config.py +9 -52
- sky/provision/kubernetes/constants.py +17 -0
- sky/provision/kubernetes/instance.py +789 -247
- sky/provision/kubernetes/manifests/fusermount-server-daemonset.yaml +1 -2
- sky/provision/kubernetes/network.py +27 -17
- sky/provision/kubernetes/network_utils.py +40 -43
- sky/provision/kubernetes/utils.py +1192 -531
- sky/provision/kubernetes/volume.py +282 -0
- sky/provision/lambda_cloud/instance.py +22 -16
- sky/provision/nebius/constants.py +50 -0
- sky/provision/nebius/instance.py +19 -6
- sky/provision/nebius/utils.py +196 -91
- sky/provision/oci/instance.py +10 -5
- sky/provision/paperspace/instance.py +10 -7
- sky/provision/paperspace/utils.py +1 -1
- sky/provision/primeintellect/__init__.py +10 -0
- sky/provision/primeintellect/config.py +11 -0
- sky/provision/primeintellect/instance.py +454 -0
- sky/provision/primeintellect/utils.py +398 -0
- sky/provision/provisioner.py +110 -36
- sky/provision/runpod/__init__.py +5 -0
- sky/provision/runpod/instance.py +27 -6
- sky/provision/runpod/utils.py +51 -18
- sky/provision/runpod/volume.py +180 -0
- sky/provision/scp/__init__.py +15 -0
- sky/provision/scp/config.py +93 -0
- sky/provision/scp/instance.py +531 -0
- sky/provision/seeweb/__init__.py +11 -0
- sky/provision/seeweb/config.py +13 -0
- sky/provision/seeweb/instance.py +807 -0
- sky/provision/shadeform/__init__.py +11 -0
- sky/provision/shadeform/config.py +12 -0
- sky/provision/shadeform/instance.py +351 -0
- sky/provision/shadeform/shadeform_utils.py +83 -0
- sky/provision/ssh/__init__.py +18 -0
- sky/provision/vast/instance.py +13 -8
- sky/provision/vast/utils.py +10 -7
- sky/provision/vsphere/common/vim_utils.py +1 -2
- sky/provision/vsphere/instance.py +15 -10
- sky/provision/vsphere/vsphere_utils.py +9 -19
- sky/py.typed +0 -0
- sky/resources.py +844 -118
- sky/schemas/__init__.py +0 -0
- sky/schemas/api/__init__.py +0 -0
- sky/schemas/api/responses.py +225 -0
- sky/schemas/db/README +4 -0
- sky/schemas/db/env.py +90 -0
- sky/schemas/db/global_user_state/001_initial_schema.py +124 -0
- sky/schemas/db/global_user_state/002_add_workspace_to_cluster_history.py +35 -0
- sky/schemas/db/global_user_state/003_fix_initial_revision.py +61 -0
- sky/schemas/db/global_user_state/004_is_managed.py +34 -0
- sky/schemas/db/global_user_state/005_cluster_event.py +32 -0
- sky/schemas/db/global_user_state/006_provision_log.py +41 -0
- sky/schemas/db/global_user_state/007_cluster_event_request_id.py +34 -0
- sky/schemas/db/global_user_state/008_skylet_ssh_tunnel_metadata.py +34 -0
- sky/schemas/db/global_user_state/009_last_activity_and_launched_at.py +89 -0
- sky/schemas/db/global_user_state/010_save_ssh_key.py +66 -0
- sky/schemas/db/script.py.mako +28 -0
- sky/schemas/db/serve_state/001_initial_schema.py +67 -0
- sky/schemas/db/skypilot_config/001_initial_schema.py +30 -0
- sky/schemas/db/spot_jobs/001_initial_schema.py +97 -0
- sky/schemas/db/spot_jobs/002_cluster_pool.py +42 -0
- sky/schemas/db/spot_jobs/003_pool_hash.py +34 -0
- sky/schemas/db/spot_jobs/004_job_file_contents.py +42 -0
- sky/schemas/db/spot_jobs/005_logs_gc.py +38 -0
- sky/schemas/generated/__init__.py +0 -0
- sky/schemas/generated/autostopv1_pb2.py +36 -0
- sky/schemas/generated/autostopv1_pb2.pyi +43 -0
- sky/schemas/generated/autostopv1_pb2_grpc.py +146 -0
- sky/schemas/generated/jobsv1_pb2.py +86 -0
- sky/schemas/generated/jobsv1_pb2.pyi +254 -0
- sky/schemas/generated/jobsv1_pb2_grpc.py +542 -0
- sky/schemas/generated/managed_jobsv1_pb2.py +74 -0
- sky/schemas/generated/managed_jobsv1_pb2.pyi +278 -0
- sky/schemas/generated/managed_jobsv1_pb2_grpc.py +278 -0
- sky/schemas/generated/servev1_pb2.py +58 -0
- sky/schemas/generated/servev1_pb2.pyi +115 -0
- sky/schemas/generated/servev1_pb2_grpc.py +322 -0
- sky/serve/autoscalers.py +357 -5
- sky/serve/client/impl.py +310 -0
- sky/serve/client/sdk.py +47 -139
- sky/serve/client/sdk_async.py +130 -0
- sky/serve/constants.py +10 -8
- sky/serve/controller.py +64 -19
- sky/serve/load_balancer.py +106 -60
- sky/serve/load_balancing_policies.py +115 -1
- sky/serve/replica_managers.py +273 -162
- sky/serve/serve_rpc_utils.py +179 -0
- sky/serve/serve_state.py +554 -251
- sky/serve/serve_utils.py +733 -220
- sky/serve/server/core.py +66 -711
- sky/serve/server/impl.py +1093 -0
- sky/serve/server/server.py +21 -18
- sky/serve/service.py +133 -48
- sky/serve/service_spec.py +135 -16
- sky/serve/spot_placer.py +3 -0
- sky/server/auth/__init__.py +0 -0
- sky/server/auth/authn.py +50 -0
- sky/server/auth/loopback.py +38 -0
- sky/server/auth/oauth2_proxy.py +200 -0
- sky/server/common.py +475 -181
- sky/server/config.py +81 -23
- sky/server/constants.py +44 -6
- sky/server/daemons.py +229 -0
- sky/server/html/token_page.html +185 -0
- sky/server/metrics.py +160 -0
- sky/server/requests/executor.py +528 -138
- sky/server/requests/payloads.py +351 -17
- sky/server/requests/preconditions.py +21 -17
- sky/server/requests/process.py +112 -29
- sky/server/requests/request_names.py +120 -0
- sky/server/requests/requests.py +817 -224
- sky/server/requests/serializers/decoders.py +82 -31
- sky/server/requests/serializers/encoders.py +140 -22
- sky/server/requests/threads.py +106 -0
- sky/server/rest.py +417 -0
- sky/server/server.py +1290 -284
- sky/server/state.py +20 -0
- sky/server/stream_utils.py +345 -57
- sky/server/uvicorn.py +217 -3
- sky/server/versions.py +270 -0
- sky/setup_files/MANIFEST.in +5 -0
- sky/setup_files/alembic.ini +156 -0
- sky/setup_files/dependencies.py +136 -31
- sky/setup_files/setup.py +44 -42
- sky/sky_logging.py +102 -5
- sky/skylet/attempt_skylet.py +1 -0
- sky/skylet/autostop_lib.py +129 -8
- sky/skylet/configs.py +27 -20
- sky/skylet/constants.py +171 -19
- sky/skylet/events.py +105 -21
- sky/skylet/job_lib.py +335 -104
- sky/skylet/log_lib.py +297 -18
- sky/skylet/log_lib.pyi +44 -1
- sky/skylet/ray_patches/__init__.py +17 -3
- sky/skylet/ray_patches/autoscaler.py.diff +18 -0
- sky/skylet/ray_patches/cli.py.diff +19 -0
- sky/skylet/ray_patches/command_runner.py.diff +17 -0
- sky/skylet/ray_patches/log_monitor.py.diff +20 -0
- sky/skylet/ray_patches/resource_demand_scheduler.py.diff +32 -0
- sky/skylet/ray_patches/updater.py.diff +18 -0
- sky/skylet/ray_patches/worker.py.diff +41 -0
- sky/skylet/services.py +564 -0
- sky/skylet/skylet.py +63 -4
- sky/skylet/subprocess_daemon.py +103 -29
- sky/skypilot_config.py +506 -99
- sky/ssh_node_pools/__init__.py +1 -0
- sky/ssh_node_pools/core.py +135 -0
- sky/ssh_node_pools/server.py +233 -0
- sky/task.py +621 -137
- sky/templates/aws-ray.yml.j2 +10 -3
- sky/templates/azure-ray.yml.j2 +1 -1
- sky/templates/do-ray.yml.j2 +1 -1
- sky/templates/gcp-ray.yml.j2 +57 -0
- sky/templates/hyperbolic-ray.yml.j2 +67 -0
- sky/templates/jobs-controller.yaml.j2 +27 -24
- sky/templates/kubernetes-loadbalancer.yml.j2 +2 -0
- sky/templates/kubernetes-ray.yml.j2 +607 -51
- sky/templates/lambda-ray.yml.j2 +1 -1
- sky/templates/nebius-ray.yml.j2 +33 -12
- sky/templates/paperspace-ray.yml.j2 +1 -1
- sky/templates/primeintellect-ray.yml.j2 +71 -0
- sky/templates/runpod-ray.yml.j2 +9 -1
- sky/templates/scp-ray.yml.j2 +3 -50
- sky/templates/seeweb-ray.yml.j2 +108 -0
- sky/templates/shadeform-ray.yml.j2 +72 -0
- sky/templates/sky-serve-controller.yaml.j2 +22 -2
- sky/templates/websocket_proxy.py +178 -18
- sky/usage/usage_lib.py +18 -11
- sky/users/__init__.py +0 -0
- sky/users/model.conf +15 -0
- sky/users/permission.py +387 -0
- sky/users/rbac.py +121 -0
- sky/users/server.py +720 -0
- sky/users/token_service.py +218 -0
- sky/utils/accelerator_registry.py +34 -5
- sky/utils/admin_policy_utils.py +84 -38
- sky/utils/annotations.py +16 -5
- sky/utils/asyncio_utils.py +78 -0
- sky/utils/auth_utils.py +153 -0
- sky/utils/benchmark_utils.py +60 -0
- sky/utils/cli_utils/status_utils.py +159 -86
- sky/utils/cluster_utils.py +31 -9
- sky/utils/command_runner.py +354 -68
- sky/utils/command_runner.pyi +93 -3
- sky/utils/common.py +35 -8
- sky/utils/common_utils.py +310 -87
- sky/utils/config_utils.py +87 -5
- sky/utils/context.py +402 -0
- sky/utils/context_utils.py +222 -0
- sky/utils/controller_utils.py +264 -89
- sky/utils/dag_utils.py +31 -12
- sky/utils/db/__init__.py +0 -0
- sky/utils/db/db_utils.py +470 -0
- sky/utils/db/migration_utils.py +133 -0
- sky/utils/directory_utils.py +12 -0
- sky/utils/env_options.py +13 -0
- sky/utils/git.py +567 -0
- sky/utils/git_clone.sh +460 -0
- sky/utils/infra_utils.py +195 -0
- sky/utils/kubernetes/cleanup-tunnel.sh +62 -0
- sky/utils/kubernetes/config_map_utils.py +133 -0
- sky/utils/kubernetes/create_cluster.sh +13 -27
- sky/utils/kubernetes/delete_cluster.sh +10 -7
- sky/utils/kubernetes/deploy_remote_cluster.py +1299 -0
- sky/utils/kubernetes/exec_kubeconfig_converter.py +22 -31
- sky/utils/kubernetes/generate_kind_config.py +6 -66
- sky/utils/kubernetes/generate_kubeconfig.sh +4 -1
- sky/utils/kubernetes/gpu_labeler.py +5 -5
- sky/utils/kubernetes/kubernetes_deploy_utils.py +354 -47
- sky/utils/kubernetes/ssh-tunnel.sh +379 -0
- sky/utils/kubernetes/ssh_utils.py +221 -0
- sky/utils/kubernetes_enums.py +8 -15
- sky/utils/lock_events.py +94 -0
- sky/utils/locks.py +368 -0
- sky/utils/log_utils.py +300 -6
- sky/utils/perf_utils.py +22 -0
- sky/utils/resource_checker.py +298 -0
- sky/utils/resources_utils.py +249 -32
- sky/utils/rich_utils.py +213 -37
- sky/utils/schemas.py +905 -147
- sky/utils/serialize_utils.py +16 -0
- sky/utils/status_lib.py +10 -0
- sky/utils/subprocess_utils.py +38 -15
- sky/utils/tempstore.py +70 -0
- sky/utils/timeline.py +24 -52
- sky/utils/ux_utils.py +84 -15
- sky/utils/validator.py +11 -1
- sky/utils/volume.py +86 -0
- sky/utils/yaml_utils.py +111 -0
- sky/volumes/__init__.py +13 -0
- sky/volumes/client/__init__.py +0 -0
- sky/volumes/client/sdk.py +149 -0
- sky/volumes/server/__init__.py +0 -0
- sky/volumes/server/core.py +258 -0
- sky/volumes/server/server.py +122 -0
- sky/volumes/volume.py +212 -0
- sky/workspaces/__init__.py +0 -0
- sky/workspaces/core.py +655 -0
- sky/workspaces/server.py +101 -0
- sky/workspaces/utils.py +56 -0
- skypilot_nightly-1.0.0.dev20251107.dist-info/METADATA +675 -0
- skypilot_nightly-1.0.0.dev20251107.dist-info/RECORD +594 -0
- {skypilot_nightly-1.0.0.dev20250509.dist-info → skypilot_nightly-1.0.0.dev20251107.dist-info}/WHEEL +1 -1
- sky/benchmark/benchmark_state.py +0 -256
- sky/benchmark/benchmark_utils.py +0 -641
- sky/clouds/service_catalog/constants.py +0 -7
- sky/dashboard/out/_next/static/LksQgChY5izXjokL3LcEu/_buildManifest.js +0 -1
- sky/dashboard/out/_next/static/chunks/236-f49500b82ad5392d.js +0 -6
- sky/dashboard/out/_next/static/chunks/312-c3c8845990db8ffc.js +0 -15
- sky/dashboard/out/_next/static/chunks/37-0a572fe0dbb89c4d.js +0 -6
- sky/dashboard/out/_next/static/chunks/678-206dddca808e6d16.js +0 -59
- sky/dashboard/out/_next/static/chunks/845-0f8017370869e269.js +0 -1
- sky/dashboard/out/_next/static/chunks/979-7bf73a4c7cea0f5c.js +0 -1
- sky/dashboard/out/_next/static/chunks/fd9d1056-2821b0f0cabcd8bd.js +0 -1
- sky/dashboard/out/_next/static/chunks/framework-87d061ee6ed71b28.js +0 -33
- sky/dashboard/out/_next/static/chunks/main-app-241eb28595532291.js +0 -1
- sky/dashboard/out/_next/static/chunks/main-e0e2335212e72357.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/_app-e6b013bc3f77ad60.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/_error-1be831200e60c5c0.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]/[job]-e15db85d0ea1fbe1.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-f383db7389368ea7.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/clusters-a93b93e10b8b074e.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/index-f9f039532ca8cbc4.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/jobs/[job]-03f279c6741fb48b.js +0 -1
- sky/dashboard/out/_next/static/chunks/pages/jobs-a75029b67aab6a2e.js +0 -1
- sky/dashboard/out/_next/static/chunks/webpack-830f59b8404e96b8.js +0 -1
- sky/dashboard/out/_next/static/css/c6933bbb2ce7f4dd.css +0 -3
- sky/jobs/dashboard/dashboard.py +0 -223
- sky/jobs/dashboard/static/favicon.ico +0 -0
- sky/jobs/dashboard/templates/index.html +0 -831
- sky/jobs/server/dashboard_utils.py +0 -69
- sky/skylet/providers/scp/__init__.py +0 -2
- sky/skylet/providers/scp/config.py +0 -149
- sky/skylet/providers/scp/node_provider.py +0 -578
- sky/templates/kubernetes-ssh-jump.yml.j2 +0 -94
- sky/utils/db_utils.py +0 -100
- sky/utils/kubernetes/deploy_remote_cluster.sh +0 -308
- sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -191
- skypilot_nightly-1.0.0.dev20250509.dist-info/METADATA +0 -361
- skypilot_nightly-1.0.0.dev20250509.dist-info/RECORD +0 -396
- /sky/{clouds/service_catalog → catalog}/config.py +0 -0
- /sky/{benchmark → catalog/data_fetchers}/__init__.py +0 -0
- /sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_azure.py +0 -0
- /sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_fluidstack.py +0 -0
- /sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_ibm.py +0 -0
- /sky/{clouds/service_catalog/data_fetchers → client/cli}/__init__.py +0 -0
- /sky/dashboard/out/_next/static/{LksQgChY5izXjokL3LcEu → zB0ed6ge_W1MDszVHhijS}/_ssgManifest.js +0 -0
- {skypilot_nightly-1.0.0.dev20250509.dist-info → skypilot_nightly-1.0.0.dev20251107.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250509.dist-info → skypilot_nightly-1.0.0.dev20251107.dist-info}/licenses/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250509.dist-info → skypilot_nightly-1.0.0.dev20251107.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# cleanup-tunnel.sh - Script to clean up SSH tunnels for a Kubernetes context
|
|
3
|
+
|
|
4
|
+
# Usage: cleanup-tunnel.sh CONTEXT_NAME
|
|
5
|
+
|
|
6
|
+
CONTEXT="${1:-default}"
|
|
7
|
+
TUNNEL_DIR="$HOME/.sky/ssh_node_pools_info"
|
|
8
|
+
PID_FILE="$TUNNEL_DIR/$CONTEXT-tunnel.pid"
|
|
9
|
+
LOG_FILE="$TUNNEL_DIR/$CONTEXT-tunnel.log"
|
|
10
|
+
LOCK_FILE="$TUNNEL_DIR/$CONTEXT-tunnel.lock"
|
|
11
|
+
|
|
12
|
+
# Get the port from kubeconfig if available
|
|
13
|
+
KUBE_PORT=$(kubectl config view --minify --context="$CONTEXT" -o jsonpath='{.clusters[0].cluster.server}' 2>/dev/null | grep -o ":[0-9]\+" | tr -d ":" || echo "")
|
|
14
|
+
|
|
15
|
+
if [[ -z "$KUBE_PORT" ]]; then
|
|
16
|
+
# Default to 6443 if we can't determine the port
|
|
17
|
+
KUBE_PORT=6443
|
|
18
|
+
echo "$(date): Could not determine port from kubeconfig, using default port $KUBE_PORT" >> "$LOG_FILE"
|
|
19
|
+
else
|
|
20
|
+
echo "$(date): Found port $KUBE_PORT in kubeconfig for context $CONTEXT" >> "$LOG_FILE"
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
# Check if PID file exists
|
|
24
|
+
if [[ -f "$PID_FILE" ]]; then
|
|
25
|
+
OLD_PID=$(cat "$PID_FILE")
|
|
26
|
+
|
|
27
|
+
# Log the cleanup attempt
|
|
28
|
+
echo "$(date): Attempting to clean up tunnel for context $CONTEXT (PID: $OLD_PID, Port: $KUBE_PORT)" >> "$LOG_FILE"
|
|
29
|
+
|
|
30
|
+
# Try to kill the process
|
|
31
|
+
if kill -0 "$OLD_PID" 2>/dev/null; then
|
|
32
|
+
# Process exists, kill it
|
|
33
|
+
kill "$OLD_PID" 2>/dev/null
|
|
34
|
+
|
|
35
|
+
# Wait a moment and check if it's really gone
|
|
36
|
+
sleep 1
|
|
37
|
+
if kill -0 "$OLD_PID" 2>/dev/null; then
|
|
38
|
+
# Still running, force kill
|
|
39
|
+
kill -9 "$OLD_PID" 2>/dev/null
|
|
40
|
+
echo "$(date): Forcefully terminated tunnel process $OLD_PID" >> "$LOG_FILE"
|
|
41
|
+
else
|
|
42
|
+
echo "$(date): Successfully terminated tunnel process $OLD_PID" >> "$LOG_FILE"
|
|
43
|
+
fi
|
|
44
|
+
else
|
|
45
|
+
echo "$(date): No running process found with PID $OLD_PID" >> "$LOG_FILE"
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
# Remove PID file
|
|
49
|
+
rm -f "$PID_FILE"
|
|
50
|
+
else
|
|
51
|
+
echo "$(date): No PID file found for context $CONTEXT. Nothing to clean up." >> "$LOG_FILE"
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
# Clean up lock file if it exists
|
|
55
|
+
rm -f "$LOCK_FILE"
|
|
56
|
+
|
|
57
|
+
# Check if port is still in use
|
|
58
|
+
if nc -z localhost "$KUBE_PORT" 2>/dev/null; then
|
|
59
|
+
echo "$(date): Warning: Port $KUBE_PORT is still in use after cleanup. Another process might be using it." >> "$LOG_FILE"
|
|
60
|
+
fi
|
|
61
|
+
|
|
62
|
+
echo "$(date): Cleanup complete for context $CONTEXT" >> "$LOG_FILE"
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"""Utilities for Kubernetes ConfigMap operations in SkyPilot."""
|
|
2
|
+
import os
|
|
3
|
+
|
|
4
|
+
from sky import sky_logging
|
|
5
|
+
from sky import skypilot_config
|
|
6
|
+
from sky.adaptors import kubernetes
|
|
7
|
+
from sky.utils import yaml_utils
|
|
8
|
+
|
|
9
|
+
logger = sky_logging.init_logger(__name__)
|
|
10
|
+
|
|
11
|
+
# Kubernetes ConfigMap sync constants
|
|
12
|
+
_KUBE_SERVICE_ACCOUNT_PATH = '/var/run/secrets/kubernetes.io/serviceaccount'
|
|
13
|
+
_CONFIGMAP_SYNC_TIMEOUT = 10 # seconds
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def is_running_in_kubernetes() -> bool:
|
|
17
|
+
"""Check if we're running inside a Kubernetes pod."""
|
|
18
|
+
return os.path.exists(f'{_KUBE_SERVICE_ACCOUNT_PATH}/token')
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _get_kubernetes_namespace() -> str:
|
|
22
|
+
"""Get the current Kubernetes namespace from the service account."""
|
|
23
|
+
try:
|
|
24
|
+
namespace_file = f'{_KUBE_SERVICE_ACCOUNT_PATH}/namespace'
|
|
25
|
+
if os.path.exists(namespace_file):
|
|
26
|
+
with open(namespace_file, encoding='utf-8') as f:
|
|
27
|
+
return f.read().strip()
|
|
28
|
+
except (OSError, IOError):
|
|
29
|
+
pass
|
|
30
|
+
return 'default'
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _get_configmap_name() -> str:
|
|
34
|
+
"""Get the ConfigMap name for the SkyPilot config."""
|
|
35
|
+
release_name = (os.getenv('HELM_RELEASE_NAME') or
|
|
36
|
+
os.getenv('SKYPILOT_RELEASE_NAME') or 'skypilot')
|
|
37
|
+
return f'{release_name}-config'
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def initialize_configmap_sync_on_startup(config_file_path: str) -> None:
|
|
41
|
+
"""Initialize ConfigMap sync on API server startup.
|
|
42
|
+
|
|
43
|
+
This syncs existing PVC config to ConfigMap if ConfigMap doesn't exist.
|
|
44
|
+
This handles the upgrade scenario where an existing deployment has
|
|
45
|
+
workspace configs on PVC but no ConfigMap exists.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
config_file_path: Path to the config file to sync.
|
|
49
|
+
"""
|
|
50
|
+
config_file_path = os.path.expanduser(config_file_path)
|
|
51
|
+
if not is_running_in_kubernetes() or not os.path.exists(config_file_path):
|
|
52
|
+
return
|
|
53
|
+
|
|
54
|
+
try:
|
|
55
|
+
namespace = _get_kubernetes_namespace()
|
|
56
|
+
configmap_name = _get_configmap_name()
|
|
57
|
+
|
|
58
|
+
# Check if ConfigMap exists
|
|
59
|
+
try:
|
|
60
|
+
kubernetes.core_api().read_namespaced_config_map(
|
|
61
|
+
name=configmap_name, namespace=namespace)
|
|
62
|
+
# ConfigMap exists, don't overwrite it
|
|
63
|
+
logger.debug(f'ConfigMap {configmap_name} already exists')
|
|
64
|
+
return
|
|
65
|
+
except kubernetes.kubernetes.client.rest.ApiException as e:
|
|
66
|
+
if e.status != 404:
|
|
67
|
+
raise
|
|
68
|
+
# ConfigMap doesn't exist, create it
|
|
69
|
+
|
|
70
|
+
current_config = skypilot_config.parse_and_validate_config_file(
|
|
71
|
+
config_file_path)
|
|
72
|
+
config_yaml = yaml_utils.dump_yaml_str(dict(current_config))
|
|
73
|
+
|
|
74
|
+
configmap_body = {
|
|
75
|
+
'apiVersion': 'v1',
|
|
76
|
+
'kind': 'ConfigMap',
|
|
77
|
+
'metadata': {
|
|
78
|
+
'name': configmap_name,
|
|
79
|
+
'namespace': namespace,
|
|
80
|
+
'labels': {
|
|
81
|
+
'app.kubernetes.io/name': 'skypilot',
|
|
82
|
+
'app.kubernetes.io/component': 'config'
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
'data': {
|
|
86
|
+
'config.yaml': config_yaml
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
kubernetes.core_api().create_namespaced_config_map(
|
|
91
|
+
namespace=namespace,
|
|
92
|
+
body=configmap_body,
|
|
93
|
+
_request_timeout=_CONFIGMAP_SYNC_TIMEOUT)
|
|
94
|
+
|
|
95
|
+
logger.info(f'Synced PVC config to new ConfigMap {configmap_name}')
|
|
96
|
+
|
|
97
|
+
except Exception as e: # pylint: disable=broad-except
|
|
98
|
+
logger.warning(f'Failed to initialize ConfigMap sync: {e}')
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
def patch_configmap_with_config(config, config_file_path: str) -> None:
|
|
102
|
+
"""Patch the Kubernetes ConfigMap with the updated config.
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
config: The updated config to sync to the ConfigMap.
|
|
106
|
+
config_file_path: Path to the config file for fallback sync.
|
|
107
|
+
"""
|
|
108
|
+
if not is_running_in_kubernetes():
|
|
109
|
+
return
|
|
110
|
+
|
|
111
|
+
try:
|
|
112
|
+
namespace = _get_kubernetes_namespace()
|
|
113
|
+
configmap_name = _get_configmap_name()
|
|
114
|
+
config_yaml = yaml_utils.dump_yaml_str(dict(config))
|
|
115
|
+
patch_body = {'data': {'config.yaml': config_yaml}}
|
|
116
|
+
|
|
117
|
+
try:
|
|
118
|
+
kubernetes.core_api().patch_namespaced_config_map(
|
|
119
|
+
name=configmap_name,
|
|
120
|
+
namespace=namespace,
|
|
121
|
+
body=patch_body,
|
|
122
|
+
_request_timeout=_CONFIGMAP_SYNC_TIMEOUT)
|
|
123
|
+
logger.debug(f'Synced config to ConfigMap {configmap_name}')
|
|
124
|
+
except kubernetes.kubernetes.client.rest.ApiException as e:
|
|
125
|
+
if e.status == 404:
|
|
126
|
+
# ConfigMap doesn't exist, create it
|
|
127
|
+
logger.info(f'ConfigMap {configmap_name} not found, creating')
|
|
128
|
+
initialize_configmap_sync_on_startup(config_file_path)
|
|
129
|
+
else:
|
|
130
|
+
raise
|
|
131
|
+
|
|
132
|
+
except Exception as e: # pylint: disable=broad-except
|
|
133
|
+
logger.warning(f'Failed to sync config to ConfigMap: {e}')
|
|
@@ -1,22 +1,19 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# Creates a local Kubernetes cluster using kind with optional GPU support
|
|
3
|
-
# Usage: ./create_cluster.sh [--gpus]
|
|
4
|
-
# Invokes generate_kind_config.py to generate a kind-cluster.yaml with NodePort mappings
|
|
3
|
+
# Usage: ./create_cluster.sh [name] [yaml_path] [--gpus]
|
|
5
4
|
set -e
|
|
6
5
|
|
|
7
6
|
# Images
|
|
8
7
|
IMAGE="us-central1-docker.pkg.dev/skypilot-375900/skypilotk8s/skypilot:latest"
|
|
9
8
|
IMAGE_GPU="us-central1-docker.pkg.dev/skypilot-375900/skypilotk8s/skypilot-gpu:latest"
|
|
10
9
|
|
|
11
|
-
#
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
USER_HASH=$1
|
|
10
|
+
# Arguments
|
|
11
|
+
NAME=$1
|
|
12
|
+
YAML_PATH=$2
|
|
16
13
|
|
|
17
14
|
# Check for GPU flag
|
|
18
15
|
ENABLE_GPUS=false
|
|
19
|
-
if [[ "$
|
|
16
|
+
if [[ "$3" == "--gpus" ]]; then
|
|
20
17
|
ENABLE_GPUS=true
|
|
21
18
|
fi
|
|
22
19
|
|
|
@@ -82,27 +79,16 @@ fi
|
|
|
82
79
|
# ====== End of dependency checks =======
|
|
83
80
|
|
|
84
81
|
# Check if the local cluster already exists
|
|
85
|
-
if kind get clusters | grep -q
|
|
86
|
-
echo "Local cluster already exists. Exiting."
|
|
82
|
+
if kind get clusters | grep -q $NAME; then
|
|
83
|
+
echo "Local cluster $NAME already exists. Exiting."
|
|
87
84
|
# Switch context to the local cluster
|
|
88
|
-
|
|
85
|
+
kind export kubeconfig --name $NAME
|
|
86
|
+
kubectl config use-context kind-$NAME
|
|
89
87
|
exit 100
|
|
90
88
|
fi
|
|
91
89
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
echo "Generating $YAML_PATH"
|
|
95
|
-
|
|
96
|
-
# Add GPUs flag to the generate_kind_config.py command if GPUs are enabled
|
|
97
|
-
if $ENABLE_GPUS; then
|
|
98
|
-
python -m sky.utils.kubernetes.generate_kind_config --path $YAML_PATH --port-start ${PORT_RANGE_START} --port-end ${PORT_RANGE_END} --gpus
|
|
99
|
-
else
|
|
100
|
-
python -m sky.utils.kubernetes.generate_kind_config --path $YAML_PATH --port-start ${PORT_RANGE_START} --port-end ${PORT_RANGE_END}
|
|
101
|
-
fi
|
|
102
|
-
|
|
103
|
-
kind create cluster --config $YAML_PATH --name skypilot
|
|
104
|
-
|
|
105
|
-
echo "Kind cluster created."
|
|
90
|
+
kind create cluster --config $YAML_PATH --name $NAME
|
|
91
|
+
echo "Kind cluster $NAME created."
|
|
106
92
|
|
|
107
93
|
# Function to wait for GPU operator to be correctly installed
|
|
108
94
|
wait_for_gpu_operator_installation() {
|
|
@@ -156,7 +142,7 @@ if $ENABLE_GPUS; then
|
|
|
156
142
|
echo "Enabling GPU support..."
|
|
157
143
|
# Run patch for missing ldconfig.real
|
|
158
144
|
# https://github.com/NVIDIA/nvidia-docker/issues/614#issuecomment-423991632
|
|
159
|
-
docker exec -ti
|
|
145
|
+
docker exec -ti $NAME-control-plane /bin/bash -c '[ ! -f /sbin/ldconfig.real ] && ln -s /sbin/ldconfig /sbin/ldconfig.real || echo "/sbin/ldconfig.real already exists"'
|
|
160
146
|
|
|
161
147
|
echo "Installing NVIDIA GPU operator..."
|
|
162
148
|
# Install the NVIDIA GPU operator
|
|
@@ -184,4 +170,4 @@ if $ENABLE_GPUS; then
|
|
|
184
170
|
echo "GPU support is enabled. Run 'sky show-gpus --cloud kubernetes' to see the GPUs available on the cluster."
|
|
185
171
|
fi
|
|
186
172
|
fi
|
|
187
|
-
echo "Number of CPUs available on the local cluster: $NUM_CPUS"
|
|
173
|
+
echo "Number of CPUs available on the local cluster $NAME: $NUM_CPUS"
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
|
-
# Deletes the local kind cluster
|
|
3
|
-
# Usage: ./delete_cluster.sh
|
|
4
|
-
# Raises error code 100 if the local cluster does not exist
|
|
2
|
+
# Deletes the local kind cluster of [name]
|
|
3
|
+
# Usage: ./delete_cluster.sh [name]
|
|
4
|
+
# Raises error code 100 if the specified local cluster does not exist
|
|
5
5
|
|
|
6
6
|
set -e
|
|
7
|
+
|
|
8
|
+
NAME="${1:-skypilot}"
|
|
9
|
+
|
|
7
10
|
# Check if docker is running
|
|
8
11
|
if ! docker info > /dev/null 2>&1; then
|
|
9
12
|
>&2 echo "Docker is not running. Please start Docker and try again."
|
|
@@ -17,13 +20,13 @@ if ! kind version > /dev/null 2>&1; then
|
|
|
17
20
|
fi
|
|
18
21
|
|
|
19
22
|
# Check if the local cluster exists
|
|
20
|
-
if ! kind get clusters | grep -q
|
|
21
|
-
echo "Local cluster does not exist. Exiting."
|
|
23
|
+
if ! kind get clusters | grep -q $NAME; then
|
|
24
|
+
echo "Local cluster $NAME does not exist. Exiting."
|
|
22
25
|
exit 100
|
|
23
26
|
fi
|
|
24
27
|
|
|
25
|
-
kind delete cluster --name
|
|
26
|
-
echo "Local cluster deleted!"
|
|
28
|
+
kind delete cluster --name $NAME
|
|
29
|
+
echo "Local cluster $NAME deleted!"
|
|
27
30
|
|
|
28
31
|
# Switch to the first available context
|
|
29
32
|
AVAILABLE_CONTEXT=$(kubectl config get-contexts -o name | head -n 1)
|