Skip to content

Commit ebe1671

Browse files
jeremymanningclaude
andcommitted
Add Remote Kubernetes Cluster checkbox for connection settings
- Add checkbox 'Remote Kubernetes Cluster' in Kubernetes settings section - Connection settings now show for Kubernetes only when checkbox is checked - Handle local vs remote Kubernetes cluster configurations properly - Save/load k8s_remote flag in configuration files - Connection details (host, port, username, key) saved only for remote K8s - Maintains backward compatibility with existing configurations Enhanced logic: - Local cluster: No connection/K8s settings - Remote clusters (ssh/slurm/pbs/sge): Connection settings only - Kubernetes cluster: K8s settings always, connection settings if remote checkbox checked 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 9078091 commit ebe1671

File tree

1 file changed

+32
-4
lines changed

1 file changed

+32
-4
lines changed

clustrix/notebook_magic.py

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,14 @@ def _create_dynamic_fields(self):
470470
style=style,
471471
layout=half_layout,
472472
)
473+
# Remote Kubernetes checkbox
474+
self.k8s_remote_checkbox = widgets.Checkbox(
475+
value=False,
476+
description="Remote Kubernetes Cluster",
477+
style=style,
478+
layout=full_layout,
479+
)
480+
self.k8s_remote_checkbox.observe(self._on_k8s_remote_change, names="value")
473481
# Remote work directory
474482
self.work_dir_field = widgets.Text(
475483
value="/tmp/clustrix",
@@ -581,6 +589,7 @@ def _create_section_containers(self):
581589
[
582590
widgets.HTML("<h5>Kubernetes Settings</h5>"),
583591
widgets.HBox([self.k8s_namespace, self.k8s_image]),
592+
self.k8s_remote_checkbox,
584593
]
585594
)
586595

@@ -603,16 +612,29 @@ def _on_cluster_type_change(self, change):
603612
self.k8s_fields.layout.display = "none"
604613
self.work_dir_field.layout.display = "none"
605614
elif cluster_type == "kubernetes":
606-
# Show Kubernetes-specific fields, hide SSH connection fields
607-
self.connection_fields.layout.display = "none"
615+
# Show Kubernetes-specific fields, conditionally show connection fields
608616
self.k8s_fields.layout.display = ""
609617
self.work_dir_field.layout.display = ""
618+
# Connection fields depend on remote checkbox
619+
self._update_kubernetes_connection_visibility()
610620
else: # ssh, slurm, pbs, sge
611621
# Show SSH-based connection fields, hide Kubernetes fields
612622
self.connection_fields.layout.display = ""
613623
self.k8s_fields.layout.display = "none"
614624
self.work_dir_field.layout.display = ""
615625

626+
def _on_k8s_remote_change(self, change):
627+
"""Handle remote Kubernetes checkbox change."""
628+
self._update_kubernetes_connection_visibility()
629+
630+
def _update_kubernetes_connection_visibility(self):
631+
"""Update connection fields visibility for Kubernetes clusters."""
632+
if self.cluster_type.value == "kubernetes":
633+
if self.k8s_remote_checkbox.value:
634+
self.connection_fields.layout.display = ""
635+
else:
636+
self.connection_fields.layout.display = "none"
637+
616638
def _load_config_to_widgets(self, config_name: str):
617639
"""Load a configuration into the widgets."""
618640
if config_name not in self.configs:
@@ -634,6 +656,7 @@ def _load_config_to_widgets(self, config_name: str):
634656
# Kubernetes fields
635657
self.k8s_namespace.value = config.get("k8s_namespace", "default")
636658
self.k8s_image.value = config.get("k8s_image", "python:3.11-slim")
659+
self.k8s_remote_checkbox.value = config.get("k8s_remote", False)
637660
# Paths
638661
self.work_dir_field.value = config.get("remote_work_dir", "/tmp/clustrix")
639662
# Advanced options
@@ -668,11 +691,16 @@ def _save_config_from_widgets(self) -> Dict[str, Any]:
668691
# Add cluster-specific fields
669692
if self.cluster_type.value != "local":
670693
if self.cluster_type.value == "kubernetes":
671-
config["cluster_host"] = self.host_field.value
672-
config["cluster_port"] = self.port_field.value
673694
config["remote_work_dir"] = self.work_dir_field.value
674695
config["k8s_namespace"] = self.k8s_namespace.value
675696
config["k8s_image"] = self.k8s_image.value
697+
config["k8s_remote"] = self.k8s_remote_checkbox.value
698+
# Only include connection details if remote Kubernetes
699+
if self.k8s_remote_checkbox.value:
700+
config["cluster_host"] = self.host_field.value
701+
config["cluster_port"] = self.port_field.value
702+
config["username"] = self.username_field.value
703+
config["key_file"] = self.ssh_key_field.value
676704
else: # SSH-based clusters
677705
config["cluster_host"] = self.host_field.value
678706
config["cluster_port"] = self.port_field.value

0 commit comments

Comments
 (0)