Configuration Reference
Both the controller and the agent read the same YAML file, and each ignores the
sections that do not apply to it. The default path is
/etc/fabric-manager/config.yaml, overridable with --config.
For Kubernetes deployments the chart renders this file into a ConfigMap, so prefer the chart values; this page describes the underlying file, which is what you edit for bare-metal and Docker runs.
Only controller.listen_address is required. Every other key has a default, and
the whole otel, telemetry, and discovery sections can be omitted.
controller
Key |
Default |
Description |
|---|---|---|
|
required |
|
|
|
How often each agent sends a heartbeat. Must be positive |
|
|
Mark a host offline after this long without a heartbeat. Must be positive and strictly greater than |
|
|
Grace period for an agent to reconnect before its topology is dropped |
|
unset |
Path searched for Factory System Descriptor textprotos. Required for anything FSD-related: |
|
unset |
Path to a Physical Grouping Descriptor, which tells the mapper about hardware-specific tray layouts (e.g. BH galaxy rev C) |
|
empty |
Native topology shapes discoverable from FSD host instance paths; see below |
|
unset |
|
|
unset |
Directory of static UI assets served at |
|
see below |
gRPC keepalive for the controller ↔ agent connection |
controller.keepalive
Applied to both the controller’s gRPC server and each agent’s client channel; agents read this section from their own copy of the config.
Key |
Default |
Description |
|---|---|---|
|
|
Interval between keepalive HTTP/2 pings. Must be positive |
|
|
How long to wait for a ping ack before treating the connection as dead. Must be positive |
|
|
Ping even with no active RPCs on the connection |
|
|
Server-only: close a connection idle this long. |
This matters because agents send unary heartbeats over a single reused channel, so the connection is idle between calls. Without keepalive, a peer that vanishes without a TCP FIN/RST leaves a half-open connection that the transport poller can spin on.
Leave max_connection_idle_sec at 0, or comfortably above
heartbeat_interval_sec, so healthy but briefly idle connections are not torn
down.
otel
OpenTelemetry logs, traces, and metrics. Currently exported to stdout in
OStream/OTLP-style format; pipe it to a Collector or scrape via kubectl logs.
Key |
Default |
Description |
|---|---|---|
|
|
Install the Logger, Tracer, and Meter providers |
|
|
Reported service name. Must be non-empty when enabled |
|
unset |
Reported deployment environment, e.g. |
|
|
Metric export interval. Must be positive when enabled |
Standard environment variables take precedence over these values:
OTEL_SERVICE_NAME overrides service_name, and OTEL_SDK_DISABLED=true
(or TRUE/1) forces OTEL off regardless of the YAML.
telemetry
Agent-side integration with the per-host tt-telemetry collector. When enabled, the agent opens a streaming subscription to the collector and rediscovers its topology when link state changes, so the controller tracks fabric health without waiting for re-registration.
Key |
Default |
Description |
|---|---|---|
|
|
Connect to a local collector |
|
|
TCP endpoint of the collector’s gRPC listener. The preferred transport |
|
unset |
Collector UNIX socket, dialled as |
|
|
Substring matches against metric paths; one subscription per entry |
|
|
Minimum spacing between telemetry-triggered rediscoveries. Bursts of link events are coalesced into at most one rediscovery per interval |
When both address and socket_path are set, TCP wins. When enabled is true,
at least one of them must be set or startup fails. The collector must be started
with a matching --grpc-port/--grpc-bind.
The default queries are the boolean link-health metrics specifically so the agent gets one update per link state transition instead of subscribing to high-rate counters.
discovery
Retry policy for the agent’s initial device discovery, which can transiently find nothing if UMD runs while devices are still coming up.
Key |
Default |
Description |
|---|---|---|
|
|
Re-discoveries attempted after an empty startup scan. |
|
|
Seconds between retries. Must be positive when retries are enabled |
Retries stop as soon as a discovery finds devices.