schema.v2.json 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. {
  2. "$schema": "http://json-schema.org/draft-07/schema#",
  3. "$id": "https://timmoth.github.io/RackPeek/schemas/v1/schema.v1.json",
  4. "title": "RackPeek Infrastructure Specification",
  5. "type": "object",
  6. "additionalProperties": false,
  7. "required": ["version", "resources"],
  8. "properties": {
  9. "version": {
  10. "type": "integer",
  11. "const": 1
  12. },
  13. "resources": {
  14. "type": "array",
  15. "items": {
  16. "oneOf": [
  17. { "$ref": "#/$defs/server" },
  18. { "$ref": "#/$defs/firewall" },
  19. { "$ref": "#/$defs/router" },
  20. { "$ref": "#/$defs/switch" },
  21. { "$ref": "#/$defs/accessPoint" },
  22. { "$ref": "#/$defs/ups" },
  23. { "$ref": "#/$defs/desktop" },
  24. { "$ref": "#/$defs/laptop" },
  25. { "$ref": "#/$defs/service" },
  26. { "$ref": "#/$defs/system" }
  27. ]
  28. }
  29. }
  30. },
  31. "$defs": {
  32. "ram": {
  33. "type": "object",
  34. "required": ["size"],
  35. "additionalProperties": false,
  36. "properties": {
  37. "size": { "type": "number", "minimum": 0 },
  38. "mts": { "type": "integer", "minimum": 0 }
  39. }
  40. },
  41. "cpu": {
  42. "type": "object",
  43. "additionalProperties": false,
  44. "properties": {
  45. "model": { "type": "string" },
  46. "cores": { "type": "integer", "minimum": 1 },
  47. "threads": { "type": "integer", "minimum": 1 }
  48. }
  49. },
  50. "drive": {
  51. "type": "object",
  52. "required": ["size"],
  53. "additionalProperties": false,
  54. "properties": {
  55. "type": {
  56. "type": "string",
  57. "enum": ["nvme","ssd","hdd","sas","sata","usb","sdcard","micro-sd"]
  58. },
  59. "size": { "type": "number", "minimum": 1 }
  60. }
  61. },
  62. "gpu": {
  63. "type": "object",
  64. "additionalProperties": false,
  65. "properties": {
  66. "model": { "type": "string" },
  67. "vram": { "type": "number", "minimum": 0 }
  68. }
  69. },
  70. "nic": {
  71. "type": "object",
  72. "additionalProperties": false,
  73. "properties": {
  74. "type": {
  75. "type": "string",
  76. "enum": [
  77. "rj45","sfp","sfp+","sfp28","sfp56",
  78. "qsfp+","qsfp28","qsfp56","qsfp-dd",
  79. "osfp","xfp","cx4","mgmt"
  80. ]
  81. },
  82. "speed": { "type": "number", "minimum": 0 },
  83. "ports": { "type": "integer", "minimum": 1 }
  84. }
  85. },
  86. "port": {
  87. "type": "object",
  88. "required": ["type","speed","count"],
  89. "additionalProperties": false,
  90. "properties": {
  91. "type": { "type": "string" },
  92. "speed": { "type": "number", "minimum": 0 },
  93. "count": { "type": "integer", "minimum": 1 }
  94. }
  95. },
  96. "network": {
  97. "type": "object",
  98. "required": ["ip","port","protocol"],
  99. "additionalProperties": false,
  100. "properties": {
  101. "ip": {
  102. "type": "string",
  103. "pattern": "^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\\.|$)){4}$"
  104. },
  105. "port": { "type": "integer", "minimum": 1, "maximum": 65535 },
  106. "protocol": { "type": "string", "enum": ["TCP","UDP"] },
  107. "url": { "type": "string" }
  108. }
  109. },
  110. "runsOn": {
  111. "type": "array",
  112. "items": {
  113. "type": "string"
  114. }
  115. },
  116. "server": {
  117. "type": "object",
  118. "required": ["kind","name"],
  119. "additionalProperties": false,
  120. "properties": {
  121. "kind": { "const": "Server" },
  122. "name": { "type": "string" },
  123. "tags": { "type": "array", "items": { "type": "string" } },
  124. "notes": { "type": "string" },
  125. "runsOn": { "$ref": "#/$defs/runsOn" },
  126. "ram": { "$ref": "#/$defs/ram" },
  127. "ipmi": { "type": "boolean" },
  128. "cpus": { "type": "array", "items": { "$ref": "#/$defs/cpu" } },
  129. "drives": { "type": "array", "items": { "$ref": "#/$defs/drive" } },
  130. "gpus": { "type": "array", "items": { "$ref": "#/$defs/gpu" } },
  131. "nics": { "type": "array", "items": { "$ref": "#/$defs/nic" } }
  132. }
  133. },
  134. "desktop": {
  135. "type": "object",
  136. "required": ["kind","name"],
  137. "additionalProperties": false,
  138. "properties": {
  139. "kind": { "const": "Desktop" },
  140. "name": { "type": "string" },
  141. "notes": { "type": "string" },
  142. "ram": { "$ref": "#/$defs/ram" },
  143. "cpus": { "type": "array", "items": { "$ref": "#/$defs/cpu" } },
  144. "drives": { "type": "array", "items": { "$ref": "#/$defs/drive" } },
  145. "gpus": { "type": "array", "items": { "$ref": "#/$defs/gpu" } },
  146. "nics": { "type": "array", "items": { "$ref": "#/$defs/nic" } }
  147. }
  148. },
  149. "laptop": {
  150. "type": "object",
  151. "required": ["kind","name"],
  152. "additionalProperties": false,
  153. "properties": {
  154. "kind": { "const": "Laptop" },
  155. "name": { "type": "string" },
  156. "notes": { "type": "string" },
  157. "ram": { "$ref": "#/$defs/ram" },
  158. "cpus": { "type": "array", "items": { "$ref": "#/$defs/cpu" } },
  159. "drives": { "type": "array", "items": { "$ref": "#/$defs/drive" } }
  160. }
  161. },
  162. "firewall": {
  163. "type": "object",
  164. "required": ["kind","name","ports"],
  165. "additionalProperties": false,
  166. "properties": {
  167. "kind": { "const": "Firewall" },
  168. "name": { "type": "string" },
  169. "model": { "type": "string" },
  170. "managed": { "type": "boolean" },
  171. "poe": { "type": "boolean" },
  172. "ports": { "type": "array", "items": { "$ref": "#/$defs/port" } }
  173. }
  174. },
  175. "router": {
  176. "type": "object",
  177. "required": ["kind","name","ports"],
  178. "additionalProperties": false,
  179. "properties": {
  180. "kind": { "const": "Router" },
  181. "name": { "type": "string" },
  182. "model": { "type": "string" },
  183. "managed": { "type": "boolean" },
  184. "poe": { "type": "boolean" },
  185. "ports": { "type": "array", "items": { "$ref": "#/$defs/port" } }
  186. }
  187. },
  188. "switch": {
  189. "type": "object",
  190. "required": ["kind","name","ports"],
  191. "additionalProperties": false,
  192. "properties": {
  193. "kind": { "const": "Switch" },
  194. "name": { "type": "string" },
  195. "model": { "type": "string" },
  196. "managed": { "type": "boolean" },
  197. "poe": { "type": "boolean" },
  198. "ports": { "type": "array", "items": { "$ref": "#/$defs/port" } }
  199. }
  200. },
  201. "accessPoint": {
  202. "type": "object",
  203. "required": ["kind","name"],
  204. "additionalProperties": false,
  205. "properties": {
  206. "kind": { "const": "AccessPoint" },
  207. "name": { "type": "string" },
  208. "tags": { "type": "array", "items": { "type": "string" } },
  209. "model": { "type": "string" },
  210. "speed": { "type": "number" }
  211. }
  212. },
  213. "ups": {
  214. "type": "object",
  215. "required": ["kind","name"],
  216. "additionalProperties": false,
  217. "properties": {
  218. "kind": { "const": "Ups" },
  219. "name": { "type": "string" },
  220. "tags": { "type": "array", "items": { "type": "string" } },
  221. "model": { "type": "string" },
  222. "va": { "type": "integer", "minimum": 1 }
  223. }
  224. },
  225. "service": {
  226. "type": "object",
  227. "required": ["kind","name","network","runsOn"],
  228. "additionalProperties": false,
  229. "properties": {
  230. "kind": { "const": "Service" },
  231. "name": { "type": "string" },
  232. "runsOn": { "$ref": "#/$defs/runsOn" },
  233. "network": { "$ref": "#/$defs/network" }
  234. }
  235. },
  236. "system": {
  237. "type": "object",
  238. "required": ["kind","name","type","os","cores","ram"],
  239. "additionalProperties": false,
  240. "properties": {
  241. "kind": { "const": "System" },
  242. "name": { "type": "string" },
  243. "notes": { "type": "string" },
  244. "runsOn": { "$ref": "#/$defs/runsOn" },
  245. "type": {
  246. "type": "string",
  247. "enum": [
  248. "baremetal","Baremetal",
  249. "hypervisor","Hypervisor",
  250. "vm","VM",
  251. "container","embedded","cloud","other"
  252. ]
  253. },
  254. "os": { "type": "string" },
  255. "cores": { "type": "integer", "minimum": 1 },
  256. "ram": { "type": "number", "minimum": 0 },
  257. "drives": { "type": "array", "items": { "$ref": "#/$defs/drive" } }
  258. }
  259. }
  260. }
  261. }