app_versions.json 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  1. {
  2. "1.1.4": {
  3. "healthy": true,
  4. "supported": true,
  5. "healthy_error": null,
  6. "location": "/__w/charts/charts/community/unifi-protect-backup/1.1.4",
  7. "last_update": "2023-11-23 22:47:30",
  8. "required_features": [
  9. "definitions/timezone",
  10. "normalize/ixVolume"
  11. ],
  12. "human_version": "0.10.2_1.1.4",
  13. "version": "1.1.4",
  14. "chart_metadata": {
  15. "name": "unifi-protect-backup",
  16. "description": "Unifi Protect Backup is a python based tool for backing up UniFi Protect event clips as they occur.",
  17. "annotations": {
  18. "title": "Unifi Protect Backup"
  19. },
  20. "type": "application",
  21. "version": "1.1.4",
  22. "apiVersion": "v2",
  23. "appVersion": "0.10.2",
  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://github.com/ep1cman/unifi-protect-backup",
  40. "icon": "https://media.sys.truenas.net/apps/unifi-protect-backup/icons/icon.png",
  41. "sources": [
  42. "https://github.com/ep1cman/unifi-protect-backup",
  43. "https://github.com/truenas/charts/tree/master/community/unifi-protect-backup",
  44. "https://github.com/ep1cman/unifi-protect-backup/pkgs/container/unifi-protect-backup/"
  45. ],
  46. "keywords": [
  47. "backup",
  48. "unifi-protect"
  49. ]
  50. },
  51. "app_metadata": {
  52. "runAsContext": [
  53. {
  54. "userName": "root",
  55. "groupName": "root",
  56. "gid": 0,
  57. "uid": 0,
  58. "description": "Unifi Protect Backup run as root user"
  59. }
  60. ],
  61. "capabilities": [
  62. {
  63. "name": "CHOWN",
  64. "description": "Unifi Protect Backup is able to chown files."
  65. },
  66. {
  67. "name": "FOWNER",
  68. "description": "Unifi Protect Backup is able bypass permission checks for it's sub-processes."
  69. },
  70. {
  71. "name": "SETGID",
  72. "description": "Unifi Protect Backup is able to set group ID for it's sub-processes."
  73. },
  74. {
  75. "name": "SETUID",
  76. "description": "Unifi Protect Backup is able to set user ID for it's sub-processes."
  77. }
  78. ],
  79. "hostMounts": []
  80. },
  81. "schema": {
  82. "groups": [
  83. {
  84. "name": "Unifi Protect Backup Configuration",
  85. "description": "Configure Unifi Protect Backup"
  86. },
  87. {
  88. "name": "User and Group Configuration",
  89. "description": "Configure User and Group for Unifi Protect Backup"
  90. },
  91. {
  92. "name": "Storage Configuration",
  93. "description": "Configure Storage for Unifi Protect Backup"
  94. },
  95. {
  96. "name": "Resources Configuration",
  97. "description": "Configure Resources for Unifi Protect Backup"
  98. }
  99. ],
  100. "questions": [
  101. {
  102. "variable": "TZ",
  103. "group": "Unifi Protect Backup Configuration",
  104. "label": "Timezone",
  105. "schema": {
  106. "type": "string",
  107. "default": "America/Los_Angeles",
  108. "required": true,
  109. "$ref": [
  110. "definitions/timezone"
  111. ],
  112. "enum": [
  113. {
  114. "value": "Asia/Damascus",
  115. "description": "'Asia/Damascus' timezone"
  116. },
  117. {
  118. "value": "Asia/Saigon",
  119. "description": "'Asia/Saigon' timezone"
  120. }
  121. ]
  122. }
  123. },
  124. {
  125. "variable": "upbConfig",
  126. "label": "",
  127. "group": "Unifi Protect Backup Configuration",
  128. "schema": {
  129. "type": "dict",
  130. "attrs": [
  131. {
  132. "variable": "unifiProtectUsername",
  133. "label": "Unifi Protect Username",
  134. "description": "Username to login to Unifi Protect instance",
  135. "schema": {
  136. "type": "string",
  137. "required": true
  138. }
  139. },
  140. {
  141. "variable": "unifiProtectPassword",
  142. "label": "Unifi Protect Password",
  143. "description": "Password for Unifi Protect user",
  144. "schema": {
  145. "type": "string",
  146. "required": true,
  147. "private": true
  148. }
  149. },
  150. {
  151. "variable": "unifiProtectAddress",
  152. "label": "Unifi Protect Address",
  153. "description": "Address of Unifi Protect instance",
  154. "schema": {
  155. "type": "string",
  156. "required": true
  157. }
  158. },
  159. {
  160. "variable": "unifiProtectPort",
  161. "label": "Unifi Protect Port",
  162. "description": "Port of Unifi Protect instance",
  163. "schema": {
  164. "type": "int",
  165. "min": 1,
  166. "max": 65535,
  167. "required": true,
  168. "default": 443
  169. }
  170. },
  171. {
  172. "variable": "unifiProtectVerifySsl",
  173. "label": "Unifi Protect Verify SSL",
  174. "description": "Verify SSL certificate of Unifi Protect instance",
  175. "schema": {
  176. "type": "boolean",
  177. "default": true
  178. }
  179. },
  180. {
  181. "variable": "skipMissing",
  182. "label": "Skip Missing",
  183. "description": "If set, events which are 'missing' at the start will be ignored.",
  184. "schema": {
  185. "type": "boolean",
  186. "default": false
  187. }
  188. },
  189. {
  190. "variable": "ignoreCameras",
  191. "label": "Ignore Cameras",
  192. "description": "IDs of cameras for which events should not be backed up. One per line.",
  193. "schema": {
  194. "type": "list",
  195. "default": [],
  196. "items": [
  197. {
  198. "variable": "id",
  199. "label": "Camera ID",
  200. "schema": {
  201. "type": "string",
  202. "required": true
  203. }
  204. }
  205. ]
  206. }
  207. },
  208. {
  209. "variable": "detectionTypes",
  210. "label": "Detection Types",
  211. "description": "Types of detections to back up. One per line.",
  212. "schema": {
  213. "type": "list",
  214. "default": [
  215. "motion",
  216. "person",
  217. "vehicle",
  218. "ring"
  219. ],
  220. "items": [
  221. {
  222. "variable": "type",
  223. "label": "Detection Type",
  224. "schema": {
  225. "type": "string",
  226. "required": true,
  227. "enum": [
  228. {
  229. "value": "motion",
  230. "description": "Motion"
  231. },
  232. {
  233. "value": "person",
  234. "description": "Person"
  235. },
  236. {
  237. "value": "vehicle",
  238. "description": "Vehicle"
  239. },
  240. {
  241. "value": "ring",
  242. "description": "Ring"
  243. }
  244. ]
  245. }
  246. }
  247. ]
  248. }
  249. },
  250. {
  251. "variable": "rcloneDestination",
  252. "label": "Rclone Destination",
  253. "description": "Rclone destination path in the format {rclone-remote}:{path-on-remote} </br.>\nE.g. `gdrive:/backups/unifi_protect`\n",
  254. "schema": {
  255. "type": "string",
  256. "required": true
  257. }
  258. },
  259. {
  260. "variable": "rcloneArgs",
  261. "label": "Rclone Arguments",
  262. "description": "Optional extra arguments to pass to rclone rcat directly. One per line</br>\nCommon usage for this would be to set a bandwidth limit</br>\nE.g. --bwlimit 8M\n",
  263. "schema": {
  264. "type": "list",
  265. "default": [],
  266. "items": [
  267. {
  268. "variable": "arg",
  269. "label": "Argument",
  270. "schema": {
  271. "type": "string",
  272. "required": true
  273. }
  274. }
  275. ]
  276. }
  277. },
  278. {
  279. "variable": "rclonePurgeArgs",
  280. "label": "Rclone Purge Arguments",
  281. "description": "Optional extra arguments to pass to rclone delete. One per line</br>\nCommon usage for this would be to execute a permanent delete\ninstead of using the recycle bin on a destination.</br>\nGoogle Drive example: --drive-use-trash=false\n",
  282. "schema": {
  283. "type": "list",
  284. "default": [],
  285. "items": [
  286. {
  287. "variable": "arg",
  288. "label": "Argument",
  289. "schema": {
  290. "type": "string",
  291. "required": true
  292. }
  293. }
  294. ]
  295. }
  296. },
  297. {
  298. "variable": "additionalEnvs",
  299. "label": "Additional Environment Variables",
  300. "description": "Configure additional environment variables for Unifi Protect Backup.",
  301. "schema": {
  302. "type": "list",
  303. "default": [],
  304. "items": [
  305. {
  306. "variable": "env",
  307. "label": "Environment Variable",
  308. "schema": {
  309. "type": "dict",
  310. "attrs": [
  311. {
  312. "variable": "name",
  313. "label": "Name",
  314. "schema": {
  315. "type": "string",
  316. "required": true
  317. }
  318. },
  319. {
  320. "variable": "value",
  321. "label": "Value",
  322. "schema": {
  323. "type": "string",
  324. "required": true
  325. }
  326. }
  327. ]
  328. }
  329. }
  330. ]
  331. }
  332. }
  333. ]
  334. }
  335. },
  336. {
  337. "variable": "upbID",
  338. "label": "",
  339. "group": "User and Group Configuration",
  340. "schema": {
  341. "type": "dict",
  342. "attrs": [
  343. {
  344. "variable": "user",
  345. "label": "User ID",
  346. "description": "The user id that Unifi Protect Backup files will be owned by.",
  347. "schema": {
  348. "type": "int",
  349. "min": 568,
  350. "default": 568,
  351. "required": true
  352. }
  353. },
  354. {
  355. "variable": "group",
  356. "label": "Group ID",
  357. "description": "The group id that Unifi Protect Backup files will be owned by.",
  358. "schema": {
  359. "type": "int",
  360. "min": 568,
  361. "default": 568,
  362. "required": true
  363. }
  364. }
  365. ]
  366. }
  367. },
  368. {
  369. "variable": "upbStorage",
  370. "label": "",
  371. "group": "Storage Configuration",
  372. "schema": {
  373. "type": "dict",
  374. "attrs": [
  375. {
  376. "variable": "config",
  377. "label": "Unifi Protect Backup Config Storage",
  378. "description": "The path to store Unifi Protect Backup Configuration.",
  379. "schema": {
  380. "type": "dict",
  381. "attrs": [
  382. {
  383. "variable": "type",
  384. "label": "Type",
  385. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  386. "schema": {
  387. "type": "string",
  388. "required": true,
  389. "immutable": true,
  390. "default": "ixVolume",
  391. "enum": [
  392. {
  393. "value": "hostPath",
  394. "description": "Host Path (Path that already exists on the system)"
  395. },
  396. {
  397. "value": "ixVolume",
  398. "description": "ixVolume (Dataset created automatically by the system)"
  399. }
  400. ]
  401. }
  402. },
  403. {
  404. "variable": "datasetName",
  405. "label": "Dataset Name",
  406. "schema": {
  407. "type": "string",
  408. "show_if": [
  409. [
  410. "type",
  411. "=",
  412. "ixVolume"
  413. ]
  414. ],
  415. "required": true,
  416. "hidden": true,
  417. "immutable": true,
  418. "default": "config",
  419. "$ref": [
  420. "normalize/ixVolume"
  421. ]
  422. }
  423. },
  424. {
  425. "variable": "hostPath",
  426. "label": "Host Path",
  427. "schema": {
  428. "type": "hostpath",
  429. "show_if": [
  430. [
  431. "type",
  432. "=",
  433. "hostPath"
  434. ]
  435. ],
  436. "immutable": true,
  437. "required": true
  438. }
  439. }
  440. ]
  441. }
  442. },
  443. {
  444. "variable": "data",
  445. "label": "Unifi Protect Backup Data Storage",
  446. "description": "The path to store Unifi Protect Backup Data.",
  447. "schema": {
  448. "type": "dict",
  449. "attrs": [
  450. {
  451. "variable": "type",
  452. "label": "Type",
  453. "description": "ixVolume: Is dataset created automatically by the system.</br>\nHost Path: Is a path that already exists on the system.\n",
  454. "schema": {
  455. "type": "string",
  456. "required": true,
  457. "immutable": true,
  458. "default": "ixVolume",
  459. "enum": [
  460. {
  461. "value": "hostPath",
  462. "description": "Host Path (Path that already exists on the system)"
  463. },
  464. {
  465. "value": "ixVolume",
  466. "description": "ixVolume (Dataset created automatically by the system)"
  467. }
  468. ]
  469. }
  470. },
  471. {
  472. "variable": "datasetName",
  473. "label": "Dataset Name",
  474. "schema": {
  475. "type": "string",
  476. "show_if": [
  477. [
  478. "type",
  479. "=",
  480. "ixVolume"
  481. ]
  482. ],
  483. "required": true,
  484. "hidden": true,
  485. "immutable": true,
  486. "default": "data",
  487. "$ref": [
  488. "normalize/ixVolume"
  489. ]
  490. }
  491. },
  492. {
  493. "variable": "hostPath",
  494. "label": "Host Path",
  495. "schema": {
  496. "type": "hostpath",
  497. "show_if": [
  498. [
  499. "type",
  500. "=",
  501. "hostPath"
  502. ]
  503. ],
  504. "immutable": true,
  505. "required": true
  506. }
  507. }
  508. ]
  509. }
  510. },
  511. {
  512. "variable": "additionalStorages",
  513. "label": "Additional Storage",
  514. "description": "Additional storage for Unifi Protect Backup.",
  515. "schema": {
  516. "type": "list",
  517. "default": [],
  518. "items": [
  519. {
  520. "variable": "storageEntry",
  521. "label": "Storage Entry",
  522. "schema": {
  523. "type": "dict",
  524. "attrs": [
  525. {
  526. "variable": "type",
  527. "label": "Type",
  528. "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",
  529. "schema": {
  530. "type": "string",
  531. "required": true,
  532. "default": "ixVolume",
  533. "immutable": true,
  534. "enum": [
  535. {
  536. "value": "hostPath",
  537. "description": "Host Path (Path that already exists on the system)"
  538. },
  539. {
  540. "value": "ixVolume",
  541. "description": "ixVolume (Dataset created automatically by the system)"
  542. },
  543. {
  544. "value": "smb-pv-pvc",
  545. "description": "SMB Share (Mounts a persistent volume claim to a SMB share)"
  546. }
  547. ]
  548. }
  549. },
  550. {
  551. "variable": "mountPath",
  552. "label": "Mount Path",
  553. "description": "The path inside the container to mount the storage.",
  554. "schema": {
  555. "type": "path",
  556. "required": true
  557. }
  558. },
  559. {
  560. "variable": "hostPath",
  561. "label": "Host Path",
  562. "description": "The host path to use for storage.",
  563. "schema": {
  564. "type": "hostpath",
  565. "show_if": [
  566. [
  567. "type",
  568. "=",
  569. "hostPath"
  570. ]
  571. ],
  572. "required": true
  573. }
  574. },
  575. {
  576. "variable": "datasetName",
  577. "label": "Dataset Name",
  578. "description": "The name of the dataset to use for storage.",
  579. "schema": {
  580. "type": "string",
  581. "show_if": [
  582. [
  583. "type",
  584. "=",
  585. "ixVolume"
  586. ]
  587. ],
  588. "required": true,
  589. "immutable": true,
  590. "default": "storage_entry",
  591. "$ref": [
  592. "normalize/ixVolume"
  593. ]
  594. }
  595. },
  596. {
  597. "variable": "server",
  598. "label": "Server",
  599. "description": "The server for the SMB share.",
  600. "schema": {
  601. "type": "string",
  602. "show_if": [
  603. [
  604. "type",
  605. "=",
  606. "smb-pv-pvc"
  607. ]
  608. ],
  609. "required": true
  610. }
  611. },
  612. {
  613. "variable": "share",
  614. "label": "Share",
  615. "description": "The share name for the SMB share.",
  616. "schema": {
  617. "type": "string",
  618. "show_if": [
  619. [
  620. "type",
  621. "=",
  622. "smb-pv-pvc"
  623. ]
  624. ],
  625. "required": true
  626. }
  627. },
  628. {
  629. "variable": "domain",
  630. "label": "Domain (Optional)",
  631. "description": "The domain for the SMB share.",
  632. "schema": {
  633. "type": "string",
  634. "show_if": [
  635. [
  636. "type",
  637. "=",
  638. "smb-pv-pvc"
  639. ]
  640. ]
  641. }
  642. },
  643. {
  644. "variable": "username",
  645. "label": "Username",
  646. "description": "The username for the SMB share.",
  647. "schema": {
  648. "type": "string",
  649. "show_if": [
  650. [
  651. "type",
  652. "=",
  653. "smb-pv-pvc"
  654. ]
  655. ],
  656. "required": true
  657. }
  658. },
  659. {
  660. "variable": "password",
  661. "label": "Password",
  662. "description": "The password for the SMB share.",
  663. "schema": {
  664. "type": "string",
  665. "show_if": [
  666. [
  667. "type",
  668. "=",
  669. "smb-pv-pvc"
  670. ]
  671. ],
  672. "required": true,
  673. "private": true
  674. }
  675. },
  676. {
  677. "variable": "size",
  678. "label": "Size (in Gi)",
  679. "description": "The size of the volume quota.",
  680. "schema": {
  681. "type": "int",
  682. "show_if": [
  683. [
  684. "type",
  685. "=",
  686. "smb-pv-pvc"
  687. ]
  688. ],
  689. "required": true,
  690. "min": 1,
  691. "default": 1
  692. }
  693. }
  694. ]
  695. }
  696. }
  697. ]
  698. }
  699. }
  700. ]
  701. }
  702. },
  703. {
  704. "variable": "resources",
  705. "group": "Resources Configuration",
  706. "label": "",
  707. "schema": {
  708. "type": "dict",
  709. "attrs": [
  710. {
  711. "variable": "limits",
  712. "label": "Limits",
  713. "schema": {
  714. "type": "dict",
  715. "attrs": [
  716. {
  717. "variable": "cpu",
  718. "label": "CPU",
  719. "description": "CPU limit for Unifi Protect Backup.",
  720. "schema": {
  721. "type": "string",
  722. "max_length": 6,
  723. "valid_chars": "^(0\\.[1-9]|[1-9][0-9]*)(\\.[0-9]|m?)$",
  724. "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",
  725. "default": "4000m",
  726. "required": true
  727. }
  728. },
  729. {
  730. "variable": "memory",
  731. "label": "Memory",
  732. "description": "Memory limit for Unifi Protect Backup.",
  733. "schema": {
  734. "type": "string",
  735. "max_length": 12,
  736. "valid_chars": "^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$",
  737. "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",
  738. "default": "8Gi",
  739. "required": true
  740. }
  741. }
  742. ]
  743. }
  744. }
  745. ]
  746. }
  747. }
  748. ]
  749. },
  750. "app_readme": "<h1>Unifi Protect Backup</h1>\n<p><a href=\"https://github.com/ep1cman/unifi-protect-backup\">Unifi Protect Backup</a> is a python based tool for backing up UniFi Protect event clips as they occur.</p>",
  751. "detailed_readme": "<h1>Unifi Protect Backup</h1>\n<p><a href=\"https://github.com/ep1cman/unifi-protect-backup\">Unifi Protect Backup</a> is a python based tool for backing up UniFi Protect event clips as they occur.</p>",
  752. "changelog": null
  753. }
  754. }