anyscale 0.26.66__py3-none-any.whl → 0.26.68__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.
Files changed (32) hide show
  1. anyscale/client/README.md +20 -0
  2. anyscale/client/openapi_client/__init__.py +15 -0
  3. anyscale/client/openapi_client/api/default_api.py +656 -0
  4. anyscale/client/openapi_client/models/__init__.py +15 -0
  5. anyscale/client/openapi_client/models/lineage_artifact.py +383 -0
  6. anyscale/client/openapi_client/models/lineage_artifact_sort_field.py +101 -0
  7. anyscale/client/openapi_client/models/lineage_artifact_type.py +100 -0
  8. anyscale/client/openapi_client/models/lineage_direction.py +101 -0
  9. anyscale/client/openapi_client/models/lineage_graph.py +179 -0
  10. anyscale/client/openapi_client/models/lineage_graph_node.py +439 -0
  11. anyscale/client/openapi_client/models/lineage_node_type.py +100 -0
  12. anyscale/client/openapi_client/models/lineage_workload.py +355 -0
  13. anyscale/client/openapi_client/models/lineage_workload_sort_field.py +101 -0
  14. anyscale/client/openapi_client/models/lineage_workload_type.py +101 -0
  15. anyscale/client/openapi_client/models/lineageartifact_list_response.py +147 -0
  16. anyscale/client/openapi_client/models/lineageartifact_response.py +121 -0
  17. anyscale/client/openapi_client/models/lineagegraph_response.py +121 -0
  18. anyscale/client/openapi_client/models/lineageworkload_list_response.py +147 -0
  19. anyscale/client/openapi_client/models/lineageworkload_response.py +121 -0
  20. anyscale/commands/cloud_commands.py +58 -0
  21. anyscale/commands/setup_k8s.py +1467 -0
  22. anyscale/controllers/cloud_controller.py +11 -10
  23. anyscale/controllers/kubernetes_verifier.py +65 -11
  24. anyscale/utils/cloudformation_utils.py +364 -0
  25. anyscale/version.py +1 -1
  26. {anyscale-0.26.66.dist-info → anyscale-0.26.68.dist-info}/METADATA +1 -1
  27. {anyscale-0.26.66.dist-info → anyscale-0.26.68.dist-info}/RECORD +32 -15
  28. {anyscale-0.26.66.dist-info → anyscale-0.26.68.dist-info}/WHEEL +0 -0
  29. {anyscale-0.26.66.dist-info → anyscale-0.26.68.dist-info}/entry_points.txt +0 -0
  30. {anyscale-0.26.66.dist-info → anyscale-0.26.68.dist-info}/licenses/LICENSE +0 -0
  31. {anyscale-0.26.66.dist-info → anyscale-0.26.68.dist-info}/licenses/NOTICE +0 -0
  32. {anyscale-0.26.66.dist-info → anyscale-0.26.68.dist-info}/top_level.txt +0 -0
