Fabric Topology#
Workflows → FTFabric Topologies
Info
Coming soon!
Examples#
Custom Resource Definition#
To browse the Custom Resource Definition go to crd.eda.dev.
FabricTopology
SPEC
-
Configure dry run mode and prompts for topology operations.
-
Enabling the Dry Run will run the transaction with the calculated changes to the topology resources in the dry run mode and pause the workflow awaiting users confirmation.
default: false -
Prompts can be configured to request user confirmation before creating, replacing, or deleting topology resources, regardless if Dry Run is enabled or not. This can be configured per operation type (BeforeCreate, BeforeReplace, BeforeDelete).
-
-
Edge link templates used in the topology.
-
-
Breakouts optionally defines port breakout for edge link members (same semantics as inter-switch link templates).
-
-
Enable or disable VLAN tagging on Interfaces created by the TopoLink.
default: "Null"enum: "Null", "Dot1q" -
Number of interfaces in the edge LAG link.
format: int32range: <= 65535 -
topologiesv1.TopoLinkTemplate `json:",inline"` The name of the TopoLinkTemplate.
-
Number of nodes in the edge link.
format: int32range: <= 65535 -
Specify the type of edge link.
default: "Edge"enum: "ESLAG", "Edge", "LocalLAG"
-
-
Inter-switch link templates used in the topology.
-
ISLTemplate defines a template for inter-switch link groups, extending the upstream link template with optional LocalLAG bundle configuration. When InterfacesInLAG is greater than zero, each ISL group using this template emits LAG bundles with that many member interfaces instead of individual P2P links.
-
Breakouts optionally defines port breakout for link members.
-
-
Enable or disable VLAN tagging on Interfaces created by the TopoLink.
default: "Null"enum: "Null", "Dot1q" -
InterfacesInLAG, when greater than zero, enables LocalLAG mode. Each ISL group using this template emits LAG bundles where every bundle has InterfacesInLAG member interfaces between the local and remote node pair. InterfacesPerNodePair on the ISL group then controls how many bundles are created per node pair (default 1).
format: int32range: <= 65535 -
The name of the ISLTemplate.
-
Speed of the link (e.g. 100G).
-
Type of the TopoLink (e.g. interSwitch). Defaults to interSwitch when omitted.
default: "InterSwitch"
-
-
Node templates used in the topology.
-
-
List of components within the TopoNode. Used to define the type and location of linecards, fabrics (SFM), media adapter cards (MDA) and control cards (CPM).
-
-
The kind of Component, e.g. lineCard.
enum: "controlCard", "lineCard", "fabric", +5 more -
The slot this Component resides in, unset for Components that do not have a slot or ID. e.g. 1 would denote the linecard slot 1, 1/1 would denote linecard slot 1 mda slot 1.
-
Denotes the type of hardware being provisioned, e.g. xcm-x20.
-
-
-
Reference to a ConfigMap containing a license for the TopoNode. Overrides the license set in the referenced NodeProfile, if present.
-
The name of the TopoNodeTemplate.
-
Reference to a NodeProfile to use with this TopoNode.
-
Platform type of this TopoNode, e.g. 7220 IXR-D3L.
-
List of satellite nodes to be inherited by nodes using this template.
-
-
Components for the satellite node.
-
-
The kind of Component, e.g. lineCard.
enum: "controlCard", "lineCard", "fabric", +5 more -
The slot this Component resides in, unset for Components that do not have a slot or ID. e.g. 1 would denote the linecard slot 1, 1/1 would denote linecard slot 1 mda slot 1.
-
Denotes the type of hardware being provisioned, e.g. xcm-x20.
-
-
-
ID of the satellite node.
-
MAC Address of the satellite node.
-
Platform of the satellite node.
-
Port template to be used for the satellite node.
-
Satellite profile to be used for the satellite node.
-
Type of the satellite node.
-
-
-
-
Operation to be performed on the Topology. Create - creates the topology resources based on the provided specifications. Replace - replaces the resources matched by name with the provided specifications. ReplaceAll - first removes all existing topology resources and then creates new ones based on the provided specifications. Delete - deletes the resources matched by name. DeleteAll - deletes all topology resources found in the namespace. One of create, replace, replaceAll, reconcile, delete, deleteAll.
default: "Reconcile"enum: "Create", "Replace", "ReplaceAll", +3 more -
Pod templates used in the topology.
-
-
Edge link groups to create in the pod.
-
-
Number of endpoints to connect to the edge link group.
format: int64 -
Interface name pattern for Interface CRs on each link endpoint. When empty, the default pattern depends on the link shape: plain edge links use {{.nodeName}}-ethernet-{{.interfaceIndex}} (one Interface CR per physical port); ESI-LAG and local-LAG bundles use the counter-based {{.podName}}-{{.groupName}}{{if .linkType}}-{{.linkType}}{{end}}-{{.linkIndex}}-{{.side}} (every bundle member folds into one shared Interface CR). When set, overrides the Interface CR metadata.name (not the physical port string). Evaluated per local endpoint with .podName, .groupName, .linkIndex, .nodeName, .interfaceIndex, .side ("local"), .linkType ("eslag", "lag", or empty for plain edge links), .Links, .Members, plus pod vars. interfaceIndex is the topology interface name with the ethernet- prefix removed (e.g. ethernet-1-29 → 1-29, ethernet-1-a-3-1 → 1-a-3-1). .Links is the raw []TopologyLinkMember endpoint list for the TopoLink being named; .Members is the raw []TopologyEndpoint local endpoints (from .Links) that fold into the Interface CR currently being named — a single entry for a plain edge link, or one entry per bundle member for an ESI-LAG or local-LAG bundle, e.g. {{ range .Members }}{{.Node}}{{ end }}.
-
Link name pattern for TopoLinks created from this group. When empty, the default pattern is {{.podName}}-{{.groupName}}{{if .linkType}}-{{.linkType}}{{end}}-{{.linkIndex}}. Available template variables: .podName, .groupName, .linkIndex, .linkType ("eslag" for ESI-LAG, "lag" for local-LAG, or empty for plain edge links), .Links, plus any keys from the pod's vars map. .Links is the raw []TopologyLinkMember endpoint list for the TopoLink being named (one entry for a plain edge link, one per bundle member for an ESI-LAG or local-LAG bundle), e.g. {{ (index .Links 0).Local.Node }}.
-
Local nodes to connect to the edge link group.
-
Stride between consecutive interface allocations in a link group on each matched node. A value of 1 (default) allocates adjacent ports or slots; 2 leaves every other port free (e.g. start 1-50 with increment 2 and count 4 yields 1-50, 1-52, 1-54, 1-56). Applies to whole-port and breakout allocation; LAG members within one bundle stay contiguous on the same parent port.
default: 1format: int32range: >= 1 -
Starting index or candidate pool for interfaces allocated on each matched node. Every matched node evaluates the same expression into its own independent sequence; pools are not shared across nodes. Pool syntax uses double-brace expressions: {{...}}. Bounded pools include dot-dot ranges ({{3..6}}), comma lists ({{a,b}}), and combinations ({{1..4,6,10..12}}). Multi-segment expressions expand as a cartesian product with the rightmost segment varying fastest. Open-ended syntax {{N..}} (numeric only) means start at N and increment forever. A bare positive integer such as "3" is equivalent to "{{3..}}". Left-pinning sharp edge: a finite segment to the left of an open-ended segment never advances (for example, 1-{{a,b}}-{{1..}} uses only a). Split such cases into separate groups or selectors with explicit per-subset pools. Finite pools exceeding 100,000 candidates are rejected at parse time. Channel-form ranges are supported for flat (SR Linux) breakout and LAG groups (for example, 1-{{29..30}}-{{1..4}}); each LAG bundle must fit on one parent port's channels.
default: "1" -
Node selectors to select the nodes to connect to the endpoint.
-
-
Name of the edge link group.
-
Template name for the edge link group.
-
-
Inter-switch link groups to create in the pod.
-
-
Interface name pattern for Interface CRs on each link endpoint. When empty, the default pattern depends on the link shape: plain (non-LAG) ISL links use {{.nodeName}}-ethernet-{{.interfaceIndex}} (one Interface CR per physical port); ISL-LAG bundles use the counter-based {{.podName}}-{{.groupName}}-{{.linkIndex}}-{{.side}} (every bundle member folds into one shared Interface CR per side; .linkType is always empty for ISL links). When set, overrides the Interface CR metadata.name (not the physical port string). Evaluated per endpoint with .podName, .groupName, .linkIndex, .nodeName, .interfaceIndex, .side ("local" or "remote"), .linkType (always empty for ISL links), .Links, .Members, plus pod vars. interfaceIndex is the topology interface name with the ethernet- prefix removed (e.g. ethernet-1-29 → 1-29, ethernet-1-a-3-1 → 1-a-3-1). .Links is the raw []TopologyLinkMember endpoint list for the TopoLink being named; .Members is the raw []TopologyEndpoint per-side endpoints (from .Links) that fold into the Interface CR currently being named — a single entry for a plain ISL link, or one entry per bundle member for an ISL-LAG bundle, e.g. {{ range .Members }}{{.Node}}{{ end }}.
-
Number of interfaces per node pair.
default: 1format: int64 -
Link name pattern for TopoLinks created from this group. When empty, the default pattern is {{.podName}}-{{.groupName}}{{if .linkType}}-{{.linkType}}{{end}}-{{.linkIndex}}. Available template variables: .podName, .groupName, .linkIndex, .linkType (always empty for ISL links, plain and ISL-LAG), .Links, plus any keys from the pod's vars map. .Links is the raw []TopologyLinkMember endpoint list for the TopoLink being named (one entry for a plain ISL link, one per bundle member for an ISL-LAG bundle), e.g. {{ (index .Links 0).Local.Node }}--{{ (index .Links 0).Remote.Node }}.
-
Local nodes to connect to the inter-switch link group.
-
Stride between consecutive interface allocations in a link group on each matched node. A value of 1 (default) allocates adjacent ports or slots; 2 leaves every other port free (e.g. start 1-50 with increment 2 and count 4 yields 1-50, 1-52, 1-54, 1-56). Applies to whole-port and breakout allocation; LAG members within one bundle stay contiguous on the same parent port.
default: 1format: int32range: >= 1 -
Starting index or candidate pool for interfaces allocated on each matched node. Every matched node evaluates the same expression into its own independent sequence; pools are not shared across nodes. Pool syntax uses double-brace expressions: {{...}}. Bounded pools include dot-dot ranges ({{3..6}}), comma lists ({{a,b}}), and combinations ({{1..4,6,10..12}}). Multi-segment expressions expand as a cartesian product with the rightmost segment varying fastest. Open-ended syntax {{N..}} (numeric only) means start at N and increment forever. A bare positive integer such as "3" is equivalent to "{{3..}}". Left-pinning sharp edge: a finite segment to the left of an open-ended segment never advances (for example, 1-{{a,b}}-{{1..}} uses only a). Split such cases into separate groups or selectors with explicit per-subset pools. Finite pools exceeding 100,000 candidates are rejected at parse time. Channel-form ranges are supported for flat (SR Linux) breakout and LAG groups (for example, 1-{{29..30}}-{{1..4}}); each LAG bundle must fit on one parent port's channels.
default: "1" -
Node selectors to select the nodes to connect to the endpoint.
-
-
Name of the inter-switch link group.
-
Remote nodes to connect to the inter-switch link group.
-
Stride between consecutive interface allocations in a link group on each matched node. A value of 1 (default) allocates adjacent ports or slots; 2 leaves every other port free (e.g. start 1-50 with increment 2 and count 4 yields 1-50, 1-52, 1-54, 1-56). Applies to whole-port and breakout allocation; LAG members within one bundle stay contiguous on the same parent port.
default: 1format: int32range: >= 1 -
Starting index or candidate pool for interfaces allocated on each matched node. Every matched node evaluates the same expression into its own independent sequence; pools are not shared across nodes. Pool syntax uses double-brace expressions: {{...}}. Bounded pools include dot-dot ranges ({{3..6}}), comma lists ({{a,b}}), and combinations ({{1..4,6,10..12}}). Multi-segment expressions expand as a cartesian product with the rightmost segment varying fastest. Open-ended syntax {{N..}} (numeric only) means start at N and increment forever. A bare positive integer such as "3" is equivalent to "{{3..}}". Left-pinning sharp edge: a finite segment to the left of an open-ended segment never advances (for example, 1-{{a,b}}-{{1..}} uses only a). Split such cases into separate groups or selectors with explicit per-subset pools. Finite pools exceeding 100,000 candidates are rejected at parse time. Channel-form ranges are supported for flat (SR Linux) breakout and LAG groups (for example, 1-{{29..30}}-{{1..4}}); each LAG bundle must fit on one parent port's channels.
default: "1" -
Node selectors to select the nodes to connect to the endpoint.
-
-
Template name for the inter-switch link group.
-
-
Name of the pod template.
-
Node groups to create in the pod.
-
-
Number of nodes in the node group.
format: int64 -
Name of the node group.
-
Node name pattern to be used to generate the node names. default pattern is {{.podName}}-{{.nodeGroupName}}{{ printf "%02d" .nodeIndex }}
-
Template name for the node group.
-
-
-
-
Pods defining the topology structure.
-
PodSpec defines a pod instance referencing a pod template.
-
Name of the pod.
-
Template name for the pod.
-
-
STATUS
-
Human-readable message providing additional context about the operation result
-
Detailed breakdown of resources processed during the operation
-
Total duration of the topology operation
-
Total number of resources processed across all types
format: int64
-
Overall result of the topology operation
enum: "Success", "Failed"