skypilot-nightly 1.0.0.dev20241208__tar.gz → 1.0.0.dev20241210__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.dev20241208/skypilot_nightly.egg-info → skypilot_nightly-1.0.0.dev20241210}/PKG-INFO +1 -1
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/__init__.py +2 -2
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/runpod.py +11 -8
- skypilot_nightly-1.0.0.dev20241210/sky/provision/runpod/api/__init__.py +3 -0
- skypilot_nightly-1.0.0.dev20241210/sky/provision/runpod/api/commands.py +119 -0
- skypilot_nightly-1.0.0.dev20241210/sky/provision/runpod/api/pods.py +142 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/runpod/instance.py +4 -1
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/runpod/utils.py +32 -18
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/runpod-ray.yml.j2 +2 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210/skypilot_nightly.egg-info}/PKG-INFO +1 -1
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/skypilot_nightly.egg-info/SOURCES.txt +3 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_smoke.py +72 -75
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/MANIFEST.in +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/README.md +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/pyproject.toml +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/setup.cfg +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/cloudflare.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/docker.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/ibm.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/kubernetes.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/oci.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/runpod.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/adaptors/vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/admin_policy.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/authentication.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/backends/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/backends/backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/backends/backend_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/backends/cloud_vm_ray_backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/backends/docker_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/backends/local_docker_backend.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/backends/monkey_patches/monkey_patch_ray_up.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/backends/wheel_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/benchmark/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/benchmark/benchmark_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/benchmark/benchmark_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/check.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/cli.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/cloud_stores.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/cloud_registry.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/fluidstack.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/ibm.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/kubernetes.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/lambda_cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/oci.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/paperspace.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/scp.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/aws_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/azure_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/cudo_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/data_fetchers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/data_fetchers/fetch_aws.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/data_fetchers/fetch_azure.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/fluidstack_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/gcp_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/ibm_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/kubernetes_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/lambda_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/oci_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/paperspace_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/runpod_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/scp_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/service_catalog/vsphere_catalog.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/utils/aws_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/utils/azure_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/utils/gcp_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/utils/oci_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/utils/scp_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/vsphere.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/dag.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/data/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/data/data_transfer.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/data/data_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/data/mounting_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/data/storage.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/data/storage_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/exceptions.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/execution.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/global_user_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/controller.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/dashboard/dashboard.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/dashboard/static/favicon.ico +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/dashboard/templates/index.html +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/recovery_strategy.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/jobs/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/optimizer.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/aws/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/aws/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/aws/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/aws/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/azure/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/azure/azure-config-template.json +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/azure/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/azure/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/common.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/cudo/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/cudo/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/cudo/cudo_machine_type.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/cudo/cudo_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/cudo/cudo_wrapper.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/cudo/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/docker_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/fluidstack/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/fluidstack/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/fluidstack/fluidstack_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/fluidstack/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/gcp/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/gcp/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/gcp/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/gcp/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/gcp/instance_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/gcp/mig_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/instance_setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/kubernetes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/kubernetes/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/kubernetes/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/kubernetes/manifests/smarter-device-manager-configmap.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/kubernetes/network.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/kubernetes/network_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/kubernetes/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/lambda_cloud/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/lambda_cloud/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/lambda_cloud/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/lambda_cloud/lambda_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/logging.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/metadata_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/oci/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/oci/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/oci/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/oci/query_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/paperspace/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/paperspace/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/paperspace/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/paperspace/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/paperspace/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/provisioner.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/runpod/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/runpod/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/cls_api_client.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/cls_api_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/custom_script.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/id_generator.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/metadata_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/service_manager.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/service_manager_factory.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/ssl_helper.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/vapiconnect.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/common/vim_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/instance.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/provision/vsphere/vsphere_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/resources.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/autoscalers.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/controller.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/core.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/load_balancer.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/load_balancing_policies.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/replica_managers.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/serve_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/serve_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/service.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/serve/service_spec.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/setup_files/MANIFEST.in +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/setup_files/dependencies.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/setup_files/setup.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/sky_logging.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/attempt_skylet.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/autostop_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/configs.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/events.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/job_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/log_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/log_lib.pyi +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/command_runner.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/ibm/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/ibm/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/ibm/utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/ibm/vpc_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/scp/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/scp/config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/providers/scp/node_provider.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/ray_patches/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/ray_patches/autoscaler.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/ray_patches/cli.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/ray_patches/command_runner.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/ray_patches/log_monitor.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/ray_patches/resource_demand_scheduler.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/ray_patches/updater.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/ray_patches/worker.py.patch +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/skylet.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skylet/subprocess_daemon.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/skypilot_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/status_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/task.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/aws-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/azure-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/cudo-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/fluidstack-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/gcp-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/ibm-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/jobs-controller.yaml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/kubernetes-ingress.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/kubernetes-loadbalancer.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/kubernetes-port-forward-proxy-command.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/kubernetes-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/kubernetes-ssh-jump.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/lambda-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/local-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/oci-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/paperspace-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/scp-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/sky-serve-controller.yaml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/templates/vsphere-ray.yml.j2 +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/usage/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/usage/constants.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/usage/usage_lib.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/accelerator_registry.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/admin_policy_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/cli_utils/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/cli_utils/status_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/cluster_yaml_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/command_runner.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/command_runner.pyi +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/common_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/control_master_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/controller_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/dag_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/db_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/env_options.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/__init__.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/create_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/delete_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/deploy_remote_cluster.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/generate_kind_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/generate_kubeconfig.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/gpu_labeler.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/k8s_gpu_labeler_setup.yaml +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/rsync_helper.sh +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/kubernetes_enums.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/log_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/resources_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/rich_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/schemas.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/subprocess_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/timeline.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/ux_utils.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/utils/validator.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/skypilot_nightly.egg-info/dependency_links.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/skypilot_nightly.egg-info/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/skypilot_nightly.egg-info/requires.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/skypilot_nightly.egg-info/top_level.txt +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_api.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_cli.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_config.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_global_user_state.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_jobs.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_jobs_and_serve.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_list_accelerators.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_optimizer_dryruns.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_optimizer_random_dag.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_serve_autoscaler.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_storage.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_wheels.py +0 -0
- {skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/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 = 'e0368888b6e64fd42cbafc698835b7aef0ce1a4c'
|
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.dev20241210'
|
39
39
|
__root_dir__ = os.path.dirname(os.path.abspath(__file__))
|
40
40
|
|
41
41
|
|
{skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/sky/clouds/runpod.py
RENAMED
@@ -24,8 +24,6 @@ class RunPod(clouds.Cloud):
|
|
24
24
|
_REPR = 'RunPod'
|
25
25
|
_CLOUD_UNSUPPORTED_FEATURES = {
|
26
26
|
clouds.CloudImplementationFeatures.STOP: 'Stopping not supported.',
|
27
|
-
clouds.CloudImplementationFeatures.SPOT_INSTANCE:
|
28
|
-
('Spot is not supported, as runpod API does not implement spot.'),
|
29
27
|
clouds.CloudImplementationFeatures.MULTI_NODE:
|
30
28
|
('Multi-node not supported yet, as the interconnection among nodes '
|
31
29
|
'are non-trivial on RunPod.'),
|
@@ -70,11 +68,8 @@ class RunPod(clouds.Cloud):
|
|
70
68
|
zone: Optional[str]) -> List[clouds.Region]:
|
71
69
|
assert zone is None, 'RunPod does not support zones.'
|
72
70
|
del accelerators, zone # unused
|
73
|
-
|
74
|
-
|
75
|
-
else:
|
76
|
-
regions = service_catalog.get_region_zones_for_instance_type(
|
77
|
-
instance_type, use_spot, 'runpod')
|
71
|
+
regions = service_catalog.get_region_zones_for_instance_type(
|
72
|
+
instance_type, use_spot, 'runpod')
|
78
73
|
|
79
74
|
if region is not None:
|
80
75
|
regions = [r for r in regions if r.name == region]
|
@@ -176,11 +171,19 @@ class RunPod(clouds.Cloud):
|
|
176
171
|
else:
|
177
172
|
image_id = r.image_id[r.region]
|
178
173
|
|
174
|
+
instance_type = resources.instance_type
|
175
|
+
use_spot = resources.use_spot
|
176
|
+
|
177
|
+
hourly_cost = self.instance_type_to_hourly_cost(
|
178
|
+
instance_type=instance_type, use_spot=use_spot)
|
179
|
+
|
179
180
|
return {
|
180
|
-
'instance_type':
|
181
|
+
'instance_type': instance_type,
|
181
182
|
'custom_resources': custom_resources,
|
182
183
|
'region': region.name,
|
183
184
|
'image_id': image_id,
|
185
|
+
'use_spot': use_spot,
|
186
|
+
'bid_per_gpu': str(hourly_cost),
|
184
187
|
}
|
185
188
|
|
186
189
|
def _get_feasible_launchable_resources(
|
@@ -0,0 +1,119 @@
|
|
1
|
+
"""This module provides functions to generate GraphQL mutations for deploying
|
2
|
+
spot instance Pods on RunPod.
|
3
|
+
|
4
|
+
Reference:
|
5
|
+
https://github.com/runpod/runpod-python/blob/main/runpod/api/ctl_commands.py
|
6
|
+
|
7
|
+
Functions:
|
8
|
+
generate_spot_pod_deployment_mutation: Generates a GraphQL mutation string
|
9
|
+
for deploying a spot instance Pod on RunPod.
|
10
|
+
|
11
|
+
Example:
|
12
|
+
>>> mutation = generate_spot_pod_deployment_mutation(
|
13
|
+
name='test',
|
14
|
+
image_name='runpod/stack',
|
15
|
+
gpu_type_id='NVIDIA GeForce RTX 3070',
|
16
|
+
bid_per_gpu=0.3
|
17
|
+
)
|
18
|
+
"""
|
19
|
+
from typing import List, Optional
|
20
|
+
|
21
|
+
from sky.adaptors import runpod
|
22
|
+
from sky.provision.runpod.api.pods import generate_spot_pod_deployment_mutation
|
23
|
+
|
24
|
+
_INTERRUPTABLE_POD_FIELD: str = 'podRentInterruptable'
|
25
|
+
_RESPONSE_DATA_FIELD: str = 'data'
|
26
|
+
|
27
|
+
|
28
|
+
def create_spot_pod(
|
29
|
+
name: str,
|
30
|
+
image_name: str,
|
31
|
+
gpu_type_id: str,
|
32
|
+
bid_per_gpu: float,
|
33
|
+
cloud_type: str = 'ALL',
|
34
|
+
volume_mount_path: str = '/runpod-volume',
|
35
|
+
gpu_count: Optional[int] = 1,
|
36
|
+
min_memory_in_gb: Optional[int] = 1,
|
37
|
+
min_vcpu_count: Optional[int] = 1,
|
38
|
+
container_disk_in_gb: Optional[int] = None,
|
39
|
+
volume_in_gb: Optional[int] = 0,
|
40
|
+
ports: Optional[str] = None,
|
41
|
+
start_ssh: Optional[bool] = True,
|
42
|
+
start_jupyter: Optional[bool] = False,
|
43
|
+
env: Optional[dict] = None,
|
44
|
+
docker_args: Optional[str] = '',
|
45
|
+
support_public_ip: Optional[bool] = True,
|
46
|
+
terminate_after: Optional[str] = None,
|
47
|
+
stop_after: Optional[str] = None,
|
48
|
+
data_center_id: Optional[str] = None,
|
49
|
+
country_code: Optional[str] = None,
|
50
|
+
network_volume_id: Optional[str] = None,
|
51
|
+
allowed_cuda_versions: Optional[List[str]] = None,
|
52
|
+
min_download: Optional[int] = None,
|
53
|
+
min_upload: Optional[int] = None,
|
54
|
+
cuda_version: Optional[str] = None,
|
55
|
+
template_id: Optional[str] = None,
|
56
|
+
volume_key: Optional[str] = None,
|
57
|
+
) -> dict:
|
58
|
+
"""This module provides functions to generate GraphQL mutations for
|
59
|
+
deploying spot instance Pods on RunPod.
|
60
|
+
|
61
|
+
Functions:
|
62
|
+
generate_spot_pod_deployment_mutation: Generates a GraphQL mutation
|
63
|
+
string for deploying a spot instance Pod on RunPod.
|
64
|
+
|
65
|
+
Example:
|
66
|
+
>>> mutation = generate_spot_pod_deployment_mutation(
|
67
|
+
name='test',
|
68
|
+
image_name='runpod/stack',
|
69
|
+
gpu_type_id='NVIDIA GeForce RTX 3070',
|
70
|
+
bid_per_gpu=0.3
|
71
|
+
)
|
72
|
+
"""
|
73
|
+
runpod.runpod.get_gpu(gpu_type_id)
|
74
|
+
# refer to https://graphql-spec.runpod.io/#definition-CloudTypeEnum
|
75
|
+
if cloud_type not in ['ALL', 'COMMUNITY', 'SECURE']:
|
76
|
+
raise ValueError('cloud_type must be one of ALL, COMMUNITY or SECURE')
|
77
|
+
|
78
|
+
if network_volume_id and data_center_id is None:
|
79
|
+
user_info = runpod.runpod.get_user()
|
80
|
+
for network_volume in user_info['networkVolumes']:
|
81
|
+
if network_volume['id'] == network_volume_id:
|
82
|
+
data_center_id = network_volume['dataCenterId']
|
83
|
+
break
|
84
|
+
|
85
|
+
if container_disk_in_gb is None and template_id is None:
|
86
|
+
container_disk_in_gb = 10
|
87
|
+
|
88
|
+
mutation = generate_spot_pod_deployment_mutation(
|
89
|
+
name=name,
|
90
|
+
image_name=image_name,
|
91
|
+
gpu_type_id=gpu_type_id,
|
92
|
+
bid_per_gpu=bid_per_gpu,
|
93
|
+
cloud_type=cloud_type,
|
94
|
+
gpu_count=gpu_count,
|
95
|
+
min_memory_in_gb=min_memory_in_gb,
|
96
|
+
min_vcpu_count=min_vcpu_count,
|
97
|
+
container_disk_in_gb=container_disk_in_gb,
|
98
|
+
volume_in_gb=volume_in_gb,
|
99
|
+
volume_mount_path=volume_mount_path,
|
100
|
+
ports=ports,
|
101
|
+
start_ssh=start_ssh,
|
102
|
+
start_jupyter=start_jupyter,
|
103
|
+
env=env,
|
104
|
+
docker_args=docker_args,
|
105
|
+
support_public_ip=support_public_ip,
|
106
|
+
terminate_after=terminate_after,
|
107
|
+
stop_after=stop_after,
|
108
|
+
data_center_id=data_center_id,
|
109
|
+
country_code=country_code,
|
110
|
+
network_volume_id=network_volume_id,
|
111
|
+
allowed_cuda_versions=allowed_cuda_versions,
|
112
|
+
min_download=min_download,
|
113
|
+
min_upload=min_upload,
|
114
|
+
cuda_version=cuda_version,
|
115
|
+
template_id=template_id,
|
116
|
+
volume_key=volume_key,
|
117
|
+
)
|
118
|
+
response = runpod.runpod.api.graphql.run_graphql_query(mutation)
|
119
|
+
return response[_RESPONSE_DATA_FIELD][_INTERRUPTABLE_POD_FIELD]
|
@@ -0,0 +1,142 @@
|
|
1
|
+
"""This module provides functions to generate GraphQL mutations for deploying
|
2
|
+
spot instance Pods on RunPod.
|
3
|
+
|
4
|
+
Reference:
|
5
|
+
https://github.com/runpod/runpod-python/blob/main/runpod/api/mutations/pods.py
|
6
|
+
|
7
|
+
Functions:
|
8
|
+
generate_spot_pod_deployment_mutation: Generates a GraphQL mutation string
|
9
|
+
for deploying a spot instance Pod on RunPod.
|
10
|
+
Example:
|
11
|
+
>>> mutation = generate_spot_pod_deployment_mutation(
|
12
|
+
name='test',
|
13
|
+
image_name='runpod/stack',
|
14
|
+
gpu_type_id='NVIDIA GeForce RTX 3070',
|
15
|
+
bid_per_gpu=0.3
|
16
|
+
)
|
17
|
+
"""
|
18
|
+
|
19
|
+
from typing import List, Optional
|
20
|
+
|
21
|
+
|
22
|
+
# refer to https://graphql-spec.runpod.io/#definition-PodRentInterruptableInput
|
23
|
+
def generate_spot_pod_deployment_mutation(
|
24
|
+
name: str,
|
25
|
+
image_name: str,
|
26
|
+
gpu_type_id: str,
|
27
|
+
bid_per_gpu: float,
|
28
|
+
volume_mount_path: str,
|
29
|
+
cloud_type: str = 'ALL',
|
30
|
+
gpu_count: Optional[int] = None,
|
31
|
+
min_memory_in_gb: Optional[int] = None,
|
32
|
+
min_vcpu_count: Optional[int] = None,
|
33
|
+
container_disk_in_gb: Optional[int] = None,
|
34
|
+
volume_in_gb: Optional[int] = None,
|
35
|
+
ports: Optional[str] = None,
|
36
|
+
start_ssh: Optional[bool] = True,
|
37
|
+
start_jupyter: Optional[bool] = False,
|
38
|
+
env: Optional[dict] = None,
|
39
|
+
docker_args: Optional[str] = None,
|
40
|
+
support_public_ip: Optional[bool] = True,
|
41
|
+
terminate_after: Optional[str] = None,
|
42
|
+
stop_after: Optional[str] = None,
|
43
|
+
data_center_id: Optional[str] = None,
|
44
|
+
country_code: Optional[str] = None,
|
45
|
+
network_volume_id: Optional[str] = None,
|
46
|
+
allowed_cuda_versions: Optional[List[str]] = None,
|
47
|
+
min_download: Optional[int] = None,
|
48
|
+
min_upload: Optional[int] = None,
|
49
|
+
cuda_version: Optional[str] = None,
|
50
|
+
template_id: Optional[str] = None,
|
51
|
+
volume_key: Optional[str] = None,
|
52
|
+
) -> str:
|
53
|
+
input_fields = []
|
54
|
+
|
55
|
+
# Required Fields
|
56
|
+
input_fields.append(f'name: "{name}"')
|
57
|
+
input_fields.append(f'imageName: "{image_name}"')
|
58
|
+
input_fields.append(f'gpuTypeId: "{gpu_type_id}"')
|
59
|
+
input_fields.append(f'bidPerGpu: {bid_per_gpu}')
|
60
|
+
input_fields.append(f'volumeMountPath: "{volume_mount_path}"')
|
61
|
+
|
62
|
+
# Default Fields
|
63
|
+
input_fields.append(f'cloudType: {cloud_type}')
|
64
|
+
|
65
|
+
if start_ssh:
|
66
|
+
input_fields.append('startSsh: true')
|
67
|
+
if start_jupyter:
|
68
|
+
input_fields.append('startJupyter: true')
|
69
|
+
if support_public_ip:
|
70
|
+
input_fields.append('supportPublicIp: true')
|
71
|
+
else:
|
72
|
+
input_fields.append('supportPublicIp: false')
|
73
|
+
|
74
|
+
# Optional Fields
|
75
|
+
if gpu_count is not None:
|
76
|
+
input_fields.append(f'gpuCount: {gpu_count}')
|
77
|
+
if min_memory_in_gb is not None:
|
78
|
+
input_fields.append(f'minMemoryInGb: {min_memory_in_gb}')
|
79
|
+
if min_vcpu_count is not None:
|
80
|
+
input_fields.append(f'minVcpuCount: {min_vcpu_count}')
|
81
|
+
if container_disk_in_gb is not None:
|
82
|
+
input_fields.append(f'containerDiskInGb: {container_disk_in_gb}')
|
83
|
+
if volume_in_gb is not None:
|
84
|
+
input_fields.append(f'volumeInGb: {volume_in_gb}')
|
85
|
+
if ports is not None:
|
86
|
+
ports = ports.replace(' ', '')
|
87
|
+
input_fields.append(f'ports: "{ports}"')
|
88
|
+
if docker_args is not None:
|
89
|
+
input_fields.append(f'dockerArgs: "{docker_args}"')
|
90
|
+
if terminate_after is not None:
|
91
|
+
input_fields.append(f'terminateAfter: "{terminate_after}"')
|
92
|
+
if stop_after is not None:
|
93
|
+
input_fields.append(f'stopAfter: "{stop_after}"')
|
94
|
+
if data_center_id is not None:
|
95
|
+
input_fields.append(f'dataCenterId: "{data_center_id}"')
|
96
|
+
if country_code is not None:
|
97
|
+
input_fields.append(f'countryCode: "{country_code}"')
|
98
|
+
if network_volume_id is not None:
|
99
|
+
input_fields.append(f'networkVolumeId: "{network_volume_id}"')
|
100
|
+
if allowed_cuda_versions is not None:
|
101
|
+
allowed_cuda_versions_string = ', '.join(
|
102
|
+
[f'"{version}"' for version in allowed_cuda_versions])
|
103
|
+
input_fields.append(
|
104
|
+
f'allowedCudaVersions: [{allowed_cuda_versions_string}]')
|
105
|
+
if min_download is not None:
|
106
|
+
input_fields.append(f'minDownload: {min_download}')
|
107
|
+
if min_upload is not None:
|
108
|
+
input_fields.append(f'minUpload: {min_upload}')
|
109
|
+
if cuda_version is not None:
|
110
|
+
input_fields.append(f'cudaVersion: "{cuda_version}"')
|
111
|
+
if template_id is not None:
|
112
|
+
input_fields.append(f'templateId: "{template_id}"')
|
113
|
+
if volume_key is not None:
|
114
|
+
input_fields.append(f'volumeKey: "{volume_key}"')
|
115
|
+
|
116
|
+
if env is not None:
|
117
|
+
env_string = ', '.join([
|
118
|
+
f'{{ key: "{key}", value: "{value}" }}'
|
119
|
+
for key, value in env.items()
|
120
|
+
])
|
121
|
+
input_fields.append(f'env: [{env_string}]')
|
122
|
+
|
123
|
+
# Format input fields
|
124
|
+
input_string = ', '.join(input_fields)
|
125
|
+
return f"""
|
126
|
+
mutation {{
|
127
|
+
podRentInterruptable(
|
128
|
+
input: {{
|
129
|
+
{input_string}
|
130
|
+
}}
|
131
|
+
) {{
|
132
|
+
id
|
133
|
+
desiredStatus
|
134
|
+
imageName
|
135
|
+
env
|
136
|
+
machineId
|
137
|
+
machine {{
|
138
|
+
podHostId
|
139
|
+
}}
|
140
|
+
}}
|
141
|
+
}}
|
142
|
+
"""
|
@@ -89,7 +89,10 @@ def run_instances(region: str, cluster_name_on_cloud: str,
|
|
89
89
|
disk_size=config.node_config['DiskSize'],
|
90
90
|
image_name=config.node_config['ImageId'],
|
91
91
|
ports=config.ports_to_open_on_launch,
|
92
|
-
public_key=config.node_config['PublicKey']
|
92
|
+
public_key=config.node_config['PublicKey'],
|
93
|
+
preemptible=config.node_config['Preemptible'],
|
94
|
+
bid_per_gpu=config.node_config['BidPerGPU'],
|
95
|
+
)
|
93
96
|
except Exception as e: # pylint: disable=broad-except
|
94
97
|
logger.warning(f'run_instances error: {e}')
|
95
98
|
raise
|
@@ -6,6 +6,7 @@ from typing import Any, Dict, List, Optional
|
|
6
6
|
|
7
7
|
from sky import sky_logging
|
8
8
|
from sky.adaptors import runpod
|
9
|
+
import sky.provision.runpod.api.commands as runpod_commands
|
9
10
|
from sky.skylet import constants
|
10
11
|
from sky.utils import common_utils
|
11
12
|
|
@@ -100,7 +101,8 @@ def list_instances() -> Dict[str, Dict[str, Any]]:
|
|
100
101
|
|
101
102
|
|
102
103
|
def launch(name: str, instance_type: str, region: str, disk_size: int,
|
103
|
-
image_name: str, ports: Optional[List[int]], public_key: str
|
104
|
+
image_name: str, ports: Optional[List[int]], public_key: str,
|
105
|
+
preemptible: Optional[bool], bid_per_gpu: float) -> str:
|
104
106
|
"""Launches an instance with the given parameters.
|
105
107
|
|
106
108
|
Converts the instance_type to the RunPod GPU name, finds the specs for the
|
@@ -142,23 +144,35 @@ def launch(name: str, instance_type: str, region: str, disk_size: int,
|
|
142
144
|
if ports is not None:
|
143
145
|
custom_ports_str = ''.join([f'{p}/tcp,' for p in ports])
|
144
146
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
147
|
+
docker_args = (f'bash -c \'echo {encoded} | base64 --decode > init.sh; '
|
148
|
+
f'bash init.sh\'')
|
149
|
+
ports = (f'22/tcp,'
|
150
|
+
f'{custom_ports_str}'
|
151
|
+
f'{constants.SKY_REMOTE_RAY_DASHBOARD_PORT}/http,'
|
152
|
+
f'{constants.SKY_REMOTE_RAY_PORT}/http')
|
153
|
+
|
154
|
+
params = {
|
155
|
+
'name': name,
|
156
|
+
'image_name': image_name,
|
157
|
+
'gpu_type_id': gpu_type,
|
158
|
+
'cloud_type': cloud_type,
|
159
|
+
'container_disk_in_gb': disk_size,
|
160
|
+
'min_vcpu_count': 4 * gpu_quantity,
|
161
|
+
'min_memory_in_gb': gpu_specs['memoryInGb'] * gpu_quantity,
|
162
|
+
'gpu_count': gpu_quantity,
|
163
|
+
'country_code': region,
|
164
|
+
'ports': ports,
|
165
|
+
'support_public_ip': True,
|
166
|
+
'docker_args': docker_args,
|
167
|
+
}
|
168
|
+
|
169
|
+
if preemptible is None or not preemptible:
|
170
|
+
new_instance = runpod.runpod.create_pod(**params)
|
171
|
+
else:
|
172
|
+
new_instance = runpod_commands.create_spot_pod(
|
173
|
+
bid_per_gpu=bid_per_gpu,
|
174
|
+
**params,
|
175
|
+
)
|
162
176
|
|
163
177
|
return new_instance['id']
|
164
178
|
|
@@ -164,6 +164,9 @@ sky/provision/runpod/__init__.py
|
|
164
164
|
sky/provision/runpod/config.py
|
165
165
|
sky/provision/runpod/instance.py
|
166
166
|
sky/provision/runpod/utils.py
|
167
|
+
sky/provision/runpod/api/__init__.py
|
168
|
+
sky/provision/runpod/api/commands.py
|
169
|
+
sky/provision/runpod/api/pods.py
|
167
170
|
sky/provision/vsphere/__init__.py
|
168
171
|
sky/provision/vsphere/config.py
|
169
172
|
sky/provision/vsphere/instance.py
|
{skypilot_nightly-1.0.0.dev20241208 → skypilot_nightly-1.0.0.dev20241210}/tests/test_smoke.py
RENAMED
@@ -37,7 +37,7 @@ import sys
|
|
37
37
|
import tempfile
|
38
38
|
import textwrap
|
39
39
|
import time
|
40
|
-
from typing import Dict, List, NamedTuple, Optional, Tuple
|
40
|
+
from typing import Dict, List, NamedTuple, Optional, TextIO, Tuple
|
41
41
|
import urllib.parse
|
42
42
|
import uuid
|
43
43
|
|
@@ -1333,34 +1333,68 @@ def test_using_file_mounts_with_env_vars(generic_cloud: str):
|
|
1333
1333
|
|
1334
1334
|
|
1335
1335
|
# ---------- storage ----------
|
1336
|
+
|
1337
|
+
|
1338
|
+
def _storage_mounts_commands_generator(f: TextIO, cluster_name: str,
|
1339
|
+
storage_name: str, ls_hello_command: str,
|
1340
|
+
cloud: str, only_mount: bool):
|
1341
|
+
template_str = pathlib.Path(
|
1342
|
+
'tests/test_yamls/test_storage_mounting.yaml.j2').read_text()
|
1343
|
+
template = jinja2.Template(template_str)
|
1344
|
+
content = template.render(
|
1345
|
+
storage_name=storage_name,
|
1346
|
+
cloud=cloud,
|
1347
|
+
only_mount=only_mount,
|
1348
|
+
)
|
1349
|
+
f.write(content)
|
1350
|
+
f.flush()
|
1351
|
+
file_path = f.name
|
1352
|
+
test_commands = [
|
1353
|
+
*STORAGE_SETUP_COMMANDS,
|
1354
|
+
f'sky launch -y -c {cluster_name} --cloud {cloud} {file_path}',
|
1355
|
+
f'sky logs {cluster_name} 1 --status', # Ensure job succeeded.
|
1356
|
+
ls_hello_command,
|
1357
|
+
f'sky stop -y {cluster_name}',
|
1358
|
+
f'sky start -y {cluster_name}',
|
1359
|
+
# Check if hello.txt from mounting bucket exists after restart in
|
1360
|
+
# the mounted directory
|
1361
|
+
f'sky exec {cluster_name} -- "set -ex; ls /mount_private_mount/hello.txt"',
|
1362
|
+
]
|
1363
|
+
clean_command = f'sky down -y {cluster_name}; sky storage delete -y {storage_name}'
|
1364
|
+
return test_commands, clean_command
|
1365
|
+
|
1366
|
+
|
1336
1367
|
@pytest.mark.aws
|
1337
1368
|
def test_aws_storage_mounts_with_stop():
|
1338
1369
|
name = _get_cluster_name()
|
1339
1370
|
cloud = 'aws'
|
1340
1371
|
storage_name = f'sky-test-{int(time.time())}'
|
1341
|
-
|
1342
|
-
'tests/test_yamls/test_storage_mounting.yaml.j2').read_text()
|
1343
|
-
template = jinja2.Template(template_str)
|
1344
|
-
content = template.render(storage_name=storage_name, cloud=cloud)
|
1372
|
+
ls_hello_command = f'aws s3 ls {storage_name}/hello.txt'
|
1345
1373
|
with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as f:
|
1346
|
-
|
1347
|
-
|
1348
|
-
file_path = f.name
|
1349
|
-
test_commands = [
|
1350
|
-
*STORAGE_SETUP_COMMANDS,
|
1351
|
-
f'sky launch -y -c {name} --cloud {cloud} {file_path}',
|
1352
|
-
f'sky logs {name} 1 --status', # Ensure job succeeded.
|
1353
|
-
f'aws s3 ls {storage_name}/hello.txt',
|
1354
|
-
f'sky stop -y {name}',
|
1355
|
-
f'sky start -y {name}',
|
1356
|
-
# Check if hello.txt from mounting bucket exists after restart in
|
1357
|
-
# the mounted directory
|
1358
|
-
f'sky exec {name} -- "set -ex; ls /mount_private_mount/hello.txt"'
|
1359
|
-
]
|
1374
|
+
test_commands, clean_command = _storage_mounts_commands_generator(
|
1375
|
+
f, name, storage_name, ls_hello_command, cloud, False)
|
1360
1376
|
test = Test(
|
1361
1377
|
'aws_storage_mounts',
|
1362
1378
|
test_commands,
|
1363
|
-
|
1379
|
+
clean_command,
|
1380
|
+
timeout=20 * 60, # 20 mins
|
1381
|
+
)
|
1382
|
+
run_one_test(test)
|
1383
|
+
|
1384
|
+
|
1385
|
+
@pytest.mark.aws
|
1386
|
+
def test_aws_storage_mounts_with_stop_only_mount():
|
1387
|
+
name = _get_cluster_name()
|
1388
|
+
cloud = 'aws'
|
1389
|
+
storage_name = f'sky-test-{int(time.time())}'
|
1390
|
+
ls_hello_command = f'aws s3 ls {storage_name}/hello.txt'
|
1391
|
+
with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as f:
|
1392
|
+
test_commands, clean_command = _storage_mounts_commands_generator(
|
1393
|
+
f, name, storage_name, ls_hello_command, cloud, True)
|
1394
|
+
test = Test(
|
1395
|
+
'aws_storage_mounts_only_mount',
|
1396
|
+
test_commands,
|
1397
|
+
clean_command,
|
1364
1398
|
timeout=20 * 60, # 20 mins
|
1365
1399
|
)
|
1366
1400
|
run_one_test(test)
|
@@ -1371,29 +1405,14 @@ def test_gcp_storage_mounts_with_stop():
|
|
1371
1405
|
name = _get_cluster_name()
|
1372
1406
|
cloud = 'gcp'
|
1373
1407
|
storage_name = f'sky-test-{int(time.time())}'
|
1374
|
-
|
1375
|
-
'tests/test_yamls/test_storage_mounting.yaml.j2').read_text()
|
1376
|
-
template = jinja2.Template(template_str)
|
1377
|
-
content = template.render(storage_name=storage_name, cloud=cloud)
|
1408
|
+
ls_hello_command = f'gsutil ls gs://{storage_name}/hello.txt'
|
1378
1409
|
with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as f:
|
1379
|
-
|
1380
|
-
|
1381
|
-
file_path = f.name
|
1382
|
-
test_commands = [
|
1383
|
-
*STORAGE_SETUP_COMMANDS,
|
1384
|
-
f'sky launch -y -c {name} --cloud {cloud} {file_path}',
|
1385
|
-
f'sky logs {name} 1 --status', # Ensure job succeeded.
|
1386
|
-
f'gsutil ls gs://{storage_name}/hello.txt',
|
1387
|
-
f'sky stop -y {name}',
|
1388
|
-
f'sky start -y {name}',
|
1389
|
-
# Check if hello.txt from mounting bucket exists after restart in
|
1390
|
-
# the mounted directory
|
1391
|
-
f'sky exec {name} -- "set -ex; ls /mount_private_mount/hello.txt"'
|
1392
|
-
]
|
1410
|
+
test_commands, clean_command = _storage_mounts_commands_generator(
|
1411
|
+
f, name, storage_name, ls_hello_command, cloud, False)
|
1393
1412
|
test = Test(
|
1394
1413
|
'gcp_storage_mounts',
|
1395
1414
|
test_commands,
|
1396
|
-
|
1415
|
+
clean_command,
|
1397
1416
|
timeout=20 * 60, # 20 mins
|
1398
1417
|
)
|
1399
1418
|
run_one_test(test)
|
@@ -1409,31 +1428,19 @@ def test_azure_storage_mounts_with_stop():
|
|
1409
1428
|
get_default_storage_account_name(default_region))
|
1410
1429
|
storage_account_key = data_utils.get_az_storage_account_key(
|
1411
1430
|
storage_account_name)
|
1412
|
-
|
1413
|
-
|
1414
|
-
|
1415
|
-
|
1431
|
+
# if the file does not exist, az storage blob list returns '[]'
|
1432
|
+
ls_hello_command = (f'output=$(az storage blob list -c {storage_name} '
|
1433
|
+
f'--account-name {storage_account_name} '
|
1434
|
+
f'--account-key {storage_account_key} '
|
1435
|
+
f'--prefix hello.txt) '
|
1436
|
+
f'[ "$output" = "[]" ] && exit 1 || exit 0')
|
1416
1437
|
with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as f:
|
1417
|
-
|
1418
|
-
|
1419
|
-
file_path = f.name
|
1420
|
-
test_commands = [
|
1421
|
-
*STORAGE_SETUP_COMMANDS,
|
1422
|
-
f'sky launch -y -c {name} --cloud {cloud} {file_path}',
|
1423
|
-
f'sky logs {name} 1 --status', # Ensure job succeeded.
|
1424
|
-
f'output=$(az storage blob list -c {storage_name} --account-name {storage_account_name} --account-key {storage_account_key} --prefix hello.txt)'
|
1425
|
-
# if the file does not exist, az storage blob list returns '[]'
|
1426
|
-
f'[ "$output" = "[]" ] && exit 1;'
|
1427
|
-
f'sky stop -y {name}',
|
1428
|
-
f'sky start -y {name}',
|
1429
|
-
# Check if hello.txt from mounting bucket exists after restart in
|
1430
|
-
# the mounted directory
|
1431
|
-
f'sky exec {name} -- "set -ex; ls /mount_private_mount/hello.txt"'
|
1432
|
-
]
|
1438
|
+
test_commands, clean_command = _storage_mounts_commands_generator(
|
1439
|
+
f, name, storage_name, ls_hello_command, cloud, False)
|
1433
1440
|
test = Test(
|
1434
1441
|
'azure_storage_mounts',
|
1435
1442
|
test_commands,
|
1436
|
-
|
1443
|
+
clean_command,
|
1437
1444
|
timeout=20 * 60, # 20 mins
|
1438
1445
|
)
|
1439
1446
|
run_one_test(test)
|
@@ -1446,25 +1453,15 @@ def test_kubernetes_storage_mounts():
|
|
1446
1453
|
# built for x86_64 only.
|
1447
1454
|
name = _get_cluster_name()
|
1448
1455
|
storage_name = f'sky-test-{int(time.time())}'
|
1449
|
-
|
1450
|
-
|
1451
|
-
template = jinja2.Template(template_str)
|
1452
|
-
content = template.render(storage_name=storage_name)
|
1456
|
+
ls_hello_command = (f'aws s3 ls {storage_name}/hello.txt || '
|
1457
|
+
f'gsutil ls gs://{storage_name}/hello.txt')
|
1453
1458
|
with tempfile.NamedTemporaryFile(suffix='.yaml', mode='w') as f:
|
1454
|
-
|
1455
|
-
|
1456
|
-
file_path = f.name
|
1457
|
-
test_commands = [
|
1458
|
-
*STORAGE_SETUP_COMMANDS,
|
1459
|
-
f'sky launch -y -c {name} --cloud kubernetes {file_path}',
|
1460
|
-
f'sky logs {name} 1 --status', # Ensure job succeeded.
|
1461
|
-
f'aws s3 ls {storage_name}/hello.txt || '
|
1462
|
-
f'gsutil ls gs://{storage_name}/hello.txt',
|
1463
|
-
]
|
1459
|
+
test_commands, clean_command = _storage_mounts_commands_generator(
|
1460
|
+
f, name, storage_name, ls_hello_command, 'kubernetes', False)
|
1464
1461
|
test = Test(
|
1465
1462
|
'kubernetes_storage_mounts',
|
1466
1463
|
test_commands,
|
1467
|
-
|
1464
|
+
clean_command,
|
1468
1465
|
timeout=20 * 60, # 20 mins
|
1469
1466
|
)
|
1470
1467
|
run_one_test(test)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|