first commit
This commit is contained in:
20
Chart.yaml
Normal file
20
Chart.yaml
Normal file
@@ -0,0 +1,20 @@
|
||||
apiVersion: v2
|
||||
appVersion: v1.0.1
|
||||
description: An e-mail testing tool for developers
|
||||
home: http://iankent.uk/project/mailhog/
|
||||
icon: https://raw.githubusercontent.com/mailhog/MailHog-UI/master/assets/images/hog.png
|
||||
keywords:
|
||||
- mailhog
|
||||
- mail
|
||||
- smtp
|
||||
- email
|
||||
- e-mail
|
||||
- testing
|
||||
maintainers:
|
||||
- email: unguiculus@gmail.com
|
||||
name: unguiculus
|
||||
name: mailhog
|
||||
sources:
|
||||
- https://github.com/mailhog/MailHog
|
||||
type: application
|
||||
version: 5.2.3
|
||||
26
Jenkinsfile
vendored
Normal file
26
Jenkinsfile
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
pipeline {
|
||||
agent any
|
||||
|
||||
stages {
|
||||
stage('Build') {
|
||||
steps {
|
||||
echo 'Building..'
|
||||
echo sh(script: 'env|sort', returnStdout: true)
|
||||
echo "${GIT_URL}"
|
||||
checkout scmGit(branches: [[name: '*/main']], extensions: [], gitTool: 'Default', userRemoteConfigs: [[credentialsId: '0a6bde36-8857-4631-bbf8-68b44626eb27', url: "${GIT_URL}"]])
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
stage('Test') {
|
||||
steps {
|
||||
echo 'Testing..'
|
||||
}
|
||||
}
|
||||
stage('Deploy') {
|
||||
steps {
|
||||
echo 'Deploying....'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
119
README.md
Normal file
119
README.md
Normal file
@@ -0,0 +1,119 @@
|
||||
# Mailhog
|
||||
|
||||
[Mailhog](http://iankent.uk/project/mailhog/) is an e-mail testing tool for developers.
|
||||
|
||||
## TL;DR;
|
||||
|
||||
```bash
|
||||
$ helm repo add codecentric https://codecentric.github.io/helm-charts
|
||||
$ helm install mailhog codecentric/mailhog
|
||||
```
|
||||
|
||||
## Introduction
|
||||
|
||||
This chart creates a [Mailhog](http://iankent.uk/project/mailhog/) deployment on a [Kubernetes](http://kubernetes.io)
|
||||
cluster using the [Helm](https://helm.sh) package manager.
|
||||
|
||||
## Installing the Chart
|
||||
|
||||
To install the chart with the release name `mailhog`:
|
||||
|
||||
```bash
|
||||
$ helm install mailhog codecentric/mailhog
|
||||
```
|
||||
|
||||
The command deploys Mailhog on the Kubernetes cluster in the default configuration. The [configuration](#configuration)
|
||||
section lists the parameters that can be configured during installation.
|
||||
|
||||
## Uninstalling the Chart
|
||||
|
||||
To uninstall/delete the `mailhog` deployment:
|
||||
|
||||
```bash
|
||||
$ helm uninstall mailhog
|
||||
```
|
||||
The command removes all the Kubernetes components associated with the chart and deletes the release.
|
||||
|
||||
## Configuration
|
||||
|
||||
The following table lists the configurable parameters of the Mailhog chart and their default values.
|
||||
|
||||
Parameter | Description | Default
|
||||
--- | --- | ---
|
||||
`extraContainers` | Additional containers to be added to the application pod | `[]`
|
||||
`image.repository` | Docker image repository | `mailhog/mailhog`
|
||||
`image.tag` | Docker image tag whose default is the chart version | `""`
|
||||
`image.pullPolicy` | Docker image pull policy | `IfNotPresent`
|
||||
`imagePullSecrets` | Docker image pull secrets | `[]`
|
||||
`auth.enabled` | Specifies whether basic authentication is enabled, see [Auth.md](https://github.com/mailhog/MailHog/blob/master/docs/Auth.md) | `false`
|
||||
`auth.existingSecret` | If auth is enabled, uses an existing secret with this name; otherwise a secret is created | `""`
|
||||
`auth.fileName` | The name of the auth file | `auth.txt`
|
||||
`auth.fileContents` | The contents of the auth file | `""`
|
||||
`affinity` | Node affinity for pod assignment | `{}`
|
||||
`containerPort.http.name` | Configure the Http name of the Mailhog container | `http`
|
||||
`containerPort.http.port` | Configure the Http port of the Mailhog container | `8025`
|
||||
`containerPort.smtp.name` | Configure the Smtp name of the Mailhog container | `tcp-smtp`
|
||||
`containerPort.smtp.port` | Configure the Smtp port of the Mailhog container | `1025`
|
||||
`nodeSelector` | Node labels for pod assignment | `{}`
|
||||
`podReplicas` | The number of pod replicas | `1`
|
||||
`podAnnotations` | Extra annotations to add to pod | `{}`
|
||||
`podLabels` | Extra labels to add to pod | `{}`
|
||||
`resources` | Pod resource requests and limits | `{}`
|
||||
`tolerations` | Node taints to tolerate | `[]`
|
||||
`priorityClassName` | Name of the existing priority class to be used by Mailhog pod, priority class needs to be created beforehand | `""`
|
||||
`livenessProbe` | The Liveness Probe to add to pod | `{ "initialDelaySeconds": 10, "tcpPort": { "port": "1025" }, "timeoutSeconds": 1 }`
|
||||
`readinessProbe` | The Readiness Probe to add to pod | `{"tcpPort": { "port": "1025" }`
|
||||
`serviceAccount.create` | Specifies whether a ServiceAccount should be created | `true` |
|
||||
`serviceAccount.name` | The name of the service account to use. If not set and create is true, a name is generated using the fullname template | `""` |
|
||||
`serviceAccount.imagePullSecrets` | Image pull secrets that are attached to the ServiceAccount | `[]` |
|
||||
`automountServiceAccountToken` | Indicates whether the service account token should be automatically mounted | `false` |
|
||||
`service.annotations` | Annotations for the service | `{}`
|
||||
`service.clusterIP` | Internal cluster service IP | `""`
|
||||
`service.externalIPs` | Service external IP addresses | `[]`
|
||||
`service.extraPorts` | Additional ports to the service | `[]`
|
||||
`service.loadBalancerIP` | IP address to assign to load balancer (if supported) | `""`
|
||||
`service.loadBalancerSourceRanges` | List of IP CIDRs allowed access to load balancer (if supported) | `[]`
|
||||
`service.type` | Type of service to create | `ClusterIP`
|
||||
`service.namedTargetPort` | Use named target port for service | `true`
|
||||
`service.port.http` | HTTP port of service | `""`
|
||||
`service.port.smtp` | SMTP port of service | `""`
|
||||
`service.nodePort.http` | If `service.type` is `NodePort` and this is non-empty, sets the http node port of the service | `""`
|
||||
`service.nodePort.smtp` | If `service.type` is `NodePort` and this is non-empty, sets the smtp node port of the service | `""`
|
||||
`securityContext` | Pod security context | `{ runAsUser: 1000, fsGroup: 1000, runAsNonRoot: true }`
|
||||
`ingress.enabled` | If `true`, an ingress is created | `false`
|
||||
`ingress.ingressClassName` | If set the created Ingress resource will have this class name. kubernetes.io/ingress.class is [deprecated](https://kubernetes.io/docs/concepts/services-networking/ingress/#deprecated-annotation) | `nil`
|
||||
`ingress.annotations` | Annotations for the ingress | `{}`
|
||||
`ingress.labels` | Labels for the ingress | `{}`
|
||||
`ingress.hosts` | A list of ingress hosts | `{ host: mailhog.example.com, paths: [{ path: "/", pathType: Prefix }] }`
|
||||
`ingress.tls` | A list of [IngressTLS](https://v1-8.docs.kubernetes.io/docs/api-reference/v1.8/#ingresstls-v1beta1-extensions) items | `[]`
|
||||
`extraEnv` | Additional environment variables, see [CONFIG.md](https://github.com/mailhog/MailHog/blob/master/docs/CONFIG.md) | `{}`
|
||||
|
||||
## Upgrading
|
||||
|
||||
### From chart < 5.0.0
|
||||
|
||||
Ingress path definitions are extended to describe path and pathType. Previously only the path was configured. Please adapt your configuration as shown below:
|
||||
|
||||
Old:
|
||||
```yaml
|
||||
ingress:
|
||||
# ...
|
||||
hosts:
|
||||
- host: mailhog.example.com
|
||||
# Paths for the host
|
||||
paths:
|
||||
- /
|
||||
```
|
||||
New:
|
||||
```yaml
|
||||
ingress:
|
||||
# ...
|
||||
hosts:
|
||||
- host: mailhog.example.com
|
||||
# Paths for the host
|
||||
paths:
|
||||
- path: /
|
||||
pathType: Prefix
|
||||
```
|
||||
|
||||
This allows to configure specific `pathType` configurations, e.g. `pathType: ImplementationSpecific` for [GKE Ingress on Google Cloud Platform](https://cloud.google.com/kubernetes-engine/docs/concepts/ingress#default_backend).
|
||||
13
ci/ingress-values.yaml
Normal file
13
ci/ingress-values.yaml
Normal file
@@ -0,0 +1,13 @@
|
||||
ingress:
|
||||
enabled: true
|
||||
annotations:
|
||||
test-annotation1: annotationValue1
|
||||
test-annotation2: annotationValue2
|
||||
labels:
|
||||
test-label1: labelValue1
|
||||
test-label2: labelValue2
|
||||
hosts:
|
||||
- host: mailhog.example.com
|
||||
paths:
|
||||
- path: "/"
|
||||
pathType: Prefix
|
||||
16
templates/NOTES.txt
Normal file
16
templates/NOTES.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
Mailhog can be accessed via ports {{ .Values.service.port.http }} (HTTP) and {{ .Values.service.port.smtp }} (SMTP) on the following DNS name from within your cluster:
|
||||
{{ include "mailhog.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local
|
||||
|
||||
If you'd like to test your instance, forward the ports locally:
|
||||
|
||||
Web UI:
|
||||
=======
|
||||
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "mailhog.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
kubectl port-forward --namespace {{ .Release.Namespace }} $POD_NAME 8025
|
||||
|
||||
SMTP Server:
|
||||
============
|
||||
|
||||
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "mailhog.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
|
||||
kubectl port-forward --namespace {{ .Release.Namespace }} $POD_NAME 1025
|
||||
83
templates/_helpers.tpl
Normal file
83
templates/_helpers.tpl
Normal file
@@ -0,0 +1,83 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "mailhog.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified app name.
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||
If release name contains chart name it will be used as a full name.
|
||||
*/}}
|
||||
{{- define "mailhog.fullname" -}}
|
||||
{{- if .Values.fullnameOverride -}}
|
||||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||
{{- if contains $name .Release.Name -}}
|
||||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create chart name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "mailhog.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Common labels
|
||||
*/}}
|
||||
{{- define "mailhog.labels" -}}
|
||||
helm.sh/chart: {{ include "mailhog.chart" . }}
|
||||
{{ include "mailhog.selectorLabels" . }}
|
||||
app.kubernetes.io/version: {{ .Values.image.tag | default .Chart.AppVersion | quote }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Selector labels
|
||||
*/}}
|
||||
{{- define "mailhog.selectorLabels" -}}
|
||||
app.kubernetes.io/name: {{ include "mailhog.name" . }}
|
||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create the name of the service account to use
|
||||
*/}}
|
||||
{{- define "mailhog.serviceAccountName" -}}
|
||||
{{- if .Values.serviceAccount.create }}
|
||||
{{- default (include "mailhog.fullname" .) .Values.serviceAccount.name }}
|
||||
{{- else }}
|
||||
{{- default "default" .Values.serviceAccount.name }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Create the name for the auth secret.
|
||||
*/}}
|
||||
{{- define "mailhog.authFileSecret" -}}
|
||||
{{- if .Values.auth.existingSecret -}}
|
||||
{{- .Values.auth.existingSecret -}}
|
||||
{{- else -}}
|
||||
{{- template "mailhog.fullname" . -}}-auth
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create the name for the outgoing-smtp secret.
|
||||
*/}}
|
||||
{{- define "mailhog.outgoingSMTPSecret" -}}
|
||||
{{- if .Values.outgoingSMTP.existingSecret -}}
|
||||
{{- .Values.outgoingSMTP.existingSecret -}}
|
||||
{{- else -}}
|
||||
{{- template "mailhog.fullname" . -}}-outgoing-smtp
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
12
templates/auth-secret.yaml
Normal file
12
templates/auth-secret.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
{{- if and (.Values.auth.enabled) (not .Values.auth.existingSecret) -}}
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "mailhog.labels" . | nindent 4 }}
|
||||
name: {{ template "mailhog.authFileSecret" . }}
|
||||
namespace: {{ .Release.Namespace | quote }}
|
||||
type: Opaque
|
||||
data:
|
||||
{{ .Values.auth.fileName }}: {{ .Values.auth.fileContents | b64enc }}
|
||||
{{- end -}}
|
||||
129
templates/deployment.yaml
Normal file
129
templates/deployment.yaml
Normal file
@@ -0,0 +1,129 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: {{ include "mailhog.fullname" . }}
|
||||
labels:
|
||||
{{- include "mailhog.labels" . | nindent 4 }}
|
||||
namespace: {{ .Release.Namespace | quote }}
|
||||
spec:
|
||||
replicas: {{ .Values.podReplicas }}
|
||||
selector:
|
||||
matchLabels:
|
||||
{{- include "mailhog.selectorLabels" . | nindent 6 }}
|
||||
template:
|
||||
metadata:
|
||||
{{- with .Values.podAnnotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
labels:
|
||||
{{- include "mailhog.selectorLabels" . | nindent 8 }}
|
||||
{{- with .Values.podLabels }}
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
serviceAccountName: {{ include "mailhog.serviceAccountName" . }}
|
||||
automountServiceAccountToken: {{ .Values.automountServiceAccountToken }}
|
||||
{{- with .Values.securityContext }}
|
||||
securityContext:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.imagePullSecrets }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
containers:
|
||||
- name: {{ template "mailhog.name" . }}
|
||||
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
|
||||
imagePullPolicy: "{{ .Values.image.pullPolicy }}"
|
||||
env:
|
||||
{{- $vars := list }}
|
||||
{{- range .Values.extraEnv }}
|
||||
{{- $vars = append $vars .name }}
|
||||
{{- end }}
|
||||
{{- if not (has "MH_HOSTNAME" $vars) }}
|
||||
- name: MH_HOSTNAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.name
|
||||
{{- end }}
|
||||
{{- if .Values.auth.enabled }}
|
||||
- name: MH_AUTH_FILE
|
||||
value: /authdir/{{ .Values.auth.fileName }}
|
||||
{{- end }}
|
||||
{{- if .Values.outgoingSMTP.enabled }}
|
||||
- name: MH_OUTGOING_SMTP
|
||||
value: /config/{{ .Values.outgoingSMTP.fileName }}
|
||||
{{- end }}
|
||||
{{- with .Values.extraEnv }}
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
ports:
|
||||
- name: {{ .Values.containerPort.http.name }}
|
||||
containerPort: {{ .Values.containerPort.http.port }}
|
||||
protocol: TCP
|
||||
- name: {{ .Values.containerPort.smtp.name }}
|
||||
containerPort: {{ .Values.containerPort.smtp.port }}
|
||||
protocol: TCP
|
||||
livenessProbe:
|
||||
tcpSocket:
|
||||
port: {{ .Values.containerPort.smtp.port }}
|
||||
{{- if .Values.livenessProbe }}
|
||||
{{- toYaml .Values.livenessProbe | nindent 12 }}
|
||||
{{- end }}
|
||||
readinessProbe:
|
||||
tcpSocket:
|
||||
port: {{ .Values.containerPort.smtp.port }}
|
||||
{{- if .Values.readinessProbe }}
|
||||
{{- toYaml .Values.readinessProbe | nindent 12 }}
|
||||
{{- end }}
|
||||
{{- if or .Values.auth.enabled .Values.outgoingSMTP.enabled }}
|
||||
volumeMounts:
|
||||
{{- if .Values.auth.enabled }}
|
||||
- name: authdir
|
||||
mountPath: /authdir
|
||||
readOnly: true
|
||||
{{- end }}
|
||||
{{- if .Values.outgoingSMTP.enabled }}
|
||||
- name: outsmtpdir
|
||||
mountPath: /config
|
||||
readOnly: true
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- with .Values.containerSecurityContext }}
|
||||
securityContext:
|
||||
{{- toYaml . | nindent 12 }}
|
||||
{{- end }}
|
||||
resources:
|
||||
{{- toYaml .Values.resources | nindent 12 }}
|
||||
{{- with .Values.extraContainers }}
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.affinity }}
|
||||
affinity:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.nodeSelector }}
|
||||
nodeSelector:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- with .Values.tolerations }}
|
||||
tolerations:
|
||||
{{- toYaml . | nindent 8 }}
|
||||
{{- end }}
|
||||
{{- if or .Values.auth.enabled .Values.outgoingSMTP.enabled }}
|
||||
volumes:
|
||||
{{- if .Values.auth.enabled }}
|
||||
- name: authdir
|
||||
secret:
|
||||
secretName: {{ template "mailhog.authFileSecret" . }}
|
||||
{{- end }}
|
||||
{{- if .Values.outgoingSMTP.enabled }}
|
||||
- name: outsmtpdir
|
||||
secret:
|
||||
secretName: {{ template "mailhog.outgoingSMTPSecret" . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- if .Values.priorityClassName }}
|
||||
priorityClassName: {{ .Values.priorityClassName }}
|
||||
{{- end }}
|
||||
64
templates/ingress.yaml
Normal file
64
templates/ingress.yaml
Normal file
@@ -0,0 +1,64 @@
|
||||
{{- if .Values.ingress.enabled -}}
|
||||
{{- $fullName := include "mailhog.fullname" . -}}
|
||||
{{- $apiV1 := false -}}
|
||||
{{- $apiVersion := "extensions/v1beta1" -}}
|
||||
{{- if and (.Capabilities.APIVersions.Has "networking.k8s.io/v1") (semverCompare ">= v1.19.0-0" .Capabilities.KubeVersion.Version) -}}
|
||||
{{- $apiVersion = "networking.k8s.io/v1" -}}
|
||||
{{- $apiV1 = true -}}
|
||||
{{- else if .Capabilities.APIVersions.Has "networking.k8s.io/v1beta1" -}}
|
||||
{{- $apiVersion = "networking.k8s.io/v1beta1" -}}
|
||||
{{- else -}}
|
||||
{{- $apiVersion = "extensions/v1beta1" -}}
|
||||
{{- end }}
|
||||
apiVersion: {{ $apiVersion }}
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: {{ $fullName }}
|
||||
namespace: {{ .Release.Namespace | quote }}
|
||||
labels:
|
||||
{{- include "mailhog.labels" . | nindent 4 }}
|
||||
{{- with .Values.ingress.labels }}
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- with .Values.ingress.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
spec:
|
||||
{{- if .Values.ingress.ingressClassName }}
|
||||
ingressClassName: {{ .Values.ingress.ingressClassName }}
|
||||
{{- end }}
|
||||
{{- if .Values.ingress.tls }}
|
||||
tls:
|
||||
{{- range .Values.ingress.tls }}
|
||||
- hosts:
|
||||
{{- range .hosts }}
|
||||
- {{ . | quote }}
|
||||
{{- end }}
|
||||
{{- with .secretName }}
|
||||
secretName: {{ . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
rules:
|
||||
{{- range .Values.ingress.hosts }}
|
||||
- host: {{ .host | quote }}
|
||||
http:
|
||||
paths:
|
||||
{{- range .paths }}
|
||||
- path: {{ .path }}
|
||||
{{- if $apiV1 }}
|
||||
pathType: {{ .pathType }}
|
||||
backend:
|
||||
service:
|
||||
name: {{ $fullName }}
|
||||
port:
|
||||
name: http
|
||||
{{- else }}
|
||||
backend:
|
||||
serviceName: {{ $fullName }}
|
||||
servicePort: http
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
49
templates/service.yaml
Normal file
49
templates/service.yaml
Normal file
@@ -0,0 +1,49 @@
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: {{ include "mailhog.fullname" . }}
|
||||
{{- with .Values.service.annotations }}
|
||||
annotations:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
labels:
|
||||
{{- include "mailhog.labels" . | nindent 4 }}
|
||||
namespace: {{ .Release.Namespace | quote }}
|
||||
spec:
|
||||
type: "{{ .Values.service.type }}"
|
||||
{{- with .Values.service.clusterIP }}
|
||||
clusterIP: "{{ . }}"
|
||||
{{- end }}
|
||||
{{- with .Values.service.externalIPs }}
|
||||
externalIPs:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
{{- with .Values.service.loadBalancerIP }}
|
||||
loadBalancerIP: "{{ . }}"
|
||||
{{- end }}
|
||||
{{- with .Values.service.loadBalancerSourceRanges }}
|
||||
loadBalancerSourceRanges:
|
||||
{{- toYaml . | nindent 4 }}
|
||||
{{- end }}
|
||||
ports:
|
||||
{{- $httpPortName := .Values.containerPort.http.name }}
|
||||
{{- $smtpPortName := .Values.containerPort.smtp.name }}
|
||||
- name: {{ $httpPortName }}
|
||||
port: {{ .Values.service.port.http }}
|
||||
protocol: TCP
|
||||
targetPort: {{- if .Values.service.namedTargetPort }} {{ $httpPortName }} {{- else }} {{ .Values.containerPort.http.port }} {{- end }}
|
||||
{{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort.http))) }}
|
||||
nodePort: {{ .Values.service.nodePort.http }}
|
||||
{{- end }}
|
||||
- name: {{ $smtpPortName }}
|
||||
port: {{ .Values.service.port.smtp }}
|
||||
protocol: TCP
|
||||
targetPort: {{- if .Values.service.namedTargetPort }} {{ $smtpPortName }} {{- else }} {{ .Values.containerPort.smtp.port }} {{- end }}
|
||||
{{- if (and (eq .Values.service.type "NodePort") (not (empty .Values.service.nodePort.smtp))) }}
|
||||
nodePort: {{ .Values.service.nodePort.smtp }}
|
||||
{{- end }}
|
||||
{{- if .Values.service.extraPorts }}
|
||||
{{- toYaml .Values.service.extraPorts | nindent 4 }}
|
||||
{{- end }}
|
||||
selector:
|
||||
{{- include "mailhog.selectorLabels" . | nindent 4 }}
|
||||
11
templates/serviceaccount.yaml
Normal file
11
templates/serviceaccount.yaml
Normal file
@@ -0,0 +1,11 @@
|
||||
{{- if .Values.serviceAccount.create -}}
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: {{ include "mailhog.serviceAccountName" . }}
|
||||
labels:
|
||||
{{- include "mailhog.labels" . | nindent 4 }}
|
||||
namespace: {{ .Release.Namespace | quote }}
|
||||
imagePullSecrets:
|
||||
{{- toYaml .Values.serviceAccount.imagePullSecrets | nindent 4 }}
|
||||
{{- end }}
|
||||
12
templates/smtp-secret.yaml
Normal file
12
templates/smtp-secret.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
{{- if and (.Values.outgoingSMTP.enabled) (not .Values.outgoingSMTP.existingSecret) -}}
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
labels:
|
||||
{{- include "mailhog.labels" . | nindent 4 }}
|
||||
name: {{ template "mailhog.outgoingSMTPSecret" . }}
|
||||
namespace: {{ .Release.Namespace | quote }}
|
||||
type: Opaque
|
||||
data:
|
||||
{{ .Values.outgoingSMTP.fileName }}: {{ .Values.outgoingSMTP.fileContents | toJson | b64enc }}
|
||||
{{- end -}}
|
||||
145
values.yaml
Normal file
145
values.yaml
Normal file
@@ -0,0 +1,145 @@
|
||||
image:
|
||||
repository: docker.io/mailhog/mailhog
|
||||
tag: ""
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
imagePullSecrets: []
|
||||
|
||||
extraContainers: []
|
||||
|
||||
nameOverride: ""
|
||||
fullnameOverride: ""
|
||||
|
||||
containerPort:
|
||||
http:
|
||||
name: http
|
||||
port: 8025
|
||||
smtp:
|
||||
name: tcp-smtp
|
||||
port: 1025
|
||||
|
||||
serviceAccount:
|
||||
# Specifies whether a ServiceAccount should be created
|
||||
create: true
|
||||
# The name of the service account to use.
|
||||
# If not set and create is true, a name is generated using the fullname template
|
||||
name: ""
|
||||
# Image pull secrets that are attached to the ServiceAccount
|
||||
imagePullSecrets: []
|
||||
|
||||
automountServiceAccountToken: false
|
||||
|
||||
service:
|
||||
annotations: {}
|
||||
extraPorts: []
|
||||
clusterIP: ""
|
||||
externalIPs: []
|
||||
loadBalancerIP: ""
|
||||
loadBalancerSourceRanges: []
|
||||
type: ClusterIP
|
||||
# Named target ports are not supported by GCE health checks, so when deploying on GKE
|
||||
# and exposing it via GCE ingress, the health checks fail and the load balancer returns a 502.
|
||||
namedTargetPort: true
|
||||
port:
|
||||
http: 8025
|
||||
smtp: 1025
|
||||
nodePort:
|
||||
http: ""
|
||||
smtp:
|
||||
""
|
||||
|
||||
#securityContext:
|
||||
#runAsUser: 1000
|
||||
#runAsGroup: 1000
|
||||
#runAsNonRoot: true
|
||||
#fsGroup: 1000
|
||||
|
||||
containerSecurityContext:
|
||||
readOnlyRootFilesystem: true
|
||||
privileged: false
|
||||
allowPrivilegeEscalation: false
|
||||
capabilities:
|
||||
drop:
|
||||
- ALL
|
||||
|
||||
ingress:
|
||||
enabled: false
|
||||
ingressClassName: openshift-default
|
||||
annotations:
|
||||
kubernetes.io/ingress.class: openshift-default
|
||||
kubernetes.io/tls-acme: "true"
|
||||
cert-manager.io/cluster-issuer: "letsencrypt-dns01-cloudflare"
|
||||
labels: {}
|
||||
hosts:
|
||||
- host: mailhog.apilab.us
|
||||
paths:
|
||||
- path: "/"
|
||||
pathType: Prefix
|
||||
|
||||
tls:
|
||||
- secretName: mailhog-tls
|
||||
hosts:
|
||||
- mailhog.apilab.us
|
||||
|
||||
auth:
|
||||
enabled: false
|
||||
existingSecret: ""
|
||||
fileName: auth.txt
|
||||
fileContents: ""
|
||||
|
||||
# JSON file defining outgoing SMTP servers
|
||||
outgoingSMTP:
|
||||
enabled: false
|
||||
existingSecret: ""
|
||||
fileName: outgoing-smtp.json
|
||||
fileContents: {}
|
||||
# See https://github.com/mailhog/MailHog/blob/master/docs/CONFIG.md#outgoing-smtp-configuration
|
||||
# Only name, host and port are required.
|
||||
#
|
||||
# server_name1:
|
||||
# name: "server_name1"
|
||||
# host: "mail.example.com"
|
||||
# port: "25" # NOTE: go requires this port number to be a string... otherwise the container won't start
|
||||
# email: ""
|
||||
# username: ""
|
||||
# password: ""
|
||||
# mechanism: "PLAIN|CRAM-MD5"
|
||||
# server_name2:
|
||||
# name: "server_name2"
|
||||
# host: "mail2.example.com"
|
||||
# port: "587" # NOTE: go requires this port number to be a string... otherwise the container won't start
|
||||
|
||||
podReplicas: 1
|
||||
|
||||
podAnnotations: {}
|
||||
|
||||
podLabels: {}
|
||||
|
||||
extraEnv: []
|
||||
|
||||
# ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#configure-probes
|
||||
livenessProbe:
|
||||
initialDelaySeconds: 10
|
||||
timeoutSeconds: 1
|
||||
|
||||
readinessProbe: {}
|
||||
|
||||
resources: {}
|
||||
# We usually recommend not to specify default resources and to leave this as a conscious
|
||||
# choice for the user. This also increases chances charts run on environments with little
|
||||
# resources, such as Minikube. If you do want to specify resources, uncomment the following
|
||||
# lines, adjust them as necessary, and remove the curly braces after 'resources:'.
|
||||
# limits:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
# requests:
|
||||
# cpu: 100m
|
||||
# memory: 128Mi
|
||||
|
||||
affinity: {}
|
||||
|
||||
nodeSelector: {}
|
||||
|
||||
tolerations: []
|
||||
|
||||
priorityClassName:
|
||||
12
wildcart-cert.yaml
Normal file
12
wildcart-cert.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
apiVersion: cert-manager.io/v1
|
||||
kind: Certificate
|
||||
metadata:
|
||||
name: apilab-wildcard
|
||||
namespace: authentik # keep it with authentik if that's controlling your routes
|
||||
spec:
|
||||
secretName: apilab-wildcard-tls # <— single secret for all apps
|
||||
issuerRef:
|
||||
kind: ClusterIssuer
|
||||
name: letsencrypt-dns01-cloudflare
|
||||
dnsNames:
|
||||
- "*.apilab.us"
|
||||
Reference in New Issue
Block a user