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/server/requests/process.py
CHANGED
|
@@ -6,6 +6,7 @@ import threading
|
|
|
6
6
|
import time
|
|
7
7
|
from typing import Callable, Dict, Optional, Tuple
|
|
8
8
|
|
|
9
|
+
from sky import exceptions
|
|
9
10
|
from sky.utils import atomic
|
|
10
11
|
from sky.utils import subprocess_utils
|
|
11
12
|
|
|
@@ -67,14 +68,24 @@ class PoolExecutor(concurrent.futures.ProcessPoolExecutor):
|
|
|
67
68
|
|
|
68
69
|
|
|
69
70
|
# Define the worker function outside of the class to avoid pickling self
|
|
70
|
-
def _disposable_worker(fn, initializer
|
|
71
|
-
|
|
71
|
+
def _disposable_worker(fn, initializer, initargs, result_queue, args, kwargs):
|
|
72
|
+
"""The worker function that is used to run the task.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
fn: The function to run.
|
|
76
|
+
initializer: The initializer function to run before running the task.
|
|
77
|
+
initargs: The arguments to pass to the initializer function.
|
|
78
|
+
result_queue: The queue to put the result and exception into.
|
|
79
|
+
args: The arguments to pass to the function.
|
|
80
|
+
kwargs: The keyword arguments to pass to the function.
|
|
81
|
+
"""
|
|
72
82
|
try:
|
|
73
83
|
if initializer is not None:
|
|
74
84
|
initializer(*initargs)
|
|
75
|
-
fn(*args, **kwargs)
|
|
85
|
+
result = fn(*args, **kwargs)
|
|
86
|
+
result_queue.put(result)
|
|
76
87
|
except BaseException as e: # pylint: disable=broad-except
|
|
77
|
-
|
|
88
|
+
result_queue.put(e)
|
|
78
89
|
|
|
79
90
|
|
|
80
91
|
class DisposableExecutor:
|
|
@@ -98,28 +109,52 @@ class DisposableExecutor:
|
|
|
98
109
|
self._initializer: Optional[Callable] = initializer
|
|
99
110
|
self._initargs: Tuple = initargs
|
|
100
111
|
|
|
101
|
-
def _monitor_worker(self, process: multiprocessing.Process
|
|
112
|
+
def _monitor_worker(self, process: multiprocessing.Process,
|
|
113
|
+
future: concurrent.futures.Future,
|
|
114
|
+
result_queue: multiprocessing.Queue) -> None:
|
|
102
115
|
"""Monitor the worker process and cleanup when it's done."""
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
116
|
+
try:
|
|
117
|
+
process.join()
|
|
118
|
+
if not future.cancelled():
|
|
119
|
+
try:
|
|
120
|
+
# Get result from the queue if process completed
|
|
121
|
+
if not result_queue.empty():
|
|
122
|
+
result = result_queue.get(block=False)
|
|
123
|
+
if isinstance(result, BaseException):
|
|
124
|
+
future.set_exception(result)
|
|
125
|
+
else:
|
|
126
|
+
future.set_result(result)
|
|
127
|
+
else:
|
|
128
|
+
# Process ended but no result
|
|
129
|
+
future.set_result(None)
|
|
130
|
+
except (multiprocessing.TimeoutError, BrokenPipeError,
|
|
131
|
+
EOFError) as e:
|
|
132
|
+
future.set_exception(e)
|
|
133
|
+
finally:
|
|
134
|
+
if process.pid:
|
|
135
|
+
with self._lock:
|
|
136
|
+
if process.pid in self.workers:
|
|
137
|
+
del self.workers[process.pid]
|
|
138
|
+
|
|
139
|
+
def submit(self, fn, *args, **kwargs) -> concurrent.futures.Future:
|
|
140
|
+
"""Submit a task for execution and return a Future."""
|
|
141
|
+
future: concurrent.futures.Future = concurrent.futures.Future()
|
|
142
|
+
|
|
113
143
|
if self._shutdown:
|
|
114
|
-
|
|
144
|
+
raise RuntimeError('Cannot submit task after executor is shutdown')
|
|
145
|
+
|
|
115
146
|
with self._lock:
|
|
116
147
|
if (self.max_workers is not None and
|
|
117
148
|
len(self.workers) >= self.max_workers):
|
|
118
|
-
|
|
149
|
+
raise exceptions.ExecutionPoolFullError(
|
|
150
|
+
'Maximum workers reached')
|
|
119
151
|
|
|
152
|
+
result_queue: multiprocessing.Queue = multiprocessing.Queue()
|
|
120
153
|
process = multiprocessing.Process(target=_disposable_worker,
|
|
121
154
|
args=(fn, self._initializer,
|
|
122
|
-
self._initargs,
|
|
155
|
+
self._initargs, result_queue,
|
|
156
|
+
args, kwargs))
|
|
157
|
+
process.daemon = True
|
|
123
158
|
process.start()
|
|
124
159
|
|
|
125
160
|
with self._lock:
|
|
@@ -128,13 +163,13 @@ class DisposableExecutor:
|
|
|
128
163
|
raise RuntimeError('Failed to start process')
|
|
129
164
|
self.workers[pid] = process
|
|
130
165
|
|
|
131
|
-
# Start monitor thread to cleanup the worker process when it's done
|
|
166
|
+
# Start monitor thread to cleanup the worker process when it's done
|
|
132
167
|
monitor_thread = threading.Thread(target=self._monitor_worker,
|
|
133
|
-
args=(process,),
|
|
168
|
+
args=(process, future, result_queue),
|
|
134
169
|
daemon=True)
|
|
135
170
|
monitor_thread.start()
|
|
136
171
|
|
|
137
|
-
return
|
|
172
|
+
return future
|
|
138
173
|
|
|
139
174
|
def has_idle_workers(self) -> bool:
|
|
140
175
|
"""Check if there are any idle workers."""
|
|
@@ -167,18 +202,23 @@ class BurstableExecutor:
|
|
|
167
202
|
burst_workers: int = 0,
|
|
168
203
|
**kwargs):
|
|
169
204
|
if garanteed_workers > 0:
|
|
205
|
+
self._guaranteed_workers = garanteed_workers
|
|
206
|
+
self._guaranteed_pool_kwargs = kwargs
|
|
207
|
+
self._guaranteed_pool_lock = threading.Lock()
|
|
170
208
|
self._executor = PoolExecutor(max_workers=garanteed_workers,
|
|
171
209
|
**kwargs)
|
|
172
210
|
if burst_workers > 0:
|
|
173
211
|
self._burst_executor = DisposableExecutor(max_workers=burst_workers,
|
|
174
212
|
**kwargs)
|
|
175
213
|
|
|
176
|
-
def submit_until_success(self, fn, *args,
|
|
214
|
+
def submit_until_success(self, fn, *args,
|
|
215
|
+
**kwargs) -> concurrent.futures.Future:
|
|
177
216
|
"""Submit a task for execution until success.
|
|
178
217
|
|
|
179
218
|
Prioritizes submitting to the guaranteed pool. If no idle workers
|
|
180
219
|
are available in the guaranteed pool, it will submit to the burst
|
|
181
|
-
pool.
|
|
220
|
+
pool. If the burst pool is full, it will retry the whole process until
|
|
221
|
+
the task is submitted successfully.
|
|
182
222
|
TODO(aylei): this is coupled with executor.RequestWorker since we
|
|
183
223
|
know the worker is dedicated to request scheduling and it either
|
|
184
224
|
blocks on request polling or request submitting. So it is no harm
|
|
@@ -188,21 +228,64 @@ class BurstableExecutor:
|
|
|
188
228
|
|
|
189
229
|
while True:
|
|
190
230
|
if self._executor is not None and self._executor.has_idle_workers():
|
|
191
|
-
self.
|
|
192
|
-
break
|
|
231
|
+
return self._submit_to_guaranteed_pool(fn, *args, **kwargs)
|
|
193
232
|
if (self._burst_executor is not None and
|
|
194
233
|
self._burst_executor.has_idle_workers()):
|
|
195
|
-
|
|
196
|
-
|
|
234
|
+
try:
|
|
235
|
+
fut = self._burst_executor.submit(fn, *args, **kwargs)
|
|
236
|
+
return fut
|
|
237
|
+
except exceptions.ExecutionPoolFullError:
|
|
238
|
+
# The burst pool is full, try the next candidate.
|
|
239
|
+
pass
|
|
197
240
|
if self._executor is not None:
|
|
198
241
|
# No idle workers in either pool, still queue the request
|
|
199
242
|
# to the guaranteed pool to keep behavior consistent.
|
|
200
|
-
self.
|
|
201
|
-
break
|
|
243
|
+
return self._submit_to_guaranteed_pool(fn, *args, **kwargs)
|
|
202
244
|
logger.debug('No guaranteed pool set and the burst pool is full, '
|
|
203
245
|
'retry later.')
|
|
204
246
|
time.sleep(0.1)
|
|
205
247
|
|
|
248
|
+
def _submit_to_guaranteed_pool(self, fn, *args,
|
|
249
|
+
**kwargs) -> concurrent.futures.Future:
|
|
250
|
+
"""Submit to the guaranteed pool with retry.
|
|
251
|
+
|
|
252
|
+
The concurrent.futures.ProcessPoolExecutor will terminate all child
|
|
253
|
+
processes and reject new tasks if any of the child process died, e.g.
|
|
254
|
+
OOM killed. So when the pool is broken, we have to rebuild a new pool
|
|
255
|
+
to execute tasks.
|
|
256
|
+
|
|
257
|
+
Alternatives considered:
|
|
258
|
+
- multiprocessing.Pool: individual process failure does not affect the
|
|
259
|
+
pool, but it lacks of lazy-init support and does not handle process
|
|
260
|
+
failure gracefully.
|
|
261
|
+
- inherit from concurrent.futures.ProcessPoolExecutor: If a child
|
|
262
|
+
process dies when executing a task, we have to set an exception
|
|
263
|
+
in the Future object of the task. But there is a race condition
|
|
264
|
+
that the child process may dies exactly after get the task from
|
|
265
|
+
queue so there is no (obviously) safe way to record process PID
|
|
266
|
+
to task mapping in the current architecture of
|
|
267
|
+
ProcessPoolExecutor. It is more feasible to implement a custom
|
|
268
|
+
ProcessPoolExecutor with an new architecture.
|
|
269
|
+
- a custom ProcessPoolExecutor: non-trivial to implement, keep for
|
|
270
|
+
future improvement as BrokenProcessPool is not expected to be
|
|
271
|
+
a common case, i.e. it usually indicates there a bug elsewhere
|
|
272
|
+
when this happens.
|
|
273
|
+
"""
|
|
274
|
+
with self._guaranteed_pool_lock:
|
|
275
|
+
assert self._executor is not None
|
|
276
|
+
try:
|
|
277
|
+
return self._executor.submit(fn, *args, **kwargs)
|
|
278
|
+
except concurrent.futures.process.BrokenProcessPool as e:
|
|
279
|
+
logger.warning('The guaranteed pool is broken, '
|
|
280
|
+
f'replacing the pool and retrying. Error: {e}')
|
|
281
|
+
broken_pool = self._executor
|
|
282
|
+
threading.Thread(target=broken_pool.shutdown,
|
|
283
|
+
daemon=True).start()
|
|
284
|
+
self._executor = PoolExecutor(
|
|
285
|
+
max_workers=self._guaranteed_workers,
|
|
286
|
+
**self._guaranteed_pool_kwargs)
|
|
287
|
+
return self._submit_to_guaranteed_pool(fn, *args, **kwargs)
|
|
288
|
+
|
|
206
289
|
def shutdown(self) -> None:
|
|
207
290
|
"""Shutdown the executor."""
|
|
208
291
|
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"""Request names."""
|
|
2
|
+
import enum
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class RequestName(str, enum.Enum):
|
|
6
|
+
"""Enum of all the request names."""
|
|
7
|
+
# General requests
|
|
8
|
+
CHECK = 'check'
|
|
9
|
+
ENABLED_CLOUDS = 'enabled_clouds'
|
|
10
|
+
REALTIME_KUBERNETES_GPU_AVAILABILITY = (
|
|
11
|
+
'realtime_kubernetes_gpu_availability')
|
|
12
|
+
KUBERNETES_NODE_INFO = 'kubernetes_node_info'
|
|
13
|
+
STATUS_KUBERNETES = 'status_kubernetes'
|
|
14
|
+
LIST_ACCELERATORS = 'list_accelerators'
|
|
15
|
+
LIST_ACCELERATOR_COUNTS = 'list_accelerator_counts'
|
|
16
|
+
OPTIMIZE = 'optimize'
|
|
17
|
+
# Cluster requests
|
|
18
|
+
CLUSTER_LAUNCH = 'launch'
|
|
19
|
+
CLUSTER_EXEC = 'exec'
|
|
20
|
+
CLUSTER_STOP = 'stop'
|
|
21
|
+
CLUSTER_STATUS = 'status'
|
|
22
|
+
CLUSTER_ENDPOINTS = 'endpoints'
|
|
23
|
+
CLUSTER_DOWN = 'down'
|
|
24
|
+
CLUSTER_START = 'start'
|
|
25
|
+
CLUSTER_AUTOSTOP = 'autostop'
|
|
26
|
+
CLUSTER_QUEUE = 'queue'
|
|
27
|
+
CLUSTER_JOB_STATUS = 'job_status'
|
|
28
|
+
CLUSTER_JOB_CANCEL = 'cancel'
|
|
29
|
+
CLUSTER_JOB_LOGS = 'logs'
|
|
30
|
+
CLUSTER_JOB_DOWNLOAD_LOGS = 'download_logs'
|
|
31
|
+
CLUSTER_COST_REPORT = 'cost_report'
|
|
32
|
+
# Storage requests
|
|
33
|
+
STORAGE_LS = 'storage_ls'
|
|
34
|
+
STORAGE_DELETE = 'storage_delete'
|
|
35
|
+
# Local requests
|
|
36
|
+
LOCAL_UP = 'local_up'
|
|
37
|
+
LOCAL_DOWN = 'local_down'
|
|
38
|
+
# API requests
|
|
39
|
+
API_CANCEL = 'api_cancel'
|
|
40
|
+
ALL_CONTEXTS = 'all_contexts'
|
|
41
|
+
# Managed jobs requests
|
|
42
|
+
JOBS_LAUNCH = 'jobs.launch'
|
|
43
|
+
JOBS_QUEUE = 'jobs.queue'
|
|
44
|
+
JOBS_QUEUE_V2 = 'jobs.queue_v2'
|
|
45
|
+
JOBS_CANCEL = 'jobs.cancel'
|
|
46
|
+
JOBS_LOGS = 'jobs.logs'
|
|
47
|
+
JOBS_DOWNLOAD_LOGS = 'jobs.download_logs'
|
|
48
|
+
JOBS_POOL_APPLY = 'jobs.pool_apply'
|
|
49
|
+
JOBS_POOL_DOWN = 'jobs.pool_down'
|
|
50
|
+
JOBS_POOL_STATUS = 'jobs.pool_status'
|
|
51
|
+
JOBS_POOL_LOGS = 'jobs.pool_logs'
|
|
52
|
+
JOBS_POOL_SYNC_DOWN_LOGS = 'jobs.pool_sync_down_logs'
|
|
53
|
+
# Serve requests
|
|
54
|
+
SERVE_UP = 'serve.up'
|
|
55
|
+
SERVE_UPDATE = 'serve.update'
|
|
56
|
+
SERVE_DOWN = 'serve.down'
|
|
57
|
+
SERVE_TERMINATE_REPLICA = 'serve.terminate_replica'
|
|
58
|
+
SERVE_STATUS = 'serve.status'
|
|
59
|
+
SERVE_LOGS = 'serve.logs'
|
|
60
|
+
SERVE_SYNC_DOWN_LOGS = 'serve.sync_down_logs'
|
|
61
|
+
# Volumes requests
|
|
62
|
+
VOLUME_LIST = 'volume_list'
|
|
63
|
+
VOLUME_DELETE = 'volume_delete'
|
|
64
|
+
VOLUME_APPLY = 'volume_apply'
|
|
65
|
+
# Workspaces requests
|
|
66
|
+
WORKSPACES_GET = 'workspaces.get'
|
|
67
|
+
WORKSPACES_UPDATE = 'workspaces.update'
|
|
68
|
+
WORKSPACES_CREATE = 'workspaces.create'
|
|
69
|
+
WORKSPACES_DELETE = 'workspaces.delete'
|
|
70
|
+
WORKSPACES_GET_CONFIG = 'workspaces.get_config'
|
|
71
|
+
WORKSPACES_UPDATE_CONFIG = 'workspaces.update_config'
|
|
72
|
+
# SSH node pools requests
|
|
73
|
+
SSH_NODE_POOLS_UP = 'ssh_node_pools.up'
|
|
74
|
+
SSH_NODE_POOLS_DOWN = 'ssh_node_pools.down'
|
|
75
|
+
# Internal request daemons
|
|
76
|
+
REQUEST_DAEMON_STATUS_REFRESH = 'status-refresh'
|
|
77
|
+
REQUEST_DAEMON_VOLUME_REFRESH = 'volume-refresh'
|
|
78
|
+
REQUEST_DAEMON_MANAGED_JOB_STATUS_REFRESH = 'managed-job-status-refresh'
|
|
79
|
+
REQUEST_DAEMON_SKY_SERVE_STATUS_REFRESH = 'sky-serve-status-refresh'
|
|
80
|
+
REQUEST_DAEMON_POOL_STATUS_REFRESH = 'pool-status-refresh'
|
|
81
|
+
|
|
82
|
+
def __repr__(self):
|
|
83
|
+
return self.value
|
|
84
|
+
|
|
85
|
+
def __str__(self):
|
|
86
|
+
return self.value
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
class AdminPolicyRequestName(str, enum.Enum):
|
|
90
|
+
"""Enum of all the request names that are
|
|
91
|
+
used for admin policy application."""
|
|
92
|
+
# General requests
|
|
93
|
+
# validate call is not stored in the request db,
|
|
94
|
+
# but is defined here for admin policy application
|
|
95
|
+
VALIDATE = 'validate'
|
|
96
|
+
OPTIMIZE = RequestName.OPTIMIZE.value
|
|
97
|
+
# Cluster requests
|
|
98
|
+
CLUSTER_LAUNCH = RequestName.CLUSTER_LAUNCH.value
|
|
99
|
+
CLUSTER_EXEC = RequestName.CLUSTER_EXEC.value
|
|
100
|
+
# Jobs requests
|
|
101
|
+
JOBS_LAUNCH = RequestName.JOBS_LAUNCH.value
|
|
102
|
+
# jobs launch controller request is not stored in the request db,
|
|
103
|
+
# but is defined here for admin policy application
|
|
104
|
+
JOBS_LAUNCH_CONTROLLER = 'jobs.launch_controller'
|
|
105
|
+
JOBS_POOL_APPLY = RequestName.JOBS_POOL_APPLY.value
|
|
106
|
+
JOBS_LAUNCH_CLUSTER = 'jobs.launch_cluster'
|
|
107
|
+
# Serve requests
|
|
108
|
+
SERVE_UP = RequestName.SERVE_UP.value
|
|
109
|
+
# serve launch controller request is not stored in the request db,
|
|
110
|
+
# but is defined here for admin policy application
|
|
111
|
+
SERVE_LAUNCH_CONTROLLER = 'serve.launch_controller'
|
|
112
|
+
SERVE_UPDATE = RequestName.SERVE_UPDATE.value
|
|
113
|
+
# serve launch replica request is not stored in the request db,
|
|
114
|
+
# but is defined here for admin policy application
|
|
115
|
+
SERVE_LAUNCH_REPLICA = 'serve.launch_replica'
|
|
116
|
+
|
|
117
|
+
def __repr__(self):
|
|
118
|
+
return self.value
|
|
119
|
+
|
|
120
|
+
def __str__(self):
|
|
121
|
+
return self.value
|