anyscale 0.26.68__py3-none-any.whl → 0.26.69__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/client/README.md CHANGED
@@ -231,6 +231,7 @@ Class | Method | HTTP request | Description
231
231
  *DefaultApi* | [**get_metronome_embedded_usage_dashboard_by_organization_api_v2_organization_billing_organization_id_metronome_embedded_dashboard_url_dashboard_type_get**](docs/DefaultApi.md#get_metronome_embedded_usage_dashboard_by_organization_api_v2_organization_billing_organization_id_metronome_embedded_dashboard_url_dashboard_type_get) | **GET** /api/v2/organization_billing/{organization_id}/metronome_embedded_dashboard_url/{dashboard_type} | Get Metronome Embedded Usage Dashboard By Organization
232
232
  *DefaultApi* | [**get_model_api_v2_llm_models_model_id_get**](docs/DefaultApi.md#get_model_api_v2_llm_models_model_id_get) | **GET** /api/v2/llm/models/{model_id} | Get Model
233
233
  *DefaultApi* | [**get_model_by_job_id_api_v2_llm_models_get_by_job_id_job_id_get**](docs/DefaultApi.md#get_model_by_job_id_api_v2_llm_models_get_by_job_id_job_id_get) | **GET** /api/v2/llm/models/get_by_job_id/{job_id} | Get Model By Job Id
234
+ *DefaultApi* | [**get_node_api_v2_cluster_dashboard_node_id_get**](docs/DefaultApi.md#get_node_api_v2_cluster_dashboard_node_id_get) | **GET** /api/v2/cluster_dashboard/{node_id} | Get Node
234
235
  *DefaultApi* | [**get_nodes_api_v2_cluster_dashboard_get**](docs/DefaultApi.md#get_nodes_api_v2_cluster_dashboard_get) | **GET** /api/v2/cluster_dashboard/ | Get Nodes
235
236
  *DefaultApi* | [**get_oauth_login_url_api_v2_integrations_oauth_login_get**](docs/DefaultApi.md#get_oauth_login_url_api_v2_integrations_oauth_login_get) | **GET** /api/v2/integrations/oauth/login | Get Oauth Login Url
236
237
  *DefaultApi* | [**get_operator_events_api_v2_dataset_runs_operator_events_get**](docs/DefaultApi.md#get_operator_events_api_v2_dataset_runs_operator_events_get) | **GET** /api/v2/dataset_runs/operator_events | Get Operator Events
@@ -551,6 +552,7 @@ Class | Method | HTTP request | Description
551
552
  - [ClusterStatusDetails](docs/ClusterStatusDetails.md)
552
553
  - [ClusterauthresponseResponse](docs/ClusterauthresponseResponse.md)
553
554
  - [ClusterdashboardnodeListResponse](docs/ClusterdashboardnodeListResponse.md)
555
+ - [ClusterdashboardnodeResponse](docs/ClusterdashboardnodeResponse.md)
554
556
  - [ClustereventListResponse](docs/ClustereventListResponse.md)
555
557
  - [ClustereventsoutputResponse](docs/ClustereventsoutputResponse.md)
556
558
  - [ClusteroperationResponse](docs/ClusteroperationResponse.md)
@@ -149,6 +149,7 @@ from openapi_client.models.cluster_status import ClusterStatus
149
149
  from openapi_client.models.cluster_status_details import ClusterStatusDetails
150
150
  from openapi_client.models.clusterauthresponse_response import ClusterauthresponseResponse
151
151
  from openapi_client.models.clusterdashboardnode_list_response import ClusterdashboardnodeListResponse
152
+ from openapi_client.models.clusterdashboardnode_response import ClusterdashboardnodeResponse
152
153
  from openapi_client.models.clusterevent_list_response import ClustereventListResponse
153
154
  from openapi_client.models.clustereventsoutput_response import ClustereventsoutputResponse
154
155
  from openapi_client.models.clusteroperation_response import ClusteroperationResponse
@@ -18490,6 +18490,132 @@ class DefaultApi(object):
18490
18490
  _request_timeout=local_var_params.get('_request_timeout'),
18491
18491
  collection_formats=collection_formats)
18492
18492
 
18493
+ def get_node_api_v2_cluster_dashboard_node_id_get(self, node_id, cluster_id, **kwargs): # noqa: E501
18494
+ """Get Node # noqa: E501
18495
+
18496
+ This method makes a synchronous HTTP request by default. To make an
18497
+ asynchronous HTTP request, please pass async_req=True
18498
+ >>> thread = api.get_node_api_v2_cluster_dashboard_node_id_get(node_id, cluster_id, async_req=True)
18499
+ >>> result = thread.get()
18500
+
18501
+ :param async_req bool: execute request asynchronously
18502
+ :param str node_id: (required)
18503
+ :param str cluster_id: (required)
18504
+ :param str session_name: The name of the session to the node belongs to.
18505
+ :param _preload_content: if False, the urllib3.HTTPResponse object will
18506
+ be returned without reading/decoding response
18507
+ data. Default is True.
18508
+ :param _request_timeout: timeout setting for this request. If one
18509
+ number provided, it will be total request
18510
+ timeout. It can also be a pair (tuple) of
18511
+ (connection, read) timeouts.
18512
+ :return: ClusterdashboardnodeResponse
18513
+ If the method is called asynchronously,
18514
+ returns the request thread.
18515
+ """
18516
+ kwargs['_return_http_data_only'] = True
18517
+ return self.get_node_api_v2_cluster_dashboard_node_id_get_with_http_info(node_id, cluster_id, **kwargs) # noqa: E501
18518
+
18519
+ def get_node_api_v2_cluster_dashboard_node_id_get_with_http_info(self, node_id, cluster_id, **kwargs): # noqa: E501
18520
+ """Get Node # noqa: E501
18521
+
18522
+ This method makes a synchronous HTTP request by default. To make an
18523
+ asynchronous HTTP request, please pass async_req=True
18524
+ >>> thread = api.get_node_api_v2_cluster_dashboard_node_id_get_with_http_info(node_id, cluster_id, async_req=True)
18525
+ >>> result = thread.get()
18526
+
18527
+ :param async_req bool: execute request asynchronously
18528
+ :param str node_id: (required)
18529
+ :param str cluster_id: (required)
18530
+ :param str session_name: The name of the session to the node belongs to.
18531
+ :param _return_http_data_only: response data without head status code
18532
+ and headers
18533
+ :param _preload_content: if False, the urllib3.HTTPResponse object will
18534
+ be returned without reading/decoding response
18535
+ data. Default is True.
18536
+ :param _request_timeout: timeout setting for this request. If one
18537
+ number provided, it will be total request
18538
+ timeout. It can also be a pair (tuple) of
18539
+ (connection, read) timeouts.
18540
+ :return: tuple(ClusterdashboardnodeResponse, status_code(int), headers(HTTPHeaderDict))
18541
+ If the method is called asynchronously,
18542
+ returns the request thread.
18543
+ """
18544
+
18545
+ local_var_params = locals()
18546
+
18547
+ all_params = [
18548
+ 'node_id',
18549
+ 'cluster_id',
18550
+ 'session_name'
18551
+ ]
18552
+ all_params.extend(
18553
+ [
18554
+ 'async_req',
18555
+ '_return_http_data_only',
18556
+ '_preload_content',
18557
+ '_request_timeout'
18558
+ ]
18559
+ )
18560
+
18561
+ for key, val in six.iteritems(local_var_params['kwargs']):
18562
+ if key not in all_params:
18563
+ raise ApiTypeError(
18564
+ "Got an unexpected keyword argument '%s'"
18565
+ " to method get_node_api_v2_cluster_dashboard_node_id_get" % key
18566
+ )
18567
+ local_var_params[key] = val
18568
+ del local_var_params['kwargs']
18569
+ # verify the required parameter 'node_id' is set
18570
+ if self.api_client.client_side_validation and ('node_id' not in local_var_params or # noqa: E501
18571
+ local_var_params['node_id'] is None): # noqa: E501
18572
+ raise ApiValueError("Missing the required parameter `node_id` when calling `get_node_api_v2_cluster_dashboard_node_id_get`") # noqa: E501
18573
+ # verify the required parameter 'cluster_id' is set
18574
+ if self.api_client.client_side_validation and ('cluster_id' not in local_var_params or # noqa: E501
18575
+ local_var_params['cluster_id'] is None): # noqa: E501
18576
+ raise ApiValueError("Missing the required parameter `cluster_id` when calling `get_node_api_v2_cluster_dashboard_node_id_get`") # noqa: E501
18577
+
18578
+ collection_formats = {}
18579
+
18580
+ path_params = {}
18581
+ if 'node_id' in local_var_params:
18582
+ path_params['node_id'] = local_var_params['node_id'] # noqa: E501
18583
+
18584
+ query_params = []
18585
+ if 'cluster_id' in local_var_params and local_var_params['cluster_id'] is not None: # noqa: E501
18586
+ query_params.append(('cluster_id', local_var_params['cluster_id'])) # noqa: E501
18587
+ if 'session_name' in local_var_params and local_var_params['session_name'] is not None: # noqa: E501
18588
+ query_params.append(('session_name', local_var_params['session_name'])) # noqa: E501
18589
+
18590
+ header_params = {}
18591
+
18592
+ form_params = []
18593
+ local_var_files = {}
18594
+
18595
+ body_params = None
18596
+ # HTTP header `Accept`
18597
+ header_params['Accept'] = self.api_client.select_header_accept(
18598
+ ['application/json']) # noqa: E501
18599
+
18600
+ # Authentication setting
18601
+ auth_settings = [] # noqa: E501
18602
+
18603
+ return self.api_client.call_api(
18604
+ '/api/v2/cluster_dashboard/{node_id}', 'GET',
18605
+ path_params,
18606
+ query_params,
18607
+ header_params,
18608
+ body=body_params,
18609
+ post_params=form_params,
18610
+ files=local_var_files,
18611
+ response_type='ClusterdashboardnodeResponse', # noqa: E501
18612
+ auth_settings=auth_settings,
18613
+ async_req=local_var_params.get('async_req'),
18614
+ _return_http_data_only=local_var_params.get('_return_http_data_only'), # noqa: E501
18615
+ _preload_content=local_var_params.get('_preload_content', True),
18616
+ _request_timeout=local_var_params.get('_request_timeout'),
18617
+ collection_formats=collection_formats)
18618
+
18493
18619
  def get_nodes_api_v2_cluster_dashboard_get(self, cluster_id, **kwargs): # noqa: E501
18494
18620
  """Get Nodes # noqa: E501
18495
18621
 
@@ -135,6 +135,7 @@ from openapi_client.models.cluster_status import ClusterStatus
135
135
  from openapi_client.models.cluster_status_details import ClusterStatusDetails
136
136
  from openapi_client.models.clusterauthresponse_response import ClusterauthresponseResponse
137
137
  from openapi_client.models.clusterdashboardnode_list_response import ClusterdashboardnodeListResponse
138
+ from openapi_client.models.clusterdashboardnode_response import ClusterdashboardnodeResponse
138
139
  from openapi_client.models.clusterevent_list_response import ClustereventListResponse
139
140
  from openapi_client.models.clustereventsoutput_response import ClustereventsoutputResponse
140
141
  from openapi_client.models.clusteroperation_response import ClusteroperationResponse
@@ -0,0 +1,121 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Managed Ray API
5
+
6
+ No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator) # noqa: E501
7
+
8
+ The version of the OpenAPI document: 0.1.0
9
+ Generated by: https://openapi-generator.tech
10
+ """
11
+
12
+
13
+ import pprint
14
+ import re # noqa: F401
15
+
16
+ import six
17
+
18
+ from openapi_client.configuration import Configuration
19
+
20
+
21
+ class ClusterdashboardnodeResponse(object):
22
+ """NOTE: This class is auto generated by OpenAPI Generator.
23
+ Ref: https://openapi-generator.tech
24
+
25
+ Do not edit the class manually.
26
+ """
27
+
28
+ """
29
+ Attributes:
30
+ openapi_types (dict): The key is attribute name
31
+ and the value is attribute type.
32
+ attribute_map (dict): The key is attribute name
33
+ and the value is json key in definition.
34
+ """
35
+ openapi_types = {
36
+ 'result': 'ClusterDashboardNode'
37
+ }
38
+
39
+ attribute_map = {
40
+ 'result': 'result'
41
+ }
42
+
43
+ def __init__(self, result=None, local_vars_configuration=None): # noqa: E501
44
+ """ClusterdashboardnodeResponse - a model defined in OpenAPI""" # noqa: E501
45
+ if local_vars_configuration is None:
46
+ local_vars_configuration = Configuration()
47
+ self.local_vars_configuration = local_vars_configuration
48
+
49
+ self._result = None
50
+ self.discriminator = None
51
+
52
+ self.result = result
53
+
54
+ @property
55
+ def result(self):
56
+ """Gets the result of this ClusterdashboardnodeResponse. # noqa: E501
57
+
58
+
59
+ :return: The result of this ClusterdashboardnodeResponse. # noqa: E501
60
+ :rtype: ClusterDashboardNode
61
+ """
62
+ return self._result
63
+
64
+ @result.setter
65
+ def result(self, result):
66
+ """Sets the result of this ClusterdashboardnodeResponse.
67
+
68
+
69
+ :param result: The result of this ClusterdashboardnodeResponse. # noqa: E501
70
+ :type: ClusterDashboardNode
71
+ """
72
+ if self.local_vars_configuration.client_side_validation and result is None: # noqa: E501
73
+ raise ValueError("Invalid value for `result`, must not be `None`") # noqa: E501
74
+
75
+ self._result = result
76
+
77
+ def to_dict(self):
78
+ """Returns the model properties as a dict"""
79
+ result = {}
80
+
81
+ for attr, _ in six.iteritems(self.openapi_types):
82
+ value = getattr(self, attr)
83
+ if isinstance(value, list):
84
+ result[attr] = list(map(
85
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
86
+ value
87
+ ))
88
+ elif hasattr(value, "to_dict"):
89
+ result[attr] = value.to_dict()
90
+ elif isinstance(value, dict):
91
+ result[attr] = dict(map(
92
+ lambda item: (item[0], item[1].to_dict())
93
+ if hasattr(item[1], "to_dict") else item,
94
+ value.items()
95
+ ))
96
+ else:
97
+ result[attr] = value
98
+
99
+ return result
100
+
101
+ def to_str(self):
102
+ """Returns the string representation of the model"""
103
+ return pprint.pformat(self.to_dict())
104
+
105
+ def __repr__(self):
106
+ """For `print` and `pprint`"""
107
+ return self.to_str()
108
+
109
+ def __eq__(self, other):
110
+ """Returns true if both objects are equal"""
111
+ if not isinstance(other, ClusterdashboardnodeResponse):
112
+ return False
113
+
114
+ return self.to_dict() == other.to_dict()
115
+
116
+ def __ne__(self, other):
117
+ """Returns true if both objects are not equal"""
118
+ if not isinstance(other, ClusterdashboardnodeResponse):
119
+ return True
120
+
121
+ return self.to_dict() != other.to_dict()
@@ -41,10 +41,11 @@ class LineageGraphNode(object):
41
41
  'updated_at': 'datetime',
42
42
  'created_by': 'str',
43
43
  'updated_by': 'str',
44
- 'node_type': 'LineageNodeType',
44
+ 'workload_type': 'LineageWorkloadType',
45
+ 'anyscale_workload_id': 'str',
45
46
  'artifact_type': 'LineageArtifactType',
46
47
  'artifact_file_format': 'str',
47
- 'workload_type': 'LineageWorkloadType'
48
+ 'node_type': 'LineageNodeType'
48
49
  }
49
50
 
50
51
  attribute_map = {
@@ -56,13 +57,14 @@ class LineageGraphNode(object):
56
57
  'updated_at': 'updated_at',
57
58
  'created_by': 'created_by',
58
59
  'updated_by': 'updated_by',
59
- 'node_type': 'node_type',
60
+ 'workload_type': 'workload_type',
61
+ 'anyscale_workload_id': 'anyscale_workload_id',
60
62
  'artifact_type': 'artifact_type',
61
63
  'artifact_file_format': 'artifact_file_format',
62
- 'workload_type': 'workload_type'
64
+ 'node_type': 'node_type'
63
65
  }
64
66
 
65
- def __init__(self, id=None, name=None, namespace_name=None, uri=None, created_at=None, updated_at=None, created_by=None, updated_by=None, node_type=None, artifact_type=None, artifact_file_format=None, workload_type=None, local_vars_configuration=None): # noqa: E501
67
+ def __init__(self, id=None, name=None, namespace_name=None, uri=None, created_at=None, updated_at=None, created_by=None, updated_by=None, workload_type=None, anyscale_workload_id=None, artifact_type=None, artifact_file_format=None, node_type=None, local_vars_configuration=None): # noqa: E501
66
68
  """LineageGraphNode - a model defined in OpenAPI""" # noqa: E501
67
69
  if local_vars_configuration is None:
68
70
  local_vars_configuration = Configuration()
@@ -76,10 +78,11 @@ class LineageGraphNode(object):
76
78
  self._updated_at = None
77
79
  self._created_by = None
78
80
  self._updated_by = None
79
- self._node_type = None
81
+ self._workload_type = None
82
+ self._anyscale_workload_id = None
80
83
  self._artifact_type = None
81
84
  self._artifact_file_format = None
82
- self._workload_type = None
85
+ self._node_type = None
83
86
  self.discriminator = None
84
87
 
85
88
  self.id = id
@@ -90,13 +93,15 @@ class LineageGraphNode(object):
90
93
  self.updated_at = updated_at
91
94
  self.created_by = created_by
92
95
  self.updated_by = updated_by
93
- self.node_type = node_type
96
+ if workload_type is not None:
97
+ self.workload_type = workload_type
98
+ if anyscale_workload_id is not None:
99
+ self.anyscale_workload_id = anyscale_workload_id
94
100
  if artifact_type is not None:
95
101
  self.artifact_type = artifact_type
96
102
  if artifact_file_format is not None:
97
103
  self.artifact_file_format = artifact_file_format
98
- if workload_type is not None:
99
- self.workload_type = workload_type
104
+ self.node_type = node_type
100
105
 
101
106
  @property
102
107
  def id(self):
@@ -299,35 +304,56 @@ class LineageGraphNode(object):
299
304
  self._updated_by = updated_by
300
305
 
301
306
  @property
302
- def node_type(self):
303
- """Gets the node_type of this LineageGraphNode. # noqa: E501
307
+ def workload_type(self):
308
+ """Gets the workload_type of this LineageGraphNode. # noqa: E501
304
309
 
305
- Type of node (ARTIFACT/WORKLOAD) # noqa: E501
310
+ Type of workload (WORKSPACE/SERVICE/JOB) # noqa: E501
306
311
 
307
- :return: The node_type of this LineageGraphNode. # noqa: E501
308
- :rtype: LineageNodeType
312
+ :return: The workload_type of this LineageGraphNode. # noqa: E501
313
+ :rtype: LineageWorkloadType
309
314
  """
310
- return self._node_type
315
+ return self._workload_type
311
316
 
312
- @node_type.setter
313
- def node_type(self, node_type):
314
- """Sets the node_type of this LineageGraphNode.
317
+ @workload_type.setter
318
+ def workload_type(self, workload_type):
319
+ """Sets the workload_type of this LineageGraphNode.
315
320
 
316
- Type of node (ARTIFACT/WORKLOAD) # noqa: E501
321
+ Type of workload (WORKSPACE/SERVICE/JOB) # noqa: E501
317
322
 
318
- :param node_type: The node_type of this LineageGraphNode. # noqa: E501
319
- :type: LineageNodeType
323
+ :param workload_type: The workload_type of this LineageGraphNode. # noqa: E501
324
+ :type: LineageWorkloadType
320
325
  """
321
- if self.local_vars_configuration.client_side_validation and node_type is None: # noqa: E501
322
- raise ValueError("Invalid value for `node_type`, must not be `None`") # noqa: E501
323
326
 
324
- self._node_type = node_type
327
+ self._workload_type = workload_type
328
+
329
+ @property
330
+ def anyscale_workload_id(self):
331
+ """Gets the anyscale_workload_id of this LineageGraphNode. # noqa: E501
332
+
333
+ Anyscale workload ID # noqa: E501
334
+
335
+ :return: The anyscale_workload_id of this LineageGraphNode. # noqa: E501
336
+ :rtype: str
337
+ """
338
+ return self._anyscale_workload_id
339
+
340
+ @anyscale_workload_id.setter
341
+ def anyscale_workload_id(self, anyscale_workload_id):
342
+ """Sets the anyscale_workload_id of this LineageGraphNode.
343
+
344
+ Anyscale workload ID # noqa: E501
345
+
346
+ :param anyscale_workload_id: The anyscale_workload_id of this LineageGraphNode. # noqa: E501
347
+ :type: str
348
+ """
349
+
350
+ self._anyscale_workload_id = anyscale_workload_id
325
351
 
326
352
  @property
327
353
  def artifact_type(self):
328
354
  """Gets the artifact_type of this LineageGraphNode. # noqa: E501
329
355
 
330
- Type of artifact if node_type is ARTIFACT # noqa: E501
356
+ Type of artifact (DATASET/MODEL) # noqa: E501
331
357
 
332
358
  :return: The artifact_type of this LineageGraphNode. # noqa: E501
333
359
  :rtype: LineageArtifactType
@@ -338,7 +364,7 @@ class LineageGraphNode(object):
338
364
  def artifact_type(self, artifact_type):
339
365
  """Sets the artifact_type of this LineageGraphNode.
340
366
 
341
- Type of artifact if node_type is ARTIFACT # noqa: E501
367
+ Type of artifact (DATASET/MODEL) # noqa: E501
342
368
 
343
369
  :param artifact_type: The artifact_type of this LineageGraphNode. # noqa: E501
344
370
  :type: LineageArtifactType
@@ -350,7 +376,7 @@ class LineageGraphNode(object):
350
376
  def artifact_file_format(self):
351
377
  """Gets the artifact_file_format of this LineageGraphNode. # noqa: E501
352
378
 
353
- File format if artifact # noqa: E501
379
+ File format (e.g., parquet, csv) # noqa: E501
354
380
 
355
381
  :return: The artifact_file_format of this LineageGraphNode. # noqa: E501
356
382
  :rtype: str
@@ -361,7 +387,7 @@ class LineageGraphNode(object):
361
387
  def artifact_file_format(self, artifact_file_format):
362
388
  """Sets the artifact_file_format of this LineageGraphNode.
363
389
 
364
- File format if artifact # noqa: E501
390
+ File format (e.g., parquet, csv) # noqa: E501
365
391
 
366
392
  :param artifact_file_format: The artifact_file_format of this LineageGraphNode. # noqa: E501
367
393
  :type: str
@@ -370,27 +396,29 @@ class LineageGraphNode(object):
370
396
  self._artifact_file_format = artifact_file_format
371
397
 
372
398
  @property
373
- def workload_type(self):
374
- """Gets the workload_type of this LineageGraphNode. # noqa: E501
399
+ def node_type(self):
400
+ """Gets the node_type of this LineageGraphNode. # noqa: E501
375
401
 
376
- Type of workload if node_type is WORKLOAD # noqa: E501
402
+ Type of node (ARTIFACT/WORKLOAD) # noqa: E501
377
403
 
378
- :return: The workload_type of this LineageGraphNode. # noqa: E501
379
- :rtype: LineageWorkloadType
404
+ :return: The node_type of this LineageGraphNode. # noqa: E501
405
+ :rtype: LineageNodeType
380
406
  """
381
- return self._workload_type
407
+ return self._node_type
382
408
 
383
- @workload_type.setter
384
- def workload_type(self, workload_type):
385
- """Sets the workload_type of this LineageGraphNode.
409
+ @node_type.setter
410
+ def node_type(self, node_type):
411
+ """Sets the node_type of this LineageGraphNode.
386
412
 
387
- Type of workload if node_type is WORKLOAD # noqa: E501
413
+ Type of node (ARTIFACT/WORKLOAD) # noqa: E501
388
414
 
389
- :param workload_type: The workload_type of this LineageGraphNode. # noqa: E501
390
- :type: LineageWorkloadType
415
+ :param node_type: The node_type of this LineageGraphNode. # noqa: E501
416
+ :type: LineageNodeType
391
417
  """
418
+ if self.local_vars_configuration.client_side_validation and node_type is None: # noqa: E501
419
+ raise ValueError("Invalid value for `node_type`, must not be `None`") # noqa: E501
392
420
 
393
- self._workload_type = workload_type
421
+ self._node_type = node_type
394
422
 
395
423
  def to_dict(self):
396
424
  """Returns the model properties as a dict"""
@@ -41,7 +41,8 @@ class LineageWorkload(object):
41
41
  'updated_at': 'datetime',
42
42
  'created_by': 'str',
43
43
  'updated_by': 'str',
44
- 'workload_type': 'LineageWorkloadType'
44
+ 'workload_type': 'LineageWorkloadType',
45
+ 'anyscale_workload_id': 'str'
45
46
  }
46
47
 
47
48
  attribute_map = {
@@ -53,10 +54,11 @@ class LineageWorkload(object):
53
54
  'updated_at': 'updated_at',
54
55
  'created_by': 'created_by',
55
56
  'updated_by': 'updated_by',
56
- 'workload_type': 'workload_type'
57
+ 'workload_type': 'workload_type',
58
+ 'anyscale_workload_id': 'anyscale_workload_id'
57
59
  }
58
60
 
59
- def __init__(self, id=None, name=None, namespace_name=None, uri=None, created_at=None, updated_at=None, created_by=None, updated_by=None, workload_type=None, local_vars_configuration=None): # noqa: E501
61
+ def __init__(self, id=None, name=None, namespace_name=None, uri=None, created_at=None, updated_at=None, created_by=None, updated_by=None, workload_type=None, anyscale_workload_id=None, local_vars_configuration=None): # noqa: E501
60
62
  """LineageWorkload - a model defined in OpenAPI""" # noqa: E501
61
63
  if local_vars_configuration is None:
62
64
  local_vars_configuration = Configuration()
@@ -71,6 +73,7 @@ class LineageWorkload(object):
71
73
  self._created_by = None
72
74
  self._updated_by = None
73
75
  self._workload_type = None
76
+ self._anyscale_workload_id = None
74
77
  self.discriminator = None
75
78
 
76
79
  self.id = id
@@ -82,6 +85,8 @@ class LineageWorkload(object):
82
85
  self.created_by = created_by
83
86
  self.updated_by = updated_by
84
87
  self.workload_type = workload_type
88
+ if anyscale_workload_id is not None:
89
+ self.anyscale_workload_id = anyscale_workload_id
85
90
 
86
91
  @property
87
92
  def id(self):
@@ -308,6 +313,29 @@ class LineageWorkload(object):
308
313
 
309
314
  self._workload_type = workload_type
310
315
 
316
+ @property
317
+ def anyscale_workload_id(self):
318
+ """Gets the anyscale_workload_id of this LineageWorkload. # noqa: E501
319
+
320
+ Anyscale workload ID # noqa: E501
321
+
322
+ :return: The anyscale_workload_id of this LineageWorkload. # noqa: E501
323
+ :rtype: str
324
+ """
325
+ return self._anyscale_workload_id
326
+
327
+ @anyscale_workload_id.setter
328
+ def anyscale_workload_id(self, anyscale_workload_id):
329
+ """Sets the anyscale_workload_id of this LineageWorkload.
330
+
331
+ Anyscale workload ID # noqa: E501
332
+
333
+ :param anyscale_workload_id: The anyscale_workload_id of this LineageWorkload. # noqa: E501
334
+ :type: str
335
+ """
336
+
337
+ self._anyscale_workload_id = anyscale_workload_id
338
+
311
339
  def to_dict(self):
312
340
  """Returns the model properties as a dict"""
313
341
  result = {}
@@ -137,14 +137,11 @@ def default_region(provider: str) -> str:
137
137
  show_default=True,
138
138
  )
139
139
  @click.option(
140
- "--cluster-name",
141
- help="Kubernetes cluster name (required for k8s stack).",
142
- required=False,
143
- type=str,
140
+ "--cluster-name", help="Kubernetes cluster name. (K8s)", required=False, type=str,
144
141
  )
145
142
  @click.option(
146
143
  "--namespace",
147
- help="Kubernetes namespace for Anyscale operator (for k8s stack).",
144
+ help="Kubernetes namespace for Anyscale operator. (K8s)",
148
145
  required=False,
149
146
  type=str,
150
147
  default="anyscale-operator",
@@ -166,13 +163,13 @@ def default_region(provider: str) -> str:
166
163
  "--anyscale-managed",
167
164
  is_flag=True,
168
165
  default=False,
169
- help="Let anyscale create all the resources.",
166
+ help="Let anyscale create all the resources. (VM)",
170
167
  )
171
168
  @click.option(
172
169
  "--enable-head-node-fault-tolerance",
173
170
  is_flag=True,
174
171
  default=False,
175
- help="Whether to enable head node fault tolerance for services.",
172
+ help="Whether to enable head node fault tolerance for services. (VM)",
176
173
  )
177
174
  @click.option(
178
175
  "--yes", "-y", is_flag=True, default=False, help="Skip asking for confirmation."
@@ -193,17 +190,24 @@ def default_region(provider: str) -> str:
193
190
  type=click.Choice([e.value for e in SharedStorageType], case_sensitive=False),
194
191
  default=SharedStorageType.OBJECT_STORAGE.value,
195
192
  show_default=True,
196
- help="The type of shared storage to use for the cloud. Use 'object-storage' for cloud bucket-based storage (e.g., S3, GCS), or 'nfs' for network file systems.",
193
+ help="The type of shared storage to use for the cloud. Use 'object-storage' for cloud bucket-based storage (e.g., S3, GCS), or 'nfs' for network file systems. (VM)",
197
194
  )
198
195
  @click.option(
199
196
  "--values-file",
200
- help="Path to save the generated Helm values file (for k8s stack, default: auto-generated with timestamp).",
197
+ help="Path to save the generated Helm values file (for k8s stack, default: auto-generated with timestamp). (K8s)",
201
198
  required=False,
202
199
  type=str,
203
200
  )
204
201
  @click.option(
205
202
  "--debug", is_flag=True, default=False, help="Enable debug logging.",
206
203
  )
204
+ @click.option(
205
+ "--operator-chart",
206
+ help="Path to operator chart (skips helm repo add/update). (K8s)",
207
+ required=False,
208
+ type=str,
209
+ hidden=True,
210
+ )
207
211
  def setup_cloud( # noqa: PLR0913
208
212
  provider: str,
209
213
  region: str,
@@ -220,6 +224,7 @@ def setup_cloud( # noqa: PLR0913
220
224
  shared_storage: str,
221
225
  values_file: Optional[str],
222
226
  debug: bool,
227
+ operator_chart: Optional[str],
223
228
  ) -> None:
224
229
  # TODO (congding): remove `anyscale_managed` in the future, now keeping it for compatibility
225
230
 
@@ -241,6 +246,7 @@ def setup_cloud( # noqa: PLR0913
241
246
  yes=yes,
242
247
  values_file=values_file,
243
248
  debug=debug,
249
+ operator_chart=operator_chart,
244
250
  )
245
251
  return
246
252
 
@@ -538,6 +538,59 @@ $ anyscale project get-default --cloud my-cloud-id --json
538
538
  """
539
539
 
540
540
 
541
+ CLOUD_SETUP_K8S_AWS_EXAMPLE = """\
542
+ # Set up a Kubernetes cloud on AWS EKS
543
+ $ anyscale cloud setup --provider aws --region us-west-2 --name my-k8s-cloud \\
544
+ --stack k8s --cluster-name my-eks-cluster --namespace anyscale-operator \\
545
+ --debug --yes
546
+ Output
547
+ (anyscale +1.0s) Setting up Kubernetes cloud 'my-k8s-cloud' on AWS
548
+ (anyscale +1.5s) Required CLI tools are installed (kubectl, helm, aws)
549
+ (anyscale +2.3s) Using namespace: anyscale-operator
550
+ (anyscale +5.2s) Cluster discovered: arn:aws:eks:us-west-2:123456789012:cluster/my-eks-cluster
551
+ (anyscale +8.4s) Setting up AWS infrastructure...
552
+ (anyscale +1m12.3s) CloudFormation stack created
553
+ (anyscale +1m15.7s) Cloud registered with ID: cld_abc123
554
+ (anyscale +1m18.2s) Adding Anyscale Helm repository...
555
+ (anyscale +1m20.5s) Installing Anyscale operator...
556
+ (anyscale +1m25.8s) Generated Helm values file: anyscale-helm-values-aws-anyscale-operator-20241015_175602.yaml
557
+ (anyscale +2m45.3s) Helm installation completed successfully
558
+ (anyscale +2m45.4s) Kubernetes cloud 'my-k8s-cloud' setup completed successfully!
559
+ """
560
+
561
+ CLOUD_SETUP_K8S_GCP_EXAMPLE = """\
562
+ # Set up a Kubernetes cloud on GCP GKE
563
+ $ anyscale cloud setup --provider gcp --region us-central1 --name my-gke-cloud \\
564
+ --stack k8s --cluster-name my-gke-cluster --namespace anyscale-operator \\
565
+ --project-id my-project-123 --yes
566
+ Output
567
+ (anyscale +1.0s) Setting up Kubernetes cloud 'my-gke-cloud' on GCP
568
+ (anyscale +1.5s) Required CLI tools are installed (kubectl, helm, gcloud, gsutil)
569
+ (anyscale +2.3s) Using namespace: anyscale-operator
570
+ (anyscale +5.8s) Cluster discovered: gke_my-project-123_us-central1_my-gke-cluster
571
+ (anyscale +9.2s) Setting up GCP infrastructure...
572
+ (anyscale +15.4s) Created GCS bucket: anyscale-k8s-my-gke-cloud-a1b2c3d4
573
+ (anyscale +18.7s) Created service account: anyscale-operator-e5f6g7h8@my-project-123.iam.gserviceaccount.com
574
+ (anyscale +25.3s) GCP resources created successfully
575
+ (anyscale +28.1s) Cloud registered with ID: cld_xyz789
576
+ (anyscale +30.5s) Installing Anyscale operator...
577
+ (anyscale +35.8s) Generated Helm values file: anyscale-helm-values-gcp-anyscale-operator-20241015_180215.yaml
578
+ (anyscale +1m55.2s) Helm installation completed successfully
579
+ (anyscale +1m55.3s) Kubernetes cloud 'my-gke-cloud' setup completed successfully!
580
+ """
581
+
582
+ CLOUD_SETUP_K8S_CUSTOM_VALUES_EXAMPLE = """\
583
+ # Set up a Kubernetes cloud with a custom Helm values file path
584
+ $ anyscale cloud setup --provider aws --region us-west-2 --name my-k8s-cloud \\
585
+ --stack k8s --cluster-name my-eks-cluster \\
586
+ --values-file /path/to/custom-values.yaml --yes
587
+ Output
588
+ (anyscale +1.0s) Setting up Kubernetes cloud 'my-k8s-cloud' on AWS
589
+ ...
590
+ (anyscale +1m25.8s) Generated Helm values file: /path/to/custom-values.yaml
591
+ ...
592
+ """
593
+
541
594
  CLOUD_ADD_COLLABORATORS_EXAMPLE = """\
542
595
  $ anyscale cloud add-collaborators --cloud cloud_name --users-file collaborators.yaml
543
596
  (anyscale +1.3s) Successfully added 2 collaborators to cloud cloud_name.
@@ -75,6 +75,7 @@ class KubernetesCloudSetupCommand:
75
75
  functional_verify: bool,
76
76
  yes: bool,
77
77
  values_file: Optional[str] = None,
78
+ operator_chart: Optional[str] = None,
78
79
  ) -> None:
79
80
  """
80
81
  Main entry point for Kubernetes cloud setup.
@@ -89,6 +90,7 @@ class KubernetesCloudSetupCommand:
89
90
  functional_verify: Whether to run functional verification
90
91
  yes: Skip confirmation prompts
91
92
  values_file: Optional custom path for Helm values file
93
+ operator_chart: Optional path to operator chart (skips helm repo add/update)
92
94
  """
93
95
  self.log.open_block(
94
96
  "Setup", f"Setting up Kubernetes cloud '{name}' on {provider.upper()}"
@@ -130,6 +132,7 @@ class KubernetesCloudSetupCommand:
130
132
  final_namespace,
131
133
  infrastructure,
132
134
  values_file,
135
+ operator_chart,
133
136
  )
134
137
 
135
138
  # Step 6: Verify installation
@@ -1165,6 +1168,7 @@ class KubernetesCloudSetupCommand:
1165
1168
  namespace: str,
1166
1169
  infrastructure: InfrastructureResources,
1167
1170
  values_file: Optional[str] = None,
1171
+ operator_chart: Optional[str] = None,
1168
1172
  ) -> None:
1169
1173
  """Install the Anyscale operator using Helm."""
1170
1174
  self.log.info("Installing Anyscale operator...", block_label="Setup")
@@ -1201,14 +1205,21 @@ class KubernetesCloudSetupCommand:
1201
1205
  additional_values=set_string_values,
1202
1206
  )
1203
1207
 
1204
- # Add Helm repo before installing
1205
- self._debug("Adding Anyscale Helm repository...")
1206
- self._add_helm_repo()
1208
+ # Determine chart reference based on operator_chart parameter
1209
+ if operator_chart:
1210
+ # Use the provided chart path directly
1211
+ self._debug(f"Using operator chart from: {operator_chart}")
1212
+ chart_reference = operator_chart
1213
+ else:
1214
+ # Add Helm repo before installing
1215
+ self._debug("Adding Anyscale Helm repository...")
1216
+ self._add_helm_repo()
1217
+ chart_reference = "anyscale/anyscale-operator"
1207
1218
 
1208
1219
  # Build a simple Helm command that only uses the values file
1209
1220
  self._debug("Generating Helm command...")
1210
1221
  helm_command = (
1211
- f"helm upgrade {release_name} anyscale/anyscale-operator "
1222
+ f"helm upgrade {release_name} {chart_reference} "
1212
1223
  f"--values {values_file_path} "
1213
1224
  f"--namespace {namespace} "
1214
1225
  f"--create-namespace "
@@ -1276,6 +1287,35 @@ class KubernetesCloudSetupCommand:
1276
1287
 
1277
1288
  return set_string_values
1278
1289
 
1290
+ def _set_nested_value(self, d: Dict[str, Any], key_path: str, value: Any) -> None:
1291
+ """
1292
+ Set a value in a nested dictionary using a dotted key path.
1293
+
1294
+ Args:
1295
+ d: The dictionary to modify
1296
+ key_path: Dotted key path (e.g., "workloads.serviceaccount.name")
1297
+ value: The value to set
1298
+
1299
+ Example:
1300
+ _set_nested_value({}, "workloads.serviceaccount.name", "my-sa")
1301
+ # Results in: {"workloads": {"serviceaccount": {"name": "my-sa"}}}
1302
+ """
1303
+ keys = key_path.split(".")
1304
+ current = d
1305
+
1306
+ # Navigate/create the nested structure
1307
+ for key in keys[:-1]:
1308
+ if key not in current:
1309
+ current[key] = {}
1310
+ elif not isinstance(current[key], dict):
1311
+ # If the key exists but isn't a dict, we have a conflict
1312
+ # In this case, we'll overwrite it with a dict
1313
+ current[key] = {}
1314
+ current = current[key]
1315
+
1316
+ # Set the final value
1317
+ current[keys[-1]] = value
1318
+
1279
1319
  def _prompt_for_namespace(
1280
1320
  self, default_namespace: str, skip_confirmation: bool = False
1281
1321
  ) -> str:
@@ -1287,10 +1327,12 @@ class KubernetesCloudSetupCommand:
1287
1327
  return final_namespace
1288
1328
 
1289
1329
  self.log.info("Configuring Kubernetes namespace...")
1290
-
1291
1330
  self.log.info(
1292
- f"Enter the namespace to use for the Anyscale operator (default: {final_namespace}):"
1331
+ f"Specify the namespace to use for the Anyscale operator (leave blank for default: {final_namespace})."
1293
1332
  )
1333
+ self.log.info("If the namespace does not exist, it will be created.")
1334
+ self.log.info("Enter your namespace:")
1335
+
1294
1336
  final_namespace = click.prompt("", default=final_namespace, show_default=True)
1295
1337
 
1296
1338
  # Validate namespace (Kubernetes DNS-1123 label requirements)
@@ -1323,25 +1365,31 @@ class KubernetesCloudSetupCommand:
1323
1365
  """Generate Helm values file and save it locally."""
1324
1366
  self.log.info("Generating Helm values file...")
1325
1367
 
1326
- # Create values dictionary starting with base values
1327
- values: Dict[str, Any] = {
1328
- "global": {
1329
- "cloudDeploymentId": cloud_deployment_id,
1330
- "cloudProvider": provider,
1331
- "region": region,
1332
- "auth": {"iamIdentity": infrastructure.iam_role_arn,},
1333
- },
1334
- "ingress-nginx": {"enabled": True},
1335
- }
1368
+ # Start with an empty dictionary to build up values
1369
+ values: Dict[str, Any] = {}
1336
1370
 
1371
+ # First, parse and merge additional_values with nested keys
1337
1372
  if additional_values:
1338
1373
  for key, value in additional_values.items():
1339
- if key not in values:
1340
- values[key] = value
1374
+ self._set_nested_value(values, key, value)
1375
+
1376
+ # Now overlay our constants on top (these take precedence)
1377
+ # Use _set_nested_value to ensure proper nesting
1378
+ self._set_nested_value(values, "global.cloudDeploymentId", cloud_deployment_id)
1379
+ self._set_nested_value(values, "global.cloudProvider", provider)
1380
+ self._set_nested_value(
1381
+ values, "global.auth.iamIdentity", infrastructure.iam_role_arn
1382
+ )
1383
+ self._set_nested_value(values, "ingress-nginx.enabled", True)
1384
+
1385
+ # Add region for AWS only (using global.aws.region)
1386
+ # Region field is deprecated for other providers
1387
+ if provider == "aws":
1388
+ self._set_nested_value(values, "global.aws.region", region)
1341
1389
 
1342
1390
  # Add control plane URL from ANYSCALE_HOST environment variable
1343
1391
  if ANYSCALE_HOST:
1344
- values["controlPlaneURL"] = ANYSCALE_HOST
1392
+ self._set_nested_value(values, "global.controlPlaneURL", ANYSCALE_HOST)
1345
1393
  self.log.info(f"Using control plane URL: {ANYSCALE_HOST}")
1346
1394
 
1347
1395
  if custom_path:
@@ -1429,6 +1477,7 @@ def setup_kubernetes_cloud( # noqa: PLR0913
1429
1477
  yes: bool = False,
1430
1478
  values_file: Optional[str] = None,
1431
1479
  debug: bool = False,
1480
+ operator_chart: Optional[str] = None,
1432
1481
  ) -> None:
1433
1482
  """
1434
1483
  Set up Anyscale on a Kubernetes cluster.
@@ -1447,6 +1496,7 @@ def setup_kubernetes_cloud( # noqa: PLR0913
1447
1496
  yes: Skip confirmation prompts
1448
1497
  values_file: Optional path for Helm values file
1449
1498
  debug: Enable debug logging
1499
+ operator_chart: Optional path to operator chart (skips helm repo add/update)
1450
1500
  """
1451
1501
  cmd = KubernetesCloudSetupCommand(debug=debug)
1452
1502
 
@@ -1461,6 +1511,7 @@ def setup_kubernetes_cloud( # noqa: PLR0913
1461
1511
  functional_verify=functional_verify,
1462
1512
  yes=yes,
1463
1513
  values_file=values_file,
1514
+ operator_chart=operator_chart,
1464
1515
  )
1465
1516
  except Exception as e: # noqa: BLE001
1466
1517
  click.echo(f"Setup failed: {e}", err=True)
@@ -4197,9 +4197,10 @@ class CloudController(BaseController):
4197
4197
  f" --set-string global.cloudProvider={provider}",
4198
4198
  ]
4199
4199
 
4200
- # Add region for most providers (not for generic)
4201
- if region and provider != "generic":
4202
- command_parts.append(f" --set-string global.region={region}")
4200
+ # Add region only for AWS (using global.aws.region)
4201
+ # Region field is deprecated for other providers
4202
+ if region and provider == "aws":
4203
+ command_parts.append(f" --set-string global.aws.region={region}")
4203
4204
 
4204
4205
  # Add provider-specific parameters
4205
4206
  if provider == "gcp" and operator_iam_identity:
anyscale/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.26.68"
1
+ __version__ = "0.26.69"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: anyscale
3
- Version: 0.26.68
3
+ Version: 0.26.69
4
4
  Summary: Command Line Interface for Anyscale
5
5
  Author: Anyscale Inc.
6
6
  License: AS License
@@ -28,7 +28,7 @@ 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=lpQs-Szxlm150B9mnwXj1al8clhb5Zo-ZL5AiFSuzk8,24
31
+ anyscale/version.py,sha256=8l-HVlfTILDzHo06U3dRLRAa9a7jz3Fn-EMAVFoKZlI,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
@@ -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=yVThjY7_FVCDVT5NRRJ-05L9BheiL0Kr01CVnSie_6I,131991
109
+ anyscale/client/README.md,sha256=8kvEOItPcb2zSd8QQSyM8N4ojn4ZFPAMO2p3veTtl50,132253
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
@@ -114,14 +114,14 @@ anyscale/client/setup.py,sha256=tSxqw1kAL1B9adnrnOarjnQfSbwGmnTr_kg8ZXhlm5A,1109
114
114
  anyscale/client/test-requirements.txt,sha256=sTjmDTj5W9fh1ZAeo8UT2EBdeGDBNttj_PHiPBXg1D4,111
115
115
  anyscale/client/tox.ini,sha256=M6L3UmvAdvU65LsoAF-Oi7oRjwZlCJZn8I7ofdXn5Ok,156
116
116
  anyscale/client/.openapi-generator/VERSION,sha256=J0RzX-4u4jfin1kviKtmncjUePyjHm2kyvmkobOrt_E,5
117
- anyscale/client/openapi_client/__init__.py,sha256=mOXEUcUD_s5VokuYaTXHOhFQKSvsFWVZ7kxmmJp5SMo,59881
117
+ anyscale/client/openapi_client/__init__.py,sha256=jolh0VOen_4BrBV_GUvVTgyzUqM6PUWvLXCprQQ7BrY,59974
118
118
  anyscale/client/openapi_client/api_client.py,sha256=d8Un6j2Ny2vlS2qBXPVFj6_ql0k36DFahpWt_28TfCk,25563
119
119
  anyscale/client/openapi_client/configuration.py,sha256=Dd5XrlHwv-wxnf0C35PG_-HBQoY3Yaz6hKrmkZz-m0E,12363
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=JGRjn6bzNkl2ysAD-cNlfloEioWDI3KXzZdROJjUU_U,2151488
124
- anyscale/client/openapi_client/models/__init__.py,sha256=M51ftYXV7OZ-7DiL_hWnQXKH18zDvIjwYA4vgB0YFx4,59391
123
+ anyscale/client/openapi_client/api/default_api.py,sha256=cT2oGICbOppuDOHso9iNBBXEWJS4GO6BsplKrLgRc4E,2157781
124
+ anyscale/client/openapi_client/models/__init__.py,sha256=YhAEQIPW4Bl10Oijs9DWzoXHe-Vg3SHWwIfIFn0RfnI,59484
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
127
127
  anyscale/client/openapi_client/models/admin_create_user.py,sha256=9DPr8D0lKgoEZ3Z2kGsAd8L7ocFCiP6woOGLVs8SRb8,7251
@@ -243,6 +243,7 @@ anyscale/client/openapi_client/models/cluster_status.py,sha256=9bvifs50nFxxfufad
243
243
  anyscale/client/openapi_client/models/cluster_status_details.py,sha256=Sj086_AZaPrRE_4ANgO7utZ084U-dSzFBGIXN64h2j0,2999
244
244
  anyscale/client/openapi_client/models/clusterauthresponse_response.py,sha256=rwq8UV5AKtjFkrWg0_k94EggUQ2OrSFkm36tIFK7YEk,3627
245
245
  anyscale/client/openapi_client/models/clusterdashboardnode_list_response.py,sha256=mXRbpQeGCGKpXxlV_InrlUmwjo2e6_2umtLa50s0wjM,4497
246
+ anyscale/client/openapi_client/models/clusterdashboardnode_response.py,sha256=sayAz6snjMiWnXxwyvGZ509OE2Hc1y0v5HNKlVzUk6I,3638
246
247
  anyscale/client/openapi_client/models/clusterevent_list_response.py,sha256=mtfYHoHjpzqg_VOyIn6XvcW71pfBPlfrxjVP6wxHsX4,4377
247
248
  anyscale/client/openapi_client/models/clustereventsoutput_response.py,sha256=vFPLzXf_sRs8LAg16Ht6Oel18w6FISg7MLFi4YlTvHs,3627
248
249
  anyscale/client/openapi_client/models/clusteroperation_response.py,sha256=g0tNqDigTKkzGSmhrDyhQYcUE0JQMCJTzk44INGhoV4,3594
@@ -486,9 +487,9 @@ anyscale/client/openapi_client/models/lineage_artifact_sort_field.py,sha256=pOic
486
487
  anyscale/client/openapi_client/models/lineage_artifact_type.py,sha256=rZV5nndrPi0P75fpsg6ZnGRDUxwk0OFWNef22840Kl0,2854
487
488
  anyscale/client/openapi_client/models/lineage_direction.py,sha256=tvIjSwnt4MSxuczUBI_KlI7gHiMCB76skHSdx_N8oIc,2848
488
489
  anyscale/client/openapi_client/models/lineage_graph.py,sha256=yn34T-j0-PWdvIMCTemoOLyGZ5UQgu2HYnimmODd_Ys,5216
489
- anyscale/client/openapi_client/models/lineage_graph_node.py,sha256=KWGpK42UCjEhe7bhR79CIJmuZdRL3NP4pwC0ig7Fs6E,13946
490
+ anyscale/client/openapi_client/models/lineage_graph_node.py,sha256=vDKxQJGkGzPGBbD6bWbri8m-NMk6ALHU0kN38xwq9kg,14943
490
491
  anyscale/client/openapi_client/models/lineage_node_type.py,sha256=bi8gje1x01FtL0l1PzN76aQbBCeOkLWk_e2YXd3jdwY,2850
491
- anyscale/client/openapi_client/models/lineage_workload.py,sha256=F_iwZlFliVRPROmTwQZ_kwrzJ4kevnXfTY6q40ro3dk,11115
492
+ anyscale/client/openapi_client/models/lineage_workload.py,sha256=8h5-gsqDh5w2ZYuqv6I27lSCtE7phKVJhNJH0vlMECY,12110
492
493
  anyscale/client/openapi_client/models/lineage_workload_sort_field.py,sha256=u5seM0kQtRVrEAhbQ38MlMvGYbIBTwUB52Yc7pyr7n0,2922
493
494
  anyscale/client/openapi_client/models/lineage_workload_type.py,sha256=kjZlfsIo6rRarGpnahuZEX1zM-qyqe3drQb1QO3xkZI,2914
494
495
  anyscale/client/openapi_client/models/lineageartifact_list_response.py,sha256=t4QnqXbEkoADCzpm4q23EP9VPQueTLWKmDUJ6msKZZE,4422
@@ -849,10 +850,10 @@ anyscale/cloud/_private/cloud_sdk.py,sha256=5TBGyGSjMI4jLOnSle1WWC6za0psP9xgTGWU
849
850
  anyscale/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
850
851
  anyscale/commands/aggregated_instance_usage_commands.py,sha256=TRP1X3hdIWbKg9V20VtazlDXsYAeV--M0DH3-Z5tnj4,2293
851
852
  anyscale/commands/auth_commands.py,sha256=X1g6Yu9kqgPb4HLODlZTYEk8G5AVLeyizPIgagWx-p0,1026
852
- anyscale/commands/cloud_commands.py,sha256=NdB4O_Nee-ute0lXWs7xIotdoVuoyHUvBbYXueODFGk,60185
853
+ anyscale/commands/cloud_commands.py,sha256=rchYt9HmzDMBAAOZ3KS1s8hpcHNwcK1frzSttQJPkPE,60406
853
854
  anyscale/commands/cluster_commands.py,sha256=taNcffyFfqJ1MgOQd0cz9kzRXWFTdp-wfLPM4l_2tBc,13487
854
855
  anyscale/commands/cluster_env_commands.py,sha256=KNWylyE8Ew1sDi7yu2Tp4RLcRu2_KJJJIzVGRyPflJo,3899
855
- anyscale/commands/command_examples.py,sha256=pSj1DyHwlzmSxw-Ko5RUTQ57uFA7v7Jgur0s7K55bts,25182
856
+ anyscale/commands/command_examples.py,sha256=Py9DxWNZysdt8fgSnVgSRrqMlMHkXwnOZDTSTk9pCSY,27913
856
857
  anyscale/commands/compute_config_commands.py,sha256=e_k4SOIa0MoFq51nzu4dNFk5SGlrJPCbPyq_sWBVnHg,7899
857
858
  anyscale/commands/config_commands.py,sha256=p55uM6WrhfbFoRXC9hNAV-8c5ANghw7tBUYwaQDAtjE,7195
858
859
  anyscale/commands/exec_commands.py,sha256=PjgHQpVXFQX2jhX_04fnPOu8knJWzvvZNv9khqG9gZs,957
@@ -874,7 +875,7 @@ anyscale/commands/schedule_commands.py,sha256=Bw2aKp_w6xcuRSVVi9FLdUjRVCr8_v4Tt2
874
875
  anyscale/commands/service_account_commands.py,sha256=JlppTmcaDofJn7TYqd3PW4hDGykdEN56fr0PT3qgBIg,3271
875
876
  anyscale/commands/service_commands.py,sha256=DBrPkW7JH3kCsr038aQStm7AF1u-n80sLjwc2Hjifks,34014
876
877
  anyscale/commands/session_commands_hidden.py,sha256=APEypnUB1yV2Rr6wdSFWy1vQbAnn-lOn0rU2enF5JdM,6200
877
- anyscale/commands/setup_k8s.py,sha256=MGiCtRrkMEDcQa0C7Sc_3YZKzwaABuAk82k3URGXz8Q,58248
878
+ anyscale/commands/setup_k8s.py,sha256=1IiuAOz3qJO5VWqpHDhppLbEfAQePGq9AbkRmoHEQeM,60631
878
879
  anyscale/commands/user_commands.py,sha256=C-i1dGpdhboywN_2XgPS2BekKx2y6LZq8c8gvS0S-tY,1259
879
880
  anyscale/commands/util.py,sha256=fIob29G1jZ4VU9PKVSJnT6hqX7wAqsS4L9sApsMZcNs,8585
880
881
  anyscale/commands/workspace_commands.py,sha256=5JoF5xftkwkxHidp8xyj9POrlZE_WxwSKtZGnKCbDV4,18597
@@ -894,7 +895,7 @@ anyscale/connect_utils/start_interactive_session.py,sha256=m-RCH0e_bQBF6dAOskbP9
894
895
  anyscale/controllers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
895
896
  anyscale/controllers/auth_controller.py,sha256=hDY2sPvUP8pvh8PnlDYH5rCHjQes2v3b_KBVjMbrzeE,5127
896
897
  anyscale/controllers/base_controller.py,sha256=1QFJoScFUV7YTzpKarhwPOc1SvI-xqX3TZmwxKonW6I,1998
897
- anyscale/controllers/cloud_controller.py,sha256=1mZIQ4OVIu0mQ4ibKVw8pJskiNzf0ZdDnc4FIGBS8IE,202079
898
+ anyscale/controllers/cloud_controller.py,sha256=nWEP_LmTZTBVVhAbShQP_Qc-G-y8oSZL-BsUhzkU49g,202138
898
899
  anyscale/controllers/cloud_file_storage_utils.py,sha256=ifaqClEybTgxhqGWHYoH1vrlbxwjRuO-De_3666R2O4,6987
899
900
  anyscale/controllers/cloud_functional_verification_controller.py,sha256=uro10r981CTlt2zlisUCmNYljbrYBiWzh7vrqrcur3I,33475
900
901
  anyscale/controllers/cluster_controller.py,sha256=Sb5wVjrjpycg5iqmENAVtZ4iy9Kr6kM97_ck-KH85LM,28745
@@ -1189,10 +1190,10 @@ anyscale/workspace/__init__.py,sha256=Innbm5ZhCyADEVBiYSo_vbpKwUNcMzVSAfxIGKOYe6
1189
1190
  anyscale/workspace/commands.py,sha256=b1sqNseoPj-1VXznqQOLe0V_a663bOTvJX-TaOMJa1Y,14590
1190
1191
  anyscale/workspace/models.py,sha256=uiMqoJRQNRgTcOIIsysSrtlHMtnI7paUWS34EN626Cg,10016
1191
1192
  anyscale/workspace/_private/workspace_sdk.py,sha256=2CMeYfJt0UtIFCocDn1ukw1iI5esKHdopLe6duEs-qE,27599
1192
- anyscale-0.26.68.dist-info/licenses/LICENSE,sha256=UOPu974Wzsna6frFv1mu4VrZgNdZT7lbcNPzo5ue3qs,3494
1193
- anyscale-0.26.68.dist-info/licenses/NOTICE,sha256=gHqDhSnUYlRXX-mDOL5FtE7774oiKyV_HO80qM3r9Xo,196
1194
- anyscale-0.26.68.dist-info/METADATA,sha256=HkQPlzY48CjPRep1GyHX3OdjWnHzBKpNKXPFZQhxxN4,3231
1195
- anyscale-0.26.68.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1196
- anyscale-0.26.68.dist-info/entry_points.txt,sha256=NqO18sCZn6zG6J0S38itjcN00s7aE3C3v3k5lMAfCLk,51
1197
- anyscale-0.26.68.dist-info/top_level.txt,sha256=g3NVNS8Oh0NZwbFFgeX696C5MZZkS5dqV2NqcsbDRJE,9
1198
- anyscale-0.26.68.dist-info/RECORD,,
1193
+ anyscale-0.26.69.dist-info/licenses/LICENSE,sha256=UOPu974Wzsna6frFv1mu4VrZgNdZT7lbcNPzo5ue3qs,3494
1194
+ anyscale-0.26.69.dist-info/licenses/NOTICE,sha256=gHqDhSnUYlRXX-mDOL5FtE7774oiKyV_HO80qM3r9Xo,196
1195
+ anyscale-0.26.69.dist-info/METADATA,sha256=bh83I4fwRpynsPUpm9SbAvANvAmTmOh6kiEJj9PjOtM,3231
1196
+ anyscale-0.26.69.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1197
+ anyscale-0.26.69.dist-info/entry_points.txt,sha256=NqO18sCZn6zG6J0S38itjcN00s7aE3C3v3k5lMAfCLk,51
1198
+ anyscale-0.26.69.dist-info/top_level.txt,sha256=g3NVNS8Oh0NZwbFFgeX696C5MZZkS5dqV2NqcsbDRJE,9
1199
+ anyscale-0.26.69.dist-info/RECORD,,