anyscale 0.26.54__py3-none-any.whl → 0.26.55__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/openapi_client/models/task_table_row.py +27 -1
- anyscale/cloud/models.py +15 -11
- anyscale/controllers/cloud_controller.py +35 -16
- anyscale/version.py +1 -1
- {anyscale-0.26.54.dist-info → anyscale-0.26.55.dist-info}/METADATA +1 -1
- {anyscale-0.26.54.dist-info → anyscale-0.26.55.dist-info}/RECORD +11 -11
- {anyscale-0.26.54.dist-info → anyscale-0.26.55.dist-info}/WHEEL +0 -0
- {anyscale-0.26.54.dist-info → anyscale-0.26.55.dist-info}/entry_points.txt +0 -0
- {anyscale-0.26.54.dist-info → anyscale-0.26.55.dist-info}/licenses/LICENSE +0 -0
- {anyscale-0.26.54.dist-info → anyscale-0.26.55.dist-info}/licenses/NOTICE +0 -0
- {anyscale-0.26.54.dist-info → anyscale-0.26.55.dist-info}/top_level.txt +0 -0
@@ -43,6 +43,7 @@ class TaskTableRow(object):
|
|
43
43
|
'start_time_ns': 'int',
|
44
44
|
'end_time_ns': 'int',
|
45
45
|
'required_resources': 'str',
|
46
|
+
'runtime_env': 'str',
|
46
47
|
'node_id': 'str',
|
47
48
|
'worker_id': 'str',
|
48
49
|
'worker_pid': 'str',
|
@@ -62,6 +63,7 @@ class TaskTableRow(object):
|
|
62
63
|
'start_time_ns': 'start_time_ns',
|
63
64
|
'end_time_ns': 'end_time_ns',
|
64
65
|
'required_resources': 'required_resources',
|
66
|
+
'runtime_env': 'runtime_env',
|
65
67
|
'node_id': 'node_id',
|
66
68
|
'worker_id': 'worker_id',
|
67
69
|
'worker_pid': 'worker_pid',
|
@@ -70,7 +72,7 @@ class TaskTableRow(object):
|
|
70
72
|
'exception_type': 'exception_type'
|
71
73
|
}
|
72
74
|
|
73
|
-
def __init__(self, id=None, attempt_number=None, job_id=None, function_name=None, task_type=None, current_state=None, error_message=None, start_time_ns=None, end_time_ns=None, required_resources=None, node_id=None, worker_id=None, worker_pid=None, parent_task_id=None, ray_session_name=None, exception_type=None, local_vars_configuration=None): # noqa: E501
|
75
|
+
def __init__(self, id=None, attempt_number=None, job_id=None, function_name=None, task_type=None, current_state=None, error_message=None, start_time_ns=None, end_time_ns=None, required_resources=None, runtime_env=None, node_id=None, worker_id=None, worker_pid=None, parent_task_id=None, ray_session_name=None, exception_type=None, local_vars_configuration=None): # noqa: E501
|
74
76
|
"""TaskTableRow - a model defined in OpenAPI""" # noqa: E501
|
75
77
|
if local_vars_configuration is None:
|
76
78
|
local_vars_configuration = Configuration()
|
@@ -86,6 +88,7 @@ class TaskTableRow(object):
|
|
86
88
|
self._start_time_ns = None
|
87
89
|
self._end_time_ns = None
|
88
90
|
self._required_resources = None
|
91
|
+
self._runtime_env = None
|
89
92
|
self._node_id = None
|
90
93
|
self._worker_id = None
|
91
94
|
self._worker_pid = None
|
@@ -108,6 +111,8 @@ class TaskTableRow(object):
|
|
108
111
|
self.end_time_ns = end_time_ns
|
109
112
|
if required_resources is not None:
|
110
113
|
self.required_resources = required_resources
|
114
|
+
if runtime_env is not None:
|
115
|
+
self.runtime_env = runtime_env
|
111
116
|
if node_id is not None:
|
112
117
|
self.node_id = node_id
|
113
118
|
if worker_id is not None:
|
@@ -342,6 +347,27 @@ class TaskTableRow(object):
|
|
342
347
|
|
343
348
|
self._required_resources = required_resources
|
344
349
|
|
350
|
+
@property
|
351
|
+
def runtime_env(self):
|
352
|
+
"""Gets the runtime_env of this TaskTableRow. # noqa: E501
|
353
|
+
|
354
|
+
|
355
|
+
:return: The runtime_env of this TaskTableRow. # noqa: E501
|
356
|
+
:rtype: str
|
357
|
+
"""
|
358
|
+
return self._runtime_env
|
359
|
+
|
360
|
+
@runtime_env.setter
|
361
|
+
def runtime_env(self, runtime_env):
|
362
|
+
"""Sets the runtime_env of this TaskTableRow.
|
363
|
+
|
364
|
+
|
365
|
+
:param runtime_env: The runtime_env of this TaskTableRow. # noqa: E501
|
366
|
+
:type: str
|
367
|
+
"""
|
368
|
+
|
369
|
+
self._runtime_env = runtime_env
|
370
|
+
|
345
371
|
@property
|
346
372
|
def node_id(self):
|
347
373
|
"""Gets the node_id of this TaskTableRow. # noqa: E501
|
anyscale/cloud/models.py
CHANGED
@@ -109,12 +109,14 @@ class CloudProvider(ModelEnum):
|
|
109
109
|
AWS = "AWS"
|
110
110
|
GCP = "GCP"
|
111
111
|
AZURE = "AZURE"
|
112
|
+
GENERIC = "GENERIC"
|
112
113
|
|
113
114
|
__docstrings__ = {
|
114
115
|
UNKNOWN: "Unknown cloud provider.",
|
115
116
|
AWS: "Amazon Web Services.",
|
116
117
|
GCP: "Google Cloud Platform.",
|
117
118
|
AZURE: "Microsoft Azure.",
|
119
|
+
GENERIC: "Generic cloud provider.",
|
118
120
|
} # type: ignore
|
119
121
|
|
120
122
|
|
@@ -141,7 +143,7 @@ cloud = Cloud(
|
|
141
143
|
id: str = field(metadata={"docstring": "Unique identifier for this Cloud."})
|
142
144
|
provider: Union[CloudProvider, str] = field(
|
143
145
|
metadata={
|
144
|
-
"docstring": "Cloud provider (AWS, GCP, AZURE) or UNKNOWN if not recognized."
|
146
|
+
"docstring": "Cloud provider (AWS, GCP, AZURE, GENERIC) or UNKNOWN if not recognized."
|
145
147
|
},
|
146
148
|
)
|
147
149
|
compute_stack: Union[ComputeStack, str] = field(
|
@@ -499,15 +501,15 @@ bucket_name: s3://my-bucket
|
|
499
501
|
file_storage:
|
500
502
|
file_storage_id: fs-12345678901234567
|
501
503
|
aws_config:
|
502
|
-
vpc_id: vpc-12345678901234567
|
503
|
-
subnet_ids:
|
504
|
-
|
505
|
-
|
506
|
-
security_group_ids:
|
507
|
-
|
508
|
-
anyscale_iam_role_id: arn:aws:iam::123456789012:role/anyscale-iam-role
|
509
|
-
cluster_iam_role_id: arn:aws:iam::123456789012:role/cluster-node-role
|
510
|
-
memorydb_cluster_name: my-memorydb-cluster
|
504
|
+
vpc_id: vpc-12345678901234567
|
505
|
+
subnet_ids:
|
506
|
+
- subnet-11111111111111111
|
507
|
+
- subnet-22222222222222222
|
508
|
+
security_group_ids:
|
509
|
+
- sg-12345678901234567
|
510
|
+
anyscale_iam_role_id: arn:aws:iam::123456789012:role/anyscale-iam-role
|
511
|
+
cluster_iam_role_id: arn:aws:iam::123456789012:role/cluster-node-role
|
512
|
+
memorydb_cluster_name: my-memorydb-cluster
|
511
513
|
"""
|
512
514
|
|
513
515
|
cloud_resource_id: Optional[str] = field(
|
@@ -519,7 +521,9 @@ memorydb_cluster_name: my-memorydb-cluster
|
|
519
521
|
)
|
520
522
|
provider: Union[CloudProvider, str] = field(
|
521
523
|
default=CloudProvider.UNKNOWN,
|
522
|
-
metadata={
|
524
|
+
metadata={
|
525
|
+
"docstring": "The cloud provider type (e.g., AWS, GCP, AZURE, or GENERIC)."
|
526
|
+
},
|
523
527
|
)
|
524
528
|
compute_stack: Union[ComputeStack, str] = field(
|
525
529
|
default=ComputeStack.VM,
|
@@ -1471,18 +1471,26 @@ class CloudController(BaseController):
|
|
1471
1471
|
d.pop("cloud_deployment_id", None)
|
1472
1472
|
return formatted_cloud_resources
|
1473
1473
|
|
1474
|
-
def
|
1475
|
-
|
1476
|
-
|
1474
|
+
def _convert_decorated_cloud_resource_to_cloud_deployment(
|
1475
|
+
self, decorated_cloud_resource: DecoratedCloudResource
|
1476
|
+
) -> CloudDeployment:
|
1477
1477
|
# DecoratedCloudResource has extra fields that are not in CloudDeployment.
|
1478
1478
|
allowed_keys = set(CloudDeployment.attribute_map.keys())
|
1479
1479
|
allowed_keys.remove(
|
1480
1480
|
"cloud_deployment_id"
|
1481
1481
|
) # Remove deprecated cloud_deployment_id field.
|
1482
|
+
return CloudDeployment(
|
1483
|
+
**{
|
1484
|
+
k: v
|
1485
|
+
for k, v in decorated_cloud_resource.to_dict().items()
|
1486
|
+
if k in allowed_keys
|
1487
|
+
}
|
1488
|
+
)
|
1489
|
+
|
1490
|
+
def get_cloud_resources(self, cloud_id: str) -> List[CloudDeployment]:
|
1491
|
+
decorated_cloud_resources = self.get_decorated_cloud_resources(cloud_id)
|
1482
1492
|
return [
|
1483
|
-
|
1484
|
-
**{k: v for k, v in resource.to_dict().items() if k in allowed_keys}
|
1485
|
-
)
|
1493
|
+
self._convert_decorated_cloud_resource_to_cloud_deployment(resource)
|
1486
1494
|
for resource in decorated_cloud_resources
|
1487
1495
|
]
|
1488
1496
|
|
@@ -1815,24 +1823,25 @@ class CloudController(BaseController):
|
|
1815
1823
|
"Please use `anyscale cloud resource create` to add cloud resources."
|
1816
1824
|
)
|
1817
1825
|
|
1818
|
-
# Diff the existing and new specs
|
1819
|
-
diff = self._generate_diff(
|
1820
|
-
[self._remove_empty_values(r.to_dict()) for r in existing_resources], spec
|
1821
|
-
)
|
1822
|
-
if not diff:
|
1823
|
-
self.log.info("No changes detected.")
|
1824
|
-
return
|
1825
|
-
|
1826
1826
|
existing_resources_dict = {
|
1827
1827
|
resource.cloud_resource_id: resource for resource in existing_resources
|
1828
1828
|
}
|
1829
1829
|
|
1830
|
+
all_deployments: List[CloudDeployment] = []
|
1830
1831
|
updated_deployments: List[CloudDeployment] = []
|
1831
1832
|
for d in spec:
|
1832
1833
|
try:
|
1833
1834
|
deployment = CloudDeployment(**d)
|
1834
1835
|
except Exception as e: # noqa: BLE001
|
1835
|
-
|
1836
|
+
try:
|
1837
|
+
# Try to parse the cloud deployment as a DecoratedCloudResource as well,
|
1838
|
+
# which has extra fields that are not in CloudDeployment.
|
1839
|
+
deployment = self._convert_decorated_cloud_resource_to_cloud_deployment(
|
1840
|
+
DecoratedCloudResource(**d)
|
1841
|
+
)
|
1842
|
+
except: # noqa: E722
|
1843
|
+
# Raise original error from parsing as CloudDeployment.
|
1844
|
+
raise ClickException(f"Failed to parse cloud resource: {e}")
|
1836
1845
|
|
1837
1846
|
if not deployment.cloud_resource_id:
|
1838
1847
|
raise ClickException(
|
@@ -1846,10 +1855,20 @@ class CloudController(BaseController):
|
|
1846
1855
|
raise ClickException(
|
1847
1856
|
"Please use the `anyscale machine-pool` CLI to update machine pools."
|
1848
1857
|
)
|
1858
|
+
|
1859
|
+
all_deployments.append(deployment)
|
1849
1860
|
if deployment != existing_resources_dict[deployment.cloud_resource_id]:
|
1850
1861
|
updated_deployments.append(deployment)
|
1851
1862
|
|
1852
|
-
#
|
1863
|
+
# Diff the existing and new specs and confirm.
|
1864
|
+
diff = self._generate_diff(
|
1865
|
+
[self._remove_empty_values(r.to_dict()) for r in existing_resources],
|
1866
|
+
[self._remove_empty_values(r.to_dict()) for r in all_deployments],
|
1867
|
+
)
|
1868
|
+
if not diff:
|
1869
|
+
self.log.info("No changes detected.")
|
1870
|
+
return
|
1871
|
+
|
1853
1872
|
self.log.info(f"Detected the following changes:\n{diff}")
|
1854
1873
|
|
1855
1874
|
confirm("Would you like to proceed with updating this cloud?", yes)
|
anyscale/version.py
CHANGED
@@ -1 +1 @@
|
|
1
|
-
__version__ = "0.26.
|
1
|
+
__version__ = "0.26.55"
|
@@ -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=7YPUcm1KCWnmwQpgO0iy0Ly3kSKEAdsCI2jmFridKH0,42881
|
31
|
-
anyscale/version.py,sha256=
|
31
|
+
anyscale/version.py,sha256=Q91RXdcQACvk1n5hluPOYNf8C1ugDnw4_PqOP-z1lsI,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
|
@@ -667,7 +667,7 @@ anyscale/client/openapi_client/models/task_state.py,sha256=KpRA6VImK3r0qNeaiHh4a
|
|
667
667
|
anyscale/client/openapi_client/models/task_summary.py,sha256=8GIpf9xxmPDV8LJgIsGmSQex2R6CDKx0oJ9_VrL7oPw,9102
|
668
668
|
anyscale/client/openapi_client/models/task_table_config.py,sha256=sy9cStVRjjT6KFU_47ibBbSRPf7fXjXe9YW2hwtPFhM,6928
|
669
669
|
anyscale/client/openapi_client/models/task_table_response.py,sha256=T8VDBMlOzD1c2hY_Q1JdOF8ZF1MqA5JUMbnRjCKZmcg,5074
|
670
|
-
anyscale/client/openapi_client/models/task_table_row.py,sha256=
|
670
|
+
anyscale/client/openapi_client/models/task_table_row.py,sha256=7fXOimaIWXfTd7SLMsktKVUH6Mg7P4IOshBCL3bm9rs,16151
|
671
671
|
anyscale/client/openapi_client/models/task_type.py,sha256=BwGeFgSgxL8aazGdhr58L7KyPHK5EqRrE_rVWuWyWCE,2807
|
672
672
|
anyscale/client/openapi_client/models/tasksummary_response.py,sha256=sgOV63ZyYroVvcLbISXz0LU44tW8tLCefcqYB1WFsQ0,3539
|
673
673
|
anyscale/client/openapi_client/models/text_query.py,sha256=aMcKF6nRme1J1jYKhvqUIG8VzlcDN72znSFF9kKCc2Y,5107
|
@@ -748,7 +748,7 @@ anyscale/client/openapi_client/models/write_project.py,sha256=48Jym8VDE57cZXTnVH
|
|
748
748
|
anyscale/client/openapi_client/models/write_support_request.py,sha256=pFOalGDQi9FCDjeJV7ccBpq6iRq1Sub4NBfcUVfCglE,3614
|
749
749
|
anyscale/cloud/__init__.py,sha256=cpMh-fHKh-LaK2VKF7uDtUN4gnFXhgWnVrtaIEZPPuU,4508
|
750
750
|
anyscale/cloud/commands.py,sha256=2tGXjhL4QinVUE2ayGhUNRnsRPgHdSust1flWBi7QIw,4159
|
751
|
-
anyscale/cloud/models.py,sha256=
|
751
|
+
anyscale/cloud/models.py,sha256=cy2NPzBmyg614QXqDe69Lx627XcMSSTXe20jPFY6C14,19059
|
752
752
|
anyscale/cloud/_private/cloud_sdk.py,sha256=5TBGyGSjMI4jLOnSle1WWC6za0psP9xgTGWU2LgwemA,4099
|
753
753
|
anyscale/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
754
754
|
anyscale/commands/aggregated_instance_usage_commands.py,sha256=TRP1X3hdIWbKg9V20VtazlDXsYAeV--M0DH3-Z5tnj4,2293
|
@@ -798,7 +798,7 @@ anyscale/connect_utils/start_interactive_session.py,sha256=DbuIK2wuWofmbwJ9MLbsb
|
|
798
798
|
anyscale/controllers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
799
799
|
anyscale/controllers/auth_controller.py,sha256=hDY2sPvUP8pvh8PnlDYH5rCHjQes2v3b_KBVjMbrzeE,5127
|
800
800
|
anyscale/controllers/base_controller.py,sha256=1QFJoScFUV7YTzpKarhwPOc1SvI-xqX3TZmwxKonW6I,1998
|
801
|
-
anyscale/controllers/cloud_controller.py,sha256=
|
801
|
+
anyscale/controllers/cloud_controller.py,sha256=Yjrqmy-gcUXD0mmTyVON0fRc2ok0bReGbNKn2qixsOY,202329
|
802
802
|
anyscale/controllers/cloud_file_storage_utils.py,sha256=ifaqClEybTgxhqGWHYoH1vrlbxwjRuO-De_3666R2O4,6987
|
803
803
|
anyscale/controllers/cloud_functional_verification_controller.py,sha256=YsEfdHT9hPtxy_3a5Q62UlRXW0iFJ1lVS4IZ_NHoemE,33399
|
804
804
|
anyscale/controllers/cluster_controller.py,sha256=Sb5wVjrjpycg5iqmENAVtZ4iy9Kr6kM97_ck-KH85LM,28745
|
@@ -1092,10 +1092,10 @@ anyscale/workspace/__init__.py,sha256=Innbm5ZhCyADEVBiYSo_vbpKwUNcMzVSAfxIGKOYe6
|
|
1092
1092
|
anyscale/workspace/commands.py,sha256=GBwZenhxe4LFAOCoW8y8KLSgm2HxMxozJ3njEcx53QE,18555
|
1093
1093
|
anyscale/workspace/models.py,sha256=uiMqoJRQNRgTcOIIsysSrtlHMtnI7paUWS34EN626Cg,10016
|
1094
1094
|
anyscale/workspace/_private/workspace_sdk.py,sha256=2CMeYfJt0UtIFCocDn1ukw1iI5esKHdopLe6duEs-qE,27599
|
1095
|
-
anyscale-0.26.
|
1096
|
-
anyscale-0.26.
|
1097
|
-
anyscale-0.26.
|
1098
|
-
anyscale-0.26.
|
1099
|
-
anyscale-0.26.
|
1100
|
-
anyscale-0.26.
|
1101
|
-
anyscale-0.26.
|
1095
|
+
anyscale-0.26.55.dist-info/licenses/LICENSE,sha256=UOPu974Wzsna6frFv1mu4VrZgNdZT7lbcNPzo5ue3qs,3494
|
1096
|
+
anyscale-0.26.55.dist-info/licenses/NOTICE,sha256=gHqDhSnUYlRXX-mDOL5FtE7774oiKyV_HO80qM3r9Xo,196
|
1097
|
+
anyscale-0.26.55.dist-info/METADATA,sha256=Eckny4k8rW5-VXvfnrA2lu9Mx6GXNWP_aPUMFeMksLo,3231
|
1098
|
+
anyscale-0.26.55.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
1099
|
+
anyscale-0.26.55.dist-info/entry_points.txt,sha256=NqO18sCZn6zG6J0S38itjcN00s7aE3C3v3k5lMAfCLk,51
|
1100
|
+
anyscale-0.26.55.dist-info/top_level.txt,sha256=g3NVNS8Oh0NZwbFFgeX696C5MZZkS5dqV2NqcsbDRJE,9
|
1101
|
+
anyscale-0.26.55.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|