Skip to content

Commit d919c23

Browse files
Added local_interactive annotation
1 parent 28ad59c commit d919c23

File tree

8 files changed

+36
-91
lines changed

8 files changed

+36
-91
lines changed

src/codeflare_sdk/cluster/cluster.py

Lines changed: 10 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -504,45 +504,13 @@ def torchx_config(
504504

505505
def from_k8_cluster_object(rc, mcad=True, ingress_domain=None, ingress_options={}, write_to_file=False):
506506
config_check()
507-
cluster_name = rc["metadata"]["name"]
508-
if is_openshift_cluster():
509-
try:
510-
api_instance = client.CustomObjectsApi(api_config_handler())
511-
routes = api_instance.list_namespaced_custom_object(
512-
group="route.openshift.io",
513-
version="v1",
514-
namespace=rc["metadata"]["namespace"],
515-
plural="routes",
516-
)
517-
except Exception as e: # pragma no cover
518-
return _kube_api_error_handling(e)
519-
for route in routes["items"]:
520-
if (
521-
route["metadata"]["name"] == f"rayclient-{cluster_name}"
522-
and route["spec"]["port"]["targetPort"] == "client"
523-
):
524-
local_interactive = True
525-
break
526-
else:
527-
local_interactive = False
507+
if (
508+
rc["metadata"]["annotations"]["sdk.codeflare.dev/local_interactive"]
509+
== "true"
510+
):
511+
local_interactive = True
528512
else:
529-
try:
530-
api_instance = client.NetworkingV1Api(api_config_handler())
531-
ingresses = api_instance.list_namespaced_ingress(
532-
rc["metadata"]["namespace"]
533-
)
534-
except Exception as e: # pragma no cover
535-
return _kube_api_error_handling(e)
536-
for ingress in ingresses.items:
537-
if (
538-
f"rayclient-{cluster_name}" == ingress.metadata.name
539-
and ingress.spec.rules[0].http.paths[0].backend.service.port.number
540-
== 10001
541-
):
542-
local_interactive = True
543-
break
544-
else:
545-
local_interactive = False
513+
local_interactive = False
546514

547515
machine_types = (
548516
rc["metadata"]["labels"]["orderedinstance"].split("_")
@@ -551,9 +519,10 @@ def from_k8_cluster_object(rc, mcad=True, ingress_domain=None, ingress_options={
551519
)
552520

553521
if local_interactive and ingress_domain == None:
554-
ingress_domain = get_ingress_domain_from_client(
555-
rc["metadata"]["name"], rc["metadata"]["namespace"]
556-
)
522+
ingress_domain = rc["metadata"]["annotations"][
523+
"sdk.codeflare.dev/ingress_domain"
524+
]
525+
557526
cluster_config = ClusterConfiguration(
558527
name=rc["metadata"]["name"],
559528
namespace=rc["metadata"]["namespace"],
@@ -1080,30 +1049,3 @@ def _copy_to_ray(cluster: Cluster) -> RayCluster:
10801049
if ray.status == CodeFlareClusterStatus.READY:
10811050
ray.status = RayClusterStatus.READY
10821051
return ray
1083-
1084-
1085-
def get_ingress_domain_from_client(cluster_name: str, namespace: str = "default"):
1086-
if is_openshift_cluster():
1087-
try:
1088-
config_check()
1089-
api_instance = client.CustomObjectsApi(api_config_handler())
1090-
route = api_instance.get_namespaced_custom_object(
1091-
group="route.openshift.io",
1092-
version="v1",
1093-
namespace=namespace,
1094-
plural="routes",
1095-
name=f"rayclient-{cluster_name}",
1096-
)
1097-
return route["spec"]["host"].split(".", 1)[1]
1098-
except Exception as e: # pragma no cover
1099-
return _kube_api_error_handling(e)
1100-
else:
1101-
try:
1102-
config_check()
1103-
api_instance = client.NetworkingV1Api(api_config_handler())
1104-
ingress = api_instance.read_namespaced_ingress(
1105-
f"rayclient-{cluster_name}", namespace
1106-
)
1107-
return ingress.spec.rules[0].host.split(".", 1)[1]
1108-
except Exception as e: # pragma no cover
1109-
return _kube_api_error_handling(e)

src/codeflare_sdk/templates/base-template.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ spec:
4040
apiVersion: ray.io/v1
4141
kind: RayCluster
4242
metadata:
43+
annotations:
44+
sdk.codeflare.dev/local_interactive: "false"
4345
labels:
4446
workload.codeflare.dev/appwrapper: "aw-kuberay"
4547
controller-tools.k8s.io: "1.0"

src/codeflare_sdk/utils/generate_yaml.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,12 @@ def enable_local_interactive(resources, cluster_name, namespace, ingress_domain)
461461
namespace,
462462
ingress_domain,
463463
)
464+
item["generictemplate"]["metadata"]["annotations"][
465+
"sdk.codeflare.dev/local_interactive"
466+
] = "true"
467+
item["generictemplate"]["metadata"]["annotations"][
468+
"sdk.codeflare.dev/ingress_domain"
469+
] = ingress_domain
464470

465471
item["generictemplate"]["spec"]["headGroupSpec"]["template"]["spec"][
466472
"initContainers"

tests/test-case-bad.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ spec:
3232
apiVersion: ray.io/v1
3333
kind: RayCluster
3434
metadata:
35+
annotations:
36+
sdk.codeflare.dev/local_interactive: 'false'
3537
labels:
3638
workload.codeflare.dev/appwrapper: unit-test-cluster
3739
controller-tools.k8s.io: '1.0'

tests/test-case-no-mcad.yamls

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
apiVersion: ray.io/v1
33
kind: RayCluster
44
metadata:
5+
annotations:
6+
sdk.codeflare.dev/local_interactive: 'false'
57
labels:
68
controller-tools.k8s.io: '1.0'
79
workload.codeflare.dev/appwrapper: unit-test-cluster-ray

tests/test-case-prio.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ spec:
3232
apiVersion: ray.io/v1
3333
kind: RayCluster
3434
metadata:
35+
annotations:
36+
sdk.codeflare.dev/local_interactive: 'false'
3537
labels:
3638
controller-tools.k8s.io: '1.0'
3739
workload.codeflare.dev/appwrapper: prio-test-cluster

tests/test-case.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ spec:
3131
apiVersion: ray.io/v1
3232
kind: RayCluster
3333
metadata:
34+
annotations:
35+
sdk.codeflare.dev/local_interactive: 'false'
3436
labels:
3537
controller-tools.k8s.io: '1.0'
3638
workload.codeflare.dev/appwrapper: unit-test-cluster

tests/unit_test.py

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
_app_wrapper_status,
4141
_ray_cluster_status,
4242
_get_ingress_domain,
43-
get_ingress_domain_from_client,
4443
)
4544
from codeflare_sdk.cluster.auth import (
4645
TokenAuthentication,
@@ -978,6 +977,10 @@ def get_ray_obj(group, version, namespace, plural, cls=None):
978977
"metadata": {
979978
"creationTimestamp": "2024-03-05T09:55:37Z",
980979
"generation": 1,
980+
"annotations": {
981+
"sdk.codeflare.dev/local_interactive": "true",
982+
"sdk.codeflare.dev/ingress_domain": "apps.cluster.awsroute.org",
983+
},
981984
"labels": {
982985
"appwrapper.mcad.ibm.com": "quicktest",
983986
"controller-tools.k8s.io": "1.0",
@@ -1531,6 +1534,9 @@ def get_aw_obj(group, version, namespace, plural):
15311534
"apiVersion": "ray.io/v1",
15321535
"kind": "RayCluster",
15331536
"metadata": {
1537+
"annotations": {
1538+
"sdk.codeflare.dev/local_interactive": "false"
1539+
},
15341540
"labels": {
15351541
"workload.codeflare.dev/appwrapper": "quicktest1",
15361542
"controller-tools.k8s.io": "1.0",
@@ -1859,6 +1865,9 @@ def get_aw_obj(group, version, namespace, plural):
18591865
"apiVersion": "ray.io/v1",
18601866
"kind": "RayCluster",
18611867
"metadata": {
1868+
"annotations": {
1869+
"sdk.codeflare.dev/local_interactive": "false"
1870+
},
18621871
"labels": {
18631872
"workload.codeflare.dev/appwrapper": "quicktest2",
18641873
"controller-tools.k8s.io": "1.0",
@@ -2210,28 +2219,6 @@ def test_get_cluster(mocker):
22102219
assert cluster_config.num_workers == 1
22112220

22122221

2213-
def test_get_ingress_domain_from_client(mocker):
2214-
mocker.patch("kubernetes.config.load_kube_config")
2215-
mocker.patch("kubernetes.client.ApisApi.get_api_versions")
2216-
mocker.patch(
2217-
"kubernetes.client.NetworkingV1Api.read_namespaced_ingress",
2218-
return_value=ingress_retrieval(cluster_name="unit-test-cluster").items[0],
2219-
)
2220-
2221-
ingress_domain = get_ingress_domain_from_client("unit-test-cluster", "ns")
2222-
assert ingress_domain == "apps.cluster.awsroute.org"
2223-
2224-
mocker.patch(
2225-
"codeflare_sdk.utils.generate_yaml.is_openshift_cluster", return_value=True
2226-
)
2227-
mocker.patch(
2228-
"kubernetes.client.CustomObjectsApi.get_namespaced_custom_object",
2229-
side_effect=route_retrieval,
2230-
)
2231-
ingress_domain = get_ingress_domain_from_client("unit-test-cluster", "ns")
2232-
assert ingress_domain == "apps.cluster.awsroute.org"
2233-
2234-
22352222
def route_retrieval(group, version, namespace, plural, name):
22362223
assert group == "route.openshift.io"
22372224
assert version == "v1"

0 commit comments

Comments
 (0)