Skip to content

FM-S08 — Spike: Proxmox client — typed crate versus reqwest transport #97

Description

@Andreas-Froyland

Epic: #9 · Blocks: M6 Proxmox accounts/TLS/discovery · type:spike

Question

Does the experimental proxmox-client crate (crates.io, landrzejewski/proxmox-client-rust) satisfy authentication, UPID task polling, custom TLS trust and pinning, unknown-field tolerance, and cancellation against PVE 8.x and 9.x — or does Fleet keep a small reqwest transport plus typed provider DTOs?

Evidence required

  • Authentication: API-token auth against both PVE 8.x and 9.x; how credentials are supplied (secret-reference friendly, no env-var singleton).
  • TLS: custom root trust and certificate fingerprint pinning without disabling verification anywhere; per-request control.
  • UPID: task handle retrieval and polling with deadline/timeout semantics; does it expose cancellation and distinguish "unknown final state" from failure?
  • Unknown-field tolerance: loose/null Perl JSON shapes (null vs missing, stringly-typed numbers) — does the typed surface error or tolerate?
  • Endpoint coverage for the M6 epics: cluster resources, node/storage/template discovery, QEMU/LXC list/status, guest-agent network/OS data.
  • Maintenance snapshot: release cadence, open issues, adoption, license, MSRV/dependency weight (does it drag the whole proxmox-rs workspace?).

Recorded fallback (from spikes.md)

Small reqwest transport plus typed provider DTOs, borrowing Purple's parsing patterns. Never accept invalid certificates as the production answer.

Acceptance criteria

  • Evidence gathered against the question, on both PVE 8.x and 9.x if reachable (the integration VM's PVE host is available; recorded/simulated fixtures otherwise)
  • Decision recorded in docs/planning/spikes.md with the rejected option named
  • docs/research/ecosystem.md Proxmox section refreshed with current versions/commits
  • If the crate is chosen: license checked against the inbound policy and pinned with a rationale

Non-goals

  • Production provider code inside the spike (a disposable probe project outside the repository is the vehicle, as in FM-S01/FM-S05)
  • Choosing M6's account model, permission vocabulary, or executor kinds

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions