From cb0904478c2cde53dc2790b11f4ee0a58de889cb Mon Sep 17 00:00:00 2001 From: kjeld Schouten-Lebbing Date: Mon, 8 Feb 2021 15:28:29 +0100 Subject: [PATCH] Add esphome Co-authored-by: Troy Prelog Signed-off-by: Kjeld Schouten-Lebbing --- .github/CODEOWNERS | 1 + charts/esphome/0.0.1/.helmignore | 24 ++ charts/esphome/0.0.1/Chart.lock | 6 + charts/esphome/0.0.1/Chart.yaml | 26 ++ charts/esphome/0.0.1/LICENSE | 201 +++++++++++++ charts/esphome/0.0.1/README.md | 5 + charts/esphome/0.0.1/app-readme.md | 3 + charts/esphome/0.0.1/charts/common-0.10.1.tgz | Bin 0 -> 20794 bytes charts/esphome/0.0.1/questions.yaml | 282 ++++++++++++++++++ charts/esphome/0.0.1/templates/common.yaml | 1 + charts/esphome/0.0.1/test_values.yaml | 47 +++ charts/esphome/0.0.1/values.yaml | 56 ++++ charts/esphome/item.yaml | 3 + 13 files changed, 655 insertions(+) create mode 100644 charts/esphome/0.0.1/.helmignore create mode 100644 charts/esphome/0.0.1/Chart.lock create mode 100644 charts/esphome/0.0.1/Chart.yaml create mode 100644 charts/esphome/0.0.1/LICENSE create mode 100644 charts/esphome/0.0.1/README.md create mode 100644 charts/esphome/0.0.1/app-readme.md create mode 100644 charts/esphome/0.0.1/charts/common-0.10.1.tgz create mode 100644 charts/esphome/0.0.1/questions.yaml create mode 100644 charts/esphome/0.0.1/templates/common.yaml create mode 100644 charts/esphome/0.0.1/test_values.yaml create mode 100644 charts/esphome/0.0.1/values.yaml create mode 100644 charts/esphome/item.yaml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9f918e46828..62b7c53f955 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,3 +1,4 @@ # Default code owner * @ornias1993 +/charts/esphome/* @tprelog diff --git a/charts/esphome/0.0.1/.helmignore b/charts/esphome/0.0.1/.helmignore new file mode 100644 index 00000000000..e559de0a012 --- /dev/null +++ b/charts/esphome/0.0.1/.helmignore @@ -0,0 +1,24 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS diff --git a/charts/esphome/0.0.1/Chart.lock b/charts/esphome/0.0.1/Chart.lock new file mode 100644 index 00000000000..e7f43316e02 --- /dev/null +++ b/charts/esphome/0.0.1/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: https://charts.truecharts.org/ + version: 0.10.1 +digest: sha256:331c9e36f4741751c9e2d7e88744a78369c7280c45d2a7b207131defacd32027 +generated: "2021-02-05T22:16:36.6361071+01:00" diff --git a/charts/esphome/0.0.1/Chart.yaml b/charts/esphome/0.0.1/Chart.yaml new file mode 100644 index 00000000000..1b7c56db294 --- /dev/null +++ b/charts/esphome/0.0.1/Chart.yaml @@ -0,0 +1,26 @@ +apiVersion: v2 +appVersion: 1.15.3 +version: 0.0.1 +upstream_version: 4.3.1 + +name: esphome +description: ESPHome is a system to control your ESP8266/ESP32 by simple yet powerful configuration files and control them remotely through Home Automation systems. +home: https://github.com/truecharts/charts/tree/dev/charts/esphome +icon: https://esphome.io/_images/logo.svg +type: application + +maintainers: + - name: TrueCharts + +keywords: + - esphome + +sources: + - https://github.com/esphome/esphome + - https://hub.docker.com/u/esphome + - https://github.com/k8s-at-home/charts/tree/master/charts/esphome + +dependencies: + - name: common + repository: https://charts.truecharts.org/ + version: 0.10.1 diff --git a/charts/esphome/0.0.1/LICENSE b/charts/esphome/0.0.1/LICENSE new file mode 100644 index 00000000000..056d3dab356 --- /dev/null +++ b/charts/esphome/0.0.1/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2020 k8s@Home + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/charts/esphome/0.0.1/README.md b/charts/esphome/0.0.1/README.md new file mode 100644 index 00000000000..9b19b6d8923 --- /dev/null +++ b/charts/esphome/0.0.1/README.md @@ -0,0 +1,5 @@ +# ESPHome helm chart + +## Configuration + +Please refer to questions.yaml for a detailed overview on supported configurable items. diff --git a/charts/esphome/0.0.1/app-readme.md b/charts/esphome/0.0.1/app-readme.md new file mode 100644 index 00000000000..7660605dae0 --- /dev/null +++ b/charts/esphome/0.0.1/app-readme.md @@ -0,0 +1,3 @@ +# ESPHome + +ESPHome chart is a chart designed to deploy ESPHome in a TrueNAS SCALE kubernetes cluster. diff --git a/charts/esphome/0.0.1/charts/common-0.10.1.tgz b/charts/esphome/0.0.1/charts/common-0.10.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..b1e1adda23a011e32e820a16c3ba12fa6f720338 GIT binary patch literal 20794 zcmV*7KytqyiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMYMcN;gdD7wFH{t9f$b0YbWP3rC8oa}oPNltXembE0=KH0fh z7T67v7&RL`0Gcwl$M?72g~FrJFOqs#$z<4BD;B$fLZJZE3xz_+rc;*mjwhJQV2-Ep zzdila@Avx$dwcM2zuzza+u!RS{@eCmzkj&9bGUza_;3B~oxQ_@e?$FmfJ^1cgv9*c z`j2j_+_`^}2dDG{;exVcfMz?bh=`EWRKoAqSrV$hP)vs$^EnzZj;?t|V77?XgiXl+ zO{7f4pw}ByImw1W$fiBXGZI3X;-7@{rdUYAdwSZnZpr+P@kk6>U6hw>b#04Xc+u*j z+gGBCWmmP>>LOEnifJM-O$Y}730CNMVDt-9Sk6;2uy9*5+vk3;-4C`~zx6QuW{+9_ zGaP3`d?N<1c>VA0^>_Q_^?$g#yI%j#@oXTyFc_?PfiNd1B5BO#Q zM?zvrMp-O~Y=tb5oW(KW*8m`|)Y?E-L?WCdOkxd{B}h(uz&#IC&$ZzJJ<4kj(3h_U zW{ig^X~xt@@rF3%*Udo{s)DCYua)H)NZ#%SsYhhHV<;jqE^bH z@&L93;WHYNqcCJyA{D_A+CWz+3F(Luf$k^cYCP)Bf&qgR=5(%I{WRO8r zfb{7gtN~Gh#v~zXhD9h7G#LY6OHU-pG>!GJYf+`>N|KqG@Ynw}K<}@QTdj=^^Z|2< zhp{3Pl@mLgRQn^&rVf(mAo3Yc)0n7AA5~F|IEe`su5)UsPFV*~F@+IHW*R2Cqj8Le zL>KDfXi5`>(sdeJtWMuvyg9l){q*7J&HK{C!tBS8Vo0`d| z-)vtB2)&@Gxgk)2ca>_WBa}>r{ z2+&j_IvNp9)X=H%Q7ak^=Xz|z35l|p@YaT_d8{g)>n7$xl4&<#5$T4UN*dx=wRIH7 z><$T-vU4?@7=^ld2M`(b-3tv7-`(C}9(5y}j0tC%=;kQY0VbankD?Myn2<1Vf=Ee| zacjf98mO8dCnPa*OT9lQ@{aLaG{v_BiHs98XBo_sC=nMdrr}&oSk`Hx z7Ev#vLj4QKnH8!~V;?&+-hiO1rFJhtSg)9k4Dn-xM z=_Z<{G#RUp2?=Evryzx(3tdyNw}Hcu2sN5rIU)9SYXdNtDp5d_5#v*+7PJU-=Sr7) zLz7#f^6EZc`X5>dae^cI)WhL`KK*zUK|k$))WLrK z5m9E1%+k_$6zF#E0WmP2emH!yPmY0QA=#5l8yU^SGpVdUmF`*$urepV3nL|IqgYT;7qcR#RGJGeBma8X*O5CCFWxy zFQDn-#L${mK}!Ya(5LZy1h#z%fojWzi%NI=AHRV8#5erhX#R`p-j~dj6FwzPbs5hX<{jYcB@Qv!>qEaY&4>u z2MDLsyscU2p7pzQt#5d%Tr0N4U(L(jGo13erR8s7cnh-;QgJo7*1gH4-qlSo^QFe{ zE)tz4V{Y__3W2M&RsG`JF!ckl0|zJ>)8un)K^coK4#DhJ?6_SVd<5o{QD?gFV}QV~ z+%-mX5Hn>K8i9c2L|Cb!DySC&)N^mZYXIJyNO4oecN99t_m2Mad$b*F?{)iL1qDL; z)-E_1QPm3>d&IOBvbHb_xOHVL?D)8TY*^gtyO9stnI_@=CVLyFw7qbYR~)IjqBUbx znm77IsjrL2Z3C6YZUa@uFJHp<9!9@X%}@ec@P~8tA*~MU!l7-Y3OgZ5qP39F*w77% z;gn^GywKg(MXiu3m|`fx5~B+XTA~ju&ZY!iNyhP*AaJL6VjpC-67xbA@Z2r`%YXHs zULBAf47I!Mx@zrq$4Db%&kGdI6FjA%VsSI7Mua9~4_=lSEYPOMaks#=t(!`+IPRc? zRhrWpEp>7`yi&cuNrZWXfUg@!KmPT!qduem zf!?Jgxso`%-71Q2ADw|BNa3^7mG7{2RC1CDCB+f>OodeVg)yen4ir*SI>kb3%)ZC- z;={3aC0VH2MW`VhD*(FXBLau3_MfSB z4em1^YxmM0w{~IR+VDLexg6pUhqqZ;f$6<=^F&U_mHzu4t?fW-sI*AJ3BhUCyz7FH zX|t@<67UqBd{gr`j=#}@dg^2D>i!+Q!IQ^Bk!%Jk}t0fFuvl@s{0i#6Ik7$2Gr zP<#8&JHhtBt6)3W?)Noa9ah@8+C^mMC8Axp~cwN=&7U35l3XT;)|-D%H#OcPZAM}Nx%e4Q%r2~m?A^LYn)&dHR`w8J&bcsxf#j)5v8 zNjUm0C-HXyfSgikhAB+50ov~Or+TT8DdY12+TMBfmO{t=o)NK1S;d6Fu@0z~jqnS1zML0f?3blz2z)2-V<`batXQH|rGVRD1L!a&`=5?D^yl=O;I zWc5+n4*J1Pf2ZGnwR33EyfO|8H72>sskEn|)r-I-6XtXQ-V&-uJv(lov3e$aY};5O6QrSiIQPTETLDg zUcGXK)I{y7HPlV5eFDpqrW3-^(dkvWD@LwoX)gj7IE2Ruv!XnIm+8YSO%z&se(17x z*t4|Q8}(!3KYBx&^oCeWytgErFw{0Yf<$ffpH^?|%~GYY$;_gzkh&k(h>9hUTd3f} zsVbtD>FV$CJZC+{-KY*C!8ibZHzDDzvY3q{S2YjrTY-e6MqS@PL!y{g%9+$I|9oOV zfdX)E7Lw1_rN5!4kB)iC-+*O3DgN$;#ou&t7Uhz-=Y!{{@j)5dGuD|MM3#q89$54WEt5X2OB{P~CvowzSWUW4#*! zd_c!TA&iVxh*GoRujcA7X5p=XMa?ofWLXj!SXOS6&q}#;KXXolp&Gk0!oWZ`+||sl zI@xZcY6$pw$~=H^y|Gk8wgddmVrY?Z;9lDu2Bmpe<_BFP5z3NSwNqq~0s2|B5^CQo znr1>eXcMJiVsw0drfFn$0z?rfrOt02;{?YYbc|yfvJN6L41!=Qhx9FuO=H|2Itg^an-0;%it%G~xr)58%IEzwjNX zRE7jTX|%svf|R?P-=AFEx61YLMS~U^vPcI=5KqXJ^ipj;g18aj_=h45eJRQNYpyQU=%9%s~h$Y&nM8Rl?W( zOjtr%`OGXK;C*QuH)JoE3DsiTb=Z?SLMkOjdq|9Q9uukk4gMBl&7=veq9v8dDJ0r9 za6sfK5oNcz{sT(R%JR@6>W8v9*;4kRSf6UC4+=ZO6cEr~^}sSXWr--8Kna@y%_YRS zJCUF)>#>rN9lHx_1%o!RjeZCyrFdf1z7gd@dTi6{pw`JXUf|Pe8|r(z+Nd_*qi)ly z+T{hCUZ}9O?S7%{o!y;n_s-JXPW!xYWs@5f_pjNmeoVe<>Ey7`4Fn_sA~`PJ0dMbwUMf%Tn#yHX*o%&P7(6A{@vy!u(DVE zKX1ENjsu`w?|t2#{DvED%|>xbyEvAueCyJI-|=4hOtkc=4&f?Jy2hPYfgri~Xzu-P zzu#}_CAgvWGh%GuqXb>P6XhN^^uRT>-9QQWq~?j) Xn1yfr4VZDIn214W;O8#4= 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 Ji)sMc0RW*bThIUi literal 0 HcmV?d00001 diff --git a/charts/esphome/0.0.1/questions.yaml b/charts/esphome/0.0.1/questions.yaml new file mode 100644 index 00000000000..c95ef408974 --- /dev/null +++ b/charts/esphome/0.0.1/questions.yaml @@ -0,0 +1,282 @@ +groups: + - name: "Container Image" + description: "configure container image" + - name: "Configuration" + description: "additional container configuration" + - name: "Networking" + description: "Networking / service configuration" + - name: "Storage" + description: "configure app volume mounts" + - name: "Ingress" + description: "Ingress configuration" + +portals: + web_portal: + protocols: + - "http" + host: + - "$node_ip" + ports: + - "$variable-service.port.nodePort" + +questions: + # Image related + - variable: image + group: "Container Image" + label: "ESPHome" + schema: + type: dict + required: true + attrs: + - variable: repository + label: "Image Repository" + schema: + type: string + default: "esphome/esphome" + editable: false + - variable: tag + label: "Image Tag" + description: "Tag to use for specified image" + schema: + type: string + default: "latest" + required: true + - variable: pullPolicy + label: "Image Pull Policy" + schema: + type: string + default: "IfNotPresent" + enum: + - value: "IfNotPresent" + description: "Only pull image if not present on host" + - value: "Always" + description: "Always pull image even if present on host" + - value: "Never" + description: "Never pull image even if it's not present on host" + # Update Policy + - variable: strategyType + group: "Container Image" + label: "Update Strategy" + schema: + type: string + default: "Recreate" + enum: + - value: "RollingUpdate" + description: "Create new pods and then kill old ones" + - value: "Recreate" + description: "Kill existing pods before creating new ones" + + # Configure Time Zone + - variable: timezone + group: "Configuration" + label: "Timezone" + schema: + type: string + default: "Etc/UTC" + $ref: + - "definitions/timezone" + # Configure Enviroment Variables + - variable: environment + group: "Configuration" + label: "Environment Variables" + schema: + type: list + default: [] + items: + - variable: environmentVariable + label: "" + schema: + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + + # Enable Host Networking + - variable: hostNetworking + group: "Networking" + label: "Enable Host Networking" + schema: + type: boolean + default: false + # Service Configuration + - variable: service + group: "Networking" + label: "Configure Service" + schema: + type: dict + attrs: + - variable: type + label: "Service type" + schema: + type: string + default: "NodePort" + enum: + - value: "NodePort" + description: "NodePort" + - value: "ClusterIP" + description: "ClusterIP" + show_subquestions_if: "NodePort" + subquestions: + - variable: port + label: "Port configuration" + schema: + type: dict + attrs: + - variable: port + label: "container port" + schema: + type: int + default: 6052 + editable: false + - variable: nodePort + label: "Node Port to expose for UI" + schema: + type: int + min: 9000 + max: 65535 + default: 36052 + required: true + + # Configure app volumes + - variable: appVolumeMounts + group: "Storage" + label: "" + schema: + type: dict + attrs: + # Config ------------------------ + - variable: config + label: "Config Volume" + schema: + type: dict + $ref: + - "normalize/ixVolume" + attrs: + - variable: datasetName + label: "Name" + schema: + type: string + default: "config" + editable: false + - variable: mountPath + label: "Mount path inside the container" + schema: + type: path + default: "/config" + editable: false + - variable: hostPathEnabled + label: "Config - Enable Host Path" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostPath + label: "Config Host Path" + schema: + type: hostpath + required: true + + - variable: appIngress + label: "" + group: "Ingress" + schema: + type: dict + attrs: + - variable: webui + label: "Web Ingress Configuration" + group: "Ingress" + schema: + type: dict + attrs: + - variable: enabled + label: "Enable Web Ingress" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: entrypoint + label: "Select Entrypoint" + schema: + type: string + default: "websecure" + required: true + enum: + - value: "websecure" + description: "Websecure: HTTPS/TLS port 443" + - variable: hosts + label: "Hosts" + schema: + type: list + default: [] + items: + - variable: host + label: "Host" + schema: + type: dict + attrs: + - variable: host + label: "Domain Name" + required: true + schema: + type: string + - variable: paths + label: "paths" + schema: + type: list + default: [] + items: + - variable: path + label: "Path" + schema: + type: dict + attrs: + - variable: path + label: "path" + schema: + type: string + required: true + default: "/" + - variable: pathType + label: "pathType" + schema: + type: string + required: true + default: "prefix" + - variable: certType + label: "Select Certificate Type" + schema: + type: string + default: "letsencrypt-prod" + enum: + - value: "" + description: "No Encryption/TLS/Certificates" + - value: "letsencrypt-prod" + description: "Letsencrypt Production Certificates" + - value: "letsencrypt-staging" + description: "Letsencrypt Test Certificates" + - value: "wildcard" + description: "Global Wildcard Certificate" + - value: "selfsigned" + description: "Self-Signed Certificate" + - value: "existingcert" + description: "Existing Certificate" + show_subquestions_if: "existingcert" + subquestions: + - variable: existingcert + label: "Existing Certificate Name" + schema: + type: string + default: "" + - variable: authForwardURL + label: "Forward Authentication URL" + schema: + type: string + default: "" diff --git a/charts/esphome/0.0.1/templates/common.yaml b/charts/esphome/0.0.1/templates/common.yaml new file mode 100644 index 00000000000..a6613c2ce21 --- /dev/null +++ b/charts/esphome/0.0.1/templates/common.yaml @@ -0,0 +1 @@ +{{ include "common.all" . }} diff --git a/charts/esphome/0.0.1/test_values.yaml b/charts/esphome/0.0.1/test_values.yaml new file mode 100644 index 00000000000..8b5c078d7f6 --- /dev/null +++ b/charts/esphome/0.0.1/test_values.yaml @@ -0,0 +1,47 @@ +# Default values for esphome. + +image: + repository: esphome/esphome + pullPolicy: IfNotPresent + tag: 1.15.3 + +strategy: + type: Recreate + +service: + port: + port: 6052 + nodePort: 30052 + +env: {} + # ESPHOME_DASHBOARD_USE_PING: true + # ESPHOME_DASHBOARD_RELATIVE_URL: "/" + # ESPHOME_QUICKWIZARD: + # ESPHOME_IS_HASSIO: + # DISABLE_HA_AUTHENTICATION: + # USERNAME: + # PASSWORD: + +persistence: + config: + enabled: false + emptyDir: false + ## Persistent Volume Storage Class + ## If defined, storageClassName: + ## If set to "-", storageClassName: "", which disables dynamic provisioning + ## If undefined (the default) or set to null, no storageClassName spec is + ## set, choosing the default provisioner. (gp2 on AWS, standard on + ## GKE, AWS & OpenStack) + # storageClass: "-" + # accessMode: ReadWriteOnce + # size: 1Gi + ## Do not delete the pvc upon helm uninstall + # skipuninstall: false + # existingClaim: "" + +## TrueCharts Config + +appVolumesEnabled: false +emptyDirVolumes: true + + diff --git a/charts/esphome/0.0.1/values.yaml b/charts/esphome/0.0.1/values.yaml new file mode 100644 index 00000000000..67d8132ab2b --- /dev/null +++ b/charts/esphome/0.0.1/values.yaml @@ -0,0 +1,56 @@ +# Default values for esphome. + +image: + repository: esphome/esphome + pullPolicy: IfNotPresent + tag: 1.15.3 + +strategy: + type: Recreate + +service: + type: NodePort + port: + port: 6052 + nodePort: 36052 + +env: {} + # ESPHOME_DASHBOARD_USE_PING: true + # ESPHOME_DASHBOARD_RELATIVE_URL: "/" + # ESPHOME_QUICKWIZARD: + # ESPHOME_IS_HASSIO: + # DISABLE_HA_AUTHENTICATION: + # USERNAME: + # PASSWORD: + +persistence: + config: + enabled: false + emptyDir: false + ## Persistent Volume Storage Class + ## If defined, storageClassName: + ## If set to "-", storageClassName: "", which disables dynamic provisioning + ## If undefined (the default) or set to null, no storageClassName spec is + ## set, choosing the default provisioner. (gp2 on AWS, standard on + ## GKE, AWS & OpenStack) + # storageClass: "-" + # accessMode: ReadWriteOnce + # size: 1Gi + ## Do not delete the pvc upon helm uninstall + # skipuninstall: false + # existingClaim: "" + +## TrueCharts Config + +appVolumesEnabled: true +emptyDirVolumes: false + +appVolumeMounts: + config: + enabled: true + emptyDir: false + datasetName: "config" + mountPath: "/config" + hostPathEnabled: false + + diff --git a/charts/esphome/item.yaml b/charts/esphome/item.yaml new file mode 100644 index 00000000000..e6f2f40128d --- /dev/null +++ b/charts/esphome/item.yaml @@ -0,0 +1,3 @@ +categories: + - tools +icon_url: https://esphome.io/_images/logo.svg