skypilot-nightly 1.0.0.dev20250227__tar.gz → 1.0.0.dev20250301__tar.gz
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.
- {skypilot_nightly-1.0.0.dev20250227/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250301}/PKG-INFO +1 -3
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/__init__.py +2 -2
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/backends/backend_utils.py +9 -4
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/cli.py +27 -8
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/client/cli.py +27 -8
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/client/sdk.py +15 -5
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/cloud_stores.py +5 -6
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/gcp.py +14 -2
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/core.py +7 -3
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/data/mounting_utils.py +46 -19
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/exceptions.py +2 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/common.py +62 -57
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/executor.py +7 -6
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/payloads.py +1 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/serializers/decoders.py +7 -4
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/server.py +8 -7
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/setup_files/dependencies.py +1 -1
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/constants.py +4 -2
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/controller_utils.py +9 -5
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/deploy_remote_cluster.sh +65 -23
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/kubernetes_deploy_utils.py +8 -7
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301/skypilot_nightly.egg-info}/PKG-INFO +1 -3
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/skypilot_nightly.egg-info/requires.txt +0 -1
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/MANIFEST.in +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/README.md +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/pyproject.toml +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/setup.cfg +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/cloudflare.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/do.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/docker.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/ibm.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/kubernetes.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/nebius.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/oci.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/runpod.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/vast.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/adaptors/vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/admin_policy.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/authentication.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/backends/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/backends/backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/backends/cloud_vm_ray_backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/backends/docker_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/backends/local_docker_backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/backends/wheel_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/benchmark/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/benchmark/benchmark_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/benchmark/benchmark_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/check.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/client/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/client/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/do.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/fluidstack.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/ibm.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/kubernetes.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/lambda_cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/nebius.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/oci.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/paperspace.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/runpod.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/scp.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/aws_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/azure_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/fetch_vast.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/do_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/kubernetes_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/nebius_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/oci_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/scp_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/vast_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/utils/aws_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/utils/azure_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/utils/gcp_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/utils/oci_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/utils/scp_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/vast.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/clouds/vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/dag.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/data/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/data/data_transfer.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/data/data_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/data/storage.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/data/storage_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/execution.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/global_user_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/client/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/client/sdk.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/controller.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/dashboard/dashboard.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/dashboard/static/favicon.ico +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/dashboard/templates/index.html +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/recovery_strategy.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/scheduler.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/server/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/server/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/server/dashboard_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/server/server.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/state.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/jobs/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/models.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/optimizer.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/aws/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/aws/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/aws/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/aws/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/azure/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/azure/azure-config-template.json +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/azure/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/azure/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/cudo/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/cudo/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/cudo/cudo_machine_type.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/cudo/cudo_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/cudo/cudo_wrapper.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/cudo/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/do/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/do/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/do/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/do/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/do/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/docker_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/fluidstack/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/fluidstack/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/fluidstack/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/gcp/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/gcp/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/gcp/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/gcp/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/gcp/instance_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/gcp/mig_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/instance_setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/network.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/network_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/kubernetes/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/lambda_cloud/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/lambda_cloud/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/lambda_cloud/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/logging.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/metadata_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/nebius/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/nebius/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/nebius/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/nebius/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/oci/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/oci/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/oci/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/oci/query_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/paperspace/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/paperspace/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/paperspace/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/paperspace/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/paperspace/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/provisioner.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/runpod/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/runpod/api/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/runpod/api/commands.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/runpod/api/pods.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/runpod/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/runpod/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/runpod/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vast/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vast/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vast/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vast/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/cls_api_client.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/custom_script.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/id_generator.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/metadata_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/service_manager.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/ssl_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/vapiconnect.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/common/vim_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/provision/vsphere/vsphere_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/resources.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/autoscalers.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/client/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/client/sdk.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/controller.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/load_balancer.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/load_balancing_policies.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/replica_managers.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/serve_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/serve_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/server/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/server/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/server/server.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/service.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/serve/service_spec.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/html/log.html +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/queues/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/queues/mp_queue.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/requests.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/serializers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/requests/serializers/encoders.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/stream_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/setup_files/MANIFEST.in +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/setup_files/setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/sky_logging.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/attempt_skylet.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/autostop_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/configs.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/events.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/job_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/log_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/log_lib.pyi +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/command_runner.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/ibm/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/ibm/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/ibm/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/scp/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/scp/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/providers/scp/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/ray_patches/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/ray_patches/cli.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/ray_patches/updater.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/ray_patches/worker.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/skylet.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skylet/subprocess_daemon.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/skypilot_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/task.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/aws-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/azure-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/cudo-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/do-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/fluidstack-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/gcp-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/ibm-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/jobs-controller.yaml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/kubernetes-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/lambda-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/local-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/nebius-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/oci-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/paperspace-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/runpod-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/scp-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/vast-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/vsphere-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/templates/websocket_proxy.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/usage/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/usage/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/usage/usage_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/accelerator_registry.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/admin_policy_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/annotations.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/cli_utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/cli_utils/status_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/cluster_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/command_runner.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/command_runner.pyi +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/common_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/config_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/control_master_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/dag_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/db_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/env_options.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/create_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/delete_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/exec_kubeconfig_converter.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/generate_kind_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/gpu_labeler.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/rsync_helper.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/kubernetes_enums.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/log_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/message_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/registry.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/resources_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/rich_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/schemas.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/status_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/subprocess_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/timeline.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/ux_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/utils/validator.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/skypilot_nightly.egg-info/SOURCES.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/skypilot_nightly.egg-info/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/skypilot_nightly.egg-info/top_level.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_api.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_cli.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_global_user_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_jobs.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_jobs_and_serve.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_list_accelerators.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_optimizer_dryruns.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_optimizer_random_dag.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_serve_autoscaler.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_smoke.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_storage.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_wheels.py +0 -0
- {skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/tests/test_yaml_parser.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: skypilot-nightly
|
3
|
-
Version: 1.0.0.
|
3
|
+
Version: 1.0.0.dev20250301
|
4
4
|
Summary: SkyPilot: An intercloud broker for the clouds
|
5
5
|
Author: SkyPilot Team
|
6
6
|
License: Apache 2.0
|
@@ -75,7 +75,6 @@ Provides-Extra: docker
|
|
75
75
|
Requires-Dist: docker; extra == "docker"
|
76
76
|
Requires-Dist: ray[default]!=2.6.0,>=2.2.0; extra == "docker"
|
77
77
|
Provides-Extra: lambda
|
78
|
-
Requires-Dist: ray[default]!=2.6.0,>=2.2.0; extra == "lambda"
|
79
78
|
Provides-Extra: cloudflare
|
80
79
|
Requires-Dist: urllib3<2; extra == "cloudflare"
|
81
80
|
Requires-Dist: awscli>=1.27.10; extra == "cloudflare"
|
@@ -132,7 +131,6 @@ Requires-Dist: ibm-cos-sdk; extra == "all"
|
|
132
131
|
Requires-Dist: ray[default]!=2.6.0,>=2.2.0; extra == "all"
|
133
132
|
Requires-Dist: docker; extra == "all"
|
134
133
|
Requires-Dist: ray[default]!=2.6.0,>=2.2.0; extra == "all"
|
135
|
-
Requires-Dist: ray[default]!=2.6.0,>=2.2.0; extra == "all"
|
136
134
|
Requires-Dist: urllib3<2; extra == "all"
|
137
135
|
Requires-Dist: awscli>=1.27.10; extra == "all"
|
138
136
|
Requires-Dist: botocore>=1.29.10; extra == "all"
|
@@ -5,7 +5,7 @@ from typing import Optional
|
|
5
5
|
import urllib.request
|
6
6
|
|
7
7
|
# Replaced with the current commit when building the wheels.
|
8
|
-
_SKYPILOT_COMMIT_SHA = '
|
8
|
+
_SKYPILOT_COMMIT_SHA = 'cefc23846d47d7dacf960093c2001912a83c1162'
|
9
9
|
|
10
10
|
|
11
11
|
def _get_git_commit():
|
@@ -35,7 +35,7 @@ def _get_git_commit():
|
|
35
35
|
|
36
36
|
|
37
37
|
__commit__ = _get_git_commit()
|
38
|
-
__version__ = '1.0.0.
|
38
|
+
__version__ = '1.0.0.dev20250301'
|
39
39
|
__root_dir__ = os.path.dirname(os.path.abspath(__file__))
|
40
40
|
|
41
41
|
|
@@ -1280,12 +1280,17 @@ def parallel_data_transfer_to_nodes(
|
|
1280
1280
|
stream_logs=stream_logs,
|
1281
1281
|
require_outputs=True,
|
1282
1282
|
source_bashrc=source_bashrc)
|
1283
|
-
err_msg = ('
|
1283
|
+
err_msg = (f'{colorama.Style.RESET_ALL}{colorama.Style.DIM}'
|
1284
|
+
f'----- CMD -----\n'
|
1285
|
+
f'{cmd}\n'
|
1286
|
+
f'----- CMD END -----\n'
|
1287
|
+
f'{colorama.Style.RESET_ALL}'
|
1288
|
+
f'{colorama.Fore.RED}'
|
1289
|
+
f'Failed to run command before rsync '
|
1284
1290
|
f'{origin_source} -> {target}. '
|
1285
|
-
'
|
1286
|
-
f'{cmd}')
|
1291
|
+
f'{colorama.Style.RESET_ALL}')
|
1287
1292
|
if log_path != os.devnull:
|
1288
|
-
err_msg +=
|
1293
|
+
err_msg += ux_utils.log_path_hint(log_path)
|
1289
1294
|
subprocess_utils.handle_returncode(rc,
|
1290
1295
|
cmd,
|
1291
1296
|
err_msg,
|
@@ -133,7 +133,11 @@ def _get_cluster_records_and_set_ssh_config(
|
|
133
133
|
# Update the SSH config for all clusters
|
134
134
|
for record in cluster_records:
|
135
135
|
handle = record['handle']
|
136
|
-
|
136
|
+
# During the failover, even though a cluster does not exist, the handle
|
137
|
+
# can still exist in the record, and we check for credentials to avoid
|
138
|
+
# updating the SSH config for non-existent clusters.
|
139
|
+
if (handle is not None and handle.cached_external_ips is not None and
|
140
|
+
'credentials' in record):
|
137
141
|
credentials = record['credentials']
|
138
142
|
if isinstance(handle.launched_resources.cloud, clouds.Kubernetes):
|
139
143
|
# Replace the proxy command to proxy through the SkyPilot API
|
@@ -169,9 +173,9 @@ def _get_cluster_records_and_set_ssh_config(
|
|
169
173
|
handle.ssh_user,
|
170
174
|
)
|
171
175
|
else:
|
172
|
-
# If the cluster is not UP or does not have
|
173
|
-
# the cluster from the SSH config.
|
174
|
-
cluster_utils.SSHConfigHelper.remove_cluster(
|
176
|
+
# If the cluster is not UP or does not have credentials available,
|
177
|
+
# we need to remove the cluster from the SSH config.
|
178
|
+
cluster_utils.SSHConfigHelper.remove_cluster(record['name'])
|
175
179
|
|
176
180
|
# Clean up SSH configs for clusters that do not exist.
|
177
181
|
#
|
@@ -5415,11 +5419,16 @@ def local():
|
|
5415
5419
|
@click.option('--cleanup',
|
5416
5420
|
is_flag=True,
|
5417
5421
|
help='Clean up the remote cluster instead of deploying it.')
|
5422
|
+
@click.option(
|
5423
|
+
'--context-name',
|
5424
|
+
type=str,
|
5425
|
+
required=False,
|
5426
|
+
help='Name to use for the kubeconfig context. Defaults to "default".')
|
5418
5427
|
@local.command('up', cls=_DocumentedCodeCommand)
|
5419
5428
|
@_add_click_options(_COMMON_OPTIONS)
|
5420
5429
|
@usage_lib.entrypoint
|
5421
5430
|
def local_up(gpus: bool, ips: str, ssh_user: str, ssh_key_path: str,
|
5422
|
-
cleanup: bool, async_call: bool):
|
5431
|
+
cleanup: bool, context_name: Optional[str], async_call: bool):
|
5423
5432
|
"""Creates a local or remote cluster."""
|
5424
5433
|
|
5425
5434
|
def _validate_args(ips, ssh_user, ssh_key_path, cleanup):
|
@@ -5464,7 +5473,8 @@ def local_up(gpus: bool, ips: str, ssh_user: str, ssh_key_path: str,
|
|
5464
5473
|
raise click.BadParameter(
|
5465
5474
|
f'Failed to read SSH key file {ssh_key_path}: {str(e)}')
|
5466
5475
|
|
5467
|
-
request_id = sdk.local_up(gpus, ip_list, ssh_user, ssh_key, cleanup
|
5476
|
+
request_id = sdk.local_up(gpus, ip_list, ssh_user, ssh_key, cleanup,
|
5477
|
+
context_name)
|
5468
5478
|
_async_call_or_wait(request_id, async_call, request_name='local up')
|
5469
5479
|
|
5470
5480
|
|
@@ -5500,10 +5510,19 @@ def api():
|
|
5500
5510
|
required=False,
|
5501
5511
|
help=('The host to deploy the SkyPilot API server. To allow '
|
5502
5512
|
'remote access, set this to 0.0.0.0'))
|
5513
|
+
@click.option('--foreground',
|
5514
|
+
is_flag=True,
|
5515
|
+
default=False,
|
5516
|
+
required=False,
|
5517
|
+
help='Run the SkyPilot API server in the foreground and output '
|
5518
|
+
'its logs to stdout/stderr. Allowing external systems '
|
5519
|
+
'to manage the process lifecycle and collect logs directly. '
|
5520
|
+
'This is useful when the API server is managed by systems '
|
5521
|
+
'like systemd and Kubernetes.')
|
5503
5522
|
@usage_lib.entrypoint
|
5504
|
-
def api_start(deploy: bool, host: Optional[str]):
|
5523
|
+
def api_start(deploy: bool, host: Optional[str], foreground: bool):
|
5505
5524
|
"""Starts the SkyPilot API server locally."""
|
5506
|
-
sdk.api_start(deploy=deploy, host=host)
|
5525
|
+
sdk.api_start(deploy=deploy, host=host, foreground=foreground)
|
5507
5526
|
|
5508
5527
|
|
5509
5528
|
@api.command('stop', cls=_DocumentedCodeCommand)
|
@@ -133,7 +133,11 @@ def _get_cluster_records_and_set_ssh_config(
|
|
133
133
|
# Update the SSH config for all clusters
|
134
134
|
for record in cluster_records:
|
135
135
|
handle = record['handle']
|
136
|
-
|
136
|
+
# During the failover, even though a cluster does not exist, the handle
|
137
|
+
# can still exist in the record, and we check for credentials to avoid
|
138
|
+
# updating the SSH config for non-existent clusters.
|
139
|
+
if (handle is not None and handle.cached_external_ips is not None and
|
140
|
+
'credentials' in record):
|
137
141
|
credentials = record['credentials']
|
138
142
|
if isinstance(handle.launched_resources.cloud, clouds.Kubernetes):
|
139
143
|
# Replace the proxy command to proxy through the SkyPilot API
|
@@ -169,9 +173,9 @@ def _get_cluster_records_and_set_ssh_config(
|
|
169
173
|
handle.ssh_user,
|
170
174
|
)
|
171
175
|
else:
|
172
|
-
# If the cluster is not UP or does not have
|
173
|
-
# the cluster from the SSH config.
|
174
|
-
cluster_utils.SSHConfigHelper.remove_cluster(
|
176
|
+
# If the cluster is not UP or does not have credentials available,
|
177
|
+
# we need to remove the cluster from the SSH config.
|
178
|
+
cluster_utils.SSHConfigHelper.remove_cluster(record['name'])
|
175
179
|
|
176
180
|
# Clean up SSH configs for clusters that do not exist.
|
177
181
|
#
|
@@ -5415,11 +5419,16 @@ def local():
|
|
5415
5419
|
@click.option('--cleanup',
|
5416
5420
|
is_flag=True,
|
5417
5421
|
help='Clean up the remote cluster instead of deploying it.')
|
5422
|
+
@click.option(
|
5423
|
+
'--context-name',
|
5424
|
+
type=str,
|
5425
|
+
required=False,
|
5426
|
+
help='Name to use for the kubeconfig context. Defaults to "default".')
|
5418
5427
|
@local.command('up', cls=_DocumentedCodeCommand)
|
5419
5428
|
@_add_click_options(_COMMON_OPTIONS)
|
5420
5429
|
@usage_lib.entrypoint
|
5421
5430
|
def local_up(gpus: bool, ips: str, ssh_user: str, ssh_key_path: str,
|
5422
|
-
cleanup: bool, async_call: bool):
|
5431
|
+
cleanup: bool, context_name: Optional[str], async_call: bool):
|
5423
5432
|
"""Creates a local or remote cluster."""
|
5424
5433
|
|
5425
5434
|
def _validate_args(ips, ssh_user, ssh_key_path, cleanup):
|
@@ -5464,7 +5473,8 @@ def local_up(gpus: bool, ips: str, ssh_user: str, ssh_key_path: str,
|
|
5464
5473
|
raise click.BadParameter(
|
5465
5474
|
f'Failed to read SSH key file {ssh_key_path}: {str(e)}')
|
5466
5475
|
|
5467
|
-
request_id = sdk.local_up(gpus, ip_list, ssh_user, ssh_key, cleanup
|
5476
|
+
request_id = sdk.local_up(gpus, ip_list, ssh_user, ssh_key, cleanup,
|
5477
|
+
context_name)
|
5468
5478
|
_async_call_or_wait(request_id, async_call, request_name='local up')
|
5469
5479
|
|
5470
5480
|
|
@@ -5500,10 +5510,19 @@ def api():
|
|
5500
5510
|
required=False,
|
5501
5511
|
help=('The host to deploy the SkyPilot API server. To allow '
|
5502
5512
|
'remote access, set this to 0.0.0.0'))
|
5513
|
+
@click.option('--foreground',
|
5514
|
+
is_flag=True,
|
5515
|
+
default=False,
|
5516
|
+
required=False,
|
5517
|
+
help='Run the SkyPilot API server in the foreground and output '
|
5518
|
+
'its logs to stdout/stderr. Allowing external systems '
|
5519
|
+
'to manage the process lifecycle and collect logs directly. '
|
5520
|
+
'This is useful when the API server is managed by systems '
|
5521
|
+
'like systemd and Kubernetes.')
|
5503
5522
|
@usage_lib.entrypoint
|
5504
|
-
def api_start(deploy: bool, host: Optional[str]):
|
5523
|
+
def api_start(deploy: bool, host: Optional[str], foreground: bool):
|
5505
5524
|
"""Starts the SkyPilot API server locally."""
|
5506
|
-
sdk.api_start(deploy=deploy, host=host)
|
5525
|
+
sdk.api_start(deploy=deploy, host=host, foreground=foreground)
|
5507
5526
|
|
5508
5527
|
|
5509
5528
|
@api.command('stop', cls=_DocumentedCodeCommand)
|
@@ -1263,8 +1263,12 @@ def storage_delete(name: str) -> server_common.RequestId:
|
|
1263
1263
|
@usage_lib.entrypoint
|
1264
1264
|
@server_common.check_server_healthy_or_start
|
1265
1265
|
@annotations.client_api
|
1266
|
-
def local_up(gpus: bool,
|
1267
|
-
|
1266
|
+
def local_up(gpus: bool,
|
1267
|
+
ips: Optional[List[str]],
|
1268
|
+
ssh_user: Optional[str],
|
1269
|
+
ssh_key: Optional[str],
|
1270
|
+
cleanup: bool,
|
1271
|
+
context_name: Optional[str] = None) -> server_common.RequestId:
|
1268
1272
|
"""Launches a Kubernetes cluster on local machines.
|
1269
1273
|
|
1270
1274
|
Returns:
|
@@ -1282,7 +1286,8 @@ def local_up(gpus: bool, ips: Optional[List[str]], ssh_user: Optional[str],
|
|
1282
1286
|
ips=ips,
|
1283
1287
|
ssh_user=ssh_user,
|
1284
1288
|
ssh_key=ssh_key,
|
1285
|
-
cleanup=cleanup
|
1289
|
+
cleanup=cleanup,
|
1290
|
+
context_name=context_name)
|
1286
1291
|
response = requests.post(f'{server_common.get_server_url()}/local_up',
|
1287
1292
|
json=json.loads(body.model_dump_json()))
|
1288
1293
|
return server_common.get_request_id(response)
|
@@ -1611,6 +1616,7 @@ def api_start(
|
|
1611
1616
|
*,
|
1612
1617
|
deploy: bool = False,
|
1613
1618
|
host: str = '127.0.0.1',
|
1619
|
+
foreground: bool = False,
|
1614
1620
|
) -> None:
|
1615
1621
|
"""Starts the API server.
|
1616
1622
|
|
@@ -1622,7 +1628,8 @@ def api_start(
|
|
1622
1628
|
resources of the machine.
|
1623
1629
|
host: The host to deploy the API server. It will be set to 0.0.0.0
|
1624
1630
|
if deploy is True, to allow remote access.
|
1625
|
-
|
1631
|
+
foreground: Whether to run the API server in the foreground (run in
|
1632
|
+
the current process).
|
1626
1633
|
Returns:
|
1627
1634
|
None
|
1628
1635
|
"""
|
@@ -1641,7 +1648,10 @@ def api_start(
|
|
1641
1648
|
'from the config file and/or unset the '
|
1642
1649
|
'SKYPILOT_API_SERVER_ENDPOINT environment '
|
1643
1650
|
'variable.')
|
1644
|
-
server_common.check_server_healthy_or_start_fn(deploy, host)
|
1651
|
+
server_common.check_server_healthy_or_start_fn(deploy, host, foreground)
|
1652
|
+
if foreground:
|
1653
|
+
# Explain why current process exited
|
1654
|
+
logger.info('API server is already running:')
|
1645
1655
|
logger.info(f'{ux_utils.INDENT_SYMBOL}SkyPilot API server: '
|
1646
1656
|
f'{server_common.get_server_url(host)}\n'
|
1647
1657
|
f'{ux_utils.INDENT_LAST_SYMBOL}'
|
{skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/cloud_stores.py
RENAMED
@@ -54,8 +54,9 @@ class S3CloudStorage(CloudStorage):
|
|
54
54
|
|
55
55
|
# List of commands to install AWS CLI
|
56
56
|
_GET_AWSCLI = [
|
57
|
-
'aws
|
58
|
-
f'{constants.SKY_UV_PIP_CMD} install awscli'
|
57
|
+
'awscli_path=$(which aws) || '
|
58
|
+
f'{{ {constants.SKY_UV_PIP_CMD} install awscli && '
|
59
|
+
f'awscli_path={constants.SKY_REMOTE_PYTHON_ENV}/bin/aws; }}',
|
59
60
|
]
|
60
61
|
|
61
62
|
def is_directory(self, url: str) -> bool:
|
@@ -85,8 +86,7 @@ class S3CloudStorage(CloudStorage):
|
|
85
86
|
# AWS Sync by default uses 10 threads to upload files to the bucket.
|
86
87
|
# To increase parallelism, modify max_concurrent_requests in your
|
87
88
|
# aws config file (Default path: ~/.aws/config).
|
88
|
-
download_via_awscli = (f'
|
89
|
-
'sync --no-follow-symlinks '
|
89
|
+
download_via_awscli = (f'$awscli_path s3 sync --no-follow-symlinks '
|
90
90
|
f'{source} {destination}')
|
91
91
|
|
92
92
|
all_commands = list(self._GET_AWSCLI)
|
@@ -95,8 +95,7 @@ class S3CloudStorage(CloudStorage):
|
|
95
95
|
|
96
96
|
def make_sync_file_command(self, source: str, destination: str) -> str:
|
97
97
|
"""Downloads a file using AWS CLI."""
|
98
|
-
download_via_awscli = (f'{
|
99
|
-
f'cp {source} {destination}')
|
98
|
+
download_via_awscli = (f'$awscli_path s3 cp {source} {destination}')
|
100
99
|
|
101
100
|
all_commands = list(self._GET_AWSCLI)
|
102
101
|
all_commands.append(download_via_awscli)
|
@@ -67,8 +67,20 @@ _GCLOUD_VERSION = '424.0.0'
|
|
67
67
|
GOOGLE_SDK_INSTALLATION_COMMAND: str = f'pushd /tmp &>/dev/null && \
|
68
68
|
{{ gcloud --help > /dev/null 2>&1 || \
|
69
69
|
{{ mkdir -p {os.path.dirname(_GCLOUD_INSTALLATION_LOG)} && \
|
70
|
-
|
71
|
-
|
70
|
+
ARCH=$(uname -m) && \
|
71
|
+
if [ "$ARCH" = "x86_64" ]; then \
|
72
|
+
echo "Installing Google Cloud SDK for $ARCH" > {_GCLOUD_INSTALLATION_LOG} && \
|
73
|
+
ARCH_SUFFIX="x86_64"; \
|
74
|
+
elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then \
|
75
|
+
echo "Installing Google Cloud SDK for $ARCH" > {_GCLOUD_INSTALLATION_LOG} && \
|
76
|
+
ARCH_SUFFIX="arm"; \
|
77
|
+
else \
|
78
|
+
echo "Architecture $ARCH not supported by Google Cloud SDK. Defaulting to x86_64." > {_GCLOUD_INSTALLATION_LOG} && \
|
79
|
+
ARCH_SUFFIX="x86_64"; \
|
80
|
+
fi && \
|
81
|
+
echo "Detected architecture: $ARCH, using package: $ARCH_SUFFIX" >> {_GCLOUD_INSTALLATION_LOG} && \
|
82
|
+
wget --quiet https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-{_GCLOUD_VERSION}-linux-${{ARCH_SUFFIX}}.tar.gz >> {_GCLOUD_INSTALLATION_LOG} && \
|
83
|
+
tar xzf google-cloud-sdk-{_GCLOUD_VERSION}-linux-${{ARCH_SUFFIX}}.tar.gz >> {_GCLOUD_INSTALLATION_LOG} && \
|
72
84
|
rm -rf ~/google-cloud-sdk >> {_GCLOUD_INSTALLATION_LOG} && \
|
73
85
|
mv google-cloud-sdk ~/ && \
|
74
86
|
~/google-cloud-sdk/install.sh -q >> {_GCLOUD_INSTALLATION_LOG} 2>&1 && \
|
@@ -1007,8 +1007,12 @@ def realtime_kubernetes_gpu_availability(
|
|
1007
1007
|
# = Local Cluster =
|
1008
1008
|
# =================
|
1009
1009
|
@usage_lib.entrypoint
|
1010
|
-
def local_up(gpus: bool,
|
1011
|
-
|
1010
|
+
def local_up(gpus: bool,
|
1011
|
+
ips: Optional[List[str]],
|
1012
|
+
ssh_user: Optional[str],
|
1013
|
+
ssh_key: Optional[str],
|
1014
|
+
cleanup: bool,
|
1015
|
+
context_name: Optional[str] = None) -> None:
|
1012
1016
|
"""Creates a local or remote cluster."""
|
1013
1017
|
|
1014
1018
|
def _validate_args(ips, ssh_user, ssh_key, cleanup):
|
@@ -1034,7 +1038,7 @@ def local_up(gpus: bool, ips: Optional[List[str]], ssh_user: Optional[str],
|
|
1034
1038
|
if ips:
|
1035
1039
|
assert ssh_user is not None and ssh_key is not None
|
1036
1040
|
kubernetes_deploy_utils.deploy_remote_cluster(ips, ssh_user, ssh_key,
|
1037
|
-
cleanup)
|
1041
|
+
cleanup, context_name)
|
1038
1042
|
else:
|
1039
1043
|
# Run local deployment (kind) if no remote args are specified
|
1040
1044
|
kubernetes_deploy_utils.deploy_local_cluster(gpus)
|
{skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/data/mounting_utils.py
RENAMED
@@ -24,7 +24,14 @@ RCLONE_VERSION = 'v1.68.2'
|
|
24
24
|
|
25
25
|
def get_s3_mount_install_cmd() -> str:
|
26
26
|
"""Returns a command to install S3 mount utility goofys."""
|
27
|
-
install_cmd = ('
|
27
|
+
install_cmd = ('ARCH=$(uname -m) && '
|
28
|
+
'if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then '
|
29
|
+
' echo "goofys is not supported on $ARCH" && '
|
30
|
+
f' exit {exceptions.ARCH_NOT_SUPPORTED_EXIT_CODE}; '
|
31
|
+
'else '
|
32
|
+
' ARCH_SUFFIX="amd64"; '
|
33
|
+
'fi && '
|
34
|
+
'sudo wget -nc https://github.com/romilbhardwaj/goofys/'
|
28
35
|
'releases/download/0.24.0-romilb-upstream/goofys '
|
29
36
|
'-O /usr/local/bin/goofys && '
|
30
37
|
'sudo chmod 755 /usr/local/bin/goofys')
|
@@ -49,9 +56,15 @@ def get_s3_mount_cmd(bucket_name: str,
|
|
49
56
|
|
50
57
|
def get_gcs_mount_install_cmd() -> str:
|
51
58
|
"""Returns a command to install GCS mount utility gcsfuse."""
|
52
|
-
install_cmd = ('
|
59
|
+
install_cmd = ('ARCH=$(uname -m) && '
|
60
|
+
'if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then '
|
61
|
+
' ARCH_SUFFIX="arm64"; '
|
62
|
+
'else '
|
63
|
+
' ARCH_SUFFIX="amd64"; '
|
64
|
+
'fi && '
|
65
|
+
'wget -nc https://github.com/GoogleCloudPlatform/gcsfuse'
|
53
66
|
f'/releases/download/v{GCSFUSE_VERSION}/'
|
54
|
-
f'gcsfuse_{GCSFUSE_VERSION}
|
67
|
+
f'gcsfuse_{GCSFUSE_VERSION}_${{ARCH_SUFFIX}}.deb '
|
55
68
|
'-O /tmp/gcsfuse.deb && '
|
56
69
|
'sudo dpkg --install /tmp/gcsfuse.deb')
|
57
70
|
return install_cmd
|
@@ -77,16 +90,24 @@ def get_gcs_mount_cmd(bucket_name: str,
|
|
77
90
|
|
78
91
|
def get_az_mount_install_cmd() -> str:
|
79
92
|
"""Returns a command to install AZ Container mount utility blobfuse2."""
|
80
|
-
install_cmd = (
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
93
|
+
install_cmd = (
|
94
|
+
'sudo apt-get update; '
|
95
|
+
'sudo apt-get install -y '
|
96
|
+
'-o Dpkg::Options::="--force-confdef" '
|
97
|
+
'fuse3 libfuse3-dev && '
|
98
|
+
'ARCH=$(uname -m) && '
|
99
|
+
'if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then '
|
100
|
+
' echo "blobfuse2 is not supported on $ARCH" && '
|
101
|
+
f' exit {exceptions.ARCH_NOT_SUPPORTED_EXIT_CODE}; '
|
102
|
+
'else '
|
103
|
+
' ARCH_SUFFIX="x86_64"; '
|
104
|
+
'fi && '
|
105
|
+
'wget -nc https://github.com/Azure/azure-storage-fuse'
|
106
|
+
f'/releases/download/blobfuse2-{BLOBFUSE2_VERSION}'
|
107
|
+
f'/blobfuse2-{BLOBFUSE2_VERSION}-Debian-11.0.${{ARCH_SUFFIX}}.deb '
|
108
|
+
'-O /tmp/blobfuse2.deb && '
|
109
|
+
'sudo dpkg --install /tmp/blobfuse2.deb && '
|
110
|
+
f'mkdir -p {_BLOBFUSE_CACHE_ROOT_DIR};')
|
90
111
|
|
91
112
|
return install_cmd
|
92
113
|
|
@@ -207,14 +228,20 @@ def get_rclone_install_cmd() -> str:
|
|
207
228
|
"""
|
208
229
|
# pylint: disable=line-too-long
|
209
230
|
install_cmd = (
|
231
|
+
'ARCH=$(uname -m) && '
|
232
|
+
'if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then '
|
233
|
+
' ARCH_SUFFIX="arm"; '
|
234
|
+
'else '
|
235
|
+
' ARCH_SUFFIX="amd64"; '
|
236
|
+
'fi && '
|
210
237
|
f'(which dpkg > /dev/null 2>&1 && (which rclone > /dev/null || (cd ~ > /dev/null'
|
211
|
-
f' && curl -O https://downloads.rclone.org/{RCLONE_VERSION}/rclone-{RCLONE_VERSION}-linux
|
212
|
-
f' && sudo dpkg -i rclone-{RCLONE_VERSION}-linux
|
213
|
-
f' && rm -f rclone-{RCLONE_VERSION}-linux
|
238
|
+
f' && curl -O https://downloads.rclone.org/{RCLONE_VERSION}/rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.deb'
|
239
|
+
f' && sudo dpkg -i rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.deb'
|
240
|
+
f' && rm -f rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.deb)))'
|
214
241
|
f' || (which rclone > /dev/null || (cd ~ > /dev/null'
|
215
|
-
f' && curl -O https://downloads.rclone.org/{RCLONE_VERSION}/rclone-{RCLONE_VERSION}-linux
|
216
|
-
f' && sudo yum --nogpgcheck install rclone-{RCLONE_VERSION}-linux
|
217
|
-
f' && rm -f rclone-{RCLONE_VERSION}-linux
|
242
|
+
f' && curl -O https://downloads.rclone.org/{RCLONE_VERSION}/rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.rpm'
|
243
|
+
f' && sudo yum --nogpgcheck install rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.rpm -y'
|
244
|
+
f' && rm -f rclone-{RCLONE_VERSION}-linux-${{ARCH_SUFFIX}}.rpm))')
|
218
245
|
return install_cmd
|
219
246
|
|
220
247
|
|
@@ -22,6 +22,8 @@ MOUNT_PATH_NON_EMPTY_CODE = 42
|
|
22
22
|
INSUFFICIENT_PRIVILEGES_CODE = 52
|
23
23
|
# Return code when git command is ran in a dir that is not git repo
|
24
24
|
GIT_FATAL_EXIT_CODE = 128
|
25
|
+
# Architecture, such as arm64, not supported by the dependency
|
26
|
+
ARCH_NOT_SUPPORTED_EXIT_CODE = 133
|
25
27
|
|
26
28
|
|
27
29
|
def is_safe_exception(exc: Exception) -> bool:
|
{skypilot_nightly-1.0.0.dev20250227 → skypilot_nightly-1.0.0.dev20250301}/sky/server/common.py
RENAMED
@@ -145,57 +145,6 @@ def get_api_server_status(endpoint: Optional[str] = None) -> ApiServerInfo:
|
|
145
145
|
return ApiServerInfo(status=ApiServerStatus.UNHEALTHY, api_version=None)
|
146
146
|
|
147
147
|
|
148
|
-
def start_api_server_in_background(deploy: bool = False,
|
149
|
-
host: str = '127.0.0.1'):
|
150
|
-
if not is_api_server_local():
|
151
|
-
raise RuntimeError(
|
152
|
-
f'Cannot start API server: {get_server_url()} is not a local URL')
|
153
|
-
|
154
|
-
# Check available memory before starting the server.
|
155
|
-
avail_mem_size_gb: float = common_utils.get_mem_size_gb()
|
156
|
-
if avail_mem_size_gb <= server_constants.MIN_AVAIL_MEM_GB:
|
157
|
-
logger.warning(
|
158
|
-
f'{colorama.Fore.YELLOW}Your SkyPilot API server machine only has '
|
159
|
-
f'{avail_mem_size_gb:.1f}GB memory available. '
|
160
|
-
f'At least {server_constants.MIN_AVAIL_MEM_GB}GB is recommended to '
|
161
|
-
f'support higher load with better performance.'
|
162
|
-
f'{colorama.Style.RESET_ALL}')
|
163
|
-
log_path = os.path.expanduser(constants.API_SERVER_LOGS)
|
164
|
-
os.makedirs(os.path.dirname(log_path), exist_ok=True)
|
165
|
-
|
166
|
-
api_server_cmd = API_SERVER_CMD
|
167
|
-
if deploy:
|
168
|
-
api_server_cmd += ' --deploy'
|
169
|
-
if host is not None:
|
170
|
-
api_server_cmd += f' --host {host}'
|
171
|
-
cmd = f'{sys.executable} {api_server_cmd} > {log_path} 2>&1 < /dev/null'
|
172
|
-
|
173
|
-
# Start the API server process in the background and don't wait for it.
|
174
|
-
# If this is called from a CLI invocation, we need start_new_session=True so
|
175
|
-
# that SIGINT on the CLI will not also kill the API server.
|
176
|
-
subprocess.Popen(cmd, shell=True, start_new_session=True)
|
177
|
-
|
178
|
-
# Wait for the server to start until timeout.
|
179
|
-
# Conservative upper time bound for starting the server based on profiling.
|
180
|
-
timeout_sec = 12
|
181
|
-
start_time = time.time()
|
182
|
-
while True:
|
183
|
-
api_server_info = get_api_server_status()
|
184
|
-
assert api_server_info.status != ApiServerStatus.VERSION_MISMATCH, (
|
185
|
-
f'API server version mismatch when starting the server. '
|
186
|
-
f'Server version: {api_server_info.api_version} '
|
187
|
-
f'Client version: {server_constants.API_VERSION}')
|
188
|
-
if api_server_info.status == ApiServerStatus.HEALTHY:
|
189
|
-
break
|
190
|
-
elif time.time() - start_time >= timeout_sec:
|
191
|
-
with ux_utils.print_exception_no_traceback():
|
192
|
-
raise RuntimeError(
|
193
|
-
'Failed to start SkyPilot API server at '
|
194
|
-
f'{get_server_url(host)}'
|
195
|
-
f'\nView logs at: {constants.API_SERVER_LOGS}')
|
196
|
-
time.sleep(0.5)
|
197
|
-
|
198
|
-
|
199
148
|
def handle_request_error(response: requests.Response) -> None:
|
200
149
|
if response.status_code != 200:
|
201
150
|
with ux_utils.print_exception_no_traceback():
|
@@ -218,10 +167,10 @@ def get_request_id(response: requests.Response) -> RequestId:
|
|
218
167
|
return request_id
|
219
168
|
|
220
169
|
|
221
|
-
def _start_api_server(deploy: bool = False,
|
170
|
+
def _start_api_server(deploy: bool = False,
|
171
|
+
host: str = '127.0.0.1',
|
172
|
+
foreground: bool = False):
|
222
173
|
"""Starts a SkyPilot API server locally."""
|
223
|
-
# Lock to prevent multiple processes from starting the server at the
|
224
|
-
# same time, causing issues with database initialization.
|
225
174
|
server_url = get_server_url(host)
|
226
175
|
assert server_url in AVAILABLE_LOCAL_API_SERVER_URLS, (
|
227
176
|
f'server url {server_url} is not a local url')
|
@@ -230,7 +179,60 @@ def _start_api_server(deploy: bool = False, host: str = '127.0.0.1'):
|
|
230
179
|
f'SkyPilot API server at {server_url}. '
|
231
180
|
'Starting a local server.'
|
232
181
|
f'{colorama.Style.RESET_ALL}')
|
233
|
-
|
182
|
+
if not is_api_server_local():
|
183
|
+
raise RuntimeError(f'Cannot start API server: {get_server_url()} '
|
184
|
+
'is not a local URL')
|
185
|
+
|
186
|
+
# Check available memory before starting the server.
|
187
|
+
avail_mem_size_gb: float = common_utils.get_mem_size_gb()
|
188
|
+
if avail_mem_size_gb <= server_constants.MIN_AVAIL_MEM_GB:
|
189
|
+
logger.warning(
|
190
|
+
f'{colorama.Fore.YELLOW}Your SkyPilot API server machine only '
|
191
|
+
f'has {avail_mem_size_gb:.1f}GB memory available. '
|
192
|
+
f'At least {server_constants.MIN_AVAIL_MEM_GB}GB is '
|
193
|
+
'recommended to support higher load with better performance.'
|
194
|
+
f'{colorama.Style.RESET_ALL}')
|
195
|
+
|
196
|
+
args = [sys.executable, *API_SERVER_CMD.split()]
|
197
|
+
if deploy:
|
198
|
+
args += ['--deploy']
|
199
|
+
if host is not None:
|
200
|
+
args += [f'--host={host}']
|
201
|
+
|
202
|
+
if foreground:
|
203
|
+
# Replaces the current process with the API server
|
204
|
+
os.execvp(args[0], args)
|
205
|
+
|
206
|
+
log_path = os.path.expanduser(constants.API_SERVER_LOGS)
|
207
|
+
os.makedirs(os.path.dirname(log_path), exist_ok=True)
|
208
|
+
cmd = f'{" ".join(args)} > {log_path} 2>&1 < /dev/null'
|
209
|
+
|
210
|
+
# Start the API server process in the background and don't wait for it.
|
211
|
+
# If this is called from a CLI invocation, we need
|
212
|
+
# start_new_session=True so that SIGINT on the CLI will not also kill
|
213
|
+
# the API server.
|
214
|
+
subprocess.Popen(cmd, shell=True, start_new_session=True)
|
215
|
+
|
216
|
+
# Wait for the server to start until timeout.
|
217
|
+
# Conservative upper time bound for starting the server based on
|
218
|
+
# profiling.
|
219
|
+
timeout_sec = 12
|
220
|
+
start_time = time.time()
|
221
|
+
while True:
|
222
|
+
api_server_info = get_api_server_status()
|
223
|
+
assert api_server_info.status != ApiServerStatus.VERSION_MISMATCH, (
|
224
|
+
f'API server version mismatch when starting the server. '
|
225
|
+
f'Server version: {api_server_info.api_version} '
|
226
|
+
f'Client version: {server_constants.API_VERSION}')
|
227
|
+
if api_server_info.status == ApiServerStatus.HEALTHY:
|
228
|
+
break
|
229
|
+
elif time.time() - start_time >= timeout_sec:
|
230
|
+
with ux_utils.print_exception_no_traceback():
|
231
|
+
raise RuntimeError(
|
232
|
+
'Failed to start SkyPilot API server at '
|
233
|
+
f'{get_server_url(host)}'
|
234
|
+
f'\nView logs at: {constants.API_SERVER_LOGS}')
|
235
|
+
time.sleep(0.5)
|
234
236
|
logger.info(ux_utils.finishing_message('SkyPilot API server started.'))
|
235
237
|
|
236
238
|
|
@@ -260,7 +262,8 @@ def check_server_healthy(endpoint: Optional[str] = None,) -> None:
|
|
260
262
|
|
261
263
|
|
262
264
|
def check_server_healthy_or_start_fn(deploy: bool = False,
|
263
|
-
host: str = '127.0.0.1'
|
265
|
+
host: str = '127.0.0.1',
|
266
|
+
foreground: bool = False):
|
264
267
|
try:
|
265
268
|
check_server_healthy()
|
266
269
|
except exceptions.ApiServerConnectionError as exc:
|
@@ -268,13 +271,15 @@ def check_server_healthy_or_start_fn(deploy: bool = False,
|
|
268
271
|
if not is_api_server_local():
|
269
272
|
with ux_utils.print_exception_no_traceback():
|
270
273
|
raise exceptions.ApiServerConnectionError(endpoint) from exc
|
274
|
+
# Lock to prevent multiple processes from starting the server at the
|
275
|
+
# same time, causing issues with database initialization.
|
271
276
|
with filelock.FileLock(
|
272
277
|
os.path.expanduser(constants.API_SERVER_CREATION_LOCK_PATH)):
|
273
278
|
# Check again if server is already running. Other processes may
|
274
279
|
# have started the server while we were waiting for the lock.
|
275
280
|
api_server_info = get_api_server_status(endpoint)
|
276
281
|
if api_server_info.status == ApiServerStatus.UNHEALTHY:
|
277
|
-
_start_api_server(deploy, host)
|
282
|
+
_start_api_server(deploy, host, foreground)
|
278
283
|
|
279
284
|
|
280
285
|
def check_server_healthy_or_start(func):
|