Skip to content

Commit 33a1f44

Browse files
committed
Also must add local_queue label to appwrappers
1 parent ad061bc commit 33a1f44

File tree

4 files changed

+43
-10
lines changed

4 files changed

+43
-10
lines changed

src/codeflare_sdk/utils/generate_yaml.py

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -208,11 +208,16 @@ def get_default_kueue_name(namespace: str):
208208
)
209209

210210

211+
def add_queue_label(item: dict, namespace: str, local_queue: Optional[str]):
212+
lq_name = local_queue or get_default_kueue_name(namespace)
213+
if not "labels" in item["metadata"]:
214+
item["metadata"]["labels"] = {}
215+
item["metadata"]["labels"].update({"kueue.x-k8s.io/queue-name": lq_name})
216+
217+
211218
def write_components(
212219
user_yaml: dict,
213220
output_file_name: str,
214-
namespace: str,
215-
local_queue: Optional[str],
216221
labels: dict,
217222
):
218223
# Create the directory if it doesn't exist
@@ -222,13 +227,11 @@ def write_components(
222227

223228
components = user_yaml.get("spec", "resources").get("components")
224229
open(output_file_name, "w").close()
225-
lq_name = local_queue or get_default_kueue_name(namespace)
226230
cluster_labels = labels
227231
with open(output_file_name, "a") as outfile:
228232
for component in components:
229233
if "template" in component:
230234
labels = component["template"]["metadata"]["labels"]
231-
labels.update({"kueue.x-k8s.io/queue-name": lq_name})
232235
labels.update(cluster_labels)
233236
outfile.write("---\n")
234237
yaml.dump(component["template"], outfile, default_flow_style=False)
@@ -238,18 +241,14 @@ def write_components(
238241
def load_components(
239242
user_yaml: dict,
240243
name: str,
241-
namespace: str,
242-
local_queue: Optional[str],
243244
labels: dict,
244245
):
245246
component_list = []
246247
components = user_yaml.get("spec", "resources").get("components")
247-
lq_name = local_queue or get_default_kueue_name(namespace)
248248
cluster_labels = labels
249249
for component in components:
250250
if "template" in component:
251251
labels = component["template"]["metadata"]["labels"]
252-
labels.update({"kueue.x-k8s.io/queue-name": lq_name})
253252
labels.update(cluster_labels)
254253
component_list.append(component["template"])
255254

@@ -318,18 +317,24 @@ def generate_appwrapper(
318317
head_gpus,
319318
)
320319

320+
if appwrapper:
321+
add_queue_label(user_yaml, namespace, local_queue)
322+
else:
323+
if "template" in item:
324+
add_queue_label(item["template"], namespace, local_queue)
325+
321326
directory_path = os.path.expanduser("~/.codeflare/resources/")
322327
outfile = os.path.join(directory_path, appwrapper_name + ".yaml")
323328

324329
if write_to_file:
325330
if appwrapper:
326331
write_user_appwrapper(user_yaml, outfile)
327332
else:
328-
write_components(user_yaml, outfile, namespace, local_queue, labels)
333+
write_components(user_yaml, outfile, labels)
329334
return outfile
330335
else:
331336
if appwrapper:
332337
user_yaml = load_appwrapper(user_yaml, name)
333338
else:
334-
user_yaml = load_components(user_yaml, name, namespace, local_queue, labels)
339+
user_yaml = load_components(user_yaml, name, labels)
335340
return user_yaml

tests/test-case.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
apiVersion: workload.codeflare.dev/v1beta2
22
kind: AppWrapper
33
metadata:
4+
labels:
5+
kueue.x-k8s.io/queue-name: local-queue-default
46
name: unit-test-cluster
57
namespace: ns
68
spec:

tests/test-default-appwrapper.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
apiVersion: workload.codeflare.dev/v1beta2
22
kind: AppWrapper
33
metadata:
4+
labels:
5+
kueue.x-k8s.io/queue-name: local-queue-default
46
name: unit-test-default-cluster
57
namespace: opendatahub
68
spec:

tests/unit_test.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,12 @@ def test_config_creation():
258258

259259

260260
def test_cluster_creation(mocker):
261+
# Create AppWrapper containing a Ray Cluster with no local queue specified
261262
mocker.patch("kubernetes.client.ApisApi.get_api_versions")
263+
mocker.patch(
264+
"kubernetes.client.CustomObjectsApi.list_namespaced_custom_object",
265+
return_value=get_local_queue("kueue.x-k8s.io", "v1beta1", "ns", "localqueues"),
266+
)
262267
cluster = createClusterWithConfig(mocker)
263268
assert cluster.app_wrapper_yaml == f"{aw_dir}unit-test-cluster.yaml"
264269
assert cluster.app_wrapper_name == "unit-test-cluster"
@@ -390,6 +395,10 @@ def test_default_cluster_creation(mocker):
390395
"codeflare_sdk.cluster.cluster.get_current_namespace",
391396
return_value="opendatahub",
392397
)
398+
mocker.patch(
399+
"kubernetes.client.CustomObjectsApi.list_namespaced_custom_object",
400+
return_value=get_local_queue("kueue.x-k8s.io", "v1beta1", "ns", "localqueues"),
401+
)
393402
default_config = ClusterConfiguration(
394403
name="unit-test-default-cluster",
395404
image="quay.io/project-codeflare/ray:latest-py39-cu118",
@@ -501,6 +510,10 @@ def test_cluster_up_down(mocker):
501510
"kubernetes.client.CustomObjectsApi.list_cluster_custom_object",
502511
return_value={"items": []},
503512
)
513+
mocker.patch(
514+
"kubernetes.client.CustomObjectsApi.list_namespaced_custom_object",
515+
return_value=get_local_queue("kueue.x-k8s.io", "v1beta1", "ns", "localqueues"),
516+
)
504517
cluster = cluster = createClusterWithConfig(mocker)
505518
cluster.up()
506519
cluster.down()
@@ -606,6 +619,10 @@ def test_cluster_uris(mocker):
606619
"codeflare_sdk.cluster.cluster._get_ingress_domain",
607620
return_value="apps.cluster.awsroute.org",
608621
)
622+
mocker.patch(
623+
"kubernetes.client.CustomObjectsApi.list_namespaced_custom_object",
624+
return_value=get_local_queue("kueue.x-k8s.io", "v1beta1", "ns", "localqueues"),
625+
)
609626
cluster = cluster = createClusterWithConfig(mocker)
610627
mocker.patch(
611628
"kubernetes.client.NetworkingV1Api.list_namespaced_ingress",
@@ -728,6 +745,10 @@ def ingress_retrieval(
728745

729746
def test_ray_job_wrapping(mocker):
730747
mocker.patch("kubernetes.client.ApisApi.get_api_versions")
748+
mocker.patch(
749+
"kubernetes.client.CustomObjectsApi.list_namespaced_custom_object",
750+
return_value=get_local_queue("kueue.x-k8s.io", "v1beta1", "ns", "localqueues"),
751+
)
731752
cluster = cluster = createClusterWithConfig(mocker)
732753
cluster.config.image = "quay.io/project-codeflare/ray:latest-py39-cu118"
733754
mocker.patch(
@@ -848,6 +869,7 @@ def test_ray_details(mocker, capsys):
848869
image="quay.io/project-codeflare/ray:latest-py39-cu118",
849870
write_to_file=True,
850871
appwrapper=True,
872+
local_queue="local_default_queue",
851873
)
852874
)
853875
captured = capsys.readouterr()
@@ -2224,6 +2246,7 @@ def test_cluster_status(mocker):
22242246
image="quay.io/project-codeflare/ray:latest-py39-cu118",
22252247
write_to_file=True,
22262248
appwrapper=True,
2249+
local_queue="local_default_queue",
22272250
)
22282251
)
22292252
mocker.patch("codeflare_sdk.cluster.cluster._app_wrapper_status", return_value=None)
@@ -2314,6 +2337,7 @@ def test_wait_ready(mocker, capsys):
23142337
image="quay.io/project-codeflare/ray:latest-py39-cu118",
23152338
write_to_file=True,
23162339
appwrapper=True,
2340+
local_queue="local-queue-default",
23172341
)
23182342
)
23192343
try:

0 commit comments

Comments
 (0)