app_versions.json 134 KB

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