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

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions