Appearance
Catalog: device templates
A device template describes a chassis model once: its height, its NICs and port groups, its power inlets. Devices in the <Topology> reference it with template="id" and inherit that structure. In the app, templates are what the Materials editor edits and what the catalog bar places.
<Server>, <Switch>, <PDU>
xml
<Switch id="sn5600" model="SN5600" manufacturer="NVIDIA" rackUnits="2">
<PortGroup label="ports" portCount="64" speed="800G" connector="OSFP"
portPrefix="swp" portStart="1"
layout={{ x: 12, y: 0, cols: 16, groupSize: 4, rows: 4 }} />
<PortGroup label="mgmt" portCount="1" speed="1G" connector="RJ45"
layout={{ x: 398, y: 20, cols: 1 }} />
<Inlet label="PSU1" count="2" connector="C14" watts="1600" />
</Switch>| Attribute | Required | Default | Valid values / description |
|---|---|---|---|
id | yes | Template id. Unique across every catalog entry (devices, NICs, cables, transceivers share one namespace) | |
model | no | "" | Free text |
manufacturer | no | "" | Free text |
rackUnits | no | 1 | Whole number: height in rack units (U) |
cardWidth | no | Always the standard 424 card units (440 mm). Other values are rescaled to 424 on load | |
cardHeight | no | Card height in pixels in Port Mapping |
All three tags take the same attributes. A <PDU> also takes the electrical spec.
What each tag accepts as children:
| Tag | Children |
|---|---|
<Server> | <Nic>, <Inlet> |
<Switch> | <PortGroup> or <Nic> (same thing), <Inlet> |
<PDU> | <Phase> (outlet banks), <Nic> (the network monitor port) |
Compute and Storage
A server is a server whatever it is for. Older files used <Compute> and <Storage>; both are still read, as <Server>, and written back as <Server>. A <Storage> without rackUnits was 2U and is still read as 2U. Say what a server is for with labels.
Errors
- Two catalog entries with the same
id. breakouton a<Server>template's NIC — only switch ports can break out.<Phase>or<Outlet>inside a<Server>or<Switch>.<Bond>or<Breakout>inside a catalog entry — they belong on installed devices.
<Nic> / <PortGroup> in a template
A group of identical ports. Inside <Switch>, <PortGroup> and <Nic> are interchangeable.
xml
<Nic label="eth0" portCount="2" speed="100G" connector="QSFP28"
layout={{ x: 20, y: 10, cols: 2 }} side="back" />| Attribute | Required | Default | Valid values / description |
|---|---|---|---|
label | no | "" | NIC label, unique within the device |
portCount | no | 1 | Whole number: ports to generate |
portPrefix | no | p | Text the port names start with. Not empty, no spaces, no : |
portStart | no | 0 | Whole number ≥ 0: the number of the first port |
speed | no | 10G | Speed |
connector | no | RJ45 | Connector |
layout | no | Layout object: {{ x, y, cols, groupSize?, rows?, w?, h? }} | |
breakout | no | 2 or 4 — <Switch> only | |
side | no | back | front or back: which chassis face it is on |
facing | no | alternate, up or down — see How rows face | |
adjacentRows | no | 1 | Whole number ≥ 1, used with facing="alternate" |
align | no | left | left, center or right — see Port alignment |
template | no | Id of a standalone NIC this NIC is inserted from |
Port names
A templated device gets one port per portCount, named portPrefix + a number counting up from portStart. Left out, they are p0, p1, … Use the names the switch OS uses, so cables read like the hardware labels:
xml
<Switch id="fs-n8550" model="N8550-32C" manufacturer="FS">
<PortGroup label="ports" portCount="32" speed="100G" connector="QSFP28"
portPrefix="xe-1/1/" portStart="1" />
</Switch>
...
<Cable from="compute-1/cx5/p1" to="FS-100G/ports/xe-1/1/15" />Changing portPrefix or portStart on a template that devices already use renames their ports in place; each port keeps its cables.
A NIC inserted from a standalone NIC
With template="ID", the NIC's port count, speed, connector, breakout and port layout come from the <Nic id="ID"> catalog entry and win over anything written here. Only label, the position (layout x/y), side, portPrefix and portStart are the NIC's own. The spec is still written out so the file reads on its own.
xml
<Nic id="cx7-2p" model="ConnectX-7 2P" manufacturer="NVIDIA" portCount="2" speed="200G"
connector="QSFP56" layout={{ x: 0, y: 0, cols: 2, w: 380, h: 57 }} />
<Server id="srv" model="R760" manufacturer="Dell" rackUnits="2">
<Nic label="nic0" template="cx7-2p" portCount="2" speed="200G" connector="QSFP56"
layout={{ x: 20, y: 10, cols: 2, w: 380, h: 57 }} />
</Server>A template that names no <Nic> entry in the catalog is an error.
<Inlet> in a template
Where the chassis takes power — a power supply. Valid in <Server> and <Switch> templates (a PDU is fed by its own input cord instead).
xml
<Inlet label="PSU1" model="PWS-2K05A-1R" count="2" connector="C14" watts="2000" side="back" />
<Inlet label="PSU2" captive="true" cordLength="1.8 m" connector="C20" watts="2000" />| Attribute | Required | Default | Valid values / description |
|---|---|---|---|
label | yes | Group label, e.g. PSU1. Shares the device's port-group namespace (cannot reuse a NIC label) | |
model | no | Free text: the power supply's part number | |
count | no | 1 | Whole number: inlets generated, named p0…pN-1 |
connector | no | C14 | A power connector |
captive | no | false | true when the cord is wired into the chassis |
cordLength | no | Free text. Only with captive="true" | |
watts | no | Number: nameplate draw of the group in watts | |
side | no | back | front or back |
layout, facing, adjacentRows, align | no | As on a NIC |
With captive="false" the connector is the receptacle a detachable cord plugs into (a C14 inlet fed from a C13 outlet). With captive="true" the cord is part of the device and the connector names the plug on its free end.
Errors: speed on an inlet; children inside a catalog inlet (use count); serialnumber in the catalog (a serial number belongs to one installed power supply).
PDU
A rack power distribution unit. Its banks are <Phase> elements, its ports are outlets.
xml
<!-- 5.5 kW single-phase metered rPDU: two banks of C13s on 20 A breakers,
two C19s, and the network monitor port. -->
<PDU id="pdumh30hv" model="PDUMH30HV" manufacturer="Tripp Lite" rackUnits="2"
phase="single" voltage="208/230V" amperage="30" deratedAmperage="24"
capacityKw="5.5" inputConnector="L6-30P" cordLength="12 ft. (3.66 m)"
metering="local">
<Phase label="bank1" outletCount="8" receptacle="C13" breaker="20"
layout={{ x: 24, y: 16, cols: 8, groupSize: 4 }} />
<Phase label="bank2" outletCount="8" receptacle="C13" breaker="20"
layout={{ x: 24, y: 60, cols: 8, groupSize: 4 }} />
<Phase label="high" outletCount="2" receptacle="C19" layout={{ x: 300, y: 16, cols: 2 }} />
<Nic label="mgmt" portCount="1" speed="1G" connector="RJ45" layout={{ x: 390, y: 60, cols: 1 }} />
</PDU>PDU electrical spec
Valid on a <PDU> in both the catalog and the topology. All optional; an attribute left off stays unset.
| Attribute | Valid values / description |
|---|---|
phase | single or three |
voltage | Free text, so ranges survive — e.g. 208/230V |
amperage | Number: input current rating in amps — e.g. 30 |
deratedAmperage | Number: continuous-load rating in amps — e.g. 24. Cannot exceed amperage |
capacityKw | Number: total capacity in kW — e.g. 5.5 |
inputConnector | A power connector — e.g. L6-30P |
cordLength | Free text — e.g. 12 ft. (3.66 m) |
metering | none, local (panel meter) or network (embedded monitor) |
outletSwitching | true or false: outlets can be switched remotely |
metering="network" describes the capability. The jack itself is still declared as a <Nic> with an RJ45 port, so it can be cabled.
<Phase> — one bank of outlets
| Attribute | Required | Default | Valid values / description |
|---|---|---|---|
label | yes (optional in the catalog) | Bank label, unique within the PDU | |
outletCount | no | 1 | Whole number: outlets to generate (catalog only) |
receptacle | no | C13 | A power connector |
breaker | no | Number: branch breaker rating in amps — e.g. 20 | |
layout, side, facing, adjacentRows, align | no | As on a NIC |
A <Phase> has no speed and no breakout: an outlet carries current, not traffic.