Read the OVN substrate topology as a graph.
curl --request GET \ --url 'https://stratum.example.com/v1/admin/network/ovn/topology?includeSouthbound=false&includeOvs=false' \ --header 'Authorization: Bearer <token>'Install-scope admin endpoint (network:GetOvnTopology,
bootstrap-admin only) returning a structured graph of the OVN
substrate as the controlplane sees it via the NB DB.
Each Stratum resource (VPC, subnet, NIC, security group,
floating IP, NAT gateway) appears as a typed node; the
relationships between them (belongsTo, attachedTo,
applies, associates) are typed edges. A special
implicitSnat node surfaces the implicit-SNAT-via-IGW row
installs per IGW-enabled VPC — the
substrate-level proof of the AWS-vs-Stratum delta documented
in [docs/operator/09-reference/aws-semantic-deltas.md].
Correlation back to Stratum IDs is via the external_ids
column the OVN driver stamps on every NB row
(stratum-vpc-id, stratum-subnet-id, stratum-nic-id,
stratum-fip-id, stratum-natgw-id, stratum-igw-vpc-id);
rows without a Stratum tag are silently skipped.
(slice 1) wired NB DB. (slice 2) wires the
SB DB read-side (includeSouthbound=true adds chassis
nodes + boundTo edges from Port_Binding) and a local OVS
shell-out (includeOvs=true attaches ovs-vsctl show +
ovs-ofctl dump-flows br-int to the local chassis node).
At v1 there’s one chassis; multi-chassis fan-out is.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”When set, restricts the response to a single VPC’s subgraph (the VPC + its subnets, NICs, SGs, FIPs, NAT gateways, and the implicit-SNAT node).
When set, restricts the SB DB pass to ports + chassis matching the given OVN chassis name. No effect on the NB DB pass (logical-topology nodes have no per-chassis affinity at v1)..
When true, queries the OVN Southbound DB. Adds chassis
nodes (one per registered hypervisor) + boundTo edges
(NIC → chassis) from Port_Binding. Populates
raw.ovnSb row counts..
When true, runs ovs-vsctl show + ovs-ofctl dump-flows br-int on the local host and attaches the summary
(bridges + port counts + flow count) to the
corresponding chassis node’s attributes. At v1 the
controlplane and OVS run on the same host, so this is a
single local shell-out; multi-chassis fan-out is
..
Responses
Section titled “Responses”The OVN topology graph snapshot.
graph snapshot of the OVN substrate. Stable shape: the
future web UI admin panel keys per-kind renderers on the
node/edge kind enums, so adding a value is a SemVer-relevant
change.
object
object
For Stratum-resource nodes (vpc/subnet/nic/securityGroup/
floatingIp/natGateway) this is the Stratum resource ID. For
implicitSnat nodes the ID format is implicit-snat-<vpcId>.
For chassis (slice 2) the chassis ID from the SB DB.
Human-readable label (resource name or address).
Per-kind free-form attributes. Common keys:
vpcId,subnetId,projectId— owner / parent IDs.address,privateIp,transitIp,sourceCidrIP-bearing attributes (FIPs / implicit-SNAT).aclCount— number of ACLs attached (securityGroup).ovnNatType— NAT row type (snat/dnat_and_snat).
adds the OVN-side names so a Stratum resource + its OVN object can be correlated at a glance:
ovnLogicalRouter(vpc, natGateway) — NBLogical_Router.name.ovnLogicalSwitch(subnet) — NBLogical_Switch.name.ovnLspName(nic, floatingIp, natGateway) — NBLogical_Switch_Port.name(the NIC LSP is a UUIDv5 derived from the NIC ID).ovnPortGroup(securityGroup) — NBPort_Group.name.
All ovn* keys are stable strings the UI can render
unconditionally as “Stratum name + OVN name.”
object
object
object
object
SB DB row counts. Zeroed when the caller didn’t set
includeSouthbound=true or when no SB querier is wired.
.
object
Non-fatal signal: empty-graph reason, runtime read failures, options that aren’t yet implemented in this slice. Empty object when nothing’s notable.
object
Set when the whole snapshot is empty for a known reason (no NB querier wired, etc.). Singular by intent — one reason, not several.
Runtime read failures where the graph is still useful but a slice is missing (e.g. SB DB read failed, OVS shell-out timed out)..
Options the caller set that aren’t honored on this
install (e.g. includeOvs=true with no OVS querier
wired).
Example
{ "nodes": [ { "kind": "vpc" } ], "edges": [ { "kind": "belongsTo" } ]}Authenticated but not authorized.
object
The findings of a rejected IAM policy document (custom and resource policies).
One finding of a rejected IAM policy document. A rejection lists every finding, so the author fixes the document in one round trip.
object
The finding, e.g. INVALID_DOCUMENT, UNKNOWN_ACTION, ACTION_NOT_APPLICABLE.
Index of the statement at fault; -1 for the document as a whole.
The offending action, where one is at fault (ACTION_NOT_APPLICABLE).
Field errors, for codes that carry them: each problem at its field
(see FieldError). Documented on the responses that set it, e.g.
approveNodeJoin’s INVALID_INPUT and JOIN_APPROVAL_REFUSED.
Absent otherwise.
One field’s problem, the stage-2 installer API’s shape.
field is the field’s path, message what is wrong with it.
object
The field’s path, e.g. links[0].interface, disks[1].confirm,
mgmt.address or role; empty for the whole request.
Structured facts about the refusal, for codes that carry them. The
shape is fixed per code and documented on the response that answers
it, e.g. IMAGE_POOL_MISMATCH (see ImagePoolMismatchDetails) and
IMAGE_IN_USE. Absent for codes that carry none.
object
Example
{ "issues": [ { "code": "ACTION_NOT_APPLICABLE", "action": "compute:CreateVpc" } ]}