skypilot-nightly 1.0.0.dev20250319__tar.gz → 1.0.0.dev20250321__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.dev20250319/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20250321}/PKG-INFO +13 -2
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/__init__.py +2 -2
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/cloudflare.py +19 -3
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/kubernetes.py +2 -1
- skypilot_nightly-1.0.0.dev20250321/sky/adaptors/nebius.py +232 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/backends/cloud_vm_ray_backend.py +3 -1
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/benchmark/benchmark_utils.py +3 -2
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/check.py +89 -55
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/cloud_stores.py +66 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/aws.py +14 -2
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/azure.py +13 -1
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/cloud.py +37 -2
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/cudo.py +3 -2
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/do.py +3 -2
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/fluidstack.py +3 -2
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/gcp.py +55 -34
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/ibm.py +15 -1
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/kubernetes.py +3 -1
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/lambda_cloud.py +3 -1
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/nebius.py +7 -3
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/oci.py +15 -1
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/paperspace.py +3 -2
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/runpod.py +7 -1
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/scp.py +3 -1
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/kubernetes_catalog.py +3 -1
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/utils/gcp_utils.py +11 -1
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/vast.py +3 -2
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/vsphere.py +3 -2
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/core.py +6 -2
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/data/data_transfer.py +75 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/data/data_utils.py +34 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/data/mounting_utils.py +18 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/data/storage.py +542 -16
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/data/storage_utils.py +102 -84
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/exceptions.py +2 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/global_user_state.py +15 -6
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/server/core.py +1 -1
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/utils.py +5 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/optimizer.py +8 -2
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/gcp/config.py +3 -3
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/gcp/constants.py +16 -2
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/gcp/instance.py +4 -1
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/utils.py +26 -21
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/resources.py +6 -1
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/replica_managers.py +10 -1
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/setup_files/dependencies.py +3 -1
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/task.py +16 -5
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/command_runner.py +2 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/controller_utils.py +13 -4
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/kubernetes_deploy_utils.py +4 -1
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321/skypilot_nightly.egg-info}/PKG-INFO +13 -2
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/skypilot_nightly.egg-info/requires.txt +5 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_global_user_state.py +2 -1
- skypilot_nightly-1.0.0.dev20250319/sky/adaptors/nebius.py +0 -110
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/MANIFEST.in +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/README.md +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/pyproject.toml +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/setup.cfg +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/do.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/docker.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/ibm.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/oci.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/runpod.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/vast.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/admin_policy.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/authentication.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/backends/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/backends/backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/backends/backend_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/backends/docker_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/backends/local_docker_backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/backends/wheel_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/benchmark/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/benchmark/benchmark_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/cli.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/client/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/client/cli.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/client/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/client/sdk.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/aws_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/azure_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/fetch_vast.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/do_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/nebius_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/oci_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/scp_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/vast_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/utils/aws_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/utils/azure_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/utils/oci_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/clouds/utils/scp_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/dag.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/data/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/execution.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/client/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/client/sdk.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/controller.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/dashboard/dashboard.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/dashboard/static/favicon.ico +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/dashboard/templates/index.html +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/recovery_strategy.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/scheduler.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/server/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/server/dashboard_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/server/server.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/jobs/state.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/models.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/aws/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/aws/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/aws/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/aws/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/azure/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/azure/azure-config-template.json +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/azure/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/azure/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/cudo/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/cudo/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/cudo/cudo_machine_type.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/cudo/cudo_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/cudo/cudo_wrapper.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/cudo/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/do/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/do/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/do/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/do/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/do/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/docker_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/fluidstack/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/fluidstack/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/fluidstack/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/gcp/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/gcp/instance_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/gcp/mig_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/instance_setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/network.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/kubernetes/network_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/lambda_cloud/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/lambda_cloud/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/lambda_cloud/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/logging.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/metadata_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/nebius/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/nebius/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/nebius/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/nebius/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/oci/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/oci/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/oci/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/oci/query_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/paperspace/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/paperspace/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/paperspace/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/paperspace/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/paperspace/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/provisioner.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/runpod/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/runpod/api/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/runpod/api/commands.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/runpod/api/pods.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/runpod/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/runpod/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/runpod/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vast/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vast/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vast/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vast/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/cls_api_client.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/custom_script.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/id_generator.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/metadata_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/service_manager.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/ssl_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/vapiconnect.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/common/vim_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/provision/vsphere/vsphere_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/autoscalers.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/client/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/client/sdk.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/controller.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/load_balancer.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/load_balancing_policies.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/serve_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/serve_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/server/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/server/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/server/server.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/service.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/serve/service_spec.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/html/log.html +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/event_loop.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/executor.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/payloads.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/preconditions.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/queues/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/queues/mp_queue.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/requests.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/serializers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/serializers/decoders.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/requests/serializers/encoders.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/server.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/stream_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/server/uvicorn.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/setup_files/MANIFEST.in +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/setup_files/setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/sky_logging.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/attempt_skylet.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/autostop_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/configs.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/events.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/job_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/log_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/log_lib.pyi +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/command_runner.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/ibm/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/ibm/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/ibm/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/scp/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/scp/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/providers/scp/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/ray_patches/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/ray_patches/cli.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/ray_patches/updater.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/ray_patches/worker.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/skylet.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skylet/subprocess_daemon.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/skypilot_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/aws-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/azure-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/cudo-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/do-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/fluidstack-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/gcp-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/ibm-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/jobs-controller.yaml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/kubernetes-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/lambda-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/local-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/nebius-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/oci-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/paperspace-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/runpod-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/scp-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/skypilot-server-kubernetes-proxy.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/vast-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/vsphere-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/templates/websocket_proxy.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/usage/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/usage/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/usage/usage_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/accelerator_registry.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/admin_policy_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/annotations.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/cli_utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/cli_utils/status_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/cluster_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/command_runner.pyi +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/common_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/config_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/control_master_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/dag_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/db_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/env_options.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/create_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/delete_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/deploy_remote_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/exec_kubeconfig_converter.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/generate_kind_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/gpu_labeler.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/rsync_helper.sh +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/kubernetes_enums.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/log_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/message_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/registry.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/resources_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/rich_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/schemas.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/status_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/subprocess_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/timeline.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/ux_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/utils/validator.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/skypilot_nightly.egg-info/SOURCES.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/skypilot_nightly.egg-info/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/skypilot_nightly.egg-info/top_level.txt +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_api.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_cli.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_jobs.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_jobs_and_serve.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_list_accelerators.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_optimizer_dryruns.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_optimizer_random_dag.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_serve_autoscaler.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_smoke.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_storage.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_wheels.py +0 -0
- {skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/tests/test_yaml_parser.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
|
-
Metadata-Version: 2.
|
1
|
+
Metadata-Version: 2.4
|
2
2
|
Name: skypilot-nightly
|
3
|
-
Version: 1.0.0.
|
3
|
+
Version: 1.0.0.dev20250321
|
4
4
|
Summary: SkyPilot: An intercloud broker for the clouds
|
5
5
|
Author: SkyPilot Team
|
6
6
|
License: Apache 2.0
|
@@ -108,6 +108,11 @@ Provides-Extra: vsphere
|
|
108
108
|
Requires-Dist: pyvmomi==8.0.1.0.2; extra == "vsphere"
|
109
109
|
Provides-Extra: nebius
|
110
110
|
Requires-Dist: nebius>=0.2.0; extra == "nebius"
|
111
|
+
Requires-Dist: urllib3<2; extra == "nebius"
|
112
|
+
Requires-Dist: awscli>=1.27.10; extra == "nebius"
|
113
|
+
Requires-Dist: botocore>=1.29.10; extra == "nebius"
|
114
|
+
Requires-Dist: boto3>=1.26.1; extra == "nebius"
|
115
|
+
Requires-Dist: colorama<0.4.5; extra == "nebius"
|
111
116
|
Provides-Extra: all
|
112
117
|
Requires-Dist: urllib3<2; extra == "all"
|
113
118
|
Requires-Dist: awscli>=1.27.10; extra == "all"
|
@@ -151,11 +156,17 @@ Requires-Dist: azure-common; extra == "all"
|
|
151
156
|
Requires-Dist: vastai-sdk>=0.1.12; extra == "all"
|
152
157
|
Requires-Dist: pyvmomi==8.0.1.0.2; extra == "all"
|
153
158
|
Requires-Dist: nebius>=0.2.0; extra == "all"
|
159
|
+
Requires-Dist: urllib3<2; extra == "all"
|
160
|
+
Requires-Dist: awscli>=1.27.10; extra == "all"
|
161
|
+
Requires-Dist: botocore>=1.29.10; extra == "all"
|
162
|
+
Requires-Dist: boto3>=1.26.1; extra == "all"
|
163
|
+
Requires-Dist: colorama<0.4.5; extra == "all"
|
154
164
|
Dynamic: author
|
155
165
|
Dynamic: classifier
|
156
166
|
Dynamic: description
|
157
167
|
Dynamic: description-content-type
|
158
168
|
Dynamic: license
|
169
|
+
Dynamic: license-file
|
159
170
|
Dynamic: project-url
|
160
171
|
Dynamic: provides-extra
|
161
172
|
Dynamic: requires-dist
|
@@ -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 = 'a7f92951b96fdca825348d8291d01bd88f6f9dfe'
|
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.dev20250321'
|
39
39
|
__root_dir__ = os.path.dirname(os.path.abspath(__file__))
|
40
40
|
|
41
41
|
|
{skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/cloudflare.py
RENAMED
@@ -6,7 +6,9 @@ import os
|
|
6
6
|
import threading
|
7
7
|
from typing import Dict, Optional, Tuple
|
8
8
|
|
9
|
+
from sky import exceptions
|
9
10
|
from sky.adaptors import common
|
11
|
+
from sky.clouds import cloud
|
10
12
|
from sky.utils import annotations
|
11
13
|
from sky.utils import ux_utils
|
12
14
|
|
@@ -130,8 +132,8 @@ def client(service_name: str, region):
|
|
130
132
|
@common.load_lazy_modules(_LAZY_MODULES)
|
131
133
|
def botocore_exceptions():
|
132
134
|
"""AWS botocore exception."""
|
133
|
-
from botocore import exceptions
|
134
|
-
return
|
135
|
+
from botocore import exceptions as boto_exceptions
|
136
|
+
return boto_exceptions
|
135
137
|
|
136
138
|
|
137
139
|
def create_endpoint():
|
@@ -148,7 +150,21 @@ def create_endpoint():
|
|
148
150
|
return endpoint
|
149
151
|
|
150
152
|
|
151
|
-
def check_credentials(
|
153
|
+
def check_credentials(
|
154
|
+
cloud_capability: cloud.CloudCapability) -> Tuple[bool, Optional[str]]:
|
155
|
+
if cloud_capability == cloud.CloudCapability.COMPUTE:
|
156
|
+
# for backward compatibility,
|
157
|
+
# we check storage credentials for compute.
|
158
|
+
# TODO(seungjin): properly return not supported error for compute.
|
159
|
+
return check_storage_credentials()
|
160
|
+
elif cloud_capability == cloud.CloudCapability.STORAGE:
|
161
|
+
return check_storage_credentials()
|
162
|
+
else:
|
163
|
+
raise exceptions.NotSupportedError(
|
164
|
+
f'{NAME} does not support {cloud_capability}.')
|
165
|
+
|
166
|
+
|
167
|
+
def check_storage_credentials() -> Tuple[bool, Optional[str]]:
|
152
168
|
"""Checks if the user has access credentials to Cloudflare R2.
|
153
169
|
|
154
170
|
Returns:
|
{skypilot_nightly-1.0.0.dev20250319 → skypilot_nightly-1.0.0.dev20250321}/sky/adaptors/kubernetes.py
RENAMED
@@ -79,10 +79,11 @@ def _load_config(context: Optional[str] = None):
|
|
79
79
|
' If you were running a local Kubernetes '
|
80
80
|
'cluster, run `sky local up` to start the cluster.')
|
81
81
|
else:
|
82
|
+
kubeconfig_path = os.environ.get('KUBECONFIG', '~/.kube/config')
|
82
83
|
err_str = (
|
83
84
|
f'Failed to load Kubernetes configuration for {context!r}. '
|
84
85
|
'Please check if your kubeconfig file exists at '
|
85
|
-
f'
|
86
|
+
f'{kubeconfig_path} and is valid.\n{suffix}')
|
86
87
|
err_str += '\nTo disable Kubernetes for SkyPilot: run `sky check`.'
|
87
88
|
with ux_utils.print_exception_no_traceback():
|
88
89
|
raise ValueError(err_str) from None
|
@@ -0,0 +1,232 @@
|
|
1
|
+
"""Nebius cloud adaptor."""
|
2
|
+
import os
|
3
|
+
import threading
|
4
|
+
from typing import Optional
|
5
|
+
|
6
|
+
from sky.adaptors import common
|
7
|
+
from sky.utils import annotations
|
8
|
+
from sky.utils import ux_utils
|
9
|
+
|
10
|
+
NEBIUS_TENANT_ID_FILENAME = 'NEBIUS_TENANT_ID.txt'
|
11
|
+
NEBIUS_IAM_TOKEN_FILENAME = 'NEBIUS_IAM_TOKEN.txt'
|
12
|
+
NEBIUS_PROJECT_ID_FILENAME = 'NEBIUS_PROJECT_ID.txt'
|
13
|
+
NEBIUS_CREDENTIALS_FILENAME = 'credentials.json'
|
14
|
+
NEBIUS_TENANT_ID_PATH = '~/.nebius/' + NEBIUS_TENANT_ID_FILENAME
|
15
|
+
NEBIUS_IAM_TOKEN_PATH = '~/.nebius/' + NEBIUS_IAM_TOKEN_FILENAME
|
16
|
+
NEBIUS_PROJECT_ID_PATH = '~/.nebius/' + NEBIUS_PROJECT_ID_FILENAME
|
17
|
+
NEBIUS_CREDENTIALS_PATH = '~/.nebius/' + NEBIUS_CREDENTIALS_FILENAME
|
18
|
+
|
19
|
+
DEFAULT_REGION = 'eu-north1'
|
20
|
+
|
21
|
+
NEBIUS_PROFILE_NAME = 'nebius'
|
22
|
+
|
23
|
+
MAX_RETRIES_TO_DISK_CREATE = 120
|
24
|
+
MAX_RETRIES_TO_INSTANCE_STOP = 120
|
25
|
+
MAX_RETRIES_TO_INSTANCE_START = 120
|
26
|
+
MAX_RETRIES_TO_INSTANCE_READY = 240
|
27
|
+
|
28
|
+
MAX_RETRIES_TO_DISK_DELETE = 120
|
29
|
+
MAX_RETRIES_TO_INSTANCE_WAIT = 120 # Maximum number of retries
|
30
|
+
|
31
|
+
POLL_INTERVAL = 5
|
32
|
+
|
33
|
+
_iam_token = None
|
34
|
+
_sdk = None
|
35
|
+
_tenant_id = None
|
36
|
+
_project_id = None
|
37
|
+
|
38
|
+
_IMPORT_ERROR_MESSAGE = ('Failed to import dependencies for Nebius AI Cloud.'
|
39
|
+
'Try pip install "skypilot[nebius]"')
|
40
|
+
|
41
|
+
nebius = common.LazyImport(
|
42
|
+
'nebius',
|
43
|
+
import_error_message=_IMPORT_ERROR_MESSAGE,
|
44
|
+
# https://github.com/grpc/grpc/issues/37642 to avoid spam in console
|
45
|
+
set_loggers=lambda: os.environ.update({'GRPC_VERBOSITY': 'NONE'}))
|
46
|
+
boto3 = common.LazyImport('boto3', import_error_message=_IMPORT_ERROR_MESSAGE)
|
47
|
+
botocore = common.LazyImport('botocore',
|
48
|
+
import_error_message=_IMPORT_ERROR_MESSAGE)
|
49
|
+
|
50
|
+
_LAZY_MODULES = (boto3, botocore, nebius)
|
51
|
+
_session_creation_lock = threading.RLock()
|
52
|
+
_INDENT_PREFIX = ' '
|
53
|
+
NAME = 'Nebius'
|
54
|
+
SKY_CHECK_NAME = 'Nebius (for Nebius Object Storae)'
|
55
|
+
|
56
|
+
|
57
|
+
def request_error():
|
58
|
+
return nebius.aio.service_error.RequestError
|
59
|
+
|
60
|
+
|
61
|
+
def compute():
|
62
|
+
# pylint: disable=import-outside-toplevel
|
63
|
+
from nebius.api.nebius.compute import v1 as compute_v1
|
64
|
+
return compute_v1
|
65
|
+
|
66
|
+
|
67
|
+
def iam():
|
68
|
+
# pylint: disable=import-outside-toplevel
|
69
|
+
from nebius.api.nebius.iam import v1 as iam_v1
|
70
|
+
return iam_v1
|
71
|
+
|
72
|
+
|
73
|
+
def nebius_common():
|
74
|
+
# pylint: disable=import-outside-toplevel
|
75
|
+
from nebius.api.nebius.common import v1 as common_v1
|
76
|
+
return common_v1
|
77
|
+
|
78
|
+
|
79
|
+
def vpc():
|
80
|
+
# pylint: disable=import-outside-toplevel
|
81
|
+
from nebius.api.nebius.vpc import v1 as vpc_v1
|
82
|
+
return vpc_v1
|
83
|
+
|
84
|
+
|
85
|
+
def get_iam_token():
|
86
|
+
global _iam_token
|
87
|
+
if _iam_token is None:
|
88
|
+
try:
|
89
|
+
with open(os.path.expanduser(NEBIUS_IAM_TOKEN_PATH),
|
90
|
+
encoding='utf-8') as file:
|
91
|
+
_iam_token = file.read().strip()
|
92
|
+
except FileNotFoundError:
|
93
|
+
return None
|
94
|
+
return _iam_token
|
95
|
+
|
96
|
+
|
97
|
+
def is_token_or_cred_file_exist():
|
98
|
+
return (os.path.exists(os.path.expanduser(NEBIUS_IAM_TOKEN_PATH)) or
|
99
|
+
os.path.exists(os.path.expanduser(NEBIUS_CREDENTIALS_PATH)))
|
100
|
+
|
101
|
+
|
102
|
+
def get_project_id():
|
103
|
+
global _project_id
|
104
|
+
if _project_id is None:
|
105
|
+
try:
|
106
|
+
with open(os.path.expanduser(NEBIUS_PROJECT_ID_PATH),
|
107
|
+
encoding='utf-8') as file:
|
108
|
+
_project_id = file.read().strip()
|
109
|
+
except FileNotFoundError:
|
110
|
+
return None
|
111
|
+
return _project_id
|
112
|
+
|
113
|
+
|
114
|
+
def get_tenant_id():
|
115
|
+
global _tenant_id
|
116
|
+
if _tenant_id is None:
|
117
|
+
try:
|
118
|
+
with open(os.path.expanduser(NEBIUS_TENANT_ID_PATH),
|
119
|
+
encoding='utf-8') as file:
|
120
|
+
_tenant_id = file.read().strip()
|
121
|
+
except FileNotFoundError:
|
122
|
+
return None
|
123
|
+
return _tenant_id
|
124
|
+
|
125
|
+
|
126
|
+
def sdk():
|
127
|
+
global _sdk
|
128
|
+
if _sdk is None:
|
129
|
+
if get_iam_token() is not None:
|
130
|
+
_sdk = nebius.sdk.SDK(credentials=get_iam_token())
|
131
|
+
return _sdk
|
132
|
+
_sdk = nebius.sdk.SDK(
|
133
|
+
credentials_file_name=os.path.expanduser(NEBIUS_CREDENTIALS_PATH))
|
134
|
+
return _sdk
|
135
|
+
|
136
|
+
|
137
|
+
def get_nebius_credentials(boto3_session):
|
138
|
+
"""Gets the Nebius credentials from the boto3 session object.
|
139
|
+
|
140
|
+
Args:
|
141
|
+
boto3_session: The boto3 session object.
|
142
|
+
Returns:
|
143
|
+
botocore.credentials.ReadOnlyCredentials object with the R2 credentials.
|
144
|
+
"""
|
145
|
+
nebius_credentials = boto3_session.get_credentials()
|
146
|
+
if nebius_credentials is None:
|
147
|
+
with ux_utils.print_exception_no_traceback():
|
148
|
+
raise ValueError('Nebius credentials not found. Run '
|
149
|
+
'`sky check` to verify credentials are '
|
150
|
+
'correctly set up.')
|
151
|
+
return nebius_credentials.get_frozen_credentials()
|
152
|
+
|
153
|
+
|
154
|
+
# lru_cache() is thread-safe and it will return the same session object
|
155
|
+
# for different threads.
|
156
|
+
# Reference: https://docs.python.org/3/library/functools.html#functools.lru_cache # pylint: disable=line-too-long
|
157
|
+
@annotations.lru_cache(scope='global')
|
158
|
+
def session():
|
159
|
+
"""Create an AWS session."""
|
160
|
+
# Creating the session object is not thread-safe for boto3,
|
161
|
+
# so we add a reentrant lock to synchronize the session creation.
|
162
|
+
# Reference: https://github.com/boto/boto3/issues/1592
|
163
|
+
# However, the session object itself is thread-safe, so we are
|
164
|
+
# able to use lru_cache() to cache the session object.
|
165
|
+
with _session_creation_lock:
|
166
|
+
session_ = boto3.session.Session(profile_name=NEBIUS_PROFILE_NAME)
|
167
|
+
return session_
|
168
|
+
|
169
|
+
|
170
|
+
@annotations.lru_cache(scope='global')
|
171
|
+
def resource(resource_name: str, region: str = DEFAULT_REGION, **kwargs):
|
172
|
+
"""Create a Nebius resource.
|
173
|
+
|
174
|
+
Args:
|
175
|
+
resource_name: Nebius resource name (e.g., 's3').
|
176
|
+
kwargs: Other options.
|
177
|
+
"""
|
178
|
+
# Need to use the resource retrieved from the per-thread session
|
179
|
+
# to avoid thread-safety issues (Directly creating the client
|
180
|
+
# with boto3.resource() is not thread-safe).
|
181
|
+
# Reference: https://stackoverflow.com/a/59635814
|
182
|
+
|
183
|
+
session_ = session()
|
184
|
+
nebius_credentials = get_nebius_credentials(session_)
|
185
|
+
endpoint = create_endpoint(region)
|
186
|
+
|
187
|
+
return session_.resource(
|
188
|
+
resource_name,
|
189
|
+
endpoint_url=endpoint,
|
190
|
+
aws_access_key_id=nebius_credentials.access_key,
|
191
|
+
aws_secret_access_key=nebius_credentials.secret_key,
|
192
|
+
region_name=region,
|
193
|
+
**kwargs)
|
194
|
+
|
195
|
+
|
196
|
+
@annotations.lru_cache(scope='global')
|
197
|
+
def client(service_name: str, region):
|
198
|
+
"""Create an Nebius client of a certain service.
|
199
|
+
|
200
|
+
Args:
|
201
|
+
service_name: Nebius service name (e.g., 's3').
|
202
|
+
kwargs: Other options.
|
203
|
+
"""
|
204
|
+
# Need to use the client retrieved from the per-thread session
|
205
|
+
# to avoid thread-safety issues (Directly creating the client
|
206
|
+
# with boto3.client() is not thread-safe).
|
207
|
+
# Reference: https://stackoverflow.com/a/59635814
|
208
|
+
|
209
|
+
session_ = session()
|
210
|
+
nebius_credentials = get_nebius_credentials(session_)
|
211
|
+
endpoint = create_endpoint(region)
|
212
|
+
|
213
|
+
return session_.client(service_name,
|
214
|
+
endpoint_url=endpoint,
|
215
|
+
aws_access_key_id=nebius_credentials.access_key,
|
216
|
+
aws_secret_access_key=nebius_credentials.secret_key,
|
217
|
+
region_name=region)
|
218
|
+
|
219
|
+
|
220
|
+
@common.load_lazy_modules(_LAZY_MODULES)
|
221
|
+
def botocore_exceptions():
|
222
|
+
"""AWS botocore exception."""
|
223
|
+
# pylint: disable=import-outside-toplevel
|
224
|
+
from botocore import exceptions
|
225
|
+
return exceptions
|
226
|
+
|
227
|
+
|
228
|
+
def create_endpoint(region: Optional[str] = DEFAULT_REGION) -> str:
|
229
|
+
"""Reads accountid necessary to interact with Nebius Object Storage"""
|
230
|
+
if region is None:
|
231
|
+
region = DEFAULT_REGION
|
232
|
+
return f'https://storage.{region}.nebius.cloud:443'
|
@@ -38,6 +38,7 @@ from sky import sky_logging
|
|
38
38
|
from sky import task as task_lib
|
39
39
|
from sky.backends import backend_utils
|
40
40
|
from sky.backends import wheel_utils
|
41
|
+
from sky.clouds import cloud as sky_cloud
|
41
42
|
from sky.clouds import service_catalog
|
42
43
|
from sky.clouds.utils import gcp_utils
|
43
44
|
from sky.data import data_utils
|
@@ -1981,7 +1982,8 @@ class RetryingVmProvisioner(object):
|
|
1981
1982
|
# is running. Here we check the enabled clouds and expiring credentials
|
1982
1983
|
# and raise a warning to the user.
|
1983
1984
|
if task.is_controller_task():
|
1984
|
-
enabled_clouds = sky_check.get_cached_enabled_clouds_or_refresh(
|
1985
|
+
enabled_clouds = sky_check.get_cached_enabled_clouds_or_refresh(
|
1986
|
+
sky_cloud.CloudCapability.COMPUTE)
|
1985
1987
|
expirable_clouds = backend_utils.get_expirable_clouds(
|
1986
1988
|
enabled_clouds)
|
1987
1989
|
|
@@ -172,8 +172,9 @@ def _create_benchmark_bucket() -> Tuple[str, str]:
|
|
172
172
|
bucket_name = f'sky-bench-{uuid.uuid4().hex[:4]}-{getpass.getuser()}'
|
173
173
|
|
174
174
|
# Select the bucket type.
|
175
|
-
enabled_clouds =
|
176
|
-
|
175
|
+
enabled_clouds = (
|
176
|
+
storage_lib.get_cached_enabled_storage_cloud_names_or_refresh(
|
177
|
+
raise_if_no_cloud_access=True))
|
177
178
|
# Sky Benchmark only supports S3 (see _download_remote_dir and
|
178
179
|
# _delete_remote_dir).
|
179
180
|
enabled_clouds = [
|
@@ -2,7 +2,7 @@
|
|
2
2
|
import os
|
3
3
|
import traceback
|
4
4
|
from types import ModuleType
|
5
|
-
from typing import Dict, Iterable, List, Optional, Tuple, Union
|
5
|
+
from typing import Dict, Iterable, List, Optional, Set, Tuple, Union
|
6
6
|
|
7
7
|
import click
|
8
8
|
import colorama
|
@@ -12,6 +12,7 @@ from sky import exceptions
|
|
12
12
|
from sky import global_user_state
|
13
13
|
from sky import skypilot_config
|
14
14
|
from sky.adaptors import cloudflare
|
15
|
+
from sky.clouds import cloud as sky_cloud
|
15
16
|
from sky.utils import registry
|
16
17
|
from sky.utils import rich_utils
|
17
18
|
from sky.utils import ux_utils
|
@@ -20,44 +21,52 @@ CHECK_MARK_EMOJI = '\U00002714' # Heavy check mark unicode
|
|
20
21
|
PARTY_POPPER_EMOJI = '\U0001F389' # Party popper unicode
|
21
22
|
|
22
23
|
|
23
|
-
def
|
24
|
+
def check_capabilities(
|
24
25
|
quiet: bool = False,
|
25
26
|
verbose: bool = False,
|
26
27
|
clouds: Optional[Iterable[str]] = None,
|
27
|
-
|
28
|
+
capabilities: Optional[List[sky_cloud.CloudCapability]] = None,
|
29
|
+
) -> Dict[str, List[sky_cloud.CloudCapability]]:
|
28
30
|
echo = (lambda *_args, **_kwargs: None
|
29
31
|
) if quiet else lambda *args, **kwargs: click.echo(
|
30
32
|
*args, **kwargs, color=True)
|
31
33
|
echo('Checking credentials to enable clouds for SkyPilot.')
|
32
|
-
|
33
|
-
|
34
|
+
if capabilities is None:
|
35
|
+
capabilities = sky_cloud.ALL_CAPABILITIES
|
36
|
+
assert capabilities is not None
|
37
|
+
enabled_clouds: Dict[str, List[sky_cloud.CloudCapability]] = {}
|
38
|
+
disabled_clouds: Dict[str, List[sky_cloud.CloudCapability]] = {}
|
34
39
|
|
35
40
|
def check_one_cloud(
|
36
41
|
cloud_tuple: Tuple[str, Union[sky_clouds.Cloud,
|
37
42
|
ModuleType]]) -> None:
|
38
43
|
cloud_repr, cloud = cloud_tuple
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
44
|
+
assert capabilities is not None
|
45
|
+
for capability in capabilities:
|
46
|
+
with rich_utils.safe_status(f'Checking {cloud_repr}...'):
|
47
|
+
try:
|
48
|
+
ok, reason = cloud.check_credentials(capability)
|
49
|
+
except exceptions.NotSupportedError:
|
50
|
+
continue
|
51
|
+
except Exception: # pylint: disable=broad-except
|
52
|
+
# Catch all exceptions to prevent a single cloud
|
53
|
+
# from blocking the check for other clouds.
|
54
|
+
ok, reason = False, traceback.format_exc()
|
55
|
+
status_msg = ('enabled' if ok else 'disabled')
|
56
|
+
styles = {'fg': 'green', 'bold': False} if ok else {'dim': True}
|
57
|
+
echo(' ' + click.style(f'{cloud_repr}: {status_msg}', **styles) +
|
58
|
+
' ' * 30)
|
59
|
+
if ok:
|
60
|
+
enabled_clouds.setdefault(cloud_repr, []).append(capability)
|
61
|
+
if verbose and cloud is not cloudflare:
|
62
|
+
activated_account = cloud.get_active_user_identity_str()
|
63
|
+
if activated_account is not None:
|
64
|
+
echo(f' Activated account: {activated_account}')
|
65
|
+
if reason is not None:
|
66
|
+
echo(f' Hint: {reason}')
|
67
|
+
else:
|
68
|
+
disabled_clouds.setdefault(cloud_repr, []).append(capability)
|
69
|
+
echo(f' Reason: {reason}')
|
61
70
|
|
62
71
|
def get_cloud_tuple(
|
63
72
|
cloud_name: str) -> Tuple[str, Union[sky_clouds.Cloud, ModuleType]]:
|
@@ -99,33 +108,39 @@ def check(
|
|
99
108
|
for cloud_tuple in sorted(clouds_to_check):
|
100
109
|
check_one_cloud(cloud_tuple)
|
101
110
|
|
102
|
-
# Cloudflare is not a real cloud in registry.CLOUD_REGISTRY, and should
|
103
|
-
# not be inserted into the DB (otherwise `sky launch` and other code would
|
104
|
-
# error out when it's trying to look it up in the registry).
|
105
|
-
enabled_clouds_set = {
|
106
|
-
cloud for cloud in enabled_clouds if not cloud.startswith('Cloudflare')
|
107
|
-
}
|
108
|
-
disabled_clouds_set = {
|
109
|
-
cloud for cloud in disabled_clouds if not cloud.startswith('Cloudflare')
|
110
|
-
}
|
111
|
-
config_allowed_clouds_set = {
|
112
|
-
cloud for cloud in config_allowed_cloud_names
|
113
|
-
if not cloud.startswith('Cloudflare')
|
114
|
-
}
|
115
|
-
previously_enabled_clouds_set = {
|
116
|
-
repr(cloud) for cloud in global_user_state.get_cached_enabled_clouds()
|
117
|
-
}
|
118
|
-
|
119
111
|
# Determine the set of enabled clouds: (previously enabled clouds + newly
|
120
112
|
# enabled clouds - newly disabled clouds) intersected with
|
121
113
|
# config_allowed_clouds, if specified in config.yaml.
|
122
114
|
# This means that if a cloud is already enabled and is not included in
|
123
115
|
# allowed_clouds in config.yaml, it will be disabled.
|
124
|
-
all_enabled_clouds = (
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
116
|
+
all_enabled_clouds: Set[str] = set()
|
117
|
+
for capability in capabilities:
|
118
|
+
# Cloudflare is not a real cloud in registry.CLOUD_REGISTRY, and should
|
119
|
+
# not be inserted into the DB (otherwise `sky launch` and other code
|
120
|
+
# would error out when it's trying to look it up in the registry).
|
121
|
+
enabled_clouds_set = {
|
122
|
+
cloud for cloud, capabilities in enabled_clouds.items()
|
123
|
+
if capability in capabilities and not cloud.startswith('Cloudflare')
|
124
|
+
}
|
125
|
+
disabled_clouds_set = {
|
126
|
+
cloud for cloud, capabilities in disabled_clouds.items()
|
127
|
+
if capability in capabilities and not cloud.startswith('Cloudflare')
|
128
|
+
}
|
129
|
+
config_allowed_clouds_set = {
|
130
|
+
cloud for cloud in config_allowed_cloud_names
|
131
|
+
if not cloud.startswith('Cloudflare')
|
132
|
+
}
|
133
|
+
previously_enabled_clouds_set = {
|
134
|
+
repr(cloud)
|
135
|
+
for cloud in global_user_state.get_cached_enabled_clouds(capability)
|
136
|
+
}
|
137
|
+
enabled_clouds_for_capability = (config_allowed_clouds_set & (
|
138
|
+
(previously_enabled_clouds_set | enabled_clouds_set) -
|
139
|
+
disabled_clouds_set))
|
140
|
+
global_user_state.set_enabled_clouds(
|
141
|
+
list(enabled_clouds_for_capability), capability)
|
142
|
+
all_enabled_clouds = all_enabled_clouds.union(
|
143
|
+
enabled_clouds_for_capability)
|
129
144
|
disallowed_clouds_hint = None
|
130
145
|
if disallowed_cloud_names:
|
131
146
|
disallowed_clouds_hint = (
|
@@ -160,8 +175,7 @@ def check(
|
|
160
175
|
# Pretty print for UX.
|
161
176
|
if not quiet:
|
162
177
|
enabled_clouds_str = '\n ' + '\n '.join([
|
163
|
-
_format_enabled_cloud(cloud)
|
164
|
-
for cloud in sorted(all_enabled_clouds)
|
178
|
+
_format_enabled_cloud(cloud) for cloud in sorted(enabled_clouds)
|
165
179
|
])
|
166
180
|
echo(f'\n{colorama.Fore.GREEN}{PARTY_POPPER_EMOJI} '
|
167
181
|
f'Enabled clouds {PARTY_POPPER_EMOJI}'
|
@@ -169,7 +183,25 @@ def check(
|
|
169
183
|
return enabled_clouds
|
170
184
|
|
171
185
|
|
186
|
+
# 'sky check' command and associated '/check' server endpoint
|
187
|
+
# only checks compute capability for backward compatibility.
|
188
|
+
# This necessitates setting default capability to CloudCapability.COMPUTE.
|
189
|
+
def check(
|
190
|
+
quiet: bool = False,
|
191
|
+
verbose: bool = False,
|
192
|
+
clouds: Optional[Iterable[str]] = None,
|
193
|
+
capability: sky_cloud.CloudCapability = sky_cloud.CloudCapability.COMPUTE,
|
194
|
+
) -> List[str]:
|
195
|
+
clouds_with_capability = []
|
196
|
+
enabled_clouds = check_capabilities(quiet, verbose, clouds, [capability])
|
197
|
+
for cloud, capabilities in enabled_clouds.items():
|
198
|
+
if capability in capabilities:
|
199
|
+
clouds_with_capability.append(cloud)
|
200
|
+
return clouds_with_capability
|
201
|
+
|
202
|
+
|
172
203
|
def get_cached_enabled_clouds_or_refresh(
|
204
|
+
capability: sky_cloud.CloudCapability,
|
173
205
|
raise_if_no_cloud_access: bool = False) -> List[sky_clouds.Cloud]:
|
174
206
|
"""Returns cached enabled clouds and if no cloud is enabled, refresh.
|
175
207
|
|
@@ -183,16 +215,18 @@ def get_cached_enabled_clouds_or_refresh(
|
|
183
215
|
exceptions.NoCloudAccessError: if no public cloud is enabled and
|
184
216
|
raise_if_no_cloud_access is set to True.
|
185
217
|
"""
|
186
|
-
cached_enabled_clouds = global_user_state.get_cached_enabled_clouds(
|
218
|
+
cached_enabled_clouds = global_user_state.get_cached_enabled_clouds(
|
219
|
+
capability)
|
187
220
|
if not cached_enabled_clouds:
|
188
221
|
try:
|
189
|
-
check(quiet=True)
|
222
|
+
check(quiet=True, capability=capability)
|
190
223
|
except SystemExit:
|
191
224
|
# If no cloud is enabled, check() will raise SystemExit.
|
192
225
|
# Here we catch it and raise the exception later only if
|
193
226
|
# raise_if_no_cloud_access is set to True.
|
194
227
|
pass
|
195
|
-
cached_enabled_clouds = global_user_state.get_cached_enabled_clouds(
|
228
|
+
cached_enabled_clouds = global_user_state.get_cached_enabled_clouds(
|
229
|
+
capability)
|
196
230
|
if raise_if_no_cloud_access and not cached_enabled_clouds:
|
197
231
|
with ux_utils.print_exception_no_traceback():
|
198
232
|
raise exceptions.NoCloudAccessError(
|
@@ -226,7 +260,7 @@ def get_cloud_credential_file_mounts(
|
|
226
260
|
# Currently, get_cached_enabled_clouds_or_refresh() does not support r2 as
|
227
261
|
# only clouds with computing instances are marked as enabled by skypilot.
|
228
262
|
# This will be removed when cloudflare/r2 is added as a 'cloud'.
|
229
|
-
r2_is_enabled, _ = cloudflare.
|
263
|
+
r2_is_enabled, _ = cloudflare.check_storage_credentials()
|
230
264
|
if r2_is_enabled:
|
231
265
|
r2_credential_mounts = cloudflare.get_credential_file_mounts()
|
232
266
|
file_mounts.update(r2_credential_mounts)
|