Skip to content

Commit b0551dd

Browse files
committed
Also must add local_queue label to appwrappers
1 parent 947cff5 commit b0551dd

File tree

4 files changed

+47
-18
lines changed

4 files changed

+47
-18
lines changed

src/codeflare_sdk/utils/generate_yaml.py

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -228,11 +228,20 @@ def local_queue_exists(namespace: str, local_queue_name: str):
228228
return False
229229

230230

231+
def add_queue_label(item: dict, namespace: str, local_queue: Optional[str]):
232+
lq_name = local_queue or get_default_kueue_name(namespace)
233+
if not local_queue_exists(namespace, lq_name):
234+
raise ValueError(
235+
"local_queue provided does not exist or is not in this namespace. Please provide the correct local_queue name in Cluster Configuration"
236+
)
237+
if not "labels" in item["metadata"]:
238+
item["metadata"]["labels"] = {}
239+
item["metadata"]["labels"].update({"kueue.x-k8s.io/queue-name": lq_name})
240+
241+
231242
def write_components(
232243
user_yaml: dict,
233244
output_file_name: str,
234-
namespace: str,
235-
local_queue: Optional[str],
236245
labels: dict,
237246
):
238247
# Create the directory if it doesn't exist
@@ -242,17 +251,11 @@ def write_components(
242251

243252
components = user_yaml.get("spec", "resources").get("components")
244253
open(output_file_name, "w").close()
245-
lq_name = local_queue or get_default_kueue_name(namespace)
246254
cluster_labels = labels
247-
if not local_queue_exists(namespace, lq_name):
248-
raise ValueError(
249-
"local_queue provided does not exist or is not in this namespace. Please provide the correct local_queue name in Cluster Configuration"
250-
)
251255
with open(output_file_name, "a") as outfile:
252256
for component in components:
253257
if "template" in component:
254258
labels = component["template"]["metadata"]["labels"]
255-
labels.update({"kueue.x-k8s.io/queue-name": lq_name})
256259
labels.update(cluster_labels)
257260
outfile.write("---\n")
258261
yaml.dump(component["template"], outfile, default_flow_style=False)
@@ -262,22 +265,14 @@ def write_components(
262265
def load_components(
263266
user_yaml: dict,
264267
name: str,
265-
namespace: str,
266-
local_queue: Optional[str],
267268
labels: dict,
268269
):
269270
component_list = []
270271
components = user_yaml.get("spec", "resources").get("components")
271-
lq_name = local_queue or get_default_kueue_name(namespace)
272272
cluster_labels = labels
273-
if not local_queue_exists(namespace, lq_name):
274-
raise ValueError(
275-
"local_queue provided does not exist or is not in this namespace. Please provide the correct local_queue name in Cluster Configuration"
276-
)
277273
for component in components:
278274
if "template" in component:
279275
labels = component["template"]["metadata"]["labels"]
280-
labels.update({"kueue.x-k8s.io/queue-name": lq_name})
281276
labels.update(cluster_labels)
282277
component_list.append(component["template"])
283278

@@ -346,18 +341,24 @@ def generate_appwrapper(
346341
head_gpus,
347342
)
348343

344+
if appwrapper:
345+
add_queue_label(user_yaml, namespace, local_queue)
346+
else:
347+
if "template" in item:
348+
add_queue_label(item["template"], namespace, local_queue)
349+
349350
directory_path = os.path.expanduser("~/.codeflare/resources/")
350351
outfile = os.path.join(directory_path, appwrapper_name + ".yaml")
351352

352353
if write_to_file:
353354
if appwrapper:
354355
write_user_appwrapper(user_yaml, outfile)
355356
else:
356-
write_components(user_yaml, outfile, namespace, local_queue, labels)
357+
write_components(user_yaml, outfile, labels)
357358
return outfile
358359
else:
359360
if appwrapper:
360361
user_yaml = load_appwrapper(user_yaml, name)
361362
else:
362-
user_yaml = load_components(user_yaml, name, namespace, local_queue, labels)
363+
user_yaml = load_components(user_yaml, name, labels)
363364
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
@@ -271,7 +271,12 @@ def test_config_creation():
271271

272272

273273
def test_cluster_creation(mocker):
274+
# Create AppWrapper containing a Ray Cluster with no local queue specified
274275
mocker.patch("kubernetes.client.ApisApi.get_api_versions")
276+
mocker.patch(
277+
"kubernetes.client.CustomObjectsApi.list_namespaced_custom_object",
278+
return_value=get_local_queue("kueue.x-k8s.io", "v1beta1", "ns", "localqueues"),
279+
)
275280
cluster = createClusterWithConfig(mocker)
276281
assert cluster.app_wrapper_yaml == f"{aw_dir}unit-test-cluster.yaml"
277282
assert cluster.app_wrapper_name == "unit-test-cluster"
@@ -416,6 +421,10 @@ def test_default_cluster_creation(mocker):
416421
"codeflare_sdk.cluster.cluster.get_current_namespace",
417422
return_value="opendatahub",
418423
)
424+
mocker.patch(
425+
"kubernetes.client.CustomObjectsApi.list_namespaced_custom_object",
426+
return_value=get_local_queue("kueue.x-k8s.io", "v1beta1", "ns", "localqueues"),
427+
)
419428
default_config = ClusterConfiguration(
420429
name="unit-test-default-cluster",
421430
image="quay.io/project-codeflare/ray:latest-py39-cu118",
@@ -527,6 +536,10 @@ def test_cluster_up_down(mocker):
527536
"kubernetes.client.CustomObjectsApi.list_cluster_custom_object",
528537
return_value={"items": []},
529538
)
539+
mocker.patch(
540+
"kubernetes.client.CustomObjectsApi.list_namespaced_custom_object",
541+
return_value=get_local_queue("kueue.x-k8s.io", "v1beta1", "ns", "localqueues"),
542+
)
530543
cluster = cluster = createClusterWithConfig(mocker)
531544
cluster.up()
532545
cluster.down()
@@ -632,6 +645,10 @@ def test_cluster_uris(mocker):
632645
"codeflare_sdk.cluster.cluster._get_ingress_domain",
633646
return_value="apps.cluster.awsroute.org",
634647
)
648+
mocker.patch(
649+
"kubernetes.client.CustomObjectsApi.list_namespaced_custom_object",
650+
return_value=get_local_queue("kueue.x-k8s.io", "v1beta1", "ns", "localqueues"),
651+
)
635652
cluster = cluster = createClusterWithConfig(mocker)
636653
mocker.patch(
637654
"kubernetes.client.NetworkingV1Api.list_namespaced_ingress",
@@ -754,6 +771,10 @@ def ingress_retrieval(
754771

755772
def test_ray_job_wrapping(mocker):
756773
mocker.patch("kubernetes.client.ApisApi.get_api_versions")
774+
mocker.patch(
775+
"kubernetes.client.CustomObjectsApi.list_namespaced_custom_object",
776+
return_value=get_local_queue("kueue.x-k8s.io", "v1beta1", "ns", "localqueues"),
777+
)
757778
cluster = cluster = createClusterWithConfig(mocker)
758779
cluster.config.image = "quay.io/project-codeflare/ray:latest-py39-cu118"
759780
mocker.patch(
@@ -874,6 +895,7 @@ def test_ray_details(mocker, capsys):
874895
image="quay.io/project-codeflare/ray:latest-py39-cu118",
875896
write_to_file=True,
876897
appwrapper=True,
898+
local_queue="local_default_queue",
877899
)
878900
)
879901
captured = capsys.readouterr()
@@ -2250,6 +2272,7 @@ def test_cluster_status(mocker):
22502272
image="quay.io/project-codeflare/ray:latest-py39-cu118",
22512273
write_to_file=True,
22522274
appwrapper=True,
2275+
local_queue="local_default_queue",
22532276
)
22542277
)
22552278
mocker.patch("codeflare_sdk.cluster.cluster._app_wrapper_status", return_value=None)
@@ -2340,6 +2363,7 @@ def test_wait_ready(mocker, capsys):
23402363
image="quay.io/project-codeflare/ray:latest-py39-cu118",
23412364
write_to_file=True,
23422365
appwrapper=True,
2366+
local_queue="local-queue-default",
23432367
)
23442368
)
23452369
try:

0 commit comments

Comments
 (0)