From 1ba95d9e0d73b12b7cb8918537173e32d3642eac Mon Sep 17 00:00:00 2001 From: Sebastian Luna-Valero Date: Thu, 11 Sep 2025 16:52:27 +0200 Subject: [PATCH 1/5] Environment variables as cluster option --- providers/kubernetes/daskhub.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/providers/kubernetes/daskhub.yaml b/providers/kubernetes/daskhub.yaml index f27ab52..a2cd7ab 100644 --- a/providers/kubernetes/daskhub.yaml +++ b/providers/kubernetes/daskhub.yaml @@ -19,7 +19,7 @@ dask-gateway: c.ClusterConfig.cluster_max_workers = 4 c.ClusterConfig.idle_timeout = 1800 optionHandler: | - from dask_gateway_server.options import Options, Integer, Float, String + from dask_gateway_server.options import Options, Integer, Float, String, Mapping def options_handler(options): if ":" not in options.image: @@ -28,12 +28,14 @@ dask-gateway: "worker_cores": options.worker_cores, "worker_memory": int(options.worker_memory * 2 ** 30), "image": options.image, + "environment_vars": options.environment_vars, } c.Backend.cluster_options = Options( Integer("worker_cores", default=1, min=1, max=8, label="Worker Cores"), Float("worker_memory", default=2, min=2, max=32, label="Worker Memory (GiB)"), String("image", default="quay.io/pangeo/pangeo-notebook:2025.06.02", label="Image"), + Mapping("environment_vars", {}, label="Environment Variables"), handler=options_handler, ) prefix: /services/dask-gateway From 5f39017514991c8b3fd8d76d07b4bd1d428af560 Mon Sep 17 00:00:00 2001 From: Sebastian Luna-Valero Date: Mon, 22 Sep 2025 10:02:57 +0200 Subject: [PATCH 2/5] follow 2i2c example --- providers/kubernetes/daskhub.yaml | 34 ++++++++++++++++--------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/providers/kubernetes/daskhub.yaml b/providers/kubernetes/daskhub.yaml index a2cd7ab..115671a 100644 --- a/providers/kubernetes/daskhub.yaml +++ b/providers/kubernetes/daskhub.yaml @@ -21,23 +21,25 @@ dask-gateway: optionHandler: | from dask_gateway_server.options import Options, Integer, Float, String, Mapping - def options_handler(options): - if ":" not in options.image: - raise ValueError("When specifying an image you must also provide a tag") - return { - "worker_cores": options.worker_cores, - "worker_memory": int(options.worker_memory * 2 ** 30), - "image": options.image, - "environment_vars": options.environment_vars, - } + def cluster_options(user): + def option_handler(options): + if ":" not in options.image: + raise ValueError("When specifying an image you must also provide a tag") - c.Backend.cluster_options = Options( - Integer("worker_cores", default=1, min=1, max=8, label="Worker Cores"), - Float("worker_memory", default=2, min=2, max=32, label="Worker Memory (GiB)"), - String("image", default="quay.io/pangeo/pangeo-notebook:2025.06.02", label="Image"), - Mapping("environment_vars", {}, label="Environment Variables"), - handler=options_handler, - ) + return { + "worker_cores": options.worker_cores, + "worker_memory": int(options.worker_memory * 2 ** 30), + "image": options.image, + "environment_vars": options.environment_vars, + } + return Options( + Integer("worker_cores", default=1, min=1, max=1, label="Worker Cores"), + Float("worker_memory", default=2, min=2, max=7, label="Worker Memory (GiB)"), + String("image", default="quay.io/pangeo/pangeo-notebook:2025.06.02", label="Image"), + Mapping("environment_vars", {}, label="Environment Variables"), + handler=options_handler, + ) + c.Backend.cluster_options = cluster_options prefix: /services/dask-gateway backend: scheduler: From cc5454e9b824b8bf631b80f120765d287405a59d Mon Sep 17 00:00:00 2001 From: Sebastian Luna-Valero Date: Tue, 7 Oct 2025 08:55:26 +0200 Subject: [PATCH 3/5] add DASK_GATEWAY__CLUSTER__OPTIONS__IMAGE --- providers/kubernetes/daskhub.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/providers/kubernetes/daskhub.yaml b/providers/kubernetes/daskhub.yaml index 115671a..9b5b6c8 100644 --- a/providers/kubernetes/daskhub.yaml +++ b/providers/kubernetes/daskhub.yaml @@ -193,6 +193,8 @@ jupyterhub: type: RuntimeDefault singleuser: + extraEnv: + DASK_GATEWAY__CLUSTER__OPTIONS__IMAGE: '{JUPYTER_IMAGE_SPEC}' extraFiles: jupyter_notebook_config.json: mountPath: /etc/jupyter/jupyter_notebook_config.json From 89f6acc16c403b73f1b4959b5a5f871fe4e9561f Mon Sep 17 00:00:00 2001 From: Sebastian Luna-Valero Date: Tue, 7 Oct 2025 09:12:40 +0200 Subject: [PATCH 4/5] bugfix --- providers/kubernetes/daskhub.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/providers/kubernetes/daskhub.yaml b/providers/kubernetes/daskhub.yaml index 9b5b6c8..3c116ec 100644 --- a/providers/kubernetes/daskhub.yaml +++ b/providers/kubernetes/daskhub.yaml @@ -194,7 +194,7 @@ jupyterhub: singleuser: extraEnv: - DASK_GATEWAY__CLUSTER__OPTIONS__IMAGE: '{JUPYTER_IMAGE_SPEC}' + DASK_GATEWAY__CLUSTER__OPTIONS__IMAGE: '{{JUPYTER_IMAGE_SPEC}}' extraFiles: jupyter_notebook_config.json: mountPath: /etc/jupyter/jupyter_notebook_config.json From 20e7662424dff614610b7acabfc416d2096ec401 Mon Sep 17 00:00:00 2001 From: Sebastian Luna-Valero Date: Thu, 9 Oct 2025 08:21:00 +0200 Subject: [PATCH 5/5] DASK_GATEWAY__CLUSTER__OPTIONS__IMAGE conflicts when setting the workers image manually from Python --- providers/kubernetes/daskhub.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/providers/kubernetes/daskhub.yaml b/providers/kubernetes/daskhub.yaml index 3c116ec..115671a 100644 --- a/providers/kubernetes/daskhub.yaml +++ b/providers/kubernetes/daskhub.yaml @@ -193,8 +193,6 @@ jupyterhub: type: RuntimeDefault singleuser: - extraEnv: - DASK_GATEWAY__CLUSTER__OPTIONS__IMAGE: '{{JUPYTER_IMAGE_SPEC}}' extraFiles: jupyter_notebook_config.json: mountPath: /etc/jupyter/jupyter_notebook_config.json