app_versions.json 78 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261
  1. {
  2. "1.2.6": {
  3. "healthy": true,
  4. "supported": true,
  5. "healthy_error": null,
  6. "location": "/__w/apps/apps/trains/community/pigallery2/1.2.6",
  7. "last_update": "2025-09-02 11:33:24",
  8. "required_features": [],
  9. "human_version": "2.0.0_1.2.6",
  10. "version": "1.2.6",
  11. "app_metadata": {
  12. "annotations": {
  13. "min_scale_version": "24.10.2.2"
  14. },
  15. "app_version": "2.0.0",
  16. "capabilities": [],
  17. "categories": [
  18. "media"
  19. ],
  20. "changelog_url": "https://github.com/bpatrik/pigallery2/releases",
  21. "date_added": "2024-09-12",
  22. "description": "PiGallery2 is a fast directory-first photo gallery website, with rich UI, optimized for running on low resource servers",
  23. "home": "https://bpatrik.github.io/pigallery2",
  24. "host_mounts": [],
  25. "icon": "https://media.sys.truenas.net/apps/pigallery2/icons/icon.png",
  26. "keywords": [
  27. "photo",
  28. "media"
  29. ],
  30. "lib_version": "2.1.49",
  31. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  32. "maintainers": [
  33. {
  34. "email": "dev@ixsystems.com",
  35. "name": "truenas",
  36. "url": "https://www.truenas.com/"
  37. }
  38. ],
  39. "name": "pigallery2",
  40. "run_as_context": [
  41. {
  42. "description": "PiGallery2 runs as any non-root user.",
  43. "gid": 568,
  44. "group_name": "pigallery2",
  45. "uid": 568,
  46. "user_name": "pigallery2"
  47. }
  48. ],
  49. "screenshots": [
  50. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot1.png",
  51. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot2.png",
  52. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot3.png",
  53. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot4.png",
  54. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot5.png",
  55. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot6.png",
  56. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot7.png",
  57. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot8.png",
  58. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot9.png",
  59. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot10.png"
  60. ],
  61. "sources": [
  62. "https://hub.docker.com/r/bpatrik/pigallery2",
  63. "https://github.com/bpatrik/pigallery2"
  64. ],
  65. "title": "PiGallery2",
  66. "train": "community",
  67. "version": "1.2.6"
  68. },
  69. "schema": {
  70. "groups": [
  71. {
  72. "name": "PiGallery2 Configuration",
  73. "description": "Configure PiGallery2"
  74. },
  75. {
  76. "name": "User and Group Configuration",
  77. "description": "Configure User and Group for PiGallery2"
  78. },
  79. {
  80. "name": "Network Configuration",
  81. "description": "Configure Network for PiGallery2"
  82. },
  83. {
  84. "name": "Storage Configuration",
  85. "description": "Configure Storage for PiGallery2"
  86. },
  87. {
  88. "name": "Labels Configuration",
  89. "description": "Configure Labels for PiGallery2"
  90. },
  91. {
  92. "name": "Resources Configuration",
  93. "description": "Configure Resources for PiGallery2"
  94. }
  95. ],
  96. "questions": [
  97. {
  98. "variable": "pigallery",
  99. "label": "",
  100. "group": "PiGallery2 Configuration",
  101. "schema": {
  102. "type": "dict",
  103. "attrs": [
  104. {
  105. "variable": "application_title",
  106. "label": "Application Title",
  107. "description": "The title of the PiGallery2 application.",
  108. "schema": {
  109. "type": "string",
  110. "default": "PiGallery 2",
  111. "required": true
  112. }
  113. },
  114. {
  115. "variable": "additional_envs",
  116. "label": "Additional Environment Variables",
  117. "schema": {
  118. "type": "list",
  119. "default": [],
  120. "items": [
  121. {
  122. "variable": "env",
  123. "label": "Environment Variable",
  124. "schema": {
  125. "type": "dict",
  126. "attrs": [
  127. {
  128. "variable": "name",
  129. "label": "Name",
  130. "schema": {
  131. "type": "string",
  132. "required": true
  133. }
  134. },
  135. {
  136. "variable": "value",
  137. "label": "Value",
  138. "schema": {
  139. "type": "string"
  140. }
  141. }
  142. ]
  143. }
  144. }
  145. ]
  146. }
  147. }
  148. ]
  149. }
  150. },
  151. {
  152. "variable": "run_as",
  153. "label": "",
  154. "group": "User and Group Configuration",
  155. "schema": {
  156. "type": "dict",
  157. "attrs": [
  158. {
  159. "variable": "user",
  160. "label": "User ID",
  161. "description": "The user id that PiGallery2 files will be owned by.",
  162. "schema": {
  163. "type": "int",
  164. "min": 568,
  165. "default": 568,
  166. "required": true
  167. }
  168. },
  169. {
  170. "variable": "group",
  171. "label": "Group ID",
  172. "description": "The group id that PiGallery2 files will be owned by.",
  173. "schema": {
  174. "type": "int",
  175. "min": 568,
  176. "default": 568,
  177. "required": true
  178. }
  179. }
  180. ]
  181. }
  182. },
  183. {
  184. "variable": "network",
  185. "label": "",
  186. "group": "Network Configuration",
  187. "schema": {
  188. "type": "dict",
  189. "attrs": [
  190. {
  191. "variable": "web_port",
  192. "label": "WebUI Port",
  193. "schema": {
  194. "type": "dict",
  195. "attrs": [
  196. {
  197. "variable": "bind_mode",
  198. "label": "Port Bind Mode",
  199. "description": "The port bind mode.</br>\n- Publish: The port will be published on the host for external access.</br>\n- Expose: The port will be exposed for inter-container communication.</br>\n- None: The port will not be exposed or published.</br>\nNote: If the Dockerfile defines an EXPOSE directive,\nthe port will still be exposed for inter-container communication regardless of this setting.\n",
  200. "schema": {
  201. "type": "string",
  202. "default": "published",
  203. "enum": [
  204. {
  205. "value": "published",
  206. "description": "Publish port on the host for external access"
  207. },
  208. {
  209. "value": "exposed",
  210. "description": "Expose port for inter-container communication"
  211. },
  212. {
  213. "value": "",
  214. "description": "None"
  215. }
  216. ]
  217. }
  218. },
  219. {
  220. "variable": "port_number",
  221. "label": "Port Number",
  222. "schema": {
  223. "type": "int",
  224. "default": 30099,
  225. "min": 1,
  226. "max": 65535,
  227. "required": true
  228. }
  229. },
  230. {
  231. "variable": "host_ips",
  232. "label": "Host IPs",
  233. "description": "IPs on the host to bind this port",
  234. "schema": {
  235. "type": "list",
  236. "show_if": [
  237. [
  238. "bind_mode",
  239. "=",
  240. "published"
  241. ]
  242. ],
  243. "default": [],
  244. "items": [
  245. {
  246. "variable": "host_ip",
  247. "label": "Host IP",
  248. "schema": {
  249. "type": "string",
  250. "required": true,
  251. "$ref": [
  252. "definitions/node_bind_ip"
  253. ]
  254. }
  255. }
  256. ]
  257. }
  258. }
  259. ]
  260. }
  261. },
  262. {
  263. "variable": "host_network",
  264. "label": "Host Network",
  265. "description": "Bind to the host network. It's recommended to keep this disabled.\n",
  266. "schema": {
  267. "type": "boolean",
  268. "default": false
  269. }
  270. }
  271. ]
  272. }
  273. },
  274. {
  275. "variable": "storage",
  276. "label": "",
  277. "group": "Storage Configuration",
  278. "schema": {
  279. "type": "dict",
  280. "attrs": [
  281. {
  282. "variable": "config",
  283. "label": "PiGallery2 Config Storage",
  284. "description": "The path to store PiGallery2 Config.",
  285. "schema": {
  286. "type": "dict",
  287. "attrs": [
  288. {
  289. "variable": "type",
  290. "label": "Type",
  291. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  292. "schema": {
  293. "type": "string",
  294. "required": true,
  295. "default": "ix_volume",
  296. "enum": [
  297. {
  298. "value": "host_path",
  299. "description": "Host Path (Path that already exists on the system)"
  300. },
  301. {
  302. "value": "ix_volume",
  303. "description": "ixVolume (Dataset created automatically by the system)"
  304. }
  305. ]
  306. }
  307. },
  308. {
  309. "variable": "ix_volume_config",
  310. "label": "ixVolume Configuration",
  311. "description": "The configuration for the ixVolume dataset.",
  312. "schema": {
  313. "type": "dict",
  314. "show_if": [
  315. [
  316. "type",
  317. "=",
  318. "ix_volume"
  319. ]
  320. ],
  321. "$ref": [
  322. "normalize/ix_volume"
  323. ],
  324. "attrs": [
  325. {
  326. "variable": "acl_enable",
  327. "label": "Enable ACL",
  328. "description": "Enable ACL for the storage.",
  329. "schema": {
  330. "type": "boolean",
  331. "default": false
  332. }
  333. },
  334. {
  335. "variable": "dataset_name",
  336. "label": "Dataset Name",
  337. "description": "The name of the dataset to use for storage.",
  338. "schema": {
  339. "type": "string",
  340. "required": true,
  341. "hidden": true,
  342. "default": "config"
  343. }
  344. },
  345. {
  346. "variable": "acl_entries",
  347. "label": "ACL Configuration",
  348. "schema": {
  349. "type": "dict",
  350. "show_if": [
  351. [
  352. "acl_enable",
  353. "=",
  354. true
  355. ]
  356. ],
  357. "attrs": []
  358. }
  359. }
  360. ]
  361. }
  362. },
  363. {
  364. "variable": "host_path_config",
  365. "label": "Host Path Configuration",
  366. "schema": {
  367. "type": "dict",
  368. "show_if": [
  369. [
  370. "type",
  371. "=",
  372. "host_path"
  373. ]
  374. ],
  375. "attrs": [
  376. {
  377. "variable": "acl_enable",
  378. "label": "Enable ACL",
  379. "description": "Enable ACL for the storage.",
  380. "schema": {
  381. "type": "boolean",
  382. "default": false
  383. }
  384. },
  385. {
  386. "variable": "acl",
  387. "label": "ACL Configuration",
  388. "schema": {
  389. "type": "dict",
  390. "show_if": [
  391. [
  392. "acl_enable",
  393. "=",
  394. true
  395. ]
  396. ],
  397. "attrs": [],
  398. "$ref": [
  399. "normalize/acl"
  400. ]
  401. }
  402. },
  403. {
  404. "variable": "path",
  405. "label": "Host Path",
  406. "description": "The host path to use for storage.",
  407. "schema": {
  408. "type": "hostpath",
  409. "show_if": [
  410. [
  411. "acl_enable",
  412. "=",
  413. false
  414. ]
  415. ],
  416. "required": true
  417. }
  418. }
  419. ]
  420. }
  421. }
  422. ]
  423. }
  424. },
  425. {
  426. "variable": "db",
  427. "label": "PiGallery2 Database Storage",
  428. "description": "The path to store PiGallery2 Database.",
  429. "schema": {
  430. "type": "dict",
  431. "attrs": [
  432. {
  433. "variable": "type",
  434. "label": "Type",
  435. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  436. "schema": {
  437. "type": "string",
  438. "required": true,
  439. "default": "ix_volume",
  440. "enum": [
  441. {
  442. "value": "host_path",
  443. "description": "Host Path (Path that already exists on the system)"
  444. },
  445. {
  446. "value": "ix_volume",
  447. "description": "ixVolume (Dataset created automatically by the system)"
  448. }
  449. ]
  450. }
  451. },
  452. {
  453. "variable": "ix_volume_config",
  454. "label": "ixVolume Configuration",
  455. "description": "The configuration for the ixVolume dataset.",
  456. "schema": {
  457. "type": "dict",
  458. "show_if": [
  459. [
  460. "type",
  461. "=",
  462. "ix_volume"
  463. ]
  464. ],
  465. "$ref": [
  466. "normalize/ix_volume"
  467. ],
  468. "attrs": [
  469. {
  470. "variable": "acl_enable",
  471. "label": "Enable ACL",
  472. "description": "Enable ACL for the storage.",
  473. "schema": {
  474. "type": "boolean",
  475. "default": false
  476. }
  477. },
  478. {
  479. "variable": "dataset_name",
  480. "label": "Dataset Name",
  481. "description": "The name of the dataset to use for storage.",
  482. "schema": {
  483. "type": "string",
  484. "required": true,
  485. "hidden": true,
  486. "default": "db"
  487. }
  488. },
  489. {
  490. "variable": "acl_entries",
  491. "label": "ACL Configuration",
  492. "schema": {
  493. "type": "dict",
  494. "show_if": [
  495. [
  496. "acl_enable",
  497. "=",
  498. true
  499. ]
  500. ],
  501. "attrs": []
  502. }
  503. }
  504. ]
  505. }
  506. },
  507. {
  508. "variable": "host_path_config",
  509. "label": "Host Path Configuration",
  510. "schema": {
  511. "type": "dict",
  512. "show_if": [
  513. [
  514. "type",
  515. "=",
  516. "host_path"
  517. ]
  518. ],
  519. "attrs": [
  520. {
  521. "variable": "acl_enable",
  522. "label": "Enable ACL",
  523. "description": "Enable ACL for the storage.",
  524. "schema": {
  525. "type": "boolean",
  526. "default": false
  527. }
  528. },
  529. {
  530. "variable": "acl",
  531. "label": "ACL Configuration",
  532. "schema": {
  533. "type": "dict",
  534. "show_if": [
  535. [
  536. "acl_enable",
  537. "=",
  538. true
  539. ]
  540. ],
  541. "attrs": [],
  542. "$ref": [
  543. "normalize/acl"
  544. ]
  545. }
  546. },
  547. {
  548. "variable": "path",
  549. "label": "Host Path",
  550. "description": "The host path to use for storage.",
  551. "schema": {
  552. "type": "hostpath",
  553. "show_if": [
  554. [
  555. "acl_enable",
  556. "=",
  557. false
  558. ]
  559. ],
  560. "required": true
  561. }
  562. }
  563. ]
  564. }
  565. }
  566. ]
  567. }
  568. },
  569. {
  570. "variable": "media",
  571. "label": "PiGallery2 Media Storage",
  572. "description": "The path to store PiGallery2 Media.",
  573. "schema": {
  574. "type": "dict",
  575. "attrs": [
  576. {
  577. "variable": "type",
  578. "label": "Type",
  579. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  580. "schema": {
  581. "type": "string",
  582. "required": true,
  583. "default": "ix_volume",
  584. "enum": [
  585. {
  586. "value": "host_path",
  587. "description": "Host Path (Path that already exists on the system)"
  588. },
  589. {
  590. "value": "ix_volume",
  591. "description": "ixVolume (Dataset created automatically by the system)"
  592. }
  593. ]
  594. }
  595. },
  596. {
  597. "variable": "ix_volume_config",
  598. "label": "ixVolume Configuration",
  599. "description": "The configuration for the ixVolume dataset.",
  600. "schema": {
  601. "type": "dict",
  602. "show_if": [
  603. [
  604. "type",
  605. "=",
  606. "ix_volume"
  607. ]
  608. ],
  609. "$ref": [
  610. "normalize/ix_volume"
  611. ],
  612. "attrs": [
  613. {
  614. "variable": "acl_enable",
  615. "label": "Enable ACL",
  616. "description": "Enable ACL for the storage.",
  617. "schema": {
  618. "type": "boolean",
  619. "default": false
  620. }
  621. },
  622. {
  623. "variable": "dataset_name",
  624. "label": "Dataset Name",
  625. "description": "The name of the dataset to use for storage.",
  626. "schema": {
  627. "type": "string",
  628. "required": true,
  629. "hidden": true,
  630. "default": "media"
  631. }
  632. },
  633. {
  634. "variable": "acl_entries",
  635. "label": "ACL Configuration",
  636. "schema": {
  637. "type": "dict",
  638. "show_if": [
  639. [
  640. "acl_enable",
  641. "=",
  642. true
  643. ]
  644. ],
  645. "attrs": []
  646. }
  647. }
  648. ]
  649. }
  650. },
  651. {
  652. "variable": "host_path_config",
  653. "label": "Host Path Configuration",
  654. "schema": {
  655. "type": "dict",
  656. "show_if": [
  657. [
  658. "type",
  659. "=",
  660. "host_path"
  661. ]
  662. ],
  663. "attrs": [
  664. {
  665. "variable": "acl_enable",
  666. "label": "Enable ACL",
  667. "description": "Enable ACL for the storage.",
  668. "schema": {
  669. "type": "boolean",
  670. "default": false
  671. }
  672. },
  673. {
  674. "variable": "acl",
  675. "label": "ACL Configuration",
  676. "schema": {
  677. "type": "dict",
  678. "show_if": [
  679. [
  680. "acl_enable",
  681. "=",
  682. true
  683. ]
  684. ],
  685. "attrs": [],
  686. "$ref": [
  687. "normalize/acl"
  688. ]
  689. }
  690. },
  691. {
  692. "variable": "path",
  693. "label": "Host Path",
  694. "description": "The host path to use for storage.",
  695. "schema": {
  696. "type": "hostpath",
  697. "show_if": [
  698. [
  699. "acl_enable",
  700. "=",
  701. false
  702. ]
  703. ],
  704. "required": true
  705. }
  706. }
  707. ]
  708. }
  709. }
  710. ]
  711. }
  712. },
  713. {
  714. "variable": "thumbnails",
  715. "label": "PiGallery2 Thumbnails Storage",
  716. "description": "The path to store PiGallery2 Thumbnails.",
  717. "schema": {
  718. "type": "dict",
  719. "attrs": [
  720. {
  721. "variable": "type",
  722. "label": "Type",
  723. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  724. "schema": {
  725. "type": "string",
  726. "required": true,
  727. "default": "ix_volume",
  728. "enum": [
  729. {
  730. "value": "host_path",
  731. "description": "Host Path (Path that already exists on the system)"
  732. },
  733. {
  734. "value": "ix_volume",
  735. "description": "ixVolume (Dataset created automatically by the system)"
  736. }
  737. ]
  738. }
  739. },
  740. {
  741. "variable": "ix_volume_config",
  742. "label": "ixVolume Configuration",
  743. "description": "The configuration for the ixVolume dataset.",
  744. "schema": {
  745. "type": "dict",
  746. "show_if": [
  747. [
  748. "type",
  749. "=",
  750. "ix_volume"
  751. ]
  752. ],
  753. "$ref": [
  754. "normalize/ix_volume"
  755. ],
  756. "attrs": [
  757. {
  758. "variable": "acl_enable",
  759. "label": "Enable ACL",
  760. "description": "Enable ACL for the storage.",
  761. "schema": {
  762. "type": "boolean",
  763. "default": false
  764. }
  765. },
  766. {
  767. "variable": "dataset_name",
  768. "label": "Dataset Name",
  769. "description": "The name of the dataset to use for storage.",
  770. "schema": {
  771. "type": "string",
  772. "required": true,
  773. "hidden": true,
  774. "default": "thumbnails"
  775. }
  776. },
  777. {
  778. "variable": "acl_entries",
  779. "label": "ACL Configuration",
  780. "schema": {
  781. "type": "dict",
  782. "show_if": [
  783. [
  784. "acl_enable",
  785. "=",
  786. true
  787. ]
  788. ],
  789. "attrs": []
  790. }
  791. }
  792. ]
  793. }
  794. },
  795. {
  796. "variable": "host_path_config",
  797. "label": "Host Path Configuration",
  798. "schema": {
  799. "type": "dict",
  800. "show_if": [
  801. [
  802. "type",
  803. "=",
  804. "host_path"
  805. ]
  806. ],
  807. "attrs": [
  808. {
  809. "variable": "acl_enable",
  810. "label": "Enable ACL",
  811. "description": "Enable ACL for the storage.",
  812. "schema": {
  813. "type": "boolean",
  814. "default": false
  815. }
  816. },
  817. {
  818. "variable": "acl",
  819. "label": "ACL Configuration",
  820. "schema": {
  821. "type": "dict",
  822. "show_if": [
  823. [
  824. "acl_enable",
  825. "=",
  826. true
  827. ]
  828. ],
  829. "attrs": [],
  830. "$ref": [
  831. "normalize/acl"
  832. ]
  833. }
  834. },
  835. {
  836. "variable": "path",
  837. "label": "Host Path",
  838. "description": "The host path to use for storage.",
  839. "schema": {
  840. "type": "hostpath",
  841. "show_if": [
  842. [
  843. "acl_enable",
  844. "=",
  845. false
  846. ]
  847. ],
  848. "required": true
  849. }
  850. }
  851. ]
  852. }
  853. }
  854. ]
  855. }
  856. },
  857. {
  858. "variable": "additional_storage",
  859. "label": "Additional Storage",
  860. "schema": {
  861. "type": "list",
  862. "default": [],
  863. "items": [
  864. {
  865. "variable": "storageEntry",
  866. "label": "Storage Entry",
  867. "schema": {
  868. "type": "dict",
  869. "attrs": [
  870. {
  871. "variable": "type",
  872. "label": "Type",
  873. "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 as a volume.\n",
  874. "schema": {
  875. "type": "string",
  876. "required": true,
  877. "default": "ix_volume",
  878. "enum": [
  879. {
  880. "value": "host_path",
  881. "description": "Host Path (Path that already exists on the system)"
  882. },
  883. {
  884. "value": "ix_volume",
  885. "description": "ixVolume (Dataset created automatically by the system)"
  886. },
  887. {
  888. "value": "cifs",
  889. "description": "SMB/CIFS Share (Mounts a volume to a SMB share)"
  890. }
  891. ]
  892. }
  893. },
  894. {
  895. "variable": "read_only",
  896. "label": "Read Only",
  897. "description": "Mount the volume as read only.",
  898. "schema": {
  899. "type": "boolean",
  900. "default": false
  901. }
  902. },
  903. {
  904. "variable": "mount_path",
  905. "label": "Mount Path",
  906. "description": "The path inside the container to mount the storage.",
  907. "schema": {
  908. "type": "path",
  909. "required": true
  910. }
  911. },
  912. {
  913. "variable": "host_path_config",
  914. "label": "Host Path Configuration",
  915. "schema": {
  916. "type": "dict",
  917. "show_if": [
  918. [
  919. "type",
  920. "=",
  921. "host_path"
  922. ]
  923. ],
  924. "attrs": [
  925. {
  926. "variable": "acl_enable",
  927. "label": "Enable ACL",
  928. "description": "Enable ACL for the storage.",
  929. "schema": {
  930. "type": "boolean",
  931. "default": false
  932. }
  933. },
  934. {
  935. "variable": "acl",
  936. "label": "ACL Configuration",
  937. "schema": {
  938. "type": "dict",
  939. "show_if": [
  940. [
  941. "acl_enable",
  942. "=",
  943. true
  944. ]
  945. ],
  946. "attrs": [],
  947. "$ref": [
  948. "normalize/acl"
  949. ]
  950. }
  951. },
  952. {
  953. "variable": "path",
  954. "label": "Host Path",
  955. "description": "The host path to use for storage.",
  956. "schema": {
  957. "type": "hostpath",
  958. "show_if": [
  959. [
  960. "acl_enable",
  961. "=",
  962. false
  963. ]
  964. ],
  965. "required": true
  966. }
  967. }
  968. ]
  969. }
  970. },
  971. {
  972. "variable": "ix_volume_config",
  973. "label": "ixVolume Configuration",
  974. "description": "The configuration for the ixVolume dataset.",
  975. "schema": {
  976. "type": "dict",
  977. "show_if": [
  978. [
  979. "type",
  980. "=",
  981. "ix_volume"
  982. ]
  983. ],
  984. "$ref": [
  985. "normalize/ix_volume"
  986. ],
  987. "attrs": [
  988. {
  989. "variable": "acl_enable",
  990. "label": "Enable ACL",
  991. "description": "Enable ACL for the storage.",
  992. "schema": {
  993. "type": "boolean",
  994. "default": false
  995. }
  996. },
  997. {
  998. "variable": "dataset_name",
  999. "label": "Dataset Name",
  1000. "description": "The name of the dataset to use for storage.",
  1001. "schema": {
  1002. "type": "string",
  1003. "required": true,
  1004. "default": "storage_entry"
  1005. }
  1006. },
  1007. {
  1008. "variable": "acl_entries",
  1009. "label": "ACL Configuration",
  1010. "schema": {
  1011. "type": "dict",
  1012. "show_if": [
  1013. [
  1014. "acl_enable",
  1015. "=",
  1016. true
  1017. ]
  1018. ],
  1019. "attrs": [],
  1020. "$ref": [
  1021. "normalize/acl"
  1022. ]
  1023. }
  1024. }
  1025. ]
  1026. }
  1027. },
  1028. {
  1029. "variable": "cifs_config",
  1030. "label": "SMB Configuration",
  1031. "description": "The configuration for the SMB dataset.",
  1032. "schema": {
  1033. "type": "dict",
  1034. "show_if": [
  1035. [
  1036. "type",
  1037. "=",
  1038. "cifs"
  1039. ]
  1040. ],
  1041. "attrs": [
  1042. {
  1043. "variable": "server",
  1044. "label": "Server",
  1045. "description": "The server to mount the SMB share.",
  1046. "schema": {
  1047. "type": "string",
  1048. "required": true
  1049. }
  1050. },
  1051. {
  1052. "variable": "path",
  1053. "label": "Path",
  1054. "description": "The path to mount the SMB share.",
  1055. "schema": {
  1056. "type": "string",
  1057. "required": true
  1058. }
  1059. },
  1060. {
  1061. "variable": "username",
  1062. "label": "Username",
  1063. "description": "The username to use for the SMB share.",
  1064. "schema": {
  1065. "type": "string",
  1066. "required": true
  1067. }
  1068. },
  1069. {
  1070. "variable": "password",
  1071. "label": "Password",
  1072. "description": "The password to use for the SMB share.",
  1073. "schema": {
  1074. "type": "string",
  1075. "required": true,
  1076. "private": true
  1077. }
  1078. },
  1079. {
  1080. "variable": "domain",
  1081. "label": "Domain",
  1082. "description": "The domain to use for the SMB share.",
  1083. "schema": {
  1084. "type": "string"
  1085. }
  1086. }
  1087. ]
  1088. }
  1089. }
  1090. ]
  1091. }
  1092. }
  1093. ]
  1094. }
  1095. }
  1096. ]
  1097. }
  1098. },
  1099. {
  1100. "variable": "labels",
  1101. "label": "",
  1102. "group": "Labels Configuration",
  1103. "schema": {
  1104. "type": "list",
  1105. "default": [],
  1106. "items": [
  1107. {
  1108. "variable": "label",
  1109. "label": "Label",
  1110. "schema": {
  1111. "type": "dict",
  1112. "attrs": [
  1113. {
  1114. "variable": "key",
  1115. "label": "Key",
  1116. "schema": {
  1117. "type": "string",
  1118. "required": true
  1119. }
  1120. },
  1121. {
  1122. "variable": "value",
  1123. "label": "Value",
  1124. "schema": {
  1125. "type": "string",
  1126. "required": true
  1127. }
  1128. },
  1129. {
  1130. "variable": "containers",
  1131. "label": "Containers",
  1132. "description": "Containers where the label should be applied",
  1133. "schema": {
  1134. "type": "list",
  1135. "items": [
  1136. {
  1137. "variable": "container",
  1138. "label": "Container",
  1139. "schema": {
  1140. "type": "string",
  1141. "required": true,
  1142. "enum": [
  1143. {
  1144. "value": "pigallery",
  1145. "description": "pigallery"
  1146. }
  1147. ]
  1148. }
  1149. }
  1150. ]
  1151. }
  1152. }
  1153. ]
  1154. }
  1155. }
  1156. ]
  1157. }
  1158. },
  1159. {
  1160. "variable": "resources",
  1161. "label": "",
  1162. "group": "Resources Configuration",
  1163. "schema": {
  1164. "type": "dict",
  1165. "attrs": [
  1166. {
  1167. "variable": "limits",
  1168. "label": "Limits",
  1169. "schema": {
  1170. "type": "dict",
  1171. "attrs": [
  1172. {
  1173. "variable": "cpus",
  1174. "label": "CPUs",
  1175. "description": "CPUs limit for PiGallery2.",
  1176. "schema": {
  1177. "type": "int",
  1178. "default": 2,
  1179. "required": true
  1180. }
  1181. },
  1182. {
  1183. "variable": "memory",
  1184. "label": "Memory (in MB)",
  1185. "description": "Memory limit for PiGallery2.",
  1186. "schema": {
  1187. "type": "int",
  1188. "default": 4096,
  1189. "required": true
  1190. }
  1191. }
  1192. ]
  1193. }
  1194. }
  1195. ]
  1196. }
  1197. }
  1198. ]
  1199. },
  1200. "readme": "<h1>PiGallery2</h1> <p><a href=\"https://bpatrik.github.io/pigallery2\">PiGallery2</a> is a fast directory-first photo gallery website, with rich UI, optimized for running on low resource servers</p>",
  1201. "changelog": null,
  1202. "chart_metadata": {
  1203. "annotations": {
  1204. "min_scale_version": "24.10.2.2"
  1205. },
  1206. "app_version": "2.0.0",
  1207. "capabilities": [],
  1208. "categories": [
  1209. "media"
  1210. ],
  1211. "changelog_url": "https://github.com/bpatrik/pigallery2/releases",
  1212. "date_added": "2024-09-12",
  1213. "description": "PiGallery2 is a fast directory-first photo gallery website, with rich UI, optimized for running on low resource servers",
  1214. "home": "https://bpatrik.github.io/pigallery2",
  1215. "host_mounts": [],
  1216. "icon": "https://media.sys.truenas.net/apps/pigallery2/icons/icon.png",
  1217. "keywords": [
  1218. "photo",
  1219. "media"
  1220. ],
  1221. "lib_version": "2.1.49",
  1222. "lib_version_hash": "e71e6b0122c9446fa5ea6fb07e7eb01b11fb42d549a19845426bbd7e21a42634",
  1223. "maintainers": [
  1224. {
  1225. "email": "dev@ixsystems.com",
  1226. "name": "truenas",
  1227. "url": "https://www.truenas.com/"
  1228. }
  1229. ],
  1230. "name": "pigallery2",
  1231. "run_as_context": [
  1232. {
  1233. "description": "PiGallery2 runs as any non-root user.",
  1234. "gid": 568,
  1235. "group_name": "pigallery2",
  1236. "uid": 568,
  1237. "user_name": "pigallery2"
  1238. }
  1239. ],
  1240. "screenshots": [
  1241. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot1.png",
  1242. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot2.png",
  1243. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot3.png",
  1244. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot4.png",
  1245. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot5.png",
  1246. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot6.png",
  1247. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot7.png",
  1248. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot8.png",
  1249. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot9.png",
  1250. "https://media.sys.truenas.net/apps/pigallery2/screenshots/screenshot10.png"
  1251. ],
  1252. "sources": [
  1253. "https://hub.docker.com/r/bpatrik/pigallery2",
  1254. "https://github.com/bpatrik/pigallery2"
  1255. ],
  1256. "title": "PiGallery2",
  1257. "train": "community",
  1258. "version": "1.2.6"
  1259. }
  1260. }
  1261. }