Replace all `podman` CLI shell-outs with HTTP requests to the rootless
Podman API unix socket (/run/user/{UID}/podman/podman.sock).
Benefits:
- No process spawning overhead — direct HTTP over unix socket
- Structured JSON responses — no string parsing fragility
- Proper timeouts on all operations (5s connect, 30s default, 120s create)
- Health check method to verify socket availability
- Restart container as first-class operation
Still uses CLI for:
- Image pulls (streaming operation better suited to CLI)
- Container logs (raw text stream, not JSON)
The Podman socket is rootless (runs as archipelago user), local-only
(unix socket), and already behind our session auth in the backend.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
26 lines
686 B
TOML
26 lines
686 B
TOML
[package]
|
|
name = "archipelago-container"
|
|
version = "0.1.0"
|
|
edition = "2021"
|
|
|
|
[dependencies]
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_yaml = "0.9"
|
|
serde_json = "1.0"
|
|
tokio = { version = "1", features = ["full"] }
|
|
reqwest = { version = "0.11", default-features = false, features = ["json", "rustls-tls"] }
|
|
hyper = { version = "0.14", features = ["client", "http1"] }
|
|
thiserror = "1.0"
|
|
anyhow = "1.0"
|
|
async-trait = "0.1"
|
|
futures = "0.3"
|
|
indexmap = { version = "2.0", features = ["serde"] }
|
|
chrono = { version = "0.4", features = ["serde"] }
|
|
uuid = { version = "1.0", features = ["v4"] }
|
|
log = "0.4"
|
|
tracing = "0.1"
|
|
|
|
[lib]
|
|
name = "archipelago_container"
|
|
path = "src/lib.rs"
|