Skip to content

[Feature]: Transports — LocalTransport + SSHTransport #19

Description

@aldbr

User Story

As the BatchBackend (and any composed scheduler),
I want Transport implementations for local execution and SSH,
So that reaching a resource is an orthogonal, swappable axis (IC-ADR-001 §3) validated against the
real sshd stack.

Feature Description

  • Transport protocol finalised: run(argv) -> CommandResult,
    put(local, remote), get(remote, local); timeouts; typed errors (auth vs connectivity vs
    command failure); async context-manager lifecycle (connections are held state — DIRAC's
    shutdown() closes ssh gateways today).
  • LocalTransport: asyncio subprocess exec + local file ops.
  • SSHTransport: async SSH library; key auth; pinned known-hosts; connection reuse across bulk calls; optional
    jump/gateway host (parity with DIRAC's SSHTunnel).
  • Design consequence to state in docs: unlike DIRAC (which ships a stdlib-only python driver
    to the remote host and execs it), interCEde builds commands locally and sends only argv —
    no python required on the remote host (ADR-REVIEW.md comment 9).
  • Integration: transport-level tests (run/put/get, quoting, timeouts) against the ssh-slurm
    stack's sshd; local variant against the container itself.

Definition of Done

  • LocalTransport + SSHTransport pass a shared transport conformance suite (unit + against
    the sshd stack)
  • Quoting/escaping torture tests (spaces, quotes, globs in argv and paths)
  • Jump-host path covered (config + at least a unit-level test)
  • Registered via intercede.transports entry points
  • Credential supply follows IC-ADR-003 (#) for SSH keys

Alternatives Considered

  • Fabric/Paramiko (DIRAC's choice) — sync; would force asyncio.to_thread around every call.
  • Keeping DIRAC's ship-a-python-driver model — requires python2/3 on every remote host and
    stdlib-only drivers; dropped by the ADR (commands over the wire instead).

Related Issues

Additional Context

SSHMultiHostTransport (DIRAC SSHBatch: N hosts + per-host slot spreading) is deferred
placement policy vs transport question flagged in ADR-REVIEW.md comment 7.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions