app_versions.json 112 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514
  1. {
  2. "1.2.11": {
  3. "healthy": true,
  4. "supported": false,
  5. "healthy_error": null,
  6. "location": "/__w/charts/charts/community/omada-controller/1.2.11",
  7. "last_update": "2025-03-05 14:27:33",
  8. "required_features": [
  9. "normalize/ixVolume",
  10. "definitions/certificate",
  11. "definitions/timezone",
  12. "normalize/acl"
  13. ],
  14. "human_version": "5.15.8.2_1.2.11",
  15. "version": "1.2.11",
  16. "chart_metadata": {
  17. "name": "omada-controller",
  18. "description": "Omada Controller (TP-Link) is a network management controller for TP-Link Omada Equipment.",
  19. "annotations": {
  20. "title": "Omada Controller"
  21. },
  22. "type": "application",
  23. "version": "1.2.11",
  24. "apiVersion": "v2",
  25. "appVersion": "5.15.8.2",
  26. "kubeVersion": ">=1.16.0-0",
  27. "maintainers": [
  28. {
  29. "name": "truenas",
  30. "url": "https://www.truenas.com/",
  31. "email": "dev@ixsystems.com"
  32. }
  33. ],
  34. "dependencies": [
  35. {
  36. "name": "common",
  37. "repository": "file://../../../common",
  38. "version": "1.2.9"
  39. }
  40. ],
  41. "home": "https://github.com/mbentley/docker-omada-controller",
  42. "icon": "https://media.sys.truenas.net/apps/omada-controller/icons/icon.svg",
  43. "sources": [
  44. "https://github.com/mbentley/docker-omada-controller",
  45. "https://github.com/truenas/charts/tree/master/library/ix-dev/community/omada-controller",
  46. "https://hub.docker.com/r/mbentley/omada-controller"
  47. ],
  48. "keywords": [
  49. "network",
  50. "controller",
  51. "omada",
  52. "tp-link"
  53. ]
  54. },
  55. "app_metadata": {
  56. "runAsContext": [
  57. {
  58. "userName": "root",
  59. "groupName": "root",
  60. "gid": 0,
  61. "uid": 0,
  62. "description": "Omada Controller runs as root user."
  63. }
  64. ],
  65. "capabilities": [
  66. {
  67. "name": "CHOWN",
  68. "description": "Omada Controller is able to chown files."
  69. },
  70. {
  71. "name": "DAC_OVERRIDE",
  72. "description": "Omada Controller requires this ability to bypass file permissions."
  73. },
  74. {
  75. "name": "FOWNER",
  76. "description": "Omada Controller requires this ability to bypass file permissions for it's sub-processes."
  77. },
  78. {
  79. "name": "SETGID",
  80. "description": "Omada Controller requires this ability to switch group for sub-processes."
  81. },
  82. {
  83. "name": "SETUID",
  84. "description": "Omada Controller requires this ability to switch user for sub-processes."
  85. }
  86. ],
  87. "hostMounts": []
  88. },
  89. "schema": {
  90. "groups": [
  91. {
  92. "name": "Omada Controller Configuration",
  93. "description": "Configure Omada Controller"
  94. },
  95. {
  96. "name": "User and Group Configuration",
  97. "description": "Configure User and Group for Omada Controller"
  98. },
  99. {
  100. "name": "Network Configuration",
  101. "description": "Configure Network for Omada Controller"
  102. },
  103. {
  104. "name": "Storage Configuration",
  105. "description": "Configure Storage for Omada Controller"
  106. },
  107. {
  108. "name": "Resources Configuration",
  109. "description": "Configure Resources for Omada Controller"
  110. }
  111. ],
  112. "portals": {
  113. "web_portal": {
  114. "protocols": [
  115. "$kubernetes-resource_configmap_portal_protocol"
  116. ],
  117. "host": [
  118. "$kubernetes-resource_configmap_portal_host"
  119. ],
  120. "ports": [
  121. "$kubernetes-resource_configmap_portal_port"
  122. ],
  123. "path": "$kubernetes-resource_configmap_portal_path"
  124. }
  125. },
  126. "questions": [
  127. {
  128. "variable": "TZ",
  129. "group": "Omada Controller Configuration",
  130. "label": "Timezone",
  131. "schema": {
  132. "type": "string",
  133. "default": "America/Los_Angeles",
  134. "required": true,
  135. "$ref": [
  136. "definitions/timezone"
  137. ],
  138. "enum": [
  139. {
  140. "value": "Asia/Damascus",
  141. "description": "'Asia/Damascus' timezone"
  142. },
  143. {
  144. "value": "Asia/Saigon",
  145. "description": "'Asia/Saigon' timezone"
  146. }
  147. ]
  148. }
  149. },
  150. {
  151. "variable": "omadaConfig",
  152. "label": "",
  153. "group": "Omada Controller Configuration",
  154. "schema": {
  155. "type": "dict",
  156. "attrs": [
  157. {
  158. "variable": "additionalEnvs",
  159. "label": "Additional Environment Variables",
  160. "description": "Configure additional environment variables for Omada Controller.",
  161. "schema": {
  162. "type": "list",
  163. "default": [],
  164. "items": [
  165. {
  166. "variable": "env",
  167. "label": "Environment Variable",
  168. "schema": {
  169. "type": "dict",
  170. "attrs": [
  171. {
  172. "variable": "name",
  173. "label": "Name",
  174. "schema": {
  175. "type": "string",
  176. "required": true
  177. }
  178. },
  179. {
  180. "variable": "value",
  181. "label": "Value",
  182. "schema": {
  183. "type": "string",
  184. "required": true
  185. }
  186. }
  187. ]
  188. }
  189. }
  190. ]
  191. }
  192. }
  193. ]
  194. }
  195. },
  196. {
  197. "variable": "omadaID",
  198. "label": "",
  199. "group": "User and Group Configuration",
  200. "schema": {
  201. "type": "dict",
  202. "attrs": [
  203. {
  204. "variable": "user",
  205. "label": "User ID",
  206. "description": "The user id that Omada Controller files will be owned by.",
  207. "schema": {
  208. "type": "int",
  209. "min": 568,
  210. "default": 568,
  211. "required": true
  212. }
  213. },
  214. {
  215. "variable": "group",
  216. "label": "Group ID",
  217. "description": "The group id that Omada Controller files will be owned by.",
  218. "schema": {
  219. "type": "int",
  220. "min": 568,
  221. "default": 568,
  222. "required": true
  223. }
  224. }
  225. ]
  226. }
  227. },
  228. {
  229. "variable": "omadaNetwork",
  230. "label": "",
  231. "group": "Network Configuration",
  232. "schema": {
  233. "type": "dict",
  234. "attrs": [
  235. {
  236. "variable": "manageHttpPort",
  237. "label": "Manage HTTP Port",
  238. "description": "The port to use for Omada Controller HTTP management.",
  239. "schema": {
  240. "type": "int",
  241. "default": 30076,
  242. "min": 9000,
  243. "max": 65535,
  244. "required": true
  245. }
  246. },
  247. {
  248. "variable": "manageHttpsPort",
  249. "label": "Manage HTTPS Port",
  250. "description": "The port to use for Omada Controller HTTPS management.",
  251. "schema": {
  252. "type": "int",
  253. "default": 30077,
  254. "min": 9000,
  255. "max": 65535,
  256. "required": true
  257. }
  258. },
  259. {
  260. "variable": "portalHttpPort",
  261. "label": "Portal HTTP Port",
  262. "description": "The port to use for Omada Controller HTTP portal.",
  263. "schema": {
  264. "type": "int",
  265. "default": 30078,
  266. "min": 9000,
  267. "max": 65535,
  268. "required": true
  269. }
  270. },
  271. {
  272. "variable": "portalHttpsPort",
  273. "label": "Portal HTTPS Port",
  274. "description": "The port to use for Omada Controller HTTPS portal.",
  275. "schema": {
  276. "type": "int",
  277. "default": 30079,
  278. "min": 9000,
  279. "max": 65535,
  280. "required": true
  281. }
  282. },
  283. {
  284. "variable": "appDiscoveryPort",
  285. "label": "App Discovery Port",
  286. "description": "The port to use for Omada Controller App Discovery.",
  287. "schema": {
  288. "type": "int",
  289. "default": 27001,
  290. "min": 9000,
  291. "max": 65535,
  292. "required": true
  293. }
  294. },
  295. {
  296. "variable": "discoveryPort",
  297. "label": "Discovery Port",
  298. "description": "The port to use for Omada Controller Discovery.",
  299. "schema": {
  300. "type": "int",
  301. "default": 29810,
  302. "min": 9000,
  303. "max": 65535,
  304. "required": true
  305. }
  306. },
  307. {
  308. "variable": "managerV1Port",
  309. "label": "Manager v1 Port",
  310. "description": "The port to use for Omada Controller Manager v1.",
  311. "schema": {
  312. "type": "int",
  313. "default": 29811,
  314. "min": 9000,
  315. "max": 65535,
  316. "required": true
  317. }
  318. },
  319. {
  320. "variable": "adoptV1Port",
  321. "label": "Adopt v1 Port",
  322. "description": "The port to use for Omada Controller Adopt v1.",
  323. "schema": {
  324. "type": "int",
  325. "default": 29812,
  326. "min": 9000,
  327. "max": 65535,
  328. "required": true
  329. }
  330. },
  331. {
  332. "variable": "upgradeV1Port",
  333. "label": "Upgrade v1 Port",
  334. "description": "The port to use for Omada Controller Upgrade v1.",
  335. "schema": {
  336. "type": "int",
  337. "default": 29813,
  338. "min": 9000,
  339. "max": 65535,
  340. "required": true
  341. }
  342. },
  343. {
  344. "variable": "managerV2Port",
  345. "label": "Manager v2 Port",
  346. "description": "The port to use for Omada Controller Manager v2.",
  347. "schema": {
  348. "type": "int",
  349. "default": 29814,
  350. "min": 9000,
  351. "max": 65535,
  352. "required": true
  353. }
  354. },
  355. {
  356. "variable": "certificateID",
  357. "label": "Certificate",
  358. "description": "The certificate to use for Omada Controller </br>",
  359. "schema": {
  360. "type": "int",
  361. "null": true,
  362. "$ref": [
  363. "definitions/certificate"
  364. ],
  365. "enum": [
  366. {
  367. "value": null,
  368. "description": "No Certificate"
  369. }
  370. ],
  371. "default": null
  372. }
  373. },
  374. {
  375. "variable": "hostNetwork",
  376. "label": "Host Network",
  377. "description": "Bind to the host network. </br>s\nThis might be required for specific features to work.\n",
  378. "schema": {
  379. "type": "boolean",
  380. "default": false
  381. }
  382. }
  383. ]
  384. }
  385. },
  386. {
  387. "variable": "omadaStorage",
  388. "label": "",
  389. "group": "Storage Configuration",
  390. "schema": {
  391. "type": "dict",
  392. "attrs": [
  393. {
  394. "variable": "data",
  395. "label": "Omada Controller Data Storage",
  396. "description": "The path to store Omada Controller Data.",
  397. "schema": {
  398. "type": "dict",
  399. "attrs": [
  400. {
  401. "variable": "type",
  402. "label": "Type",
  403. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  404. "schema": {
  405. "type": "string",
  406. "required": true,
  407. "immutable": true,
  408. "default": "ixVolume",
  409. "enum": [
  410. {
  411. "value": "hostPath",
  412. "description": "Host Path (Path that already exists on the system)"
  413. },
  414. {
  415. "value": "ixVolume",
  416. "description": "ixVolume (Dataset created automatically by the system)"
  417. }
  418. ]
  419. }
  420. },
  421. {
  422. "variable": "ixVolumeConfig",
  423. "label": "ixVolume Configuration",
  424. "description": "The configuration for the ixVolume dataset.",
  425. "schema": {
  426. "type": "dict",
  427. "show_if": [
  428. [
  429. "type",
  430. "=",
  431. "ixVolume"
  432. ]
  433. ],
  434. "$ref": [
  435. "normalize/ixVolume"
  436. ],
  437. "attrs": [
  438. {
  439. "variable": "aclEnable",
  440. "label": "Enable ACL",
  441. "description": "Enable ACL for the dataset.",
  442. "schema": {
  443. "type": "boolean",
  444. "default": false
  445. }
  446. },
  447. {
  448. "variable": "datasetName",
  449. "label": "Dataset Name",
  450. "description": "The name of the dataset to use for storage.",
  451. "schema": {
  452. "type": "string",
  453. "required": true,
  454. "immutable": true,
  455. "hidden": true,
  456. "default": "data"
  457. }
  458. },
  459. {
  460. "variable": "aclEntries",
  461. "label": "ACL Configuration",
  462. "schema": {
  463. "type": "dict",
  464. "show_if": [
  465. [
  466. "aclEnable",
  467. "=",
  468. true
  469. ]
  470. ],
  471. "attrs": [
  472. {
  473. "variable": "path",
  474. "label": "Path",
  475. "description": "Path to perform ACL",
  476. "schema": {
  477. "type": "string",
  478. "hidden": true
  479. }
  480. },
  481. {
  482. "variable": "entries",
  483. "label": "ACL Entries",
  484. "description": "ACL Entries",
  485. "schema": {
  486. "type": "list",
  487. "items": [
  488. {
  489. "variable": "aclEntry",
  490. "label": "ACL Entry",
  491. "schema": {
  492. "type": "dict",
  493. "attrs": [
  494. {
  495. "variable": "id_type",
  496. "label": "ID Type",
  497. "schema": {
  498. "type": "string",
  499. "enum": [
  500. {
  501. "value": "USER",
  502. "description": "Entry is for a USER"
  503. },
  504. {
  505. "value": "GROUP",
  506. "description": "Entry is for a GROUP"
  507. }
  508. ],
  509. "default": "USER"
  510. }
  511. },
  512. {
  513. "variable": "id",
  514. "label": "ID",
  515. "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application",
  516. "schema": {
  517. "type": "int",
  518. "required": true,
  519. "min": 0
  520. }
  521. },
  522. {
  523. "variable": "access",
  524. "label": "Access",
  525. "schema": {
  526. "type": "string",
  527. "enum": [
  528. {
  529. "value": "READ",
  530. "description": "Read Access"
  531. },
  532. {
  533. "value": "MODIFY",
  534. "description": "Modify Access"
  535. },
  536. {
  537. "value": "FULL_CONTROL",
  538. "description": "FULL_CONTROL Access"
  539. }
  540. ]
  541. }
  542. }
  543. ]
  544. }
  545. }
  546. ]
  547. }
  548. }
  549. ]
  550. }
  551. }
  552. ]
  553. }
  554. },
  555. {
  556. "variable": "hostPathConfig",
  557. "label": "Host Path Configuration",
  558. "schema": {
  559. "type": "dict",
  560. "show_if": [
  561. [
  562. "type",
  563. "=",
  564. "hostPath"
  565. ]
  566. ],
  567. "attrs": [
  568. {
  569. "variable": "aclEnable",
  570. "label": "Enable ACL",
  571. "description": "Enable ACL for the dataset.",
  572. "schema": {
  573. "type": "boolean",
  574. "default": false
  575. }
  576. },
  577. {
  578. "variable": "acl",
  579. "label": "ACL Configuration",
  580. "schema": {
  581. "type": "dict",
  582. "show_if": [
  583. [
  584. "aclEnable",
  585. "=",
  586. true
  587. ]
  588. ],
  589. "attrs": [
  590. {
  591. "variable": "path",
  592. "label": "Host Path",
  593. "description": "Host Path to perform ACL",
  594. "schema": {
  595. "type": "hostpath",
  596. "required": true,
  597. "empty": false
  598. }
  599. },
  600. {
  601. "variable": "entries",
  602. "label": "ACL Entries",
  603. "description": "ACL Entries",
  604. "schema": {
  605. "type": "list",
  606. "items": [
  607. {
  608. "variable": "aclEntry",
  609. "label": "ACL Entry",
  610. "schema": {
  611. "type": "dict",
  612. "attrs": [
  613. {
  614. "variable": "id_type",
  615. "label": "ID Type",
  616. "schema": {
  617. "type": "string",
  618. "enum": [
  619. {
  620. "value": "USER",
  621. "description": "Entry is for a USER"
  622. },
  623. {
  624. "value": "GROUP",
  625. "description": "Entry is for a GROUP"
  626. }
  627. ],
  628. "default": "USER"
  629. }
  630. },
  631. {
  632. "variable": "id",
  633. "label": "ID",
  634. "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application",
  635. "schema": {
  636. "type": "int",
  637. "required": true,
  638. "min": 0
  639. }
  640. },
  641. {
  642. "variable": "access",
  643. "label": "Access",
  644. "schema": {
  645. "type": "string",
  646. "enum": [
  647. {
  648. "value": "READ",
  649. "description": "Read Access"
  650. },
  651. {
  652. "value": "MODIFY",
  653. "description": "Modify Access"
  654. },
  655. {
  656. "value": "FULL_CONTROL",
  657. "description": "FULL_CONTROL Access"
  658. }
  659. ]
  660. }
  661. }
  662. ]
  663. }
  664. }
  665. ]
  666. }
  667. },
  668. {
  669. "variable": "options",
  670. "label": "ACL Options",
  671. "schema": {
  672. "type": "dict",
  673. "attrs": [
  674. {
  675. "variable": "force",
  676. "label": "Force Flag",
  677. "description": "Enabling `Force` applies ACL even if the path has existing data",
  678. "schema": {
  679. "type": "boolean",
  680. "default": false
  681. }
  682. }
  683. ]
  684. }
  685. }
  686. ],
  687. "$ref": [
  688. "normalize/acl"
  689. ]
  690. }
  691. },
  692. {
  693. "variable": "hostPath",
  694. "label": "Host Path",
  695. "description": "The host path to use for storage.",
  696. "schema": {
  697. "type": "hostpath",
  698. "show_if": [
  699. [
  700. "aclEnable",
  701. "=",
  702. false
  703. ]
  704. ],
  705. "required": true
  706. }
  707. }
  708. ]
  709. }
  710. }
  711. ]
  712. }
  713. },
  714. {
  715. "variable": "logs",
  716. "label": "Omada Controller Logs Storage",
  717. "description": "The path to store Omada Controller Logs.",
  718. "schema": {
  719. "type": "dict",
  720. "attrs": [
  721. {
  722. "variable": "type",
  723. "label": "Type",
  724. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  725. "schema": {
  726. "type": "string",
  727. "required": true,
  728. "immutable": true,
  729. "default": "ixVolume",
  730. "enum": [
  731. {
  732. "value": "hostPath",
  733. "description": "Host Path (Path that already exists on the system)"
  734. },
  735. {
  736. "value": "ixVolume",
  737. "description": "ixVolume (Dataset created automatically by the system)"
  738. }
  739. ]
  740. }
  741. },
  742. {
  743. "variable": "ixVolumeConfig",
  744. "label": "ixVolume Configuration",
  745. "description": "The configuration for the ixVolume dataset.",
  746. "schema": {
  747. "type": "dict",
  748. "show_if": [
  749. [
  750. "type",
  751. "=",
  752. "ixVolume"
  753. ]
  754. ],
  755. "$ref": [
  756. "normalize/ixVolume"
  757. ],
  758. "attrs": [
  759. {
  760. "variable": "aclEnable",
  761. "label": "Enable ACL",
  762. "description": "Enable ACL for the dataset.",
  763. "schema": {
  764. "type": "boolean",
  765. "default": false
  766. }
  767. },
  768. {
  769. "variable": "datasetName",
  770. "label": "Dataset Name",
  771. "description": "The name of the dataset to use for storage.",
  772. "schema": {
  773. "type": "string",
  774. "required": true,
  775. "immutable": true,
  776. "hidden": true,
  777. "default": "logs"
  778. }
  779. },
  780. {
  781. "variable": "aclEntries",
  782. "label": "ACL Configuration",
  783. "schema": {
  784. "type": "dict",
  785. "show_if": [
  786. [
  787. "aclEnable",
  788. "=",
  789. true
  790. ]
  791. ],
  792. "attrs": [
  793. {
  794. "variable": "path",
  795. "label": "Path",
  796. "description": "Path to perform ACL",
  797. "schema": {
  798. "type": "string",
  799. "hidden": true
  800. }
  801. },
  802. {
  803. "variable": "entries",
  804. "label": "ACL Entries",
  805. "description": "ACL Entries",
  806. "schema": {
  807. "type": "list",
  808. "items": [
  809. {
  810. "variable": "aclEntry",
  811. "label": "ACL Entry",
  812. "schema": {
  813. "type": "dict",
  814. "attrs": [
  815. {
  816. "variable": "id_type",
  817. "label": "ID Type",
  818. "schema": {
  819. "type": "string",
  820. "enum": [
  821. {
  822. "value": "USER",
  823. "description": "Entry is for a USER"
  824. },
  825. {
  826. "value": "GROUP",
  827. "description": "Entry is for a GROUP"
  828. }
  829. ],
  830. "default": "USER"
  831. }
  832. },
  833. {
  834. "variable": "id",
  835. "label": "ID",
  836. "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application",
  837. "schema": {
  838. "type": "int",
  839. "required": true,
  840. "min": 0
  841. }
  842. },
  843. {
  844. "variable": "access",
  845. "label": "Access",
  846. "schema": {
  847. "type": "string",
  848. "enum": [
  849. {
  850. "value": "READ",
  851. "description": "Read Access"
  852. },
  853. {
  854. "value": "MODIFY",
  855. "description": "Modify Access"
  856. },
  857. {
  858. "value": "FULL_CONTROL",
  859. "description": "FULL_CONTROL Access"
  860. }
  861. ]
  862. }
  863. }
  864. ]
  865. }
  866. }
  867. ]
  868. }
  869. }
  870. ]
  871. }
  872. }
  873. ]
  874. }
  875. },
  876. {
  877. "variable": "hostPathConfig",
  878. "label": "Host Path Configuration",
  879. "schema": {
  880. "type": "dict",
  881. "show_if": [
  882. [
  883. "type",
  884. "=",
  885. "hostPath"
  886. ]
  887. ],
  888. "attrs": [
  889. {
  890. "variable": "aclEnable",
  891. "label": "Enable ACL",
  892. "description": "Enable ACL for the dataset.",
  893. "schema": {
  894. "type": "boolean",
  895. "default": false
  896. }
  897. },
  898. {
  899. "variable": "acl",
  900. "label": "ACL Configuration",
  901. "schema": {
  902. "type": "dict",
  903. "show_if": [
  904. [
  905. "aclEnable",
  906. "=",
  907. true
  908. ]
  909. ],
  910. "attrs": [
  911. {
  912. "variable": "path",
  913. "label": "Host Path",
  914. "description": "Host Path to perform ACL",
  915. "schema": {
  916. "type": "hostpath",
  917. "required": true,
  918. "empty": false
  919. }
  920. },
  921. {
  922. "variable": "entries",
  923. "label": "ACL Entries",
  924. "description": "ACL Entries",
  925. "schema": {
  926. "type": "list",
  927. "items": [
  928. {
  929. "variable": "aclEntry",
  930. "label": "ACL Entry",
  931. "schema": {
  932. "type": "dict",
  933. "attrs": [
  934. {
  935. "variable": "id_type",
  936. "label": "ID Type",
  937. "schema": {
  938. "type": "string",
  939. "enum": [
  940. {
  941. "value": "USER",
  942. "description": "Entry is for a USER"
  943. },
  944. {
  945. "value": "GROUP",
  946. "description": "Entry is for a GROUP"
  947. }
  948. ],
  949. "default": "USER"
  950. }
  951. },
  952. {
  953. "variable": "id",
  954. "label": "ID",
  955. "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application",
  956. "schema": {
  957. "type": "int",
  958. "required": true,
  959. "min": 0
  960. }
  961. },
  962. {
  963. "variable": "access",
  964. "label": "Access",
  965. "schema": {
  966. "type": "string",
  967. "enum": [
  968. {
  969. "value": "READ",
  970. "description": "Read Access"
  971. },
  972. {
  973. "value": "MODIFY",
  974. "description": "Modify Access"
  975. },
  976. {
  977. "value": "FULL_CONTROL",
  978. "description": "FULL_CONTROL Access"
  979. }
  980. ]
  981. }
  982. }
  983. ]
  984. }
  985. }
  986. ]
  987. }
  988. },
  989. {
  990. "variable": "options",
  991. "label": "ACL Options",
  992. "schema": {
  993. "type": "dict",
  994. "attrs": [
  995. {
  996. "variable": "force",
  997. "label": "Force Flag",
  998. "description": "Enabling `Force` applies ACL even if the path has existing data",
  999. "schema": {
  1000. "type": "boolean",
  1001. "default": false
  1002. }
  1003. }
  1004. ]
  1005. }
  1006. }
  1007. ],
  1008. "$ref": [
  1009. "normalize/acl"
  1010. ]
  1011. }
  1012. },
  1013. {
  1014. "variable": "hostPath",
  1015. "label": "Host Path",
  1016. "description": "The host path to use for storage.",
  1017. "schema": {
  1018. "type": "hostpath",
  1019. "show_if": [
  1020. [
  1021. "aclEnable",
  1022. "=",
  1023. false
  1024. ]
  1025. ],
  1026. "required": true
  1027. }
  1028. }
  1029. ]
  1030. }
  1031. }
  1032. ]
  1033. }
  1034. },
  1035. {
  1036. "variable": "additionalStorages",
  1037. "label": "Additional Storage",
  1038. "description": "Additional storage for Omada Controller.",
  1039. "schema": {
  1040. "type": "list",
  1041. "default": [],
  1042. "items": [
  1043. {
  1044. "variable": "storageEntry",
  1045. "label": "Storage Entry",
  1046. "schema": {
  1047. "type": "dict",
  1048. "attrs": [
  1049. {
  1050. "variable": "type",
  1051. "label": "Type",
  1052. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.</br>\nSMB Share: Is a SMB share that is mounted to a persistent volume claim.\n",
  1053. "schema": {
  1054. "type": "string",
  1055. "required": true,
  1056. "default": "ixVolume",
  1057. "immutable": true,
  1058. "enum": [
  1059. {
  1060. "value": "hostPath",
  1061. "description": "Host Path (Path that already exists on the system)"
  1062. },
  1063. {
  1064. "value": "ixVolume",
  1065. "description": "ixVolume (Dataset created automatically by the system)"
  1066. },
  1067. {
  1068. "value": "smb-pv-pvc",
  1069. "description": "SMB Share (Mounts a persistent volume claim to a SMB share)"
  1070. }
  1071. ]
  1072. }
  1073. },
  1074. {
  1075. "variable": "readOnly",
  1076. "label": "Read Only",
  1077. "description": "Mount the volume as read only.",
  1078. "schema": {
  1079. "type": "boolean",
  1080. "default": false
  1081. }
  1082. },
  1083. {
  1084. "variable": "mountPath",
  1085. "label": "Mount Path",
  1086. "description": "The path inside the container to mount the storage.",
  1087. "schema": {
  1088. "type": "path",
  1089. "required": true
  1090. }
  1091. },
  1092. {
  1093. "variable": "hostPathConfig",
  1094. "label": "Host Path Configuration",
  1095. "schema": {
  1096. "type": "dict",
  1097. "show_if": [
  1098. [
  1099. "type",
  1100. "=",
  1101. "hostPath"
  1102. ]
  1103. ],
  1104. "attrs": [
  1105. {
  1106. "variable": "aclEnable",
  1107. "label": "Enable ACL",
  1108. "description": "Enable ACL for the dataset.",
  1109. "schema": {
  1110. "type": "boolean",
  1111. "default": false
  1112. }
  1113. },
  1114. {
  1115. "variable": "acl",
  1116. "label": "ACL Configuration",
  1117. "schema": {
  1118. "type": "dict",
  1119. "show_if": [
  1120. [
  1121. "aclEnable",
  1122. "=",
  1123. true
  1124. ]
  1125. ],
  1126. "attrs": [
  1127. {
  1128. "variable": "path",
  1129. "label": "Host Path",
  1130. "description": "Host Path to perform ACL",
  1131. "schema": {
  1132. "type": "hostpath",
  1133. "required": true,
  1134. "empty": false
  1135. }
  1136. },
  1137. {
  1138. "variable": "entries",
  1139. "label": "ACL Entries",
  1140. "description": "ACL Entries",
  1141. "schema": {
  1142. "type": "list",
  1143. "items": [
  1144. {
  1145. "variable": "aclEntry",
  1146. "label": "ACL Entry",
  1147. "schema": {
  1148. "type": "dict",
  1149. "attrs": [
  1150. {
  1151. "variable": "id_type",
  1152. "label": "ID Type",
  1153. "schema": {
  1154. "type": "string",
  1155. "enum": [
  1156. {
  1157. "value": "USER",
  1158. "description": "Entry is for a USER"
  1159. },
  1160. {
  1161. "value": "GROUP",
  1162. "description": "Entry is for a GROUP"
  1163. }
  1164. ],
  1165. "default": "USER"
  1166. }
  1167. },
  1168. {
  1169. "variable": "id",
  1170. "label": "ID",
  1171. "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application",
  1172. "schema": {
  1173. "type": "int",
  1174. "required": true,
  1175. "min": 0
  1176. }
  1177. },
  1178. {
  1179. "variable": "access",
  1180. "label": "Access",
  1181. "schema": {
  1182. "type": "string",
  1183. "enum": [
  1184. {
  1185. "value": "READ",
  1186. "description": "Read Access"
  1187. },
  1188. {
  1189. "value": "MODIFY",
  1190. "description": "Modify Access"
  1191. },
  1192. {
  1193. "value": "FULL_CONTROL",
  1194. "description": "FULL_CONTROL Access"
  1195. }
  1196. ]
  1197. }
  1198. }
  1199. ]
  1200. }
  1201. }
  1202. ]
  1203. }
  1204. },
  1205. {
  1206. "variable": "options",
  1207. "label": "ACL Options",
  1208. "schema": {
  1209. "type": "dict",
  1210. "attrs": [
  1211. {
  1212. "variable": "force",
  1213. "label": "Force Flag",
  1214. "description": "Enabling `Force` applies ACL even if the path has existing data",
  1215. "schema": {
  1216. "type": "boolean",
  1217. "default": false
  1218. }
  1219. }
  1220. ]
  1221. }
  1222. }
  1223. ],
  1224. "$ref": [
  1225. "normalize/acl"
  1226. ]
  1227. }
  1228. },
  1229. {
  1230. "variable": "hostPath",
  1231. "label": "Host Path",
  1232. "description": "The host path to use for storage.",
  1233. "schema": {
  1234. "type": "hostpath",
  1235. "show_if": [
  1236. [
  1237. "aclEnable",
  1238. "=",
  1239. false
  1240. ]
  1241. ],
  1242. "required": true
  1243. }
  1244. }
  1245. ]
  1246. }
  1247. },
  1248. {
  1249. "variable": "ixVolumeConfig",
  1250. "label": "ixVolume Configuration",
  1251. "description": "The configuration for the ixVolume dataset.",
  1252. "schema": {
  1253. "type": "dict",
  1254. "show_if": [
  1255. [
  1256. "type",
  1257. "=",
  1258. "ixVolume"
  1259. ]
  1260. ],
  1261. "$ref": [
  1262. "normalize/ixVolume"
  1263. ],
  1264. "attrs": [
  1265. {
  1266. "variable": "aclEnable",
  1267. "label": "Enable ACL",
  1268. "description": "Enable ACL for the dataset.",
  1269. "schema": {
  1270. "type": "boolean",
  1271. "default": false
  1272. }
  1273. },
  1274. {
  1275. "variable": "datasetName",
  1276. "label": "Dataset Name",
  1277. "description": "The name of the dataset to use for storage.",
  1278. "schema": {
  1279. "type": "string",
  1280. "required": true,
  1281. "immutable": true,
  1282. "default": "storage_entry"
  1283. }
  1284. },
  1285. {
  1286. "variable": "aclEntries",
  1287. "label": "ACL Configuration",
  1288. "schema": {
  1289. "type": "dict",
  1290. "show_if": [
  1291. [
  1292. "aclEnable",
  1293. "=",
  1294. true
  1295. ]
  1296. ],
  1297. "attrs": [
  1298. {
  1299. "variable": "path",
  1300. "label": "Path",
  1301. "description": "Path to perform ACL",
  1302. "schema": {
  1303. "type": "string",
  1304. "hidden": true
  1305. }
  1306. },
  1307. {
  1308. "variable": "entries",
  1309. "label": "ACL Entries",
  1310. "description": "ACL Entries",
  1311. "schema": {
  1312. "type": "list",
  1313. "items": [
  1314. {
  1315. "variable": "aclEntry",
  1316. "label": "ACL Entry",
  1317. "schema": {
  1318. "type": "dict",
  1319. "attrs": [
  1320. {
  1321. "variable": "id_type",
  1322. "label": "ID Type",
  1323. "schema": {
  1324. "type": "string",
  1325. "enum": [
  1326. {
  1327. "value": "USER",
  1328. "description": "Entry is for a USER"
  1329. },
  1330. {
  1331. "value": "GROUP",
  1332. "description": "Entry is for a GROUP"
  1333. }
  1334. ],
  1335. "default": "USER"
  1336. }
  1337. },
  1338. {
  1339. "variable": "id",
  1340. "label": "ID",
  1341. "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application",
  1342. "schema": {
  1343. "type": "int",
  1344. "required": true,
  1345. "min": 0
  1346. }
  1347. },
  1348. {
  1349. "variable": "access",
  1350. "label": "Access",
  1351. "schema": {
  1352. "type": "string",
  1353. "enum": [
  1354. {
  1355. "value": "READ",
  1356. "description": "Read Access"
  1357. },
  1358. {
  1359. "value": "MODIFY",
  1360. "description": "Modify Access"
  1361. },
  1362. {
  1363. "value": "FULL_CONTROL",
  1364. "description": "FULL_CONTROL Access"
  1365. }
  1366. ]
  1367. }
  1368. }
  1369. ]
  1370. }
  1371. }
  1372. ]
  1373. }
  1374. }
  1375. ]
  1376. }
  1377. }
  1378. ]
  1379. }
  1380. },
  1381. {
  1382. "variable": "smbConfig",
  1383. "label": "SMB Share Configuration",
  1384. "description": "The configuration for the SMB Share.",
  1385. "schema": {
  1386. "type": "dict",
  1387. "show_if": [
  1388. [
  1389. "type",
  1390. "=",
  1391. "smb-pv-pvc"
  1392. ]
  1393. ],
  1394. "attrs": [
  1395. {
  1396. "variable": "server",
  1397. "label": "Server",
  1398. "description": "The server for the SMB share.",
  1399. "schema": {
  1400. "type": "string",
  1401. "required": true
  1402. }
  1403. },
  1404. {
  1405. "variable": "share",
  1406. "label": "Share",
  1407. "description": "The share name for the SMB share.",
  1408. "schema": {
  1409. "type": "string",
  1410. "required": true
  1411. }
  1412. },
  1413. {
  1414. "variable": "domain",
  1415. "label": "Domain (Optional)",
  1416. "description": "The domain for the SMB share.",
  1417. "schema": {
  1418. "type": "string"
  1419. }
  1420. },
  1421. {
  1422. "variable": "username",
  1423. "label": "Username",
  1424. "description": "The username for the SMB share.",
  1425. "schema": {
  1426. "type": "string",
  1427. "required": true
  1428. }
  1429. },
  1430. {
  1431. "variable": "password",
  1432. "label": "Password",
  1433. "description": "The password for the SMB share.",
  1434. "schema": {
  1435. "type": "string",
  1436. "required": true,
  1437. "private": true
  1438. }
  1439. },
  1440. {
  1441. "variable": "size",
  1442. "label": "Size (in Gi)",
  1443. "description": "The size of the volume quota.",
  1444. "schema": {
  1445. "type": "int",
  1446. "required": true,
  1447. "min": 1,
  1448. "default": 1
  1449. }
  1450. }
  1451. ]
  1452. }
  1453. }
  1454. ]
  1455. }
  1456. }
  1457. ]
  1458. }
  1459. }
  1460. ]
  1461. }
  1462. },
  1463. {
  1464. "variable": "resources",
  1465. "group": "Resources Configuration",
  1466. "label": "",
  1467. "schema": {
  1468. "type": "dict",
  1469. "attrs": [
  1470. {
  1471. "variable": "limits",
  1472. "label": "Limits",
  1473. "schema": {
  1474. "type": "dict",
  1475. "attrs": [
  1476. {
  1477. "variable": "cpu",
  1478. "label": "CPU",
  1479. "description": "CPU limit for Omada Controller.",
  1480. "schema": {
  1481. "type": "string",
  1482. "max_length": 6,
  1483. "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$",
  1484. "valid_chars_error": "Valid CPU limit formats are</br>\n- Plain Integer - eg. 1</br>\n- Float - eg. 0.5</br>\n- Milicpu - eg. 500m\n",
  1485. "default": "4000m",
  1486. "required": true
  1487. }
  1488. },
  1489. {
  1490. "variable": "memory",
  1491. "label": "Memory",
  1492. "description": "Memory limit for Omada Controller.",
  1493. "schema": {
  1494. "type": "string",
  1495. "max_length": 12,
  1496. "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$",
  1497. "valid_chars_error": "Valid Memory limit formats are</br>\n- Suffixed with E/P/T/G/M/K - eg. 1G</br>\n- Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi</br>\n- Plain Integer in bytes - eg. 1024</br>\n- Exponent - eg. 134e6\n",
  1498. "default": "8Gi",
  1499. "required": true
  1500. }
  1501. }
  1502. ]
  1503. }
  1504. }
  1505. ]
  1506. }
  1507. }
  1508. ]
  1509. },
  1510. "app_readme": "<h1>Omada Controller</h1>\n<p><a href=\"https://github.com/mbentley/docker-omada-controller\">Omada Controller</a> is a network management controller for Omada (TP-Link) Equipment.</p>",
  1511. "detailed_readme": "<h1>Omada Controller</h1>\n<p><a href=\"https://github.com/mbentley/docker-omada-controller\">Omada Controller</a> is a network management controller for Omada (TP-Link) Equipment.</p>",
  1512. "changelog": null
  1513. }
  1514. }