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.
@@ -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
- - subnet-11111111111111111
505
- - subnet-22222222222222222
506
- security_group_ids:
507
- - sg-12345678901234567
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={"docstring": "The cloud provider type (e.g., AWS, GCP, or AZURE)."},
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 get_cloud_resources(self, cloud_id: str) -> List[CloudDeployment]:
1475
- decorated_cloud_resources = self.get_decorated_cloud_resources(cloud_id)
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
- CloudDeployment(
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
- raise ClickException(f"Failed to parse cloud resource: {e}")
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
- # Log the diff and confirm.
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.54"
1
+ __version__ = "0.26.55"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: anyscale
3
- Version: 0.26.54
3
+ Version: 0.26.55
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=7YPUcm1KCWnmwQpgO0iy0Ly3kSKEAdsCI2jmFridKH0,42881
31
- anyscale/version.py,sha256=UMZ1FP1ASEyBpwT4Sq4ExB9MkLr8I6ko_CBwd6tl-V0,24
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=neF3ZAb_A12MsZkm_5tc8QV_PaItUirrVugGLTP27eE,15434
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=HMGzcQr0xnHTO0FvdOuFvO57RpNRLFiPMNCRv71U5p0,18945
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=WslkGFtv0YE4VIvNiPA-F9kRfqfeQvGgapunBb5OjAU,201395
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.54.dist-info/licenses/LICENSE,sha256=UOPu974Wzsna6frFv1mu4VrZgNdZT7lbcNPzo5ue3qs,3494
1096
- anyscale-0.26.54.dist-info/licenses/NOTICE,sha256=gHqDhSnUYlRXX-mDOL5FtE7774oiKyV_HO80qM3r9Xo,196
1097
- anyscale-0.26.54.dist-info/METADATA,sha256=lc5Y0k8_kRn_LslhkLQBAlaZ7oht9fjvZSvpQOz0xY0,3231
1098
- anyscale-0.26.54.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1099
- anyscale-0.26.54.dist-info/entry_points.txt,sha256=NqO18sCZn6zG6J0S38itjcN00s7aE3C3v3k5lMAfCLk,51
1100
- anyscale-0.26.54.dist-info/top_level.txt,sha256=g3NVNS8Oh0NZwbFFgeX696C5MZZkS5dqV2NqcsbDRJE,9
1101
- anyscale-0.26.54.dist-info/RECORD,,
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,,