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.
- anyscale/client/README.md +20 -0
- anyscale/client/openapi_client/__init__.py +15 -0
- anyscale/client/openapi_client/api/default_api.py +656 -0
- anyscale/client/openapi_client/models/__init__.py +15 -0
- anyscale/client/openapi_client/models/lineage_artifact.py +383 -0
- anyscale/client/openapi_client/models/lineage_artifact_sort_field.py +101 -0
- anyscale/client/openapi_client/models/lineage_artifact_type.py +100 -0
- anyscale/client/openapi_client/models/lineage_direction.py +101 -0
- anyscale/client/openapi_client/models/lineage_graph.py +179 -0
- anyscale/client/openapi_client/models/lineage_graph_node.py +439 -0
- anyscale/client/openapi_client/models/lineage_node_type.py +100 -0
- anyscale/client/openapi_client/models/lineage_workload.py +355 -0
- anyscale/client/openapi_client/models/lineage_workload_sort_field.py +101 -0
- anyscale/client/openapi_client/models/lineage_workload_type.py +101 -0
- anyscale/client/openapi_client/models/lineageartifact_list_response.py +147 -0
- anyscale/client/openapi_client/models/lineageartifact_response.py +121 -0
- anyscale/client/openapi_client/models/lineagegraph_response.py +121 -0
- anyscale/client/openapi_client/models/lineageworkload_list_response.py +147 -0
- anyscale/client/openapi_client/models/lineageworkload_response.py +121 -0
- anyscale/commands/cloud_commands.py +58 -0
- anyscale/commands/setup_k8s.py +1467 -0
- anyscale/controllers/cloud_controller.py +11 -10
- anyscale/controllers/kubernetes_verifier.py +65 -11
- anyscale/utils/cloudformation_utils.py +364 -0
- anyscale/version.py +1 -1
- {anyscale-0.26.66.dist-info → anyscale-0.26.68.dist-info}/METADATA +1 -1
- {anyscale-0.26.66.dist-info → anyscale-0.26.68.dist-info}/RECORD +32 -15
- {anyscale-0.26.66.dist-info → anyscale-0.26.68.dist-info}/WHEEL +0 -0
- {anyscale-0.26.66.dist-info → anyscale-0.26.68.dist-info}/entry_points.txt +0 -0
- {anyscale-0.26.66.dist-info → anyscale-0.26.68.dist-info}/licenses/LICENSE +0 -0
- {anyscale-0.26.66.dist-info → anyscale-0.26.68.dist-info}/licenses/NOTICE +0 -0
- {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":
|