Compare commits

...

10 Commits

Author SHA1 Message Date
justusbunsi
20fca813bc
Only render ingressClassName when not empty
Signed-off-by: justusbunsi <sk.bunsenbrenner@gmail.com>
2024-07-21 13:10:01 +02:00
justusbunsi
5ec52eaef8
Make deprecation visible in README
Signed-off-by: justusbunsi <sk.bunsenbrenner@gmail.com>
2024-07-21 12:18:11 +02:00
justusbunsi
2b14bc7e4b Merge branch 'main' into fix-674 2024-07-21 10:06:26 +00:00
pat-s
4c0b7f83cd
update tests 2024-07-13 13:57:12 +02:00
pat-s
d99b24fd2e
Merge branch 'main' into fix-674 2024-07-13 12:51:48 +02:00
pat-s
52a779f26c
deprecate ingress.className in favor of ingress.ingressClassName 2024-07-13 12:48:15 +02:00
pat-s
f34fe9efb9
remove ingress.apiVersion param 2024-07-13 11:26:44 +02:00
pat-s
e5ed116dc0
document parameters changes 2024-07-05 15:03:40 +02:00
pat-s
82f82a45c5
use fullName var 2024-07-05 14:57:04 +02:00
pat-s
37b92f265f
overhaul ingress configuration 2024-07-05 14:48:17 +02:00
7 changed files with 202 additions and 75 deletions

View File

