skypilot-nightly 1.0.0.dev2024053101__py3-none-any.whl → 1.0.0.dev2025022801__py3-none-any.whl
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.
- sky/__init__.py +64 -32
- sky/adaptors/aws.py +23 -6
- sky/adaptors/azure.py +432 -15
- sky/adaptors/cloudflare.py +5 -5
- sky/adaptors/common.py +19 -9
- sky/adaptors/do.py +20 -0
- sky/adaptors/gcp.py +3 -2
- sky/adaptors/kubernetes.py +122 -88
- sky/adaptors/nebius.py +100 -0
- sky/adaptors/oci.py +39 -1
- sky/adaptors/vast.py +29 -0
- sky/admin_policy.py +101 -0
- sky/authentication.py +117 -98
- sky/backends/backend.py +52 -20
- sky/backends/backend_utils.py +669 -557
- sky/backends/cloud_vm_ray_backend.py +1099 -808
- sky/backends/local_docker_backend.py +14 -8
- sky/backends/wheel_utils.py +38 -20
- sky/benchmark/benchmark_utils.py +22 -23
- sky/check.py +76 -27
- sky/cli.py +1586 -1139
- sky/client/__init__.py +1 -0
- sky/client/cli.py +5683 -0
- sky/client/common.py +345 -0
- sky/client/sdk.py +1765 -0
- sky/cloud_stores.py +283 -19
- sky/clouds/__init__.py +7 -2
- sky/clouds/aws.py +303 -112
- sky/clouds/azure.py +185 -179
- sky/clouds/cloud.py +115 -37
- sky/clouds/cudo.py +29 -22
- sky/clouds/do.py +313 -0
- sky/clouds/fluidstack.py +44 -54
- sky/clouds/gcp.py +206 -65
- sky/clouds/ibm.py +26 -21
- sky/clouds/kubernetes.py +345 -91
- sky/clouds/lambda_cloud.py +40 -29
- sky/clouds/nebius.py +297 -0
- sky/clouds/oci.py +129 -90
- sky/clouds/paperspace.py +22 -18
- sky/clouds/runpod.py +53 -34
- sky/clouds/scp.py +28 -24
- sky/clouds/service_catalog/__init__.py +19 -13
- sky/clouds/service_catalog/aws_catalog.py +29 -12
- sky/clouds/service_catalog/azure_catalog.py +33 -6
- sky/clouds/service_catalog/common.py +95 -75
- sky/clouds/service_catalog/constants.py +3 -3
- sky/clouds/service_catalog/cudo_catalog.py +13 -3
- sky/clouds/service_catalog/data_fetchers/fetch_aws.py +36 -21
- sky/clouds/service_catalog/data_fetchers/fetch_azure.py +31 -4
- sky/clouds/service_catalog/data_fetchers/fetch_cudo.py +8 -117
- sky/clouds/service_catalog/data_fetchers/fetch_fluidstack.py +197 -44
- sky/clouds/service_catalog/data_fetchers/fetch_gcp.py +224 -36
- sky/clouds/service_catalog/data_fetchers/fetch_lambda_cloud.py +44 -24
- sky/clouds/service_catalog/data_fetchers/fetch_vast.py +147 -0
- sky/clouds/service_catalog/data_fetchers/fetch_vsphere.py +1 -1
- sky/clouds/service_catalog/do_catalog.py +111 -0
- sky/clouds/service_catalog/fluidstack_catalog.py +2 -2
- sky/clouds/service_catalog/gcp_catalog.py +16 -2
- sky/clouds/service_catalog/ibm_catalog.py +2 -2
- sky/clouds/service_catalog/kubernetes_catalog.py +192 -70
- sky/clouds/service_catalog/lambda_catalog.py +8 -3
- sky/clouds/service_catalog/nebius_catalog.py +116 -0
- sky/clouds/service_catalog/oci_catalog.py +31 -4
- sky/clouds/service_catalog/paperspace_catalog.py +2 -2
- sky/clouds/service_catalog/runpod_catalog.py +2 -2
- sky/clouds/service_catalog/scp_catalog.py +2 -2
- sky/clouds/service_catalog/vast_catalog.py +104 -0
- sky/clouds/service_catalog/vsphere_catalog.py +2 -2
- sky/clouds/utils/aws_utils.py +65 -0
- sky/clouds/utils/azure_utils.py +91 -0
- sky/clouds/utils/gcp_utils.py +5 -9
- sky/clouds/utils/oci_utils.py +47 -5
- sky/clouds/utils/scp_utils.py +4 -3
- sky/clouds/vast.py +280 -0
- sky/clouds/vsphere.py +22 -18
- sky/core.py +361 -107
- sky/dag.py +41 -28
- sky/data/data_transfer.py +37 -0
- sky/data/data_utils.py +211 -32
- sky/data/mounting_utils.py +182 -30
- sky/data/storage.py +2118 -270
- sky/data/storage_utils.py +126 -5
- sky/exceptions.py +179 -8
- sky/execution.py +158 -85
- sky/global_user_state.py +150 -34
- sky/jobs/__init__.py +12 -10
- sky/jobs/client/__init__.py +0 -0
- sky/jobs/client/sdk.py +302 -0
- sky/jobs/constants.py +49 -11
- sky/jobs/controller.py +161 -99
- sky/jobs/dashboard/dashboard.py +171 -25
- sky/jobs/dashboard/templates/index.html +572 -60
- sky/jobs/recovery_strategy.py +157 -156
- sky/jobs/scheduler.py +307 -0
- sky/jobs/server/__init__.py +1 -0
- sky/jobs/server/core.py +598 -0
- sky/jobs/server/dashboard_utils.py +69 -0
- sky/jobs/server/server.py +190 -0
- sky/jobs/state.py +627 -122
- sky/jobs/utils.py +615 -206
- sky/models.py +27 -0
- sky/optimizer.py +142 -83
- sky/provision/__init__.py +20 -5
- sky/provision/aws/config.py +124 -42
- sky/provision/aws/instance.py +130 -53
- sky/provision/azure/__init__.py +7 -0
- sky/{skylet/providers → provision}/azure/azure-config-template.json +19 -7
- sky/provision/azure/config.py +220 -0
- sky/provision/azure/instance.py +1012 -37
- sky/provision/common.py +31 -3
- sky/provision/constants.py +25 -0
- sky/provision/cudo/__init__.py +2 -1
- sky/provision/cudo/cudo_utils.py +112 -0
- sky/provision/cudo/cudo_wrapper.py +37 -16
- sky/provision/cudo/instance.py +28 -12
- sky/provision/do/__init__.py +11 -0
- sky/provision/do/config.py +14 -0
- sky/provision/do/constants.py +10 -0
- sky/provision/do/instance.py +287 -0
- sky/provision/do/utils.py +301 -0
- sky/provision/docker_utils.py +82 -46
- sky/provision/fluidstack/fluidstack_utils.py +57 -125
- sky/provision/fluidstack/instance.py +15 -43
- sky/provision/gcp/config.py +19 -9
- sky/provision/gcp/constants.py +7 -1
- sky/provision/gcp/instance.py +55 -34
- sky/provision/gcp/instance_utils.py +339 -80
- sky/provision/gcp/mig_utils.py +210 -0
- sky/provision/instance_setup.py +172 -133
- sky/provision/kubernetes/__init__.py +1 -0
- sky/provision/kubernetes/config.py +104 -90
- sky/provision/kubernetes/constants.py +8 -0
- sky/provision/kubernetes/instance.py +680 -325
- sky/provision/kubernetes/manifests/smarter-device-manager-daemonset.yaml +3 -0
- sky/provision/kubernetes/network.py +54 -20
- sky/provision/kubernetes/network_utils.py +70 -21
- sky/provision/kubernetes/utils.py +1370 -251
- sky/provision/lambda_cloud/__init__.py +11 -0
- sky/provision/lambda_cloud/config.py +10 -0
- sky/provision/lambda_cloud/instance.py +265 -0
- sky/{clouds/utils → provision/lambda_cloud}/lambda_utils.py +24 -23
- sky/provision/logging.py +1 -1
- sky/provision/nebius/__init__.py +11 -0
- sky/provision/nebius/config.py +11 -0
- sky/provision/nebius/instance.py +285 -0
- sky/provision/nebius/utils.py +318 -0
- sky/provision/oci/__init__.py +15 -0
- sky/provision/oci/config.py +51 -0
- sky/provision/oci/instance.py +436 -0
- sky/provision/oci/query_utils.py +681 -0
- sky/provision/paperspace/constants.py +6 -0
- sky/provision/paperspace/instance.py +4 -3
- sky/provision/paperspace/utils.py +2 -0
- sky/provision/provisioner.py +207 -130
- sky/provision/runpod/__init__.py +1 -0
- sky/provision/runpod/api/__init__.py +3 -0
- sky/provision/runpod/api/commands.py +119 -0
- sky/provision/runpod/api/pods.py +142 -0
- sky/provision/runpod/instance.py +64 -8
- sky/provision/runpod/utils.py +239 -23
- sky/provision/vast/__init__.py +10 -0
- sky/provision/vast/config.py +11 -0
- sky/provision/vast/instance.py +247 -0
- sky/provision/vast/utils.py +162 -0
- sky/provision/vsphere/common/vim_utils.py +1 -1
- sky/provision/vsphere/instance.py +8 -18
- sky/provision/vsphere/vsphere_utils.py +1 -1
- sky/resources.py +247 -102
- sky/serve/__init__.py +9 -9
- sky/serve/autoscalers.py +361 -299
- sky/serve/client/__init__.py +0 -0
- sky/serve/client/sdk.py +366 -0
- sky/serve/constants.py +12 -3
- sky/serve/controller.py +106 -36
- sky/serve/load_balancer.py +63 -12
- sky/serve/load_balancing_policies.py +84 -2
- sky/serve/replica_managers.py +42 -34
- sky/serve/serve_state.py +62 -32
- sky/serve/serve_utils.py +271 -160
- sky/serve/server/__init__.py +0 -0
- sky/serve/{core.py → server/core.py} +271 -90
- sky/serve/server/server.py +112 -0
- sky/serve/service.py +52 -16
- sky/serve/service_spec.py +95 -32
- sky/server/__init__.py +1 -0
- sky/server/common.py +430 -0
- sky/server/constants.py +21 -0
- sky/server/html/log.html +174 -0
- sky/server/requests/__init__.py +0 -0
- sky/server/requests/executor.py +472 -0
- sky/server/requests/payloads.py +487 -0
- sky/server/requests/queues/__init__.py +0 -0
- sky/server/requests/queues/mp_queue.py +76 -0
- sky/server/requests/requests.py +567 -0
- sky/server/requests/serializers/__init__.py +0 -0
- sky/server/requests/serializers/decoders.py +192 -0
- sky/server/requests/serializers/encoders.py +166 -0
- sky/server/server.py +1106 -0
- sky/server/stream_utils.py +141 -0
- sky/setup_files/MANIFEST.in +2 -5
- sky/setup_files/dependencies.py +159 -0
- sky/setup_files/setup.py +14 -125
- sky/sky_logging.py +59 -14
- sky/skylet/autostop_lib.py +2 -2
- sky/skylet/constants.py +183 -50
- sky/skylet/events.py +22 -10
- sky/skylet/job_lib.py +403 -258
- sky/skylet/log_lib.py +111 -71
- sky/skylet/log_lib.pyi +6 -0
- sky/skylet/providers/command_runner.py +6 -8
- sky/skylet/providers/ibm/node_provider.py +2 -2
- sky/skylet/providers/scp/config.py +11 -3
- sky/skylet/providers/scp/node_provider.py +8 -8
- sky/skylet/skylet.py +3 -1
- sky/skylet/subprocess_daemon.py +69 -17
- sky/skypilot_config.py +119 -57
- sky/task.py +205 -64
- sky/templates/aws-ray.yml.j2 +37 -7
- sky/templates/azure-ray.yml.j2 +27 -82
- sky/templates/cudo-ray.yml.j2 +7 -3
- sky/templates/do-ray.yml.j2 +98 -0
- sky/templates/fluidstack-ray.yml.j2 +7 -4
- sky/templates/gcp-ray.yml.j2 +26 -6
- sky/templates/ibm-ray.yml.j2 +3 -2
- sky/templates/jobs-controller.yaml.j2 +46 -11
- sky/templates/kubernetes-ingress.yml.j2 +7 -0
- sky/templates/kubernetes-loadbalancer.yml.j2 +7 -0
- sky/templates/{kubernetes-port-forward-proxy-command.sh.j2 → kubernetes-port-forward-proxy-command.sh} +51 -7
- sky/templates/kubernetes-ray.yml.j2 +292 -25
- sky/templates/lambda-ray.yml.j2 +30 -40
- sky/templates/nebius-ray.yml.j2 +79 -0
- sky/templates/oci-ray.yml.j2 +18 -57
- sky/templates/paperspace-ray.yml.j2 +10 -6
- sky/templates/runpod-ray.yml.j2 +26 -4
- sky/templates/scp-ray.yml.j2 +3 -2
- sky/templates/sky-serve-controller.yaml.j2 +12 -1
- sky/templates/skypilot-server-kubernetes-proxy.sh +36 -0
- sky/templates/vast-ray.yml.j2 +70 -0
- sky/templates/vsphere-ray.yml.j2 +8 -3
- sky/templates/websocket_proxy.py +64 -0
- sky/usage/constants.py +10 -1
- sky/usage/usage_lib.py +130 -37
- sky/utils/accelerator_registry.py +35 -51
- sky/utils/admin_policy_utils.py +147 -0
- sky/utils/annotations.py +51 -0
- sky/utils/cli_utils/status_utils.py +81 -23
- sky/utils/cluster_utils.py +356 -0
- sky/utils/command_runner.py +452 -89
- sky/utils/command_runner.pyi +77 -3
- sky/utils/common.py +54 -0
- sky/utils/common_utils.py +319 -108
- sky/utils/config_utils.py +204 -0
- sky/utils/control_master_utils.py +48 -0
- sky/utils/controller_utils.py +548 -266
- sky/utils/dag_utils.py +93 -32
- sky/utils/db_utils.py +18 -4
- sky/utils/env_options.py +29 -7
- sky/utils/kubernetes/create_cluster.sh +8 -60
- sky/utils/kubernetes/deploy_remote_cluster.sh +243 -0
- sky/utils/kubernetes/exec_kubeconfig_converter.py +73 -0
- sky/utils/kubernetes/generate_kubeconfig.sh +336 -0
- sky/utils/kubernetes/gpu_labeler.py +4 -4
- sky/utils/kubernetes/k8s_gpu_labeler_job.yaml +4 -3
- sky/utils/kubernetes/kubernetes_deploy_utils.py +228 -0
- sky/utils/kubernetes/rsync_helper.sh +24 -0
- sky/utils/kubernetes/ssh_jump_lifecycle_manager.py +1 -1
- sky/utils/log_utils.py +240 -33
- sky/utils/message_utils.py +81 -0
- sky/utils/registry.py +127 -0
- sky/utils/resources_utils.py +94 -22
- sky/utils/rich_utils.py +247 -18
- sky/utils/schemas.py +284 -64
- sky/{status_lib.py → utils/status_lib.py} +12 -7
- sky/utils/subprocess_utils.py +212 -46
- sky/utils/timeline.py +12 -7
- sky/utils/ux_utils.py +168 -15
- skypilot_nightly-1.0.0.dev2025022801.dist-info/METADATA +363 -0
- skypilot_nightly-1.0.0.dev2025022801.dist-info/RECORD +352 -0
- {skypilot_nightly-1.0.0.dev2024053101.dist-info → skypilot_nightly-1.0.0.dev2025022801.dist-info}/WHEEL +1 -1
- sky/clouds/cloud_registry.py +0 -31
- sky/jobs/core.py +0 -330
- sky/skylet/providers/azure/__init__.py +0 -2
- sky/skylet/providers/azure/azure-vm-template.json +0 -301
- sky/skylet/providers/azure/config.py +0 -170
- sky/skylet/providers/azure/node_provider.py +0 -466
- sky/skylet/providers/lambda_cloud/__init__.py +0 -2
- sky/skylet/providers/lambda_cloud/node_provider.py +0 -320
- sky/skylet/providers/oci/__init__.py +0 -2
- sky/skylet/providers/oci/node_provider.py +0 -488
- sky/skylet/providers/oci/query_helper.py +0 -383
- sky/skylet/providers/oci/utils.py +0 -21
- sky/utils/cluster_yaml_utils.py +0 -24
- sky/utils/kubernetes/generate_static_kubeconfig.sh +0 -137
- skypilot_nightly-1.0.0.dev2024053101.dist-info/METADATA +0 -315
- skypilot_nightly-1.0.0.dev2024053101.dist-info/RECORD +0 -275
- {skypilot_nightly-1.0.0.dev2024053101.dist-info → skypilot_nightly-1.0.0.dev2025022801.dist-info}/LICENSE +0 -0
- {skypilot_nightly-1.0.0.dev2024053101.dist-info → skypilot_nightly-1.0.0.dev2025022801.dist-info}/entry_points.txt +0 -0
- {skypilot_nightly-1.0.0.dev2024053101.dist-info → skypilot_nightly-1.0.0.dev2025022801.dist-info}/top_level.txt +0 -0
sky/utils/command_runner.pyi
CHANGED
@@ -16,7 +16,8 @@ from sky.utils import subprocess_utils as subprocess_utils
|
|
16
16
|
|
17
17
|
GIT_EXCLUDE: str
|
18
18
|
RSYNC_DISPLAY_OPTION: str
|
19
|
-
|
19
|
+
RSYNC_FILTER_GITIGNORE: str
|
20
|
+
RSYNC_FILTER_SKYIGNORE: str
|
20
21
|
RSYNC_EXCLUDE_OPTION: str
|
21
22
|
ALIAS_SUDO_TO_EMPTY_FOR_ROOT_CMD: str
|
22
23
|
|
@@ -102,7 +103,7 @@ class CommandRunner:
|
|
102
103
|
up: bool,
|
103
104
|
log_path: str = ...,
|
104
105
|
stream_logs: bool = ...,
|
105
|
-
max_retry: int =
|
106
|
+
max_retry: int = ...) -> None:
|
106
107
|
...
|
107
108
|
|
108
109
|
@classmethod
|
@@ -114,6 +115,9 @@ class CommandRunner:
|
|
114
115
|
def check_connection(self) -> bool:
|
115
116
|
...
|
116
117
|
|
118
|
+
def close_cached_connection(self) -> None:
|
119
|
+
...
|
120
|
+
|
117
121
|
|
118
122
|
class SSHCommandRunner(CommandRunner):
|
119
123
|
ip: str
|
@@ -193,5 +197,75 @@ class SSHCommandRunner(CommandRunner):
|
|
193
197
|
up: bool,
|
194
198
|
log_path: str = ...,
|
195
199
|
stream_logs: bool = ...,
|
196
|
-
max_retry: int =
|
200
|
+
max_retry: int = ...) -> None:
|
201
|
+
...
|
202
|
+
|
203
|
+
|
204
|
+
class KubernetesCommandRunner(CommandRunner):
|
205
|
+
|
206
|
+
def __init__(
|
207
|
+
self,
|
208
|
+
node: Tuple[Tuple[str, Optional[str]], str],
|
209
|
+
) -> None:
|
210
|
+
...
|
211
|
+
|
212
|
+
@typing.overload
|
213
|
+
def run(self,
|
214
|
+
cmd: Union[str, List[str]],
|
215
|
+
*,
|
216
|
+
port_forward: Optional[List[int]] = ...,
|
217
|
+
require_outputs: Literal[False] = ...,
|
218
|
+
log_path: str = ...,
|
219
|
+
process_stream: bool = ...,
|
220
|
+
stream_logs: bool = ...,
|
221
|
+
ssh_mode: SshMode = ...,
|
222
|
+
separate_stderr: bool = ...,
|
223
|
+
connect_timeout: Optional[int] = ...,
|
224
|
+
source_bashrc: bool = ...,
|
225
|
+
skip_lines: int = ...,
|
226
|
+
**kwargs) -> int:
|
227
|
+
...
|
228
|
+
|
229
|
+
@typing.overload
|
230
|
+
def run(self,
|
231
|
+
cmd: Union[str, List[str]],
|
232
|
+
*,
|
233
|
+
port_forward: Optional[List[int]] = ...,
|
234
|
+
require_outputs: Literal[True],
|
235
|
+
log_path: str = ...,
|
236
|
+
process_stream: bool = ...,
|
237
|
+
stream_logs: bool = ...,
|
238
|
+
ssh_mode: SshMode = ...,
|
239
|
+
separate_stderr: bool = ...,
|
240
|
+
connect_timeout: Optional[int] = ...,
|
241
|
+
source_bashrc: bool = ...,
|
242
|
+
skip_lines: int = ...,
|
243
|
+
**kwargs) -> Tuple[int, str, str]:
|
244
|
+
...
|
245
|
+
|
246
|
+
@typing.overload
|
247
|
+
def run(self,
|
248
|
+
cmd: Union[str, List[str]],
|
249
|
+
*,
|
250
|
+
port_forward: Optional[List[int]] = ...,
|
251
|
+
require_outputs: bool = ...,
|
252
|
+
log_path: str = ...,
|
253
|
+
process_stream: bool = ...,
|
254
|
+
stream_logs: bool = ...,
|
255
|
+
ssh_mode: SshMode = ...,
|
256
|
+
separate_stderr: bool = ...,
|
257
|
+
connect_timeout: Optional[int] = ...,
|
258
|
+
source_bashrc: bool = ...,
|
259
|
+
skip_lines: int = ...,
|
260
|
+
**kwargs) -> Union[Tuple[int, str, str], int]:
|
261
|
+
...
|
262
|
+
|
263
|
+
def rsync(self,
|
264
|
+
source: str,
|
265
|
+
target: str,
|
266
|
+
*,
|
267
|
+
up: bool,
|
268
|
+
log_path: str = ...,
|
269
|
+
stream_logs: bool = ...,
|
270
|
+
max_retry: int = ...) -> None:
|
197
271
|
...
|
sky/utils/common.py
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
"""Common enumerators and classes."""
|
2
|
+
|
3
|
+
import contextlib
|
4
|
+
import enum
|
5
|
+
import os
|
6
|
+
from typing import Generator
|
7
|
+
|
8
|
+
from sky.skylet import constants
|
9
|
+
from sky.utils import common_utils
|
10
|
+
|
11
|
+
SKY_SERVE_CONTROLLER_PREFIX: str = 'sky-serve-controller-'
|
12
|
+
JOB_CONTROLLER_PREFIX: str = 'sky-jobs-controller-'
|
13
|
+
# We use the user hash (machine-specific) for the controller name. It will be
|
14
|
+
# the same across the whole lifecycle of the server, including:
|
15
|
+
# 1. all requests, because this global variable is set once during server
|
16
|
+
# starts.
|
17
|
+
# 2. SkyPilot API server restarts, as long as the `~/.sky` folder is persisted
|
18
|
+
# and the env var set during starting the server is the same.
|
19
|
+
# This behavior is the same for the local API server (where SERVER_ID is the
|
20
|
+
# same as the normal user hash). This ensures backwards-compatibility with jobs
|
21
|
+
# controllers from before #4660.
|
22
|
+
SERVER_ID = common_utils.get_user_hash()
|
23
|
+
SKY_SERVE_CONTROLLER_NAME: str = f'{SKY_SERVE_CONTROLLER_PREFIX}{SERVER_ID}'
|
24
|
+
JOB_CONTROLLER_NAME: str = f'{JOB_CONTROLLER_PREFIX}{SERVER_ID}'
|
25
|
+
|
26
|
+
|
27
|
+
@contextlib.contextmanager
|
28
|
+
def with_server_user_hash() -> Generator[None, None, None]:
|
29
|
+
"""Temporarily set the user hash to common.SERVER_ID."""
|
30
|
+
old_env_user_hash = os.getenv(constants.USER_ID_ENV_VAR)
|
31
|
+
os.environ[constants.USER_ID_ENV_VAR] = SERVER_ID
|
32
|
+
try:
|
33
|
+
yield
|
34
|
+
finally:
|
35
|
+
if old_env_user_hash is not None:
|
36
|
+
os.environ[constants.USER_ID_ENV_VAR] = old_env_user_hash
|
37
|
+
else:
|
38
|
+
os.environ.pop(constants.USER_ID_ENV_VAR)
|
39
|
+
|
40
|
+
|
41
|
+
class StatusRefreshMode(enum.Enum):
|
42
|
+
"""The mode of refreshing the status of a cluster."""
|
43
|
+
NONE = 'NONE'
|
44
|
+
"""Do not refresh any clusters."""
|
45
|
+
AUTO = 'AUTO'
|
46
|
+
"""Only refresh clusters if their autostop is set or have spot instances."""
|
47
|
+
FORCE = 'FORCE'
|
48
|
+
"""Enforce refreshing all clusters."""
|
49
|
+
|
50
|
+
|
51
|
+
# Constants: minimize what target?
|
52
|
+
class OptimizeTarget(enum.Enum):
|
53
|
+
COST = 0
|
54
|
+
TIME = 1
|