skypilot-nightly 1.0.0.dev20250502__py3-none-any.whl → 1.0.0.dev20251203__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.
- sky/__init__.py +22 -6
- sky/adaptors/aws.py +81 -16
- sky/adaptors/common.py +25 -2
- sky/adaptors/coreweave.py +278 -0
- sky/adaptors/do.py +8 -2
- sky/adaptors/gcp.py +11 -0
- sky/adaptors/hyperbolic.py +8 -0
- sky/adaptors/ibm.py +5 -2
- sky/adaptors/kubernetes.py +149 -18
- sky/adaptors/nebius.py +173 -30
- sky/adaptors/primeintellect.py +1 -0
- sky/adaptors/runpod.py +68 -0
- sky/adaptors/seeweb.py +183 -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 +1323 -397
- sky/backends/cloud_vm_ray_backend.py +1749 -1029
- sky/backends/docker_utils.py +1 -1
- sky/backends/local_docker_backend.py +11 -6
- sky/backends/task_codegen.py +633 -0
- sky/backends/wheel_utils.py +55 -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 +90 -49
- 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 +116 -80
- sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_cudo.py +38 -38
- sky/{clouds/service_catalog → catalog}/data_fetchers/fetch_gcp.py +70 -16
- 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 +338 -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 +533 -185
- sky/cli.py +5 -5975
- sky/client/{cli.py → cli/command.py} +2591 -1956
- sky/client/cli/deprecation_utils.py +99 -0
- sky/client/cli/flags.py +359 -0
- sky/client/cli/table_utils.py +322 -0
- sky/client/cli/utils.py +79 -0
- sky/client/common.py +78 -32
- sky/client/oauth.py +82 -0
- sky/client/sdk.py +1219 -319
- sky/client/sdk_async.py +827 -0
- sky/client/service_account_auth.py +47 -0
- sky/cloud_stores.py +82 -3
- sky/clouds/__init__.py +13 -0
- sky/clouds/aws.py +564 -164
- sky/clouds/azure.py +105 -83
- sky/clouds/cloud.py +140 -40
- 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 +570 -162
- sky/clouds/lambda_cloud.py +74 -54
- sky/clouds/nebius.py +210 -81
- 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 -86
- sky/clouds/seeweb.py +477 -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 +231 -167
- sky/clouds/vast.py +99 -77
- sky/clouds/vsphere.py +51 -40
- sky/core.py +375 -173
- sky/dag.py +15 -0
- sky/dashboard/out/404.html +1 -1
- sky/dashboard/out/_next/static/96_E2yl3QAiIJGOYCkSpB/_buildManifest.js +1 -0
- 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-7e202677c42f43fe.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.edd818326d489a1d.js +26 -0
- sky/dashboard/out/_next/static/chunks/3294.20a8540fe697d5ee.js +1 -0
- sky/dashboard/out/_next/static/chunks/3785.7e245f318f9d1121.js +1 -0
- sky/dashboard/out/_next/static/chunks/3800-7b45f9fbb6308557.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.172ede95d1b21022.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/6856-8f27d1c10c98def8.js +1 -0
- sky/dashboard/out/_next/static/chunks/6989-01359c57e018caa4.js +1 -0
- sky/dashboard/out/_next/static/chunks/6990-9146207c4567fdfd.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-019513abc55b3b47.js +1 -0
- sky/dashboard/out/_next/static/chunks/8640.5b9475a2d18c5416.js +16 -0
- sky/dashboard/out/_next/static/chunks/8969-452f9d5cbdd2dc73.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.a536cf6b1fa42355.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]-792db96d918c98c9.js +16 -0
- sky/dashboard/out/_next/static/chunks/pages/clusters/[cluster]-abfcac9c137aa543.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/clusters-ee39056f9851a3ff.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]-d66997e2bfc837cf.js +16 -0
- sky/dashboard/out/_next/static/chunks/pages/jobs/pools/[pool]-9faf940b253e3e06.js +21 -0
- sky/dashboard/out/_next/static/chunks/pages/jobs-2072b48b617989c9.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/users-f42674164aa73423.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]-84a40f8c7c627fe4.js +1 -0
- sky/dashboard/out/_next/static/chunks/pages/workspaces-531b2f8c4bf89f82.js +1 -0
- sky/dashboard/out/_next/static/chunks/webpack-64e05f17bf2cf8ce.js +1 -0
- sky/dashboard/out/_next/static/css/0748ce22df867032.css +3 -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 +1460 -1807
- sky/data/storage_utils.py +43 -57
- sky/exceptions.py +126 -2
- sky/execution.py +216 -63
- sky/global_user_state.py +2390 -586
- sky/jobs/__init__.py +7 -0
- sky/jobs/client/sdk.py +300 -58
- sky/jobs/client/sdk_async.py +161 -0
- sky/jobs/constants.py +15 -8
- sky/jobs/controller.py +848 -275
- sky/jobs/file_content_utils.py +128 -0
- sky/jobs/log_gc.py +193 -0
- sky/jobs/recovery_strategy.py +402 -152
- sky/jobs/scheduler.py +314 -189
- sky/jobs/server/core.py +836 -255
- sky/jobs/server/server.py +156 -115
- sky/jobs/server/utils.py +136 -0
- sky/jobs/state.py +2109 -706
- sky/jobs/utils.py +1306 -215
- 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 +453 -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 +136 -50
- sky/provision/azure/instance.py +11 -6
- 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 +140 -33
- 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 +101 -20
- 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 +919 -280
- sky/provision/kubernetes/manifests/fusermount-server-daemonset.yaml +1 -2
- sky/provision/kubernetes/network.py +27 -17
- sky/provision/kubernetes/network_utils.py +44 -43
- sky/provision/kubernetes/utils.py +1221 -534
- sky/provision/kubernetes/volume.py +343 -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 +237 -137
- 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 +117 -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 +214 -0
- sky/provision/scp/__init__.py +15 -0
- sky/provision/scp/config.py +93 -0
- sky/provision/scp/instance.py +707 -0
- sky/provision/seeweb/__init__.py +11 -0
- sky/provision/seeweb/config.py +13 -0
- sky/provision/seeweb/instance.py +812 -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/volume.py +164 -0
- sky/provision/vsphere/common/ssl_helper.py +1 -1
- sky/provision/vsphere/common/vapiconnect.py +2 -1
- sky/provision/vsphere/common/vim_utils.py +4 -4
- sky/provision/vsphere/instance.py +15 -10
- sky/provision/vsphere/vsphere_utils.py +17 -20
- sky/py.typed +0 -0
- sky/resources.py +845 -119
- sky/schemas/__init__.py +0 -0
- sky/schemas/api/__init__.py +0 -0
- sky/schemas/api/responses.py +227 -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/global_user_state/011_is_ephemeral.py +34 -0
- sky/schemas/db/kv_cache/001_initial_schema.py +29 -0
- sky/schemas/db/script.py.mako +28 -0
- sky/schemas/db/serve_state/001_initial_schema.py +67 -0
- sky/schemas/db/serve_state/002_yaml_content.py +34 -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/db/spot_jobs/006_controller_pid_started_at.py +34 -0
- sky/schemas/db/spot_jobs/007_config_file_content.py +34 -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 +76 -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 +12 -9
- sky/serve/controller.py +68 -17
- sky/serve/load_balancer.py +106 -60
- sky/serve/load_balancing_policies.py +116 -2
- sky/serve/replica_managers.py +434 -249
- sky/serve/serve_rpc_utils.py +179 -0
- sky/serve/serve_state.py +569 -257
- sky/serve/serve_utils.py +775 -265
- 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 +192 -89
- sky/serve/service_spec.py +144 -20
- 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 +202 -0
- sky/server/common.py +478 -182
- sky/server/config.py +85 -23
- sky/server/constants.py +44 -6
- sky/server/daemons.py +295 -0
- sky/server/html/token_page.html +185 -0
- sky/server/metrics.py +160 -0
- sky/server/middleware_utils.py +166 -0
- sky/server/requests/executor.py +558 -138
- sky/server/requests/payloads.py +364 -24
- sky/server/requests/preconditions.py +21 -17
- sky/server/requests/process.py +112 -29
- sky/server/requests/request_names.py +121 -0
- sky/server/requests/requests.py +822 -226
- sky/server/requests/serializers/decoders.py +82 -31
- sky/server/requests/serializers/encoders.py +140 -22
- sky/server/requests/threads.py +117 -0
- sky/server/rest.py +455 -0
- sky/server/server.py +1309 -285
- sky/server/state.py +20 -0
- sky/server/stream_utils.py +327 -61
- sky/server/uvicorn.py +217 -3
- sky/server/versions.py +270 -0
- sky/setup_files/MANIFEST.in +11 -1
- sky/setup_files/alembic.ini +160 -0
- sky/setup_files/dependencies.py +139 -31
- sky/setup_files/setup.py +44 -42
- sky/sky_logging.py +114 -7
- sky/skylet/attempt_skylet.py +106 -24
- sky/skylet/autostop_lib.py +129 -8
- sky/skylet/configs.py +29 -20
- sky/skylet/constants.py +216 -25
- sky/skylet/events.py +101 -21
- sky/skylet/job_lib.py +345 -164
- sky/skylet/log_lib.py +297 -18
- sky/skylet/log_lib.pyi +44 -1
- sky/skylet/providers/ibm/node_provider.py +12 -8
- sky/skylet/providers/ibm/vpc_provider.py +13 -12
- 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/runtime_utils.py +21 -0
- sky/skylet/services.py +568 -0
- sky/skylet/skylet.py +72 -4
- sky/skylet/subprocess_daemon.py +104 -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 +685 -163
- sky/templates/aws-ray.yml.j2 +11 -3
- sky/templates/azure-ray.yml.j2 +2 -1
- sky/templates/cudo-ray.yml.j2 +1 -0
- sky/templates/do-ray.yml.j2 +2 -1
- sky/templates/fluidstack-ray.yml.j2 +1 -0
- sky/templates/gcp-ray.yml.j2 +62 -1
- sky/templates/hyperbolic-ray.yml.j2 +68 -0
- sky/templates/ibm-ray.yml.j2 +2 -1
- sky/templates/jobs-controller.yaml.j2 +27 -24
- sky/templates/kubernetes-loadbalancer.yml.j2 +2 -0
- sky/templates/kubernetes-ray.yml.j2 +611 -50
- sky/templates/lambda-ray.yml.j2 +2 -1
- sky/templates/nebius-ray.yml.j2 +34 -12
- sky/templates/oci-ray.yml.j2 +1 -0
- sky/templates/paperspace-ray.yml.j2 +2 -1
- sky/templates/primeintellect-ray.yml.j2 +72 -0
- sky/templates/runpod-ray.yml.j2 +10 -1
- sky/templates/scp-ray.yml.j2 +4 -50
- sky/templates/seeweb-ray.yml.j2 +171 -0
- sky/templates/shadeform-ray.yml.j2 +73 -0
- sky/templates/sky-serve-controller.yaml.j2 +22 -2
- sky/templates/vast-ray.yml.j2 +1 -0
- sky/templates/vsphere-ray.yml.j2 +1 -0
- sky/templates/websocket_proxy.py +212 -37
- sky/usage/usage_lib.py +31 -15
- sky/users/__init__.py +0 -0
- sky/users/model.conf +15 -0
- sky/users/permission.py +397 -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 +35 -5
- sky/utils/admin_policy_utils.py +84 -38
- sky/utils/annotations.py +38 -5
- sky/utils/asyncio_utils.py +78 -0
- sky/utils/atomic.py +1 -1
- 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 +314 -91
- sky/utils/config_utils.py +74 -5
- sky/utils/context.py +403 -0
- sky/utils/context_utils.py +242 -0
- sky/utils/controller_utils.py +383 -89
- sky/utils/dag_utils.py +31 -12
- sky/utils/db/__init__.py +0 -0
- sky/utils/db/db_utils.py +485 -0
- sky/utils/db/kv_cache.py +149 -0
- sky/utils/db/migration_utils.py +137 -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 +15 -29
- sky/utils/kubernetes/delete_cluster.sh +10 -7
- sky/utils/kubernetes/deploy_ssh_node_pools.py +1177 -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 +18 -8
- sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +2 -1
- sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +16 -16
- sky/utils/kubernetes/kubernetes_deploy_utils.py +284 -114
- sky/utils/kubernetes/rsync_helper.sh +11 -3
- 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 +416 -0
- sky/utils/log_utils.py +82 -107
- 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 +217 -39
- sky/utils/schemas.py +955 -160
- sky/utils/serialize_utils.py +16 -0
- sky/utils/status_lib.py +10 -0
- sky/utils/subprocess_utils.py +29 -15
- sky/utils/tempstore.py +70 -0
- sky/utils/thread_utils.py +91 -0
- sky/utils/timeline.py +26 -53
- sky/utils/ux_utils.py +84 -15
- sky/utils/validator.py +11 -1
- sky/utils/volume.py +165 -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 +150 -0
- sky/volumes/server/__init__.py +0 -0
- sky/volumes/server/core.py +270 -0
- sky/volumes/server/server.py +124 -0
- sky/volumes/volume.py +215 -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
- sky_templates/README.md +3 -0
- sky_templates/__init__.py +3 -0
- sky_templates/ray/__init__.py +0 -0
- sky_templates/ray/start_cluster +183 -0
- sky_templates/ray/stop_cluster +75 -0
- skypilot_nightly-1.0.0.dev20251203.dist-info/METADATA +676 -0
- skypilot_nightly-1.0.0.dev20251203.dist-info/RECORD +611 -0
- {skypilot_nightly-1.0.0.dev20250502.dist-info → skypilot_nightly-1.0.0.dev20251203.dist-info}/WHEEL +1 -1
- skypilot_nightly-1.0.0.dev20251203.dist-info/top_level.txt +2 -0
- 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/GWvVBSCS7FmUiVmjaL1a7/_buildManifest.js +0 -1
- sky/dashboard/out/_next/static/chunks/236-2db3ee3fba33dd9e.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-9e60713e0c441abc.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]-6ac338bc2239cb45.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]-1c519e1afc523dc9.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.dev20250502.dist-info/METADATA +0 -361
- skypilot_nightly-1.0.0.dev20250502.dist-info/RECORD +0 -396
- skypilot_nightly-1.0.0.dev20250502.dist-info/top_level.txt +0 -1
- /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/{GWvVBSCS7FmUiVmjaL1a7 → 96_E2yl3QAiIJGOYCkSpB}/_ssgManifest.js +0 -0
- {skypilot_nightly-1.0.0.dev20250502.dist-info → skypilot_nightly-1.0.0.dev20251203.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250502.dist-info → skypilot_nightly-1.0.0.dev20251203.dist-info}/licenses/LICENSE +0 -0
sky/provision/volume.py
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"""Volume functions for provisioning and deleting ephemeral volumes."""
|
|
2
|
+
|
|
3
|
+
import copy
|
|
4
|
+
from typing import Any, Dict, Optional
|
|
5
|
+
|
|
6
|
+
from sky import clouds
|
|
7
|
+
from sky import global_user_state
|
|
8
|
+
from sky import models
|
|
9
|
+
from sky import sky_logging
|
|
10
|
+
from sky.provision import common as provision_common
|
|
11
|
+
from sky.provision import constants as provision_constants
|
|
12
|
+
from sky.provision.kubernetes import utils as kubernetes_utils
|
|
13
|
+
from sky.utils import volume as volume_utils
|
|
14
|
+
from sky.volumes import volume as volume_lib
|
|
15
|
+
from sky.volumes.server import core as volume_server_core
|
|
16
|
+
|
|
17
|
+
logger = sky_logging.init_logger(__name__)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def _resolve_volume_type(cloud: clouds.Cloud,
|
|
21
|
+
volume_type: Optional[str]) -> str:
|
|
22
|
+
if not volume_type:
|
|
23
|
+
volume_types = None
|
|
24
|
+
for cloud_key, vol_types in volume_lib.CLOUD_TO_VOLUME_TYPE.items():
|
|
25
|
+
if cloud.is_same_cloud(cloud_key):
|
|
26
|
+
volume_types = vol_types
|
|
27
|
+
break
|
|
28
|
+
if volume_types is None:
|
|
29
|
+
raise ValueError(f'No default volume type found for cloud {cloud}')
|
|
30
|
+
if len(volume_types) != 1:
|
|
31
|
+
raise ValueError(
|
|
32
|
+
f'Found multiple volume types for cloud {cloud}: {volume_types}'
|
|
33
|
+
)
|
|
34
|
+
return volume_types[0].value
|
|
35
|
+
supported_volume_types = [
|
|
36
|
+
volume_type.value for volume_type in volume_utils.VolumeType
|
|
37
|
+
]
|
|
38
|
+
volume_type = volume_type.lower()
|
|
39
|
+
if volume_type not in supported_volume_types:
|
|
40
|
+
raise ValueError(
|
|
41
|
+
f'Invalid volume type: {volume_type} for cloud {cloud}')
|
|
42
|
+
return volume_type
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
def _resolve_pvc_volume_config(cloud: clouds.Cloud,
|
|
46
|
+
config: provision_common.ProvisionConfig,
|
|
47
|
+
volume_config: Dict[str, Any]) -> Dict[str, Any]:
|
|
48
|
+
provider_config = config.provider_config
|
|
49
|
+
if not cloud.is_same_cloud(clouds.Kubernetes()):
|
|
50
|
+
raise ValueError(
|
|
51
|
+
f'PVC volume type is only supported on Kubernetes not on {cloud}')
|
|
52
|
+
supported_access_modes = [
|
|
53
|
+
access_mode.value for access_mode in volume_utils.VolumeAccessMode
|
|
54
|
+
]
|
|
55
|
+
access_mode = volume_config.get('access_mode')
|
|
56
|
+
if access_mode is None:
|
|
57
|
+
access_mode = volume_utils.VolumeAccessMode.READ_WRITE_ONCE.value
|
|
58
|
+
volume_config['access_mode'] = access_mode
|
|
59
|
+
elif access_mode not in supported_access_modes:
|
|
60
|
+
raise ValueError(f'Invalid access mode: {access_mode} for PVC')
|
|
61
|
+
if (access_mode == volume_utils.VolumeAccessMode.READ_WRITE_ONCE.value and
|
|
62
|
+
config.count > 1):
|
|
63
|
+
raise ValueError(
|
|
64
|
+
'Access mode ReadWriteOnce is not supported for multi-node'
|
|
65
|
+
' clusters.')
|
|
66
|
+
namespace = kubernetes_utils.get_namespace_from_config(provider_config)
|
|
67
|
+
volume_config['namespace'] = namespace
|
|
68
|
+
return volume_config
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _create_ephemeral_volume(
|
|
72
|
+
cloud: clouds.Cloud, region: str, cluster_name_on_cloud: str,
|
|
73
|
+
config: provision_common.ProvisionConfig,
|
|
74
|
+
volume_mount: volume_utils.VolumeMount
|
|
75
|
+
) -> Optional[volume_utils.VolumeInfo]:
|
|
76
|
+
provider_name = repr(cloud)
|
|
77
|
+
path = volume_mount.path
|
|
78
|
+
volume_config = volume_mount.volume_config
|
|
79
|
+
volume_type = _resolve_volume_type(cloud, volume_config.type)
|
|
80
|
+
labels = volume_config.labels
|
|
81
|
+
if volume_type == volume_utils.VolumeType.PVC.value:
|
|
82
|
+
internal_volume_config = _resolve_pvc_volume_config(
|
|
83
|
+
cloud, config, volume_config.config)
|
|
84
|
+
if labels:
|
|
85
|
+
for key, value in labels.items():
|
|
86
|
+
valid, err_msg = cloud.is_label_valid(key, value)
|
|
87
|
+
if not valid:
|
|
88
|
+
raise ValueError(f'{err_msg}')
|
|
89
|
+
else:
|
|
90
|
+
labels = {}
|
|
91
|
+
labels.update({
|
|
92
|
+
provision_constants.TAG_SKYPILOT_CLUSTER_NAME: cluster_name_on_cloud
|
|
93
|
+
})
|
|
94
|
+
else:
|
|
95
|
+
logger.warning(f'Skipping unsupported ephemeral volume type: '
|
|
96
|
+
f'{volume_type} for cloud {cloud}.')
|
|
97
|
+
return None
|
|
98
|
+
volume_name = volume_config.name
|
|
99
|
+
volume_server_core.volume_apply(
|
|
100
|
+
name=volume_name,
|
|
101
|
+
volume_type=volume_type,
|
|
102
|
+
cloud=provider_name,
|
|
103
|
+
region=region,
|
|
104
|
+
zone=None,
|
|
105
|
+
size=volume_config.size,
|
|
106
|
+
config=internal_volume_config,
|
|
107
|
+
labels=labels,
|
|
108
|
+
is_ephemeral=True,
|
|
109
|
+
)
|
|
110
|
+
volume = global_user_state.get_volume_by_name(volume_name)
|
|
111
|
+
if volume is None:
|
|
112
|
+
raise ValueError(f'Failed to get record for volume: {volume_name}')
|
|
113
|
+
assert 'handle' in volume, 'Volume handle is None.'
|
|
114
|
+
volume_config: models.VolumeConfig = volume['handle']
|
|
115
|
+
volume_info = volume_utils.VolumeInfo(
|
|
116
|
+
name=volume_name,
|
|
117
|
+
path=path,
|
|
118
|
+
volume_name_on_cloud=volume_config.name_on_cloud,
|
|
119
|
+
volume_id_on_cloud=volume_config.id_on_cloud,
|
|
120
|
+
)
|
|
121
|
+
return volume_info
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def provision_ephemeral_volumes(
|
|
125
|
+
cloud: clouds.Cloud,
|
|
126
|
+
region: str,
|
|
127
|
+
cluster_name_on_cloud: str,
|
|
128
|
+
config: provision_common.ProvisionConfig,
|
|
129
|
+
) -> None:
|
|
130
|
+
"""Provision ephemeral volumes for a cluster."""
|
|
131
|
+
provider_config = config.provider_config
|
|
132
|
+
ephemeral_volume_mounts = provider_config.get('ephemeral_volume_specs')
|
|
133
|
+
if not ephemeral_volume_mounts:
|
|
134
|
+
return
|
|
135
|
+
volume_infos = []
|
|
136
|
+
try:
|
|
137
|
+
for ephemeral_volume_mount in ephemeral_volume_mounts:
|
|
138
|
+
mount_copy = copy.deepcopy(ephemeral_volume_mount)
|
|
139
|
+
volume_mount = volume_utils.VolumeMount.from_yaml_config(mount_copy)
|
|
140
|
+
volume_info = _create_ephemeral_volume(cloud, region,
|
|
141
|
+
cluster_name_on_cloud,
|
|
142
|
+
config, volume_mount)
|
|
143
|
+
if volume_info is None:
|
|
144
|
+
continue
|
|
145
|
+
volume_infos.append(volume_info)
|
|
146
|
+
provider_config['ephemeral_volume_infos'] = volume_infos
|
|
147
|
+
except Exception as e: # pylint: disable=broad-exception-caught
|
|
148
|
+
logger.error(f'Failed to provision ephemeral volumes: {e}')
|
|
149
|
+
raise e
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def delete_ephemeral_volumes(provider_config: Dict[str, Any],) -> None:
|
|
153
|
+
"""Provision ephemeral volumes for a cluster."""
|
|
154
|
+
ephemeral_volume_mounts = provider_config.get('ephemeral_volume_specs')
|
|
155
|
+
if not ephemeral_volume_mounts:
|
|
156
|
+
return
|
|
157
|
+
ephemeral_volume_names = []
|
|
158
|
+
for ephemeral_volume_mount in ephemeral_volume_mounts:
|
|
159
|
+
mount_copy = copy.deepcopy(ephemeral_volume_mount)
|
|
160
|
+
volume_mount = volume_utils.VolumeMount.from_yaml_config(mount_copy)
|
|
161
|
+
volume_name = volume_mount.volume_config.name
|
|
162
|
+
ephemeral_volume_names.append(volume_name)
|
|
163
|
+
volume_server_core.volume_delete(names=ephemeral_volume_names,
|
|
164
|
+
ignore_not_found=True)
|
|
@@ -89,5 +89,6 @@ def create_unverified_session(session, suppress_warning=True):
|
|
|
89
89
|
session.verify = False
|
|
90
90
|
if suppress_warning:
|
|
91
91
|
# Suppress unverified https request warnings
|
|
92
|
-
requests.packages.urllib3.disable_warnings(
|
|
92
|
+
requests.packages.urllib3.disable_warnings( # type: ignore
|
|
93
|
+
InsecureRequestWarning)
|
|
93
94
|
return session
|
|
@@ -4,19 +4,19 @@
|
|
|
4
4
|
import re
|
|
5
5
|
import subprocess
|
|
6
6
|
import time
|
|
7
|
-
from typing import List
|
|
7
|
+
from typing import List, Union
|
|
8
8
|
|
|
9
9
|
from sky import sky_logging
|
|
10
10
|
from sky.adaptors import vsphere as vsphere_adaptor
|
|
11
|
-
from sky.
|
|
12
|
-
get_accelerators_from_csv)
|
|
11
|
+
from sky.catalog.data_fetchers.fetch_vsphere import get_accelerators_from_csv
|
|
13
12
|
|
|
14
13
|
logger = sky_logging.init_logger(__name__)
|
|
15
14
|
DISPLAY_CONTROLLER_CLASS_ID_PREFIXES = ['03']
|
|
16
15
|
VMWARE_VIRTUAL_DISPLAY_CONTROLLER_IDS = ['0000:00:0f.0']
|
|
17
16
|
|
|
18
17
|
|
|
19
|
-
def get_objs_by_names(content, vimtype: type,
|
|
18
|
+
def get_objs_by_names(content, vimtype: Union[type, List[type]],
|
|
19
|
+
names: List[str]):
|
|
20
20
|
""" Get the vsphere managed object associated with a given text name
|
|
21
21
|
"""
|
|
22
22
|
# Create a set for the names for faster lookups
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"""Vsphere instance provisioning."""
|
|
2
2
|
import json
|
|
3
3
|
import typing
|
|
4
|
-
from typing import Any, Dict, List, Optional
|
|
4
|
+
from typing import Any, Dict, List, Optional, Tuple
|
|
5
5
|
|
|
6
6
|
from sky import sky_logging
|
|
7
7
|
from sky.adaptors import common as adaptors_common
|
|
8
8
|
from sky.adaptors import vsphere as vsphere_adaptor
|
|
9
|
-
from sky.
|
|
9
|
+
from sky.catalog.common import get_catalog_path
|
|
10
10
|
from sky.provision import common
|
|
11
11
|
from sky.provision.vsphere import vsphere_utils
|
|
12
12
|
from sky.provision.vsphere.common import custom_script as custom_script_lib
|
|
@@ -30,9 +30,10 @@ HEAD_NODE_VALUE = '1'
|
|
|
30
30
|
WORKER_NODE_VALUE = '0'
|
|
31
31
|
|
|
32
32
|
|
|
33
|
-
def run_instances(region: str, cluster_name: str,
|
|
33
|
+
def run_instances(region: str, cluster_name: str, cluster_name_on_cloud: str,
|
|
34
34
|
config: common.ProvisionConfig) -> common.ProvisionRecord:
|
|
35
35
|
"""See sky/provision/__init__.py"""
|
|
36
|
+
del cluster_name # unused
|
|
36
37
|
logger.info('New provision of Vsphere: run_instances().')
|
|
37
38
|
|
|
38
39
|
resumed_instance_ids: List[str] = []
|
|
@@ -40,7 +41,7 @@ def run_instances(region: str, cluster_name: str,
|
|
|
40
41
|
vc_object = _get_vc_object(region)
|
|
41
42
|
vc_object.connect()
|
|
42
43
|
|
|
43
|
-
exist_instances = _get_filtered_instance(vc_object,
|
|
44
|
+
exist_instances = _get_filtered_instance(vc_object, cluster_name_on_cloud,
|
|
44
45
|
config.provider_config)
|
|
45
46
|
head_instance_id = _get_head_instance_id(exist_instances)
|
|
46
47
|
|
|
@@ -89,8 +90,8 @@ def run_instances(region: str, cluster_name: str,
|
|
|
89
90
|
config, region, vc_object)
|
|
90
91
|
# TODO: update logic for multi-node creation
|
|
91
92
|
for _ in range(to_start_num):
|
|
92
|
-
created_instance_uuid = _create_instances(
|
|
93
|
-
region, vc_object,
|
|
93
|
+
created_instance_uuid = _create_instances(cluster_name_on_cloud,
|
|
94
|
+
config, region, vc_object,
|
|
94
95
|
vsphere_cluster_name)
|
|
95
96
|
created_instance_ids.append(created_instance_uuid)
|
|
96
97
|
if head_instance_id is None:
|
|
@@ -104,7 +105,7 @@ def run_instances(region: str, cluster_name: str,
|
|
|
104
105
|
provider_name='vsphere',
|
|
105
106
|
region=region,
|
|
106
107
|
zone=vsphere_cluster_name,
|
|
107
|
-
cluster_name=
|
|
108
|
+
cluster_name=cluster_name_on_cloud,
|
|
108
109
|
head_instance_id=head_instance_id,
|
|
109
110
|
resumed_instance_ids=resumed_instance_ids,
|
|
110
111
|
created_instance_ids=created_instance_ids,
|
|
@@ -393,11 +394,14 @@ def _get_cluster_name_filter(cluster_name_on_cloud):
|
|
|
393
394
|
|
|
394
395
|
|
|
395
396
|
def query_instances(
|
|
397
|
+
cluster_name: str,
|
|
396
398
|
cluster_name_on_cloud: str,
|
|
397
399
|
provider_config: Optional[Dict[str, Any]] = None,
|
|
398
400
|
non_terminated_only: bool = True,
|
|
399
|
-
|
|
401
|
+
retry_if_missing: bool = False,
|
|
402
|
+
) -> Dict[str, Tuple[Optional['status_lib.ClusterStatus'], Optional[str]]]:
|
|
400
403
|
"""See sky/provision/__init__.py"""
|
|
404
|
+
del cluster_name, retry_if_missing # unused
|
|
401
405
|
logger.info('New provision of Vsphere: query_instances().')
|
|
402
406
|
assert provider_config is not None, cluster_name_on_cloud
|
|
403
407
|
region = provider_config['region']
|
|
@@ -413,12 +417,13 @@ def query_instances(
|
|
|
413
417
|
'suspended': None,
|
|
414
418
|
}
|
|
415
419
|
|
|
416
|
-
status
|
|
420
|
+
status: Dict[str, Tuple[Optional['status_lib.ClusterStatus'],
|
|
421
|
+
Optional[str]]] = {}
|
|
417
422
|
for inst in instances:
|
|
418
423
|
stat = status_map[inst.runtime.powerState]
|
|
419
424
|
if non_terminated_only and stat is None:
|
|
420
425
|
continue
|
|
421
|
-
status[inst.summary.config.instanceUuid] = stat
|
|
426
|
+
status[inst.summary.config.instanceUuid] = (stat, None)
|
|
422
427
|
vc_object.disconnect()
|
|
423
428
|
return status
|
|
424
429
|
|
|
@@ -3,25 +3,19 @@
|
|
|
3
3
|
import http.cookies as http_cookies
|
|
4
4
|
import os
|
|
5
5
|
import ssl
|
|
6
|
-
import typing
|
|
7
6
|
from typing import Any, Dict, List, Optional
|
|
8
7
|
|
|
9
8
|
from sky import exceptions
|
|
10
9
|
from sky import sky_logging
|
|
11
|
-
from sky.adaptors import common as adaptors_common
|
|
12
10
|
from sky.adaptors import vsphere as vsphere_adaptor
|
|
13
|
-
from sky.
|
|
14
|
-
from sky.
|
|
15
|
-
from sky.
|
|
16
|
-
|
|
17
|
-
from sky.
|
|
18
|
-
|
|
19
|
-
from sky.clouds.service_catalog.data_fetchers.fetch_vsphere import (
|
|
20
|
-
initialize_images_csv)
|
|
21
|
-
from sky.clouds.service_catalog.data_fetchers.fetch_vsphere import (
|
|
11
|
+
from sky.catalog import vsphere_catalog
|
|
12
|
+
from sky.catalog.common import get_catalog_path
|
|
13
|
+
from sky.catalog.data_fetchers.fetch_vsphere import initialize_accelerators_csv
|
|
14
|
+
from sky.catalog.data_fetchers.fetch_vsphere import initialize_hosts_csv
|
|
15
|
+
from sky.catalog.data_fetchers.fetch_vsphere import initialize_images_csv
|
|
16
|
+
from sky.catalog.data_fetchers.fetch_vsphere import (
|
|
22
17
|
initialize_instance_image_mapping_csv)
|
|
23
|
-
from sky.
|
|
24
|
-
initialize_vms_csv)
|
|
18
|
+
from sky.catalog.data_fetchers.fetch_vsphere import initialize_vms_csv
|
|
25
19
|
from sky.provision.vsphere.common import vim_utils
|
|
26
20
|
from sky.provision.vsphere.common.cls_api_client import ClsApiClient
|
|
27
21
|
from sky.provision.vsphere.common.cls_api_helper import ClsApiHelper
|
|
@@ -32,11 +26,7 @@ from sky.provision.vsphere.common.vim_utils import create_spec_with_script
|
|
|
32
26
|
from sky.provision.vsphere.common.vim_utils import poweron_vm
|
|
33
27
|
from sky.provision.vsphere.common.vim_utils import wait_for_tasks
|
|
34
28
|
from sky.provision.vsphere.common.vim_utils import wait_internal_ip_ready
|
|
35
|
-
|
|
36
|
-
if typing.TYPE_CHECKING:
|
|
37
|
-
import yaml
|
|
38
|
-
else:
|
|
39
|
-
yaml = adaptors_common.LazyImport('yaml')
|
|
29
|
+
from sky.utils import yaml_utils
|
|
40
30
|
|
|
41
31
|
logger = sky_logging.init_logger(__name__)
|
|
42
32
|
|
|
@@ -272,6 +262,10 @@ class VsphereClient:
|
|
|
272
262
|
|
|
273
263
|
def get_pbm_manager(self):
|
|
274
264
|
self.connect()
|
|
265
|
+
if self.servicemanager is None:
|
|
266
|
+
raise VsphereError('Failed to connect to vSphere.')
|
|
267
|
+
if self.servicemanager.si is None:
|
|
268
|
+
raise VsphereError('Failed to connect to vSphere.')
|
|
275
269
|
pbm_si, pm_content = self._create_pbm_connection( # pylint: disable=unused-variable
|
|
276
270
|
self.servicemanager.si._stub) # pylint: disable=protected-access
|
|
277
271
|
pm = pm_content.profileManager
|
|
@@ -327,7 +321,7 @@ def get_vsphere_credentials(name=None):
|
|
|
327
321
|
assert os.path.exists(
|
|
328
322
|
credential_path), f'Missing credential file at {credential_path}.'
|
|
329
323
|
with open(credential_path, 'r', encoding='utf-8') as file:
|
|
330
|
-
credential =
|
|
324
|
+
credential = yaml_utils.safe_load(file)
|
|
331
325
|
vcenters = credential['vcenters']
|
|
332
326
|
if name is None:
|
|
333
327
|
return vcenters
|
|
@@ -370,6 +364,8 @@ def initialize_vsphere_data():
|
|
|
370
364
|
vcenter_name = vcenter['name']
|
|
371
365
|
vc_object.connect()
|
|
372
366
|
vc_servicemanager = vc_object.servicemanager
|
|
367
|
+
if vc_servicemanager is None or vc_servicemanager.content is None:
|
|
368
|
+
raise VsphereError('Failed to connect to vSphere.')
|
|
373
369
|
vc_content = vc_servicemanager.content
|
|
374
370
|
|
|
375
371
|
cluster_name_dicts = vc_object.clusters
|
|
@@ -380,4 +376,5 @@ def initialize_vsphere_data():
|
|
|
380
376
|
initialize_images_csv(images_csv_path, vc_object, vcenter_name)
|
|
381
377
|
initialize_instance_image_mapping_csv(vms_csv_path, images_csv_path,
|
|
382
378
|
instance_image_mapping_csv_path)
|
|
383
|
-
vc_object.servicemanager
|
|
379
|
+
if vc_object.servicemanager is not None:
|
|
380
|
+
vc_object.servicemanager.disconnect()
|
sky/py.typed
ADDED
|
File without changes
|