@@ -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 LineageartifactResponse(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': 'LineageArtifact'
37
+ }
38
+
39
+ attribute_map = {
40
+ 'result': 'result'
41
+ }
42
+
43
+ def __init__(self, result=None, local_vars_configuration=None): # noqa: E501
44
+ """LineageartifactResponse - 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 LineageartifactResponse. # noqa: E501
57
+
58
+
59
+ :return: The result of this LineageartifactResponse. # noqa: E501
60
+ :rtype: LineageArtifact
61
+ """
62
+ return self._result
63
+
64
+ @result.setter
65
+ def result(self, result):
66
+ """Sets the result of this LineageartifactResponse.
67
+
68
+
69
+ :param result: The result of this LineageartifactResponse. # noqa: E501
70
+ :type: LineageArtifact
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, LineageartifactResponse):
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, LineageartifactResponse):
119
+ return True
120
+
121
+ return self.to_dict() != other.to_dict()
@@ -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 LineagegraphResponse(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': 'LineageGraph'
37
+ }
38
+
39
+ attribute_map = {
40
+ 'result': 'result'
41
+ }
42
+
43
+ def __init__(self, result=None, local_vars_configuration=None): # noqa: E501
44
+ """LineagegraphResponse - 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 LineagegraphResponse. # noqa: E501
57
+
58
+
59
+ :return: The result of this LineagegraphResponse. # noqa: E501
60
+ :rtype: LineageGraph
61
+ """
62
+ return self._result
63
+
64
+ @result.setter
65
+ def result(self, result):
66
+ """Sets the result of this LineagegraphResponse.
67
+
68
+
69
+ :param result: The result of this LineagegraphResponse. # noqa: E501
70
+ :type: LineageGraph
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, LineagegraphResponse):
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, LineagegraphResponse):
119
+ return True
120
+
121
+ return self.to_dict() != other.to_dict()
@@ -0,0 +1,147 @@
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 LineageworkloadListResponse(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
+ 'results': 'list[LineageWorkload]',
37
+ 'metadata': 'ListResponseMetadata'
38
+ }
39
+
40
+ attribute_map = {
41
+ 'results': 'results',
42
+ 'metadata': 'metadata'
43
+ }
44
+
45
+ def __init__(self, results=None, metadata=None, local_vars_configuration=None): # noqa: E501
46
+ """LineageworkloadListResponse - a model defined in OpenAPI""" # noqa: E501
47
+ if local_vars_configuration is None:
48
+ local_vars_configuration = Configuration()
49
+ self.local_vars_configuration = local_vars_configuration
50
+
51
+ self._results = None
52
+ self._metadata = None
53
+ self.discriminator = None
54
+
55
+ self.results = results
56
+ if metadata is not None:
57
+ self.metadata = metadata
58
+
59
+ @property
60
+ def results(self):
61
+ """Gets the results of this LineageworkloadListResponse. # noqa: E501
62
+
63
+
64
+ :return: The results of this LineageworkloadListResponse. # noqa: E501
65
+ :rtype: list[LineageWorkload]
66
+ """
67
+ return self._results
68
+
69
+ @results.setter
70
+ def results(self, results):
71
+ """Sets the results of this LineageworkloadListResponse.
72
+
73
+
74
+ :param results: The results of this LineageworkloadListResponse. # noqa: E501
75
+ :type: list[LineageWorkload]
76
+ """
77
+ if self.local_vars_configuration.client_side_validation and results is None: # noqa: E501
78
+ raise ValueError("Invalid value for `results`, must not be `None`") # noqa: E501
79
+
80
+ self._results = results
81
+
82
+ @property
83
+ def metadata(self):
84
+ """Gets the metadata of this LineageworkloadListResponse. # noqa: E501
85
+
86
+
87
+ :return: The metadata of this LineageworkloadListResponse. # noqa: E501
88
+ :rtype: ListResponseMetadata
89
+ """
90
+ return self._metadata
91
+
92
+ @metadata.setter
93
+ def metadata(self, metadata):
94
+ """Sets the metadata of this LineageworkloadListResponse.
95
+
96
+
97
+ :param metadata: The metadata of this LineageworkloadListResponse. # noqa: E501
98
+ :type: ListResponseMetadata
99
+ """
100
+
101
+ self._metadata = metadata
102
+
103
+ def to_dict(self):
104
+ """Returns the model properties as a dict"""
105
+ result = {}
106
+
107
+ for attr, _ in six.iteritems(self.openapi_types):
108
+ value = getattr(self, attr)
109
+ if isinstance(value, list):
110
+ result[attr] = list(map(
111
+ lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
112
+ value
113
+ ))
114
+ elif hasattr(value, "to_dict"):
115
+ result[attr] = value.to_dict()
116
+ elif isinstance(value, dict):
117
+ result[attr] = dict(map(
118
+ lambda item: (item[0], item[1].to_dict())
119
+ if hasattr(item[1], "to_dict") else item,
120
+ value.items()
121
+ ))
122
+ else:
123
+ result[attr] = value
124
+
125
+ return result
126
+
127
+ def to_str(self):
128
+ """Returns the string representation of the model"""
129
+ return pprint.pformat(self.to_dict())
130
+
131
+ def __repr__(self):
132
+ """For `print` and `pprint`"""
133
+ return self.to_str()
134
+
135
+ def __eq__(self, other):
136
+ """Returns true if both objects are equal"""
137
+ if not isinstance(other, LineageworkloadListResponse):
138
+ return False
139
+
140
+ return self.to_dict() == other.to_dict()
141
+
142
+ def __ne__(self, other):
143
+ """Returns true if both objects are not equal"""
144
+ if not isinstance(other, LineageworkloadListResponse):
145
+ return True
146
+
147
+ return self.to_dict() != other.to_dict()
@@ -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 LineageworkloadResponse(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': 'LineageWorkload'
37
+ }
38
+
39
+ attribute_map = {
40
+ 'result': 'result'
41
+ }
42
+
43
+ def __init__(self, result=None, local_vars_configuration=None): # noqa: E501
44
+ """LineageworkloadResponse - 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 LineageworkloadResponse. # noqa: E501
57
+
58
+
59
+ :return: The result of this LineageworkloadResponse. # noqa: E501
60
+ :rtype: LineageWorkload
61
+ """
62
+ return self._result
63
+
64
+ @result.setter
65
+ def result(self, result):
66
+ """Sets the result of this LineageworkloadResponse.
67
+
68
+
69
+ :param result: The result of this LineageworkloadResponse. # noqa: E501
70
+ :type: LineageWorkload
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, LineageworkloadResponse):
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, LineageworkloadResponse):
119
+ return True
120
+
121
+ return self.to_dict() != other.to_dict()
@@ -23,6 +23,7 @@ from anyscale.client.openapi_client.models import (
23
23
  from anyscale.client.openapi_client.models.compute_stack import ComputeStack
24
24
  from anyscale.cloud.models import CreateCloudCollaborator, CreateCloudCollaborators
25
25
  from anyscale.commands import command_examples
26
+ from anyscale.commands.setup_k8s import setup_kubernetes_cloud
26
27
  from anyscale.commands.util import AnyscaleCommand, OptionPromptNull
27
28
  from anyscale.controllers.cloud_controller import CloudController
28
29
  from anyscale.util import (
@@ -127,6 +128,27 @@ def default_region(provider: str) -> str:
127
128
  show_default=True,
128
129
  )
129
130
  @click.option("--name", "-n", help="Name of the cloud.", required=True, prompt="Name")
131
+ @click.option(
132
+ "--stack",
133
+ help="The compute stack to use (vm or k8s).",
134
+ required=False,
135
+ type=click.Choice(["vm", "k8s"], case_sensitive=False),
136
+ default="vm",
137
+ show_default=True,
138
+ )
139
+ @click.option(
140
+ "--cluster-name",
141
+ help="Kubernetes cluster name (required for k8s stack).",
142
+ required=False,
143
+ type=str,
144
+ )
145
+ @click.option(
146
+ "--namespace",
147
+ help="Kubernetes namespace for Anyscale operator (for k8s stack).",
148
+ required=False,
149
+ type=str,
150
+ default="anyscale-operator",
151
+ )
130
152
  @click.option(
131
153
  "--project-id",
132
154
  help="Globally Unique project ID for GCP clouds (e.g., my-project-abc123)",
@@ -173,10 +195,22 @@ def default_region(provider: str) -> str:
173
195
  show_default=True,
174
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.",
175
197
  )
198
+ @click.option(
199
+ "--values-file",
200
+ help="Path to save the generated Helm values file (for k8s stack, default: auto-generated with timestamp).",
201
+ required=False,
202
+ type=str,
203
+ )
204
+ @click.option(
205
+ "--debug", is_flag=True, default=False, help="Enable debug logging.",
206
+ )
176
207
  def setup_cloud( # noqa: PLR0913
177
208
  provider: str,
178
209
  region: str,
179
210
  name: str,
211
+ stack: str,
212
+ cluster_name: Optional[str],
213
+ namespace: str,
180
214
  project_id: str,
181
215
  functional_verify: Optional[str],
182
216
  anyscale_managed: bool, # noqa: ARG001
@@ -184,9 +218,33 @@ def setup_cloud( # noqa: PLR0913
184
218
  yes: bool,
185
219
  disable_auto_add_user: bool,
186
220
  shared_storage: str,
221
+ values_file: Optional[str],
222
+ debug: bool,
187
223
  ) -> None:
188
224
  # TODO (congding): remove `anyscale_managed` in the future, now keeping it for compatibility
189
225
 
226
+ # Handle Kubernetes stack
227
+ if stack == "k8s":
228
+ if not cluster_name:
229
+ raise click.ClickException(
230
+ "--cluster-name is required when using --stack=k8s"
231
+ )
232
+
233
+ setup_kubernetes_cloud(
234
+ provider=provider,
235
+ region=region,
236
+ name=name,
237
+ cluster_name=cluster_name,
238
+ namespace=namespace,
239
+ project_id=project_id,
240
+ functional_verify=bool(functional_verify),
241
+ yes=yes,
242
+ values_file=values_file,
243
+ debug=debug,
244
+ )
245
+ return
246
+
247
+ # Handle VM stack
190
248
  # Convert string to enum for type safety
191
249
  shared_storage_type = SharedStorageType(shared_storage)
192
250
  if provider == "aws":