| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667 |
- {
- "$schema": "https://json-schema.org/draft/2020-12/schema",
- "$id": "https://timmoth.github.io/RackPeek/schemas/v3/schema.v3.json",
- "title": "RackPeek Infrastructure Specification",
- "type": "object",
- "additionalProperties": false,
- "required": [
- "version",
- "resources"
- ],
- "properties": {
- "version": {
- "type": "integer",
- "const": 3
- },
- "resources": {
- "type": "array",
- "items": {
- "$ref": "#/$defs/resource"
- }
- },
- "connections": {
- "type": [
- "array",
- "null"
- ],
- "items": {
- "$ref": "#/$defs/connection"
- }
- }
- },
- "$defs": {
- "labels": {
- "type": "object",
- "additionalProperties": {
- "type": "string"
- }
- },
- "runsOn": {
- "type": [
- "array",
- "null"
- ],
- "items": {
- "type": "string",
- "minLength": 1
- }
- },
- "resourceBase": {
- "type": "object",
- "required": [
- "kind",
- "name"
- ],
- "properties": {
- "kind": {
- "type": "string"
- },
- "name": {
- "type": "string",
- "minLength": 1
- },
- "tags": {
- "type": "array",
- "items": {
- "type": "string"
- },
- "default": []
- },
- "labels": {
- "$ref": "#/$defs/labels",
- "default": {}
- },
- "notes": {
- "type": [
- "string",
- "null"
- ]
- },
- "runsOn": {
- "$ref": "#/$defs/runsOn"
- }
- }
- },
- "resource": {
- "oneOf": [
- {
- "$ref": "#/$defs/server"
- },
- {
- "$ref": "#/$defs/firewall"
- },
- {
- "$ref": "#/$defs/router"
- },
- {
- "$ref": "#/$defs/switch"
- },
- {
- "$ref": "#/$defs/accessPoint"
- },
- {
- "$ref": "#/$defs/ups"
- },
- {
- "$ref": "#/$defs/desktop"
- },
- {
- "$ref": "#/$defs/laptop"
- },
- {
- "$ref": "#/$defs/service"
- },
- {
- "$ref": "#/$defs/system"
- }
- ]
- },
- "portReference": {
- "type": "object",
- "required": [
- "resource",
- "portGroup",
- "portIndex"
- ],
- "additionalProperties": false,
- "properties": {
- "resource": {
- "type": "string",
- "minLength": 1
- },
- "portGroup": {
- "type": "integer",
- "minimum": 0
- },
- "portIndex": {
- "type": "integer",
- "minimum": 0
- }
- }
- },
- "connection": {
- "type": "object",
- "required": [
- "a",
- "b"
- ],
- "additionalProperties": false,
- "properties": {
- "a": {
- "$ref": "#/$defs/portReference"
- },
- "b": {
- "$ref": "#/$defs/portReference"
- },
- "label": {
- "type": [
- "string",
- "null"
- ]
- },
- "notes": {
- "type": [
- "string",
- "null"
- ]
- }
- }
- },
- "ram": {
- "type": "object",
- "required": [
- "size"
- ],
- "additionalProperties": false,
- "properties": {
- "size": {
- "type": "number",
- "minimum": 0
- },
- "mts": {
- "type": "integer",
- "minimum": 0
- }
- }
- },
- "cpu": {
- "type": "object",
- "additionalProperties": false,
- "properties": {
- "model": {
- "type": "string"
- },
- "cores": {
- "type": "integer",
- "minimum": 1
- },
- "threads": {
- "type": "integer",
- "minimum": 1
- }
- }
- },
- "drive": {
- "type": "object",
- "required": [
- "size"
- ],
- "additionalProperties": false,
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "nvme",
- "ssd",
- "hdd",
- "sas",
- "sata",
- "usb",
- "sdcard",
- "micro-sd"
- ]
- },
- "size": {
- "type": "number",
- "minimum": 1
- }
- }
- },
- "gpu": {
- "type": "object",
- "additionalProperties": false,
- "properties": {
- "model": {
- "type": "string"
- },
- "vram": {
- "type": "number",
- "minimum": 0
- }
- }
- },
- "port": {
- "type": "object",
- "required": [
- "type",
- "speed",
- "count"
- ],
- "additionalProperties": false,
- "properties": {
- "type": {
- "type": "string",
- "enum": [
- "rj45",
- "sfp",
- "sfp+",
- "sfp28",
- "sfp56",
- "qsfp+",
- "qsfp28",
- "qsfp56",
- "qsfp-dd",
- "osfp",
- "xfp",
- "cx4",
- "mgmt"
- ]
- },
- "speed": {
- "type": "number",
- "minimum": 0
- },
- "count": {
- "type": "integer",
- "minimum": 1
- }
- }
- },
- "network": {
- "type": "object",
- "required": [
- "ip",
- "port",
- "protocol"
- ],
- "additionalProperties": false,
- "properties": {
- "ip": {
- "type": "string",
- "pattern": "^(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}$"
- },
- "port": {
- "type": "integer",
- "minimum": 1,
- "maximum": 65535
- },
- "protocol": {
- "type": "string",
- "enum": [
- "TCP",
- "UDP"
- ]
- },
- "url": {
- "type": "string",
- "format": "uri"
- }
- }
- },
- "server": {
- "allOf": [
- {
- "$ref": "#/$defs/resourceBase"
- },
- {
- "type": "object",
- "properties": {
- "kind": {
- "const": "Server"
- },
- "ram": {
- "$ref": "#/$defs/ram"
- },
- "ipmi": {
- "type": "boolean"
- },
- "cpus": {
- "type": "array",
- "items": {
- "$ref": "#/$defs/cpu"
- }
- },
- "drives": {
- "type": "array",
- "items": {
- "$ref": "#/$defs/drive"
- }
- },
- "gpus": {
- "type": "array",
- "items": {
- "$ref": "#/$defs/gpu"
- }
- },
- "ports": {
- "type": "array",
- "items": {
- "$ref": "#/$defs/port"
- }
- }
- }
- }
- ],
- "unevaluatedProperties": false
- },
- "desktop": {
- "allOf": [
- {
- "$ref": "#/$defs/resourceBase"
- },
- {
- "type": "object",
- "properties": {
- "kind": {
- "const": "Desktop"
- },
- "ram": {
- "$ref": "#/$defs/ram"
- },
- "cpus": {
- "type": "array",
- "items": {
- "$ref": "#/$defs/cpu"
- }
- },
- "drives": {
- "type": "array",
- "items": {
- "$ref": "#/$defs/drive"
- }
- },
- "gpus": {
- "type": "array",
- "items": {
- "$ref": "#/$defs/gpu"
- }
- },
- "ports": {
- "type": "array",
- "items": {
- "$ref": "#/$defs/port"
- }
- }
- }
- }
- ],
- "unevaluatedProperties": false
- },
- "laptop": {
- "allOf": [
- {
- "$ref": "#/$defs/resourceBase"
- },
- {
- "type": "object",
- "properties": {
- "kind": {
- "const": "Laptop"
- },
- "ram": {
- "$ref": "#/$defs/ram"
- },
- "cpus": {
- "type": "array",
- "items": {
- "$ref": "#/$defs/cpu"
- }
- },
- "drives": {
- "type": "array",
- "items": {
- "$ref": "#/$defs/drive"
- }
- }
- }
- }
- ],
- "unevaluatedProperties": false
- },
- "firewall": {
- "allOf": [
- {
- "$ref": "#/$defs/resourceBase"
- },
- {
- "type": "object",
- "required": [
- "ports"
- ],
- "properties": {
- "kind": {
- "const": "Firewall"
- },
- "model": {
- "type": "string"
- },
- "managed": {
- "type": "boolean"
- },
- "poe": {
- "type": "boolean"
- },
- "ports": {
- "type": "array",
- "items": {
- "$ref": "#/$defs/port"
- }
- }
- }
- }
- ],
- "unevaluatedProperties": false
- },
- "router": {
- "allOf": [
- {
- "$ref": "#/$defs/resourceBase"
- },
- {
- "type": "object",
- "required": [
- "ports"
- ],
- "properties": {
- "kind": {
- "const": "Router"
- },
- "model": {
- "type": "string"
- },
- "managed": {
- "type": "boolean"
- },
- "poe": {
- "type": "boolean"
- },
- "ports": {
- "type": "array",
- "items": {
- "$ref": "#/$defs/port"
- }
- }
- }
- }
- ],
- "unevaluatedProperties": false
- },
- "switch": {
- "allOf": [
- {
- "$ref": "#/$defs/resourceBase"
- },
- {
- "type": "object",
- "required": [
- "ports"
- ],
- "properties": {
- "kind": {
- "const": "Switch"
- },
- "model": {
- "type": "string"
- },
- "managed": {
- "type": "boolean"
- },
- "poe": {
- "type": "boolean"
- },
- "ports": {
- "type": "array",
- "items": {
- "$ref": "#/$defs/port"
- }
- }
- }
- }
- ],
- "unevaluatedProperties": false
- },
- "accessPoint": {
- "allOf": [
- {
- "$ref": "#/$defs/resourceBase"
- },
- {
- "type": "object",
- "properties": {
- "kind": {
- "const": "AccessPoint"
- },
- "model": {
- "type": "string"
- },
- "speed": {
- "type": "number",
- "minimum": 0
- },
- "ports": {
- "type": "array",
- "items": {
- "$ref": "#/$defs/port"
- }
- }
- }
- }
- ],
- "unevaluatedProperties": false
- },
- "ups": {
- "allOf": [
- {
- "$ref": "#/$defs/resourceBase"
- },
- {
- "type": "object",
- "properties": {
- "kind": {
- "const": "Ups"
- },
- "model": {
- "type": "string"
- },
- "va": {
- "type": "integer",
- "minimum": 1
- }
- }
- }
- ],
- "unevaluatedProperties": false
- },
- "service": {
- "allOf": [
- {
- "$ref": "#/$defs/resourceBase"
- },
- {
- "type": "object",
- "required": [
- "network"
- ],
- "properties": {
- "kind": {
- "const": "Service"
- },
- "network": {
- "$ref": "#/$defs/network"
- }
- }
- }
- ],
- "unevaluatedProperties": false
- },
- "system": {
- "allOf": [
- {
- "$ref": "#/$defs/resourceBase"
- },
- {
- "type": "object",
- "required": [
- "type",
- "os",
- "cores",
- "ram"
- ],
- "properties": {
- "kind": {
- "const": "System"
- },
- "type": {
- "type": "string",
- "enum": [
- "baremetal",
- "Baremetal",
- "cluster",
- "Cluster",
- "hypervisor",
- "Hypervisor",
- "vm",
- "VM",
- "container",
- "embedded",
- "cloud",
- "other"
- ]
- },
- "ip": {
- "type": "string"
- },
- "os": {
- "type": "string"
- },
- "cores": {
- "type": "integer",
- "minimum": 1
- },
- "ram": {
- "type": "number",
- "minimum": 0
- },
- "drives": {
- "type": "array",
- "items": {
- "$ref": "#/$defs/drive"
- }
- }
- }
- }
- ],
- "unevaluatedProperties": false
- }
- }
- }
|