Skip to content

Commit b035c43

Browse files
authored
feat(kuberay): add resolve_hostname hook to KubeRayResource (#335)
1 parent f9f0e7d commit b035c43

4 files changed

Lines changed: 21 additions & 5 deletions

File tree

docs/api/kuberay.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ These resources initialize Ray client connection with a remote cluster.
114114
- "image"
115115
- "deployment_name"
116116
- "poll_interval"
117+
- "resolve_hostname"
117118

118119
---
119120

src/dagster_ray/kuberay/resources/base.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
from dagster_ray._base.constants import DEFAULT_DEPLOYMENT_NAME
99
from dagster_ray._base.resources import RayResource
10-
from dagster_ray.kuberay.utils import get_k8s_object_name
10+
from dagster_ray.kuberay.utils import get_k8s_object_name, k8s_service_fqdn
1111
from dagster_ray.types import AnyDagsterContext
1212

1313

@@ -31,6 +31,21 @@ class BaseKubeRayResource(RayResource, ABC):
3131
def namespace(self) -> str:
3232
raise NotImplementedError
3333

34+
def resolve_hostname(self, service_name: str, namespace: str) -> str:
35+
"""Resolve the host address from a Kubernetes service name and namespace.
36+
37+
By default, returns the in-cluster FQDN (e.g. `my-svc.namespace.svc.cluster.local`).
38+
Override this method to customize the host address, for example to use a custom domain:
39+
40+
Example:
41+
```python
42+
class MyKubeRayCluster(KubeRayCluster):
43+
def resolve_hostname(self, service_name: str, namespace: str) -> str:
44+
return f"{service_name}.{namespace}.company.com"
45+
```
46+
"""
47+
return k8s_service_fqdn(service_name, namespace)
48+
3449
def _get_step_name(self, context: AnyDagsterContext) -> str:
3550
assert isinstance(context.run_id, str)
3651
assert context.dagster_run is not None

src/dagster_ray/kuberay/resources/raycluster.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
from dagster_ray.kuberay.configs import ClusterSharing, RayClusterConfig
1313
from dagster_ray.kuberay.leader_election import LeaderElection
1414
from dagster_ray.kuberay.resources.base import BaseKubeRayResource
15-
from dagster_ray.kuberay.utils import k8s_service_fqdn, normalize_k8s_label_values
15+
from dagster_ray.kuberay.utils import normalize_k8s_label_values
1616
from dagster_ray.types import AnyDagsterContext
1717
from dagster_ray.utils import get_dagster_run
1818

@@ -272,7 +272,7 @@ def wait(self, context: AnyDagsterContext):
272272
)[ # pyright: ignore
273273
"head"
274274
]["serviceName"]
275-
self._host = k8s_service_fqdn(service_name, self.namespace)
275+
self._host = self.resolve_hostname(service_name, self.namespace)
276276

277277
@override
278278
def on_ready(self, context: AnyDagsterContext):

src/dagster_ray/kuberay/resources/rayjob.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from dagster_ray.kuberay.client import RayJobClient
99
from dagster_ray.kuberay.configs import RayJobConfig, RayJobSpec
1010
from dagster_ray.kuberay.resources.base import BaseKubeRayResource
11-
from dagster_ray.kuberay.utils import k8s_service_fqdn, normalize_k8s_label_values
11+
from dagster_ray.kuberay.utils import normalize_k8s_label_values
1212
from dagster_ray.types import AnyDagsterContext
1313

1414
if TYPE_CHECKING:
@@ -163,7 +163,7 @@ def wait(self, context: AnyDagsterContext):
163163
)[ # pyright: ignore
164164
"head"
165165
]["serviceName"]
166-
self._host = k8s_service_fqdn(service_name, self.namespace)
166+
self._host = self.resolve_hostname(service_name, self.namespace)
167167

168168
@override
169169
def on_ready(self, context: AnyDagsterContext):

0 commit comments

Comments
 (0)