You've already forked reposilite-charts
feat(prometheus): add podMonitor and serviceMonitor
This patch adds Prometheus podMonitor and serviceMonitor.
This commit is contained in:
@@ -17,6 +17,20 @@
|
|||||||
{{- if .Values.persistentVolumeClaim.enabled }}
|
{{- if .Values.persistentVolumeClaim.enabled }}
|
||||||
{{- $env = concat $env (list (dict "name" "REPOSILITE_DATA" "value" .Values.persistentVolumeClaim.path )) }}
|
{{- $env = concat $env (list (dict "name" "REPOSILITE_DATA" "value" .Values.persistentVolumeClaim.path )) }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if eq (include "reposilite.podMonitor.enabled" $) "true" }}
|
||||||
|
{{- $env = concat $env (list (dict "name" "REPOSILITE_PROMETHEUS_PATH" "value" .Values.prometheus.metrics.podMonitor.path )) }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if eq (include "reposilite.serviceMonitor.enabled" $) "true" }}
|
||||||
|
{{- $env = concat $env (list (dict "name" "REPOSILITE_PROMETHEUS_PATH" "value" .Values.prometheus.metrics.serviceMonitor.path )) }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- if or (eq (include "reposilite.podMonitor.enabled" $ ) "true") (eq (include "reposilite.serviceMonitor.enabled" $ ) "true") -}}
|
||||||
|
{{- $env = concat $env (list (dict "name" "REPOSILITE_PROMETHEUS_USER" "valueFrom" (dict "secretKeyRef" (dict "name" (include "reposilite.secrets.prometheusBasicAuth.name" $) "key" "username")))) }}
|
||||||
|
{{- $env = concat $env (list (dict "name" "REPOSILITE_PROMETHEUS_PASSWORD" "valueFrom" (dict "secretKeyRef" (dict "name" (include "reposilite.secrets.prometheusBasicAuth.name" $) "key" "password")))) }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
{{ toYaml (dict "env" $env) }}
|
{{ toYaml (dict "env" $env) }}
|
||||||
{{- end -}}
|
{{- end -}}
|
||||||
|
|
||||||
|
@@ -4,6 +4,9 @@
|
|||||||
|
|
||||||
{{- define "reposilite.pod.annotations" -}}
|
{{- define "reposilite.pod.annotations" -}}
|
||||||
{{ include "reposilite.annotations" . }}
|
{{ include "reposilite.annotations" . }}
|
||||||
|
{{- if .Values.prometheus.metrics.enabled -}}
|
||||||
|
{{- printf "checksum/secret-%s: %s" (include "reposilite.secrets.prometheusBasicAuth.name" $) (include (print $.Template.BasePath "/secretPrometheusBasicAuth.yaml") . | sha256sum) }}
|
||||||
|
{{- end -}}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
{{/* labels */}}
|
{{/* labels */}}
|
||||||
|
27
templates/_podMonitors.tpl
Normal file
27
templates/_podMonitors.tpl
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{{/* vim: set filetype=mustache: */}}
|
||||||
|
|
||||||
|
{{/* annotations */}}
|
||||||
|
{{- define "reposilite.podMonitor.annotations" -}}
|
||||||
|
{{ include "reposilite.annotations" . }}
|
||||||
|
{{- if .Values.prometheus.metrics.podMonitor.annotations }}
|
||||||
|
{{ toYaml .Values.prometheus.metrics.podMonitor.annotations }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* enabled */}}
|
||||||
|
{{- define "reposilite.podMonitor.enabled" -}}
|
||||||
|
{{- if and .Values.prometheus.metrics.enabled .Values.prometheus.metrics.podMonitor.enabled (not .Values.prometheus.metrics.serviceMonitor.enabled) -}}
|
||||||
|
true
|
||||||
|
{{- else -}}
|
||||||
|
false
|
||||||
|
{{- end -}}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* labels */}}
|
||||||
|
|
||||||
|
{{- define "reposilite.podMonitor.labels" -}}
|
||||||
|
{{ include "reposilite.labels" . }}
|
||||||
|
{{- if .Values.prometheus.metrics.podMonitor.labels }}
|
||||||
|
{{ toYaml .Values.prometheus.metrics.podMonitor.labels }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
19
templates/_secrets.tpl
Normal file
19
templates/_secrets.tpl
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{{/* vim: set filetype=mustache: */}}
|
||||||
|
|
||||||
|
{{/* annotations */}}
|
||||||
|
|
||||||
|
{{- define "reposilite.secrets.prometheusBasicAuth.annotations" -}}
|
||||||
|
{{ include "reposilite.annotations" . }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* labels */}}
|
||||||
|
|
||||||
|
{{- define "reposilite.secrets.prometheusBasicAuth.labels" -}}
|
||||||
|
{{ include "reposilite.labels" . }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* names */}}
|
||||||
|
|
||||||
|
{{- define "reposilite.secrets.prometheusBasicAuth.name" -}}
|
||||||
|
{{ include "reposilite.fullname" . }}-basic-auth-credentials
|
||||||
|
{{- end -}}
|
35
templates/_serviceMonitors.tpl
Normal file
35
templates/_serviceMonitors.tpl
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{{/* vim: set filetype=mustache: */}}
|
||||||
|
|
||||||
|
{{/* annotations */}}
|
||||||
|
|
||||||
|
{{- define "reposilite.serviceMonitor.annotations" -}}
|
||||||
|
{{ include "reposilite.annotations" . }}
|
||||||
|
{{- if .Values.prometheus.metrics.serviceMonitor.annotations }}
|
||||||
|
{{ toYaml .Values.prometheus.metrics.serviceMonitor.annotations }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* enabled */}}
|
||||||
|
|
||||||
|
{{- define "reposilite.serviceMonitor.enabled" -}}
|
||||||
|
{{- if and .Values.prometheus.metrics.enabled (not .Values.prometheus.metrics.podMonitor.enabled) .Values.prometheus.metrics.serviceMonitor.enabled .Values.service.enabled -}}
|
||||||
|
true
|
||||||
|
{{- else -}}
|
||||||
|
false
|
||||||
|
{{- end -}}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/* labels */}}
|
||||||
|
|
||||||
|
{{- define "reposilite.serviceMonitor.labels" -}}
|
||||||
|
{{ include "reposilite.labels" . }}
|
||||||
|
{{- if .Values.prometheus.metrics.serviceMonitor.labels }}
|
||||||
|
{{ toYaml .Values.prometheus.metrics.serviceMonitor.labels }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{- define "reposilite.serviceMonitor.selectorLabels" -}}
|
||||||
|
{{ include "reposilite.selectorLabels" . }}
|
||||||
|
{{/* Add label to select the correct service via `selector.matchLabels` of the serviceMonitor resource. */}}
|
||||||
|
app.kubernetes.io/service-name: http
|
||||||
|
{{- end }}
|
@@ -7,6 +7,8 @@
|
|||||||
{{- if .Values.service.annotations }}
|
{{- if .Values.service.annotations }}
|
||||||
{{ toYaml .Values.service.annotations }}
|
{{ toYaml .Values.service.annotations }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
{{/* Add label to select the correct service via `selector.matchLabels` of the serviceMonitor resource. */}}
|
||||||
|
app.kubernetes.io/service-name: http
|
||||||
{{- end }}
|
{{- end }}
|
||||||
|
|
||||||
{{/* labels */}}
|
{{/* labels */}}
|
||||||
|
@@ -68,7 +68,10 @@ spec:
|
|||||||
name: reposilite
|
name: reposilite
|
||||||
ports:
|
ports:
|
||||||
- name: http
|
- name: http
|
||||||
containerPort: {{ .Values.service.port }}
|
containerPort: 8080
|
||||||
|
protocol: TCP
|
||||||
|
- name: https
|
||||||
|
containerPort: 8443
|
||||||
protocol: TCP
|
protocol: TCP
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
tcpSocket:
|
tcpSocket:
|
||||||
|
43
templates/podMonitor.yaml
Normal file
43
templates/podMonitor.yaml
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{{- if eq (include "reposilite.podMonitor.enabled" $) "true" }}
|
||||||
|
---
|
||||||
|
apiVersion: monitoring.coreos.com/v1
|
||||||
|
kind: PodMonitor
|
||||||
|
metadata:
|
||||||
|
{{- with (include "reposilite.podMonitor.annotations" . | fromYaml) }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with (include "reposilite.podMonitor.labels" . | fromYaml) }}
|
||||||
|
labels:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ include "reposilite.fullname" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
spec:
|
||||||
|
podMetricsEndpoints:
|
||||||
|
- basicAuth:
|
||||||
|
password:
|
||||||
|
key: password
|
||||||
|
name: {{ include "reposilite.secrets.prometheusBasicAuth.name" . }}
|
||||||
|
username:
|
||||||
|
key: username
|
||||||
|
name: {{ include "reposilite.secrets.prometheusBasicAuth.name" . }}
|
||||||
|
enableHttp2: {{ required "The enableHttp2 option of the podMonitor is not defined!" .Values.prometheus.metrics.podMonitor.enableHttp2 }}
|
||||||
|
followRedirects: {{ required "The followRedirects option of the podMonitor is not defined!" .Values.prometheus.metrics.podMonitor.followRedirects }}
|
||||||
|
honorLabels: {{ required "The honorLabels option of the podMonitor is not defined!" .Values.prometheus.metrics.podMonitor.honorLabels }}
|
||||||
|
interval: {{ required "The scrape interval of the podMonitor is not defined!" .Values.prometheus.metrics.podMonitor.interval }}
|
||||||
|
path: {{ required "The metric path of the podMonitor is not defined!" .Values.prometheus.metrics.podMonitor.path }}
|
||||||
|
port: "8080"
|
||||||
|
{{- with .Values.prometheus.metrics.podMonitor.relabelings }}
|
||||||
|
relabelings:
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
scrapeTimeout: {{ required "The scrape timeout of the podMonitor is not defined!" .Values.prometheus.metrics.podMonitor.scrapeTimeout }}
|
||||||
|
scheme: http
|
||||||
|
namespaceSelector:
|
||||||
|
matchNames:
|
||||||
|
- {{ .Release.Namespace }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "reposilite.pod.selectorLabels" . | nindent 6 }}
|
||||||
|
{{- end }}
|
19
templates/secretPrometheusBasicAuth.yaml
Normal file
19
templates/secretPrometheusBasicAuth.yaml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{{- if .Values.prometheus.metrics.enabled }}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
{{- with (include "reposilite.secrets.prometheusBasicAuth.annotations" . | fromYaml) }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with (include "reposilite.secrets.prometheusBasicAuth.labels" . | fromYaml) }}
|
||||||
|
labels:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ include "reposilite.secrets.prometheusBasicAuth.name" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
stringData:
|
||||||
|
password: {{ default (randAlphaNum 16) .Values.prometheus.metrics.basicAuthPassword }}
|
||||||
|
username: {{ default (randAlphaNum 16) .Values.prometheus.metrics.basicAuthUsername }}
|
||||||
|
{{- end }}
|
@@ -43,7 +43,7 @@ spec:
|
|||||||
{{- end }}
|
{{- end }}
|
||||||
{{- end }}
|
{{- end }}
|
||||||
ports:
|
ports:
|
||||||
- name: http
|
- name: {{ required "No service name defined. Either 'http' or 'https' is allowed!" .Values.service.scheme }}
|
||||||
protocol: TCP
|
protocol: TCP
|
||||||
port: {{ required "No service port defined!" .Values.service.port }}
|
port: {{ required "No service port defined!" .Values.service.port }}
|
||||||
selector:
|
selector:
|
||||||
|
43
templates/serviceMonitor.yaml
Normal file
43
templates/serviceMonitor.yaml
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
{{- if eq (include "reposilite.serviceMonitor.enabled" $) "true" }}
|
||||||
|
---
|
||||||
|
apiVersion: monitoring.coreos.com/v1
|
||||||
|
kind: ServiceMonitor
|
||||||
|
metadata:
|
||||||
|
{{- with (include "reposilite.serviceMonitor.annotations" . | fromYaml) }}
|
||||||
|
annotations:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
{{- with (include "reposilite.serviceMonitor.labels" . | fromYaml) }}
|
||||||
|
labels:
|
||||||
|
{{- toYaml . | nindent 4 }}
|
||||||
|
{{- end }}
|
||||||
|
name: {{ include "reposilite.fullname" . }}
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
spec:
|
||||||
|
endpoints:
|
||||||
|
- basicAuth:
|
||||||
|
password:
|
||||||
|
key: password
|
||||||
|
name: {{ include "reposilite.secrets.prometheusBasicAuth.name" . }}
|
||||||
|
username:
|
||||||
|
key: username
|
||||||
|
name: {{ include "reposilite.secrets.prometheusBasicAuth.name" . }}
|
||||||
|
enableHttp2: {{ required "The enableHttp2 option of the serviceMonitor is not defined!" .Values.prometheus.metrics.serviceMonitor.enableHttp2 }}
|
||||||
|
followRedirects: {{ required "The followRedirects option of the serviceMonitor is not defined!" .Values.prometheus.metrics.serviceMonitor.followRedirects }}
|
||||||
|
honorLabels: {{ required "The honorLabels option of the serviceMonitor is not defined!" .Values.prometheus.metrics.serviceMonitor.honorLabels }}
|
||||||
|
interval: {{ required "The scrape interval of the serviceMonitor is not defined!" .Values.prometheus.metrics.serviceMonitor.interval }}
|
||||||
|
path: {{ required "The metric path of the serviceMonitor is not defined!" .Values.prometheus.metrics.serviceMonitor.path }}
|
||||||
|
{{- with .Values.prometheus.metrics.serviceMonitor.relabelings }}
|
||||||
|
relabelings:
|
||||||
|
{{- toYaml . | nindent 6 }}
|
||||||
|
{{- end }}
|
||||||
|
scrapeTimeout: {{ required "The scrape timeout of the serviceMonitor is not defined!" .Values.prometheus.metrics.serviceMonitor.scrapeTimeout }}
|
||||||
|
scheme: http
|
||||||
|
targetPort: 8080
|
||||||
|
namespaceSelector:
|
||||||
|
matchNames:
|
||||||
|
- {{ .Release.Namespace }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
{{- include "reposilite.serviceMonitor.selectorLabels" . | nindent 6 }}
|
||||||
|
{{- end }}
|
@@ -7,19 +7,23 @@ release:
|
|||||||
namespace: testing
|
namespace: testing
|
||||||
templates:
|
templates:
|
||||||
- templates/deployment.yaml
|
- templates/deployment.yaml
|
||||||
|
- templates/secretPrometheusBasicAuth.yaml
|
||||||
tests:
|
tests:
|
||||||
- it: Rendering default
|
- it: Rendering default
|
||||||
set: {}
|
set: {}
|
||||||
asserts:
|
asserts:
|
||||||
- hasDocuments:
|
- hasDocuments:
|
||||||
count: 1
|
count: 1
|
||||||
|
template: templates/deployment.yaml
|
||||||
- containsDocument:
|
- containsDocument:
|
||||||
apiVersion: apps/v1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
name: reposilite-unittest
|
name: reposilite-unittest
|
||||||
namespace: testing
|
namespace: testing
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: metadata.annotations
|
path: metadata.annotations
|
||||||
|
template: templates/deployment.yaml
|
||||||
- equal:
|
- equal:
|
||||||
path: metadata.labels
|
path: metadata.labels
|
||||||
value:
|
value:
|
||||||
@@ -28,14 +32,17 @@ tests:
|
|||||||
app.kubernetes.io/name: reposilite
|
app.kubernetes.io/name: reposilite
|
||||||
app.kubernetes.io/version: 0.1.0
|
app.kubernetes.io/version: 0.1.0
|
||||||
helm.sh/chart: reposilite-0.1.0
|
helm.sh/chart: reposilite-0.1.0
|
||||||
|
template: templates/deployment.yaml
|
||||||
- equal:
|
- equal:
|
||||||
path: spec.replicas
|
path: spec.replicas
|
||||||
value: 1
|
value: 1
|
||||||
|
template: templates/deployment.yaml
|
||||||
- isSubset:
|
- isSubset:
|
||||||
path: spec.selector.matchLabels
|
path: spec.selector.matchLabels
|
||||||
content:
|
content:
|
||||||
app.kubernetes.io/instance: reposilite-unittest
|
app.kubernetes.io/instance: reposilite-unittest
|
||||||
app.kubernetes.io/name: reposilite
|
app.kubernetes.io/name: reposilite
|
||||||
|
template: templates/deployment.yaml
|
||||||
- equal:
|
- equal:
|
||||||
path: spec.strategy
|
path: spec.strategy
|
||||||
value:
|
value:
|
||||||
@@ -43,9 +50,10 @@ tests:
|
|||||||
rollingUpdate:
|
rollingUpdate:
|
||||||
maxSurge: 1
|
maxSurge: 1
|
||||||
maxUnavailable: 1
|
maxUnavailable: 1
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.metadata.annotations
|
path: spec.template.metadata.annotations
|
||||||
value: sadsdf
|
template: templates/deployment.yaml
|
||||||
- equal:
|
- equal:
|
||||||
path: spec.template.metadata.labels
|
path: spec.template.metadata.labels
|
||||||
value:
|
value:
|
||||||
@@ -54,25 +62,33 @@ tests:
|
|||||||
app.kubernetes.io/name: reposilite
|
app.kubernetes.io/name: reposilite
|
||||||
app.kubernetes.io/version: 0.1.0
|
app.kubernetes.io/version: 0.1.0
|
||||||
helm.sh/chart: reposilite-0.1.0
|
helm.sh/chart: reposilite-0.1.0
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.affinity
|
path: spec.template.spec.affinity
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.containers[0].args
|
path: spec.template.spec.containers[0].args
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.containers[0].command
|
path: spec.template.spec.containers[0].command
|
||||||
|
template: templates/deployment.yaml
|
||||||
- contains:
|
- contains:
|
||||||
path: spec.template.spec.containers[0].env
|
path: spec.template.spec.containers[0].env
|
||||||
content:
|
content:
|
||||||
name: JAVA_OPTS
|
name: JAVA_OPTS
|
||||||
value: "-Xmx64M"
|
value: "-Xmx64M"
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.containers[0].envFrom
|
path: spec.template.spec.containers[0].envFrom
|
||||||
|
template: templates/deployment.yaml
|
||||||
- equal:
|
- equal:
|
||||||
path: spec.template.spec.containers[0].image
|
path: spec.template.spec.containers[0].image
|
||||||
value: docker.io/dzikoysk/reposilite:0.1.0
|
value: docker.io/dzikoysk/reposilite:0.1.0
|
||||||
|
template: templates/deployment.yaml
|
||||||
- equal:
|
- equal:
|
||||||
path: spec.template.spec.containers[0].imagePullPolicy
|
path: spec.template.spec.containers[0].imagePullPolicy
|
||||||
value: IfNotPresent
|
value: IfNotPresent
|
||||||
|
template: templates/deployment.yaml
|
||||||
- isSubset:
|
- isSubset:
|
||||||
path: spec.template.spec.containers[0].livenessProbe
|
path: spec.template.spec.containers[0].livenessProbe
|
||||||
content:
|
content:
|
||||||
@@ -83,15 +99,18 @@ tests:
|
|||||||
periodSeconds: 60
|
periodSeconds: 60
|
||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
timeoutSeconds: 3
|
timeoutSeconds: 3
|
||||||
|
template: templates/deployment.yaml
|
||||||
- equal:
|
- equal:
|
||||||
path: spec.template.spec.containers[0].name
|
path: spec.template.spec.containers[0].name
|
||||||
value: reposilite
|
value: reposilite
|
||||||
|
template: templates/deployment.yaml
|
||||||
- contains:
|
- contains:
|
||||||
path: spec.template.spec.containers[0].ports
|
path: spec.template.spec.containers[0].ports
|
||||||
content:
|
content:
|
||||||
name: http
|
name: http
|
||||||
containerPort: 8080
|
containerPort: 8080
|
||||||
protocol: TCP
|
protocol: TCP
|
||||||
|
template: templates/deployment.yaml
|
||||||
- isSubset:
|
- isSubset:
|
||||||
path: spec.template.spec.containers[0].readinessProbe
|
path: spec.template.spec.containers[0].readinessProbe
|
||||||
content:
|
content:
|
||||||
@@ -102,42 +121,60 @@ tests:
|
|||||||
periodSeconds: 15
|
periodSeconds: 15
|
||||||
successThreshold: 1
|
successThreshold: 1
|
||||||
timeoutSeconds: 3
|
timeoutSeconds: 3
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.containers[0].resources
|
path: spec.template.spec.containers[0].resources
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.containers[0].securityContext
|
path: spec.template.spec.containers[0].securityContext
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.containers[0].volumeMounts
|
path: spec.template.spec.containers[0].volumeMounts
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.dnsConfig
|
path: spec.template.spec.dnsConfig
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.dnsPolicy
|
path: spec.template.spec.dnsPolicy
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.hostname
|
path: spec.template.spec.hostname
|
||||||
|
template: templates/deployment.yaml
|
||||||
- equal:
|
- equal:
|
||||||
path: spec.template.spec.hostNetwork
|
path: spec.template.spec.hostNetwork
|
||||||
value: false
|
value: false
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.imagePullSecrets
|
path: spec.template.spec.imagePullSecrets
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.initContainers
|
path: spec.template.spec.initContainers
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.nodeSelector
|
path: spec.template.spec.nodeSelector
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.priorityClassName
|
path: spec.template.spec.priorityClassName
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.restartPolicy
|
path: spec.template.spec.restartPolicy
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.subdomain
|
path: spec.template.spec.subdomain
|
||||||
|
template: templates/deployment.yaml
|
||||||
- equal:
|
- equal:
|
||||||
path: spec.template.spec.terminationGracePeriodSeconds
|
path: spec.template.spec.terminationGracePeriodSeconds
|
||||||
value: 60
|
value: 60
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.tolerations
|
path: spec.template.spec.tolerations
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.topologySpreadConstraints
|
path: spec.template.spec.topologySpreadConstraints
|
||||||
|
template: templates/deployment.yaml
|
||||||
- notExists:
|
- notExists:
|
||||||
path: spec.template.spec.volumes
|
path: spec.template.spec.volumes
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test custom replicas
|
- it: Test custom replicas
|
||||||
set:
|
set:
|
||||||
@@ -146,6 +183,7 @@ tests:
|
|||||||
- equal:
|
- equal:
|
||||||
path: spec.replicas
|
path: spec.replicas
|
||||||
value: 3
|
value: 3
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test custom strategy
|
- it: Test custom strategy
|
||||||
set:
|
set:
|
||||||
@@ -162,6 +200,7 @@ tests:
|
|||||||
rollingUpdate:
|
rollingUpdate:
|
||||||
maxSurge: 10
|
maxSurge: 10
|
||||||
maxUnavailable: 5
|
maxUnavailable: 5
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test custom affinity
|
- it: Test custom affinity
|
||||||
set:
|
set:
|
||||||
@@ -188,6 +227,7 @@ tests:
|
|||||||
values:
|
values:
|
||||||
- antarctica-east1
|
- antarctica-east1
|
||||||
- antarctica-west1
|
- antarctica-west1
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test additional arguments
|
- it: Test additional arguments
|
||||||
set:
|
set:
|
||||||
@@ -200,6 +240,7 @@ tests:
|
|||||||
value:
|
value:
|
||||||
- --foo=bar
|
- --foo=bar
|
||||||
- --bar=foo
|
- --bar=foo
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test additional commands
|
- it: Test additional commands
|
||||||
set:
|
set:
|
||||||
@@ -210,6 +251,7 @@ tests:
|
|||||||
path: spec.template.spec.containers[0].command
|
path: spec.template.spec.containers[0].command
|
||||||
value:
|
value:
|
||||||
- /bin/bash
|
- /bin/bash
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test custom imageRegistry and imageRepository
|
- it: Test custom imageRegistry and imageRepository
|
||||||
set:
|
set:
|
||||||
@@ -220,6 +262,7 @@ tests:
|
|||||||
- equal:
|
- equal:
|
||||||
path: spec.template.spec.containers[0].image
|
path: spec.template.spec.containers[0].image
|
||||||
value: registry.example.local/path/special/reposilite:2.0.0
|
value: registry.example.local/path/special/reposilite:2.0.0
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test custom imagePullPolicy
|
- it: Test custom imagePullPolicy
|
||||||
set:
|
set:
|
||||||
@@ -228,17 +271,7 @@ tests:
|
|||||||
- equal:
|
- equal:
|
||||||
path: spec.template.spec.containers[0].imagePullPolicy
|
path: spec.template.spec.containers[0].imagePullPolicy
|
||||||
value: Always
|
value: Always
|
||||||
|
template: templates/deployment.yaml
|
||||||
- it: Test custom port
|
|
||||||
set:
|
|
||||||
service.port: 8443
|
|
||||||
asserts:
|
|
||||||
- contains:
|
|
||||||
path: spec.template.spec.containers[0].ports
|
|
||||||
content:
|
|
||||||
name: http
|
|
||||||
containerPort: 8443
|
|
||||||
protocol: TCP
|
|
||||||
|
|
||||||
- it: Test custom resources
|
- it: Test custom resources
|
||||||
set:
|
set:
|
||||||
@@ -259,6 +292,7 @@ tests:
|
|||||||
requests:
|
requests:
|
||||||
cpu: 25m
|
cpu: 25m
|
||||||
memory: 100MB
|
memory: 100MB
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test custom securityContext
|
- it: Test custom securityContext
|
||||||
set:
|
set:
|
||||||
@@ -285,6 +319,7 @@ tests:
|
|||||||
readOnlyRootFilesystem: true
|
readOnlyRootFilesystem: true
|
||||||
runAsNonRoot: true
|
runAsNonRoot: true
|
||||||
runAsUser: 1000
|
runAsUser: 1000
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test custom volumeMounts
|
- it: Test custom volumeMounts
|
||||||
set:
|
set:
|
||||||
@@ -297,6 +332,7 @@ tests:
|
|||||||
content:
|
content:
|
||||||
name: data
|
name: data
|
||||||
mountPath: /usr/lib/data
|
mountPath: /usr/lib/data
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test dnsConfig
|
- it: Test dnsConfig
|
||||||
set:
|
set:
|
||||||
@@ -311,6 +347,7 @@ tests:
|
|||||||
nameservers:
|
nameservers:
|
||||||
- "8.8.8.8"
|
- "8.8.8.8"
|
||||||
- "8.8.4.4"
|
- "8.8.4.4"
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test dnsPolicy
|
- it: Test dnsPolicy
|
||||||
set:
|
set:
|
||||||
@@ -319,6 +356,7 @@ tests:
|
|||||||
- equal:
|
- equal:
|
||||||
path: spec.template.spec.dnsPolicy
|
path: spec.template.spec.dnsPolicy
|
||||||
value: ClusterFirst
|
value: ClusterFirst
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test hostNetwork, hostname, subdomain
|
- it: Test hostNetwork, hostname, subdomain
|
||||||
set:
|
set:
|
||||||
@@ -329,12 +367,15 @@ tests:
|
|||||||
- equal:
|
- equal:
|
||||||
path: spec.template.spec.hostNetwork
|
path: spec.template.spec.hostNetwork
|
||||||
value: true
|
value: true
|
||||||
|
template: templates/deployment.yaml
|
||||||
- equal:
|
- equal:
|
||||||
path: spec.template.spec.hostname
|
path: spec.template.spec.hostname
|
||||||
value: pg-exporter
|
value: pg-exporter
|
||||||
|
template: templates/deployment.yaml
|
||||||
- equal:
|
- equal:
|
||||||
path: spec.template.spec.subdomain
|
path: spec.template.spec.subdomain
|
||||||
value: exporters.internal
|
value: exporters.internal
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test imagePullSecrets
|
- it: Test imagePullSecrets
|
||||||
set:
|
set:
|
||||||
@@ -347,6 +388,7 @@ tests:
|
|||||||
value:
|
value:
|
||||||
- name: my-pull-secret
|
- name: my-pull-secret
|
||||||
- name: my-special-secret
|
- name: my-special-secret
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test nodeSelector
|
- it: Test nodeSelector
|
||||||
set:
|
set:
|
||||||
@@ -357,6 +399,7 @@ tests:
|
|||||||
path: spec.template.spec.nodeSelector
|
path: spec.template.spec.nodeSelector
|
||||||
value:
|
value:
|
||||||
foo: bar
|
foo: bar
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test priorityClassName
|
- it: Test priorityClassName
|
||||||
set:
|
set:
|
||||||
@@ -365,6 +408,7 @@ tests:
|
|||||||
- equal:
|
- equal:
|
||||||
path: spec.template.spec.priorityClassName
|
path: spec.template.spec.priorityClassName
|
||||||
value: my-priority
|
value: my-priority
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test restartPolicy
|
- it: Test restartPolicy
|
||||||
set:
|
set:
|
||||||
@@ -373,6 +417,7 @@ tests:
|
|||||||
- equal:
|
- equal:
|
||||||
path: spec.template.spec.restartPolicy
|
path: spec.template.spec.restartPolicy
|
||||||
value: Always
|
value: Always
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test custom securityContext
|
- it: Test custom securityContext
|
||||||
set:
|
set:
|
||||||
@@ -389,6 +434,7 @@ tests:
|
|||||||
runAsNonRoot: true
|
runAsNonRoot: true
|
||||||
runAsUser: 1000
|
runAsUser: 1000
|
||||||
runAsGroup: 1000
|
runAsGroup: 1000
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test terminationGracePeriodSeconds
|
- it: Test terminationGracePeriodSeconds
|
||||||
set:
|
set:
|
||||||
@@ -397,6 +443,7 @@ tests:
|
|||||||
- equal:
|
- equal:
|
||||||
path: spec.template.spec.terminationGracePeriodSeconds
|
path: spec.template.spec.terminationGracePeriodSeconds
|
||||||
value: 120
|
value: 120
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test tolerations
|
- it: Test tolerations
|
||||||
set:
|
set:
|
||||||
@@ -413,6 +460,7 @@ tests:
|
|||||||
operator: Equal
|
operator: Equal
|
||||||
value: ssd
|
value: ssd
|
||||||
effect: NoSchedule
|
effect: NoSchedule
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test topologySpreadConstraints
|
- it: Test topologySpreadConstraints
|
||||||
set:
|
set:
|
||||||
@@ -431,6 +479,7 @@ tests:
|
|||||||
labelSelector:
|
labelSelector:
|
||||||
matchLabels:
|
matchLabels:
|
||||||
app.kubernetes.io/instance: reposilite
|
app.kubernetes.io/instance: reposilite
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Test additional volumes
|
- it: Test additional volumes
|
||||||
set:
|
set:
|
||||||
@@ -445,3 +494,4 @@ tests:
|
|||||||
- name: data
|
- name: data
|
||||||
hostPath:
|
hostPath:
|
||||||
path: /usr/lib/data
|
path: /usr/lib/data
|
||||||
|
template: templates/deployment.yaml
|
@@ -7,6 +7,7 @@ release:
|
|||||||
namespace: testing
|
namespace: testing
|
||||||
templates:
|
templates:
|
||||||
- templates/deployment.yaml
|
- templates/deployment.yaml
|
||||||
|
- templates/secretPrometheusBasicAuth.yaml
|
||||||
tests:
|
tests:
|
||||||
- it: Rendering default volumes and volumeMounts with persistent volume claim
|
- it: Rendering default volumes and volumeMounts with persistent volume claim
|
||||||
set:
|
set:
|
||||||
@@ -17,17 +18,20 @@ tests:
|
|||||||
content:
|
content:
|
||||||
name: REPOSILITE_DATA
|
name: REPOSILITE_DATA
|
||||||
value: /app/data
|
value: /app/data
|
||||||
|
template: templates/deployment.yaml
|
||||||
- contains:
|
- contains:
|
||||||
path: spec.template.spec.containers[0].volumeMounts
|
path: spec.template.spec.containers[0].volumeMounts
|
||||||
content:
|
content:
|
||||||
name: data
|
name: data
|
||||||
mountPath: /app/data
|
mountPath: /app/data
|
||||||
|
template: templates/deployment.yaml
|
||||||
- contains:
|
- contains:
|
||||||
path: spec.template.spec.volumes
|
path: spec.template.spec.volumes
|
||||||
content:
|
content:
|
||||||
name: data
|
name: data
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: reposilite-unittest
|
claimName: reposilite-unittest
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Rendering custom volumes and volumeMounts with persistent volume claim
|
- it: Rendering custom volumes and volumeMounts with persistent volume claim
|
||||||
set:
|
set:
|
||||||
@@ -39,17 +43,20 @@ tests:
|
|||||||
content:
|
content:
|
||||||
name: REPOSILITE_DATA
|
name: REPOSILITE_DATA
|
||||||
value: /usr/lib/reposilite/data
|
value: /usr/lib/reposilite/data
|
||||||
|
template: templates/deployment.yaml
|
||||||
- contains:
|
- contains:
|
||||||
path: spec.template.spec.containers[0].volumeMounts
|
path: spec.template.spec.containers[0].volumeMounts
|
||||||
content:
|
content:
|
||||||
name: data
|
name: data
|
||||||
mountPath: /usr/lib/reposilite/data
|
mountPath: /usr/lib/reposilite/data
|
||||||
|
template: templates/deployment.yaml
|
||||||
- contains:
|
- contains:
|
||||||
path: spec.template.spec.volumes
|
path: spec.template.spec.volumes
|
||||||
content:
|
content:
|
||||||
name: data
|
name: data
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: reposilite-unittest
|
claimName: reposilite-unittest
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
|
||||||
- it: Rendering custom volumes and volumeMounts with persistent volume claim
|
- it: Rendering custom volumes and volumeMounts with persistent volume claim
|
||||||
set:
|
set:
|
||||||
@@ -62,14 +69,17 @@ tests:
|
|||||||
content:
|
content:
|
||||||
name: REPOSILITE_DATA
|
name: REPOSILITE_DATA
|
||||||
value: /app/data
|
value: /app/data
|
||||||
|
template: templates/deployment.yaml
|
||||||
- contains:
|
- contains:
|
||||||
path: spec.template.spec.containers[0].volumeMounts
|
path: spec.template.spec.containers[0].volumeMounts
|
||||||
content:
|
content:
|
||||||
name: data
|
name: data
|
||||||
mountPath: /app/data
|
mountPath: /app/data
|
||||||
|
template: templates/deployment.yaml
|
||||||
- contains:
|
- contains:
|
||||||
path: spec.template.spec.volumes
|
path: spec.template.spec.volumes
|
||||||
content:
|
content:
|
||||||
name: data
|
name: data
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: my-custom-pvc
|
claimName: my-custom-pvc
|
||||||
|
template: templates/deployment.yaml
|
37
unittests/deployment/prometheusPodMonitor.yaml
Normal file
37
unittests/deployment/prometheusPodMonitor.yaml
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
chart:
|
||||||
|
appVersion: 0.1.0
|
||||||
|
version: 0.1.0
|
||||||
|
suite: Add prometheus basic auth variables
|
||||||
|
release:
|
||||||
|
name: reposilite-unittest
|
||||||
|
namespace: testing
|
||||||
|
templates:
|
||||||
|
- templates/deployment.yaml
|
||||||
|
- templates/secretPrometheusBasicAuth.yaml
|
||||||
|
tests:
|
||||||
|
- it: Rendering default environment variables with enabled prometheus metrics podMonitor
|
||||||
|
set:
|
||||||
|
prometheus.metrics.enabled: true
|
||||||
|
prometheus.metrics.podMonitor.enabled: true
|
||||||
|
asserts:
|
||||||
|
- exists:
|
||||||
|
path: spec.template.metadata.annotations.checksum/secret-reposilite-unittest-basic-auth-credentials
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
- contains:
|
||||||
|
path: spec.template.spec.containers[0].env
|
||||||
|
content:
|
||||||
|
name: REPOSILITE_PROMETHEUS_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: reposilite-unittest-basic-auth-credentials
|
||||||
|
key: password
|
||||||
|
template: templates/deployment.yaml
|
||||||
|
- contains:
|
||||||
|
path: spec.template.spec.containers[0].env
|
||||||
|
content:
|
||||||
|
name: REPOSILITE_PROMETHEUS_USER
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: reposilite-unittest-basic-auth-credentials
|
||||||
|
key: username
|
||||||
|
template: templates/deployment.yaml
|
177
unittests/podMonitors/podMonitor.yaml
Normal file
177
unittests/podMonitors/podMonitor.yaml
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
chart:
|
||||||
|
appVersion: 0.1.0
|
||||||
|
version: 0.1.0
|
||||||
|
suite: PodMonitor template
|
||||||
|
release:
|
||||||
|
name: reposilite-unittest
|
||||||
|
namespace: testing
|
||||||
|
templates:
|
||||||
|
- templates/podMonitor.yaml
|
||||||
|
tests:
|
||||||
|
- it: Skip podMonitor when metrics are disabled.
|
||||||
|
set:
|
||||||
|
prometheus.metrics.enabled: false
|
||||||
|
prometheus.metrics.podMonitor.enabled: true
|
||||||
|
prometheus.metrics.serviceMonitor.enabled: true
|
||||||
|
asserts:
|
||||||
|
- hasDocuments:
|
||||||
|
count: 0
|
||||||
|
|
||||||
|
- it: Skip podMonitor when podMonitor is disabled.
|
||||||
|
set:
|
||||||
|
prometheus.metrics.enabled: true
|
||||||
|
prometheus.metrics.podMonitor.enabled: false
|
||||||
|
asserts:
|
||||||
|
- hasDocuments:
|
||||||
|
count: 0
|
||||||
|
|
||||||
|
- it: Skip podMonitor when both monitor types are enabled.
|
||||||
|
set:
|
||||||
|
prometheus.metrics.enabled: true
|
||||||
|
prometheus.metrics.podMonitor.enabled: true
|
||||||
|
prometheus.metrics.serviceMonitor.enabled: true
|
||||||
|
asserts:
|
||||||
|
- hasDocuments:
|
||||||
|
count: 0
|
||||||
|
|
||||||
|
- it: Rendering podMonitor with default values - enabled manually.
|
||||||
|
set:
|
||||||
|
prometheus.metrics.enabled: true
|
||||||
|
prometheus.metrics.podMonitor.enabled: true
|
||||||
|
asserts:
|
||||||
|
- hasDocuments:
|
||||||
|
count: 1
|
||||||
|
- containsDocument:
|
||||||
|
apiVersion: monitoring.coreos.com/v1
|
||||||
|
kind: PodMonitor
|
||||||
|
name: reposilite-unittest
|
||||||
|
namespace: testing
|
||||||
|
- notExists:
|
||||||
|
path: metadata.annotations
|
||||||
|
- equal:
|
||||||
|
path: metadata.labels
|
||||||
|
value:
|
||||||
|
app.kubernetes.io/instance: reposilite-unittest
|
||||||
|
app.kubernetes.io/managed-by: Helm
|
||||||
|
app.kubernetes.io/name: reposilite
|
||||||
|
app.kubernetes.io/version: 0.1.0
|
||||||
|
helm.sh/chart: reposilite-0.1.0
|
||||||
|
- isSubset:
|
||||||
|
path: spec.podMetricsEndpoints[0].basicAuth
|
||||||
|
content:
|
||||||
|
password:
|
||||||
|
key: password
|
||||||
|
name: reposilite-unittest-basic-auth-credentials
|
||||||
|
username:
|
||||||
|
key: username
|
||||||
|
name: reposilite-unittest-basic-auth-credentials
|
||||||
|
- equal:
|
||||||
|
path: spec.podMetricsEndpoints[0].enableHttp2
|
||||||
|
value: true
|
||||||
|
- equal:
|
||||||
|
path: spec.podMetricsEndpoints[0].followRedirects
|
||||||
|
value: false
|
||||||
|
- equal:
|
||||||
|
path: spec.podMetricsEndpoints[0].honorLabels
|
||||||
|
value: false
|
||||||
|
- equal:
|
||||||
|
path: spec.podMetricsEndpoints[0].interval
|
||||||
|
value: 60s
|
||||||
|
- equal:
|
||||||
|
path: spec.podMetricsEndpoints[0].path
|
||||||
|
value: /metrics
|
||||||
|
- equal:
|
||||||
|
path: spec.podMetricsEndpoints[0].port
|
||||||
|
value: "8080"
|
||||||
|
- notExists:
|
||||||
|
path: spec.podMetricsEndpoints[0].relabelings
|
||||||
|
- equal:
|
||||||
|
path: spec.podMetricsEndpoints[0].scrapeTimeout
|
||||||
|
value: 30s
|
||||||
|
- equal:
|
||||||
|
path: spec.podMetricsEndpoints[0].scheme
|
||||||
|
value: http
|
||||||
|
- contains:
|
||||||
|
path: spec.namespaceSelector.matchNames
|
||||||
|
content:
|
||||||
|
testing
|
||||||
|
- equal:
|
||||||
|
path: spec.selector.matchLabels
|
||||||
|
value:
|
||||||
|
app.kubernetes.io/instance: reposilite-unittest
|
||||||
|
app.kubernetes.io/name: reposilite
|
||||||
|
|
||||||
|
- it: Render podMonitor with custom annotations and labels.
|
||||||
|
set:
|
||||||
|
prometheus.metrics.enabled: true
|
||||||
|
prometheus.metrics.podMonitor.enabled: true
|
||||||
|
prometheus.metrics.podMonitor.annotations:
|
||||||
|
foo: bar
|
||||||
|
prometheus.metrics.podMonitor.labels:
|
||||||
|
bar: foo
|
||||||
|
asserts:
|
||||||
|
- equal:
|
||||||
|
path: metadata.annotations
|
||||||
|
value:
|
||||||
|
foo: bar
|
||||||
|
- equal:
|
||||||
|
path: metadata.labels
|
||||||
|
value:
|
||||||
|
app.kubernetes.io/instance: reposilite-unittest
|
||||||
|
app.kubernetes.io/managed-by: Helm
|
||||||
|
app.kubernetes.io/name: reposilite
|
||||||
|
app.kubernetes.io/version: 0.1.0
|
||||||
|
bar: foo
|
||||||
|
helm.sh/chart: reposilite-0.1.0
|
||||||
|
|
||||||
|
- it: Change defaults
|
||||||
|
set:
|
||||||
|
prometheus.metrics.enabled: true
|
||||||
|
prometheus.metrics.podMonitor.enabled: true
|
||||||
|
prometheus.metrics.podMonitor.enableHttp2: false
|
||||||
|
prometheus.metrics.podMonitor.followRedirects: true
|
||||||
|
prometheus.metrics.podMonitor.honorLabels: true
|
||||||
|
prometheus.metrics.podMonitor.interval: "180s"
|
||||||
|
prometheus.metrics.podMonitor.path: "/my-metrics"
|
||||||
|
prometheus.metrics.podMonitor.relabelings:
|
||||||
|
- sourceLabels: [ container ]
|
||||||
|
separator: ";"
|
||||||
|
regex: "app"
|
||||||
|
replacement: "$1"
|
||||||
|
action: "drop"
|
||||||
|
prometheus.metrics.podMonitor.scrapeTimeout: "5s"
|
||||||
|
asserts:
|
||||||
|
- hasDocuments:
|
||||||
|
count: 1
|
||||||
|
- equal:
|
||||||
|
path: spec.podMetricsEndpoints[0].enableHttp2
|
||||||
|
value: false
|
||||||
|
- equal:
|
||||||
|
path: spec.podMetricsEndpoints[0].followRedirects
|
||||||
|
value: true
|
||||||
|
- equal:
|
||||||
|
path: spec.podMetricsEndpoints[0].honorLabels
|
||||||
|
value: true
|
||||||
|
- equal:
|
||||||
|
path: spec.podMetricsEndpoints[0].interval
|
||||||
|
value: 180s
|
||||||
|
- equal:
|
||||||
|
path: spec.podMetricsEndpoints[0].path
|
||||||
|
value: /my-metrics
|
||||||
|
- equal:
|
||||||
|
path: spec.podMetricsEndpoints[0].port
|
||||||
|
value: "8080"
|
||||||
|
- contains:
|
||||||
|
path: spec.podMetricsEndpoints[0].relabelings
|
||||||
|
content:
|
||||||
|
sourceLabels: [ container ]
|
||||||
|
separator: ";"
|
||||||
|
regex: "app"
|
||||||
|
replacement: "$1"
|
||||||
|
action: "drop"
|
||||||
|
- equal:
|
||||||
|
path: spec.podMetricsEndpoints[0].scrapeTimeout
|
||||||
|
value: 5s
|
||||||
|
- equal:
|
||||||
|
path: spec.podMetricsEndpoints[0].scheme
|
||||||
|
value: http
|
177
unittests/serviceMonitors/serviceMonitor.yaml
Normal file
177
unittests/serviceMonitors/serviceMonitor.yaml
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
chart:
|
||||||
|
appVersion: 0.1.0
|
||||||
|
version: 0.1.0
|
||||||
|
suite: ServiceMonitor template
|
||||||
|
release:
|
||||||
|
name: reposilite-unittest
|
||||||
|
namespace: testing
|
||||||
|
templates:
|
||||||
|
- templates/serviceMonitor.yaml
|
||||||
|
tests:
|
||||||
|
- it: Skip serviceMonitor when service is disabled.
|
||||||
|
set:
|
||||||
|
prometheus.metrics.enabled: true
|
||||||
|
prometheus.metrics.serviceMonitor.enabled: true
|
||||||
|
service.enabled: false
|
||||||
|
asserts:
|
||||||
|
- hasDocuments:
|
||||||
|
count: 0
|
||||||
|
|
||||||
|
- it: Skip serviceMonitor when metrics are disabled.
|
||||||
|
set:
|
||||||
|
prometheus.metrics.enabled: false
|
||||||
|
prometheus.metrics.serviceMonitor.enabled: true
|
||||||
|
services.http.enabled: true
|
||||||
|
asserts:
|
||||||
|
- hasDocuments:
|
||||||
|
count: 0
|
||||||
|
|
||||||
|
- it: Skip serviceMonitor when serviceMonitor is disabled.
|
||||||
|
set:
|
||||||
|
prometheus.metrics.enabled: true
|
||||||
|
prometheus.metrics.serviceMonitor.enabled: false
|
||||||
|
services.http.enabled: true
|
||||||
|
asserts:
|
||||||
|
- hasDocuments:
|
||||||
|
count: 0
|
||||||
|
|
||||||
|
- it: Rendering serviceMonitor with default values - enabled manually.
|
||||||
|
set:
|
||||||
|
prometheus.metrics.enabled: true
|
||||||
|
prometheus.metrics.serviceMonitor.enabled: true
|
||||||
|
asserts:
|
||||||
|
- hasDocuments:
|
||||||
|
count: 1
|
||||||
|
- containsDocument:
|
||||||
|
apiVersion: monitoring.coreos.com/v1
|
||||||
|
kind: ServiceMonitor
|
||||||
|
name: reposilite-unittest
|
||||||
|
namespace: testing
|
||||||
|
- notExists:
|
||||||
|
path: metadata.annotations
|
||||||
|
- equal:
|
||||||
|
path: metadata.labels
|
||||||
|
value:
|
||||||
|
app.kubernetes.io/instance: reposilite-unittest
|
||||||
|
app.kubernetes.io/managed-by: Helm
|
||||||
|
app.kubernetes.io/name: reposilite
|
||||||
|
app.kubernetes.io/version: 0.1.0
|
||||||
|
helm.sh/chart: reposilite-0.1.0
|
||||||
|
- isSubset:
|
||||||
|
path: spec.endpoints[0].basicAuth
|
||||||
|
content:
|
||||||
|
password:
|
||||||
|
key: password
|
||||||
|
name: reposilite-unittest-basic-auth-credentials
|
||||||
|
username:
|
||||||
|
key: username
|
||||||
|
name: reposilite-unittest-basic-auth-credentials
|
||||||
|
- equal:
|
||||||
|
path: spec.endpoints[0].enableHttp2
|
||||||
|
value: true
|
||||||
|
- equal:
|
||||||
|
path: spec.endpoints[0].followRedirects
|
||||||
|
value: false
|
||||||
|
- equal:
|
||||||
|
path: spec.endpoints[0].honorLabels
|
||||||
|
value: false
|
||||||
|
- equal:
|
||||||
|
path: spec.endpoints[0].interval
|
||||||
|
value: 60s
|
||||||
|
- equal:
|
||||||
|
path: spec.endpoints[0].path
|
||||||
|
value: /metrics
|
||||||
|
- notExists:
|
||||||
|
path: spec.endpoints[0].relabelings
|
||||||
|
- equal:
|
||||||
|
path: spec.endpoints[0].scrapeTimeout
|
||||||
|
value: 30s
|
||||||
|
- equal:
|
||||||
|
path: spec.endpoints[0].scheme
|
||||||
|
value: http
|
||||||
|
- equal:
|
||||||
|
path: spec.endpoints[0].targetPort
|
||||||
|
value: 8080
|
||||||
|
- contains:
|
||||||
|
path: spec.namespaceSelector.matchNames
|
||||||
|
content:
|
||||||
|
testing
|
||||||
|
- equal:
|
||||||
|
path: spec.selector.matchLabels
|
||||||
|
value:
|
||||||
|
app.kubernetes.io/instance: reposilite-unittest
|
||||||
|
app.kubernetes.io/name: reposilite
|
||||||
|
app.kubernetes.io/service-name: http
|
||||||
|
|
||||||
|
- it: Render serviceMonitor with custom annotations and labels.
|
||||||
|
set:
|
||||||
|
prometheus.metrics.enabled: true
|
||||||
|
prometheus.metrics.serviceMonitor.enabled: true
|
||||||
|
prometheus.metrics.serviceMonitor.annotations:
|
||||||
|
foo: bar
|
||||||
|
prometheus.metrics.serviceMonitor.labels:
|
||||||
|
bar: foo
|
||||||
|
asserts:
|
||||||
|
- equal:
|
||||||
|
path: metadata.annotations
|
||||||
|
value:
|
||||||
|
foo: bar
|
||||||
|
- equal:
|
||||||
|
path: metadata.labels
|
||||||
|
value:
|
||||||
|
app.kubernetes.io/instance: reposilite-unittest
|
||||||
|
app.kubernetes.io/managed-by: Helm
|
||||||
|
app.kubernetes.io/name: reposilite
|
||||||
|
app.kubernetes.io/version: 0.1.0
|
||||||
|
bar: foo
|
||||||
|
helm.sh/chart: reposilite-0.1.0
|
||||||
|
|
||||||
|
- it: Change defaults
|
||||||
|
set:
|
||||||
|
prometheus.metrics.enabled: true
|
||||||
|
prometheus.metrics.serviceMonitor.enabled: true
|
||||||
|
prometheus.metrics.serviceMonitor.enableHttp2: false
|
||||||
|
prometheus.metrics.serviceMonitor.followRedirects: true
|
||||||
|
prometheus.metrics.serviceMonitor.honorLabels: true
|
||||||
|
prometheus.metrics.serviceMonitor.interval: "180s"
|
||||||
|
prometheus.metrics.serviceMonitor.path: "/my-metrics"
|
||||||
|
prometheus.metrics.serviceMonitor.relabelings:
|
||||||
|
- sourceLabels: [ container ]
|
||||||
|
separator: ";"
|
||||||
|
regex: "app"
|
||||||
|
replacement: "$1"
|
||||||
|
action: "drop"
|
||||||
|
prometheus.metrics.serviceMonitor.scrapeTimeout: "5s"
|
||||||
|
prometheus.metrics.serviceMonitor.scheme: "http"
|
||||||
|
asserts:
|
||||||
|
- hasDocuments:
|
||||||
|
count: 1
|
||||||
|
- equal:
|
||||||
|
path: spec.endpoints[0].enableHttp2
|
||||||
|
value: false
|
||||||
|
- equal:
|
||||||
|
path: spec.endpoints[0].followRedirects
|
||||||
|
value: true
|
||||||
|
- equal:
|
||||||
|
path: spec.endpoints[0].honorLabels
|
||||||
|
value: true
|
||||||
|
- equal:
|
||||||
|
path: spec.endpoints[0].interval
|
||||||
|
value: 180s
|
||||||
|
- equal:
|
||||||
|
path: spec.endpoints[0].path
|
||||||
|
value: /my-metrics
|
||||||
|
- contains:
|
||||||
|
path: spec.endpoints[0].relabelings
|
||||||
|
content:
|
||||||
|
sourceLabels: [ container ]
|
||||||
|
separator: ";"
|
||||||
|
regex: "app"
|
||||||
|
replacement: "$1"
|
||||||
|
action: "drop"
|
||||||
|
- equal:
|
||||||
|
path: spec.endpoints[0].scrapeTimeout
|
||||||
|
value: 5s
|
||||||
|
- equal:
|
||||||
|
path: spec.endpoints[0].scheme
|
||||||
|
value: http
|
@@ -24,8 +24,10 @@ tests:
|
|||||||
kind: Service
|
kind: Service
|
||||||
name: reposilite-unittest
|
name: reposilite-unittest
|
||||||
namespace: testing
|
namespace: testing
|
||||||
- notExists:
|
- equal:
|
||||||
path: metadata.annotations
|
path: metadata.annotations
|
||||||
|
value:
|
||||||
|
app.kubernetes.io/service-name: http
|
||||||
- equal:
|
- equal:
|
||||||
path: metadata.labels
|
path: metadata.labels
|
||||||
value:
|
value:
|
||||||
@@ -110,6 +112,7 @@ tests:
|
|||||||
- equal:
|
- equal:
|
||||||
path: metadata.annotations
|
path: metadata.annotations
|
||||||
value:
|
value:
|
||||||
|
app.kubernetes.io/service-name: http
|
||||||
foo: bar
|
foo: bar
|
||||||
- equal:
|
- equal:
|
||||||
path: metadata.labels
|
path: metadata.labels
|
||||||
|
59
values.yaml
59
values.yaml
@@ -356,6 +356,64 @@ persistentVolumeClaim:
|
|||||||
storageClass: ""
|
storageClass: ""
|
||||||
|
|
||||||
|
|
||||||
|
## @section Prometheus
|
||||||
|
prometheus:
|
||||||
|
## @param prometheus.metrics.enabled Enable of scraping metrics by Prometheus.
|
||||||
|
## @param prometheus.metrics.basicAuthUsername Username for basic auth. The username and password is required by reposilite to expose metrics. Default: random alpha numeric string.
|
||||||
|
## @param prometheus.metrics.enabled Enable of Password for basic auth. The username and password is required by reposilite to expose metrics. Default random alpha numeric string.
|
||||||
|
metrics:
|
||||||
|
enabled: false
|
||||||
|
basicAuthUsername: "my-username"
|
||||||
|
basicAuthPassword: "my-password"
|
||||||
|
|
||||||
|
## @param prometheus.metrics.podMonitor.enabled Enable creation of a podMonitor. Excludes the existence of a serviceMonitor resource.
|
||||||
|
## @param prometheus.metrics.podMonitor.annotations Additional podMonitor annotations.
|
||||||
|
## @param prometheus.metrics.podMonitor.enableHttp2 Enable HTTP2.
|
||||||
|
## @param prometheus.metrics.podMonitor.followRedirects FollowRedirects configures whether scrape requests follow HTTP 3xx redirects.
|
||||||
|
## @param prometheus.metrics.podMonitor.honorLabels Honor labels.
|
||||||
|
## @param prometheus.metrics.podMonitor.labels Additional podMonitor labels.
|
||||||
|
## @param prometheus.metrics.podMonitor.interval Interval at which metrics should be scraped. If not specified Prometheus' global scrape interval is used.
|
||||||
|
## @param prometheus.metrics.podMonitor.path HTTP path for scraping Prometheus metrics.
|
||||||
|
## @param prometheus.metrics.podMonitor.relabelings RelabelConfigs to apply to samples before scraping. Prometheus Operator automatically adds relabelings for a few standard Kubernetes fields.
|
||||||
|
## @param prometheus.metrics.podMonitor.scrapeTimeout Timeout after which the scrape is ended. If not specified, global Prometheus scrape timeout is used.
|
||||||
|
podMonitor:
|
||||||
|
enabled: false
|
||||||
|
annotations: {}
|
||||||
|
enableHttp2: true
|
||||||
|
followRedirects: false
|
||||||
|
honorLabels: false
|
||||||
|
labels: {}
|
||||||
|
interval: "60s"
|
||||||
|
path: "/metrics"
|
||||||
|
relabelings: []
|
||||||
|
scrapeTimeout: "30s"
|
||||||
|
|
||||||
|
## @param prometheus.metrics.serviceMonitor.enabled Enable creation of a serviceMonitor. Excludes the existence of a podMonitor resource.
|
||||||
|
## @param prometheus.metrics.serviceMonitor.annotations Additional serviceMonitor annotations.
|
||||||
|
## @param prometheus.metrics.serviceMonitor.labels Additional serviceMonitor labels.
|
||||||
|
## @param prometheus.metrics.serviceMonitor.enableHttp2 Enable HTTP2.
|
||||||
|
## @param prometheus.metrics.serviceMonitor.followRedirects FollowRedirects configures whether scrape requests follow HTTP 3xx redirects.
|
||||||
|
## @param prometheus.metrics.serviceMonitor.honorLabels Honor labels.
|
||||||
|
## @param prometheus.metrics.serviceMonitor.interval Interval at which metrics should be scraped. If not specified Prometheus' global scrape interval is used.
|
||||||
|
## @param prometheus.metrics.serviceMonitor.path HTTP path for scraping Prometheus metrics.
|
||||||
|
## @param prometheus.metrics.serviceMonitor.relabelings RelabelConfigs to apply to samples before scraping. Prometheus Operator automatically adds relabelings for a few standard Kubernetes fields.
|
||||||
|
## @param prometheus.metrics.serviceMonitor.scrapeTimeout Timeout after which the scrape is ended. If not specified, global Prometheus scrape timeout is used.
|
||||||
|
## @param prometheus.metrics.serviceMonitor.scheme HTTP scheme to use for scraping. For example `http` or `https`.
|
||||||
|
## @param prometheus.metrics.serviceMonitor.tlsConfig TLS configuration to use when scraping the metric endpoint by Prometheus.
|
||||||
|
## @skip prometheus.metrics.serviceMonitor.tlsConfig Skip individual TLS configuration.
|
||||||
|
serviceMonitor:
|
||||||
|
enabled: false
|
||||||
|
annotations: {}
|
||||||
|
labels: {}
|
||||||
|
enableHttp2: true
|
||||||
|
followRedirects: false
|
||||||
|
honorLabels: false
|
||||||
|
interval: "60s"
|
||||||
|
path: "/metrics"
|
||||||
|
relabelings: []
|
||||||
|
scrapeTimeout: "30s"
|
||||||
|
|
||||||
|
|
||||||
## @section Service
|
## @section Service
|
||||||
## @param service.enabled Enable the service.
|
## @param service.enabled Enable the service.
|
||||||
## @param service.annotations Additional service annotations.
|
## @param service.annotations Additional service annotations.
|
||||||
@@ -383,6 +441,7 @@ service:
|
|||||||
loadBalancerIP: ""
|
loadBalancerIP: ""
|
||||||
loadBalancerSourceRanges: []
|
loadBalancerSourceRanges: []
|
||||||
port: 8080
|
port: 8080
|
||||||
|
scheme: http
|
||||||
sessionAffinity: "None"
|
sessionAffinity: "None"
|
||||||
sessionAffinityConfig: {}
|
sessionAffinityConfig: {}
|
||||||
type: "ClusterIP"
|
type: "ClusterIP"
|
||||||
|
Reference in New Issue
Block a user