2020from typing import Dict , Any , Optional , Tuple
2121from python_client .kuberay_job_api import RayjobApi
2222
23- from ..cluster .cluster import Cluster
2423from ..cluster .config import ClusterConfiguration
2524from ..cluster .build_ray_cluster import build_ray_cluster
25+ from ...common .utils import get_current_namespace
2626
2727from .status import (
2828 RayJobDeploymentStatus ,
@@ -48,7 +48,7 @@ def __init__(
4848 job_name : str ,
4949 cluster_name : Optional [str ] = None ,
5050 cluster_config : Optional [ClusterConfiguration ] = None ,
51- namespace : str = "default" ,
51+ namespace : Optional [ str ] = None ,
5252 entrypoint : Optional [str ] = None ,
5353 runtime_env : Optional [Dict [str , Any ]] = None ,
5454 shutdown_after_job_finishes : bool = True ,
@@ -62,7 +62,7 @@ def __init__(
6262 job_name: The name for the Ray job
6363 cluster_name: The name of an existing Ray cluster (optional if cluster_config provided)
6464 cluster_config: Configuration for creating a new cluster (optional if cluster_name provided)
65- namespace: The Kubernetes namespace (default: "default")
65+ namespace: The Kubernetes namespace
6666 entrypoint: The Python script or command to run (required for submission)
6767 runtime_env: Ray runtime environment configuration (optional)
6868 shutdown_after_job_finishes: Whether to automatically cleanup the cluster after job completion (default: True)
@@ -77,13 +77,23 @@ def __init__(
7777 raise ValueError ("Cannot specify both cluster_name and cluster_config" )
7878
7979 self .name = job_name
80- self .namespace = namespace
8180 self .entrypoint = entrypoint
8281 self .runtime_env = runtime_env
8382 self .shutdown_after_job_finishes = shutdown_after_job_finishes
8483 self .ttl_seconds_after_finished = ttl_seconds_after_finished
8584 self .active_deadline_seconds = active_deadline_seconds
8685
86+ if namespace is None :
87+ detected_namespace = get_current_namespace ()
88+ if detected_namespace :
89+ self .namespace = detected_namespace
90+ logger .info (f"Auto-detected namespace: { self .namespace } " )
91+ else :
92+ self .namespace = "default"
93+ logger .warning ("Could not auto-detect namespace, using 'default'" )
94+ else :
95+ self .namespace = namespace
96+
8797 # Cluster configuration
8898 self ._cluster_name = cluster_name
8999 self ._cluster_config = cluster_config
@@ -92,10 +102,10 @@ def __init__(
92102 if cluster_config is not None :
93103 # Ensure cluster config has the same namespace as the job
94104 if cluster_config .namespace is None :
95- cluster_config .namespace = namespace
96- elif cluster_config .namespace != namespace :
105+ cluster_config .namespace = self . namespace
106+ elif cluster_config .namespace != self . namespace :
97107 logger .warning (
98- f"Cluster config namespace ({ cluster_config .namespace } ) differs from job namespace ({ namespace } )"
108+ f"Cluster config namespace ({ cluster_config .namespace } ) differs from job namespace ({ self . namespace } )"
99109 )
100110
101111 self .cluster_name = cluster_config .name or f"{ job_name } -cluster"
0 commit comments