skypilot-nightly 1.0.0.dev20241203__tar.gz → 1.0.0.dev20241205__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.dev20241203/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20241205}/PKG-INFO +3 -2
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/README.md +2 -1
- {skypilot_nightly-1.0.0.dev20241203/sky/setup_files → skypilot_nightly-1.0.0.dev20241205}/setup.py +12 -124
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/__init__.py +4 -2
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/backends/backend.py +42 -15
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/backends/backend_utils.py +143 -9
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/backends/cloud_vm_ray_backend.py +103 -25
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/backends/local_docker_backend.py +11 -7
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/cli.py +11 -2
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/common.py +2 -2
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/core.py +25 -18
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/exceptions.py +7 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/execution.py +30 -11
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/global_user_state.py +23 -10
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/jobs/controller.py +28 -8
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/jobs/core.py +61 -35
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/jobs/recovery_strategy.py +2 -1
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/jobs/state.py +33 -1
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/jobs/utils.py +16 -2
- skypilot_nightly-1.0.0.dev20241205/sky/setup_files/dependencies.py +141 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205/sky/setup_files}/setup.py +12 -124
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/constants.py +36 -11
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/log_lib.py +3 -1
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/log_lib.pyi +3 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/kubernetes-ray.yml.j2 +4 -2
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/common_utils.py +19 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/controller_utils.py +60 -98
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205/skypilot_nightly.egg-info}/PKG-INFO +3 -2
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/skypilot_nightly.egg-info/SOURCES.txt +1 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/tests/test_smoke.py +93 -71
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/MANIFEST.in +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/pyproject.toml +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/setup.cfg +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/adaptors/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/adaptors/aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/adaptors/azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/adaptors/cloudflare.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/adaptors/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/adaptors/cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/adaptors/docker.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/adaptors/gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/adaptors/ibm.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/adaptors/kubernetes.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/adaptors/oci.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/adaptors/runpod.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/adaptors/vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/admin_policy.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/authentication.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/backends/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/backends/docker_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/backends/wheel_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/benchmark/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/benchmark/benchmark_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/benchmark/benchmark_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/check.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/cloud_stores.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/cloud_registry.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/fluidstack.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/ibm.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/kubernetes.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/lambda_cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/oci.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/paperspace.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/runpod.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/scp.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/aws_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/azure_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/kubernetes_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/oci_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/scp_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/utils/aws_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/utils/azure_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/utils/gcp_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/utils/oci_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/utils/scp_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/clouds/vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/dag.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/data/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/data/data_transfer.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/data/data_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/data/mounting_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/data/storage.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/data/storage_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/jobs/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/jobs/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/jobs/dashboard/dashboard.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/jobs/dashboard/static/favicon.ico +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/jobs/dashboard/templates/index.html +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/optimizer.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/aws/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/aws/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/aws/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/aws/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/azure/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/azure/azure-config-template.json +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/azure/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/azure/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/cudo/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/cudo/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/cudo/cudo_machine_type.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/cudo/cudo_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/cudo/cudo_wrapper.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/cudo/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/docker_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/fluidstack/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/fluidstack/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/fluidstack/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/gcp/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/gcp/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/gcp/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/gcp/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/gcp/instance_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/gcp/mig_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/instance_setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/kubernetes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/kubernetes/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/kubernetes/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/kubernetes/network.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/kubernetes/network_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/kubernetes/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/lambda_cloud/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/lambda_cloud/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/lambda_cloud/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/logging.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/metadata_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/oci/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/oci/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/oci/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/oci/query_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/paperspace/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/paperspace/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/paperspace/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/paperspace/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/paperspace/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/provisioner.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/runpod/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/runpod/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/runpod/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/runpod/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/vsphere/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/vsphere/common/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/vsphere/common/cls_api_client.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/vsphere/common/custom_script.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/vsphere/common/id_generator.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/vsphere/common/metadata_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/vsphere/common/service_manager.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/vsphere/common/ssl_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/vsphere/common/vapiconnect.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/vsphere/common/vim_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/vsphere/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/vsphere/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/provision/vsphere/vsphere_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/resources.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/serve/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/serve/autoscalers.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/serve/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/serve/controller.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/serve/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/serve/load_balancer.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/serve/load_balancing_policies.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/serve/replica_managers.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/serve/serve_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/serve/serve_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/serve/service.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/serve/service_spec.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/setup_files/MANIFEST.in +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/sky_logging.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/attempt_skylet.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/autostop_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/configs.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/events.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/job_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/providers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/providers/command_runner.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/providers/ibm/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/providers/ibm/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/providers/ibm/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/providers/scp/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/providers/scp/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/providers/scp/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/ray_patches/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/ray_patches/cli.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/ray_patches/updater.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/ray_patches/worker.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/skylet.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skylet/subprocess_daemon.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/skypilot_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/status_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/task.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/aws-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/azure-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/cudo-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/fluidstack-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/gcp-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/ibm-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/jobs-controller.yaml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/lambda-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/local-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/oci-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/paperspace-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/runpod-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/scp-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/templates/vsphere-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/usage/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/usage/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/usage/usage_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/accelerator_registry.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/admin_policy_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/cli_utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/cli_utils/status_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/cluster_yaml_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/command_runner.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/command_runner.pyi +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/control_master_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/dag_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/db_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/env_options.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/kubernetes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/kubernetes/create_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/kubernetes/delete_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/kubernetes/deploy_remote_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/kubernetes/generate_kind_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/kubernetes/gpu_labeler.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/kubernetes/rsync_helper.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/kubernetes_enums.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/log_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/resources_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/rich_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/schemas.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/subprocess_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/timeline.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/ux_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/utils/validator.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/skypilot_nightly.egg-info/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/skypilot_nightly.egg-info/requires.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/skypilot_nightly.egg-info/top_level.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/tests/test_api.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/tests/test_cli.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/tests/test_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/tests/test_global_user_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/tests/test_jobs.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/tests/test_jobs_and_serve.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/tests/test_list_accelerators.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/tests/test_optimizer_dryruns.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/tests/test_optimizer_random_dag.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/tests/test_serve_autoscaler.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/tests/test_storage.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/tests/test_wheels.py +0 -0
- {skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/tests/test_yaml_parser.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: skypilot-nightly
|
3
|
-
Version: 1.0.0.
|
3
|
+
Version: 1.0.0.dev20241205
|
4
4
|
Summary: SkyPilot: An intercloud broker for the clouds
|
5
5
|
Author: SkyPilot Team
|
6
6
|
License: Apache 2.0
|
@@ -291,10 +291,11 @@ SkyPilot then performs the heavy-lifting for you, including:
|
|
291
291
|
Refer to [Quickstart](https://skypilot.readthedocs.io/en/latest/getting-started/quickstart.html) to get started with SkyPilot.
|
292
292
|
|
293
293
|
## More Information
|
294
|
-
To learn more, see
|
294
|
+
To learn more, see [Concept: Sky Computing](https://docs.skypilot.co/en/latest/sky-computing.html), [SkyPilot docs](https://skypilot.readthedocs.io/en/latest/), and [SkyPilot blog](https://blog.skypilot.co/).
|
295
295
|
|
296
296
|
<!-- Keep this section in sync with index.rst in SkyPilot Docs -->
|
297
297
|
Runnable examples:
|
298
|
+
- [**AI Gallery**](https://docs.skypilot.co/en/latest/gallery/index.html)
|
298
299
|
- LLMs on SkyPilot
|
299
300
|
- [Llama 3.2: lightweight and vision models](./llm/llama-3_2/)
|
300
301
|
- [Pixtral](./llm/pixtral/)
|
@@ -155,10 +155,11 @@ SkyPilot then performs the heavy-lifting for you, including:
|
|
155
155
|
Refer to [Quickstart](https://skypilot.readthedocs.io/en/latest/getting-started/quickstart.html) to get started with SkyPilot.
|
156
156
|
|
157
157
|
## More Information
|
158
|
-
To learn more, see
|
158
|
+
To learn more, see [Concept: Sky Computing](https://docs.skypilot.co/en/latest/sky-computing.html), [SkyPilot docs](https://skypilot.readthedocs.io/en/latest/), and [SkyPilot blog](https://blog.skypilot.co/).
|
159
159
|
|
160
160
|
<!-- Keep this section in sync with index.rst in SkyPilot Docs -->
|
161
161
|
Runnable examples:
|
162
|
+
- [**AI Gallery**](https://docs.skypilot.co/en/latest/gallery/index.html)
|
162
163
|
- LLMs on SkyPilot
|
163
164
|
- [Llama 3.2: lightweight and vision models](./llm/llama-3_2/)
|
164
165
|
- [Pixtral](./llm/pixtral/)
|
{skypilot_nightly-1.0.0.dev20241203/sky/setup_files → skypilot_nightly-1.0.0.dev20241205}/setup.py
RENAMED
@@ -18,19 +18,28 @@ import io
|
|
18
18
|
import os
|
19
19
|
import platform
|
20
20
|
import re
|
21
|
+
import runpy
|
21
22
|
import subprocess
|
22
23
|
import sys
|
23
|
-
from typing import Dict, List
|
24
24
|
|
25
25
|
import setuptools
|
26
26
|
|
27
|
+
# __file__ is setup.py at the root of the repo. We shouldn't assume it's a
|
28
|
+
# symlink - e.g. in the sdist it's resolved to a normal file.
|
27
29
|
ROOT_DIR = os.path.dirname(__file__)
|
30
|
+
DEPENDENCIES_FILE_PATH = os.path.join(ROOT_DIR, 'sky', 'setup_files',
|
31
|
+
'dependencies.py')
|
28
32
|
INIT_FILE_PATH = os.path.join(ROOT_DIR, 'sky', '__init__.py')
|
29
33
|
_COMMIT_FAILURE_MESSAGE = (
|
30
34
|
'WARNING: SkyPilot fail to {verb} the commit hash in '
|
31
35
|
f'{INIT_FILE_PATH!r} (SkyPilot can still be normally used): '
|
32
36
|
'{error}')
|
33
37
|
|
38
|
+
# setuptools does not include the script dir on the search path, so we can't
|
39
|
+
# just do `import dependencies`. Instead, use runpy to manually load it. Note:
|
40
|
+
# dependencies here is a dict, not a module, so we access it by subscripting.
|
41
|
+
dependencies = runpy.run_path(DEPENDENCIES_FILE_PATH)
|
42
|
+
|
34
43
|
original_init_content = None
|
35
44
|
|
36
45
|
system = platform.system()
|
@@ -130,127 +139,6 @@ def parse_readme(readme: str) -> str:
|
|
130
139
|
return readme
|
131
140
|
|
132
141
|
|
133
|
-
install_requires = [
|
134
|
-
'wheel',
|
135
|
-
'cachetools',
|
136
|
-
# NOTE: ray requires click>=7.0.
|
137
|
-
'click >= 7.0',
|
138
|
-
'colorama',
|
139
|
-
'cryptography',
|
140
|
-
# Jinja has a bug in older versions because of the lack of pinning
|
141
|
-
# the version of the underlying markupsafe package. See:
|
142
|
-
# https://github.com/pallets/jinja/issues/1585
|
143
|
-
'jinja2 >= 3.0',
|
144
|
-
'jsonschema',
|
145
|
-
'networkx',
|
146
|
-
'pandas>=1.3.0',
|
147
|
-
'pendulum',
|
148
|
-
# PrettyTable with version >=2.0.0 is required for the support of
|
149
|
-
# `add_rows` method.
|
150
|
-
'PrettyTable >= 2.0.0',
|
151
|
-
'python-dotenv',
|
152
|
-
'rich',
|
153
|
-
'tabulate',
|
154
|
-
# Light weight requirement, can be replaced with "typing" once
|
155
|
-
# we deprecate Python 3.7 (this will take a while).
|
156
|
-
'typing_extensions',
|
157
|
-
'filelock >= 3.6.0',
|
158
|
-
'packaging',
|
159
|
-
'psutil',
|
160
|
-
'pulp',
|
161
|
-
# Cython 3.0 release breaks PyYAML 5.4.* (https://github.com/yaml/pyyaml/issues/601)
|
162
|
-
# <= 3.13 may encounter https://github.com/ultralytics/yolov5/issues/414
|
163
|
-
'pyyaml > 3.13, != 5.4.*',
|
164
|
-
'requests',
|
165
|
-
]
|
166
|
-
|
167
|
-
local_ray = [
|
168
|
-
# Lower version of ray will cause dependency conflict for
|
169
|
-
# click/grpcio/protobuf.
|
170
|
-
# Excluded 2.6.0 as it has a bug in the cluster launcher:
|
171
|
-
# https://github.com/ray-project/ray/releases/tag/ray-2.6.1
|
172
|
-
'ray[default] >= 2.2.0, != 2.6.0',
|
173
|
-
]
|
174
|
-
|
175
|
-
remote = [
|
176
|
-
# Adopted from ray's setup.py: https://github.com/ray-project/ray/blob/ray-2.4.0/python/setup.py
|
177
|
-
# SkyPilot: != 1.48.0 is required to avoid the error where ray dashboard fails to start when
|
178
|
-
# ray start is called (#2054).
|
179
|
-
# Tracking issue: https://github.com/ray-project/ray/issues/30984
|
180
|
-
"grpcio >= 1.32.0, <= 1.49.1, != 1.48.0; python_version < '3.10' and sys_platform == 'darwin'", # noqa:E501
|
181
|
-
"grpcio >= 1.42.0, <= 1.49.1, != 1.48.0; python_version >= '3.10' and sys_platform == 'darwin'", # noqa:E501
|
182
|
-
# Original issue: https://github.com/ray-project/ray/issues/33833
|
183
|
-
"grpcio >= 1.32.0, <= 1.51.3, != 1.48.0; python_version < '3.10' and sys_platform != 'darwin'", # noqa:E501
|
184
|
-
"grpcio >= 1.42.0, <= 1.51.3, != 1.48.0; python_version >= '3.10' and sys_platform != 'darwin'", # noqa:E501
|
185
|
-
# Adopted from ray's setup.py:
|
186
|
-
# https://github.com/ray-project/ray/blob/ray-2.9.3/python/setup.py#L343
|
187
|
-
'protobuf >= 3.15.3, != 3.19.5',
|
188
|
-
# Some pydantic versions are not compatible with ray. Adopted from ray's
|
189
|
-
# setup.py: https://github.com/ray-project/ray/blob/ray-2.9.3/python/setup.py#L254
|
190
|
-
'pydantic!=2.0.*,!=2.1.*,!=2.2.*,!=2.3.*,!=2.4.*,<3',
|
191
|
-
]
|
192
|
-
|
193
|
-
# NOTE: Change the templates/jobs-controller.yaml.j2 file if any of the
|
194
|
-
# following packages dependencies are changed.
|
195
|
-
aws_dependencies = [
|
196
|
-
# botocore does not work with urllib3>=2.0.0, according to https://github.com/boto/botocore/issues/2926
|
197
|
-
# We have to explicitly pin the version to optimize the time for
|
198
|
-
# poetry install. See https://github.com/orgs/python-poetry/discussions/7937
|
199
|
-
'urllib3<2',
|
200
|
-
# NOTE: this installs CLI V1. To use AWS SSO (e.g., `aws sso login`), users
|
201
|
-
# should instead use CLI V2 which is not pip-installable. See
|
202
|
-
# https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html.
|
203
|
-
'awscli>=1.27.10',
|
204
|
-
'botocore>=1.29.10',
|
205
|
-
'boto3>=1.26.1',
|
206
|
-
# NOTE: required by awscli. To avoid ray automatically installing
|
207
|
-
# the latest version.
|
208
|
-
'colorama < 0.4.5',
|
209
|
-
]
|
210
|
-
|
211
|
-
extras_require: Dict[str, List[str]] = {
|
212
|
-
'aws': aws_dependencies,
|
213
|
-
# TODO(zongheng): azure-cli is huge and takes a long time to install.
|
214
|
-
# Tracked in: https://github.com/Azure/azure-cli/issues/7387
|
215
|
-
# azure-identity is needed in node_provider.
|
216
|
-
# We need azure-identity>=1.13.0 to enable the customization of the
|
217
|
-
# timeout of AzureCliCredential.
|
218
|
-
'azure': [
|
219
|
-
'azure-cli>=2.65.0', 'azure-core>=1.31.0', 'azure-identity>=1.19.0',
|
220
|
-
'azure-mgmt-network>=27.0.0', 'azure-mgmt-compute>=33.0.0',
|
221
|
-
'azure-storage-blob>=12.23.1', 'msgraph-sdk'
|
222
|
-
] + local_ray,
|
223
|
-
# We need google-api-python-client>=2.69.0 to enable 'discardLocalSsd'
|
224
|
-
# parameter for stopping instances.
|
225
|
-
# Reference: https://github.com/googleapis/google-api-python-client/commit/f6e9d3869ed605b06f7cbf2e8cf2db25108506e6
|
226
|
-
'gcp': ['google-api-python-client>=2.69.0', 'google-cloud-storage'],
|
227
|
-
'ibm': [
|
228
|
-
'ibm-cloud-sdk-core', 'ibm-vpc', 'ibm-platform-services', 'ibm-cos-sdk'
|
229
|
-
] + local_ray,
|
230
|
-
'docker': ['docker'] + local_ray,
|
231
|
-
'lambda': local_ray,
|
232
|
-
'cloudflare': aws_dependencies,
|
233
|
-
'scp': local_ray,
|
234
|
-
'oci': ['oci'] + local_ray,
|
235
|
-
'kubernetes': ['kubernetes>=20.0.0'],
|
236
|
-
'remote': remote,
|
237
|
-
'runpod': ['runpod>=1.5.1'],
|
238
|
-
'fluidstack': [], # No dependencies needed for fluidstack
|
239
|
-
'cudo': ['cudo-compute>=0.1.10'],
|
240
|
-
'paperspace': [], # No dependencies needed for paperspace
|
241
|
-
'vsphere': [
|
242
|
-
'pyvmomi==8.0.1.0.2',
|
243
|
-
# vsphere-automation-sdk is also required, but it does not have
|
244
|
-
# pypi release, which cause failure of our pypi release.
|
245
|
-
# https://peps.python.org/pep-0440/#direct-references
|
246
|
-
# We have the instruction for its installation in our
|
247
|
-
# docs instead.
|
248
|
-
# 'vsphere-automation-sdk @ git+https://github.com/vmware/vsphere-automation-sdk-python.git@v8.0.1.0'
|
249
|
-
],
|
250
|
-
}
|
251
|
-
|
252
|
-
extras_require['all'] = sum(extras_require.values(), [])
|
253
|
-
|
254
142
|
long_description = ''
|
255
143
|
readme_filepath = 'README.md'
|
256
144
|
# When sky/backends/wheel_utils.py builds wheels, it will not contain the
|
@@ -277,8 +165,8 @@ setuptools.setup(
|
|
277
165
|
long_description_content_type='text/markdown',
|
278
166
|
setup_requires=['wheel'],
|
279
167
|
requires_python='>=3.7',
|
280
|
-
install_requires=install_requires,
|
281
|
-
extras_require=extras_require,
|
168
|
+
install_requires=dependencies['install_requires'],
|
169
|
+
extras_require=dependencies['extras_require'],
|
282
170
|
entry_points={
|
283
171
|
'console_scripts': ['sky = sky.cli:cli'],
|
284
172
|
},
|
@@ -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 = '6e5083293f0d9a9d069d51274c57f0e59e47e5ce'
|
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.dev20241205'
|
39
39
|
__root_dir__ = os.path.dirname(os.path.abspath(__file__))
|
40
40
|
|
41
41
|
|
@@ -105,6 +105,7 @@ from sky.data import StorageMode
|
|
105
105
|
from sky.data import StoreType
|
106
106
|
from sky.execution import exec # pylint: disable=redefined-builtin
|
107
107
|
from sky.execution import launch
|
108
|
+
from sky.jobs import ManagedJobStatus
|
108
109
|
# TODO (zhwu): These imports are for backward compatibility, and spot APIs
|
109
110
|
# should be called with `sky.spot.xxx` instead. Remove in release 0.8.0
|
110
111
|
from sky.jobs.core import spot_cancel
|
@@ -163,6 +164,7 @@ __all__ = [
|
|
163
164
|
'StoreType',
|
164
165
|
'ClusterStatus',
|
165
166
|
'JobStatus',
|
167
|
+
'ManagedJobStatus',
|
166
168
|
# APIs
|
167
169
|
'Dag',
|
168
170
|
'Task',
|
{skypilot_nightly-1.0.0.dev20241203 → skypilot_nightly-1.0.0.dev20241205}/sky/backends/backend.py
RENAMED
@@ -45,20 +45,45 @@ class Backend(Generic[_ResourceHandleType]):
|
|
45
45
|
@timeline.event
|
46
46
|
@usage_lib.messages.usage.update_runtime('provision')
|
47
47
|
def provision(
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
48
|
+
self,
|
49
|
+
task: 'task_lib.Task',
|
50
|
+
to_provision: Optional['resources.Resources'],
|
51
|
+
dryrun: bool,
|
52
|
+
stream_logs: bool,
|
53
|
+
cluster_name: Optional[str] = None,
|
54
|
+
retry_until_up: bool = False,
|
55
|
+
skip_unnecessary_provisioning: bool = False,
|
56
|
+
) -> Optional[_ResourceHandleType]:
|
57
|
+
"""Provisions resources for the given task.
|
58
|
+
|
59
|
+
Args:
|
60
|
+
task: The task to provision resources for.
|
61
|
+
to_provision: Resource config to provision. Should only be None if
|
62
|
+
cluster_name refers to an existing cluster, whose resources will
|
63
|
+
be used.
|
64
|
+
dryrun: If True, don't actually provision anything.
|
65
|
+
stream_logs: If True, stream additional logs to console.
|
66
|
+
cluster_name: Name of the cluster to provision. If None, a name will
|
67
|
+
be auto-generated. If the name refers to an existing cluster,
|
68
|
+
the existing cluster will be reused and re-provisioned.
|
69
|
+
retry_until_up: If True, retry provisioning until resources are
|
70
|
+
successfully launched.
|
71
|
+
skip_if_no_cluster_updates: If True, compare the cluster config to
|
72
|
+
the existing cluster_name's config. Skip provisioning if no
|
73
|
+
updates are needed for the existing cluster.
|
74
|
+
|
75
|
+
Returns:
|
76
|
+
A ResourceHandle object for the provisioned resources, or None if
|
77
|
+
dryrun is True.
|
78
|
+
"""
|
55
79
|
if cluster_name is None:
|
56
80
|
cluster_name = sky.backends.backend_utils.generate_cluster_name()
|
57
81
|
usage_lib.record_cluster_name_for_current_operation(cluster_name)
|
58
82
|
usage_lib.messages.usage.update_actual_task(task)
|
59
83
|
with rich_utils.safe_status(ux_utils.spinner_message('Launching')):
|
60
84
|
return self._provision(task, to_provision, dryrun, stream_logs,
|
61
|
-
cluster_name, retry_until_up
|
85
|
+
cluster_name, retry_until_up,
|
86
|
+
skip_unnecessary_provisioning)
|
62
87
|
|
63
88
|
@timeline.event
|
64
89
|
@usage_lib.messages.usage.update_runtime('sync_workdir')
|
@@ -126,13 +151,15 @@ class Backend(Generic[_ResourceHandleType]):
|
|
126
151
|
|
127
152
|
# --- Implementations of the APIs ---
|
128
153
|
def _provision(
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
154
|
+
self,
|
155
|
+
task: 'task_lib.Task',
|
156
|
+
to_provision: Optional['resources.Resources'],
|
157
|
+
dryrun: bool,
|
158
|
+
stream_logs: bool,
|
159
|
+
cluster_name: str,
|
160
|
+
retry_until_up: bool = False,
|
161
|
+
skip_unnecessary_provisioning: bool = False,
|
162
|
+
) -> Optional[_ResourceHandleType]:
|
136
163
|
raise NotImplementedError
|
137
164
|
|
138
165
|
def _sync_workdir(self, handle: _ResourceHandleType, workdir: Path) -> None:
|
@@ -3,6 +3,7 @@ from datetime import datetime
|
|
3
3
|
import enum
|
4
4
|
import fnmatch
|
5
5
|
import functools
|
6
|
+
import hashlib
|
6
7
|
import os
|
7
8
|
import pathlib
|
8
9
|
import pprint
|
@@ -644,11 +645,17 @@ def write_cluster_config(
|
|
644
645
|
keep_launch_fields_in_existing_config: bool = True) -> Dict[str, str]:
|
645
646
|
"""Fills in cluster configuration templates and writes them out.
|
646
647
|
|
647
|
-
Returns:
|
648
|
-
|
649
|
-
- 'ray'
|
650
|
-
- '
|
651
|
-
- '
|
648
|
+
Returns:
|
649
|
+
Dict with the following keys:
|
650
|
+
- 'ray': Path to the generated Ray yaml config file
|
651
|
+
- 'cluster_name': Name of the cluster
|
652
|
+
- 'cluster_name_on_cloud': Name of the cluster as it appears in the
|
653
|
+
cloud provider
|
654
|
+
- 'config_hash': Hash of the cluster config and file mounts contents.
|
655
|
+
Can be missing if we unexpectedly failed to calculate the hash for
|
656
|
+
some reason. In that case we will continue without the optimization to
|
657
|
+
skip provisioning.
|
658
|
+
|
652
659
|
Raises:
|
653
660
|
exceptions.ResourcesUnavailableError: if the region/zones requested does
|
654
661
|
not appear in the catalog, or an ssh_proxy_command is specified but
|
@@ -903,6 +910,12 @@ def write_cluster_config(
|
|
903
910
|
if dryrun:
|
904
911
|
# If dryrun, return the unfinished tmp yaml path.
|
905
912
|
config_dict['ray'] = tmp_yaml_path
|
913
|
+
try:
|
914
|
+
config_dict['config_hash'] = _deterministic_cluster_yaml_hash(
|
915
|
+
tmp_yaml_path)
|
916
|
+
except Exception as e: # pylint: disable=broad-except
|
917
|
+
logger.warning(f'Failed to calculate config_hash: {e}')
|
918
|
+
logger.debug('Full exception:', exc_info=e)
|
906
919
|
return config_dict
|
907
920
|
_add_auth_to_cluster_config(cloud, tmp_yaml_path)
|
908
921
|
|
@@ -925,6 +938,17 @@ def write_cluster_config(
|
|
925
938
|
yaml_config = common_utils.read_yaml(tmp_yaml_path)
|
926
939
|
config_dict['cluster_name_on_cloud'] = yaml_config['cluster_name']
|
927
940
|
|
941
|
+
# Make sure to do this before we optimize file mounts. Optimization is
|
942
|
+
# non-deterministic, but everything else before this point should be
|
943
|
+
# deterministic.
|
944
|
+
try:
|
945
|
+
config_dict['config_hash'] = _deterministic_cluster_yaml_hash(
|
946
|
+
tmp_yaml_path)
|
947
|
+
except Exception as e: # pylint: disable=broad-except
|
948
|
+
logger.warning('Failed to calculate config_hash: '
|
949
|
+
f'{common_utils.format_exception(e)}')
|
950
|
+
logger.debug('Full exception:', exc_info=e)
|
951
|
+
|
928
952
|
# Optimization: copy the contents of source files in file_mounts to a
|
929
953
|
# special dir, and upload that as the only file_mount instead. Delay
|
930
954
|
# calling this optimization until now, when all source files have been
|
@@ -1033,6 +1057,115 @@ def _count_healthy_nodes_from_ray(output: str,
|
|
1033
1057
|
return ready_head, ready_workers
|
1034
1058
|
|
1035
1059
|
|
1060
|
+
@timeline.event
|
1061
|
+
def _deterministic_cluster_yaml_hash(yaml_path: str) -> str:
|
1062
|
+
"""Hash the cluster yaml and contents of file mounts to a unique string.
|
1063
|
+
|
1064
|
+
Two invocations of this function should return the same string if and only
|
1065
|
+
if the contents of the yaml are the same and the file contents of all the
|
1066
|
+
file_mounts specified in the yaml are the same.
|
1067
|
+
|
1068
|
+
Limitations:
|
1069
|
+
- This function can be expensive if the file mounts are large. (E.g. a few
|
1070
|
+
seconds for ~1GB.) This should be okay since we expect that the
|
1071
|
+
file_mounts in the cluster yaml (the wheel and cloud credentials) will be
|
1072
|
+
small.
|
1073
|
+
- Symbolic links are not explicitly handled. Some symbolic link changes may
|
1074
|
+
not be detected.
|
1075
|
+
|
1076
|
+
Implementation: We create a byte sequence that captures the state of the
|
1077
|
+
yaml file and all the files in the file mounts, then hash the byte sequence.
|
1078
|
+
|
1079
|
+
The format of the byte sequence is:
|
1080
|
+
32 bytes - sha256 hash of the yaml file
|
1081
|
+
for each file mount:
|
1082
|
+
file mount remote destination (UTF-8), \0
|
1083
|
+
if the file mount source is a file:
|
1084
|
+
'file' encoded to UTF-8
|
1085
|
+
32 byte sha256 hash of the file contents
|
1086
|
+
if the file mount source is a directory:
|
1087
|
+
'dir' encoded to UTF-8
|
1088
|
+
for each directory and subdirectory withinin the file mount (starting from
|
1089
|
+
the root and descending recursively):
|
1090
|
+
name of the directory (UTF-8), \0
|
1091
|
+
name of each subdirectory within the directory (UTF-8) terminated by \0
|
1092
|
+
\0
|
1093
|
+
for each file in the directory:
|
1094
|
+
name of the file (UTF-8), \0
|
1095
|
+
32 bytes - sha256 hash of the file contents
|
1096
|
+
\0
|
1097
|
+
if the file mount source is something else or does not exist, nothing
|
1098
|
+
\0\0
|
1099
|
+
|
1100
|
+
Rather than constructing the whole byte sequence, which may be quite large,
|
1101
|
+
we construct it incrementally by using hash.update() to add new bytes.
|
1102
|
+
"""
|
1103
|
+
|
1104
|
+
def _hash_file(path: str) -> bytes:
|
1105
|
+
return common_utils.hash_file(path, 'sha256').digest()
|
1106
|
+
|
1107
|
+
config_hash = hashlib.sha256()
|
1108
|
+
|
1109
|
+
config_hash.update(_hash_file(yaml_path))
|
1110
|
+
|
1111
|
+
yaml_config = common_utils.read_yaml(yaml_path)
|
1112
|
+
file_mounts = yaml_config.get('file_mounts', {})
|
1113
|
+
# Remove the file mounts added by the newline.
|
1114
|
+
if '' in file_mounts:
|
1115
|
+
assert file_mounts[''] == '', file_mounts['']
|
1116
|
+
file_mounts.pop('')
|
1117
|
+
|
1118
|
+
for dst, src in sorted(file_mounts.items()):
|
1119
|
+
expanded_src = os.path.expanduser(src)
|
1120
|
+
config_hash.update(dst.encode('utf-8') + b'\0')
|
1121
|
+
|
1122
|
+
# If the file mount source is a symlink, this should be true. In that
|
1123
|
+
# case we hash the contents of the symlink destination.
|
1124
|
+
if os.path.isfile(expanded_src):
|
1125
|
+
config_hash.update('file'.encode('utf-8'))
|
1126
|
+
config_hash.update(_hash_file(expanded_src))
|
1127
|
+
|
1128
|
+
# This can also be a symlink to a directory. os.walk will treat it as a
|
1129
|
+
# normal directory and list the contents of the symlink destination.
|
1130
|
+
elif os.path.isdir(expanded_src):
|
1131
|
+
config_hash.update('dir'.encode('utf-8'))
|
1132
|
+
|
1133
|
+
# Aside from expanded_src, os.walk will list symlinks to directories
|
1134
|
+
# but will not recurse into them.
|
1135
|
+
for (dirpath, dirnames, filenames) in os.walk(expanded_src):
|
1136
|
+
config_hash.update(dirpath.encode('utf-8') + b'\0')
|
1137
|
+
|
1138
|
+
# Note: inplace sort will also affect the traversal order of
|
1139
|
+
# os.walk. We need it so that the os.walk order is
|
1140
|
+
# deterministic.
|
1141
|
+
dirnames.sort()
|
1142
|
+
# This includes symlinks to directories. os.walk will recurse
|
1143
|
+
# into all the directories but not the symlinks. We don't hash
|
1144
|
+
# the link destination, so if a symlink to a directory changes,
|
1145
|
+
# we won't notice.
|
1146
|
+
for dirname in dirnames:
|
1147
|
+
config_hash.update(dirname.encode('utf-8') + b'\0')
|
1148
|
+
config_hash.update(b'\0')
|
1149
|
+
|
1150
|
+
filenames.sort()
|
1151
|
+
# This includes symlinks to files. We could hash the symlink
|
1152
|
+
# destination itself but instead just hash the destination
|
1153
|
+
# contents.
|
1154
|
+
for filename in filenames:
|
1155
|
+
config_hash.update(filename.encode('utf-8') + b'\0')
|
1156
|
+
config_hash.update(
|
1157
|
+
_hash_file(os.path.join(dirpath, filename)))
|
1158
|
+
config_hash.update(b'\0')
|
1159
|
+
|
1160
|
+
else:
|
1161
|
+
logger.debug(
|
1162
|
+
f'Unexpected file_mount that is not a file or dir: {src}')
|
1163
|
+
|
1164
|
+
config_hash.update(b'\0\0')
|
1165
|
+
|
1166
|
+
return config_hash.hexdigest()
|
1167
|
+
|
1168
|
+
|
1036
1169
|
def get_docker_user(ip: str, cluster_config_file: str) -> str:
|
1037
1170
|
"""Find docker container username."""
|
1038
1171
|
ssh_credentials = ssh_credential_from_yaml(cluster_config_file)
|
@@ -1612,14 +1745,14 @@ def check_can_clone_disk_and_override_task(
|
|
1612
1745
|
The task to use and the resource handle of the source cluster.
|
1613
1746
|
|
1614
1747
|
Raises:
|
1615
|
-
|
1748
|
+
exceptions.ClusterDoesNotExist: If the source cluster does not exist.
|
1616
1749
|
exceptions.NotSupportedError: If the source cluster is not valid or the
|
1617
1750
|
task is not compatible to clone disk from the source cluster.
|
1618
1751
|
"""
|
1619
1752
|
source_cluster_status, handle = refresh_cluster_status_handle(cluster_name)
|
1620
1753
|
if source_cluster_status is None:
|
1621
1754
|
with ux_utils.print_exception_no_traceback():
|
1622
|
-
raise
|
1755
|
+
raise exceptions.ClusterDoesNotExist(
|
1623
1756
|
f'Cannot find cluster {cluster_name!r} to clone disk from.')
|
1624
1757
|
|
1625
1758
|
if not isinstance(handle, backends.CloudVmRayResourceHandle):
|
@@ -2136,7 +2269,7 @@ def check_cluster_available(
|
|
2136
2269
|
"""Check if the cluster is available.
|
2137
2270
|
|
2138
2271
|
Raises:
|
2139
|
-
|
2272
|
+
exceptions.ClusterDoesNotExist: if the cluster does not exist.
|
2140
2273
|
exceptions.ClusterNotUpError: if the cluster is not UP.
|
2141
2274
|
exceptions.NotSupportedError: if the cluster is not based on
|
2142
2275
|
CloudVmRayBackend.
|
@@ -2201,7 +2334,8 @@ def check_cluster_available(
|
|
2201
2334
|
error_msg += message
|
2202
2335
|
|
2203
2336
|
with ux_utils.print_exception_no_traceback():
|
2204
|
-
raise
|
2337
|
+
raise exceptions.ClusterDoesNotExist(
|
2338
|
+
f'{colorama.Fore.YELLOW}{error_msg}{reset}')
|
2205
2339
|
assert cluster_status is not None, 'handle is not None but status is None'
|
2206
2340
|
backend = get_backend_from_handle(handle)
|
2207
2341
|
if check_cloud_vm_ray_backend and not isinstance(
|