skypilot-nightly 1.0.0.dev20241024__tar.gz → 1.0.0.dev20241026__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.dev20241024/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20241026}/PKG-INFO +1 -1
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/__init__.py +2 -2
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/check.py +11 -4
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/cli.py +2 -2
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/azure.py +86 -50
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/oci.py +4 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/azure_catalog.py +28 -3
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/kubernetes_catalog.py +7 -1
- skypilot_nightly-1.0.0.dev20241026/sky/clouds/utils/azure_utils.py +91 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/exceptions.py +4 -4
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/jobs/controller.py +1 -1
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/jobs/recovery_strategy.py +3 -3
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/azure/azure-config-template.json +7 -1
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/azure/config.py +23 -8
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/azure/instance.py +91 -50
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/kubernetes/instance.py +70 -4
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/provisioner.py +16 -8
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/resources.py +1 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/usage/usage_lib.py +3 -2
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/common_utils.py +3 -2
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/controller_utils.py +69 -18
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026/skypilot_nightly.egg-info}/PKG-INFO +1 -1
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/skypilot_nightly.egg-info/SOURCES.txt +1 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/MANIFEST.in +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/README.md +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/pyproject.toml +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/setup.cfg +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/adaptors/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/adaptors/aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/adaptors/azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/adaptors/cloudflare.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/adaptors/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/adaptors/cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/adaptors/docker.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/adaptors/gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/adaptors/ibm.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/adaptors/kubernetes.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/adaptors/oci.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/adaptors/runpod.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/adaptors/vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/admin_policy.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/authentication.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/backends/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/backends/backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/backends/backend_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/backends/cloud_vm_ray_backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/backends/docker_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/backends/local_docker_backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/backends/wheel_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/benchmark/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/benchmark/benchmark_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/benchmark/benchmark_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/cloud_stores.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/cloud_registry.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/fluidstack.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/ibm.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/kubernetes.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/lambda_cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/paperspace.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/runpod.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/scp.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/aws_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/oci_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/scp_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/utils/aws_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/utils/gcp_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/utils/oci_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/utils/scp_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/dag.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/data/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/data/data_transfer.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/data/data_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/data/mounting_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/data/storage.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/data/storage_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/execution.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/global_user_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/jobs/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/jobs/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/jobs/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/jobs/dashboard/dashboard.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/jobs/dashboard/static/favicon.ico +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/jobs/dashboard/templates/index.html +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/jobs/state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/jobs/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/optimizer.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/aws/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/aws/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/aws/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/aws/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/azure/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/cudo/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/cudo/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/cudo/cudo_machine_type.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/cudo/cudo_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/cudo/cudo_wrapper.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/cudo/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/docker_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/fluidstack/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/fluidstack/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/fluidstack/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/gcp/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/gcp/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/gcp/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/gcp/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/gcp/instance_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/gcp/mig_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/instance_setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/kubernetes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/kubernetes/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/kubernetes/network.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/kubernetes/network_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/kubernetes/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/lambda_cloud/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/lambda_cloud/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/lambda_cloud/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/logging.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/metadata_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/paperspace/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/paperspace/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/paperspace/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/paperspace/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/paperspace/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/runpod/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/runpod/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/runpod/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/runpod/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/vsphere/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/vsphere/common/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/vsphere/common/cls_api_client.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/vsphere/common/custom_script.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/vsphere/common/id_generator.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/vsphere/common/metadata_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/vsphere/common/service_manager.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/vsphere/common/ssl_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/vsphere/common/vapiconnect.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/vsphere/common/vim_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/vsphere/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/vsphere/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/provision/vsphere/vsphere_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/serve/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/serve/autoscalers.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/serve/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/serve/controller.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/serve/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/serve/load_balancer.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/serve/load_balancing_policies.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/serve/replica_managers.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/serve/serve_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/serve/serve_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/serve/service.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/serve/service_spec.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/setup_files/MANIFEST.in +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/setup_files/setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/sky_logging.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/attempt_skylet.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/autostop_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/configs.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/events.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/job_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/log_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/log_lib.pyi +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/providers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/providers/command_runner.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/providers/ibm/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/providers/ibm/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/providers/ibm/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/providers/oci/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/providers/oci/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/providers/oci/query_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/providers/oci/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/providers/scp/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/providers/scp/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/providers/scp/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/ray_patches/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/ray_patches/cli.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/ray_patches/updater.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/ray_patches/worker.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/skylet.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skylet/subprocess_daemon.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/skypilot_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/status_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/task.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/aws-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/azure-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/cudo-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/fluidstack-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/gcp-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/ibm-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/jobs-controller.yaml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/kubernetes-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/lambda-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/local-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/oci-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/paperspace-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/runpod-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/scp-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/templates/vsphere-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/usage/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/usage/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/accelerator_registry.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/admin_policy_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/cli_utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/cli_utils/status_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/cluster_yaml_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/command_runner.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/command_runner.pyi +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/dag_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/db_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/env_options.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/kubernetes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/kubernetes/create_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/kubernetes/delete_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/kubernetes/deploy_remote_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/kubernetes/generate_kind_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/kubernetes/gpu_labeler.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/kubernetes/rsync_helper.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/kubernetes_enums.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/log_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/resources_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/rich_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/schemas.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/subprocess_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/timeline.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/ux_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/utils/validator.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/skypilot_nightly.egg-info/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/skypilot_nightly.egg-info/requires.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/skypilot_nightly.egg-info/top_level.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/tests/test_api.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/tests/test_cli.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/tests/test_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/tests/test_global_user_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/tests/test_jobs.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/tests/test_jobs_and_serve.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/tests/test_list_accelerators.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/tests/test_optimizer_dryruns.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/tests/test_optimizer_random_dag.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/tests/test_serve_autoscaler.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/tests/test_smoke.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/tests/test_storage.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/tests/test_wheels.py +0 -0
- {skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/tests/test_yaml_parser.py +0 -0
@@ -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 = '0e915d3430d8027aa40b766605bb13c889ffc62f'
|
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.dev20241026'
|
39
39
|
__root_dir__ = os.path.dirname(os.path.abspath(__file__))
|
40
40
|
|
41
41
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
"""Credential checks: check cloud credentials and enable clouds."""
|
2
|
+
import os
|
2
3
|
import traceback
|
3
4
|
from types import ModuleType
|
4
5
|
from typing import Dict, Iterable, List, Optional, Tuple, Union
|
@@ -194,19 +195,25 @@ def get_cached_enabled_clouds_or_refresh(
|
|
194
195
|
def get_cloud_credential_file_mounts(
|
195
196
|
excluded_clouds: Optional[Iterable[sky_clouds.Cloud]]
|
196
197
|
) -> Dict[str, str]:
|
197
|
-
"""Returns the files necessary to access all
|
198
|
+
"""Returns the files necessary to access all clouds.
|
198
199
|
|
199
200
|
Returns a dictionary that will be added to a task's file mounts
|
200
201
|
and a list of patterns that will be excluded (used as rsync_exclude).
|
201
202
|
"""
|
202
|
-
|
203
|
+
# Uploading credentials for all clouds instead of only sky check
|
204
|
+
# enabled clouds because users may have partial credentials for some
|
205
|
+
# clouds to access their specific resources (e.g. cloud storage) but
|
206
|
+
# not have the complete credentials to pass sky check.
|
207
|
+
clouds = sky_clouds.CLOUD_REGISTRY.values()
|
203
208
|
file_mounts = {}
|
204
|
-
for cloud in
|
209
|
+
for cloud in clouds:
|
205
210
|
if (excluded_clouds is not None and
|
206
211
|
sky_clouds.cloud_in_iterable(cloud, excluded_clouds)):
|
207
212
|
continue
|
208
213
|
cloud_file_mounts = cloud.get_credential_file_mounts()
|
209
|
-
|
214
|
+
for remote_path, local_path in cloud_file_mounts.items():
|
215
|
+
if os.path.exists(os.path.expanduser(local_path)):
|
216
|
+
file_mounts[remote_path] = local_path
|
210
217
|
# Currently, get_cached_enabled_clouds_or_refresh() does not support r2 as
|
211
218
|
# only clouds with computing instances are marked as enabled by skypilot.
|
212
219
|
# This will be removed when cloudflare/r2 is added as a 'cloud'.
|
@@ -3085,7 +3085,7 @@ def show_gpus(
|
|
3085
3085
|
qty_header = 'QTY_FILTER'
|
3086
3086
|
free_header = 'FILTERED_FREE_GPUS'
|
3087
3087
|
else:
|
3088
|
-
qty_header = '
|
3088
|
+
qty_header = 'REQUESTABLE_QTY_PER_NODE'
|
3089
3089
|
free_header = 'TOTAL_FREE_GPUS'
|
3090
3090
|
realtime_gpu_table = log_utils.create_table(
|
3091
3091
|
['GPU', qty_header, 'TOTAL_GPUS', free_header])
|
@@ -3519,7 +3519,7 @@ def jobs():
|
|
3519
3519
|
default=None,
|
3520
3520
|
type=str,
|
3521
3521
|
hidden=True,
|
3522
|
-
help=('Alias for --name, the name of the
|
3522
|
+
help=('Alias for --name, the name of the managed job.'))
|
3523
3523
|
@click.option('--job-recovery',
|
3524
3524
|
default=None,
|
3525
3525
|
type=str,
|
{skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/clouds/azure.py
RENAMED
@@ -15,6 +15,7 @@ from sky import exceptions
|
|
15
15
|
from sky import sky_logging
|
16
16
|
from sky.adaptors import azure
|
17
17
|
from sky.clouds import service_catalog
|
18
|
+
from sky.clouds.utils import azure_utils
|
18
19
|
from sky.utils import common_utils
|
19
20
|
from sky.utils import resources_utils
|
20
21
|
from sky.utils import ux_utils
|
@@ -36,6 +37,15 @@ _MAX_IDENTITY_FETCH_RETRY = 10
|
|
36
37
|
|
37
38
|
_DEFAULT_AZURE_UBUNTU_HPC_IMAGE_GB = 30
|
38
39
|
_DEFAULT_AZURE_UBUNTU_2004_IMAGE_GB = 150
|
40
|
+
_DEFAULT_SKYPILOT_IMAGE_GB = 30
|
41
|
+
|
42
|
+
_DEFAULT_CPU_IMAGE_ID = 'skypilot:custom-cpu-ubuntu-v2'
|
43
|
+
_DEFAULT_GPU_IMAGE_ID = 'skypilot:custom-gpu-ubuntu-v2'
|
44
|
+
_DEFAULT_V1_IMAGE_ID = 'skypilot:custom-gpu-ubuntu-v1'
|
45
|
+
_DEFAULT_GPU_K80_IMAGE_ID = 'skypilot:k80-ubuntu-2004'
|
46
|
+
_FALLBACK_IMAGE_ID = 'skypilot:gpu-ubuntu-2204'
|
47
|
+
|
48
|
+
_COMMUNITY_IMAGE_PREFIX = '/CommunityGalleries'
|
39
49
|
|
40
50
|
|
41
51
|
def _run_output(cmd):
|
@@ -132,29 +142,56 @@ class Azure(clouds.Cloud):
|
|
132
142
|
cost += 0.0
|
133
143
|
return cost
|
134
144
|
|
145
|
+
@classmethod
|
146
|
+
def get_default_instance_type(
|
147
|
+
cls,
|
148
|
+
cpus: Optional[str] = None,
|
149
|
+
memory: Optional[str] = None,
|
150
|
+
disk_tier: Optional[resources_utils.DiskTier] = None
|
151
|
+
) -> Optional[str]:
|
152
|
+
return service_catalog.get_default_instance_type(cpus=cpus,
|
153
|
+
memory=memory,
|
154
|
+
disk_tier=disk_tier,
|
155
|
+
clouds='azure')
|
156
|
+
|
135
157
|
@classmethod
|
136
158
|
def get_image_size(cls, image_id: str, region: Optional[str]) -> float:
|
137
|
-
|
138
|
-
# The region used here is only for where to send the query,
|
139
|
-
# not the image location. Azure's image is globally available.
|
140
|
-
region = 'eastus'
|
141
|
-
is_skypilot_image_tag = False
|
159
|
+
# Process skypilot images.
|
142
160
|
if image_id.startswith('skypilot:'):
|
143
|
-
is_skypilot_image_tag = True
|
144
161
|
image_id = service_catalog.get_image_id_from_tag(image_id,
|
145
162
|
clouds='azure')
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
'format: <publisher>:<offer>:<sku>:<version>')
|
151
|
-
publisher, offer, sku, version = image_id_splitted
|
152
|
-
if is_skypilot_image_tag:
|
153
|
-
if offer == 'ubuntu-hpc':
|
154
|
-
return _DEFAULT_AZURE_UBUNTU_HPC_IMAGE_GB
|
163
|
+
if image_id.startswith(_COMMUNITY_IMAGE_PREFIX):
|
164
|
+
# Avoid querying the image size from Azure as
|
165
|
+
# all skypilot custom images have the same size.
|
166
|
+
return _DEFAULT_SKYPILOT_IMAGE_GB
|
155
167
|
else:
|
156
|
-
|
168
|
+
publisher, offer, sku, version = image_id.split(':')
|
169
|
+
if offer == 'ubuntu-hpc':
|
170
|
+
return _DEFAULT_AZURE_UBUNTU_HPC_IMAGE_GB
|
171
|
+
else:
|
172
|
+
return _DEFAULT_AZURE_UBUNTU_2004_IMAGE_GB
|
173
|
+
|
174
|
+
# Process user-specified images.
|
175
|
+
azure_utils.validate_image_id(image_id)
|
157
176
|
compute_client = azure.get_client('compute', cls.get_project_id())
|
177
|
+
|
178
|
+
# Community gallery image.
|
179
|
+
if image_id.startswith(_COMMUNITY_IMAGE_PREFIX):
|
180
|
+
if region is None:
|
181
|
+
return 0.0
|
182
|
+
_, _, gallery_name, _, image_name = image_id.split('/')
|
183
|
+
try:
|
184
|
+
return azure_utils.get_community_image_size(
|
185
|
+
compute_client, gallery_name, image_name, region)
|
186
|
+
except exceptions.ResourcesUnavailableError:
|
187
|
+
return 0.0
|
188
|
+
|
189
|
+
# Marketplace image
|
190
|
+
if region is None:
|
191
|
+
# The region used here is only for where to send the query,
|
192
|
+
# not the image location. Marketplace image is globally available.
|
193
|
+
region = 'eastus'
|
194
|
+
publisher, offer, sku, version = image_id.split(':')
|
158
195
|
try:
|
159
196
|
image = compute_client.virtual_machine_images.get(
|
160
197
|
region, publisher, offer, sku, version)
|
@@ -176,40 +213,23 @@ class Azure(clouds.Cloud):
|
|
176
213
|
size_in_gb = size_in_bytes / (1024**3)
|
177
214
|
return size_in_gb
|
178
215
|
|
179
|
-
@classmethod
|
180
|
-
def get_default_instance_type(
|
181
|
-
cls,
|
182
|
-
cpus: Optional[str] = None,
|
183
|
-
memory: Optional[str] = None,
|
184
|
-
disk_tier: Optional[resources_utils.DiskTier] = None
|
185
|
-
) -> Optional[str]:
|
186
|
-
return service_catalog.get_default_instance_type(cpus=cpus,
|
187
|
-
memory=memory,
|
188
|
-
disk_tier=disk_tier,
|
189
|
-
clouds='azure')
|
190
|
-
|
191
216
|
def _get_default_image_tag(self, gen_version, instance_type) -> str:
|
192
217
|
# ubuntu-2004 v21.08.30, K80 requires image with old NVIDIA driver version
|
193
218
|
acc = self.get_accelerators_from_instance_type(instance_type)
|
194
219
|
if acc is not None:
|
195
220
|
acc_name = list(acc.keys())[0]
|
196
221
|
if acc_name == 'K80':
|
197
|
-
return
|
198
|
-
|
199
|
-
# ubuntu-2004 v21.11.04, the previous image we used in the past for
|
200
|
-
# V1 HyperV instance before we change default image to ubuntu-hpc.
|
222
|
+
return _DEFAULT_GPU_K80_IMAGE_ID
|
223
|
+
# About Gen V1 vs V2:
|
201
224
|
# In Azure, all instances with K80 (Standard_NC series), some
|
202
225
|
# instances with M60 (Standard_NV series) and some cpu instances
|
203
|
-
# (Basic_A, Standard_D, ...) are V1 instance.
|
204
|
-
#
|
226
|
+
# (Basic_A, Standard_D, ...) are V1 instance.
|
227
|
+
# All A100 instances are V2.
|
205
228
|
if gen_version == 'V1':
|
206
|
-
return
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
# All A100 instances is of gen2, so it will always use
|
211
|
-
# the latest ubuntu-hpc:2204 image.
|
212
|
-
return 'skypilot:gpu-ubuntu-2204'
|
229
|
+
return _DEFAULT_V1_IMAGE_ID
|
230
|
+
if acc is None:
|
231
|
+
return _DEFAULT_CPU_IMAGE_ID
|
232
|
+
return _DEFAULT_GPU_IMAGE_ID
|
213
233
|
|
214
234
|
@classmethod
|
215
235
|
def regions_with_offering(cls, instance_type: str,
|
@@ -302,17 +322,34 @@ class Azure(clouds.Cloud):
|
|
302
322
|
else:
|
303
323
|
assert region_name in resources.image_id, resources.image_id
|
304
324
|
image_id = resources.image_id[region_name]
|
325
|
+
|
326
|
+
# Checked basic image syntax in resources.py
|
305
327
|
if image_id.startswith('skypilot:'):
|
306
328
|
image_id = service_catalog.get_image_id_from_tag(image_id,
|
307
329
|
clouds='azure')
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
330
|
+
# Fallback if image does not exist in the specified region.
|
331
|
+
# Putting fallback here instead of at image validation
|
332
|
+
# when creating the resource because community images are
|
333
|
+
# regional so we need the correct region when we check whether
|
334
|
+
# the image exists.
|
335
|
+
if image_id.startswith(
|
336
|
+
_COMMUNITY_IMAGE_PREFIX
|
337
|
+
) and region_name not in azure_catalog.COMMUNITY_IMAGE_AVAILABLE_REGIONS:
|
338
|
+
logger.info(f'Azure image {image_id} does not exist in region '
|
339
|
+
f'{region_name} so use the fallback image instead.')
|
340
|
+
image_id = service_catalog.get_image_id_from_tag(
|
341
|
+
_FALLBACK_IMAGE_ID, clouds='azure')
|
342
|
+
|
343
|
+
if image_id.startswith(_COMMUNITY_IMAGE_PREFIX):
|
344
|
+
image_config = {'community_gallery_image_id': image_id}
|
345
|
+
else:
|
346
|
+
publisher, offer, sku, version = image_id.split(':')
|
347
|
+
image_config = {
|
348
|
+
'image_publisher': publisher,
|
349
|
+
'image_offer': offer,
|
350
|
+
'image_sku': sku,
|
351
|
+
'image_version': version,
|
352
|
+
}
|
316
353
|
|
317
354
|
# Setup the A10 nvidia driver.
|
318
355
|
need_nvidia_driver_extension = (acc_dict is not None and
|
@@ -380,7 +417,6 @@ class Azure(clouds.Cloud):
|
|
380
417
|
# Setting disk performance tier for high disk tier.
|
381
418
|
if disk_tier == resources_utils.DiskTier.HIGH:
|
382
419
|
resources_vars['disk_performance_tier'] = 'P50'
|
383
|
-
|
384
420
|
return resources_vars
|
385
421
|
|
386
422
|
def _get_feasible_launchable_resources(
|
@@ -468,8 +468,12 @@ class OCI(clouds.Cloud):
|
|
468
468
|
api_key_file = oci_cfg[
|
469
469
|
'key_file'] if 'key_file' in oci_cfg else 'BadConf'
|
470
470
|
sky_cfg_file = oci_utils.oci_config.get_sky_user_config_file()
|
471
|
+
# Must catch ImportError before any oci_adaptor.oci.exceptions
|
472
|
+
# because oci_adaptor.oci.exceptions can throw ImportError.
|
471
473
|
except ImportError:
|
472
474
|
return {}
|
475
|
+
except oci_adaptor.oci.exceptions.ConfigFileNotFound:
|
476
|
+
return {}
|
473
477
|
|
474
478
|
# OCI config and API key file are mandatory
|
475
479
|
credential_files = [oci_cfg_file, api_key_file]
|
@@ -7,11 +7,29 @@ import re
|
|
7
7
|
from typing import Dict, List, Optional, Tuple
|
8
8
|
|
9
9
|
from sky import clouds as cloud_lib
|
10
|
+
from sky import sky_logging
|
10
11
|
from sky.clouds import Azure
|
11
12
|
from sky.clouds.service_catalog import common
|
12
13
|
from sky.utils import resources_utils
|
13
14
|
from sky.utils import ux_utils
|
14
15
|
|
16
|
+
logger = sky_logging.init_logger(__name__)
|
17
|
+
|
18
|
+
# This list should match the list of regions in
|
19
|
+
# skypilot image generation Packer script's replication_regions
|
20
|
+
# sky/clouds/service_catalog/images/skypilot-azure-cpu-ubuntu.pkr.hcl
|
21
|
+
COMMUNITY_IMAGE_AVAILABLE_REGIONS = {
|
22
|
+
'centralus',
|
23
|
+
'eastus',
|
24
|
+
'eastus2',
|
25
|
+
'northcentralus',
|
26
|
+
'southcentralus',
|
27
|
+
'westcentralus',
|
28
|
+
'westus',
|
29
|
+
'westus2',
|
30
|
+
'westus3',
|
31
|
+
}
|
32
|
+
|
15
33
|
# The frequency of pulling the latest catalog from the cloud provider.
|
16
34
|
# Though the catalog update is manual in our skypilot-catalog repo, we
|
17
35
|
# still want to pull the latest catalog periodically to make sure the
|
@@ -176,9 +194,16 @@ def list_accelerators(
|
|
176
194
|
|
177
195
|
def get_image_id_from_tag(tag: str, region: Optional[str]) -> Optional[str]:
|
178
196
|
"""Returns the image id from the tag."""
|
179
|
-
|
180
|
-
|
181
|
-
|
197
|
+
global _image_df
|
198
|
+
image_id = common.get_image_id_from_tag_impl(_image_df, tag, region)
|
199
|
+
if image_id is None:
|
200
|
+
# Refresh the image catalog and try again, if the image tag is not
|
201
|
+
# found.
|
202
|
+
logger.debug('Refreshing the image catalog and trying again.')
|
203
|
+
_image_df = common.read_catalog('azure/images.csv',
|
204
|
+
pull_frequency_hours=0)
|
205
|
+
image_id = common.get_image_id_from_tag_impl(_image_df, tag, region)
|
206
|
+
return image_id
|
182
207
|
|
183
208
|
|
184
209
|
def is_image_tag_valid(tag: str, region: Optional[str]) -> bool:
|
@@ -120,8 +120,14 @@ def list_accelerators_realtime(
|
|
120
120
|
|
121
121
|
# Generate the GPU quantities for the accelerators
|
122
122
|
if accelerator_name and accelerator_count > 0:
|
123
|
-
|
123
|
+
count = 1
|
124
|
+
while count <= accelerator_count:
|
124
125
|
accelerators_qtys.add((accelerator_name, count))
|
126
|
+
count *= 2
|
127
|
+
# Add the accelerator count if it's not already in the set
|
128
|
+
# (e.g., if there's 12 GPUs, we should have qtys 1, 2, 4, 8, 12)
|
129
|
+
if accelerator_count not in accelerators_qtys:
|
130
|
+
accelerators_qtys.add((accelerator_name, accelerator_count))
|
125
131
|
|
126
132
|
for pod in pods:
|
127
133
|
# Get all the pods running on the node
|
@@ -0,0 +1,91 @@
|
|
1
|
+
"""Utilies for Azure"""
|
2
|
+
|
3
|
+
import typing
|
4
|
+
|
5
|
+
from sky import exceptions
|
6
|
+
from sky.adaptors import azure
|
7
|
+
from sky.utils import ux_utils
|
8
|
+
|
9
|
+
if typing.TYPE_CHECKING:
|
10
|
+
from azure.mgmt import compute as azure_compute
|
11
|
+
from azure.mgmt.compute import models as azure_compute_models
|
12
|
+
|
13
|
+
|
14
|
+
def validate_image_id(image_id: str):
|
15
|
+
"""Check if the image ID has a valid format.
|
16
|
+
|
17
|
+
Raises:
|
18
|
+
ValueError: If the image ID is invalid.
|
19
|
+
"""
|
20
|
+
image_id_colon_splitted = image_id.split(':')
|
21
|
+
image_id_slash_splitted = image_id.split('/')
|
22
|
+
if len(image_id_slash_splitted) != 5 and len(image_id_colon_splitted) != 4:
|
23
|
+
with ux_utils.print_exception_no_traceback():
|
24
|
+
raise ValueError(
|
25
|
+
f'Invalid image id for Azure: {image_id}. Expected format: \n'
|
26
|
+
'* Marketplace image ID: <publisher>:<offer>:<sku>:<version>\n'
|
27
|
+
'* Community image ID: '
|
28
|
+
'/CommunityGalleries/<gallery-name>/Images/<image-name>')
|
29
|
+
if len(image_id_slash_splitted) == 5:
|
30
|
+
_, gallery_type, _, image_type, _ = image_id.split('/')
|
31
|
+
if gallery_type != 'CommunityGalleries' or image_type != 'Images':
|
32
|
+
with ux_utils.print_exception_no_traceback():
|
33
|
+
raise ValueError(
|
34
|
+
f'Invalid community image id for Azure: {image_id}.\n'
|
35
|
+
'Expected format: '
|
36
|
+
'/CommunityGalleries/<gallery-name>/Images/<image-name>')
|
37
|
+
|
38
|
+
|
39
|
+
def get_community_image(
|
40
|
+
compute_client: 'azure_compute.ComputeManagementClient', image_id: str,
|
41
|
+
region: str) -> 'azure_compute_models.CommunityGalleryImage':
|
42
|
+
"""Get community image from cloud.
|
43
|
+
|
44
|
+
Args:
|
45
|
+
image_id: /CommunityGalleries/<gallery-name>/Images/<image-name>
|
46
|
+
Raises:
|
47
|
+
ResourcesUnavailableError
|
48
|
+
"""
|
49
|
+
try:
|
50
|
+
_, _, gallery_name, _, image_name = image_id.split('/')
|
51
|
+
return compute_client.community_gallery_images.get(
|
52
|
+
location=region,
|
53
|
+
public_gallery_name=gallery_name,
|
54
|
+
gallery_image_name=image_name)
|
55
|
+
except azure.exceptions().AzureError as e:
|
56
|
+
raise exceptions.ResourcesUnavailableError(
|
57
|
+
f'Community image {image_id} does not exist in region {region}.'
|
58
|
+
) from e
|
59
|
+
|
60
|
+
|
61
|
+
def get_community_image_size(
|
62
|
+
compute_client: 'azure_compute.ComputeManagementClient',
|
63
|
+
gallery_name: str, image_name: str, region: str) -> float:
|
64
|
+
"""Get the size of the community image from cloud.
|
65
|
+
|
66
|
+
Args:
|
67
|
+
image_id: /CommunityGalleries/<gallery-name>/Images/<image-name>
|
68
|
+
Raises:
|
69
|
+
ResourcesUnavailableError
|
70
|
+
"""
|
71
|
+
try:
|
72
|
+
image_versions = compute_client.community_gallery_image_versions.list(
|
73
|
+
location=region,
|
74
|
+
public_gallery_name=gallery_name,
|
75
|
+
gallery_image_name=image_name,
|
76
|
+
)
|
77
|
+
image_versions = list(image_versions)
|
78
|
+
if not image_versions:
|
79
|
+
raise exceptions.ResourcesUnavailableError(
|
80
|
+
f'No versions available for Azure community image {image_name}')
|
81
|
+
latest_version = image_versions[-1].name
|
82
|
+
|
83
|
+
image_details = compute_client.community_gallery_image_versions.get(
|
84
|
+
location=region,
|
85
|
+
public_gallery_name=gallery_name,
|
86
|
+
gallery_image_name=image_name,
|
87
|
+
gallery_image_version_name=latest_version)
|
88
|
+
return image_details.storage_profile.os_disk_image.disk_size_gb
|
89
|
+
except azure.exceptions().AzureError as e:
|
90
|
+
raise exceptions.ResourcesUnavailableError(
|
91
|
+
f'Failed to get community image size: {e}.') from e
|
@@ -1,7 +1,7 @@
|
|
1
1
|
"""Exceptions."""
|
2
2
|
import enum
|
3
3
|
import typing
|
4
|
-
from typing import List, Optional
|
4
|
+
from typing import List, Optional, Sequence
|
5
5
|
|
6
6
|
if typing.TYPE_CHECKING:
|
7
7
|
from sky import status_lib
|
@@ -61,12 +61,12 @@ class ProvisionPrechecksError(Exception):
|
|
61
61
|
the error will be raised.
|
62
62
|
|
63
63
|
Args:
|
64
|
-
reasons: (
|
64
|
+
reasons: (Sequence[Exception]) The reasons why the prechecks failed.
|
65
65
|
"""
|
66
66
|
|
67
|
-
def __init__(self, reasons:
|
67
|
+
def __init__(self, reasons: Sequence[Exception]) -> None:
|
68
68
|
super().__init__()
|
69
|
-
self.reasons =
|
69
|
+
self.reasons = reasons
|
70
70
|
|
71
71
|
|
72
72
|
class ManagedJobReachedMaxRetriesError(Exception):
|
{skypilot_nightly-1.0.0.dev20241024 → skypilot_nightly-1.0.0.dev20241026}/sky/jobs/controller.py
RENAMED
@@ -215,7 +215,7 @@ class JobsController:
|
|
215
215
|
end_time=end_time,
|
216
216
|
callback_func=callback_func)
|
217
217
|
logger.info(
|
218
|
-
f'
|
218
|
+
f'Managed job {self._job_id} (task: {task_id}) SUCCEEDED. '
|
219
219
|
f'Cleaning up the cluster {cluster_name}.')
|
220
220
|
# Only clean up the cluster, not the storages, because tasks may
|
221
221
|
# share storages.
|
@@ -24,6 +24,7 @@ from sky.utils import common_utils
|
|
24
24
|
from sky.utils import ux_utils
|
25
25
|
|
26
26
|
if typing.TYPE_CHECKING:
|
27
|
+
from sky import resources
|
27
28
|
from sky import task as task_lib
|
28
29
|
|
29
30
|
logger = sky_logging.init_logger(__name__)
|
@@ -327,8 +328,7 @@ class StrategyExecutor:
|
|
327
328
|
'Failure happened before provisioning. Failover '
|
328
329
|
f'reasons: {reasons_str}')
|
329
330
|
if raise_on_failure:
|
330
|
-
raise exceptions.ProvisionPrechecksError(
|
331
|
-
reasons=reasons)
|
331
|
+
raise exceptions.ProvisionPrechecksError(reasons)
|
332
332
|
return None
|
333
333
|
logger.info('Failed to launch a cluster with error: '
|
334
334
|
f'{common_utils.format_exception(e)})')
|
@@ -382,7 +382,7 @@ class FailoverStrategyExecutor(StrategyExecutor, name='FAILOVER',
|
|
382
382
|
# first retry in the same cloud/region. (Inside recover() we may not
|
383
383
|
# rely on cluster handle, as it can be None if the cluster is
|
384
384
|
# preempted.)
|
385
|
-
self._launched_resources: Optional['
|
385
|
+
self._launched_resources: Optional['resources.Resources'] = None
|
386
386
|
|
387
387
|
def _launch(self,
|
388
388
|
max_retry: Optional[int] = 3,
|
@@ -13,6 +13,12 @@
|
|
13
13
|
"metadata": {
|
14
14
|
"description": "Subnet parameters."
|
15
15
|
}
|
16
|
+
},
|
17
|
+
"nsgName": {
|
18
|
+
"type": "string",
|
19
|
+
"metadata": {
|
20
|
+
"description": "Name of the Network Security Group associated with the SkyPilot cluster."
|
21
|
+
}
|
16
22
|
}
|
17
23
|
},
|
18
24
|
"variables": {
|
@@ -20,7 +26,7 @@
|
|
20
26
|
"location": "[resourceGroup().location]",
|
21
27
|
"msiName": "[concat('sky-', parameters('clusterId'), '-msi')]",
|
22
28
|
"roleAssignmentName": "[concat('sky-', parameters('clusterId'), '-ra')]",
|
23
|
-
"nsgName": "[
|
29
|
+
"nsgName": "[parameters('nsgName')]",
|
24
30
|
"nsg": "[resourceId('Microsoft.Network/networkSecurityGroups', variables('nsgName'))]",
|
25
31
|
"vnetName": "[concat('sky-', parameters('clusterId'), '-vnet')]",
|
26
32
|
"subnetName": "[concat('sky-', parameters('clusterId'), '-subnet')]"
|
@@ -8,7 +8,7 @@ import json
|
|
8
8
|
from pathlib import Path
|
9
9
|
import random
|
10
10
|
import time
|
11
|
-
from typing import Any, Callable
|
11
|
+
from typing import Any, Callable, Tuple
|
12
12
|
|
13
13
|
from sky import exceptions
|
14
14
|
from sky import sky_logging
|
@@ -22,6 +22,7 @@ UNIQUE_ID_LEN = 4
|
|
22
22
|
_DEPLOYMENT_NAME = 'skypilot-config'
|
23
23
|
_LEGACY_DEPLOYMENT_NAME = 'ray-config'
|
24
24
|
_RESOURCE_GROUP_WAIT_FOR_DELETION_TIMEOUT = 480 # 8 minutes
|
25
|
+
_CLUSTER_ID = '{cluster_name_on_cloud}-{unique_id}'
|
25
26
|
|
26
27
|
|
27
28
|
def get_azure_sdk_function(client: Any, function_name: str) -> Callable:
|
@@ -41,6 +42,19 @@ def get_azure_sdk_function(client: Any, function_name: str) -> Callable:
|
|
41
42
|
return func
|
42
43
|
|
43
44
|
|
45
|
+
def get_cluster_id_and_nsg_name(resource_group: str,
|
46
|
+
cluster_name_on_cloud: str) -> Tuple[str, str]:
|
47
|
+
hasher = hashlib.md5(resource_group.encode('utf-8'))
|
48
|
+
unique_id = hasher.hexdigest()[:UNIQUE_ID_LEN]
|
49
|
+
# We use the cluster name + resource group hash as the
|
50
|
+
# unique ID for the cluster, as we need to make sure that
|
51
|
+
# the deployments have unique names during failover.
|
52
|
+
cluster_id = _CLUSTER_ID.format(cluster_name_on_cloud=cluster_name_on_cloud,
|
53
|
+
unique_id=unique_id)
|
54
|
+
nsg_name = f'sky-{cluster_id}-nsg'
|
55
|
+
return cluster_id, nsg_name
|
56
|
+
|
57
|
+
|
44
58
|
@common.log_function_start_end
|
45
59
|
def bootstrap_instances(
|
46
60
|
region: str, cluster_name_on_cloud: str,
|
@@ -117,12 +131,13 @@ def bootstrap_instances(
|
|
117
131
|
|
118
132
|
logger.info(f'Using cluster name: {cluster_name_on_cloud}')
|
119
133
|
|
120
|
-
|
121
|
-
|
134
|
+
cluster_id, nsg_name = get_cluster_id_and_nsg_name(
|
135
|
+
resource_group=provider_config['resource_group'],
|
136
|
+
cluster_name_on_cloud=cluster_name_on_cloud)
|
122
137
|
subnet_mask = provider_config.get('subnet_mask')
|
123
138
|
if subnet_mask is None:
|
124
139
|
# choose a random subnet, skipping most common value of 0
|
125
|
-
random.seed(
|
140
|
+
random.seed(cluster_id)
|
126
141
|
subnet_mask = f'10.{random.randint(1, 254)}.0.0/16'
|
127
142
|
logger.info(f'Using subnet mask: {subnet_mask}')
|
128
143
|
|
@@ -135,10 +150,10 @@ def bootstrap_instances(
|
|
135
150
|
'value': subnet_mask
|
136
151
|
},
|
137
152
|
'clusterId': {
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
'value':
|
153
|
+
'value': cluster_id
|
154
|
+
},
|
155
|
+
'nsgName': {
|
156
|
+
'value': nsg_name
|
142
157
|
},
|
143
158
|
},
|
144
159
|
}
|