app_versions.json 134 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692
  1. {
  2. "1.2.10": {
  3. "healthy": true,
  4. "supported": false,
  5. "healthy_error": null,
  6. "location": "/__w/charts/charts/community/listmonk/1.2.10",
  7. "last_update": "2025-03-06 08:26:26",
  8. "required_features": [
  9. "normalize/ixVolume",
  10. "normalize/acl"
  11. ],
  12. "human_version": "4.1.0_1.2.10",
  13. "version": "1.2.10",
  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.10",
  22. "apiVersion": "v2",
  23. "appVersion": "4.1.0",
  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.9"
  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. "required": true
  557. }
  558. }
  559. ]
  560. }
  561. }
  562. ]
  563. }
  564. },
  565. {
  566. "variable": "pgData",
  567. "label": "Listmonk Postgres Data Storage",
  568. "description": "The path to store Listmonk Postgres Data.",
  569. "schema": {
  570. "type": "dict",
  571. "attrs": [
  572. {
  573. "variable": "type",
  574. "label": "Type",
  575. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  576. "schema": {
  577. "type": "string",
  578. "required": true,
  579. "immutable": true,
  580. "default": "ixVolume",
  581. "enum": [
  582. {
  583. "value": "hostPath",
  584. "description": "Host Path (Path that already exists on the system)"
  585. },
  586. {
  587. "value": "ixVolume",
  588. "description": "ixVolume (Dataset created automatically by the system)"
  589. }
  590. ]
  591. }
  592. },
  593. {
  594. "variable": "ixVolumeConfig",
  595. "label": "ixVolume Configuration",
  596. "description": "The configuration for the ixVolume dataset.",
  597. "schema": {
  598. "type": "dict",
  599. "hidden": true,
  600. "show_if": [
  601. [
  602. "type",
  603. "=",
  604. "ixVolume"
  605. ]
  606. ],
  607. "$ref": [
  608. "normalize/ixVolume"
  609. ],
  610. "attrs": [
  611. {
  612. "variable": "aclEnable",
  613. "label": "Enable ACL",
  614. "description": "Enable ACL for the dataset.",
  615. "schema": {
  616. "type": "boolean",
  617. "hidden": true,
  618. "default": false
  619. }
  620. },
  621. {
  622. "variable": "datasetName",
  623. "label": "Dataset Name",
  624. "description": "The name of the dataset to use for storage.",
  625. "schema": {
  626. "type": "string",
  627. "required": true,
  628. "immutable": true,
  629. "hidden": true,
  630. "default": "pgData"
  631. }
  632. },
  633. {
  634. "variable": "aclEntries",
  635. "label": "ACL Configuration",
  636. "schema": {
  637. "type": "dict",
  638. "show_if": [
  639. [
  640. "aclEnable",
  641. "=",
  642. true
  643. ]
  644. ],
  645. "attrs": [
  646. {
  647. "variable": "path",
  648. "label": "Path",
  649. "description": "Path to perform ACL",
  650. "schema": {
  651. "type": "string",
  652. "hidden": true
  653. }
  654. },
  655. {
  656. "variable": "entries",
  657. "label": "ACL Entries",
  658. "description": "ACL Entries",
  659. "schema": {
  660. "type": "list",
  661. "items": [
  662. {
  663. "variable": "aclEntry",
  664. "label": "ACL Entry",
  665. "schema": {
  666. "type": "dict",
  667. "attrs": [
  668. {
  669. "variable": "id_type",
  670. "label": "ID Type",
  671. "schema": {
  672. "type": "string",
  673. "enum": [
  674. {
  675. "value": "USER",
  676. "description": "Entry is for a USER"
  677. },
  678. {
  679. "value": "GROUP",
  680. "description": "Entry is for a GROUP"
  681. }
  682. ],
  683. "default": "USER"
  684. }
  685. },
  686. {
  687. "variable": "id",
  688. "label": "ID",
  689. "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application",
  690. "schema": {
  691. "type": "int",
  692. "required": true,
  693. "min": 0
  694. }
  695. },
  696. {
  697. "variable": "access",
  698. "label": "Access",
  699. "schema": {
  700. "type": "string",
  701. "enum": [
  702. {
  703. "value": "READ",
  704. "description": "Read Access"
  705. },
  706. {
  707. "value": "MODIFY",
  708. "description": "Modify Access"
  709. },
  710. {
  711. "value": "FULL_CONTROL",
  712. "description": "FULL_CONTROL Access"
  713. }
  714. ]
  715. }
  716. }
  717. ]
  718. }
  719. }
  720. ]
  721. }
  722. }
  723. ]
  724. }
  725. }
  726. ]
  727. }
  728. },
  729. {
  730. "variable": "hostPathConfig",
  731. "label": "Host Path Configuration",
  732. "schema": {
  733. "type": "dict",
  734. "show_if": [
  735. [
  736. "type",
  737. "=",
  738. "hostPath"
  739. ]
  740. ],
  741. "attrs": [
  742. {
  743. "variable": "aclEnable",
  744. "label": "Enable ACL",
  745. "description": "Enable ACL for the dataset.",
  746. "schema": {
  747. "type": "boolean",
  748. "hidden": true,
  749. "default": false
  750. }
  751. },
  752. {
  753. "variable": "acl",
  754. "label": "ACL Configuration",
  755. "schema": {
  756. "type": "dict",
  757. "show_if": [
  758. [
  759. "aclEnable",
  760. "=",
  761. true
  762. ]
  763. ],
  764. "attrs": [
  765. {
  766. "variable": "path",
  767. "label": "Host Path",
  768. "description": "Host Path to perform ACL",
  769. "schema": {
  770. "type": "hostpath",
  771. "required": true,
  772. "empty": false
  773. }
  774. },
  775. {
  776. "variable": "entries",
  777. "label": "ACL Entries",
  778. "description": "ACL Entries",
  779. "schema": {
  780. "type": "list",
  781. "items": [
  782. {
  783. "variable": "aclEntry",
  784. "label": "ACL Entry",
  785. "schema": {
  786. "type": "dict",
  787. "attrs": [
  788. {
  789. "variable": "id_type",
  790. "label": "ID Type",
  791. "schema": {
  792. "type": "string",
  793. "enum": [
  794. {
  795. "value": "USER",
  796. "description": "Entry is for a USER"
  797. },
  798. {
  799. "value": "GROUP",
  800. "description": "Entry is for a GROUP"
  801. }
  802. ],
  803. "default": "USER"
  804. }
  805. },
  806. {
  807. "variable": "id",
  808. "label": "ID",
  809. "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application",
  810. "schema": {
  811. "type": "int",
  812. "required": true,
  813. "min": 0
  814. }
  815. },
  816. {
  817. "variable": "access",
  818. "label": "Access",
  819. "schema": {
  820. "type": "string",
  821. "enum": [
  822. {
  823. "value": "READ",
  824. "description": "Read Access"
  825. },
  826. {
  827. "value": "MODIFY",
  828. "description": "Modify Access"
  829. },
  830. {
  831. "value": "FULL_CONTROL",
  832. "description": "FULL_CONTROL Access"
  833. }
  834. ]
  835. }
  836. }
  837. ]
  838. }
  839. }
  840. ]
  841. }
  842. },
  843. {
  844. "variable": "options",
  845. "label": "ACL Options",
  846. "schema": {
  847. "type": "dict",
  848. "attrs": [
  849. {
  850. "variable": "force",
  851. "label": "Force Flag",
  852. "description": "Enabling `Force` applies ACL even if the path has existing data",
  853. "schema": {
  854. "type": "boolean",
  855. "default": false
  856. }
  857. }
  858. ]
  859. }
  860. }
  861. ],
  862. "$ref": [
  863. "normalize/acl"
  864. ]
  865. }
  866. },
  867. {
  868. "variable": "hostPath",
  869. "label": "Host Path",
  870. "description": "The host path to use for storage.",
  871. "schema": {
  872. "type": "hostpath",
  873. "show_if": [
  874. [
  875. "aclEnable",
  876. "=",
  877. false
  878. ]
  879. ],
  880. "required": true
  881. }
  882. }
  883. ]
  884. }
  885. }
  886. ]
  887. }
  888. },
  889. {
  890. "variable": "pgBackup",
  891. "label": "Listmonk Postgres Backup Storage",
  892. "description": "The path to store Listmonk Postgres Backup.",
  893. "schema": {
  894. "type": "dict",
  895. "attrs": [
  896. {
  897. "variable": "type",
  898. "label": "Type",
  899. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  900. "schema": {
  901. "type": "string",
  902. "required": true,
  903. "immutable": true,
  904. "default": "ixVolume",
  905. "enum": [
  906. {
  907. "value": "hostPath",
  908. "description": "Host Path (Path that already exists on the system)"
  909. },
  910. {
  911. "value": "ixVolume",
  912. "description": "ixVolume (Dataset created automatically by the system)"
  913. }
  914. ]
  915. }
  916. },
  917. {
  918. "variable": "ixVolumeConfig",
  919. "label": "ixVolume Configuration",
  920. "description": "The configuration for the ixVolume dataset.",
  921. "schema": {
  922. "type": "dict",
  923. "hidden": true,
  924. "show_if": [
  925. [
  926. "type",
  927. "=",
  928. "ixVolume"
  929. ]
  930. ],
  931. "$ref": [
  932. "normalize/ixVolume"
  933. ],
  934. "attrs": [
  935. {
  936. "variable": "aclEnable",
  937. "label": "Enable ACL",
  938. "description": "Enable ACL for the dataset.",
  939. "schema": {
  940. "type": "boolean",
  941. "hidden": true,
  942. "default": false
  943. }
  944. },
  945. {
  946. "variable": "datasetName",
  947. "label": "Dataset Name",
  948. "description": "The name of the dataset to use for storage.",
  949. "schema": {
  950. "type": "string",
  951. "required": true,
  952. "immutable": true,
  953. "hidden": true,
  954. "default": "pgBackup"
  955. }
  956. },
  957. {
  958. "variable": "aclEntries",
  959. "label": "ACL Configuration",
  960. "schema": {
  961. "type": "dict",
  962. "show_if": [
  963. [
  964. "aclEnable",
  965. "=",
  966. true
  967. ]
  968. ],
  969. "attrs": [
  970. {
  971. "variable": "path",
  972. "label": "Path",
  973. "description": "Path to perform ACL",
  974. "schema": {
  975. "type": "string",
  976. "hidden": true
  977. }
  978. },
  979. {
  980. "variable": "entries",
  981. "label": "ACL Entries",
  982. "description": "ACL Entries",
  983. "schema": {
  984. "type": "list",
  985. "items": [
  986. {
  987. "variable": "aclEntry",
  988. "label": "ACL Entry",
  989. "schema": {
  990. "type": "dict",
  991. "attrs": [
  992. {
  993. "variable": "id_type",
  994. "label": "ID Type",
  995. "schema": {
  996. "type": "string",
  997. "enum": [
  998. {
  999. "value": "USER",
  1000. "description": "Entry is for a USER"
  1001. },
  1002. {
  1003. "value": "GROUP",
  1004. "description": "Entry is for a GROUP"
  1005. }
  1006. ],
  1007. "default": "USER"
  1008. }
  1009. },
  1010. {
  1011. "variable": "id",
  1012. "label": "ID",
  1013. "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application",
  1014. "schema": {
  1015. "type": "int",
  1016. "required": true,
  1017. "min": 0
  1018. }
  1019. },
  1020. {
  1021. "variable": "access",
  1022. "label": "Access",
  1023. "schema": {
  1024. "type": "string",
  1025. "enum": [
  1026. {
  1027. "value": "READ",
  1028. "description": "Read Access"
  1029. },
  1030. {
  1031. "value": "MODIFY",
  1032. "description": "Modify Access"
  1033. },
  1034. {
  1035. "value": "FULL_CONTROL",
  1036. "description": "FULL_CONTROL Access"
  1037. }
  1038. ]
  1039. }
  1040. }
  1041. ]
  1042. }
  1043. }
  1044. ]
  1045. }
  1046. }
  1047. ]
  1048. }
  1049. }
  1050. ]
  1051. }
  1052. },
  1053. {
  1054. "variable": "hostPathConfig",
  1055. "label": "Host Path Configuration",
  1056. "schema": {
  1057. "type": "dict",
  1058. "show_if": [
  1059. [
  1060. "type",
  1061. "=",
  1062. "hostPath"
  1063. ]
  1064. ],
  1065. "attrs": [
  1066. {
  1067. "variable": "aclEnable",
  1068. "label": "Enable ACL",
  1069. "description": "Enable ACL for the dataset.",
  1070. "schema": {
  1071. "type": "boolean",
  1072. "hidden": true,
  1073. "default": false
  1074. }
  1075. },
  1076. {
  1077. "variable": "acl",
  1078. "label": "ACL Configuration",
  1079. "schema": {
  1080. "type": "dict",
  1081. "show_if": [
  1082. [
  1083. "aclEnable",
  1084. "=",
  1085. true
  1086. ]
  1087. ],
  1088. "attrs": [
  1089. {
  1090. "variable": "path",
  1091. "label": "Host Path",
  1092. "description": "Host Path to perform ACL",
  1093. "schema": {
  1094. "type": "hostpath",
  1095. "required": true,
  1096. "empty": false
  1097. }
  1098. },
  1099. {
  1100. "variable": "entries",
  1101. "label": "ACL Entries",
  1102. "description": "ACL Entries",
  1103. "schema": {
  1104. "type": "list",
  1105. "items": [
  1106. {
  1107. "variable": "aclEntry",
  1108. "label": "ACL Entry",
  1109. "schema": {
  1110. "type": "dict",
  1111. "attrs": [
  1112. {
  1113. "variable": "id_type",
  1114. "label": "ID Type",
  1115. "schema": {
  1116. "type": "string",
  1117. "enum": [
  1118. {
  1119. "value": "USER",
  1120. "description": "Entry is for a USER"
  1121. },
  1122. {
  1123. "value": "GROUP",
  1124. "description": "Entry is for a GROUP"
  1125. }
  1126. ],
  1127. "default": "USER"
  1128. }
  1129. },
  1130. {
  1131. "variable": "id",
  1132. "label": "ID",
  1133. "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application",
  1134. "schema": {
  1135. "type": "int",
  1136. "required": true,
  1137. "min": 0
  1138. }
  1139. },
  1140. {
  1141. "variable": "access",
  1142. "label": "Access",
  1143. "schema": {
  1144. "type": "string",
  1145. "enum": [
  1146. {
  1147. "value": "READ",
  1148. "description": "Read Access"
  1149. },
  1150. {
  1151. "value": "MODIFY",
  1152. "description": "Modify Access"
  1153. },
  1154. {
  1155. "value": "FULL_CONTROL",
  1156. "description": "FULL_CONTROL Access"
  1157. }
  1158. ]
  1159. }
  1160. }
  1161. ]
  1162. }
  1163. }
  1164. ]
  1165. }
  1166. },
  1167. {
  1168. "variable": "options",
  1169. "label": "ACL Options",
  1170. "schema": {
  1171. "type": "dict",
  1172. "attrs": [
  1173. {
  1174. "variable": "force",
  1175. "label": "Force Flag",
  1176. "description": "Enabling `Force` applies ACL even if the path has existing data",
  1177. "schema": {
  1178. "type": "boolean",
  1179. "default": false
  1180. }
  1181. }
  1182. ]
  1183. }
  1184. }
  1185. ],
  1186. "$ref": [
  1187. "normalize/acl"
  1188. ]
  1189. }
  1190. },
  1191. {
  1192. "variable": "hostPath",
  1193. "label": "Host Path",
  1194. "description": "The host path to use for storage.",
  1195. "schema": {
  1196. "type": "hostpath",
  1197. "show_if": [
  1198. [
  1199. "aclEnable",
  1200. "=",
  1201. false
  1202. ]
  1203. ],
  1204. "required": true
  1205. }
  1206. }
  1207. ]
  1208. }
  1209. }
  1210. ]
  1211. }
  1212. },
  1213. {
  1214. "variable": "additionalStorages",
  1215. "label": "Additional Storage",
  1216. "description": "Additional storage for Listmonk.",
  1217. "schema": {
  1218. "type": "list",
  1219. "default": [],
  1220. "items": [
  1221. {
  1222. "variable": "storageEntry",
  1223. "label": "Storage Entry",
  1224. "schema": {
  1225. "type": "dict",
  1226. "attrs": [
  1227. {
  1228. "variable": "type",
  1229. "label": "Type",
  1230. "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",
  1231. "schema": {
  1232. "type": "string",
  1233. "required": true,
  1234. "default": "ixVolume",
  1235. "immutable": true,
  1236. "enum": [
  1237. {
  1238. "value": "hostPath",
  1239. "description": "Host Path (Path that already exists on the system)"
  1240. },
  1241. {
  1242. "value": "ixVolume",
  1243. "description": "ixVolume (Dataset created automatically by the system)"
  1244. },
  1245. {
  1246. "value": "smb-pv-pvc",
  1247. "description": "SMB Share (Mounts a persistent volume claim to a SMB share)"
  1248. }
  1249. ]
  1250. }
  1251. },
  1252. {
  1253. "variable": "readOnly",
  1254. "label": "Read Only",
  1255. "description": "Mount the volume as read only.",
  1256. "schema": {
  1257. "type": "boolean",
  1258. "default": false
  1259. }
  1260. },
  1261. {
  1262. "variable": "mountPath",
  1263. "label": "Mount Path",
  1264. "description": "The path inside the container to mount the storage.",
  1265. "schema": {
  1266. "type": "path",
  1267. "required": true
  1268. }
  1269. },
  1270. {
  1271. "variable": "hostPathConfig",
  1272. "label": "Host Path Configuration",
  1273. "schema": {
  1274. "type": "dict",
  1275. "show_if": [
  1276. [
  1277. "type",
  1278. "=",
  1279. "hostPath"
  1280. ]
  1281. ],
  1282. "attrs": [
  1283. {
  1284. "variable": "aclEnable",
  1285. "label": "Enable ACL",
  1286. "description": "Enable ACL for the dataset.",
  1287. "schema": {
  1288. "type": "boolean",
  1289. "default": false
  1290. }
  1291. },
  1292. {
  1293. "variable": "acl",
  1294. "label": "ACL Configuration",
  1295. "schema": {
  1296. "type": "dict",
  1297. "show_if": [
  1298. [
  1299. "aclEnable",
  1300. "=",
  1301. true
  1302. ]
  1303. ],
  1304. "attrs": [
  1305. {
  1306. "variable": "path",
  1307. "label": "Host Path",
  1308. "description": "Host Path to perform ACL",
  1309. "schema": {
  1310. "type": "hostpath",
  1311. "required": true,
  1312. "empty": false
  1313. }
  1314. },
  1315. {
  1316. "variable": "entries",
  1317. "label": "ACL Entries",
  1318. "description": "ACL Entries",
  1319. "schema": {
  1320. "type": "list",
  1321. "items": [
  1322. {
  1323. "variable": "aclEntry",
  1324. "label": "ACL Entry",
  1325. "schema": {
  1326. "type": "dict",
  1327. "attrs": [
  1328. {
  1329. "variable": "id_type",
  1330. "label": "ID Type",
  1331. "schema": {
  1332. "type": "string",
  1333. "enum": [
  1334. {
  1335. "value": "USER",
  1336. "description": "Entry is for a USER"
  1337. },
  1338. {
  1339. "value": "GROUP",
  1340. "description": "Entry is for a GROUP"
  1341. }
  1342. ],
  1343. "default": "USER"
  1344. }
  1345. },
  1346. {
  1347. "variable": "id",
  1348. "label": "ID",
  1349. "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application",
  1350. "schema": {
  1351. "type": "int",
  1352. "required": true,
  1353. "min": 0
  1354. }
  1355. },
  1356. {
  1357. "variable": "access",
  1358. "label": "Access",
  1359. "schema": {
  1360. "type": "string",
  1361. "enum": [
  1362. {
  1363. "value": "READ",
  1364. "description": "Read Access"
  1365. },
  1366. {
  1367. "value": "MODIFY",
  1368. "description": "Modify Access"
  1369. },
  1370. {
  1371. "value": "FULL_CONTROL",
  1372. "description": "FULL_CONTROL Access"
  1373. }
  1374. ]
  1375. }
  1376. }
  1377. ]
  1378. }
  1379. }
  1380. ]
  1381. }
  1382. },
  1383. {
  1384. "variable": "options",
  1385. "label": "ACL Options",
  1386. "schema": {
  1387. "type": "dict",
  1388. "attrs": [
  1389. {
  1390. "variable": "force",
  1391. "label": "Force Flag",
  1392. "description": "Enabling `Force` applies ACL even if the path has existing data",
  1393. "schema": {
  1394. "type": "boolean",
  1395. "default": false
  1396. }
  1397. }
  1398. ]
  1399. }
  1400. }
  1401. ],
  1402. "$ref": [
  1403. "normalize/acl"
  1404. ]
  1405. }
  1406. },
  1407. {
  1408. "variable": "hostPath",
  1409. "label": "Host Path",
  1410. "description": "The host path to use for storage.",
  1411. "schema": {
  1412. "type": "hostpath",
  1413. "show_if": [
  1414. [
  1415. "aclEnable",
  1416. "=",
  1417. false
  1418. ]
  1419. ],
  1420. "required": true
  1421. }
  1422. }
  1423. ]
  1424. }
  1425. },
  1426. {
  1427. "variable": "ixVolumeConfig",
  1428. "label": "ixVolume Configuration",
  1429. "description": "The configuration for the ixVolume dataset.",
  1430. "schema": {
  1431. "type": "dict",
  1432. "show_if": [
  1433. [
  1434. "type",
  1435. "=",
  1436. "ixVolume"
  1437. ]
  1438. ],
  1439. "$ref": [
  1440. "normalize/ixVolume"
  1441. ],
  1442. "attrs": [
  1443. {
  1444. "variable": "aclEnable",
  1445. "label": "Enable ACL",
  1446. "description": "Enable ACL for the dataset.",
  1447. "schema": {
  1448. "type": "boolean",
  1449. "default": false
  1450. }
  1451. },
  1452. {
  1453. "variable": "datasetName",
  1454. "label": "Dataset Name",
  1455. "description": "The name of the dataset to use for storage.",
  1456. "schema": {
  1457. "type": "string",
  1458. "required": true,
  1459. "immutable": true,
  1460. "default": "storage_entry"
  1461. }
  1462. },
  1463. {
  1464. "variable": "aclEntries",
  1465. "label": "ACL Configuration",
  1466. "schema": {
  1467. "type": "dict",
  1468. "show_if": [
  1469. [
  1470. "aclEnable",
  1471. "=",
  1472. true
  1473. ]
  1474. ],
  1475. "attrs": [
  1476. {
  1477. "variable": "path",
  1478. "label": "Path",
  1479. "description": "Path to perform ACL",
  1480. "schema": {
  1481. "type": "string",
  1482. "hidden": true
  1483. }
  1484. },
  1485. {
  1486. "variable": "entries",
  1487. "label": "ACL Entries",
  1488. "description": "ACL Entries",
  1489. "schema": {
  1490. "type": "list",
  1491. "items": [
  1492. {
  1493. "variable": "aclEntry",
  1494. "label": "ACL Entry",
  1495. "schema": {
  1496. "type": "dict",
  1497. "attrs": [
  1498. {
  1499. "variable": "id_type",
  1500. "label": "ID Type",
  1501. "schema": {
  1502. "type": "string",
  1503. "enum": [
  1504. {
  1505. "value": "USER",
  1506. "description": "Entry is for a USER"
  1507. },
  1508. {
  1509. "value": "GROUP",
  1510. "description": "Entry is for a GROUP"
  1511. }
  1512. ],
  1513. "default": "USER"
  1514. }
  1515. },
  1516. {
  1517. "variable": "id",
  1518. "label": "ID",
  1519. "description": "Make sure to check the ID value is correct and aligns with RunAs user context of the application",
  1520. "schema": {
  1521. "type": "int",
  1522. "required": true,
  1523. "min": 0
  1524. }
  1525. },
  1526. {
  1527. "variable": "access",
  1528. "label": "Access",
  1529. "schema": {
  1530. "type": "string",
  1531. "enum": [
  1532. {
  1533. "value": "READ",
  1534. "description": "Read Access"
  1535. },
  1536. {
  1537. "value": "MODIFY",
  1538. "description": "Modify Access"
  1539. },
  1540. {
  1541. "value": "FULL_CONTROL",
  1542. "description": "FULL_CONTROL Access"
  1543. }
  1544. ]
  1545. }
  1546. }
  1547. ]
  1548. }
  1549. }
  1550. ]
  1551. }
  1552. }
  1553. ]
  1554. }
  1555. }
  1556. ]
  1557. }
  1558. },
  1559. {
  1560. "variable": "smbConfig",
  1561. "label": "SMB Share Configuration",
  1562. "description": "The configuration for the SMB Share.",
  1563. "schema": {
  1564. "type": "dict",
  1565. "show_if": [
  1566. [
  1567. "type",
  1568. "=",
  1569. "smb-pv-pvc"
  1570. ]
  1571. ],
  1572. "attrs": [
  1573. {
  1574. "variable": "server",
  1575. "label": "Server",
  1576. "description": "The server for the SMB share.",
  1577. "schema": {
  1578. "type": "string",
  1579. "required": true
  1580. }
  1581. },
  1582. {
  1583. "variable": "share",
  1584. "label": "Share",
  1585. "description": "The share name for the SMB share.",
  1586. "schema": {
  1587. "type": "string",
  1588. "required": true
  1589. }
  1590. },
  1591. {
  1592. "variable": "domain",
  1593. "label": "Domain (Optional)",
  1594. "description": "The domain for the SMB share.",
  1595. "schema": {
  1596. "type": "string"
  1597. }
  1598. },
  1599. {
  1600. "variable": "username",
  1601. "label": "Username",
  1602. "description": "The username for the SMB share.",
  1603. "schema": {
  1604. "type": "string",
  1605. "required": true
  1606. }
  1607. },
  1608. {
  1609. "variable": "password",
  1610. "label": "Password",
  1611. "description": "The password for the SMB share.",
  1612. "schema": {
  1613. "type": "string",
  1614. "required": true,
  1615. "private": true
  1616. }
  1617. },
  1618. {
  1619. "variable": "size",
  1620. "label": "Size (in Gi)",
  1621. "description": "The size of the volume quota.",
  1622. "schema": {
  1623. "type": "int",
  1624. "required": true,
  1625. "min": 1,
  1626. "default": 1
  1627. }
  1628. }
  1629. ]
  1630. }
  1631. }
  1632. ]
  1633. }
  1634. }
  1635. ]
  1636. }
  1637. }
  1638. ]
  1639. }
  1640. },
  1641. {
  1642. "variable": "resources",
  1643. "group": "Resources Configuration",
  1644. "label": "",
  1645. "schema": {
  1646. "type": "dict",
  1647. "attrs": [
  1648. {
  1649. "variable": "limits",
  1650. "label": "Limits",
  1651. "schema": {
  1652. "type": "dict",
  1653. "attrs": [
  1654. {
  1655. "variable": "cpu",
  1656. "label": "CPU",
  1657. "description": "CPU limit for Listmonk.",
  1658. "schema": {
  1659. "type": "string",
  1660. "max_length": 6,
  1661. "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$",
  1662. "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",
  1663. "default": "4000m",
  1664. "required": true
  1665. }
  1666. },
  1667. {
  1668. "variable": "memory",
  1669. "label": "Memory",
  1670. "description": "Memory limit for Listmonk.",
  1671. "schema": {
  1672. "type": "string",
  1673. "max_length": 12,
  1674. "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$",
  1675. "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",
  1676. "default": "8Gi",
  1677. "required": true
  1678. }
  1679. }
  1680. ]
  1681. }
  1682. }
  1683. ]
  1684. }
  1685. }
  1686. ]
  1687. },
  1688. "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>",
  1689. "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>",
  1690. "changelog": null
  1691. }
  1692. }