Files
harmony/examples/opnsense_vm_integration/Cargo.toml
Sylvain Tremblay baf15d587e refactor(opnsense-vm-integration): compose OPNsenseBootstrapScore instead of inline dance
Drop the procedural login → abort wizard → SSH → port → API-key sequence
in `boot_vm` and `run_integration`, and replace the bootstrap leg with a
single `harmony_cli::run_cli` invocation of `OPNsenseBootstrapScore`
against `OPNsenseBootstrapTopology`. The diagnose_via_ssh fallback and
the SSH-22 polling loop go away too — both are covered by the Score's
own idempotency probe and the per-step error messages the Score emits.

Credentials now round-trip through `SecretManager` rather than through
local variables: the Score persists `OPNSenseApiCredentials` +
`OPNSenseFirewallCredentials` from `--boot` / `--full`, and
`run_integration` reads them back when constructing the production
`OPNSenseFirewall` topology and the typed `OpnsenseClient` used by the
verification step.

`SecretManager` panics on a missing `HARMONY_SECRET_NAMESPACE`, so main()
sets a binary-specific default if the operator hasn't already exported
one. `harmony_secret` is added as a direct dependency.

No behavior change for `--check` / `--download` / `--clean` / `--status`.
`--boot` and `--full` now emit `[OPNsenseBootstrap/192.168.1.1]`-prefixed
log lines from the Score's Interpret. Subsequent `--boot` runs against
an already-bootstrapped VM NOOP through the idempotency check instead of
re-running the dance.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 11:36:07 -04:00

27 lines
750 B
TOML

[package]
name = "opnsense-vm-integration"
version.workspace = true
edition = "2024"
license.workspace = true
[[bin]]
name = "opnsense-vm-integration"
path = "src/main.rs"
[dependencies]
harmony = { path = "../../harmony" }
harmony_cli = { path = "../../harmony_cli" }
harmony_inventory_agent = { path = "../../harmony_inventory_agent" }
harmony_macros = { path = "../../harmony_macros" }
harmony_secret = { path = "../../harmony_secret" }
harmony_types = { path = "../../harmony_types" }
opnsense-api = { path = "../../opnsense-api" }
opnsense-config = { path = "../../opnsense-config" }
tokio.workspace = true
log.workspace = true
env_logger.workspace = true
reqwest.workspace = true
russh.workspace = true
serde_json.workspace = true
dirs = "6"