anyscale 0.26.65__py3-none-any.whl → 0.26.67__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.
- anyscale/_private/anyscale_client/common.py +1 -1
- anyscale/client/README.md +0 -1
- anyscale/client/openapi_client/api/default_api.py +2 -127
- anyscale/client/openapi_client/models/baseimagesenum.py +70 -1
- anyscale/client/openapi_client/models/cloud_deployment_compute_config.py +29 -1
- anyscale/client/openapi_client/models/supportedbaseimagesenum.py +70 -1
- anyscale/client/openapi_client/models/task_summary_config.py +29 -3
- anyscale/client/openapi_client/models/task_table_config.py +29 -3
- anyscale/commands/cloud_commands.py +58 -0
- anyscale/commands/setup_k8s.py +1047 -0
- anyscale/controllers/cloud_controller.py +2 -1
- anyscale/controllers/kubernetes_verifier.py +8 -0
- anyscale/sdk/anyscale_client/models/baseimagesenum.py +70 -1
- anyscale/sdk/anyscale_client/models/cloud_deployment_compute_config.py +29 -1
- anyscale/sdk/anyscale_client/models/supportedbaseimagesenum.py +70 -1
- anyscale/shared_anyscale_utils/latest_ray_version.py +1 -1
- anyscale/utils/cloudformation_utils.py +364 -0
- anyscale/version.py +1 -1
- {anyscale-0.26.65.dist-info → anyscale-0.26.67.dist-info}/METADATA +1 -1
- {anyscale-0.26.65.dist-info → anyscale-0.26.67.dist-info}/RECORD +25 -23
- {anyscale-0.26.65.dist-info → anyscale-0.26.67.dist-info}/WHEEL +0 -0
- {anyscale-0.26.65.dist-info → anyscale-0.26.67.dist-info}/entry_points.txt +0 -0
- {anyscale-0.26.65.dist-info → anyscale-0.26.67.dist-info}/licenses/LICENSE +0 -0
- {anyscale-0.26.65.dist-info → anyscale-0.26.67.dist-info}/licenses/NOTICE +0 -0
- {anyscale-0.26.65.dist-info → anyscale-0.26.67.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,364 @@
|
|
1
|
+
"""
|
2
|
+
CloudFormation utility functions for creating and managing stacks.
|
3
|
+
|
4
|
+
This module provides reusable utilities for CloudFormation stack operations
|
5
|
+
including creation, waiting, and output retrieval.
|
6
|
+
"""
|
7
|
+
|
8
|
+
import time
|
9
|
+
from typing import Any, Dict, Optional
|
10
|
+
|
11
|
+
import boto3
|
12
|
+
from botocore.exceptions import ClientError
|
13
|
+
from click import ClickException
|
14
|
+
|
15
|
+
from anyscale.cli_logger import BlockLogger
|
16
|
+
|
17
|
+
|
18
|
+
class CloudFormationUtils:
|
19
|
+
"""Utility class for CloudFormation operations."""
|
20
|
+
|
21
|
+
def __init__(self, logger: Optional[BlockLogger] = None):
|
22
|
+
self.log = logger or BlockLogger()
|
23
|
+
|
24
|
+
def create_and_wait_for_stack( # noqa: PLR0913
|
25
|
+
self,
|
26
|
+
stack_name: str,
|
27
|
+
template_body: str,
|
28
|
+
parameters: list,
|
29
|
+
region: str,
|
30
|
+
capabilities: Optional[list] = None,
|
31
|
+
timeout_seconds: int = 600,
|
32
|
+
boto3_session: Optional[boto3.Session] = None,
|
33
|
+
update_if_exists: bool = False,
|
34
|
+
) -> Dict[str, Any]:
|
35
|
+
"""
|
36
|
+
Create a CloudFormation stack and wait for it to complete.
|
37
|
+
|
38
|
+
Args:
|
39
|
+
stack_name: Name of the CloudFormation stack
|
40
|
+
template_body: CloudFormation template body
|
41
|
+
parameters: Stack parameters
|
42
|
+
region: AWS region
|
43
|
+
capabilities: Stack capabilities (default: CAPABILITY_NAMED_IAM, CAPABILITY_AUTO_EXPAND)
|
44
|
+
timeout_seconds: Timeout in seconds (default: 600)
|
45
|
+
boto3_session: Optional boto3 session (creates new if not provided)
|
46
|
+
update_if_exists: Whether to update stack if it already exists (default: False)
|
47
|
+
|
48
|
+
Returns:
|
49
|
+
CloudFormation stack information
|
50
|
+
|
51
|
+
Raises:
|
52
|
+
ClickException: If stack creation fails or times out
|
53
|
+
"""
|
54
|
+
if boto3_session is None:
|
55
|
+
boto3_session = boto3.Session(region_name=region)
|
56
|
+
|
57
|
+
cfn_client = boto3_session.client("cloudformation", region_name=region)
|
58
|
+
|
59
|
+
if capabilities is None:
|
60
|
+
capabilities = ["CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
|
61
|
+
|
62
|
+
# Create the stack
|
63
|
+
self.log.info(f"Creating CloudFormation stack: {stack_name}")
|
64
|
+
try:
|
65
|
+
cfn_client.create_stack(
|
66
|
+
StackName=stack_name,
|
67
|
+
TemplateBody=template_body,
|
68
|
+
Parameters=parameters,
|
69
|
+
Capabilities=capabilities,
|
70
|
+
)
|
71
|
+
except ClientError as e:
|
72
|
+
error_code = e.response.get("Error", {}).get("Code", "")
|
73
|
+
if error_code == "AlreadyExistsException" and update_if_exists:
|
74
|
+
self.log.warning(f"Stack {stack_name} already exists, updating...")
|
75
|
+
try:
|
76
|
+
cfn_client.update_stack(
|
77
|
+
StackName=stack_name,
|
78
|
+
TemplateBody=template_body,
|
79
|
+
Parameters=parameters,
|
80
|
+
Capabilities=capabilities,
|
81
|
+
)
|
82
|
+
except ClientError as update_error:
|
83
|
+
raise ClickException(
|
84
|
+
f"Failed to update existing stack: {update_error}"
|
85
|
+
)
|
86
|
+
else:
|
87
|
+
raise ClickException(f"Failed to create CloudFormation stack: {e}")
|
88
|
+
|
89
|
+
# Wait for stack completion
|
90
|
+
return self._wait_for_stack_completion(
|
91
|
+
cfn_client, stack_name, region, timeout_seconds
|
92
|
+
)
|
93
|
+
|
94
|
+
def _wait_for_stack_completion(
|
95
|
+
self, cfn_client, stack_name: str, region: str, timeout_seconds: int
|
96
|
+
) -> Dict[str, Any]:
|
97
|
+
"""Wait for CloudFormation stack to complete with timeout."""
|
98
|
+
stack_url = f"https://{region}.console.aws.amazon.com/cloudformation/home?region={region}#/stacks/stackinfo?stackId={stack_name}"
|
99
|
+
self.log.info(f"Track progress at: {stack_url}")
|
100
|
+
|
101
|
+
with self.log.spinner("Creating cloud resources through CloudFormation..."):
|
102
|
+
start_time = time.time()
|
103
|
+
end_time = start_time + timeout_seconds
|
104
|
+
|
105
|
+
while time.time() < end_time:
|
106
|
+
try:
|
107
|
+
stacks = cfn_client.describe_stacks(StackName=stack_name)
|
108
|
+
cfn_stack = stacks["Stacks"][0]
|
109
|
+
stack_status = cfn_stack["StackStatus"]
|
110
|
+
|
111
|
+
if stack_status in (
|
112
|
+
"CREATE_FAILED",
|
113
|
+
"ROLLBACK_COMPLETE",
|
114
|
+
"ROLLBACK_IN_PROGRESS",
|
115
|
+
"UPDATE_FAILED",
|
116
|
+
):
|
117
|
+
# Clean up resources if stack failed
|
118
|
+
self._cleanup_failed_stack(cfn_client, stack_name, region)
|
119
|
+
|
120
|
+
# Get error details
|
121
|
+
error_details = self._get_stack_error_details(
|
122
|
+
cfn_client, stack_name
|
123
|
+
)
|
124
|
+
raise ClickException(
|
125
|
+
f"CloudFormation stack failed: {stack_status}. "
|
126
|
+
f"Error details: {error_details}. "
|
127
|
+
f"Check the stack at: {stack_url}"
|
128
|
+
)
|
129
|
+
|
130
|
+
if stack_status in ("CREATE_COMPLETE", "UPDATE_COMPLETE"):
|
131
|
+
self.log.info(
|
132
|
+
f"CloudFormation stack {stack_name} completed successfully"
|
133
|
+
)
|
134
|
+
return cfn_stack
|
135
|
+
|
136
|
+
# Still in progress
|
137
|
+
time.sleep(5)
|
138
|
+
|
139
|
+
except ClientError as e:
|
140
|
+
if "does not exist" in str(e):
|
141
|
+
raise ClickException(
|
142
|
+
f"CloudFormation stack {stack_name} not found"
|
143
|
+
)
|
144
|
+
raise ClickException(f"Error checking CloudFormation stack: {e}")
|
145
|
+
|
146
|
+
# Timeout
|
147
|
+
raise ClickException(
|
148
|
+
f"CloudFormation stack {stack_name} timed out after {timeout_seconds} seconds. "
|
149
|
+
f"Check the stack at: {stack_url}"
|
150
|
+
)
|
151
|
+
|
152
|
+
def _cleanup_failed_stack(self, cfn_client, stack_name: str, region: str) -> None:
|
153
|
+
"""Clean up resources from a failed CloudFormation stack."""
|
154
|
+
try:
|
155
|
+
# Try to get stack outputs to find resources to clean up
|
156
|
+
stacks = cfn_client.describe_stacks(StackName=stack_name)
|
157
|
+
stack = stacks["Stacks"][0]
|
158
|
+
|
159
|
+
# Look for S3 bucket in outputs
|
160
|
+
for output in stack.get("Outputs", []):
|
161
|
+
if "Bucket" in output.get("OutputKey", ""):
|
162
|
+
bucket_name = output.get("OutputValue")
|
163
|
+
if bucket_name:
|
164
|
+
self._cleanup_s3_bucket(bucket_name, region)
|
165
|
+
|
166
|
+
except Exception as e: # noqa: BLE001
|
167
|
+
self.log.warning(f"Failed to cleanup resources from failed stack: {e}")
|
168
|
+
|
169
|
+
def _cleanup_s3_bucket(self, bucket_name: str, region: str) -> None:
|
170
|
+
"""Clean up S3 bucket created by failed stack."""
|
171
|
+
try:
|
172
|
+
s3_client = boto3.client("s3", region_name=region)
|
173
|
+
s3_client.delete_bucket(Bucket=bucket_name)
|
174
|
+
self.log.info(f"Successfully deleted S3 bucket: {bucket_name}")
|
175
|
+
except ClientError as e:
|
176
|
+
if e.response["Error"]["Code"] != "NoSuchBucket":
|
177
|
+
self.log.error(f"Failed to delete S3 bucket {bucket_name}: {e}")
|
178
|
+
except Exception as e: # noqa: BLE001
|
179
|
+
self.log.error(f"Failed to delete S3 bucket {bucket_name}: {e}")
|
180
|
+
|
181
|
+
def _get_stack_error_details(self, cfn_client, stack_name: str) -> str:
|
182
|
+
"""Get detailed error information from CloudFormation stack events."""
|
183
|
+
try:
|
184
|
+
events = cfn_client.describe_stack_events(StackName=stack_name)
|
185
|
+
error_events = [
|
186
|
+
event
|
187
|
+
for event in events.get("StackEvents", [])
|
188
|
+
if event.get("ResourceStatus", "").endswith("_FAILED")
|
189
|
+
]
|
190
|
+
|
191
|
+
if error_events:
|
192
|
+
latest_error = error_events[0]
|
193
|
+
return (
|
194
|
+
f"Resource: {latest_error.get('LogicalResourceId', 'Unknown')}, "
|
195
|
+
f"Status: {latest_error.get('ResourceStatus', 'Unknown')}, "
|
196
|
+
f"Reason: {latest_error.get('ResourceStatusReason', 'Unknown')}"
|
197
|
+
)
|
198
|
+
else:
|
199
|
+
return "No detailed error information available"
|
200
|
+
|
201
|
+
except Exception as e: # noqa: BLE001
|
202
|
+
return f"Failed to get error details: {e}"
|
203
|
+
|
204
|
+
def get_stack_outputs(
|
205
|
+
self,
|
206
|
+
stack_name: str,
|
207
|
+
region: str,
|
208
|
+
boto3_session: Optional[boto3.Session] = None,
|
209
|
+
) -> Dict[str, str]:
|
210
|
+
"""
|
211
|
+
Get all outputs from a CloudFormation stack.
|
212
|
+
|
213
|
+
Args:
|
214
|
+
stack_name: Name of the CloudFormation stack
|
215
|
+
region: AWS region
|
216
|
+
boto3_session: Optional boto3 session (creates new if not provided)
|
217
|
+
|
218
|
+
Returns:
|
219
|
+
Dictionary of output key-value pairs
|
220
|
+
|
221
|
+
Raises:
|
222
|
+
ClickException: If stack not found or error retrieving outputs
|
223
|
+
"""
|
224
|
+
if boto3_session is None:
|
225
|
+
boto3_session = boto3.Session(region_name=region)
|
226
|
+
|
227
|
+
cfn_client = boto3_session.client("cloudformation", region_name=region)
|
228
|
+
|
229
|
+
try:
|
230
|
+
stacks = cfn_client.describe_stacks(StackName=stack_name)
|
231
|
+
stack = stacks["Stacks"][0]
|
232
|
+
outputs = {}
|
233
|
+
|
234
|
+
for output in stack.get("Outputs", []):
|
235
|
+
outputs[output["OutputKey"]] = output["OutputValue"]
|
236
|
+
|
237
|
+
return outputs
|
238
|
+
except ClientError as e:
|
239
|
+
if "does not exist" in str(e):
|
240
|
+
raise ClickException(f"CloudFormation stack {stack_name} not found")
|
241
|
+
raise ClickException(f"Failed to get CloudFormation outputs: {e}")
|
242
|
+
|
243
|
+
def get_stack_output(
|
244
|
+
self,
|
245
|
+
stack_name: str,
|
246
|
+
output_key: str,
|
247
|
+
region: str,
|
248
|
+
boto3_session: Optional[boto3.Session] = None,
|
249
|
+
) -> str:
|
250
|
+
"""
|
251
|
+
Get a specific output value from a CloudFormation stack.
|
252
|
+
|
253
|
+
Args:
|
254
|
+
stack_name: Name of the CloudFormation stack
|
255
|
+
output_key: Key of the output to retrieve
|
256
|
+
region: AWS region
|
257
|
+
boto3_session: Optional boto3 session (creates new if not provided)
|
258
|
+
|
259
|
+
Returns:
|
260
|
+
Output value
|
261
|
+
|
262
|
+
Raises:
|
263
|
+
ClickException: If stack not found or output key not found
|
264
|
+
"""
|
265
|
+
outputs = self.get_stack_outputs(stack_name, region, boto3_session)
|
266
|
+
|
267
|
+
if output_key not in outputs:
|
268
|
+
available_keys = list(outputs.keys())
|
269
|
+
raise ClickException(
|
270
|
+
f"Output key '{output_key}' not found in stack {stack_name}. "
|
271
|
+
f"Available keys: {available_keys}"
|
272
|
+
)
|
273
|
+
|
274
|
+
return outputs[output_key]
|
275
|
+
|
276
|
+
def delete_stack(
|
277
|
+
self,
|
278
|
+
stack_name: str,
|
279
|
+
region: str,
|
280
|
+
boto3_session: Optional[boto3.Session] = None,
|
281
|
+
) -> None:
|
282
|
+
"""
|
283
|
+
Delete a CloudFormation stack.
|
284
|
+
|
285
|
+
Args:
|
286
|
+
stack_name: Name of the CloudFormation stack
|
287
|
+
region: AWS region
|
288
|
+
boto3_session: Optional boto3 session (creates new if not provided)
|
289
|
+
|
290
|
+
Raises:
|
291
|
+
ClickException: If stack deletion fails
|
292
|
+
"""
|
293
|
+
if boto3_session is None:
|
294
|
+
boto3_session = boto3.Session(region_name=region)
|
295
|
+
|
296
|
+
cfn_client = boto3_session.client("cloudformation", region_name=region)
|
297
|
+
|
298
|
+
try:
|
299
|
+
self.log.info(f"Deleting CloudFormation stack: {stack_name}")
|
300
|
+
cfn_client.delete_stack(StackName=stack_name)
|
301
|
+
|
302
|
+
# Wait for deletion to complete
|
303
|
+
with self.log.spinner("Deleting CloudFormation stack..."):
|
304
|
+
start_time = time.time()
|
305
|
+
timeout_seconds = 300 # 5 minutes for deletion
|
306
|
+
end_time = start_time + timeout_seconds
|
307
|
+
|
308
|
+
while time.time() < end_time:
|
309
|
+
try:
|
310
|
+
cfn_client.describe_stacks(StackName=stack_name)
|
311
|
+
time.sleep(5) # Still exists, wait
|
312
|
+
except ClientError as e:
|
313
|
+
if "does not exist" in str(e):
|
314
|
+
self.log.info(
|
315
|
+
f"CloudFormation stack {stack_name} deleted successfully"
|
316
|
+
)
|
317
|
+
return
|
318
|
+
raise ClickException(f"Error checking stack deletion: {e}")
|
319
|
+
|
320
|
+
raise ClickException(
|
321
|
+
f"Stack deletion timed out after {timeout_seconds} seconds"
|
322
|
+
)
|
323
|
+
|
324
|
+
except ClientError as e:
|
325
|
+
if "does not exist" in str(e):
|
326
|
+
self.log.info(f"Stack {stack_name} does not exist")
|
327
|
+
return
|
328
|
+
raise ClickException(f"Failed to delete CloudFormation stack: {e}")
|
329
|
+
|
330
|
+
|
331
|
+
# Convenience functions for backward compatibility
|
332
|
+
def create_cloudformation_stack(
|
333
|
+
stack_name: str,
|
334
|
+
template_body: str,
|
335
|
+
parameters: list,
|
336
|
+
region: str,
|
337
|
+
logger: Optional[BlockLogger] = None,
|
338
|
+
**kwargs,
|
339
|
+
) -> Dict[str, Any]:
|
340
|
+
"""Convenience function to create a CloudFormation stack."""
|
341
|
+
utils = CloudFormationUtils(logger)
|
342
|
+
return utils.create_and_wait_for_stack(
|
343
|
+
stack_name, template_body, parameters, region, **kwargs
|
344
|
+
)
|
345
|
+
|
346
|
+
|
347
|
+
def get_cloudformation_outputs(
|
348
|
+
stack_name: str, region: str, logger: Optional[BlockLogger] = None, **kwargs
|
349
|
+
) -> Dict[str, str]:
|
350
|
+
"""Convenience function to get CloudFormation stack outputs."""
|
351
|
+
utils = CloudFormationUtils(logger)
|
352
|
+
return utils.get_stack_outputs(stack_name, region, **kwargs)
|
353
|
+
|
354
|
+
|
355
|
+
def get_cloudformation_output(
|
356
|
+
stack_name: str,
|
357
|
+
output_key: str,
|
358
|
+
region: str,
|
359
|
+
logger: Optional[BlockLogger] = None,
|
360
|
+
**kwargs,
|
361
|
+
) -> str:
|
362
|
+
"""Convenience function to get a specific CloudFormation stack output."""
|
363
|
+
utils = CloudFormationUtils(logger)
|
364
|
+
return utils.get_stack_output(stack_name, output_key, region, **kwargs)
|
anyscale/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.26.
|
1
|
+
__version__ = "0.26.67"
|
@@ -28,12 +28,12 @@ anyscale/snapshot.py,sha256=UGJT5C1s_4xmQxjWODK5DFpGxHRBX5jOCdSCqXESH8E,1685
|
|
28
28
|
anyscale/tables.py,sha256=TV4F2uLnwehvbkAfaP7iuLlT2wLIo6ORH2LVdRGXW5g,2840
|
29
29
|
anyscale/telemetry.py,sha256=U90C2Vgx48z9PMTI6EbzHFbP3jWnDUutbIfMPBb8-SI,14711
|
30
30
|
anyscale/util.py,sha256=3jfGH2CyDmXrSg-3owSF7F8FnqKbLJ-aHUbepyCKuqQ,42903
|
31
|
-
anyscale/version.py,sha256=
|
31
|
+
anyscale/version.py,sha256=4mkZX01-EDXdRnvNIK0wtKyNwhcnPvBpwO-aAxb3rCk,24
|
32
32
|
anyscale/workspace_utils.py,sha256=OViE88CnIF5ruVxd3kazQ0Mf2BxqtMq6wx-XQ5A2cp8,1204
|
33
33
|
anyscale/_private/anyscale_client/README.md,sha256=kSfI2Jfw5RHZWYtu0di3XtdSCx0d2pSwKMfjmDvw7Tg,3770
|
34
34
|
anyscale/_private/anyscale_client/__init__.py,sha256=807Blx3RHQeS8BmKZcsOQQ4dYoKlCnpm6Bdsif2CrHg,337
|
35
35
|
anyscale/_private/anyscale_client/anyscale_client.py,sha256=wmOKitarsg5d9pH0PsvIRCwJCJdHBhL46hB0dF8qTPs,80538
|
36
|
-
anyscale/_private/anyscale_client/common.py,sha256=
|
36
|
+
anyscale/_private/anyscale_client/common.py,sha256=lZLbGWDIXCoZa0Gj6F6XwA3FEn4BiNI2GDqUXbM7ivY,27436
|
37
37
|
anyscale/_private/anyscale_client/fake_anyscale_client.py,sha256=y_Rq-nqVndWdO5y55KVL262YKCQRM8AGYvg-SbQxe_c,63526
|
38
38
|
anyscale/_private/docgen/README.md,sha256=z0tj8Jy0KmxWJBQMHKyzXGX_cYYgI8m5DCD6KCMU8oI,762
|
39
39
|
anyscale/_private/docgen/__main__.py,sha256=KZuf-luVv9jEiSiuq-xkjCZj9FMNJXVHS_nr-HO31wQ,25798
|
@@ -106,7 +106,7 @@ anyscale/background/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
|
|
106
106
|
anyscale/background/job_runner.py,sha256=LTuv9JOahyv6C9i7DLQAONgQF6--FfYZEmJrKy-sUG8,2687
|
107
107
|
anyscale/client/.gitignore,sha256=JZyvYEtT2DCSK9V5Joi6lQofhMik4PXiJRCWsg7SvqI,807
|
108
108
|
anyscale/client/.openapi-generator-ignore,sha256=pu2PTide7pJtJ-DFLzDy0cTYQJRlrB-8RRH3zGLeUds,1040
|
109
|
-
anyscale/client/README.md,sha256=
|
109
|
+
anyscale/client/README.md,sha256=qCVY-Th4K0QhR-tPgXsHF5-mjgTWupf2nHSsYWe73pk,130129
|
110
110
|
anyscale/client/git_push.sh,sha256=EDCZOTTiLxbtPHmiU63qC99rGH67B7dhdPZdNUKivF0,1827
|
111
111
|
anyscale/client/requirements.txt,sha256=dkVKYUStC5h_g_87SH7pRdhXCj7ySozAJMGAFEzGgFc,126
|
112
112
|
anyscale/client/setup.cfg,sha256=l7bdKSIedeBhhoDtupsBwx1xPrlBf2yYeTH7a8kMga4,28
|
@@ -120,7 +120,7 @@ anyscale/client/openapi_client/configuration.py,sha256=Dd5XrlHwv-wxnf0C35PG_-HBQ
|
|
120
120
|
anyscale/client/openapi_client/exceptions.py,sha256=3egwsXQG2j_vARbqgBxUO1xSltAhpfiHTYVP7VXTvU0,3792
|
121
121
|
anyscale/client/openapi_client/rest.py,sha256=Ehj37v7GHW6SXV067Hze5HE42ayKaGi6a6ZlkR7u3Lg,12501
|
122
122
|
anyscale/client/openapi_client/api/__init__.py,sha256=i8u7BI2xX1GrXTL3hN0pKpYIlnT-D_uDxH2ElOfYG1I,141
|
123
|
-
anyscale/client/openapi_client/api/default_api.py,sha256=
|
123
|
+
anyscale/client/openapi_client/api/default_api.py,sha256=bRwzeBTOW5dCQAcGa41eMFu9KEUiW5j64j3DqDtJWGI,2117163
|
124
124
|
anyscale/client/openapi_client/models/__init__.py,sha256=C-fwaLsEv15SLgFnX8KGiFZndsVFApWVwVjLc7hXaRA,58236
|
125
125
|
anyscale/client/openapi_client/models/access_config.py,sha256=b2mA0qtuTA5PFbp6C61Jc_T2zUMaojM1v32IhZo0MfY,3648
|
126
126
|
anyscale/client/openapi_client/models/actor_status.py,sha256=6xyX_aIqURj2raBdY9DmBxsdDACFrqqYvElGiM6YG2E,2813
|
@@ -160,7 +160,7 @@ anyscale/client/openapi_client/models/awsregionandzones_response.py,sha256=yUmo9
|
|
160
160
|
anyscale/client/openapi_client/models/backend_server_api_product_models_dataset_runs_dataset_response.py,sha256=EDjqrf5BGbb9A18A6MxfhboPqEWmERigcQ6JOIUo_88,3896
|
161
161
|
anyscale/client/openapi_client/models/backend_server_api_product_routers_datasets_router_dataset_response.py,sha256=UUDGBkQ7K51_4WUPoP3YJ-9ubZcRX0zaNKTEPPf1YiQ,3847
|
162
162
|
anyscale/client/openapi_client/models/base_job_status.py,sha256=hQoX9Z6VWkKqPGVwiV7WGcfMgggWlpo8-Ig0lfhc534,3010
|
163
|
-
anyscale/client/openapi_client/models/baseimagesenum.py,sha256=
|
163
|
+
anyscale/client/openapi_client/models/baseimagesenum.py,sha256=qfMSYyB_g7HOp9c1AJhQ9YWpZxFp3LWOHi58cSxXIsI,319769
|
164
164
|
anyscale/client/openapi_client/models/batch_response_batched_result_organization_invitation_base.py,sha256=jSabTOT2BCsngQQ9DcOj18Ug2ac1Dqfr4lbnVxTMfNE,3926
|
165
165
|
anyscale/client/openapi_client/models/batched_result_organization_invitation_base.py,sha256=6lpamdA4O_xM3iRt6InZ2q5h0LIab4yx7FfJK-n8kog,5140
|
166
166
|
anyscale/client/openapi_client/models/billing_version_code.py,sha256=Zha3iTWIa_-u2Q8kz7otbncLFD4R40-_QYX2lX1Wq1A,2828
|
@@ -197,7 +197,7 @@ anyscale/client/openapi_client/models/cloud_data_bucket_presigned_url_response.p
|
|
197
197
|
anyscale/client/openapi_client/models/cloud_data_bucket_presigned_url_scheme.py,sha256=Vpnb4gAa6TBj0p5OfiIzLTWFGZ3Xd5s7jXdOJw06msM,2916
|
198
198
|
anyscale/client/openapi_client/models/cloud_data_bucket_request_scope.py,sha256=IqPon7rEzfGPfSifMNzUZZDXv2NS-v9D0Zab57WFnYw,2901
|
199
199
|
anyscale/client/openapi_client/models/cloud_deployment.py,sha256=xr_HRDhI4gYSv0aIXiWYyAlHQJWHB605SdL8jEz41w8,13300
|
200
|
-
anyscale/client/openapi_client/models/cloud_deployment_compute_config.py,sha256=
|
200
|
+
anyscale/client/openapi_client/models/cloud_deployment_compute_config.py,sha256=bzXjJxrgBnnj-DEp9VL6386ItHq0wYMXOwt0V6S61Hc,12301
|
201
201
|
anyscale/client/openapi_client/models/cloud_deployment_config.py,sha256=cFErRe2NF9C8DI2SBTvHp37PB736A_jeg5UBc4Erl3Y,3468
|
202
202
|
anyscale/client/openapi_client/models/cloud_list_response.py,sha256=I2zXNTv1ipWz0ndW0NijCnq9PSAHahDXcLvz_-6hlvI,4272
|
203
203
|
anyscale/client/openapi_client/models/cloud_name_options.py,sha256=3olGjYqgPVaINvhbitPncKbjyiezeaDcnO6dbZnu6sA,3449
|
@@ -706,7 +706,7 @@ anyscale/client/openapi_client/models/summarize_machine_pool_request.py,sha256=G
|
|
706
706
|
anyscale/client/openapi_client/models/summarize_machine_pool_response.py,sha256=srO9s5_0PKA8fIuhm0dWkNwQ98cLhlYsoVLiHVT-ETM,6192
|
707
707
|
anyscale/client/openapi_client/models/summarizemachinepoolresponse_response.py,sha256=9Zae6W1f4rXYOoWEyblZH3-Yo3OTiRefB04Fzk2VpoM,3726
|
708
708
|
anyscale/client/openapi_client/models/support_requests_query.py,sha256=uSM7EnvidalnDMA5rbu-wGFsP9PX8qdUwc7cABJ6ogw,5496
|
709
|
-
anyscale/client/openapi_client/models/supportedbaseimagesenum.py,sha256
|
709
|
+
anyscale/client/openapi_client/models/supportedbaseimagesenum.py,sha256=rr9dre3LKXgka5D2mrvAOmFmXGoHWxzUJkq39CKyw-A,217130
|
710
710
|
anyscale/client/openapi_client/models/system_workload_name.py,sha256=o989t_JBtrgBlsmG8RemV-n09mKEjCA_3DDm1kgvOlc,2880
|
711
711
|
anyscale/client/openapi_client/models/tag_key.py,sha256=gU84rQX0dyzXOtWh58XCVzuBXotjF6sZatOJL0tU3aQ,3348
|
712
712
|
anyscale/client/openapi_client/models/tag_key_value.py,sha256=opWWy0TEHkbSIfRMI7c3b-ESeM-BNjqmlnXBZCArInk,4136
|
@@ -725,8 +725,8 @@ anyscale/client/openapi_client/models/task_job_group_aggregate.py,sha256=hsF9Ebe
|
|
725
725
|
anyscale/client/openapi_client/models/task_job_group_aggregate_response.py,sha256=kB3KdyeS8dFUIKv216_KG3ZFWFTVR7OdudDG8fAelKE,5293
|
726
726
|
anyscale/client/openapi_client/models/task_state.py,sha256=KpRA6VImK3r0qNeaiHh4an-HsKmbpeOJdGRFlmRrP1Y,2985
|
727
727
|
anyscale/client/openapi_client/models/task_summary.py,sha256=8GIpf9xxmPDV8LJgIsGmSQex2R6CDKx0oJ9_VrL7oPw,9102
|
728
|
-
anyscale/client/openapi_client/models/task_summary_config.py,sha256=
|
729
|
-
anyscale/client/openapi_client/models/task_table_config.py,sha256=
|
728
|
+
anyscale/client/openapi_client/models/task_summary_config.py,sha256=hKnx6nzK0pj1SkkVUASC8c9XyKfOOa_x78H3o8XkhUE,4443
|
729
|
+
anyscale/client/openapi_client/models/task_table_config.py,sha256=LjuNXnPidenACtsWEUfWLjybTiQNajHmCERF47az334,9345
|
730
730
|
anyscale/client/openapi_client/models/task_table_response.py,sha256=T8VDBMlOzD1c2hY_Q1JdOF8ZF1MqA5JUMbnRjCKZmcg,5074
|
731
731
|
anyscale/client/openapi_client/models/task_table_row.py,sha256=PLflvQBFSsyXGZwCkDLIy480NyFpuvy8AvpAxLkOq94,18833
|
732
732
|
anyscale/client/openapi_client/models/task_type.py,sha256=I6JbtPZIDcPHIDCFupqeZ9KkvE4fb-NewPPZ31dVG8A,2951
|
@@ -834,7 +834,7 @@ anyscale/cloud/_private/cloud_sdk.py,sha256=5TBGyGSjMI4jLOnSle1WWC6za0psP9xgTGWU
|
|
834
834
|
anyscale/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
835
835
|
anyscale/commands/aggregated_instance_usage_commands.py,sha256=TRP1X3hdIWbKg9V20VtazlDXsYAeV--M0DH3-Z5tnj4,2293
|
836
836
|
anyscale/commands/auth_commands.py,sha256=X1g6Yu9kqgPb4HLODlZTYEk8G5AVLeyizPIgagWx-p0,1026
|
837
|
-
anyscale/commands/cloud_commands.py,sha256=
|
837
|
+
anyscale/commands/cloud_commands.py,sha256=NdB4O_Nee-ute0lXWs7xIotdoVuoyHUvBbYXueODFGk,60185
|
838
838
|
anyscale/commands/cluster_commands.py,sha256=taNcffyFfqJ1MgOQd0cz9kzRXWFTdp-wfLPM4l_2tBc,13487
|
839
839
|
anyscale/commands/cluster_env_commands.py,sha256=KNWylyE8Ew1sDi7yu2Tp4RLcRu2_KJJJIzVGRyPflJo,3899
|
840
840
|
anyscale/commands/command_examples.py,sha256=pSj1DyHwlzmSxw-Ko5RUTQ57uFA7v7Jgur0s7K55bts,25182
|
@@ -859,6 +859,7 @@ anyscale/commands/schedule_commands.py,sha256=Bw2aKp_w6xcuRSVVi9FLdUjRVCr8_v4Tt2
|
|
859
859
|
anyscale/commands/service_account_commands.py,sha256=JlppTmcaDofJn7TYqd3PW4hDGykdEN56fr0PT3qgBIg,3271
|
860
860
|
anyscale/commands/service_commands.py,sha256=DBrPkW7JH3kCsr038aQStm7AF1u-n80sLjwc2Hjifks,34014
|
861
861
|
anyscale/commands/session_commands_hidden.py,sha256=APEypnUB1yV2Rr6wdSFWy1vQbAnn-lOn0rU2enF5JdM,6200
|
862
|
+
anyscale/commands/setup_k8s.py,sha256=__Z7p8mISxK2AntvrUUzQ5RRQVnnPQJmu8vejY8x0wU,40821
|
862
863
|
anyscale/commands/user_commands.py,sha256=C-i1dGpdhboywN_2XgPS2BekKx2y6LZq8c8gvS0S-tY,1259
|
863
864
|
anyscale/commands/util.py,sha256=fIob29G1jZ4VU9PKVSJnT6hqX7wAqsS4L9sApsMZcNs,8585
|
864
865
|
anyscale/commands/workspace_commands.py,sha256=5JoF5xftkwkxHidp8xyj9POrlZE_WxwSKtZGnKCbDV4,18597
|
@@ -878,7 +879,7 @@ anyscale/connect_utils/start_interactive_session.py,sha256=m-RCH0e_bQBF6dAOskbP9
|
|
878
879
|
anyscale/controllers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
879
880
|
anyscale/controllers/auth_controller.py,sha256=hDY2sPvUP8pvh8PnlDYH5rCHjQes2v3b_KBVjMbrzeE,5127
|
880
881
|
anyscale/controllers/base_controller.py,sha256=1QFJoScFUV7YTzpKarhwPOc1SvI-xqX3TZmwxKonW6I,1998
|
881
|
-
anyscale/controllers/cloud_controller.py,sha256=
|
882
|
+
anyscale/controllers/cloud_controller.py,sha256=r1jDAKG-rZmKVDCqR2SuLpZcl8lXanI-Ij7BOqLDCys,201999
|
882
883
|
anyscale/controllers/cloud_file_storage_utils.py,sha256=ifaqClEybTgxhqGWHYoH1vrlbxwjRuO-De_3666R2O4,6987
|
883
884
|
anyscale/controllers/cloud_functional_verification_controller.py,sha256=uro10r981CTlt2zlisUCmNYljbrYBiWzh7vrqrcur3I,33475
|
884
885
|
anyscale/controllers/cluster_controller.py,sha256=Sb5wVjrjpycg5iqmENAVtZ4iy9Kr6kM97_ck-KH85LM,28745
|
@@ -888,7 +889,7 @@ anyscale/controllers/config_controller.py,sha256=VsfdARHxo4tMLfeiYkTNOMGW3sIcNhV
|
|
888
889
|
anyscale/controllers/experimental_integrations_controller.py,sha256=_22_hAQCJIMg3E10s8xajoFF6Lf1HqVlAdAVt0Rh2DY,3889
|
889
890
|
anyscale/controllers/job_controller.py,sha256=sNQGzSLtp6e8PSbrmMrW_dp3pYytS8KCGcE-YjaNz5I,25425
|
890
891
|
anyscale/controllers/jobs_bg_controller.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
891
|
-
anyscale/controllers/kubernetes_verifier.py,sha256=
|
892
|
+
anyscale/controllers/kubernetes_verifier.py,sha256=BGqq65wsF9YfFJva7HJ8DhHoubkoGskEyX_0cRVBOLc,59022
|
892
893
|
anyscale/controllers/list_controller.py,sha256=oaOS6oo2TKPpXhGjs_laxuIVKinv3FwYfHt1CIzeTuU,11621
|
893
894
|
anyscale/controllers/logs_controller.py,sha256=x5GBUVdPYhbWRA3RfMQZJi3hBS2i35RkgzROfmY47h4,17647
|
894
895
|
anyscale/controllers/machine_controller.py,sha256=WauNi7Spzt2TFZrIN4PwULzgJZBVDFlytzFqpDQ106w,1188
|
@@ -946,13 +947,13 @@ anyscale/sdk/anyscale_client/models/apply_production_service_v2_model.py,sha256=
|
|
946
947
|
anyscale/sdk/anyscale_client/models/apply_service_model.py,sha256=FDB7ANoSG37SVt1q7Q8Xs5qCi8uTgGIimHiJXCJssdA,20283
|
947
948
|
anyscale/sdk/anyscale_client/models/archive_status.py,sha256=C5z72r5glAaa5cOXzwhECfBN3QiVP769B_2_Q9G4znk,2873
|
948
949
|
anyscale/sdk/anyscale_client/models/base_job_status.py,sha256=wW3Cq4H1Bchg1OVf-f0eQyEugMDvM8BgDu6zrAQuYic,3008
|
949
|
-
anyscale/sdk/anyscale_client/models/baseimagesenum.py,sha256=
|
950
|
+
anyscale/sdk/anyscale_client/models/baseimagesenum.py,sha256=IgkEE8cD4qrJ819K-Qd6llQttj5xJT0ygWuJiqhlmcM,319767
|
950
951
|
anyscale/sdk/anyscale_client/models/build.py,sha256=xiHlZqdnn-jAcbsLp735tjXG4f9TX49ADYqkbL39zLQ,20306
|
951
952
|
anyscale/sdk/anyscale_client/models/build_response.py,sha256=lC_GmJ5eYUMSAC_g7VwmdvNSN6k_TfzCpRw3kK6GQMQ,3471
|
952
953
|
anyscale/sdk/anyscale_client/models/build_status.py,sha256=4L-hAKlhaOUy41MV1sXIq7Ls7u8CMkWMB5NsKD4wXJ0,3015
|
953
954
|
anyscale/sdk/anyscale_client/models/cloud.py,sha256=IsmUKHe3ATcOSRXotudH9lzwZnTVp2rXmzFOWpmWiFM,28912
|
954
955
|
anyscale/sdk/anyscale_client/models/cloud_config.py,sha256=koZOTPKLpjHmC5UukNYDOTkhal566xNWbYPzptJ03Wc,7505
|
955
|
-
anyscale/sdk/anyscale_client/models/cloud_deployment_compute_config.py,sha256=
|
956
|
+
anyscale/sdk/anyscale_client/models/cloud_deployment_compute_config.py,sha256=k231SpR_wlFioyZrlwv55w5yz2HL-O4qnvEEBR4nNuc,12299
|
956
957
|
anyscale/sdk/anyscale_client/models/cloud_list_response.py,sha256=D3Ixmub2dnow4VGVuWjTEHbFqUxuiubUF39oEWtMT7o,4270
|
957
958
|
anyscale/sdk/anyscale_client/models/cloud_providers.py,sha256=NFsuErmp86tOk8uiaji94Y9rxlzYvLV1816tyxAIwuI,2943
|
958
959
|
anyscale/sdk/anyscale_client/models/cloud_response.py,sha256=d21OnA7MCnGRIfRRIFZSkXXhGHeMh7igrwqxF9X3_gw,3471
|
@@ -1091,7 +1092,7 @@ anyscale/sdk/anyscale_client/models/sso_mode.py,sha256=nYyT7AImPVG0vbr7RqVVDEbe2
|
|
1091
1092
|
anyscale/sdk/anyscale_client/models/ssoconfig_response.py,sha256=_ezyQtU4CI25mYsJysYXHBigIky7XOHwy2g8-UztUWQ,3515
|
1092
1093
|
anyscale/sdk/anyscale_client/models/start_cluster_options.py,sha256=hlCCHVqxwT70lJVL9mg7XhcoM_6nPcl6LmzMbIuJ-IM,6404
|
1093
1094
|
anyscale/sdk/anyscale_client/models/static_sso_config.py,sha256=Bq_Pmc1-DKVKiX-xwm6bOc9hw3400U9YZ4-iN93tTSg,7119
|
1094
|
-
anyscale/sdk/anyscale_client/models/supportedbaseimagesenum.py,sha256=
|
1095
|
+
anyscale/sdk/anyscale_client/models/supportedbaseimagesenum.py,sha256=n0YrIJ7lqLG1BKFyqByS1Cdm5--wRuw-R937shzyLjg,217128
|
1095
1096
|
anyscale/sdk/anyscale_client/models/system_workload_name.py,sha256=ciWHh6U1GjNrFZL76ZK33-kOZCnG97h_LFe8ok_9DQ4,2878
|
1096
1097
|
anyscale/sdk/anyscale_client/models/terminate_cluster_options.py,sha256=G88vOv_i5E-CXT5IFGjnu0oZ6diycd9UXI-go9o3vLE,3883
|
1097
1098
|
anyscale/sdk/anyscale_client/models/text_query.py,sha256=NVGbkdvoJxTiCtDhbkiwCUGsqHrewENVRvkh_njNGzg,5105
|
@@ -1118,7 +1119,7 @@ anyscale/shared_anyscale_utils/constants.py,sha256=wtk4r_dIuKVUEeziugYqsZrJv27qx
|
|
1118
1119
|
anyscale/shared_anyscale_utils/default_anyscale_aws.yaml,sha256=wU8xPUQ6sMtVB5q3QYYGYlhCKkI5QDtg8LvH53hQ6WE,1650
|
1119
1120
|
anyscale/shared_anyscale_utils/default_anyscale_gcp.yaml,sha256=rmwavzx7aTsSPio-jmYhdvfkHCuu8BOkNOuMSKMgBRE,1817
|
1120
1121
|
anyscale/shared_anyscale_utils/headers.py,sha256=JfyGJJGszaH1_hByz_2X0SCefi3S-q_xaQQw-FBWUkM,1228
|
1121
|
-
anyscale/shared_anyscale_utils/latest_ray_version.py,sha256=
|
1122
|
+
anyscale/shared_anyscale_utils/latest_ray_version.py,sha256=YAjwjpEv9jhPp6enw6vtb-rW_jRV_jCPid1aeyTe5I8,163
|
1122
1123
|
anyscale/shared_anyscale_utils/project.py,sha256=7gQ6RXWV1bQEWRN5hloj-U3DxmEw6LEEhGoF0oWoAm8,476
|
1123
1124
|
anyscale/shared_anyscale_utils/test_util.py,sha256=bYkCdHV9ZTlFrvHOtub5vivj4TXCct1WECzIPTRMU1I,657
|
1124
1125
|
anyscale/shared_anyscale_utils/util.py,sha256=oT82MhLjJo2-Xb4iLN1_JhGN4rdXWfrkcLe4QDkRx1A,1787
|
@@ -1140,6 +1141,7 @@ anyscale/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1140
1141
|
anyscale/utils/cli_version_check_util.py,sha256=U2KU-NRf09pcs-ZZYUm1GQxs7Btp6N4Fv6CQeNoEeTM,2223
|
1141
1142
|
anyscale/utils/cloud_update_utils.py,sha256=c53AQyg4OJBkNqTD-8hHvEpdTwtins1rTycifBbQbWI,34106
|
1142
1143
|
anyscale/utils/cloud_utils.py,sha256=DtUkaIvKeX64Scia62fjnK61_gNMJr_H2e73C-ywF7k,12228
|
1144
|
+
anyscale/utils/cloudformation_utils.py,sha256=G4QJbnwve8ZQu7qzrT7ZVZ32zqf_bDxBDZBNZEtFkZg,13839
|
1143
1145
|
anyscale/utils/cluster_debug.py,sha256=P_-20L4Rt4LVAIGX-y9F61z5XYO5QbNtqf2MYJxuy_g,6391
|
1144
1146
|
anyscale/utils/connect_helpers.py,sha256=hlTKnaL27pABWPoW5nA5dpJW2ZG_2k7dXjnqtdzoBjo,5956
|
1145
1147
|
anyscale/utils/deprecation_util.py,sha256=2i1SNQIziOZXO24IuBZZUEi4ild1bqk0gfZWl2KgpXw,1160
|
@@ -1172,10 +1174,10 @@ anyscale/workspace/__init__.py,sha256=Innbm5ZhCyADEVBiYSo_vbpKwUNcMzVSAfxIGKOYe6
|
|
1172
1174
|
anyscale/workspace/commands.py,sha256=b1sqNseoPj-1VXznqQOLe0V_a663bOTvJX-TaOMJa1Y,14590
|
1173
1175
|
anyscale/workspace/models.py,sha256=uiMqoJRQNRgTcOIIsysSrtlHMtnI7paUWS34EN626Cg,10016
|
1174
1176
|
anyscale/workspace/_private/workspace_sdk.py,sha256=2CMeYfJt0UtIFCocDn1ukw1iI5esKHdopLe6duEs-qE,27599
|
1175
|
-
anyscale-0.26.
|
1176
|
-
anyscale-0.26.
|
1177
|
-
anyscale-0.26.
|
1178
|
-
anyscale-0.26.
|
1179
|
-
anyscale-0.26.
|
1180
|
-
anyscale-0.26.
|
1181
|
-
anyscale-0.26.
|
1177
|
+
anyscale-0.26.67.dist-info/licenses/LICENSE,sha256=UOPu974Wzsna6frFv1mu4VrZgNdZT7lbcNPzo5ue3qs,3494
|
1178
|
+
anyscale-0.26.67.dist-info/licenses/NOTICE,sha256=gHqDhSnUYlRXX-mDOL5FtE7774oiKyV_HO80qM3r9Xo,196
|
1179
|
+
anyscale-0.26.67.dist-info/METADATA,sha256=v2m-ZcONwTUVJvL4Mr3fsNVacBDKtjHY6mgJX-ppWEw,3231
|
1180
|
+
anyscale-0.26.67.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
1181
|
+
anyscale-0.26.67.dist-info/entry_points.txt,sha256=NqO18sCZn6zG6J0S38itjcN00s7aE3C3v3k5lMAfCLk,51
|
1182
|
+
anyscale-0.26.67.dist-info/top_level.txt,sha256=g3NVNS8Oh0NZwbFFgeX696C5MZZkS5dqV2NqcsbDRJE,9
|
1183
|
+
anyscale-0.26.67.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|