Enrichment
OVN identifies everything by UUID. A Port_Binding for a1b2c3d4-… is correct but unreadable; what an operator wants to see is web-server-01 on project production. Enrichment is the layer that resolves OVN identifiers to human-readable names from the system that created them.
Always additive
The core of Northwatch works with no enrichment provider configured — you still get every table, every correlation, search and tracing, just with raw UUIDs and external_ids. Enrichment only adds names. This keeps the tool useful against any OVN deployment, and means a misconfigured or unreachable provider degrades to "no names" rather than breaking browsing.
When a provider is configured, the server advertises the enrich capability and the correlated/* views include the resolved context inline.
Providers
Enrichment is pluggable; a provider knows how to map OVN entities to one external system:
- OpenStack (the primary provider) resolves through Neutron, Nova and Keystone: switches to networks, ports to Neutron ports and Nova instances, routers to Neutron routers, NAT entries to floating-IP details, and project IDs to project names. The mapping keys off the
neutron:*external_idsthat Neutron writes onto OVN switches, ports, routers and NAT entries. See Enrich with OpenStack. - Kubernetes resolves ovn-kubernetes entities to namespaces, pods and nodes via a kubeconfig. See Enrich with Kubernetes.
Each cluster uses at most one provider, configured either by the flat OpenStack / Kubernetes flags (default cluster) or per-cluster in the config file.
Caching strategy
External APIs are slow and rate-limited compared to a local cache, so enrichment results are cached with a TTL (--enrichment-cache-ttl, default 5m). The design goal is that enrichment never blocks a read:
- A cache hit returns the name immediately.
- A cache miss returns the raw identifier now and resolves the name in the background; the UI fills it in when it arrives.
This way the OVN data — which is already local and fast — is never held up waiting on Neutron or the Kubernetes API. Enrichment is an overlay on top of OVN truth, not a dependency of it.