app_versions.json 76 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997
  1. {
  2. "1.2.12": {
  3. "healthy": true,
  4. "supported": false,
  5. "healthy_error": null,
  6. "location": "/__w/charts/charts/community/kavita/1.2.12",
  7. "last_update": "2025-03-05 14:27:33",
  8. "required_features": [
  9. "normalize/ixVolume",
  10. "definitions/timezone",
  11. "normalize/acl"
  12. ],
  13. "human_version": "0.8.4_1.2.12",
  14. "version": "1.2.12",
  15. "chart_metadata": {
  16. "name": "kavita",
  17. "description": "Kavita is a fast, feature rich, cross platform reading server.",
  18. "annotations": {
  19. "title": "Kavita"
  20. },
  21. "type": "application",
  22. "version": "1.2.12",
  23. "apiVersion": "v2",
  24. "appVersion": "0.8.4",
  25. "kubeVersion": ">=1.16.0-0",
  26. "maintainers": [
  27. {
  28. "name": "truenas",
  29. "url": "https://www.truenas.com/",
  30. "email": "dev@ixsystems.com"
  31. }
  32. ],
  33. "dependencies": [
  34. {
  35. "name": "common",
  36. "repository": "file://../../../common",
  37. "version": "1.2.9"
  38. }
  39. ],
  40. "home": "https://www.kavitareader.com/",
  41. "icon": "https://media.sys.truenas.net/apps/kavita/icons/icon.png",
  42. "sources": [
  43. "https://github.com/Kareadita/Kavita",
  44. "https://github.com/truenas/charts/tree/master/library/ix-dev/community/kavita",
  45. "https://www.kavitareader.com"
  46. ],
  47. "keywords": [
  48. "manga",
  49. "ebook"
  50. ]
  51. },
  52. "app_metadata": {
  53. "runAsContext": [
  54. {
  55. "userName": "root",
  56. "groupName": "root",
  57. "gid": 0,
  58. "uid": 0,
  59. "description": "Kavita runs as root user."
  60. }
  61. ],
  62. "capabilities": [],
  63. "hostMounts": []
  64. },
  65. "schema": {
  66. "groups": [
  67. {
  68. "name": "Kavita Configuration",
  69. "description": "Configure Kavita"
  70. },
  71. {
  72. "name": "Network Configuration",
  73. "description": "Configure Network for Kavita"
  74. },
  75. {
  76. "name": "Storage Configuration",
  77. "description": "Configure Storage for Kavita"
  78. },
  79. {
  80. "name": "Resources Configuration",
  81. "description": "Configure Resources for Kavita"
  82. }
  83. ],
  84. "portals": {
  85. "web_portal": {
  86. "protocols": [
  87. "$kubernetes-resource_configmap_portal_protocol"
  88. ],
  89. "host": [
  90. "$kubernetes-resource_configmap_portal_host"
  91. ],
  92. "ports": [
  93. "$kubernetes-resource_configmap_portal_port"
  94. ],
  95. "path": "$kubernetes-resource_configmap_portal_path"
  96. }
  97. },
  98. "questions": [
  99. {
  100. "variable": "TZ",
  101. "group": "Kavita Configuration",
  102. "label": "Timezone",
  103. "schema": {
  104. "type": "string",
  105. "default": "America/Los_Angeles",
  106. "required": true,
  107. "$ref": [
  108. "definitions/timezone"
  109. ],
  110. "enum": [
  111. {
  112. "value": "Asia/Damascus",
  113. "description": "'Asia/Damascus' timezone"
  114. },
  115. {
  116. "value": "Asia/Saigon",
  117. "description": "'Asia/Saigon' timezone"
  118. }
  119. ]
  120. }
  121. },
  122. {
  123. "variable": "kavitaConfig",
  124. "label": "",
  125. "group": "Kavita Configuration",
  126. "schema": {
  127. "type": "dict",
  128. "attrs": [
  129. {
  130. "variable": "additionalEnvs",
  131. "label": "Additional Environment Variables",
  132. "description": "Configure additional environment variables for Kavita.",
  133. "schema": {
  134. "type": "list",
  135. "default": [],
  136. "items": [
  137. {
  138. "variable": "env",
  139. "label": "Environment Variable",
  140. "schema": {
  141. "type": "dict",
  142. "attrs": [
  143. {
  144. "variable": "name",
  145. "label": "Name",
  146. "schema": {
  147. "type": "string",
  148. "required": true
  149. }
  150. },
  151. {
  152. "variable": "value",
  153. "label": "Value",
  154. "schema": {
  155. "type": "string",
  156. "required": true
  157. }
  158. }
  159. ]
  160. }
  161. }
  162. ]
  163. }
  164. }
  165. ]
  166. }
  167. },
  168. {
  169. "variable": "kavitaNetwork",
  170. "label": "",
  171. "group": "Network Configuration",
  172. "schema": {
  173. "type": "dict",
  174. "attrs": [
  175. {
  176. "variable": "webPort",
  177. "label": "Web Port",
  178. "description": "The port for the Kavita Web UI.",
  179. "schema": {
  180. "type": "int",
  181. "default": 30069,
  182. "min": 9000,
  183. "max": 65535,
  184. "required": true
  185. }
  186. }
  187. ]
  188. }
  189. },
  190. {
  191. "variable": "kavitaStorage",
  192. "label": "",
  193. "group": "Storage Configuration",
  194. "schema": {
  195. "type": "dict",
  196. "attrs": [
  197. {
  198. "variable": "config",
  199. "label": "Kavita Config Storage",
  200. "description": "The path to store Kavita Configuration.",
  201. "schema": {
  202. "type": "dict",
  203. "attrs": [
  204. {
  205. "variable": "type",
  206. "label": "Type",
  207. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  208. "schema": {
  209. "type": "string",
  210. "required": true,
  211. "immutable": true,
  212. "default": "ixVolume",
  213. "enum": [
  214. {
  215. "value": "hostPath",
  216. "description": "Host Path (Path that already exists on the system)"
  217. },
  218. {
  219. "value": "ixVolume",
  220. "description": "ixVolume (Dataset created automatically by the system)"
  221. }
  222. ]
  223. }
  224. },
  225. {
  226. "variable": "ixVolumeConfig",
  227. "label": "ixVolume Configuration",
  228. "description": "The configuration for the ixVolume dataset.",
  229. "schema": {
  230. "type": "dict",
  231. "show_if": [
  232. [
  233. "type",
  234. "=",
  235. "ixVolume"
  236. ]
  237. ],
  238. "$ref": [
  239. "normalize/ixVolume"
  240. ],
  241. "attrs": [
  242. {
  243. "variable": "aclEnable",
  244. "label": "Enable ACL",
  245. "description": "Enable ACL for the dataset.",
  246. "schema": {
  247. "type": "boolean",
  248. "default": false
  249. }
  250. },
  251. {
  252. "variable": "datasetName",
  253. "label": "Dataset Name",
  254. "description": "The name of the dataset to use for storage.",
  255. "schema": {
  256. "type": "string",
  257. "required": true,
  258. "immutable": true,
  259. "hidden": true,
  260. "default": "config"
  261. }
  262. },
  263. {
  264. "variable": "aclEntries",
  265. "label": "ACL Configuration",
  266. "schema": {
  267. "type": "dict",
  268. "show_if": [
  269. [
  270. "aclEnable",
  271. "=",
  272. true
  273. ]
  274. ],
  275. "attrs": [
  276. {
  277. "variable": "path",
  278. "label": "Path",
  279. "description": "Path to perform ACL",
  280. "schema": {
  281. "type": "string",
  282. "hidden": true
  283. }
  284. },
  285. {
  286. "variable": "entries",
  287. "label": "ACL Entries",
  288. "description": "ACL Entries",
  289. "schema": {
  290. "type": "list",
  291. "items": [
  292. {
  293. "variable": "aclEntry",
  294. "label": "ACL Entry",
  295. "schema": {
  296. "type": "dict",
  297. "attrs": [
  298. {
  299. "variable": "id_type",
  300. "label": "ID Type",
  301. "schema": {
  302. "type": "string",
  303. "enum": [
  304. {
  305. "value": "USER",
  306. "description": "Entry is for a USER"
  307. },
  308. {
  309. "value": "GROUP",
  310. "description": "Entry is for a GROUP"
  311. }
  312. ],
  313. "default": "USER"
  314. }
  315. },
  316. {
  317. "variable": "id",
  318. "label": "ID",
  319. "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application",
  320. "schema": {
  321. "type": "int",
  322. "required": true,
  323. "min": 0
  324. }
  325. },
  326. {
  327. "variable": "access",
  328. "label": "Access",
  329. "schema": {
  330. "type": "string",
  331. "enum": [
  332. {
  333. "value": "READ",
  334. "description": "Read Access"
  335. },
  336. {
  337. "value": "MODIFY",
  338. "description": "Modify Access"
  339. },
  340. {
  341. "value": "FULL_CONTROL",
  342. "description": "FULL_CONTROL Access"
  343. }
  344. ]
  345. }
  346. }
  347. ]
  348. }
  349. }
  350. ]
  351. }
  352. }
  353. ]
  354. }
  355. }
  356. ]
  357. }
  358. },
  359. {
  360. "variable": "hostPathConfig",
  361. "label": "Host Path Configuration",
  362. "schema": {
  363. "type": "dict",
  364. "show_if": [
  365. [
  366. "type",
  367. "=",
  368. "hostPath"
  369. ]
  370. ],
  371. "attrs": [
  372. {
  373. "variable": "aclEnable",
  374. "label": "Enable ACL",
  375. "description": "Enable ACL for the dataset.",
  376. "schema": {
  377. "type": "boolean",
  378. "default": false
  379. }
  380. },
  381. {
  382. "variable": "acl",
  383. "label": "ACL Configuration",
  384. "schema": {
  385. "type": "dict",
  386. "show_if": [
  387. [
  388. "aclEnable",
  389. "=",
  390. true
  391. ]
  392. ],
  393. "attrs": [
  394. {
  395. "variable": "path",
  396. "label": "Host Path",
  397. "description": "Host Path to perform ACL",
  398. "schema": {
  399. "type": "hostpath",
  400. "required": true,
  401. "empty": false
  402. }
  403. },
  404. {
  405. "variable": "entries",
  406. "label": "ACL Entries",
  407. "description": "ACL Entries",
  408. "schema": {
  409. "type": "list",
  410. "items": [
  411. {
  412. "variable": "aclEntry",
  413. "label": "ACL Entry",
  414. "schema": {
  415. "type": "dict",
  416. "attrs": [
  417. {
  418. "variable": "id_type",
  419. "label": "ID Type",
  420. "schema": {
  421. "type": "string",
  422. "enum": [
  423. {
  424. "value": "USER",
  425. "description": "Entry is for a USER"
  426. },
  427. {
  428. "value": "GROUP",
  429. "description": "Entry is for a GROUP"
  430. }
  431. ],
  432. "default": "USER"
  433. }
  434. },
  435. {
  436. "variable": "id",
  437. "label": "ID",
  438. "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application",
  439. "schema": {
  440. "type": "int",
  441. "required": true,
  442. "min": 0
  443. }
  444. },
  445. {
  446. "variable": "access",
  447. "label": "Access",
  448. "schema": {
  449. "type": "string",
  450. "enum": [
  451. {
  452. "value": "READ",
  453. "description": "Read Access"
  454. },
  455. {
  456. "value": "MODIFY",
  457. "description": "Modify Access"
  458. },
  459. {
  460. "value": "FULL_CONTROL",
  461. "description": "FULL_CONTROL Access"
  462. }
  463. ]
  464. }
  465. }
  466. ]
  467. }
  468. }
  469. ]
  470. }
  471. },
  472. {
  473. "variable": "options",
  474. "label": "ACL Options",
  475. "schema": {
  476. "type": "dict",
  477. "attrs": [
  478. {
  479. "variable": "force",
  480. "label": "Force Flag",
  481. "description": "Enabling `Force` applies ACL even if the path has existing data",
  482. "schema": {
  483. "type": "boolean",
  484. "default": false
  485. }
  486. }
  487. ]
  488. }
  489. }
  490. ],
  491. "$ref": [
  492. "normalize/acl"
  493. ]
  494. }
  495. },
  496. {
  497. "variable": "hostPath",
  498. "label": "Host Path",
  499. "description": "The host path to use for storage.",
  500. "schema": {
  501. "type": "hostpath",
  502. "show_if": [
  503. [
  504. "aclEnable",
  505. "=",
  506. false
  507. ]
  508. ],
  509. "required": true
  510. }
  511. }
  512. ]
  513. }
  514. }
  515. ]
  516. }
  517. },
  518. {
  519. "variable": "additionalStorages",
  520. "label": "Additional Storage",
  521. "description": "Additional storage for Kavita.",
  522. "schema": {
  523. "type": "list",
  524. "default": [],
  525. "items": [
  526. {
  527. "variable": "storageEntry",
  528. "label": "Storage Entry",
  529. "schema": {
  530. "type": "dict",
  531. "attrs": [
  532. {
  533. "variable": "type",
  534. "label": "Type",
  535. "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",
  536. "schema": {
  537. "type": "string",
  538. "required": true,
  539. "default": "ixVolume",
  540. "immutable": true,
  541. "enum": [
  542. {
  543. "value": "hostPath",
  544. "description": "Host Path (Path that already exists on the system)"
  545. },
  546. {
  547. "value": "ixVolume",
  548. "description": "ixVolume (Dataset created automatically by the system)"
  549. },
  550. {
  551. "value": "smb-pv-pvc",
  552. "description": "SMB Share (Mounts a persistent volume claim to a SMB share)"
  553. }
  554. ]
  555. }
  556. },
  557. {
  558. "variable": "readOnly",
  559. "label": "Read Only",
  560. "description": "Mount the volume as read only.",
  561. "schema": {
  562. "type": "boolean",
  563. "default": false
  564. }
  565. },
  566. {
  567. "variable": "mountPath",
  568. "label": "Mount Path",
  569. "description": "The path inside the container to mount the storage.",
  570. "schema": {
  571. "type": "path",
  572. "required": true
  573. }
  574. },
  575. {
  576. "variable": "hostPathConfig",
  577. "label": "Host Path Configuration",
  578. "schema": {
  579. "type": "dict",
  580. "show_if": [
  581. [
  582. "type",
  583. "=",
  584. "hostPath"
  585. ]
  586. ],
  587. "attrs": [
  588. {
  589. "variable": "aclEnable",
  590. "label": "Enable ACL",
  591. "description": "Enable ACL for the dataset.",
  592. "schema": {
  593. "type": "boolean",
  594. "default": false
  595. }
  596. },
  597. {
  598. "variable": "acl",
  599. "label": "ACL Configuration",
  600. "schema": {
  601. "type": "dict",
  602. "show_if": [
  603. [
  604. "aclEnable",
  605. "=",
  606. true
  607. ]
  608. ],
  609. "attrs": [
  610. {
  611. "variable": "path",
  612. "label": "Host Path",
  613. "description": "Host Path to perform ACL",
  614. "schema": {
  615. "type": "hostpath",
  616. "required": true,
  617. "empty": false
  618. }
  619. },
  620. {
  621. "variable": "entries",
  622. "label": "ACL Entries",
  623. "description": "ACL Entries",
  624. "schema": {
  625. "type": "list",
  626. "items": [
  627. {
  628. "variable": "aclEntry",
  629. "label": "ACL Entry",
  630. "schema": {
  631. "type": "dict",
  632. "attrs": [
  633. {
  634. "variable": "id_type",
  635. "label": "ID Type",
  636. "schema": {
  637. "type": "string",
  638. "enum": [
  639. {
  640. "value": "USER",
  641. "description": "Entry is for a USER"
  642. },
  643. {
  644. "value": "GROUP",
  645. "description": "Entry is for a GROUP"
  646. }
  647. ],
  648. "default": "USER"
  649. }
  650. },
  651. {
  652. "variable": "id",
  653. "label": "ID",
  654. "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application",
  655. "schema": {
  656. "type": "int",
  657. "required": true,
  658. "min": 0
  659. }
  660. },
  661. {
  662. "variable": "access",
  663. "label": "Access",
  664. "schema": {
  665. "type": "string",
  666. "enum": [
  667. {
  668. "value": "READ",
  669. "description": "Read Access"
  670. },
  671. {
  672. "value": "MODIFY",
  673. "description": "Modify Access"
  674. },
  675. {
  676. "value": "FULL_CONTROL",
  677. "description": "FULL_CONTROL Access"
  678. }
  679. ]
  680. }
  681. }
  682. ]
  683. }
  684. }
  685. ]
  686. }
  687. },
  688. {
  689. "variable": "options",
  690. "label": "ACL Options",
  691. "schema": {
  692. "type": "dict",
  693. "attrs": [
  694. {
  695. "variable": "force",
  696. "label": "Force Flag",
  697. "description": "Enabling `Force` applies ACL even if the path has existing data",
  698. "schema": {
  699. "type": "boolean",
  700. "default": false
  701. }
  702. }
  703. ]
  704. }
  705. }
  706. ],
  707. "$ref": [
  708. "normalize/acl"
  709. ]
  710. }
  711. },
  712. {
  713. "variable": "hostPath",
  714. "label": "Host Path",
  715. "description": "The host path to use for storage.",
  716. "schema": {
  717. "type": "hostpath",
  718. "show_if": [
  719. [
  720. "aclEnable",
  721. "=",
  722. false
  723. ]
  724. ],
  725. "required": true
  726. }
  727. }
  728. ]
  729. }
  730. },
  731. {
  732. "variable": "ixVolumeConfig",
  733. "label": "ixVolume Configuration",
  734. "description": "The configuration for the ixVolume dataset.",
  735. "schema": {
  736. "type": "dict",
  737. "show_if": [
  738. [
  739. "type",
  740. "=",
  741. "ixVolume"
  742. ]
  743. ],
  744. "$ref": [
  745. "normalize/ixVolume"
  746. ],
  747. "attrs": [
  748. {
  749. "variable": "aclEnable",
  750. "label": "Enable ACL",
  751. "description": "Enable ACL for the dataset.",
  752. "schema": {
  753. "type": "boolean",
  754. "default": false
  755. }
  756. },
  757. {
  758. "variable": "datasetName",
  759. "label": "Dataset Name",
  760. "description": "The name of the dataset to use for storage.",
  761. "schema": {
  762. "type": "string",
  763. "required": true,
  764. "immutable": true,
  765. "default": "storage_entry"
  766. }
  767. },
  768. {
  769. "variable": "aclEntries",
  770. "label": "ACL Configuration",
  771. "schema": {
  772. "type": "dict",
  773. "show_if": [
  774. [
  775. "aclEnable",
  776. "=",
  777. true
  778. ]
  779. ],
  780. "attrs": [
  781. {
  782. "variable": "path",
  783. "label": "Path",
  784. "description": "Path to perform ACL",
  785. "schema": {
  786. "type": "string",
  787. "hidden": true
  788. }
  789. },
  790. {
  791. "variable": "entries",
  792. "label": "ACL Entries",
  793. "description": "ACL Entries",
  794. "schema": {
  795. "type": "list",
  796. "items": [
  797. {
  798. "variable": "aclEntry",
  799. "label": "ACL Entry",
  800. "schema": {
  801. "type": "dict",
  802. "attrs": [
  803. {
  804. "variable": "id_type",
  805. "label": "ID Type",
  806. "schema": {
  807. "type": "string",
  808. "enum": [
  809. {
  810. "value": "USER",
  811. "description": "Entry is for a USER"
  812. },
  813. {
  814. "value": "GROUP",
  815. "description": "Entry is for a GROUP"
  816. }
  817. ],
  818. "default": "USER"
  819. }
  820. },
  821. {
  822. "variable": "id",
  823. "label": "ID",
  824. "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application",
  825. "schema": {
  826. "type": "int",
  827. "required": true,
  828. "min": 0
  829. }
  830. },
  831. {
  832. "variable": "access",
  833. "label": "Access",
  834. "schema": {
  835. "type": "string",
  836. "enum": [
  837. {
  838. "value": "READ",
  839. "description": "Read Access"
  840. },
  841. {
  842. "value": "MODIFY",
  843. "description": "Modify Access"
  844. },
  845. {
  846. "value": "FULL_CONTROL",
  847. "description": "FULL_CONTROL Access"
  848. }
  849. ]
  850. }
  851. }
  852. ]
  853. }
  854. }
  855. ]
  856. }
  857. }
  858. ]
  859. }
  860. }
  861. ]
  862. }
  863. },
  864. {
  865. "variable": "smbConfig",
  866. "label": "SMB Share Configuration",
  867. "description": "The configuration for the SMB Share.",
  868. "schema": {
  869. "type": "dict",
  870. "show_if": [
  871. [
  872. "type",
  873. "=",
  874. "smb-pv-pvc"
  875. ]
  876. ],
  877. "attrs": [
  878. {
  879. "variable": "server",
  880. "label": "Server",
  881. "description": "The server for the SMB share.",
  882. "schema": {
  883. "type": "string",
  884. "required": true
  885. }
  886. },
  887. {
  888. "variable": "share",
  889. "label": "Share",
  890. "description": "The share name for the SMB share.",
  891. "schema": {
  892. "type": "string",
  893. "required": true
  894. }
  895. },
  896. {
  897. "variable": "domain",
  898. "label": "Domain (Optional)",
  899. "description": "The domain for the SMB share.",
  900. "schema": {
  901. "type": "string"
  902. }
  903. },
  904. {
  905. "variable": "username",
  906. "label": "Username",
  907. "description": "The username for the SMB share.",
  908. "schema": {
  909. "type": "string",
  910. "required": true
  911. }
  912. },
  913. {
  914. "variable": "password",
  915. "label": "Password",
  916. "description": "The password for the SMB share.",
  917. "schema": {
  918. "type": "string",
  919. "required": true,
  920. "private": true
  921. }
  922. },
  923. {
  924. "variable": "size",
  925. "label": "Size (in Gi)",
  926. "description": "The size of the volume quota.",
  927. "schema": {
  928. "type": "int",
  929. "required": true,
  930. "min": 1,
  931. "default": 1
  932. }
  933. }
  934. ]
  935. }
  936. }
  937. ]
  938. }
  939. }
  940. ]
  941. }
  942. }
  943. ]
  944. }
  945. },
  946. {
  947. "variable": "resources",
  948. "group": "Resources Configuration",
  949. "label": "",
  950. "schema": {
  951. "type": "dict",
  952. "attrs": [
  953. {
  954. "variable": "limits",
  955. "label": "Limits",
  956. "schema": {
  957. "type": "dict",
  958. "attrs": [
  959. {
  960. "variable": "cpu",
  961. "label": "CPU",
  962. "description": "CPU limit for Kavita.",
  963. "schema": {
  964. "type": "string",
  965. "max_length": 6,
  966. "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$",
  967. "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",
  968. "default": "4000m",
  969. "required": true
  970. }
  971. },
  972. {
  973. "variable": "memory",
  974. "label": "Memory",
  975. "description": "Memory limit for Kavita.",
  976. "schema": {
  977. "type": "string",
  978. "max_length": 12,
  979. "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$",
  980. "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",
  981. "default": "8Gi",
  982. "required": true
  983. }
  984. }
  985. ]
  986. }
  987. }
  988. ]
  989. }
  990. }
  991. ]
  992. },
  993. "app_readme": "<h1>Kavita</h1>\n<p><a href=\"https://www.kavitareader.com\">Kavita</a> is a fast, feature rich, cross platform reading server.</p>",
  994. "detailed_readme": "<h1>Kavita</h1>\n<p><a href=\"https://www.kavitareader.com\">Kavita</a> is a fast, feature rich, cross platform reading server.</p>",
  995. "changelog": null
  996. }
  997. }