Commit eec629f7 authored by Duggan, John's avatar Duggan, John
Browse files

Successfully establish an SSH proxy-based filesystem access to Perlmutter

parent 67e24cc2
Loading
Loading
Loading
Loading
Loading
+147 −79

File changed.

Preview size limit exceeded, changes collapsed.

+2 −1
Original line number Diff line number Diff line
@@ -30,8 +30,9 @@ nova-galaxy = ">=0.11.1"
netcdf4 = ">=1.7.2"
Authlib = "*"
sfapi-client = ">=0.4.1,<0.5"
fs-sshfs = ">=1.0.2,<2"
setuptools = "<82.0.0"
fsspec = ">=2026.3.0"
paramiko = "*"

[tool.pixi.feature.dev.pypi-dependencies]
mypy = ">=1.10.0"
+3 −0
Original line number Diff line number Diff line
@@ -52,6 +52,9 @@ class Config(BaseModel):
    run_location: RunLocationOption = Field(
        default=RunLocationOption.sf_perlmutter, title="Where Will You Run IPS Fastran?"
    )

    # SSH Proxy filesystem parameters
    proxy_command: str = Field(default="", title="SSH Proxy Command")
    sshproxy_key: str = Field(
        default="",
        title="NERSC sshproxy Key",
+9 −7
Original line number Diff line number Diff line
@@ -6,8 +6,8 @@ from shutil import rmtree
from typing import Any, Dict, List

from authlib.jose import JsonWebKey
from fs.sshfs import SSHFS
from paramiko import RSAKey
from fsspec import filesystem
from paramiko import ProxyCommand, RSAKey
from sfapi_client import Client
from sfapi_client.compute import Machine
from sfapi_client.jobs import JobState
@@ -91,13 +91,15 @@ class SuperfacilityTool:
            self.model.config.result_files.append(name)

    def read_files(self) -> Dict[str, Any]:
        filesystem = SSHFS(
            "dtn.nersc.gov",
            compress=True,
        perlmutter_fs = filesystem(
            "ssh",
            host="dtn.nersc.gov",
            pkey=RSAKey.from_private_key(StringIO(self.model.config.sshproxy_key)),
            user=self.user.name,
            sock=ProxyCommand(self.model.config.proxy_command) if self.model.config.proxy_command else None,
            username=self.user.name,
        )
        print(filesystem)
        for root, dirs, files in perlmutter_fs.walk(self.working_directory):
            print(root, dirs, files)

        return self.file_tree

+3 −2
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@

import os

from nova.trame.view.components import RemoteFileInput
from nova.trame.view.components import InputField, RemoteFileInput
from nova.trame.view.layouts import GridLayout, HBoxLayout, VBoxLayout
from trame.app import get_server
from trame.widgets import code
@@ -28,7 +28,8 @@ class InputFilesTab:
                # TODO: base_paths should be set differently if running on a cluster
                base_paths=[os.getenv("HOME", os.getcwd())],
            )
        with HBoxLayout(v_else=True, classes="mb-1", halign="center"):
        with HBoxLayout(v_else=True, classes="mb-1", valign="center"):
            InputField(v_model="config.proxy_command")
            vuetify.VBtn("Connect to Perlmutter Filesystem", click=self.view_model.connect)

        with GridLayout(classes="mb-2", columns=3, stretch=True):
Loading