@ -99,7 +99,7 @@ These dependencies are enabled by default:
Alternatively, the following non-HA replacements are available: Alternatively, the following non-HA replacements are available:
- PostgreSQL ([Bitnami PostgreSQL](<Postgresql](https://github.com/bitnami/charts/blob/main/bitnami/postgresql/Chart.yaml)>)) - PostgreSQL ([Bitnami PostgreSQL](<postgresql](https://github.com/bitnami/charts/blob/main/bitnami/postgresql/Chart.yaml)>))
- Redis ([Bitnami Redis](<Redis](https://github.com/bitnami/charts/blob/main/bitnami/redis/Chart.yaml)>)) - Redis ([Bitnami Redis](<Redis](https://github.com/bitnami/charts/blob/main/bitnami/redis/Chart.yaml)>))
### Dependency Versioning ### Dependency Versioning
@ -922,16 +922,16 @@ To comply with the Gitea helm chart definition of the digest parameter, a "custo
### Ingress ### Ingress
| Name | Description | Value | | Name | Description | Value |
| ------------------------------------ | --------------------------------------------------------------------------- | ----------------- | | -------------------------- | --------------------------------------------------- | ----------------- |
| `ingress.enabled` | Enable ingress | `false` | | `ingress.enabled` | Enable ingress | `false` |
| `ingress.className` | Ingress class name | `nil` | | `ingress.className` | DEPRECATED: Use `ingress.ingressClassName` instead. | `""` |
| `ingress.annotations` | Ingress annotations | `{}` | | `ingress.ingressClassName` | Ingress class name | `""` |
| `ingress.hosts[0].host` | Default Ingress host | `git.example.com` | | `ingress.pathType` | Ingress Path Type | `Prefix` |
| `ingress.hosts[0].paths[0].path` | Default Ingress path | `/` | | `ingress.annotations` | Ingress annotations | `{}` |
| `ingress.hosts[0].paths[0].pathType` | Ingress path type | `Prefix` | | `ingress.hosts[0].host` | Default Ingress host | `git.example.com` |
| `ingress.tls` | Ingress tls settings | `[]` | | `ingress.hosts[0].paths` | Default Ingress path | `[]` |
| `ingress.apiVersion` | Specify APIVersion of ingress object. Mostly would only be used for argocd. | | | `ingress.tls` | Ingress tls settings | `[]` |
### deployment ### deployment

View File

@ -401,6 +401,32 @@ https
{{ .Values.serviceAccount.name | default (include "gitea.fullname" .) }} {{ .Values.serviceAccount.name | default (include "gitea.fullname" .) }}
{{- end -}} {{- end -}}
{{- define "ingress.annotations" -}}
{{- if .Values.ingress.annotations }}
annotations:
{{- $tp := typeOf .Values.ingress.annotations }}
{{- if eq $tp "string" }}
{{- tpl .Values.ingress.annotations . | nindent 4 }}
{{- else }}
{{- toYaml .Values.ingress.annotations | nindent 4 }}
{{- end }}
{{- end }}
{{- end -}}
{{- define "ingress.ingressClassName" -}}
{{- if ne .Values.ingress.className "" -}}
# WARNING: 'ingress.className' is deprecated and will be removed in a future release. Use 'ingress.ingressClassName' instead."
{{ end -}}
{{- if and (ne .Values.ingress.className "" ) (ne .Values.ingress.ingressClassName "") -}}
{{- fail "ingress.ingressClassName and ingress.className cannot be defined at the same time. Please only choose one." -}}
{{- end -}}
{{- if ne .Values.ingress.className "" -}}
ingressClassName: {{ tpl .Values.ingress.className . }}
{{- else if ne .Values.ingress.ingressClassName "" -}}
ingressClassName: {{ tpl .Values.ingress.ingressClassName . }}
{{- end -}}
{{- end -}}
{{- define "gitea.admin.passwordMode" -}} {{- define "gitea.admin.passwordMode" -}}
{{- if has .Values.gitea.admin.passwordMode (tuple "keepUpdated" "initialOnlyNoReset" "initialOnlyRequireReset") -}} {{- if has .Values.gitea.admin.passwordMode (tuple "keepUpdated" "initialOnlyNoReset" "initialOnlyRequireReset") -}}
{{ .Values.gitea.admin.passwordMode }} {{ .Values.gitea.admin.passwordMode }}

View File

@ -1,28 +1,16 @@
{{- if .Values.ingress.enabled -}} {{- if .Values.ingress.enabled -}}
{{- $fullName := include "gitea.fullname" . -}} {{- $fullName := include "gitea.fullname" . -}}
{{- $httpPort := .Values.service.http.port -}} {{- $httpPort := .Values.service.http.port -}}
{{- $apiVersion := "extensions/v1beta1" -}} {{- $pathType := .Values.ingress.pathType -}}
{{- if .Values.ingress.apiVersion -}} apiVersion: networking.k8s.io/v1
{{- $apiVersion = .Values.ingress.apiVersion -}}
{{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1/Ingress" -}}
{{- $apiVersion = "networking.k8s.io/v1" }}
{{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1/Ingress" -}}
{{- $apiVersion = "networking.k8s.io/v1beta1" }}
{{- end }}
apiVersion: {{ $apiVersion }}
kind: Ingress kind: Ingress
metadata: metadata:
name: {{ $fullName }} name: {{ $fullName }}
labels: labels:
{{- include "gitea.labels" . | nindent 4 }} {{- include "gitea.labels" . | nindent 4 }}
annotations: {{- template "ingress.annotations" . }}
{{- range $key, $value := .Values.ingress.annotations }}
{{ $key }}: {{ $value | quote }}
{{- end }}
spec: spec:
{{- if .Values.ingress.className }} {{- include "ingress.ingressClassName" . | nindent 2 }}
ingressClassName: {{ tpl .Values.ingress.className . }}
{{- end }}
{{- if .Values.ingress.tls }} {{- if .Values.ingress.tls }}
tls: tls:
{{- range .Values.ingress.tls }} {{- range .Values.ingress.tls }}
@ -38,21 +26,14 @@ spec:
- host: {{ tpl .host $ | quote }} - host: {{ tpl .host $ | quote }}
http: http:
paths: paths:
{{- range .paths }} {{- range (.paths | default (list "/")) }}
- path: {{ .path }} - path: {{ . }}
{{- if and .pathType (eq $apiVersion "networking.k8s.io/v1") }} pathType: {{ $pathType }}
pathType: {{ .pathType }}
{{- end }}
backend: backend:
{{- if eq $apiVersion "networking.k8s.io/v1" }}
service: service:
name: {{ $fullName }}-http name: {{ $fullName }}-http
port: port:
number: {{ $httpPort }} number: {{ $httpPort }}
{{- else }}
serviceName: {{ $fullName }}-http
servicePort: {{ $httpPort }}
{{- end }}
{{- end }} {{- end }}
{{- end }} {{- end }}
{{- end }} {{- end }}

View File

@ -0,0 +1,93 @@
suite: Test ingress.yaml
templates:
- templates/gitea/ingress.yaml
tests:
- it: should enable ingress when ingress.enabled is true
set:
ingress.enabled: true
ingress.apiVersion: networking.k8s.io/v1
ingress.annotations:
kubernetes.io/ingress.class: nginx
ingress.className: nginx
ingress.tls:
- hosts:
- example.com
secretName: tls-secret
ingress.hosts:
- host: example.com
paths: ["/"]
asserts:
- hasDocuments:
count: 1
- isKind:
of: Ingress
- equal:
path: metadata.name
value: RELEASE-NAME-gitea
- matchRegex:
path: apiVersion
pattern: networking.k8s.io/v1
- equal:
path: spec.ingressClassName
value: nginx
- equal:
path: spec.rules[0].host
value: "example.com"
- equal:
path: spec.tls[0].hosts[0]
value: "example.com"
- equal:
path: spec.tls[0].secretName
value: tls-secret
- equal:
path: metadata.annotations["kubernetes.io/ingress.class"]
value: nginx
- it: should not create ingress when ingress.enabled is false
set:
ingress.enabled: false
asserts:
- hasDocuments:
count: 0
- it: Ingress Class using TPL
set:
global.ingress.className: "ingress-class"
ingress.ingressClassName: "{{ .Values.global.ingress.className }}"
ingress.enabled: true
ingress.hosts[0].host: "some-host"
ingress.tls:
- secretName: gitea-tls
hosts:
- "some-host"
asserts:
- isKind:
of: Ingress
- equal:
path: spec.tls[0].hosts[0]
value: "some-host"
- equal:
path: spec.rules[0].host
value: "some-host"
- equal:
path: spec.ingressClassName
value: "ingress-class"
- it: hostname using TPL
set:
global.giteaHostName: "gitea.example.com"
ingress.enabled: true
ingress.hosts[0].host: "{{ .Values.global.giteaHostName }}"
ingress.tls:
- secretName: gitea-tls
hosts:
- "{{ .Values.global.giteaHostName }}"
asserts:
- isKind:
of: Ingress
- equal:
path: spec.tls[0].hosts[0]
value: "gitea.example.com"
- equal:
path: spec.rules[0].host
value: "gitea.example.com"

View File

@ -0,0 +1,34 @@
suite: Test ingress.yaml
templates:
- templates/gitea/ingress.yaml
tests:
- it: should fail when both ingress.className and ingress.ingressClassName are defined
template: templates/gitea/ingress.yaml
set:
ingress:
enabled: true
className: ingress-class
ingressClassName: ingress-class
asserts:
- failedTemplate:
errorMessage: "ingress.ingressClassName and ingress.className cannot be defined at the same time. Please only choose one."
- it: should succeed when only ingress.className is defined
template: templates/gitea/ingress.yaml
set:
ingress.enabled: true
ingress.className: "ingress-class"
asserts:
- equal:
path: spec.ingressClassName
value: ingress-class
- it: should succeed when only ingress.ingressClassName is defined
template: templates/gitea/ingress.yaml
set:
ingress.enabled: true
ingress.ingressClassName: "ingress-class"
asserts:
- equal:
path: spec.ingressClassName
value: ingress-class

View File

@ -1,28 +1,7 @@
suite: ingress template suite: Test ingress tpl use
release:
name: gitea-unittests
namespace: testing
templates: templates:
- templates/gitea/ingress.yaml - templates/gitea/ingress.yaml
tests: tests:
- it: hostname using TPL
set:
global.giteaHostName: "gitea.example.com"
ingress.enabled: true
ingress.hosts[0].host: "{{ .Values.global.giteaHostName }}"
ingress.tls:
- secretName: gitea-tls
hosts:
- "{{ .Values.global.giteaHostName }}"
asserts:
- isKind:
of: Ingress
- equal:
path: spec.tls[0].hosts[0]
value: "gitea.example.com"
- equal:
path: spec.rules[0].host
value: "gitea.example.com"
- it: Ingress Class using TPL - it: Ingress Class using TPL
set: set:
global.ingress.className: "ingress-class" global.ingress.className: "ingress-class"
@ -45,3 +24,22 @@ tests:
- equal: - equal:
path: spec.ingressClassName path: spec.ingressClassName
value: "ingress-class" value: "ingress-class"
- it: hostname using TPL
set:
global.giteaHostName: "gitea.example.com"
ingress.enabled: true
ingress.hosts[0].host: "{{ .Values.global.giteaHostName }}"
ingress.tls:
- secretName: gitea-tls
hosts:
- "{{ .Values.global.giteaHostName }}"
asserts:
- isKind:
of: Ingress
- equal:
path: spec.tls[0].hosts[0]
value: "gitea.example.com"
- equal:
path: spec.rules[0].host
value: "gitea.example.com"

View File

@ -154,33 +154,28 @@ service:
## @section Ingress ## @section Ingress
## @param ingress.enabled Enable ingress ## @param ingress.enabled Enable ingress
## @param ingress.className Ingress class name ## @param ingress.className DEPRECATED: Use `ingress.ingressClassName` instead.
## @param ingress.ingressClassName Ingress class name
## @param ingress.pathType Ingress Path Type
## @param ingress.annotations Ingress annotations ## @param ingress.annotations Ingress annotations
## @param ingress.hosts[0].host Default Ingress host ## @param ingress.hosts[0].host Default Ingress host
## @param ingress.hosts[0].paths[0].path Default Ingress path ## @param ingress.hosts[0].paths Default Ingress path
## @param ingress.hosts[0].paths[0].pathType Ingress path type
## @param ingress.tls Ingress tls settings ## @param ingress.tls Ingress tls settings
## @extra ingress.apiVersion Specify APIVersion of ingress object. Mostly would only be used for argocd.
ingress: ingress:
enabled: false enabled: false
# className: nginx # DEPRECATED: Use `ingress.ingressClassName` instead.
className: className: ""
annotations: ingressClassName: ""
{} pathType: Prefix
# kubernetes.io/ingress.class: nginx annotations: {}
# kubernetes.io/tls-acme: "true" # kubernetes.io/tls-acme: "true"
hosts: hosts:
- host: git.example.com - host: git.example.com
paths: paths: []
- path: /
pathType: Prefix
tls: [] tls: []
# - secretName: chart-example-tls # - secretName: chart-example-tls
# hosts: # hosts:
# - git.example.com # - git.example.com
# Mostly for argocd or any other CI that uses `helm template | kubectl apply` or similar
# If helm doesn't correctly detect your ingress API version you can set it here.
# apiVersion: networking.k8s.io/v1
## @section deployment ## @section deployment
# #