22from ..utils .pretty_print import RayCluster
33from ..utils import pretty_print
44import openshift as oc
5- from typing import List
5+ from typing import List , Optional
6+
67
78class Cluster :
89 def __init__ (self , config : ClusterConfiguration ):
9- pass
10+ self . config = config
1011
12+ # creates a new cluser with the provided or default spec
1113 def up (self ):
1214 pass
1315
1416 def down (self , name ):
1517 pass
1618
17- def status (self , name ):
18- pass
19-
19+ def status (self , print_to_console = True ):
20+ cluster = _ray_cluster_status (self .config .name )
21+ if cluster :
22+ if print_to_console :
23+ pretty_print .print_clusters ([cluster ])
24+ return cluster .status
25+ else :
26+ return None
27+
2028
2129def list_all_clusters (print_to_console = True ):
2230 clusters = _get_ray_clusters ()
2331 if print_to_console :
2432 pretty_print .print_clusters (clusters )
2533 return clusters
26-
34+
2735
2836# private methods
2937
@@ -33,18 +41,39 @@ def _get_appwrappers(namespace='default'):
3341 return app_wrappers
3442
3543
44+ def _ray_cluster_status (name , namespace = 'default' ) -> Optional [RayCluster ]:
45+
46+ with oc .project (namespace ), oc .timeout (10 * 60 ):
47+ cluster = oc .selector (f'rayclusters/{ name } ' ).object ()
48+
49+ if cluster :
50+ return _map_to_ray_cluster (cluster )
51+ else :
52+ return None
53+
54+
55+
56+
3657def _get_ray_clusters (namespace = 'default' ) -> List [RayCluster ]:
3758 list_of_clusters = []
59+
3860 with oc .project (namespace ), oc .timeout (10 * 60 ):
3961 ray_clusters = oc .selector ('rayclusters' ).objects ()
40- for cluster in ray_clusters :
41- cluster_model = cluster .model
42- list_of_clusters .append (RayCluster (
43- name = cluster .name (), status = cluster_model .status .state ,
44- min_workers = cluster_model .spec .workerGroupSpecs [0 ].replicas ,
45- max_workers = cluster_model .spec .workerGroupSpecs [0 ].replicas ,
46- worker_mem_max = cluster_model .spec .workerGroupSpecs [0 ].template .spec .containers [0 ].resources .limits .memory ,
47- worker_mem_min = cluster_model .spec .workerGroupSpecs [0 ].template .spec .containers [0 ].resources .requests .memory ,
48- worker_cpu = cluster_model .spec .workerGroupSpecs [0 ].template .spec .containers [0 ].resources .limits .cpu ,
49- worker_gpu = 0 ))
62+
63+ for cluster in ray_clusters :
64+ list_of_clusters .append (_map_to_ray_cluster (cluster ))
5065 return list_of_clusters
66+
67+
68+ def _map_to_ray_cluster (cluster ):
69+ cluster_model = cluster .model
70+ return RayCluster (
71+ name = cluster .name (), status = cluster_model .status .state ,
72+ min_workers = cluster_model .spec .workerGroupSpecs [0 ].replicas ,
73+ max_workers = cluster_model .spec .workerGroupSpecs [0 ].replicas ,
74+ worker_mem_max = cluster_model .spec .workerGroupSpecs [
75+ 0 ].template .spec .containers [0 ].resources .limits .memory ,
76+ worker_mem_min = cluster_model .spec .workerGroupSpecs [
77+ 0 ].template .spec .containers [0 ].resources .requests .memory ,
78+ worker_cpu = cluster_model .spec .workerGroupSpecs [0 ].template .spec .containers [0 ].resources .limits .cpu ,
79+ worker_gpu = 0 )
0 commit comments