From e901aa8441f5338804f0f9402e2f6efa860f606c Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Wed, 9 Mar 2022 20:15:18 +0200 Subject: [PATCH] feat(redmine): Add redmine (#2112) * feat(redmine): Add redmine * correct digest * typo * rofs false * test migrate and no migrate is working * update questions and use default migrations on values * Update charts/incubator/redmine/values.yaml --- charts/incubator/redmine/Chart.yaml | 35 ++ charts/incubator/redmine/questions.yaml | 471 ++++++++++++++++++ .../incubator/redmine/templates/_secrets.tpl | 20 + .../incubator/redmine/templates/common.yaml | 8 + charts/incubator/redmine/values.yaml | 53 ++ docs/_static/img/appicons/redmine.png | Bin 0 -> 11424 bytes docs/manual/default-ports.md | 3 +- 7 files changed, 589 insertions(+), 1 deletion(-) create mode 100644 charts/incubator/redmine/Chart.yaml create mode 100644 charts/incubator/redmine/questions.yaml create mode 100644 charts/incubator/redmine/templates/_secrets.tpl create mode 100644 charts/incubator/redmine/templates/common.yaml create mode 100644 charts/incubator/redmine/values.yaml create mode 100644 docs/_static/img/appicons/redmine.png diff --git a/charts/incubator/redmine/Chart.yaml b/charts/incubator/redmine/Chart.yaml new file mode 100644 index 00000000000..279de9cdecd --- /dev/null +++ b/charts/incubator/redmine/Chart.yaml @@ -0,0 +1,35 @@ +apiVersion: v2 +appVersion: "4.2.4" +kubeVersion: '>=1.16.0-0' +version: 0.0.1 +name: redmine +description: Redmine is a flexible project management web application written using Ruby on Rails framework. +type: application +home: "https://github.com/truecharts/apps/tree/main/charts/redmine" +icon: https://truecharts.org/_static/img/appicons/redmine.png +keywords: + - project + - management + - time + - tracking + - ticket +sources: + - https://github.com/redmine/redmine + - https://hub.docker.com/_/redmine +dependencies: +- name: common + repository: https://truecharts.org + version: 9.1.2 +- condition: postgresql.enabled + name: postgresql + repository: https://truecharts.org/ + version: 7.0.1 +maintainers: +- email: info@truecharts.org + name: TrueCharts + url: https://truecharts.org +annotations: + truecharts.org/catagories: | + - productivity + truecharts.org/SCALE-support: "true" + truecharts.org/grade: U diff --git a/charts/incubator/redmine/questions.yaml b/charts/incubator/redmine/questions.yaml new file mode 100644 index 00000000000..8c2b78bbec1 --- /dev/null +++ b/charts/incubator/redmine/questions.yaml @@ -0,0 +1,471 @@ +# Include{groups} +portals: + open: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" +questions: + - variable: portal + group: "Container Image" + label: "Configure Portal Button" + schema: + type: dict + hidden: true + attrs: + - variable: enabled + label: "Enable" + description: "enable the portal button" + schema: + hidden: true + editable: false + type: boolean + default: true +# Include{global} + - variable: controller + group: "Controller" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: advanced + label: "Show Advanced Controller Settings" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: type + description: "Please specify type of workload to deploy" + label: "(Advanced) Controller Type" + schema: + type: string + default: "deployment" + required: true + enum: + - value: "deployment" + description: "Deployment" + - value: "statefulset" + description: "Statefulset" + - value: "daemonset" + description: "Daemonset" + - variable: replicas + description: "Number of desired pod replicas" + label: "Desired Replicas" + schema: + type: int + default: 1 + required: true + - variable: strategy + description: "Please specify type of workload to deploy" + label: "(Advanced) Update Strategy" + schema: + type: string + default: "Recreate" + required: true + enum: + - value: "Recreate" + description: "Recreate: Kill existing pods before creating new ones" + - value: "RollingUpdate" + description: "RollingUpdate: Create new pods and then kill old ones" + - value: "OnDelete" + description: "(Legacy) OnDelete: ignore .spec.template changes" +# Include{controllerExpert} + - variable: redmine + group: "Container Configuration" + label: "Redmine Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: plugins_migrate + label: "Plugins Migrate" + description: "Set to true and the migrate script will be automatically run on every container start" + schema: + type: boolean + default: true + - variable: no_db_migrate + label: "No DB Migrate" + description: "Set to true and the migrate script will NOT automatically run on container start." + schema: + type: boolean + default: false + +# Include{containerConfig} + + - variable: service + group: "Networking and Services" + label: "Configure Service(s)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Service" + description: "The Primary service on which the healthcheck runs, often the webUI" + schema: + additional_attrs: true + type: dict + attrs: +# Include{serviceSelector} + - variable: main + label: "Main Service Port Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: "Port" + description: "This port exposes the container port on the service" + schema: + type: int + default: 10171 + required: true + - variable: advanced + label: "Show Advanced settings" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: protocol + label: "Port Type" + schema: + type: string + default: "HTTP" + enum: + - value: HTTP + description: "HTTP" + - value: "HTTPS" + description: "HTTPS" + - value: TCP + description: "TCP" + - value: "UDP" + description: "UDP" + - variable: nodePort + label: "Node Port (Optional)" + description: "This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer" + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: "Target Port" + description: "The internal(!) port on the container the Application runs on" + schema: + type: int + default: 3000 + + - variable: serviceexpert + group: "Networking and Services" + label: "Show Expert Config" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostNetwork + group: "Networking and Services" + label: "Host-Networking (Complicated)" + schema: + type: boolean + default: false + +# Include{serviceExpert} + +# Include{serviceList} + + - variable: persistence + label: "Integrated Persistent Storage" + description: "Integrated Persistent Storage" + group: "Storage and Persistence" + schema: + additional_attrs: true + type: dict + attrs: + - variable: data + label: "App Config Storage" + description: "Stores the Application Configuration." + schema: + additional_attrs: true + type: dict + attrs: + - variable: type + label: "Type of Storage" + description: "Sets the persistence type, Anything other than PVC could break rollback!" + schema: + type: string + default: "simplePVC" + enum: + - value: "simplePVC" + description: "PVC (simple)" + - value: "simpleHP" + description: "HostPath (simple)" + - value: "emptyDir" + description: "emptyDir" + - value: "pvc" + description: "pvc" + - value: "hostPath" + description: "hostPath" +# Include{persistenceBasic} + - variable: hostPath + label: "hostPath" + description: "Path inside the container the storage is mounted" + schema: + show_if: [["type", "=", "hostPath"]] + type: hostpath + - variable: medium + label: "EmptyDir Medium" + schema: + show_if: [["type", "=", "emptyDir"]] + type: string + default: "" + enum: + - value: "" + description: "Default" + - value: "Memory" + description: "Memory" +# Include{persistenceAdvanced} +# Include{persistenceList} + + - variable: ingress + label: "" + group: "Ingress" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Ingress" + schema: + additional_attrs: true + type: dict + attrs: + - variable: enabled + label: "Enable Ingress" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hosts + label: "Hosts" + schema: + type: list + default: [] + items: + - variable: hostEntry + label: "Host" + schema: + additional_attrs: true + type: dict + attrs: + - variable: host + label: "HostName" + schema: + type: string + default: "" + required: true + - variable: paths + label: "Paths" + schema: + type: list + default: [] + items: + - variable: pathEntry + label: "Host" + schema: + additional_attrs: true + 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: tls + label: "TLS-Settings" + schema: + type: list + default: [] + items: + - variable: tlsEntry + label: "Host" + schema: + additional_attrs: true + type: dict + attrs: + - variable: hosts + label: "Certificate Hosts" + schema: + type: list + default: [] + items: + - variable: host + label: "Host" + schema: + type: string + default: "" + required: true + - variable: scaleCert + label: "Select TrueNAS SCALE Certificate" + schema: + type: int + $ref: + - "definitions/certificate" + - variable: entrypoint + label: "(Advanced) Traefik Entrypoint" + description: "Entrypoint used by Traefik when using Traefik as Ingress Provider" + schema: + type: string + default: "websecure" + required: true + - variable: middlewares + label: "Traefik Middlewares" + description: "Add previously created Traefik Middlewares to this Ingress" + schema: + type: list + default: [] + items: + - variable: name + label: "Name" + schema: + type: string + default: "" + required: true + + - variable: expert + label: "Show Expert Configuration Options" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: ingressClassName + label: "IngressClass Name" + schema: + type: string + default: "" + - variable: labelsList + label: "Labels" + schema: + type: list + default: [] + items: + - variable: labelItem + label: "Label" + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + - variable: annotationsList + label: "Annotations" + schema: + type: list + default: [] + items: + - variable: annotationItem + label: "Label" + schema: + additional_attrs: true + type: dict + attrs: + - variable: name + label: "Name" + schema: + type: string + - variable: value + label: "Value" + schema: + type: string + +# Include{ingressList} + +# Include{security} + + - variable: advancedSecurity + label: "Show Advanced Security Settings" + group: "Security and Permissions" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: securityContext + label: "Security Context" + schema: + additional_attrs: true + type: dict + attrs: + - variable: privileged + label: "Privileged mode" + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: "ReadOnly Root Filesystem" + schema: + type: boolean + default: false + - variable: allowPrivilegeEscalation + label: "Allow Privilege Escalation" + schema: + type: boolean + default: false + - variable: runAsNonRoot + label: "runAsNonRoot" + schema: + type: boolean + default: true +# Include{securityContextAdvanced} + + - variable: podSecurityContext + group: "Security and Permissions" + label: "Pod Security Context" + schema: + additional_attrs: true + type: dict + attrs: + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 568 + - variable: runAsGroup + label: "runAsGroup" + description: The groupID this App of the user running the application" + schema: + type: int + default: 568 + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 +# Include{podSecurityContextAdvanced} + +# Include{resources} + +# Include{advanced} + +# Include{addons} diff --git a/charts/incubator/redmine/templates/_secrets.tpl b/charts/incubator/redmine/templates/_secrets.tpl new file mode 100644 index 00000000000..19a67461c0b --- /dev/null +++ b/charts/incubator/redmine/templates/_secrets.tpl @@ -0,0 +1,20 @@ +{{/* Define the secrets */}} +{{- define "redmine.secrets" -}} +--- + +apiVersion: v1 +kind: Secret +type: Opaque +metadata: + name: redmine-secrets +{{- $redmineprevious := lookup "v1" "Secret" .Release.Namespace "redmine-secrets" }} +{{- $secret_key_base := "" }} +data: + {{- if $redmineprevious}} + REDMINE_SECRET_KEY_BASE: {{ index $redmineprevious.data "REDMINE_SECRET_KEY_BASE" }} + {{- else }} + {{- $secret_key_base := randAlphaNum 80 }} + REDMINE_SECRET_KEY_BASE: {{ $secret_key_base | b64enc }} + {{- end }} + +{{- end -}} diff --git a/charts/incubator/redmine/templates/common.yaml b/charts/incubator/redmine/templates/common.yaml new file mode 100644 index 00000000000..d469613d00b --- /dev/null +++ b/charts/incubator/redmine/templates/common.yaml @@ -0,0 +1,8 @@ +{{/* Make sure all variables are set properly */}} +{{- include "common.setup" . }} + +{{/* Render secrets for redmine */}} +{{- include "redmine.secrets" . }} + +{{/* Render the templates */}} +{{ include "common.postSetup" . }} diff --git a/charts/incubator/redmine/values.yaml b/charts/incubator/redmine/values.yaml new file mode 100644 index 00000000000..c3c83afde72 --- /dev/null +++ b/charts/incubator/redmine/values.yaml @@ -0,0 +1,53 @@ +image: + repository: tccr.io/truecharts/redmine + pullPolicy: IfNotPresent + tag: v4.2.4@sha256:5dec2ce2ea609a1b59101ab4903efa5177082c6603d73e8d5b7e6a0136ccb42a + +env: + REDMINE_DB_DATABASE: "{{ .Values.postgresql.postgresqlDatabase }}" + REDMINE_DB_USERNAME: "{{ .Values.postgresql.postgresqlUsername }}" + REDMINE_DB_PORT: "5432" + + # Anything but empty means true, empty means false + REDMINE_NO_DB_MIGRATE: "{{ ternary \"true\" \"\" .Values.redmine.no_db_migrate }}" + REDMINE_PLUGINS_MIGRATE: "{{ ternary \"true\" \"\" .Values.redmine.plugins_migrate }}" + +redmine: + plugins_migrate: true + no_db_migrate: false + +envValueFrom: + REDMINE_DB_PASSWORD: + secretKeyRef: + name: dbcreds + key: postgresql-password + REDMINE_DB_POSTGRES: + secretKeyRef: + name: dbcreds + key: plainhost + REDMINE_SECRET_KEY_BASE: + secretKeyRef: + name: redmine-secrets + key: REDMINE_SECRET_KEY_BASE + +securityContext: + readOnlyRootFilesystem: false + +service: + main: + ports: + main: + port: 10171 + targetPort: 3000 + +persistence: + data: + enabled: true + mountPath: "/usr/src/redmine/files" + +# Enabled postgres +postgresql: + enabled: true + existingSecret: "dbcreds" + postgresqlUsername: redmine + postgresqlDatabase: redmine diff --git a/docs/_static/img/appicons/redmine.png b/docs/_static/img/appicons/redmine.png new file mode 100644 index 0000000000000000000000000000000000000000..5add63f387db150169ed9059b9a810c66e345bd2 GIT binary patch literal 11424 zcmaiabyOVRx+M}Ic!C9o1oy@rf;$QBq_M_5xNC5iZrlkTXxt@%0F4J}JV+Cq;Lh-S z_s*SpYrR?XN1fWWYgO&> z$tuzFj_ISSwj2V1czSxOBtq$@c{$ET@r3|wK~cyU6ZMA-UzG@F2p3~xkoS0V<1wGX zPb4H-BqdoXZSTc{oF3;TMUtTb^WX1qbx5ThbYPVQm#nFB3)B$<6)G=Yg+`@e%UBt| z3`?KkpjEVD#(X_%fFz~g@u8Bqig^I+n^T- z1e%*8{m-$D;t-C#|F_`(9qfP4p{190D(5lQ(hdnx zoW2L$$#)(M$}<_F>-CpS0gFG;5y9(k?znPf6;+ipgT1IQ~3ca3`($AcMElzZkE4ulHy&WG8uSn+SU{KAAuB zC<#B))jSIK>k^}N(Wt=~d)W05C zU{ENg2&S-*D5If2B0Hq}h+ADCY(l~!ODZ3M@3*~d{WQwJGNd1x5ay_j8BN&Bj;q?H zl9^UFPwLmD;VeW+O>>p-W#~MU|BAjSrR=l%sah|4d|Dt``Zu25Q&K#JA+uv})a4d! z<^B9`-_ta{ffF3S=)0-|@HCr3z0qX?gLuEv`_#9&X+b=Da$-Bv!n-CRs3xV!7^s|q zPWpHZgE>>NkioZt2~9*cI=$?%+88`$@=dsYRm})kkF5>CZPu(sT6>!>dG?Lud)xx{UvDaGjtBTRh<~;f|o4c?C79 zfT=Fz9}iFfPw#HnpUUqZIr*%>xfN}Z+Gqe8ebX4|az6FmnMtKVLWAV?0M3sHEHFOH zRk+aDL&bEd+hr^B*l!oUtF^7gZPZ!4;G5vn_sgoTSO_LgYp=hm$M5Ek^tuDJkzp9A z{6192^n$mCqYs@_mpIH;2zYu~(HtpIBDnf{i&c7O{!t2_U)M9gP$OTqS`mChtJ${Y zH;I~@)2%GNykdqQbroc~vzYEBc2o3xRk$|ZyNsn%%Gj54M{_y?k}6xiP0^1G5voB#bd4x49Al{a!N2-# zWrrB&me6qK@KroUYl3d`7x%ArEoL0~_G$-0F6(>!={Y*YrM9D%COx_ewM?dkM}4l* z`q&W=BC89rj>7$RkBONkIBfg9Uj*V@T)EP6_-#j4`4oe`gDXd#xWO>~5`M||(w-n#SP2^Cg{Ae|kZ2D2GR z?;0T3pu+s@WA>BhAR66qY)1+l7OOm~L)|;6f_*Mr_eBTzT=EXT(5sVD$=*(Ab$BRY zS*<~tm7wEN*?X13I`@=-Yn5c7QI?sGkwxOp!C#E26}BmTm^xCO(4o7&U>`lDS$qan z)<8zWD%(XhH?eH7ia}kS#x(w`js_D|w)!xs znqr~pN;c*^<1}>|j`FE9?NdVTL5aUiemrHxN=w4Arv5iBE#le%_VVa@JwzJoB0P?j(-jTumBK&e zn(MTbO{&Y&MQM$jm=Pr9-(Y{Za+nI@vQsU8?(l@A0?mv$hG9TF%j|oP`NK{OScl?v zRnp!5D!KA0Nmxz<>Y7s7d1;C8@;JXw`VFIn9!T|})V2-iBSh$Si)%$#?8x%G7X#%xt~NIlK-wd(9>BC<(0^-VU9ePwXle#OpD?xyJa z-{1o_!hJ>O)&!V2#j)qk5>-ToVC1ytcDwA;l#PI(q$oO_5Us|_ zC4wa}(V?@WXJxEg$jYhPXj`6<;SXq#QVvC>PLLA9kL+GfcR;0VMlKBE<@L@~n`e&A zEm_^}x;zw{c@~kARG&0(ZwNG%Hy{LfUGt;)E$jd4j5b@m;j`v-vM-ai^2*K*nEJbu zW^$ByLgL3ZVLW=$DWBU=h5{BPNzb3j`9X@iW*qL?!+8$k=8QsE7iW@QGC;}s8& z07oMMLd;Ii-<*FPBM1hz_(5SKul+3Cf=rD@wAPD<)mCDH>SsenpR--|+quN4;hv{F zqp^<+YGTToXP6g5hV}F8UGHbyuzI;2>c(bdX-~>usXMK%Fxr}y!}vS+;aq=lpzsmg z7iGg}HH5^I!3K(~G^vjf5Q%)NF2?((%VvL+2wH#Ias z?9U|8$HkVa{E`W=`MO_q@G9)1*lQS^oifv2KVwi9IG+ZTG^_g>1mkoAazx8yG);X!t5 zemX0A8MkZ=mbM=~q&KWvE~qc6uJ!_S(p!JX-lt~*CsQB@71wCn$M0W!G?e<)8>_sb zRCri00=K$jjUQ{AGpe5f!-Z72mJ)VG%P}EW?GK@EVL_22D^Dt>SN9sqaT+w+BhsJ-w#te!~7*{$6YK zTt0ZZr*2|`#=5t}S1IySt*0jWpJFfi@mdYw+`H^X^Q;8kVur)rxC%L|u}zqQc-Hc4 z=2MOtmtGdv5tol8`2dC|i>StYXA)-;3KWlJpW$_ojU>Auw15@S7cxI_6!VnR?(_Eo zo-OD+E;;}eteeo(&oeE%F>l7)pdG4RznY{XFNCM73_JwpTuq#8C%n}n$ zdSiwa95=gw*46{=L+01C!Cbp+bfNj{rOj_3HMn#W#gu;K@9CD5Y9g}|CyAH=_9^R+ z>+;piwm)ol?&wPetT-Pxai3b?^9u*z1KO6DOPhU z_bKm5MExusUY5fkVx68bcAoj10R1eN{z65R%2p+&=kc$O;6Ij5-D=5>p`#lZo~T-**K_5zX!@EP%LVgk)2^rIfX6Ve6F(O#W2;vWFMmNFFul%Q4eaD7_- zB(1ZnYS?V@=Y`z*M5r0fA1s(MLF}h*p%Bj^aM$_Et1ZFB-S5cPnRG#`Rgnq-ds#Fj z>Up+rnETy3?x(!Pc?<1z(q_U!uKrrsrVCNnwkL;)W-GYQ#a&H4AP4&EC+6Rcl&UwZ zSFoz$meP`TxyI3$*Hw=tSVff2# zJ+W4&owr^#S6kc09JqSLbjPoG4@*p%Gp%N`>znbvasZrMJ_0k6{2u7I!~{j~dt`Vk zLOe|YcW+w9R#~j3Mk~u~`-_A>0_XI3|AIS}(%@|8O1?^FBUow^*oe(og&Ck$o{`rP zj$`A#!lM=%h`(({(tPKY6-jH_VGd{4s|i90NTM@uZ;8Z&nqU*Q^2Wm2tFK3$B3rg^ z=Dv-b>b0X0EE_nlTKsK#=(ZkjMs6N`XY`Wqp#=*jVmV`B_RH0MuqpQ#*+c&i)mRsr z?A;Wb^QgTwZpWe9x4jSAYYyUW9Y%BaVqI~b?|C7DdHK$p6e91Z$1jyNzeEq9-D?wm zHaR8QfW?$ZiO%xwe48r`MD32BumP?3x|WGH)_l9r4Kc`c@KmGruw%6RRuoM&Cb+(2 zS^cfX41F4p89~@2UMS&{DJNFLn(E-dwbP2c@45-{Z+fWh6KxXX6htX@s_bH1ld{Y2 zJ@MEhR`dSZNOAUnOt)lKC{ZR}$87mrr^j!zU*)6`^(|JYqkic!L0Zd{=j-4t%&h}| z!9_!OS;3pZw)1}|>Z!($_OaJH);#P;4cQ^#APbW|1 z$?Q=>k;~UyOci#|HcyMDIjTd&qQV-79I8<3n~5JMvjg;Rm)YV}DXHsaOhRr}wm4%W z)gzK4>brWrUd9JF*m5PRQnpw?p0z2rm=Ft{@6=s-|8P_$ph0+G2e(EU-uv_drcQTaehIc4pokD-XPgD`y40gL?bc zr~sS{8)gOUbd@kp6vyKuHz;zy8Oe-5i;iJdc5A?b`9K|v(5P!f`+2-F`ipkhWKD0tzaX4V2yFq@mSzp5`BP zL)u=tEf#w?Qu72T`FoYm+2|2<6M?bcmAf}C08g&0{?4{Tl)gMupg}hA+3%CH;RaH(UzkdaAEirrgm$ z(xw=F&hgWkywn_djZfx2ntia}mn9vvjd-I$dNgR>BuywY51N__rXnBx%LWurW0Hl+dcm8R+3Ks074aPf~Ay!g)T}hgzLT zg(#I!zj)}LKQ5ny1(4y?gn4bd8r&NeX)gh-Z;}+$cLhxQHDeyNLzK3taiWg>OtHr9 zOC7L3*dvlzVn3;*Rl==$G0WmB(o1+=sjR&z!vDnycz29OEfFwr753g(JNwCPlOZ;+ zKXu=f-H4Ur`+oAKW77?n{asWkQ5VhE4L<(JxLb3@d(12}EV-Te#FTyIrp%>u`aF0tCf(Us zb(kQUK8n5`+d#)Xq+#bX${fv9zJsai_AB1So&>C$t&k`lN$LUjyxSUgn)IuFwDbKi zOF}pNJ*sxR-rIp&(cCpNm%35`+_bb`dT7O}!$>c+Ot&&CwD%`;*0x$BDv7u6TY9>z7=aWnss{jbujY={}BsgTX zw1C|*TqsFfCtudjxB7)i>lna6^!fy8IbrMQz+E)wbjaaMj8d5S>n!%UF<@sT(DcK% zw5qV2@Oq5KVc^l#)QDTyrUmKOtdeXpzIhDTzEA|yh2~FOoBozOXECs70OcDM;P8#C zAWH!4lraUM&I+$ig&VW>OxndQBvcIp8uExAhn2~jgS~Pv*zQwNM+nw)#o{vH+Lnne zQ>3Ui{Hde+8(@_LX3N^rC2%fsGOew(c8Tnaao?|Ivq-@NH`+LPyBZ$H_R>Q(r3DR? z1?SOKf2nZwO)ImM8S{NOA47M?&xI3Zgd=1H#X}H=!9K)00p{#AIN)FeaGU`9%lg-O~654meYE0 zWmYojlq|lDd*5RhBopl;S zpVdE|^7q}!eN8>jTU${~goSMvU)lVqKJOIjZTm2=n~)_eXNZ>1NK^2k(ot@d4s*17 zhiTu6I?YlExZ1U1$*ZCQBFn0;s9Dr)?DZY^!(+Ds{i8V(i_d#r4!b30$m^DwXiWX zt!v3hjVOi>{)RDv7%f~|rkZE0vno8$KgjWdZ(tgQPlQH>)OU@)wmj~nkA4PAHvK1FvUD!Bx>XGJU+GjLeT;ICv zbI{xjoP@@s5#H12Hdr$5moaRlu6v_NqX!g%IxB#h!zFfct*U6zu$>z0Ho8;t<*!-pC0ThvorS`b3fye$}J(9o9i&Z&IMY;9*;~K@6Mh>jE-F*Qe`bdS|DPN+nrJ@es zX&s=dzIK4d$A-kNn0LMh0vY9wkV3ejTuowMZr?H}>xTAib9L?8k+z@WKRzrzL3re+_$J2j5Xwe$7QzA+`)Rp1 z&r=fcP}fn3^*#a)?-P@k{A-zFDNTM?N(1IjIJL~0(w4aT!EQ#KRj$ey?oytY!se!F zS;Qe~No8FDI?gdc-|rI-+Q&o;y&Ycu9FOXpWo?ZCrQGFl@qU=rv)#GTesB%_?Q)2G zW2nz{p}N8|T2^V`iKvPSN)ykKbaH!d>%RZ9I%Z~Q;3hx5st*y*1!fa|4GQqLi3H$_ zFr<#5;!Rex1Wv*Vtuf?dYv|6x$ae4X^Y_kFoH;6{zC;feq^Jf+c$)%L#H`$SW=V%9 zR)K*KJ3j8imo;?mVQu{x$$hN9+vjgc{PwvXvAjs?WIMB{U>16#2O#~i?n?}JxW?P; zDOH_AwU?cJi zzv)!dsbOM%ed7drUe&O+0}1#Y5+dvxEKe&5eN6$!J@1}SQ*Nfqv*K^Z(D(nU|MBVT zL>?xR8HMf&-O#(y3L56&MhgXKIZH zL9o-V!^tEei-eWp$M-yWgs{EG{9WAlfo2jdACjHq1x-C@COd&52a~=w(4I?dcVPpb zD%OQ+;Hv#FFde+nNvSw$>(B>F^HqV zwvQqQIz~7laCXyJjjS+n=Rm;)ntRceQ*A>gdWL((JSvnuCkO6M*tqd%tlL@-$TxX9 ziFXE%vSf1gTB94>GX9;PI>HAv+yd8rHjp{|5W2v1=VlO%ebe;BW&k4qrQD+)S^8WD zQteWK&Ryn$d4V@!6I44lqpDA69dNAj;@7CoSgjX$XT<@7ew*Dj%pGbV9NwD;DXu8N zt$P2XLz#yp=FgegWa z$0cHx^T=91no-B=9GtkrS?T|ZD?R~IbwoVJfHO#2UP;9sgs{6#MG`--@)BEl2L7R+ zetG622HBO9fX(w8a4H^xpP>;9q5s2%7hn-uy7L0v0Ehq2?tZ*;syOWSqNR_*CdEM|Qo}Dqceq_{3oYQEH zJkuriPd6qazJNDVDcn^YzB5Aag(DIR+fmdWF52Dqx2aIB@J- z82H>{9%ZfVKU?L~N27K$VX%m7 z#S%U(b0#19O^G-atR~44-(3~`TTD>|Vb2z2D(TkQtu*e+!I^~Vftk9`Y>kw(5#yzJ zyp?DMj5G~P=@L-hrCTF)9UyU&g$^r~_)y5ZZA^=l@>45{UO^2Efqs4anhb2Kcf4!EJ%D7DeO z_n2lQS48tMVles}=HD~FTV#QOX%Ow=XW^d1i`ek}+NiiaQ(Sbv{i|m}pmdE`mG$*X zVOl%f8vks`G_`!2ffzh`nsRP1PAr9kFJ|hZ}5$dVp%5vp2~Mf z#bAHBvzXU$UV~yAzIWt?M*7UF61$?K^YVPm*!K7XP&sQ`W_;VH%ARKBL*2f8Qo@de zgv0!g7hsJ2aEAvA9rUKu%^LMfTfYH9d>03)EL!u!2`e52qby?tdkMQkP9k+#NW)hq z@7F>w8U9)0F+M#>lJRSefyR%OZAur`3H3@p0r(?gnYS#eyPelL-xG;Ix$h?N540Yb zv&@!Mi9vJjvm3VS_hhGgiFhD_r)iyU#46Dtpq~Ke7*KOSPJYS|Nd}<3kc4o+ihs@tG zicDxWZyeY0?l?*a#_Z#3p=6~&N-i*)suj%j+=)>%Vq{M%``i{q@L3XNkh^-EGs zOu~NnZ@u4Ers#OkB-=84>fT?DOOTyhb{aLXz{udS)M#=;brvOz%>nGyWZ5j{xXb6# zeE6~i`1o7C;=+C;tAYjW6G*`W%cc|n@aCn(uiwiaMkPSr1{>>|DO-WQ{qk+@#3N%A zf(j@XK#IxK3%E22en#WUa!Vwh+tJNbECt-IU>rA5{30+C@t2d{S!|&?I#X z66-;uY?jgeTzogZAMcsfjHpq)uA4-z=L`yq#F%vABfDQ6Ug6m4nT?}0p!boK=bQ1* zWHlLyRD~80jM-}foKGt$jnd^K!yDTBnbUvhd;=8nt@z^jtHK*9bwA*gk-+$@=n{e6 zIz<_dt(DZ%yoFxTjtr{bCN45RdS& zrB@MGZrSU&rqiJnpRpr#m*dj?SQ348ZS5>^L&G2~0qAtK9|p9Q7{$TU1{c4Zs$&wc z^$v&-c=ll!9^=7Raq4GYsp~VYWk=+1wI+;7JPL!Mg_RDQ!#XK9!my3csk}C!yk_Mf z(MUxl1ThD={&znn+m|0THl>ex=muc`vq!BtxY+8vc4y|^3+od*DO^y7NBj#xK1XN4 z4UOwpW*LLs2=%lg7D;V!K4;8+n10XErjt-`49Jz5S+y!_7&mlW_W6?}%mG%K8Q`cE z)7^YJVMGw=)Jah@!dlbRY~Bqn(@d3}z3hka%#cQL_fY!b)`o_+g@-j)6rV*ep_$TI zC(VRGaL>2kke_zGlW2`9U;Mq;TrELom1yfV+pjZd^bhy#%>hA`cEIMsb(36s*n86# zn9yCM4Z2FD#&9W~ioQ;6X~Kaohx+&O(r;&;g$Jfbpn7T!MJD*G`+T%7p{F1p$tBY& zav4Kz0Zc*=_rfAbC~OQgBrR?>T%9`FU%=#$n{7TvtBCQE+=fT5{3XpF%rELH=78gp z@kVTGP?sPLY{yY19J4%fTAl+_tECxEXx1|MDjbr~wBdEyMCKVA`I1l_*DAr2nfs%_ zTP$dTS}TNoGNb2HfjR{fCje|UZ;6G?bnN}=GXpQhYgMxhwMNUMYuY6zk*Ii2&nbJG z&FVFSVowj*syz69s6fO1vNHGlkI=GGw(5=Z%Am<`BTm#76QeX$b3h@sNE4OI981P| z7Q<-^a(^S#$0<#>jJKEtV!H?Pd#Q3oj^R|5Q9B6~;CQpFGkL(R+tE(X4DsBoeoYgL z&~t3XOd)#*+bn|5!W=g2lwb8r$fjvzz)Z>JsEXIgW@3@dHV#Y1&o+v(U)s$&NUQST z8+EKX-V@79E0S7uis2K0s6cL2F}p%D^IyNF(85e<1dkb;U=2#Tf<}>OXWd?+Ec;d$ zan&6@zru-BGcHRUyvo!* z4M;#^RS2KY5j5x87eS{ifFFwX@@%lvwnQt|)Av23#Fp2f933R6c2etGQQL!w4f4Zy zC1@Y$Xph{YhXQ4KVOC~)1#287t88*eoxsKhneoeDKL7dih#kHKhyW5}pIW>wTU`g< z6RB77v22XE%*_&X_EJV5y`?R8!IFBJa#!NH{VtvD6I&U*a?abfdSju@K0*?g)ptKM z^RMZ~VHQh;MR)DC#Gqa4NzM-pwzdVYLFaNi?uX)CjwEUWqc-@6!&d7s(d04p8ol(- zG~K(0kXnE7-%uu_S7WQIdV`g{>M&HrG`a(}mqR4)?Lpaj-UvP2{7Jk`*Vq{25fH0T z0NqSml;o)TxYQY-iU34RpZvT+P(7mcw^0~efiBTVNFa(GT|kCtb}4nROOnz>9xEj- z1CGe5XymZ~DTYq%??poV&EJL0x{*B8Oo-fF2nu%%CTZO!l1&kl> ze`zi*>yWSel(Rej;6Z8hGlHLMjU2WPu}Ah0lfb64N*AAr%~zYAjiM?{a$i*IyYE^W z&)wI&j+ByPb-J&>McA4QP8m2YU&ycK%sAnKUad?VCfk_@A}t}J)xm{0H$R)QNu3dS zws?rvCFGw;N_CaS))R4sSEyMd62w2dlowTUf#J%Hc_UCw2n zKIRE`40Xa2{lkFkjykBvBg4?-gAAtuBa!27#XMy?T2Q%$6UJZ1Fw!70Z1wzRe@~IC zwYJ=ERr4>Q0u%d=;p~Z)`ju)9eaiy4lxx6pJN_*kVig!{yOAudAAR&|wm!hv&S2emJ*uX>_9nc-x%$kfl1x_&4nYu3y@rH}zUPj}VK zI{5Wg$6ZBu7LvQukv^?`GwvjDI0(dYW}BCIVNpjly~;~PV_{OR(?<)FdV%uf^IU8@ zD!V=L>^ANINpUVvu_TJtan5d{c-p8zSQ!xSFS7~_M!eEwy`JTw^B@oxL3-EJtVX!K zg7Mnj}Yk(dpqlGAVh3G`V;&T4s-+5Tf0mio%!|JaFW*TgtG&jKw|gh6KO_hUuCbxx5i|MI8?M^pR{w$WlsIy;2*xk4g3=QozVZs+WHkGOxA_`zs$A(SBw9LwUvKB h7VxUiRx#p~>-rd`=n&Yw{A@W!Qj$}bt(69b{x6}k4>JG& literal 0 HcmV?d00001 diff --git a/docs/manual/default-ports.md b/docs/manual/default-ports.md index 4c4ea186aef..17e657a9fcc 100644 --- a/docs/manual/default-ports.md +++ b/docs/manual/default-ports.md @@ -327,7 +327,8 @@ These defaults can of course be changed, but as we guarantee "sane, working defa | alist | main | main | 10167 | TCP | | | ddns-go | main | main | 10168 | TCP | | | openhab | main | main | 10169 | HTTP | | -| openhab | main | main | 10170 | HTTPS | | +| openhab | https | https | 10170 | HTTPS | | +| redmine | main | main | 10171 | HTTP | | | satisfactory | beacon | beacon | 15000 | UDP | | | satisfactory | query | query | 15777 | UDP | | | minecraft-bedrock | main | main | 19132 | UDP | |