Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions docs/design-guide/device-types.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ JSON Schema, which enforces validation and consistency across all definitions.

All device types must specify:

* **class**: Device category - `server`, `switch`, or `firewall`
* **class**: Device category - `server`, `switch`, `firewall`, or `storage`
* **manufacturer**: Hardware vendor (e.g., "Dell", "HPE")
* **model**: Specific model identifier (e.g., "PowerEdge R7615")
* **u_height**: Rack unit height (must be greater than 0)
Expand Down Expand Up @@ -194,7 +194,7 @@ The schema enforces:

* Required field presence
* Type correctness (strings, numbers, booleans, arrays, objects)
* Enum constraints (e.g., `class` must be server/switch/firewall)
* Enum constraints (e.g., `class` must be server/switch/firewall/storage)
* Conditional requirements (servers must have resource classes)
* Numeric constraints (e.g., `u_height > 0`)

Expand Down
31 changes: 29 additions & 2 deletions docs/operator-guide/device-types.md
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,7 @@ This performs full JSON schema validation including:

* Required field presence
* Type correctness (strings, numbers, booleans, arrays, objects)
* Enum constraints (e.g., `class` must be server/switch/firewall)
* Enum constraints (e.g., `class` must be server/switch/firewall/storage)
* Conditional requirements (servers must have resource classes)
* Numeric constraints (e.g., `u_height > 0`)

Expand Down Expand Up @@ -381,7 +381,7 @@ Ensure all required fields are present: `class`, `manufacturer`, `model`,

**Invalid class value**:

The `class` field must be exactly one of: `server`, `switch`, `firewall`.
The `class` field must be exactly one of: `server`, `switch`, `firewall`, `storage`.

**Invalid u_height**:

Expand Down Expand Up @@ -515,3 +515,30 @@ power-ports:
type: iec-60320-c20
maximum_draw: 1440
```

### Storage Device Type

```yaml
# yaml-language-server: $schema=https://rackerlabs.github.io/understack/device-type.schema.json
manufacturer: NetApp
model: FAS8200
u_height: 3
is_full_depth: true

interfaces:
- name: mgmt
type: 1000base-t
mgmt_only: true
type: 1000base-t
- name: e4
type: 10gbase-x-sfp+
- name: e4
type: 10gbase-x-sfp+
# ... additional data plane interfaces

power-ports:
- name: PSU1
type: iec-60320-c14
- name: PSU2
type: iec-60320-c14
```
2 changes: 1 addition & 1 deletion schema/device-type.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"class": {
"description": "Device class category",
"type": "string",
"enum": ["server", "switch", "firewall"]
"enum": ["server", "switch", "firewall", "storage"]
},
"manufacturer": {
"description": "Manufacturer of the hardware chassis",
Expand Down
Loading