Skip to content

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>
AttributeRequiredDefaultValid values / description
idyesTemplate id. Unique across every catalog entry (devices, NICs, cables, transceivers share one namespace)
modelno""Free text
manufacturerno""Free text
rackUnitsno1Whole number: height in rack units (U)
cardWidthnoAlways the standard 424 card units (440 mm). Other values are rescaled to 424 on load
cardHeightnoCard 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:

TagChildren
<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.
  • breakout on 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" />
AttributeRequiredDefaultValid values / description
labelno""NIC label, unique within the device
portCountno1Whole number: ports to generate
portPrefixnopText the port names start with. Not empty, no spaces, no :
portStartno0Whole number ≥ 0: the number of the first port
speedno10GSpeed
connectornoRJ45Connector
layoutnoLayout object: {{ x, y, cols, groupSize?, rows?, w?, h? }}
breakoutno2 or 4 — <Switch> only
sidenobackfront or back: which chassis face it is on
facingnoalternate, up or down — see How rows face
adjacentRowsno1Whole number ≥ 1, used with facing="alternate"
alignnoleftleft, center or right — see Port alignment
templatenoId 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" />
AttributeRequiredDefaultValid values / description
labelyesGroup label, e.g. PSU1. Shares the device's port-group namespace (cannot reuse a NIC label)
modelnoFree text: the power supply's part number
countno1Whole number: inlets generated, named p0…pN-1
connectornoC14A power connector
captivenofalsetrue when the cord is wired into the chassis
cordLengthnoFree text. Only with captive="true"
wattsnoNumber: nameplate draw of the group in watts
sidenobackfront or back
layout, facing, adjacentRows, alignnoAs 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.

AttributeValid values / description
phasesingle or three
voltageFree text, so ranges survive — e.g. 208/230V
amperageNumber: input current rating in amps — e.g. 30
deratedAmperageNumber: continuous-load rating in amps — e.g. 24. Cannot exceed amperage
capacityKwNumber: total capacity in kW — e.g. 5.5
inputConnectorA power connector — e.g. L6-30P
cordLengthFree text — e.g. 12 ft. (3.66 m)
meteringnone, local (panel meter) or network (embedded monitor)
outletSwitchingtrue 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 ​

AttributeRequiredDefaultValid values / description
labelyes (optional in the catalog)Bank label, unique within the PDU
outletCountno1Whole number: outlets to generate (catalog only)
receptaclenoC13A power connector
breakernoNumber: branch breaker rating in amps — e.g. 20
layout, side, facing, adjacentRows, alignnoAs on a NIC

A <Phase> has no speed and no breakout: an outlet carries current, not traffic.