5
5
from jobs import Image , Job
6
6
from jobs .runner .base import Runner , _make_executor_command
7
7
from jobs .types import K8sResourceKind
8
- from jobs .util import (
9
- KubernetesNamespaceMixin ,
10
- remove_none_values ,
11
- sanitize_rfc1123_domain_name ,
12
- )
8
+ from jobs .utils .kubernetes import KubernetesNamespaceMixin , sanitize_rfc1123_domain_name
9
+ from jobs .utils .kueue import kueue_scheduling_labels
13
10
14
11
15
12
class KueueRunner (Runner , KubernetesNamespaceMixin ):
@@ -19,61 +16,14 @@ def __init__(self, **kwargs: str) -> None:
19
16
self ._queue = kwargs .get ("local_queue" , "user-queue" )
20
17
21
18
def _make_job_crd (self , job : Job , image : Image , namespace : str ) -> client .V1Job :
22
- def _assert_kueue_localqueue (name : str ) -> bool :
23
- try :
24
- _ = client .CustomObjectsApi ().get_namespaced_custom_object (
25
- "kueue.x-k8s.io" ,
26
- "v1beta1" ,
27
- namespace ,
28
- "localqueues" ,
29
- name ,
30
- )
31
- return True
32
- except client .exceptions .ApiException :
33
- return False
34
-
35
- def _assert_kueue_workloadpriorityclass (name : str ) -> bool :
36
- try :
37
- _ = client .CustomObjectsApi ().get_cluster_custom_object (
38
- "kueue.x-k8s.io" ,
39
- "v1beta1" ,
40
- "workloadpriorityclasses" ,
41
- name ,
42
- )
43
- return True
44
- except client .exceptions .ApiException :
45
- return False
46
-
47
19
if not job .options :
48
20
raise ValueError ("Job options must be specified" )
49
21
50
- sched_opts = job .options .scheduling
51
- if sched_opts :
52
- if queue := sched_opts .queue_name :
53
- if not _assert_kueue_localqueue (queue ):
54
- raise ValueError (
55
- f"Specified Kueue local queue does not exist: { queue !r} "
56
- )
57
- if pc := sched_opts .priority_class :
58
- if not _assert_kueue_workloadpriorityclass (pc ):
59
- raise ValueError (
60
- f"Specified Kueue workload priority class does not exist: { pc !r} "
61
- )
22
+ scheduling_labels = kueue_scheduling_labels (job , self .namespace )
62
23
63
24
metadata = client .V1ObjectMeta (
64
25
generate_name = sanitize_rfc1123_domain_name (job .name ),
65
- labels = remove_none_values (
66
- {
67
- "kueue.x-k8s.io/queue-name" : (
68
- sched_opts .queue_name
69
- if sched_opts and sched_opts .queue_name
70
- else None
71
- ),
72
- "kueue.x-k8s.io/priority-class" : (
73
- sched_opts .priority_class if sched_opts else None
74
- ),
75
- }
76
- ),
26
+ labels = scheduling_labels ,
77
27
)
78
28
79
29
# Job container
@@ -87,7 +37,7 @@ def _assert_kueue_workloadpriorityclass(name: str) -> bool:
87
37
"requests" : res .to_kubernetes (kind = K8sResourceKind .REQUESTS ),
88
38
"limits" : res .to_kubernetes (kind = K8sResourceKind .LIMITS ),
89
39
}
90
- if job . options and (res := job .options .resources )
40
+ if (res := job .options .resources )
91
41
else None
92
42
),
93
43
)
0 commit comments