Files
zeekayandHanzo Dev 13d893cd3b fix(explorer,health): configure explorer via chains.yaml; readiness ≠ leadership
Two independent 0/1 workloads on zoo-k8s, two independent causes.

1. zoo-{system,devnet}/zoo-explorer-explorer CrashLoopBackOff x590.
   The controller invented `--rpc/--chain/--port`, but luxfi/explorer only
   defines -config/-data/-http/-mdns, so every start died with
   "flag provided but not defined: -rpc" (exit 2). The explorer is
   file-configured by design — one chains.yaml describes chain, rpc, coin,
   branding and listen addr. So render the CR into that file and mount it,
   which is exactly how the hand-rolled zoo-explorer Deployments (the ones
   that stayed up) are already wired. JSON is valid YAML, so serde_json
   both builds and escapes the document — no string-concat injection.

2. zoo-system/zoo-operator 0/1 while zoo-testnet/zoo-operator ran 1/1.
   /readyz returned 503 for any replica that did not hold the lease, so a
   healthy standby was permanently NotReady and its Deployment never went
   available. Readiness answers "can this pod serve?", leadership answers
   "who reconciles?" — braiding them made a working standby look broken.
   Unbraid: /readyz reports process health; the lease already names the
   leader (kubectl get lease zoo-operator-leader).

Release 0.1.4.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-27 21:00:37 -07:00

46 lines
1.2 KiB
TOML

[package]
name = "zoo-operator"
version = "0.1.4"
edition = "2021"
description = "Zoo Network Kubernetes Operator"
repository = "https://github.com/zoo-labs/operator"
[[bin]]
name = "zoo-operator"
path = "src/main.rs"
[dependencies]
# Shared reconciler primitives. See ~/work/hanzo/operator-core for the
# canonical leader / IAM admin / KMS / status logic. Zoo operator gains
# IAM upsert + KMSSecret reconciler hooks via this dep.
hanzo-operator-core = { git = "https://github.com/hanzoai/operator-core", tag = "v0.1.0" }
# Async runtime
tokio = { version = "1.35", features = ["full"] }
futures = "0.3"
# Kubernetes
kube = { version = "0.87", features = ["runtime", "derive", "ws"] }
k8s-openapi = { version = "0.20", features = ["v1_28"] }
# Serialization
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
# CLI
clap = { version = "4.4", features = ["derive", "env"] }
# Logging
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
# HTTP server (health + metrics)
axum = "0.7"
# Utils
thiserror = "1.0"
anyhow = "1.0"
chrono = { version = "0.4", features = ["serde"] }
schemars = "0.8"
prometheus = { version = "0.14.0", default-features = false }